Skip to content

feat(acp): adopt schema 1.18.0 with skills, prompt suggestions and speed category - #499

Merged
benbrandt merged 2 commits into
mainfrom
schema-1.18.0
Nov 14, 2026
Merged

benbrandt merged 2 commits into
mainfrom
schema-1.18.0

Conversation

@benbrandt

Copy link
Copy Markdown
Member

Bumps agent-client-protocol-schema to 1.18.0 (schemas v1.32.0 / v2.0.0-alpha.16).

Added

  • Three features, each included in unstable:
    • unstable_prompt_suggestions: the prompt_suggestions_update session update and the client's session.promptSuggestions capability, in v1 and v2.
    • unstable_agent_skills: skill command entries, skill content blocks, and the session.prompt.skill and session.commands.skill capabilities. v2 only.
    • unstable_speed_config_category: the speed config option category.
  • From the schema bump alone:
    • replay_complete in v2 (SessionUpdate::ReplayComplete).
    • Subagents in v2 without unstable_subagents: subagent_update, session_message, session_message_chunk, the unknown state, subagent background work, and session tool call content. v1 still needs the feature.
    • configOptions on session/fork, under unstable_session_fork and unstable_session_options.

Changed

  • Testy v2 and the simple_agent_v2 example send replay_complete after a requested replay, also for an empty history, and never without replayFrom. The v2_session_coordination example uses it to tell replayed history from live updates.
  • Breaking under unstable_plan_operations: the file plan type is gone, so PlanFile and PlanUpdateContent::file no longer exist. Markdown plans take an optional path instead.
  • InitializeOutcome allows clippy::large_enum_variant, which the larger v2 InitializeResponse now triggers.

Connection future size

The first commit is independent of the schema bump. connect_with moved the caller's closure through five nested futures and reserved room for it in each, so the returned future grew by five times whatever the closure captured. With the larger 1.18 initialize types, a closure that captured a v2 initialize request and response went over the clippy::large_futures threshold, and callers would have had to box the future themselves.

connect_with now boxes the closure and its future, and with_spawned boxes its task. Sizes in bytes on aarch64 macOS with unstable and unstable_protocol_v2:

Case Before After
connect_with, nothing captured 2008 2040
connect_with capturing a v2 initialize request and response 18048 5248
with_spawned capturing 1000 bytes 7048 2120

This costs two small allocations per connection. A test in tests/jsonrpc_connection_builder.rs checks that captured state is no longer multiplied, and the conductor's v2 initialization tests drop the Box::pin wrappers they needed around connect_with.

Tests and docs

  • tests/schema_1_18.rs covers the new wire shapes. The plan, subagent and Testy v2 tests follow the changes above.
  • md/protocol-v2.md gains a Schema 1.18 section with the new agent and client rules. It no longer says unknown command types may be shown as plain commands, because the spec now forbids showing them as slash commands.
  • md/features.md describes the new features.

The other spec prose changes in this release (idempotent auth/logout, -32602 for a repeated tool_call/cancel or terminal/cancel, thought_level value ordering) needed no SDK code changes. The Schema 1.18 section lists them.

just test, cargo clippy --all-targets --all-features, the wasm clippy commands from CI and cargo fmt --check pass.

The connection driver moved the caller's closure through five nested
futures and reserved room for it in each. The `connect_with` future
therefore grew by five times whatever the closure captured. A closure that
captured a v2 `initialize` request and response made it large enough for
`clippy::large_futures` to ask callers to box it.

Box the `connect_with` closure and its future, and the `with_spawned`
task. The connection future now holds captured state at most once. This
costs two small allocations per connection.

- tests/jsonrpc_connection_builder.rs checks that the future no longer
  multiplies captured state.
- The conductor's v2 initialization tests drop the `Box::pin` wrappers
  they needed around `connect_with`.
…eed category

Bump agent-client-protocol-schema to 1.18.0 (schemas v1.32.0 /
v2.0.0-alpha.16).

Add three features, each included in `unstable`:

- `unstable_prompt_suggestions` forwards the `prompt_suggestions_update`
  session update and the client's `session.promptSuggestions` capability
  in v1 and v2.
- `unstable_agent_skills` forwards `skill` command entries, `skill`
  content blocks and their capabilities. They exist in v2 only.
- `unstable_speed_config_category` forwards the `speed` config option
  category.

The schema bump also:

- Adds the v2 `replay_complete` session update. Testy v2 and the
  `simple_agent_v2` example send it after a requested replay, also for an
  empty history, and never without `replayFrom`. The
  `v2_session_coordination` example uses it to tell replayed history from
  live updates.
- Makes subagents part of v2 without `unstable_subagents`.
- Adds `configOptions` on `session/fork` under `unstable_session_fork`
  and `unstable_session_options`.
- Removes the `file` plan type under `unstable_plan_operations` and adds
  `path` on markdown plans.

`InitializeOutcome` allows `clippy::large_enum_variant`, which the larger
v2 `InitializeResponse` now triggers.

- tests/schema_1_18.rs covers the new wire shapes, and the plan, subagent
  and Testy v2 tests follow the changes above.
- md/protocol-v2.md gains a Schema 1.18 section with the new agent and
  client rules. It no longer says unknown command types may be shown as
  plain commands. md/features.md describes the new features.
@benbrandt
benbrandt enabled auto-merge (squash) November 14, 2026 15:35
@benbrandt
benbrandt merged commit a2a20c6 into main Nov 14, 2026
14 checks passed
@benbrandt
benbrandt deleted the schema-1.18.0 branch November 14, 2026 15:44
This was referenced Nov 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant