* fix(ui): align settings review follow-ups
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>
* fix(ui): align sentence case for settings copy
Normalize the settings UI strings flagged by the review bot to plain sentence case
and remove emoji-prefixed labels from the affected headings and options.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(ui): enforce sentence case for settings copy
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>