Moved 36 inline style assignments from notification-history.ts to CSS classes in styles.css following the mcp-* naming pattern. This improves maintainability and separates presentation from logic.
Changes:
- Created CSS classes for all static styles (mcp-history-filters, mcp-history-count, mcp-history-list, mcp-history-empty, mcp-history-entry, mcp-history-entry-header, mcp-history-entry-header-meta, mcp-history-entry-args, mcp-history-entry-error, mcp-history-actions)
- Created dynamic state classes for conditional styling (mcp-history-entry-border, mcp-history-entry-title-success, mcp-history-entry-title-error)
- Updated notification-history.ts to use CSS classes via addClass() instead of inline style assignments
- Retained only truly dynamic styles (borderBottom conditional, color conditional) as class toggles
All tests pass (716/716), build succeeds.
Replace 90+ JavaScript style assignments with semantic CSS classes in
settings panel. Improves maintainability and follows Obsidian plugin
guidelines requiring styles in CSS files rather than JavaScript.
Changes:
- Add semantic CSS classes to styles.css for auth sections, tabs,
config display, labels, and helper text
- Replace all .style.* assignments in settings.ts with CSS classes
- Use conditional class application for dynamic tab active state
- Preserve all existing functionality and visual appearance
Addresses ObsidianReviewBot requirement for PR #8298
Replace vault.delete() with fileManager.trashFile() to respect user's
trash preferences configured in Obsidian settings. This ensures deleted
files go to the user's configured trash location instead of being
permanently deleted without respecting system preferences.
Changes:
- src/tools/note-tools.ts: Replace vault.delete with fileManager.trashFile
in createNote (overwrite conflict) and deleteNote (permanent delete)
- tests/note-tools.test.ts: Update test expectations to check for
fileManager.trashFile calls instead of vault.delete
Addresses ObsidianReviewBot required issue #3.
Remove 'MCP Server' prefix from command display names to comply with
Obsidian plugin guidelines. Command IDs remain unchanged for API stability.
- Start MCP Server → Start server
- Stop MCP Server → Stop server
- Restart MCP Server → Restart server
Replace hardcoded .obsidian references in exclude pattern examples
with generic 'templates' folder. Config directory location is
user-configurable in Obsidian, so examples should not reference
system directories.
Addresses ObsidianReviewBot feedback for plugin submission.
This fixes the issues introduced in the previous commit where:
- Authentication section would collapse when switching config tabs and couldn't be reopened
- Notification toggle would disappear after enabling notifications
Root cause: The previous update methods were removing or re-querying DOM elements incorrectly.
Solution:
- Store direct references to configContainerEl and notificationToggleEl
- Wrap notification toggle in dedicated container to preserve it during updates
- updateNotificationSection() now preserves both summary AND toggle, only removes additional settings
- updateConfigSection() uses stored reference instead of querying, preventing collapse
Both sections now maintain their open/closed state correctly during targeted updates.
Fixed two UI bugs in the settings panel:
- Authentication section no longer collapses when switching between Windsurf/Claude Code config tabs
- Notification settings now properly appear/disappear when toggling the notifications enable switch
Changes:
- Added authDetailsEl reference to track authentication details element state
- Created updateConfigSection() method to update only config tabs without full page re-render
- Fixed updateNotificationSection() child removal logic to properly clear settings before rebuild
- Both methods now preserve the open/closed state of their respective collapsible sections
- Change plugin ID from 'obsidian-mcp-server' to 'mcp-server'
- Remove 'Obsidian' from plugin description per guidelines
- Update documentation to use new plugin folder name
- Update installation paths to .obsidian/plugins/mcp-server/
- Update package name to match new plugin ID
- Simplify README title and description
Replace the gitea-release-action with direct API calls using curl.
This approach works on both GitHub (which runs this step conditionally)
and Gitea servers, using their compatible REST APIs.
Add platform detection to support creating releases on both GitHub
and Gitea servers. The workflow now:
- Detects the platform using github.server_url
- Uses GitHub CLI (gh) for GitHub releases
- Uses gitea-release-action for Gitea releases
- Creates draft releases with the same artifacts on both platforms
Add support for semantic version tags with pre-release identifiers
(e.g., 1.0.0-alpha.1, 1.0.0-beta.2) in the GitHub Actions release
workflow.
The workflow now triggers on both stable versions (X.Y.Z) and
pre-release versions (X.Y.Z-*).
Co-Authored-By: Claude <noreply@anthropic.com>
Removed console.error calls from error handlers that gracefully skip
problematic files and continue processing. These handlers catch errors
when reading or parsing files but successfully return fallback values,
so logging errors creates unnecessary noise during testing and deployment.
Changes:
- vault-tools.ts: Remove console.error from search and frontmatter extraction
- search-utils.ts: Remove console.error from file search handlers
- waypoint-utils.ts: Remove console.error from file read handler
- frontmatter-utils.ts: Remove console.error from YAML and Excalidraw parsing
Test updates:
- Remove test assertions checking for console.error calls since these
are no longer emitted by graceful error handlers
All 709 tests pass with no console noise during error handling.
- Replace direct crypto.getRandomValues with getCryptoRandomValues
- Fixes Node.js test environment compatibility
- Maintains production behavior in Electron
- Create getCryptoRandomValues() utility
- Support both window.crypto (browser/Electron) and crypto.webcrypto (Node.js)
- Add comprehensive test coverage for adapter functionality
- Added Buy Me a Coffee and GitHub Sponsor funding links to manifest.json
- Fixed description formatting with proper punctuation
- Updated manifest schema to include fundingUrl section
Replace plural pronouns (we, our, us) with singular/project voice
throughout documentation files to represent a singular developer
perspective.
Changes:
- CONTRIBUTING.md: Replace "We are" with "This project is",
"We use" with "This project uses", "our" with "the"
- README.md: Replace "our" with "the", add OS to bug report checklist
- docs/VERSION_HISTORY.md: Replace "we reset" with passive voice
"the version was reset"
- Created CONTRIBUTING.md with detailed guidelines for plugin development and contributions
- Added sections covering development setup, workflow, code standards, and testing practices
- Included step-by-step instructions for setting up local development environment
- Documented release process and version management procedures
- Added guidelines for pull requests, commit messages, and code organization
- Included security considerations and platform
- Added GitHub Sponsors configuration file to enable sponsorship button
- Updated README to include GitHub Sponsors link alongside existing donation options
- Configured sponsorship to direct to Xe138's GitHub profile
Implements automated release workflow per design document.
- Triggers on semantic version tags (e.g., 1.2.3)
- Validates version consistency across package.json, manifest.json, and git tag
- Runs test suite (blocks release if tests fail)
- Builds plugin using production build process
- Verifies build artifacts exist (main.js, manifest.json, styles.css)
- Creates draft GitHub release with required files
Workflow uses single-job architecture for simplicity and runs on Node.js 18 with npm caching for performance.
Code inspection testing completed:
- Build successful with no TypeScript errors
- All 579 automated tests pass with no regressions
- Tab state property correctly initialized to 'windsurf'
- Authentication section renamed to 'Authentication & Configuration'
- Config generator produces correct Windsurf format (serverUrl)
- Config generator produces correct Claude Code format (type: http, url)
- Tab buttons implement proper visual states (bold, border-bottom)
- Tab switching logic correctly updates activeConfigTab and re-renders
- Copy button functionality implemented for config JSON
- Dynamic content area shows file path, config JSON, and usage notes
Manual testing in Obsidian not performed (no test vault available)
All implementation requirements verified through code inspection