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
close_feedback: closing an entry now also moves every closed entry out of the active log into .mcp/FEEDBACK_ARCHIVE.md, so .mcp/FEEDBACK.md keeps holding open items only (it had grown to 39 entries / 65 KB). The move is append-first (block written to the archive before it is removed from the log, so a crash can at most duplicate, never lose an entry), idempotent (entries already archived are skipped) and self-healing (entries closed before this feature are migrated with the next close). close_feedback returns archived (IDs moved) and archivePath.
list_feedback: new archived parameter — true lists .mcp/FEEDBACK_ARCHIVE.md (closed entries) instead of the active log; all existing filters (type, tool, status) apply to the archive too.
archiveClosedEntries() (src/feedback.ts) — bulk-migrates closed entries from the active log to the archive; also reused by close_feedback.
batch_apply_edits: explicit machine-readable outcome — every response now carries message (human summary), appliedEdits (edits whose changes are on disk), written (files changed on disk) and applied: true|false on each preview entry. Failure responses additionally carry reason (validation_failed | write_failed), reverted (files rolled back) and nothingWritten. A validation failure now says plainly VALIDATION FAILED on edit #N of M — NO edits were written to disk instead of returning a preview that looks like a partial success; when writes did happen but were all rolled back it says NO net changes were left on disk: N edit(s) had been written and M file(s) were rolled back […]. The MCP tool result is the message followed by the JSON payload.
batch_apply_edits: preview is padded to map 1:1 to the edits array — edits that were never reached get an action: "error" entry with not evaluated — batch stopped at edit #N.
batch_apply_edits: excludePatterns parameter — when replaceAll is used with excludePatterns, occurrences inside excluded regions (e.g. #[cfg(test)] blocks) are skipped. Handles annotation-on-separate-line with 5-line lookahead for opening brace.
batch_apply_edits: sequential validation in Phase 2 — each edit is re-validated against current file state (after previous edits) with rollback on failure. Phase 1 defers validation for chained edits on same file.
findEscapeReason(): optional cwd parameter — when a command contains both git -C/--git-dir/--work-tree and a cd/pushd escape pattern, the function checks if the git path resolves inside cwd before flagging as escape. safetyCheck() now passes cwd to findEscapeReason().
9 new tests (total 317, up from 308)
6 new tests for explicit batch_apply_edits outcome reporting (total 323)
report_tool_feedback: the reported tool name is now validated against this server's tool registry — unknown names are rejected without writing anything, with a "did you mean …?" suggestion for typos (Unknown tool 'batch_apply_edit' … Did you mean 'batch_apply_edits'?); when nothing is close, the error lists the tools this server exposes. New optional parameter allowUnknownTool: true bypasses the check for missing-capability reports about the server as a whole. Validation runs only when the handler supplies the registry, so the pure function stays usable without one.
8 new tests for the feedback archive (self-healing migration, idempotency, verbatim blocks, archived filters, log hygiene) (total 331)
7 new tests for tool-name validation + legacy log normalization (total 338)
Changed
resolveFilePath() multi-root fallback now triggers even when cwd is provided but the file doesn't exist at the resolved location. Scans all allowed roots for the relative path — 1 match auto-resolves, 2+ shows disambiguation error.
ALLOWED_ROOTS now includes paths from MCP_PROJECT_NAMES (friendly project names). Projects registered only via MCP_PROJECT_NAMES and not via MCP_EXTRA_ROOTS are now recognised as allowed roots — fixes file-based tools failing to resolve paths for alias-registered projects.
run_command_grep: catch block now extracts stdout/stderr from exec error object. Non-zero exit code with output returns matches instead of error.
Fixed
batch_apply_edits: sequential application — edit 2 can now find text created by edit 1 on the same file (was failing with "search string not found" because Phase 1 validated all edits against original file content).
batch_apply_edits: replaceAll no longer breaks test code — use excludePatterns: ["#[cfg(test)]"] to skip test modules.
batch_apply_edits: relative/absolute paths now resolve correctly when the target project is registered only via MCP_PROJECT_NAMES (was resolving against devkit root instead of project root).
batch_apply_edits: partial rollback — when a chained edit fails, only files modified by the failed edit and subsequent edits are reverted. Files successfully modified by earlier edits are preserved (was: full atomic rollback lost all valid edits).
extract_code_block: relative and absolute paths now resolve correctly for alias-registered projects (was returning "Cannot read file" for files within the project).
run_command_grep: zero matches with non-zero exit code now returns empty result instead of error.
batch_apply_edits: validation-failure response was ambiguous — the returned preview showed action: "edit", matchCount: 1 for edits that had validated while no edit was written at all, so callers could not tell that the batch was a complete no-op. The response now states VALIDATION FAILED on edit #N of M — NO edits were written to disk plus machine-readable appliedEdits, written, reverted, nothingWritten and per-entry applied.
extract_code_block: relative paths now resolve across all allowed roots even when cwd is provided.
report_tool_feedback: appending an entry no longer stacks --- separators — a trailing separator left by the previous write is removed first, so the log keeps exactly one separator between entries (.mcp/FEEDBACK.md had accumulated doubled separators over time).
close_feedback / archiveClosedEntries(): rewriting the active log after an archive no longer leaves a doubled separator and extra blank lines between the header and the first entry.
Known Limitations (documented)
batch_apply_edits: same-file chain failures revert the entire file (can't partially undo changes to a single file).
run_safe_command: 60s client-side timeout limit (MCP client, not server) — use run_commands tool for long-running commands.
Windows cmd.exe: ; is not a command separator — use & or separate tool calls.
universal_find_references: symbols with special characters (colons, spaces) may fail when sent from certain MCP clients due to client-side JSON-RPC serialization issues.