Match the OpenAI API key placeholders to the actual lowercase sk- prefix in the settings UI.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Standardize remaining runtime settings copy to English, namespace provider settings selectors,
and apply the sentence-case cleanup flagged in review.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Standardize reviewed UI copy to English, namespace plugin CSS selectors,
and replace ad hoc SVG creation with shared Obsidian-friendly icons.
Also remove the empty fundingUrl field and start tracking styles.css
so the review fixes ship with the plugin.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(ui): consolidate settings architecture and review fixes
Remove redundant settings/provider implementations to reduce maintenance overhead and align the UI with Obsidian helpers and English-only labels. Also ignore local review docs and update the release guide header section to English.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore(repo): ignore local claude and changelog docs
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Normalize stringification of status/validation values and apply sentence-case UI text to satisfy review requirements. Update the review documentation to the latest comment.
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: address reviewbot feedback and update tests
Align request handling with Obsidian requestUrl and clean up UI text/lint directives while updating tests for the new mocks.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* chore: ignore release_log.txt
Add release_log.txt to gitignore to keep local release logs out of version control.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: align requesturl handling with review feedback
centralize requesturl availability errors, bind provider defaults once, and stabilize timeout test.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: address reviewbot required issues
Normalize UI sentence case and tighten error/string handling to satisfy Obsidian reviewbot checks.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(ui): restore brand casing in settings
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(ui): apply sentence case to provider labels
Align provider labels and descriptions with sentence case rules and add updated Obsidian review notes.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(ui): align emoji labels with sentence case
Normalize emoji-led provider labels to sentence case and add latest Obsidian review notes.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: address reviewbot feedback and update tests
Align request handling with Obsidian requestUrl and clean up UI text/lint directives while updating tests for the new mocks.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* chore: ignore release_log.txt
Add release_log.txt to gitignore to keep local release logs out of version control.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: align requesturl handling with review feedback
centralize requesturl availability errors, bind provider defaults once, and stabilize timeout test.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: address reviewbot required issues
Normalize UI sentence case and tighten error/string handling to satisfy Obsidian reviewbot checks.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(ui): restore brand casing in settings
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(ui): apply sentence case to provider labels
Align provider labels and descriptions with sentence case rules and add updated Obsidian review notes.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: address reviewbot feedback and update tests
Align request handling with Obsidian requestUrl and clean up UI text/lint directives while updating tests for the new mocks.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* chore: ignore release_log.txt
Add release_log.txt to gitignore to keep local release logs out of version control.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: align requesturl handling with review feedback
centralize requesturl availability errors, bind provider defaults once, and stabilize timeout test.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: address reviewbot required issues
Normalize UI sentence case and tighten error/string handling to satisfy Obsidian reviewbot checks.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(ui): restore brand casing in settings
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: address reviewbot feedback and update tests
Align request handling with Obsidian requestUrl and clean up UI text/lint directives while updating tests for the new mocks.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* chore: ignore release_log.txt
Add release_log.txt to gitignore to keep local release logs out of version control.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: align requesturl handling with review feedback
centralize requesturl availability errors, bind provider defaults once, and stabilize timeout test.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
- add eslint-enable directive to SettingsTab.ts
- replace console.group/time with debug-based alternatives
- fix deprecated substr with slice
- fix function order for DOM_AVAILABLE check
- replace style.setProperty with setAttribute
- change settings error heading
* chore: help release automation and bump version to 3.0.13 (#51)
* test: verify Claude Code Review with new OAuth token
* chore: remove dev artifacts and update .gitignore
- Remove lint output files from tracking
- Remove Claude Code local settings
- Remove agent documentation files
- Update .gitignore to prevent future tracking
* chore: bump version to 3.0.12 for release
* chore: bump version to 3.0.13 and automate styles.css generation
* fix: address code review feedback
- Improved CSS build script for cross-platform compatibility
- Removed test comment from README
- Added EOF newlines to JSON files per POSIX standards
Co-authored-by: chatgpt-codex-connector <codex@chatgpt.com>
---------
Co-authored-by: chatgpt-codex-connector <codex@chatgpt.com>
* refactor: address PR #8004 review comments and fix lint errors
* fix: address CI failures and code review feedback
* Refactor: comprehensive fix for lint errors and type safety regressions
* chore: trigger CI and Claude Code Review workflows
* fix: address PR #8004 review feedback and improve type safety
* fix: restore legacy password factors and fix formatting
* fix: finalize PR feedback following Obsidian review compliance
* fix: finalize PR feedback with technical refinements and obsidian compliance
* fix: finalize PR refinements following Claude Code feedback and repo cleanup
* fix: remove legacy migration logic and further simplify codebase for obsidian compliance
* refactor: final cleanup of unused variables and improved type safety for PR #44
* style: fix formatting issues to resolve CI pipeline error
- SettingsTab.ts: Convert 10 heading elements to Setting API
- EnhancedSettingsTab.ts: Convert 17 heading elements to Setting API
- Add eslint-disable for legacy async/await patterns
This follows Obsidian plugin review guidelines for settings UI construction.
- Add file-level eslint-disable for no-unsafe-assignment, no-unsafe-member-access,
no-unsafe-argument, no-unsafe-return, and no-explicit-any
- These are required because Obsidian's loadLocalStorage API returns 'any'
- Replace invalid obsidianmd/platform rule with descriptive comment
- Add explanation for legacy navigator/screen API usage
- Create SimpleEventEmitter.ts as a browser-compatible EventEmitter replacement
- Update AsyncTaskCoordinator.ts to use SimpleEventEmitter
- Update NotificationManager.ts to use SimpleEventEmitter
- Update ProgressTracker.ts to use SimpleEventEmitter
- Add eslint-plugin-obsidianmd to devDependencies
Fixes ObsidianReviewBot error: 'Do not import Node.js builtin module events'
* fix: Resolve all linting issues for Obsidian Plugin Review
* fix: Address PR code review feedback
- Add legacy password migration for encrypted API keys
- Prevent duplicate event listeners in SettingsAPI
- Add error handling to ConfirmationModal callbacks
- Improve type safety (any[] → unknown[])
* fix: Address second round of PR review feedback
- Implement per-vault unique salt for encryption security
- Add UI notices for migration status and errors
- Add destroy() method to SettingsAPI for memory cleanup
- Add Notice feedback to ConfirmationModal callback errors
* fix: Address critical security and data safety issues
- Remove weak encryption fallback, force salt initialization
- Add security documentation to encryption code
- Add retry mechanism (2 attempts) for API key retrieval
- Backup corrupted data before deletion for potential recovery
- Update ConfirmationModal for async callback support
- Prevent unhandled promise rejections in modal callbacks
* fix: Address final review suggestions
- Add deprecation comment for legacy platform API usage (target: v4.0.0)
- Add error logging before legacy migration attempt
- Move migration notice after successful save
- Change any[] to unknown[] for better type safety
- Add lifecycle documentation to destroy() method
* fix: Address latest PR review feedback
- Add feature detection for platform APIs in legacy migration (Encryptor.ts)
- Check for navigator, screen, Intl availability before using
- Graceful degradation when APIs not available in some environments
- Wrap listener execution in try-catch in SettingsAPI.emit()
- Prevents cascade failures when a listener throws
- Logs errors without stopping other listeners
- Add double-click prevention to ConfirmationModal
- Disable buttons during async operations
- Prevent multiple callback invocations
- Update test file to use correct class name (Encryptor vs AESEncryptor)
- Add comprehensive JSDoc documentation for SecureApiKeyManager
- Document custom encryptor requirements
- Add usage examples
- Document initialization behavior
Add a dedicated support section at the bottom of the settings page that includes:
- Visual separator to distinguish from other settings
- Thank you message to users
- "Buy me a coffee" button with CTA styling
- Opens support link in new tab
This provides users with an easy way to support the plugin development while maintaining a non-intrusive placement.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
1. **FileUploadManager - Remove audio corruption risk**
- Removed forceReduceSize() method that corrupted audio
- Method naively skipped bytes without understanding audio format
- Now throws clear error with user guidance instead
- Prevents unplayable audio files from being created
2. **Jest Config - Restore test timeouts**
- Unit tests: 10s timeout
- Integration tests: 15s timeout
- E2E tests: 30s timeout
- Prevents flaky test failures from default 5s timeout
3. **EditorService - Fix memory leak**
- Store event listener references in eventRefs array
- Properly clean up workspace event listeners in destroy()
- Prevents memory leaks when plugin is unloaded
- workspace.off() called for all registered listeners
All critical security and stability issues from PR review addressed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Apply the same security improvements from DeepgramAdapter PR review:
- Add sanitizeForLogging() method to redact sensitive data
- Apply sanitization to options logging (line 289)
- Apply sanitization to error body logging (line 410)
- Prevent API keys and tokens from leaking to logs
This brings WhisperService security up to par with DeepgramAdapter
and completes the security hardening for the public 3.0.1 release.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add cleanupText to FormatOptions interface
- Fix PluginSettings -> SpeechToTextSettings imports
- Fix getMetrics return type to match parent class
- Add type casting for FormData in WhisperService
- Add type casting for abTesting forceProvider access
These fixes resolve all TypeScript compilation errors and allow
the build to succeed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add .jest-cache to .gitignore for cleaner repo
- Export DeepgramAdapterRefactored as DeepgramAdapter for compatibility
- Refactor TranscriberFactory with improved error handling and logging
- Enhance NotificationManager with better user feedback
- Update test infrastructure (jest.config, testSetup)
- Improve EditorService, TextFormatter, TranscriptionService type safety
- Enhance FileUploadManager and WhisperService error handling
Related PR feedback addressed:
- API key sanitization in logs (sanitizeForLogging)
- DEFAULT_TIER constant consistency
- Partial chunk failure flagging in metadata
- Auth error differentiation in API key validation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Improved dynamic timeout calculation with more aggressive scaling for large files
- Added automatic audio chunking for files over 50MB
- Implemented AudioChunker utility to split large files into manageable chunks
- Added UI settings for enabling/disabling auto-chunking and configuring chunk size
- Enhanced error messages with file size info and specific recommendations
- Updated timeout limits to 90 minutes for very large files
- Added chunking configuration options to Settings model
This should resolve the gateway timeout (504) errors experienced with large audio files on Windows 11.
Fixes#22
Co-authored-by: asyouplz <asyouplz@users.noreply.github.com>
- Added new Deepgram model support and capability management system
- Implemented advanced diarization formatting with speaker detection
- Enhanced error handling with user-friendly messages
- Added model migration service for backward compatibility
- Improved audio validation and reliability utilities
- Added comprehensive testing scripts and documentation
- Updated model registry with latest Deepgram models (nova-3 support)
- Enhanced configuration management with JSON-based model definitions
- Added agent-based documentation in Korean and English
- Improved timeout handling for large audio files
- Added circuit breaker pattern for API resilience
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement dynamic timeout calculation based on file size (30s per MB minimum)
- Add configurable timeout support from requestTimeout setting
- Improve 504 error handling with user-friendly guidance
- Cap maximum timeout at 20 minutes for very large files
- Add 50% buffer time for network/processing delays
For 58MB files: timeout increases from 30s to ~44 minutes
Fixes server timeouts while maintaining diarization functionality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: asyouplz <asyouplz@users.noreply.github.com>
- Add ISettingsManager import and parameter to DeepgramAdapter constructor
- Update convertOptions method to read UI feature settings (diarization, punctuation, smartFormat, numerals)
- Fix main.ts factory settings manager to pass through transcription.deepgram.features
- Ensure UI toggle settings are properly mapped to API parameters
The issue was that the UI feature toggles were saved to plugin.settings.transcription.deepgram.features
but the DeepgramAdapter convertOptions method was not accessing these settings, causing the
diarization toggle to have no effect on the actual API calls.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: asyouplz <asyouplz@users.noreply.github.com>