Skip to content

v2.15.0

@cyanheads cyanheads tagged this 29 Apr 00:38
MCP surface tightening pass. Every tool's Zod input schema is now
`.strict()`, so unknown fields raise ZodError instead of being silently
stripped — the same failure mode behind v2.14.1, where service-layer
additions reached the executor but vanished at the MCP boundary because
nobody noticed the schema hadn't been updated.

Breaking schema renames for cross-tool consistency:

- `git_add.files` → `paths` (paths can be files or directories)
- `git_blame.file` → `filePath` (input + output, matches git_log/git_show)
- `git_branch.{operation,name,newName}` → `{mode,branchName,newBranchName}`
  on input; `operation` → `mode` on output (matches every other multi-mode
  tool: git_remote, git_stash, git_tag, git_worktree, git_rebase, git_reset)
- `git_clone.localPath` → `path` (input + output)
- `git_clone.url` is now `z.string().min(1)` not `z.string().url()` —
  SSH (git@host:path), file://, git://, and bare filesystem paths all
  work; the provider already handled them, only the schema was rejecting
- `git_reflog.ref` defaults to 'HEAD' (was optional)
- `git_reset.target` defaults to 'HEAD' (was optional)

`git_show.metadata` is now actually populated for commit objects.
Previously always {} despite being part of the output schema. A third
parallel query — `git log -1 --format=<NUL-delimited fields>` —
runs alongside the existing `cat-file -t` and `show` calls via
Promise.allSettled. Best-effort: if the metadata fetch fails or the
object isn't a commit (blob/tree/tag), metadata stays {} rather than
failing the whole operation. Parses %H, %h, author/committer
name+email+date (ISO 8601), parents, subject, and body.

`git_cherry_pick.message` and `git_rebase.message` output fields added
(optional, populated only on conflict pause) — human-readable next-step
guidance so LLMs don't have to reverse-engineer the recovery path from
`conflicts: true`. `git_worktree.branch` and `commitish` descriptions
now spell out the create-vs-checkout distinction.

Removed unused exports from src/mcp-server/tools/schemas/common.ts:
ConfirmSchema, AuthorSchema, SuccessResponseSchema, FilePathSchema,
VerboseSchema, QuietSchema, RecursiveSchema. None were imported anywhere.

Tests: updated git-add, git-blame, git-branch, git-clone tests for
renamed fields. Added strict-mode rejection tests on each (explicit
"passing the old name fails" assertions catch future regressions).
Added three show.ts service-layer tests covering metadata parsing for
commits, the empty-metadata fallback for non-commit objects, and the
empty-metadata fallback when the log call rejects.

1369 tests pass. devcheck clean.
Assets 2
Loading