Repository navigation
acpmux MCP: initialize negotiates its version; offer titles carry the 80-char limit; suggest_tasks offers all or none - #28709
Conversation
…otiates its version (red) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-7016b1d4ce75ef44bdc7
…y their 80-character limit; suggest_tasks checks every task before offering any Fixes manaflow-ai/cmuxterm-hq#4978 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-7016b1d4ce75ef44bdc7
|
Found 1 test failure on Blacksmith runners: Failure
|
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
web and size checks: green Shipped in:
|
|
Review (the owner lane's independent review, at its land request): SHIP at 9f0fa5d Recorded by lane-gh-broker from this PR's owner lane, which asked to land this exact head after its independent review. next-autoland lands it once every red is the base's; a BLOCK at this head, a HOLD line or a hold label still stops it. |
|
Independent review (gpt-6.1-sol high) at ec44615: SHIP. No correctness findings. |
…-version-offer-title
…ic ratchet) protocol_version falls back to NEWEST_PROTOCOL_VERSION instead of &PROTOCOL_VERSIONS[0], an indexing_slicing hit the ratchet denies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-7e68dca28911d1051663
A newer verdict blocks e61b32f (no independent SHIP at the head).
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Fixes manaflow-ai/cmuxterm-hq#4978
For Leo's ask to productionize the acpmux daemon ("do we have more productionized stuff wrt the daemon ... let's go set up more fellas on it"), this fixes three places where acpmux's MCP servers don't follow the MCP contract.
What
initializereturns a version the server supports. Thesecret_mcp::serveservers (secrets, sessions/offers, subsessions, forum, acpmux) and the CUA v2 server used to echo whateverprotocolVersionthe client sent, so a client could ask for2099-01-01and get it back. Now they return the client's version when we support it, and our newest otherwise. That is whatcmux mcpalready did. The version list (acpmux::secret_mcp::PROTOCOL_VERSIONS) andprotocol_version()are now the single source, andcmux mcpuses them too instead of keeping its own copy.offer_session.titleandsuggest_tasks.tasks[].titleget"minLength": 1, "maxLength": 80. The limit comes from one constant (offer_mcp::MAX_TITLE_CHARS), which the daemon's check inhub/offers.rsnow reads too. The daemon already refused longer titles withtitle must be 1 to 80 characters.suggest_tasksno longer leaves half a card. It used to offer tasks one at a time, so a too-long title in task 3 left tasks 1 and 2 on the card. Now it checks every task's title and prompt against the daemon's limits before offering any:task 2 title must be 1 to 80 characters (none was offered). A refusal that only the daemon can make (for example, a chat already holding 8 open offers) can still leave earlier tasks offered. That error now returnsstructuredContent {groupId, offers}, so the agent knows which offers are open. Its text already gave the count.Test
Red commit 08c1fc9 changes only
suggested_tasks_tool_offers_each_task_in_one_group:initializeasks for2099-01-01and expects2025-06-18, and a two-task call whose second title is 81 characters expectstask 2 title must be 1 to 80 characters (none was offered)with no fourth offer recorded.2099-01-01, and the 81-character task's sibling is offered, so the text istask 2 was refused (the first 1 were offered): ....cargo test -p acpmux --test hub_integration -- session_offers6 passed, includingsuggested_tasks_tool_offers_each_task_in_one_group;cargo test -p acpmux --lib -- secret_mcp offer_mcp3 passed.New unit tests:
secret_mcp::tests::initialize_answers_a_version_we_speak,offer_mcp::tests::a_task_is_checked_as_the_daemon_checks_it,offer_mcp::tests::both_titles_carry_the_limit_in_the_schema. The existingcmux mcptestjson_rpc_lifecycle_and_errors(supported version echoed, unknown version answered with the newest) now reads the shared list.Not run
cli::mcp::tests::json_rpc_lifecycle_and_errors(cmux-tui) needs the ghostty submodule, so it runs in this PR's CI only.Review
Independent review (Codex gpt-6-astra, high): SHIP at 9f0fa5d.
Changelog
Agent session: agent session
🤖 Generated with Claude Code