Repository navigation
chore(deps): bump rmcp to 3.4.0 and dirs to 7.0.0 - #111
Merged
Merged
Conversation
zone_core kept its own copy of the terminal-control stripper that abnegate-secret 0.1.3 already publishes as sanitize and sanitize_owned, with the same redaction pass behind it. Two copies drift, and the published one has since closed gaps the local one still had: invisible formatting characters (zero-width, bidirectional overrides, tag characters) let a credential split by a zero-width space reach the transcript unredacted, two-byte escapes outside 0x40-0x5F and escapes with intermediate bytes such as ESC ( B left their tails behind, and the ESC X start-of-string leaked its payload. ToolResult and zone_notify now call the crate directly. zone_notify used zone_core for nothing else, so that dependency goes too. The new ToolResult tests pin each output change, and a read_file test pins the cost: file content reaches the model through ToolResult, so variation selectors and zero-width joiners and non-joiners are dropped from what it reads, though not from the file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Clippy 1.98 flags Routing as a large enum: the Chat variant's Route makes every Routing at least 856 bytes, 216 more than the next largest variant, and clippy -D warnings fails zone_server on main. Boxing the route keeps the enum near the media variants' size; it is built once per turn, so the allocation costs nothing that matters. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
abnegate-agent 0.1.x requires rmcp ^3.4, so moving to it later would otherwise drag an MCP SDK bump into an already large migration. Bumping now keeps that PR to the crate swap itself. rmcp 3.3 and 3.4 add ServerConfig/ClientConfig and negotiate_initialize, route peer cancellation by lifecycle and tighten HTTP transport validation; none of zone's call sites change and the negotiated protocol versions are the same. Routing cancellation by lifecycle means a stdio server's notifications/cancelled no longer fails zone's in-flight tools/call at once. The call is then bounded only by ToolContext::command_timeout, so a test now pins that a server which cancels and never answers ends in the timeout error rather than hanging. It fails against rmcp 3.2.0, where the call ended at once with the server's cancellation. dirs 7.0.0 only changes preference_dir on Windows, which zone never calls; the abnegate crates already pull 7.0.0, so zone_core now takes the workspace pin instead of repeating the version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 21 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (12)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
abnegate-agent 0.1.x, which zone moves onto in a later slice, requires
rmcp = "^3.4". Bumping the MCP SDK here keeps that later PR to the crate swap itself. No zone production code changes: every rmcp API zone uses has the same shape in 3.4.0. The one source change is a new test inzone_core::mcp::client::teststhat pins how a server-cancelled call now ends (see Behaviour differences).rmcp(workspace, exact pin)=3.2.0=3.4.0zone_corekeepsclient+transport-child-process(andserver,macros,schemars,transport-async-rwfor its tests);zone_serveruses only the model types.rmcp-macrosis locked at 3.4.0 to match rmcp, not 3.5.0.process-wrap(via rmcp)TokioChildProcesssource is identical between 3.2.0 and 3.4.0.dirs(workspace;zone_context,zone_core,zone_installer)=6.0.0=7.0.0zone_corenow takes the workspace pin instead of its own copy. abnegate-secret, abnegate-config and aiusg already pulled 7.0.0, so zone's own crates no longer build a seconddirs. (hf-hubvia fastembed, and tauri/wry/tray-icon viazone_desktop, still pull 6.0.0.)dirs7.0.0's only change ispreference_diron Windows (Local → Roaming AppData). zone calls onlyhome_dirandcache_dir, so this is a no-op.rmcp 3.4.0 is pinned exactly, as the spec for this slice says. 3.4.1 and 3.5.0 are also published; abnegate-agent's
^3.4accepts any of them.No environment variables or config files change.
Behaviour differences
From rmcp's CHANGELOG for 3.3.0 and 3.4.0, limited to what zone exercises (a stdio client in
zone_core::mcp, model types inzone_server::mcp). The HTTP transport, SSE and OAuth fixes in those releases sit behind features zone does not enable.MCP client (
zone_core::mcp::McpSession)notifications/cancelledfrom a stdio server naming one of zone's in-flight requests (for example atools/call) failed that request at once withCancelled. Under 3.4.0 the client honours a server's cancellation only for subscription requests on the modern lifecycle, which zone never sends. Otherwise a cancellation only stops a server-to-client request zone is handling (zone's client handles none), so it has no effect. The server still answers or errors the call itself; zone just no longer gives up on the server's say-so. During shutdown, a reply zone's client handler would send to a server request that was already cancelled is now dropped rather than sent. Eachtools/callis still bounded byToolContext::command_timeout(default 300 s,zone_core/src/mcp/tool.rs:90); a server that cancels and never answers now produces a timeout error after that period instead of an immediateCancellederror. The new test pins this.tools/listandtools/callare unchanged on the wire: the negotiated protocol versions (LATEST=2025-11-25, same known list) and the request/response types zone builds and reads (CallToolRequestParams,CallToolResult,ContentBlock,Tool,ErrorData,ErrorCode,ProtocolVersion) are the same.Zone's MCP endpoint (
zone_server::mcp)model.rsdiff only addsServerConfig/ClientConfig(aliases ofInitializeResult/InitializeRequestParams), deprecates theServerInfo/ClientInfoaliases (zone uses neither) and addsProtocolVersion::known_up_to.Build
#[tool_router]macro now rejects an empty router at compile time (#1233). zone's only router (theEchotest server inzone_core::mcp::client::tests) has a tool.Verification
Run from
runner/in this branch's worktree; every compile line showed this worktree's path.cargo clippy -p zone_core -p zone_server --all-targets --no-default-features --features zone_context/test-utils -- -D warnings: PASS (zone_core re-run with the new test: PASS).mcp::client::tests::a_call_the_server_cancels_and_never_answers_times_out: a raw in-process server answersinitializeandtools/list, then answerstools/callonly withnotifications/cancelledfor that request. Withcommand_timeout: 1the call ends inMCP tool 'silent_hang' timed out after 1 seconds, well inside a 30 s outer deadline. PASS on 3.4.0 (cargo nextest run -p zone_core --no-default-features --lib -E 'test(/mcp::/)', 33/33). It FAILS with the lock set back to rmcp 3.2.0, where the call ended at once withMCP tool call failed: task cancelled for reason abandoned.cargo check --workspace --exclude zone_desktop --all-targets --no-default-features --features zone_context/test-utils: PASS.cargo fmt --all --check: clean.cargo metadata --locked: the committed lock resolves unchanged.cargo nextest run -p zone_core -p zone_server -E 'test(/mcp/) | binary(mcp_task_tools_tests) | binary(mcp_agent_tests) | binary(chat_agent_tools_tests)': PASS, 78/78. That covers everyzone_core::mcptest (33, including the in-process rmcp client/server round trip, the stdio handshake timeouts and the proxy environment test), everyzone_server::mcpunit test (endpoint, protocol, turn, agent tools),mcp_task_tools_testsandchat_agent_tools_tests.cargo deny --locked check --warn unmaintained --warn notice: PASS (advisories ok, bans ok, licenses ok, sources ok). No new advisory or licence from rmcp 3.4.0, rmcp-macros 3.4.0 or process-wrap 10.0.1.Not verified locally:
mcp_agent_tests::the_host_agent_connects_to_zone_and_is_shown_zones_toolsis#[ignore](it needs the host'sclaudeCLI and spends a model turn), so it was skipped. It exercises zone's own endpoint, which uses no rmcp code path that changed. Also not run: the full workspace nextest run,sqlx-prepare.sh --checkand the coverage gate. CI covers these.🤖 Generated with Claude Code