mirror of
https://github.com/agentclientprotocol/claude-agent-acp.git
synced 2026-11-02 23:41:23 +00:00
Request validation from the ACP schema v1.28.0 / v2.0.0-alpha.11 review. Each change has a test. **Paths** - `session/list` rejects a relative `cwd` with -32602. Without a session index it passes `includeWorktrees: false`, so the filter matches only sessions of exactly that directory, not other git worktrees of the same repo. - Resume, load and fork check `cwd` and `additionalDirectories` before anything else. Before, a resume with a bad `cwd` tore down the live session and then failed, and a fork copied the transcript first. - Relative `additionalDirectories` entries are rejected with -32602. **Session setup (v2)** - Uses the SDK's `assertSupportedMcpServers`, which also rejects duplicate MCP server names with -32602. - Rejects an empty `prompt` with -32602. - The v2 initialize response no longer advertises the AIR `asyncTasks` capability or the `goal` entry, since the v2 app has no handlers for `_session/async_task/stop` or `_session/goal`. v1 AIR is unchanged. **Errors** - `session/fork` of an unknown session returns -32002 with `data.sessionId` instead of -32603. This matches the Claude SDK's "Session … not found" and "Invalid sessionId" messages. - `authenticate` with an unknown `methodId` returns -32602 instead of -32603. - `set_config_option` rejects a value whose type doesn't match the advertised option type. A `type: "boolean"` option takes `true`/`false`, and a select option takes a string. Model aliases such as `"opus"` are still accepted. - An AIR `session/delete` of a session that has no transcript now succeeds instead of failing with a generic error. **Prompts and commands** - v1 `session/prompt` rejects `audio` and unknown content blocks with -32602 before queueing them. Before, they were silently dropped. - Advertised command names that contain whitespace are dropped, and of duplicate names only the first is kept. - The `/mcp:server:prompt` rewrite now accepts arguments that span lines, and applies only to the first text block.