Skip to content

v0.5.0 — Protocol alignment

Choose a tag to compare

@okapi-ca okapi-ca released this 15 May 21:28
· 133 commits to main since this release

Highlights

  • MCP tool schemas now match the VS Code / Neovim PROTOCOL.md spec verbatim — Claude Code CLI sends exactly what our bridge expects.
  • Two missing tools added: close_tab and executeCode.
  • Tool-result wire format now follows the spec: plain strings flow through verbatim (TAB_CLOSED, FILE_SAVED, DIFF_REJECTED, Opened file: …); error results surface via MCP isError.

Changed

Four schema divergences fixed:

Tool Before After (spec)
openFile {filePath, lineNumber, selectText} {filePath, preview, startText, endText, selectToEndOfLine, makeFrontmost}
openDiff {filePath, oldContent, newContent, tabName} {old_file_path, new_file_path, new_file_contents, tab_name}
getDiagnostics {filePath} {uri}
closeAllDiffTabs return {success, rejected} object "CLOSED_${N}_DIFF_TABS" plain string
  • openFile output shape follows the spec: plain "Opened file: <path>" string when makeFrontmost=true (default), JSON {success, filePath, languageId, lineCount} when makeFrontmost=false. preview is accepted but ignored (Nova has no preview mode).
  • openFile pattern-based selection via startText / endText, optionally extended to end of line via selectToEndOfLine. Replaces the ad-hoc lineNumber parameter.
  • openDiff diff stats computed against old_file_path (original on disk); applied to new_file_path on Accept (best-effort handling of rename-style diffs where the two paths differ).
  • getDiagnostics returns spec-shaped [{uri, diagnostics: []}]. Always empty — Nova has no LSP/diagnostics public API — but the shape matches what Claude expects to deserialize.

Added

  • close_tab tool ({tab_name} → "TAB_CLOSED") — Nova has no public close-tab API, so this is an honest no-op that still honors the protocol contract.
  • executeCode tool ({code} → MCP error "executeCode is not supported in Nova (no Jupyter kernel)") — clear isError response so Claude doesn't retry.

Notes

  • Breaking change for any non-Claude consumer of the bridge's tools/list. The only known consumer is Claude Code CLI itself (which sends the spec names), so this should be net positive in practice.
  • Scripts/call-bridge.js examples updated to reflect the new param names.
  • No changes to the lock-file format, auth header (x-claude-code-ide-authorization), or notification methods (selection_changed / at_mentioned) — those were already spec-conforming after v0.4.0.

Verification

Smoke + functional tests all passing:

  • tools/list annonces 12 tools with spec-compliant schemas
  • close_tab, executeCode, closeAllDiffTabs, getDiagnostics with uri all return spec wire formats
  • openDiff end-to-end workflow with {old_file_path, new_file_path, new_file_contents, tab_name} → user Accept → plain "FILE_SAVED" string + file written to disk

Full changelog: v0.4.1...v0.5.0