You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Documentation: the README now reports the current surface (41 tools, 5 prompts, 3 resources, and 952 tests) and adds a consolidated Environment Variables reference table.
Added a .nvmrc pinning Node 24 so contributors and CI use the same major version declared in engines.
The license gate (scripts/check-licenses.mjs) now explicitly allows MPL-2.0, recording that the only MPL-2.0 packages are dev/test transitive dependencies excluded from the published package.
Refreshed dev dependencies to their latest in-range releases (@types/node, eslint, typescript-eslint, vitest).
Fixed
Vault path validation now rejects Windows-style ..\\ traversal separators on every platform before POSIX path resolution.
Frontmatter parsing now uses the direct js-yaml dependency instead of gray-matter, removing the vulnerable transitive js-yaml 3.x path reported by npm audit.
Concurrent atomic-read validation now retries through short rename churn instead of surfacing transient Path changed during validation errors.
OpenAI embedding setup now treats blank OBSIDIAN_EMBEDDING_API_KEY values as unset, falling back to OPENAI_API_KEY when present instead of sending a whitespace bearer token.
Permission allowlist folders now normalize config-side dot segments, so entries such as ./projects and archive/./logs match their intended vault folders.
Folder-scoped list_notes calls now return canonical note paths when the folder argument contains . or .. segments.
find_unused_attachments now ignores remote markdown URLs before basename matching, so links to external images do not mark local files as referenced.
find_unused_attachments now normalizes local markdown attachment paths with dot segments before basename matching, preventing duplicate filenames from being marked referenced together.
Vault-wide link cleanup now skips scheme-style markdown URLs such as mailto: before alias resolution, preventing move/delete reference rewrites from editing external links that resemble note aliases.
Link graph tools now canonicalize caller-provided note paths with dot segments before basename fallback, so duplicate basenames do not make get_backlinks, get_outlinks, or get_graph_neighbors inspect the wrong note.
Wikilink resolution now normalizes dot segments before basename fallback, preventing links such as [[./projects/idea]] from resolving to the wrong duplicate basename.
Base file.linksTo() and file.hasLink() filters now strip link fragments and require folder-qualified targets to match by path before falling back to basename-only shorthand.
Base file.inFolder() filters now normalize slash and dot segments in folder arguments before matching note paths.
Trash deletes now use no-replace semantics for the selected .trash destination, preventing races from overwriting a newly created trashed file.
Semantic search folder filters now normalize slash and dot segments before matching stored note paths.
Daily-note folder settings now normalize slash and dot segments before building tool and resource paths.
Local verification now runs Vitest with one worker by default to avoid fork-worker OOM/spawn failures on busy Windows hosts.
Embedding provider setup now treats blank provider, model, and base-URL env vars as unset, so documented defaults still apply in empty shell or dotenv entries.
Embedding snapshot loading now ignores malformed dimensions and malformed entry fields before rehydrating the semantic index.
OpenAI embedding responses now reject missing, duplicate, or out-of-range row indexes before vectors are paired with input chunks.
index_vault now records invalid live embedding vectors as failed notes instead of aborting the whole indexing pass.
index_vault now reports Chunks embedded from chunks persisted to the semantic index, not chunks staged before a failed note writeback.
search_semantic now validates live query vectors before scoring, so malformed embedding provider responses cannot produce NaN ranks or low-level cosine errors.
Embedding provider base URLs now reject embedded credentials, query strings, and fragments before provider setup, without echoing the rejected URL.
HTTP transport now requires the actual application/json media type for MCP POST bodies instead of accepting Content-Type values that only mention it in parameters.
Global Obsidian config auto-detection now ignores non-file or oversized obsidian.json files before parsing, preventing startup from spending unbounded memory on malformed local config data.
The install command now rejects existing client config files whose JSON root or mcpServers field is not an object, instead of crashing or reporting success without writing the server entry.
Security
Bumped the transitively-resolved hono dependency to 4.12.26 (from 4.12.23), clearing the high-severity npm audit advisory GHSA-wwfh-h76j-fc44 (Windows serve-static path traversal via encoded backslash) and related findings. The bump stayed within @modelcontextprotocol/sdk's existing dependency range, so no direct dependency changed.