Changelog
All notable changes to this project will be documented in this file.
[1.0.2] - 2026-07-08
Security
- Path Traversal Prevention:
rms_readandrms_writenow reject paths containing..components, preventing escape from the vault directory. - LanceDB Filter Injection: All filter strings in
store.rs(delete_document,read_document) now escape single quotes viaescape_filter(), preventing potential data corruption.
Fixed
- OpenCode MCP Payload Format: Replaced hardcoded
if ide.name == "OpenCode"branching with aPayloadBuilderdependency-injection architecture. Theopencode_payloadfunction now produces OpenCode's nativeMcpLocalConfigschema ({"type": "local", "command": [array], "enabled": true}), which was previously missing thetypefield and using a stringcommandinstead of an array. - Zed JSONC Silent Skip: The installer now falls back to
strip_json_comments()whenserde_json::from_strfails on config files containing//comments (e.g. Zed'ssettings.json). Previously, Zed configs were silently skipped. On parse failure,tracing::warn!now logs a clear diagnostic message. - Missing
enabled: truefor Standard Payload: Thestandard_payloadfunction now injects"enabled": truefor all non-OpenCode IDEs. This is required by Zed'scontext_serversschema and is a harmless no-op for Claude, Cursor, and VSCode. - Hybrid Search Activated: The LanceDB
search()method now uses combined vector search + Tantivy full-text search (FullTextSearchQuery). Previously, only vector search was performed despite the FTS index being created. Falls back to vector-only gracefully if FTS index is unavailable. - Write
createMode: Now correctly rejects overwriting existing files. Previously,createfell through to the catch-all_branch which behaved as a full overwrite. links_resolvedNo Longer Stub: Bothsync_vaultandindex_vault_fullnow store actual normalized link paths inlinks_resolvedinstead of the placeholder"[]".- Safe Unsafe: Added
// SAFETY:documentation comment for theTMPDIRenvironment variable override inIndexer::new().
Added
rms-memory doctor(Full Diagnostics): Implements 5-point vault health check: directory structure, missing document IDs, broken cross-document links, LanceDB store accessibility, and registry coherence.rms-memory uninstall: New command to removerms-memoryentries from all discovered IDE configuration files. Usespatcher::remove_key()for safe JSONC-aware key removal with automatic.bakbackups.- Graceful Shutdown: Added
SIGINT/Ctrl+Chandler inmain.rsviatokio::signal::ctrl_c(), ensuring clean log flush on exit instead of immediate process termination. - Zombie Process Prevention: MCP server now signals background file-watcher tasks to stop when stdin closes (EOF on disconnect).
std::process::exit(0)inmain.rsguarantees the process terminates even if tokio runtime has lingering tasks. - llms.txt Export Compliance:
export-llmsnow generates a properllms.txtspec format with clickable links, frontmatter-derived titles, and content summaries, in addition to the full vault contents section.
Changed
- Installer DI Architecture: Introduced
PayloadBuildertype alias (fn(exe: &str) -> serde_json::Value) and attached it toIdeConfigas abuild_payloadfield. Adding a new IDE format no longer requires modifyingrun_installer()— just one line inget_ide_registry(). - ExportLlms Optimization: Fixed double
find_markdown_files()call — now computed once.