From af527ff8af22998eb29478306e6c36f79d9771c8 Mon Sep 17 00:00:00 2001 From: Paul Kuruvilla Date: Fri, 1 May 2026 22:34:01 +0530 Subject: [PATCH 001/152] Update author link in diff-delete RFD (#1111) --- docs/rfds/diff-delete.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfds/diff-delete.mdx b/docs/rfds/diff-delete.mdx index bccdc05fc..204618619 100644 --- a/docs/rfds/diff-delete.mdx +++ b/docs/rfds/diff-delete.mdx @@ -2,7 +2,7 @@ title: "Represent deleted files in diff" --- -Author(s): [anna239](https://github.com/benbrandt) +Author(s): [anna239](https://github.com/anna239) ## Elevator pitch From f08f6126ab5d7fe064e8559b8fe3f6b901145b6c Mon Sep 17 00:00:00 2001 From: Jun Han Date: Sun, 3 May 2026 04:28:19 +0800 Subject: [PATCH 002/152] docs: update supported platforms for ACP UI (#1112) --- docs/get-started/clients.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/clients.mdx b/docs/get-started/clients.mdx index 6db2fb3a0..00633df67 100644 --- a/docs/get-started/clients.mdx +++ b/docs/get-started/clients.mdx @@ -22,7 +22,7 @@ The following projects implement ACP directly, connect ACP agents to other envir ## Clients and apps -- [ACP UI](https://github.com/formulahendry/acp-ui) +- [ACP UI](https://github.com/formulahendry/acp-ui) (Windows, macOS, Linux, iOS, Android, Web) - [acpx (CLI)](https://github.com/openclaw/acpx) - [gemini-cli-desktop](https://github.com/Piebald-AI/gemini-cli-desktop) - [Agent Studio](https://github.com/sxhxliang/agent-studio) From a6e56f7986056911c9db02314022202df0c7d230 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Sun, 3 May 2026 21:05:26 +0000 Subject: [PATCH 003/152] docs: update registry agents (#1113) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 36 +++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 6bd2ea7b1..f796ad8dd 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -67,7 +67,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Augment Code's powerful software agent, backed by industry-leading context engine - **0.24.0**, + **0.25.1**, Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **2.17.0**, + **2.18.0**, Tencent Cloud's official intelligent coding tool - **2.94.3** + **2.95.0** Minimal ACP Native Coding Agent - **0.1.20**, + **0.1.23**, A coding agent that puts leading models at your command. - **0.0.51** + **0.0.66** Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.4**, + **0.3.28**, Factory Droid - AI coding agent powered by Factory AI - **0.112.0** + **0.116.1** Code and build agents with comprehensive multi-provider support - **0.6.25**, + **0.6.26**, Google's official CLI for Gemini - **0.40.0**, + **0.40.1**, GitHub's AI pair programmer - **1.0.39**, + **1.0.40**, ACP agent powered by Zhipu AI's GLM Coding Plan models (glm-5.1, glm-5-turbo, glm-4.7, glm-4.5-air). Supports streaming, tool calls, mid-session model switching, image input via Z.AI Coding Plan Vision MCP, and session load/fork/resume with on-disk persistence. - **1.0.0**, + **1.1.2**, The open source coding agent - **7.2.25**, + **7.2.31**, Moonshot AI's coding assistant - **1.40.0**, + **1.41.0**, Mistral's open-source coding assistant - **2.9.0**, + **2.9.3**, Nova by Compass AI - a fully-fledged software engineer at your command - **1.1.1**, + **1.1.3**, The open source coding agent - **1.14.29**, + **1.14.33**, AI coding assistant with agentic capabilities - **0.2.4** + **0.2.6** Alibaba's Qwen coding assistant - **0.15.5**, + **0.15.6**, Date: Sun, 3 May 2026 23:05:43 +0000 Subject: [PATCH 004/152] docs: update registry agents (#1114) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index f796ad8dd..5b3760c09 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -118,7 +118,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP wrapper for Anthropic's Claude - **0.31.4**, + **0.32.0**, Date: Mon, 4 May 2026 00:05:02 +0000 Subject: [PATCH 005/152] docs: update registry agents (#1115) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 5b3760c09..002b132f9 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -165,7 +165,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP adapter for OpenAI's coding assistant - **0.12.0**, + **0.13.0**, Factory Droid - AI coding agent powered by Factory AI - **0.116.1** + **0.117.0** Date: Mon, 4 May 2026 07:26:01 +0000 Subject: [PATCH 006/152] docs: update registry agents (#1116) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 002b132f9..1f5ccfa0b 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -67,7 +67,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Augment Code's powerful software agent, backed by industry-leading context engine - **0.25.1**, + **0.25.2**, + + The open source coding agent - **7.2.31**, + **7.2.34**, - - Date: Mon, 4 May 2026 10:27:19 +0000 Subject: [PATCH 007/152] docs: update registry agents (#1117) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 108 ++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 1f5ccfa0b..983afad16 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -843,6 +843,114 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol **0.15.6**, + + Date: Mon, 4 May 2026 15:22:59 +0000 Subject: [PATCH 008/152] docs: update registry agents (#1118) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 983afad16..29faa2b25 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -963,7 +963,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Open-source DevOps agent in Rust with enterprise-grade security - **0.3.78**, + **0.3.79**, Date: Mon, 4 May 2026 17:53:32 +0000 Subject: [PATCH 009/152] docs: update registry agents (#1119) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 29faa2b25..31f5e0e7c 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -282,7 +282,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.28**, + **0.3.31**, Date: Mon, 4 May 2026 21:26:53 +0200 Subject: [PATCH 010/152] chore(deps): bump the minor group with 16 updates (#1122) Bumps the minor group with 16 updates: | Package | From | To | | --- | --- | --- | | [mint](https://github.com/mintlify/mint/tree/HEAD/packages/mint) | `4.2.531` | `4.2.546` | | [@mintlify/cli](https://github.com/mintlify/mint/tree/HEAD/packages/cli) | `4.0.1134` | `4.0.1149` | | [@mintlify/link-rot](https://github.com/mintlify/mint/tree/HEAD/packages/link-rot) | `3.0.1043` | `3.0.1057` | | [@mintlify/prebuild](https://github.com/mintlify/mint/tree/HEAD/packages/prebuild) | `1.0.1008` | `1.0.1022` | | [@mintlify/previewing](https://github.com/mintlify/mint/tree/HEAD/packages/previewing) | `4.0.1069` | `4.0.1083` | | [b4a](https://github.com/holepunchto/b4a) | `1.8.0` | `1.8.1` | | [bare-os](https://github.com/holepunchto/bare-os) | `3.9.0` | `3.9.1` | | [bare-stream](https://github.com/holepunchto/bare-stream) | `2.13.0` | `2.13.1` | | [basic-ftp](https://github.com/patrickjuchli/basic-ftp) | `5.3.0` | `5.3.1` | | [es-toolkit](https://github.com/toss/es-toolkit) | `1.46.0` | `1.46.1` | | [fast-uri](https://github.com/fastify/fast-uri) | `3.1.0` | `3.1.1` | | [ip-address](https://github.com/beaugunderson/ip-address) | `10.1.1` | `10.2.0` | | [nanoid](https://github.com/ai/nanoid) | `3.3.11` | `3.3.12` | | [node-abi](https://github.com/electron/node-abi) | `3.89.0` | `3.90.0` | | [socks](https://github.com/JoshGlazebrook/socks) | `2.8.7` | `2.8.8` | | [yaml](https://github.com/eemeli/yaml) | `2.8.3` | `2.8.4` | Updates `mint` from 4.2.531 to 4.2.546 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/mint) Updates `@mintlify/cli` from 4.0.1134 to 4.0.1149 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/cli) Updates `@mintlify/link-rot` from 3.0.1043 to 3.0.1057 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/link-rot) Updates `@mintlify/prebuild` from 1.0.1008 to 1.0.1022 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/prebuild) Updates `@mintlify/previewing` from 4.0.1069 to 4.0.1083 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/previewing) Updates `b4a` from 1.8.0 to 1.8.1 - [Release notes](https://github.com/holepunchto/b4a/releases) - [Commits](https://github.com/holepunchto/b4a/compare/v1.8.0...v1.8.1) Updates `bare-os` from 3.9.0 to 3.9.1 - [Release notes](https://github.com/holepunchto/bare-os/releases) - [Commits](https://github.com/holepunchto/bare-os/compare/v3.9.0...v3.9.1) Updates `bare-stream` from 2.13.0 to 2.13.1 - [Release notes](https://github.com/holepunchto/bare-stream/releases) - [Commits](https://github.com/holepunchto/bare-stream/compare/v2.13.0...v2.13.1) Updates `basic-ftp` from 5.3.0 to 5.3.1 - [Release notes](https://github.com/patrickjuchli/basic-ftp/releases) - [Changelog](https://github.com/patrickjuchli/basic-ftp/blob/master/CHANGELOG.md) - [Commits](https://github.com/patrickjuchli/basic-ftp/compare/v5.3.0...v5.3.1) Updates `es-toolkit` from 1.46.0 to 1.46.1 - [Release notes](https://github.com/toss/es-toolkit/releases) - [Changelog](https://github.com/toss/es-toolkit/blob/main/CHANGELOG.md) - [Commits](https://github.com/toss/es-toolkit/compare/v1.46.0...v1.46.1) Updates `fast-uri` from 3.1.0 to 3.1.1 - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.1) Updates `ip-address` from 10.1.1 to 10.2.0 - [Commits](https://github.com/beaugunderson/ip-address/commits) Updates `nanoid` from 3.3.11 to 3.3.12 - [Release notes](https://github.com/ai/nanoid/releases) - [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md) - [Commits](https://github.com/ai/nanoid/compare/3.3.11...3.3.12) Updates `node-abi` from 3.89.0 to 3.90.0 - [Release notes](https://github.com/electron/node-abi/releases) - [Commits](https://github.com/electron/node-abi/compare/v3.89.0...v3.90.0) Updates `socks` from 2.8.7 to 2.8.8 - [Release notes](https://github.com/JoshGlazebrook/socks/releases) - [Commits](https://github.com/JoshGlazebrook/socks/commits/2.8.8) Updates `yaml` from 2.8.3 to 2.8.4 - [Release notes](https://github.com/eemeli/yaml/releases) - [Commits](https://github.com/eemeli/yaml/compare/v2.8.3...v2.8.4) --- updated-dependencies: - dependency-name: mint dependency-version: 4.2.546 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/cli" dependency-version: 4.0.1149 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/link-rot" dependency-version: 3.0.1057 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/prebuild" dependency-version: 1.0.1022 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/previewing" dependency-version: 4.0.1083 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: b4a dependency-version: 1.8.1 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: bare-os dependency-version: 3.9.1 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: bare-stream dependency-version: 2.13.1 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: basic-ftp dependency-version: 5.3.1 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: es-toolkit dependency-version: 1.46.1 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: fast-uri dependency-version: 3.1.1 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: ip-address dependency-version: 10.2.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor - dependency-name: nanoid dependency-version: 3.3.12 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: node-abi dependency-version: 3.90.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor - dependency-name: socks dependency-version: 2.8.8 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: yaml dependency-version: 2.8.4 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 179 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 91 insertions(+), 90 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df9caca8..82354ecaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "license": "Apache-2.0", "devDependencies": { - "mint": "^4.2.531", + "mint": "^4.2.546", "prettier": "^3.8.3" } }, @@ -1049,18 +1049,19 @@ } }, "node_modules/@mintlify/cli": { - "version": "4.0.1134", - "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.1134.tgz", - "integrity": "sha512-BTDUtv15RiqyN9ci/4zPKKpYWdnSvR57WAAlWXxCBCk2nNMYMKBTSVCmmJ91CriYOyUrXrKXrAI1UMiWBrWvzQ==", + "version": "4.0.1149", + "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.1149.tgz", + "integrity": "sha512-Dayno78sMOZeZm1Z7DyDAYCZXRRAtr7Z3mx2YE0FQY3dXLaRyx/EztplYmtCt0osWvFVm/UYvCph3D4gRdn2yA==", "dev": true, "license": "Elastic-2.0", "dependencies": { "@inquirer/prompts": "7.9.0", - "@mintlify/common": "1.0.865", - "@mintlify/link-rot": "3.0.1043", - "@mintlify/prebuild": "1.0.1008", - "@mintlify/previewing": "4.0.1069", - "@mintlify/validation": "0.1.676", + "@mintlify/common": "1.0.879", + "@mintlify/link-rot": "3.0.1057", + "@mintlify/models": "0.0.303", + "@mintlify/prebuild": "1.0.1022", + "@mintlify/previewing": "4.0.1083", + "@mintlify/validation": "0.1.686", "adm-zip": "0.5.16", "chalk": "5.2.0", "color": "4.2.3", @@ -1092,18 +1093,18 @@ } }, "node_modules/@mintlify/common": { - "version": "1.0.865", - "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.865.tgz", - "integrity": "sha512-p+mDIOwdtSGhgiRvr3mVNBT/PeXB3x2klkmX10SmRdePoyKheDtCqwao67f+4Av2bOeCUX3nti8Ccz6XTW/4BQ==", + "version": "1.0.879", + "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.879.tgz", + "integrity": "sha512-EutGZNtTC3xbTRg3cQ0Y31jIkgVDJe/2p0qq7m307cTPQi9+ZGdtDnYi7dtAgIn5WHZJFw0ZaVcFpFlEIa3hSA==", "dev": true, "license": "ISC", "dependencies": { "@asyncapi/parser": "3.4.0", "@asyncapi/specs": "6.8.1", "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.296", + "@mintlify/models": "0.0.303", "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/validation": "0.1.676", + "@mintlify/validation": "0.1.686", "@sindresorhus/slugify": "2.2.0", "@types/mdast": "4.0.4", "acorn": "8.11.2", @@ -1560,18 +1561,18 @@ } }, "node_modules/@mintlify/link-rot": { - "version": "3.0.1043", - "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.1043.tgz", - "integrity": "sha512-5Bk5aO/fmcVlmCG89A4hd/8YH7yW1A1tTkEPI9Dbu/HzG6gQSegya4FU7jplbx6+y/GBleK1/Du91xvi4FZVHA==", + "version": "3.0.1057", + "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.1057.tgz", + "integrity": "sha512-hrIlUfIiEkiDktQjXhBIqw6UwepDBcltLuM018BEmlC5Q1jrwK50yxLtSfUMspglTrWzvXIfJDkjrJW6KoPndQ==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.865", - "@mintlify/models": "0.0.296", - "@mintlify/prebuild": "1.0.1008", - "@mintlify/previewing": "4.0.1069", + "@mintlify/common": "1.0.879", + "@mintlify/models": "0.0.303", + "@mintlify/prebuild": "1.0.1022", + "@mintlify/previewing": "4.0.1083", "@mintlify/scraping": "4.0.522", - "@mintlify/validation": "0.1.676", + "@mintlify/validation": "0.1.686", "fs-extra": "11.1.0", "unist-util-visit": "4.1.2" }, @@ -1647,9 +1648,9 @@ } }, "node_modules/@mintlify/models": { - "version": "0.0.296", - "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.296.tgz", - "integrity": "sha512-VwBsKkS9zWLIfGxRzb7op5GkvtsdRp8+EbICMVBEHwlj+AGir8frGOvNC1fOiyqf+mYj/IJrP6t9y3qFPqR8hg==", + "version": "0.0.303", + "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.303.tgz", + "integrity": "sha512-O4Y3x4Yxui6ki4oGREwqkQ2kCC44mHE0FTYCjDvsgkwqVWRO5H35q7xaLIPyoU+Fckgn2QZ2l4YhO/wxvohnlA==", "dev": true, "license": "Elastic-2.0", "dependencies": { @@ -1697,16 +1698,16 @@ } }, "node_modules/@mintlify/prebuild": { - "version": "1.0.1008", - "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.1008.tgz", - "integrity": "sha512-LpTYAB4ORpARBzzl2nN0ZxqQJWMauANs+CJQgzF/DNFO/LGAdGdCsXXuOT4lukdnU9BfKOVz9G72e05LYdQJDg==", + "version": "1.0.1022", + "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.1022.tgz", + "integrity": "sha512-owJMaOkVhPICeiY3khPd5cab+Q/uqDhp2T0tgHcqHJiQuJWM0fxhvDkXKpwuQE1GLGT77BmDl5/m/lPucINGcw==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.865", + "@mintlify/common": "1.0.879", "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/scraping": "4.0.729", - "@mintlify/validation": "0.1.676", + "@mintlify/scraping": "4.0.743", + "@mintlify/validation": "0.1.686", "chalk": "5.3.0", "favicons": "7.2.0", "front-matter": "4.0.2", @@ -1720,13 +1721,13 @@ } }, "node_modules/@mintlify/prebuild/node_modules/@mintlify/scraping": { - "version": "4.0.729", - "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.729.tgz", - "integrity": "sha512-H6TN+R2Y1j20+1F1zldjX8qhoLBUztxpT3kW5DOzz+nYTIg0Vs2KlKeQ8lK4dBubp6bPNZDavP/v2pM94nTQlQ==", + "version": "4.0.743", + "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.743.tgz", + "integrity": "sha512-NNgTHdHLqoGZwdmL9Z3PxNY1wee1gRPb3IcpBv84QC/rovwflimB7h51TEz7aLJkZE5vdgv1c9tuY2TpyDGlIA==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.865", + "@mintlify/common": "1.0.879", "@mintlify/openapi-parser": "^0.0.8", "fs-extra": "11.1.1", "hast-util-to-mdast": "10.1.0", @@ -1913,15 +1914,15 @@ } }, "node_modules/@mintlify/previewing": { - "version": "4.0.1069", - "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.1069.tgz", - "integrity": "sha512-jLA5oNf5uXdWS8t5q+Fdb3FUkIi5QTWgZrHUZWuZ1Ec1WZYnwsd5j+05aSBpLr6dD5zEGWfSl6M/xSBXM2XQzA==", + "version": "4.0.1083", + "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.1083.tgz", + "integrity": "sha512-EGGjNwF0NC/+WqvYGB7wteq+cgyEbkZdmqknhQMYGV+QhqwdeQYRs5s4M2m6zD8NIFGKClwxTrnblTBXpZdWjg==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.865", - "@mintlify/prebuild": "1.0.1008", - "@mintlify/validation": "0.1.676", + "@mintlify/common": "1.0.879", + "@mintlify/prebuild": "1.0.1022", + "@mintlify/validation": "0.1.686", "adm-zip": "0.5.16", "better-opn": "3.0.2", "chalk": "5.2.0", @@ -2745,14 +2746,14 @@ } }, "node_modules/@mintlify/validation": { - "version": "0.1.676", - "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.676.tgz", - "integrity": "sha512-aPJVM9R2Dw0MDBWkN6BrziIH2jEdxU4MLtyvLArmB9gz7tPquPzzOWSQqafQM5QEsnPhRxRzsbteunXfDWFzFQ==", + "version": "0.1.686", + "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.686.tgz", + "integrity": "sha512-XmI6HB8CuCxgyCA9m8geu9a6BQO6DfDtDXteiqj55Qz+S+cwZ1TW9YDI6hGzHbVQPpzuwyUU3I8l3TxaLfYPCw==", "dev": true, "license": "Elastic-2.0", "dependencies": { "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.296", + "@mintlify/models": "0.0.303", "arktype": "2.1.27", "js-yaml": "4.1.0", "lcm": "0.0.3", @@ -3296,9 +3297,9 @@ } }, "node_modules/@puppeteer/browsers/node_modules/tar-stream": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", - "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz", + "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", "dev": true, "license": "MIT", "dependencies": { @@ -4779,9 +4780,9 @@ } }, "node_modules/b4a": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", - "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -4852,9 +4853,9 @@ } }, "node_modules/bare-os": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.0.tgz", - "integrity": "sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.1.tgz", + "integrity": "sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4872,9 +4873,9 @@ } }, "node_modules/bare-stream": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.0.tgz", - "integrity": "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.1.tgz", + "integrity": "sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4940,9 +4941,9 @@ } }, "node_modules/basic-ftp": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.0.tgz", - "integrity": "sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", "dev": true, "license": "MIT", "engines": { @@ -6532,9 +6533,9 @@ } }, "node_modules/es-toolkit": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.0.tgz", - "integrity": "sha512-IToJ6ct9OLl5zz6WsC/1vZEwfSZ7Myil+ygl5Tf30Xjn9AEkzNB4kqp2G7VUJKF1DtTx/ra5M5KLlXvzOg51BA==", + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.46.1.tgz", + "integrity": "sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ==", "dev": true, "license": "MIT", "workspaces": [ @@ -6969,9 +6970,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.1.tgz", + "integrity": "sha512-h2r7rcm6Ee/J8o0LD5djLuFVcfbZxhvho4vvsbeV0aMvXjUgqv4YpxpkEx0d68l6+IleVfLAdVEfhR7QNMkGHQ==", "dev": true, "funding": [ { @@ -8363,9 +8364,9 @@ } }, "node_modules/ip-address": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.1.tgz", - "integrity": "sha512-1FMu8/N15Ck1BL551Jf42NYIoin2unWjLQ2Fze/DXryJRl5twqtwNHlO39qERGbIOcKYWHdgRryhOC+NG4eaLw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", "dev": true, "license": "MIT", "engines": { @@ -10604,13 +10605,13 @@ } }, "node_modules/mint": { - "version": "4.2.531", - "resolved": "https://registry.npmjs.org/mint/-/mint-4.2.531.tgz", - "integrity": "sha512-AxdWSgByE0OKNuapg3ruAe8mKWqBiEv+FqvTWaXt6jjyERFemd4c5B0mZ7LS0P0Qmr9IzEaeNjouwT5tp+Wx3A==", + "version": "4.2.546", + "resolved": "https://registry.npmjs.org/mint/-/mint-4.2.546.tgz", + "integrity": "sha512-6gLgon/0ocrxNg1ZZHoD5d3ZqsKqrUJujjDiArJ+C9LCJJOCnu9TuGUmi77orE1ddP6UOmdI6fsBbAvaYmH66A==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/cli": "4.0.1134" + "@mintlify/cli": "4.0.1149" }, "bin": { "mint": "index.js" @@ -10677,9 +10678,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "dev": true, "funding": [ { @@ -10768,9 +10769,9 @@ } }, "node_modules/node-abi": { - "version": "3.89.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", - "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", + "version": "3.90.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.90.0.tgz", + "integrity": "sha512-pZNQT7UnYlMwMBy5N1lV5X/YLTbZM5ncytN3xL7CHEzhDN8uVe0u55yaPUJICIJjaCW8NrM5BFdqr7HLweStNA==", "dev": true, "license": "MIT", "optional": true, @@ -13229,13 +13230,13 @@ } }, "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", + "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^10.0.1", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -14835,9 +14836,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", - "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", + "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", "dev": true, "license": "ISC", "bin": { @@ -14966,9 +14967,9 @@ "license": "MIT" }, "node_modules/zod": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", - "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index f757ad1ee..46d9e597f 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "docs": "cd docs && npx mint dev" }, "devDependencies": { - "mint": "^4.2.531", + "mint": "^4.2.546", "prettier": "^3.8.3" } } From 9f66bbb7b2bdeb81d0fbae6f3d7b7a17af215db3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 21:27:12 +0200 Subject: [PATCH 011/152] chore(deps): bump the minor group with 2 updates (#1121) Bumps the minor group with 2 updates: [serde_with](https://github.com/jonasbb/serde_with) and [serde_with_macros](https://github.com/jonasbb/serde_with). Updates `serde_with` from 3.18.0 to 3.19.0 - [Release notes](https://github.com/jonasbb/serde_with/releases) - [Commits](https://github.com/jonasbb/serde_with/compare/v3.18.0...v3.19.0) Updates `serde_with_macros` from 3.18.0 to 3.19.0 - [Release notes](https://github.com/jonasbb/serde_with/releases) - [Commits](https://github.com/jonasbb/serde_with/compare/v3.18.0...v3.19.0) --- updated-dependencies: - dependency-name: serde_with dependency-version: 3.19.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: serde_with_macros dependency-version: 3.19.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4eca15f51..7aa84afaf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -473,9 +473,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.18.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5414fad8e6907dbdd5bc441a50ae8d6e26151a03b1de04d89a5576de61d01f" +checksum = "f05839ce67618e14a09b286535c0d9c94e85ef25469b0e13cb4f844e5593eb19" dependencies = [ "base64", "chrono", @@ -492,9 +492,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.18.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3db8978e608f1fe7357e211969fd9abdcae80bac1ba7a3369bb7eb6b404eb65" +checksum = "cf2ebbe86054f9b45bc3881e865683ccfaccce97b9b4cb53f3039d67f355a334" dependencies = [ "darling", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index 55ed3693c..82a36ca4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,7 +61,7 @@ derive_more = { version = "2", features = ["from", "display"] } schemars = { version = "1" } serde = { version = "1", features = ["derive", "rc"] } serde_json = { version = "1", features = ["raw_value"] } -serde_with = { version = "3.18.0", features = ["json", "schemars_1"] } +serde_with = { version = "3.19.0", features = ["json", "schemars_1"] } strum = { version = "0.28", features = ["derive"] } tracing = { version = "0.1", default-features = false, optional = true } From d54d100ad3700672c94eb3ef7e4fa7eb5cb0bb0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 21:27:25 +0200 Subject: [PATCH 012/152] chore(deps): bump crate-ci/typos from 1.45.2 to 1.46.0 (#1120) Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.45.2 to 1.46.0. - [Release notes](https://github.com/crate-ci/typos/releases) - [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md) - [Commits](https://github.com/crate-ci/typos/compare/7c572958218557a3272c2d6719629443b5cc26fd...bbaefadf97b0ec5fdc942684b647f1a6ab250274) --- updated-dependencies: - dependency-name: crate-ci/typos dependency-version: 1.46.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c1bf181eb..445f22106 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: run: npm run format:check - name: Check for typos - uses: crate-ci/typos@7c572958218557a3272c2d6719629443b5cc26fd + uses: crate-ci/typos@bbaefadf97b0ec5fdc942684b647f1a6ab250274 with: config: ./typos.toml From 5ca3640765f1c10c7da201851ea93d793dfeae56 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 19:57:23 +0000 Subject: [PATCH 013/152] docs: update registry agents (#1123) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 31f5e0e7c..a5239e287 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -282,7 +282,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.31**, + **0.3.33**, Date: Mon, 4 May 2026 21:22:10 +0000 Subject: [PATCH 014/152] docs: update registry agents (#1125) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index a5239e287..51f90cc46 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -282,7 +282,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.33**, + **0.3.34**, Date: Mon, 4 May 2026 23:12:19 +0000 Subject: [PATCH 015/152] docs: update registry agents (#1126) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 51f90cc46..db1652e5d 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.117.0** + **0.118.0** Open-source DevOps agent in Rust with enterprise-grade security - **0.3.79**, + **0.3.80**, Date: Tue, 5 May 2026 00:09:47 +0000 Subject: [PATCH 016/152] docs: update registry agents (#1127) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index db1652e5d..6262c4b0a 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.14.33**, + **1.14.34**, Date: Tue, 5 May 2026 03:52:27 +0000 Subject: [PATCH 017/152] docs: update registry agents (#1128) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 6262c4b0a..74aa90740 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.14.34**, + **1.14.35**, Date: Tue, 5 May 2026 07:00:53 -0400 Subject: [PATCH 018/152] transports: Revisions on streamable-http/ws GET streams (#1124) * transports: Revisions on streamable-http/ws GET streams Server->client messages are now delivered over two long-lived GET SSE streams per connection: 1. Connection-scoped stream (GET with Acp-Connection-Id) carries connection-level messages, including responses to session/new and session/load which are produced before the client has a sessionId. 2. Session-scoped stream (GET with Acp-Connection-Id + Acp-Session-Id) carries session updates, request_permission, and responses to session-scoped POSTs. Routing is now done by HTTP header rather than by inspecting the sessionId in every JSON-RPC payload, and per-session streams have independent lifetimes (open/close/resume) without disturbing other sessions on the same connection. Updates the elevator pitch, HTTP transport characteristics, routing table, identity model, message flow diagram (with per-stream C/S annotations), content negotiation rules, unified endpoint routing, connection/session struct, MCP comparison, deviations, FAQ, and revision history. * Format streamable-http-websocket-transport.mdx with prettier Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Anna.Zhdan Co-authored-by: Claude Opus 4.6 (1M context) --- .../streamable-http-websocket-transport.mdx | 94 +++++++++++-------- 1 file changed, 56 insertions(+), 38 deletions(-) diff --git a/docs/rfds/streamable-http-websocket-transport.mdx b/docs/rfds/streamable-http-websocket-transport.mdx index 8a79c221a..5ceb0fcfc 100644 --- a/docs/rfds/streamable-http-websocket-transport.mdx +++ b/docs/rfds/streamable-http-websocket-transport.mdx @@ -9,9 +9,9 @@ title: "Streamable HTTP & WebSocket Transport" > What are you proposing to change? -ACP needs a standard remote transport. We propose a **single long-lived GET stream** for all server→client messages, with **POST** for client→server messages, and **WebSocket upgrade** as an alternative on the same endpoint. A single `/acp` endpoint supports two connectivity profiles: +ACP needs a standard remote transport. We propose **long-lived GET streams** for server→client messages (one connection-scoped plus one per session), with **POST** for client→server messages, and **WebSocket upgrade** as an alternative on the same endpoint. A single `/acp` endpoint supports two connectivity profiles: -- **Streamable HTTP (POST/GET/DELETE)** — Single long-lived SSE stream per connection for all server→client messages (responses and notifications). POST requests return immediately (202 Accepted, except `initialize`). Requires HTTP/2. +- **Streamable HTTP (POST/GET/DELETE)** — Long-lived SSE streams per connection: one connection-scoped stream for connection-level server→client messages, plus one session-scoped stream per session for session-level messages. POST requests return immediately (202 Accepted, except `initialize`). Requires HTTP/2. - **WebSocket upgrade (GET with `Upgrade: websocket`)** — persistent, full-duplex, low-latency bidirectional messaging. Clients that support remote ACP over HTTP MUST support both Streamable HTTP and WebSocket. This allows servers to support only WebSocket if they choose, simplifying deployment. @@ -32,11 +32,11 @@ ACP only has stdio. There is no standard remote transport, which causes fragment ACP adopts a streamable HTTP transport with three key characteristics: -1. **Single long-lived GET stream per connection** — All server→client messages (responses to requests and unsolicited notifications) are delivered via a single SSE stream opened with GET. This includes responses to client requests (correlated by JSON-RPC `id`), server-initiated notifications (no `id`), and server-to-client requests like `request_permission` (with `id`, client responds via POST). The GET stream is scoped to `Acp-Connection-Id` and delivers messages for all sessions within that connection. Session identity is carried in the JSON-RPC message body (`sessionId` field). +1. **Long-lived GET streams (one connection-scoped, one per session)** — All server→client messages (responses to requests and unsolicited notifications) are delivered via SSE streams opened with GET. The **connection-scoped stream** (scoped to `Acp-Connection-Id`) carries connection-level messages: responses to `session/new` and `session/load` (which the client cannot receive on a session-scoped stream because it does not yet have a `sessionId`), and any server-initiated messages not tied to a specific session. The **session-scoped stream** (scoped to `Acp-Connection-Id` + `Acp-Session-Id`) carries all messages for a single session: session update notifications, server-to-client requests like `request_permission`, and responses to session-scoped POSTs like `session/prompt` and `session/cancel`. Responses are correlated to the POST that originated them by JSON-RPC `id`. -2. **POST requests return immediately (except initialize)** — Client→server messages are sent via POST. Most POST requests return `202 Accepted` immediately with an empty body. The actual response comes later on the GET stream, correlated by JSON-RPC `id`. The `initialize` request is special: it returns `200 OK` with a JSON response body containing capabilities and the `Acp-Connection-Id`. The `Acp-Connection-Id` is also included in the response header. +2. **POST requests return immediately (except initialize)** — Client→server messages are sent via POST. Most POST requests return `202 Accepted` immediately with an empty body. The actual response comes later on the appropriate GET stream, correlated by JSON-RPC `id`. The `initialize` request is special: it returns `200 OK` with a JSON response body containing capabilities and the `Acp-Connection-Id`. The `Acp-Connection-Id` is also included in the response header. -3. **Requires HTTP/2** — Streamable HTTP transport MUST use HTTP/2. This provides multiplexing for concurrent POST requests while maintaining a single long-lived GET stream, and improves efficiency for high-frequency message exchanges. +3. **Requires HTTP/2** — Streamable HTTP transport MUST use HTTP/2. This provides multiplexing for concurrent POST requests while maintaining long-lived GET streams (one connection-scoped plus one per session), and improves efficiency for high-frequency message exchanges. ### 4. Adds WebSocket as a first-class upgrade on the same endpoint @@ -50,12 +50,12 @@ Clients MUST accept, store, and return cookies set by the server on all HTTP-bas ### 6. Defines a unified routing model -| Method | Upgrade Header? | Behavior | -| -------- | -------------------- | ----------------------------------------------------------------------------------------------------------- | -| `POST` | — | Send JSON-RPC message. `initialize` returns 200 with JSON body. All others return 202 Accepted immediately. | -| `GET` | No | Open connection-scoped SSE stream for all server→client messages. Requires `Acp-Connection-Id`. | -| `GET` | `Upgrade: websocket` | Upgrade to WebSocket for full-duplex messaging | -| `DELETE` | — | Terminate the connection | +| Method | Upgrade Header? | Behavior | +| -------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `POST` | — | Send JSON-RPC message. `initialize` returns 200 with JSON body. All others return 202 Accepted immediately. | +| `GET` | No | Open SSE stream. `Acp-Connection-Id` alone → connection-scoped stream. `Acp-Connection-Id` + `Acp-Session-Id` → session-scoped stream. | +| `GET` | `Upgrade: websocket` | Upgrade to WebSocket for full-duplex messaging | +| `DELETE` | — | Terminate the connection | ### 7. Preserves the full ACP lifecycle @@ -96,9 +96,9 @@ The `initialize` → `initialized` → messages → close lifecycle is identical ACP over Streamable HTTP uses two HTTP headers for connection and session identity, plus JSON-RPC message fields: -- **`Acp-Connection-Id`** (HTTP header) — Transport-level identifier returned by the server in the `initialize` response. Required on all HTTP requests after `initialize` and on the GET stream. Binds requests to an initialized connection and its negotiated capabilities. -- **`Acp-Session-Id`** (HTTP header) — Session-level identifier returned in the `session/new` response body. Required on all session-scoped POST requests (`session/prompt`, `session/cancel`, permission responses, etc.). Enables routing and debugging. -- **`sessionId`** (JSON-RPC field) — Session-level identifier also included in JSON-RPC `params` for session-scoped methods and in responses on the GET stream. A single connection may host multiple sessions, each with its own `sessionId`. +- **`Acp-Connection-Id`** (HTTP header) — Transport-level identifier returned by the server in the `initialize` response. Required on all HTTP requests after `initialize` and on every GET stream (both connection-scoped and session-scoped). Binds requests to an initialized connection and its negotiated capabilities. +- **`Acp-Session-Id`** (HTTP header) — Session-level identifier returned in the `session/new` response body. Required on all session-scoped POST requests (`session/prompt`, `session/cancel`, permission responses, etc.) and on the session-scoped GET stream. +- **`sessionId`** (JSON-RPC field) — Session-level identifier also included in JSON-RPC `params` for session-scoped methods and in responses on the GET streams. A single connection may host multiple sessions, each with its own `sessionId` and its own session-scoped GET stream. ### Streamable HTTP Message Flow @@ -114,11 +114,11 @@ Client Server │ Acp-Connection-Id: │ Response includes Acp-Connection-Id header │ Content-Type: application/json │ │ │ - │ ═══ Open GET Stream ═══ │ + │ ═══ Open Connection-Scoped GET ═══│ │ │ - │─── GET /acp ──────────────────────>│ Open long-lived SSE stream - │ Acp-Connection-Id: │ for all server→client messages - │ Accept: text/event-stream │ + │─── GET /acp ──────────────────────>│ Open long-lived connection-scoped SSE stream + │ Acp-Connection-Id: │ for connection-level server→client messages + │ Accept: text/event-stream │ (no Acp-Session-Id header) │ ┌─────────────────────│ (SSE stream open) │ │ │ │ │ │ @@ -130,9 +130,17 @@ Client Server │<────── 202 Accepted ───────────────│ (returns immediately) │ │ │ │<─────────────│─ SSE event ─────────│ { id: 2, result: { sessionId: "sess_abc123" } } - │ │ │ (response comes on GET stream) + │ │ │ (response on connection-scoped stream) + │ │ │ + │ ═══ Open Session-Scoped GET ═══ │ + │ │ + │─── GET /acp ──────────────────────>│ Open long-lived session-scoped SSE stream + │ Acp-Connection-Id: │ for sess_abc123 + │ Acp-Session-Id: sess_abc123 │ + │ Accept: text/event-stream │ + │ ┌─────────────────────│ (SSE stream open) │ │ │ - │ ═══ Prompt Flow ═══ │ + │ ═══ Prompt Flow ═══ │ (all events below arrive on the session-scoped stream) │ │ │─── POST /acp ─────────────────────>│ { method: "session/prompt", id: 3, │ Acp-Connection-Id: │ params: { sessionId: "sess_abc123", prompt } } @@ -198,22 +206,27 @@ Client Server │<────── 200 OK ─────────────────────│ { id: 1, result: { capabilities, connectionId } } │ Acp-Connection-Id: │ │ │ - │─── GET /acp ──────────────────────>│ Open new GET stream + │─── GET /acp ──────────────────────>│ Open new connection-scoped GET stream │ Acp-Connection-Id: │ │ ┌─────────────────────│ (SSE stream open) │ │ │ + │─── GET /acp ──────────────────────>│ Open session-scoped GET stream for sess_abc123 + │ Acp-Connection-Id: │ + │ Acp-Session-Id: sess_abc123 │ + │ ┌─────────────────────│ (SSE stream open) + │ │ │ │─── POST /acp ─────────────────────>│ { method: "session/load", id: 2, │ Acp-Connection-Id: │ params: { sessionId: "sess_abc123", cwd } } │ Acp-Session-Id: sess_abc123 │ │ │ │<────── 202 Accepted ───────────────│ │ │ │ - │<─────────────│─ SSE event ─────────│ notification: UserMessageChunk (sessionId: "sess_abc123") - │<─────────────│─ SSE event ─────────│ notification: AgentMessageChunk (sessionId: "sess_abc123") - │<─────────────│─ SSE event ─────────│ notification: ToolCall (sessionId: "sess_abc123") - │<─────────────│─ SSE event ─────────│ notification: ToolCallUpdate (sessionId: "sess_abc123") + │<─────────────│─ SSE event ─────────│ notification: UserMessageChunk (on session-scoped stream) + │<─────────────│─ SSE event ─────────│ notification: AgentMessageChunk (on session-scoped stream) + │<─────────────│─ SSE event ─────────│ notification: ToolCall (on session-scoped stream) + │<─────────────│─ SSE event ─────────│ notification: ToolCallUpdate (on session-scoped stream) │<─────────────│─ SSE event ─────────│ { id: 2, result: { sessionId: "sess_abc123" } } - │ │ │ (response comes on GET stream) + │ │ │ (response on connection-scoped stream) │ │ │ │ ═══ Connection Termination ═══ │ │ │ @@ -228,6 +241,7 @@ Client Server - POST `Content-Type` **MUST** be `application/json` (415 otherwise). - GET `Accept` **MUST** include `text/event-stream` (406 otherwise). - POST requests for session-scoped operations **MUST** include both `Acp-Connection-Id` and `Acp-Session-Id` headers. +- GET requests without `Upgrade: websocket` **MUST** include `Acp-Connection-Id`. If `Acp-Session-Id` is also present, the stream is session-scoped; otherwise it is connection-scoped. An unknown `Acp-Session-Id` for the given connection returns 404. - Batch JSON-RPC requests return 501. - HTTP/2 is **REQUIRED** for Streamable HTTP transport. @@ -260,7 +274,9 @@ GET /acp └── No → SSE stream handler ├── Missing Acp-Connection-Id? → 400 Bad Request ├── Unknown Acp-Connection-Id? → 404 Not Found - └── Valid Acp-Connection-Id → Open connection-scoped SSE stream + ├── Has Acp-Session-Id unknown for this connection? → 404 Not Found + ├── Has Acp-Session-Id → Open session-scoped SSE stream + └── No Acp-Session-Id → Open connection-scoped SSE stream POST /acp ├── Initialize request (no Acp-Connection-Id)? → Create connection, return 200 with JSON @@ -281,7 +297,7 @@ Connection { connection_id: String, // Acp-Connection-Id capabilities: NegotiatedCapabilities, sessions: HashMap, // keyed by sessionId (JSON-RPC field) - get_stream: Option, // Single GET stream for this connection + get_stream: Option, // Connection-scoped GET stream to_agent_tx: mpsc::Sender, from_agent_rx: Arc>>, handle: JoinHandle<()>, @@ -289,11 +305,12 @@ Connection { Session { session_id: String, // sessionId (JSON-RPC field) + get_stream: Option, // Session-scoped GET stream // session-specific state } ``` -The agent task is spawned once per connection. A single GET SSE stream delivers all server→client messages for that connection, regardless of which session they belong to. Sessions are identified by the `sessionId` field in JSON-RPC messages. The transport layer adapts channels to the wire format (SSE events for HTTP, text frames for WebSocket). +The agent task is spawned once per connection. Server→client messages are routed to either the connection-scoped GET stream or the appropriate session-scoped GET stream based on whether the message is tied to a specific session. Sessions are identified by the `sessionId` field in JSON-RPC messages. The transport layer adapts channels to the wire format (SSE events for HTTP, text frames for WebSocket). ### Comparing to MCP Streamable HTTP @@ -302,10 +319,10 @@ The agent task is spawned once per connection. A single GET SSE stream delivers | POST for all client→server messages | ✅ | Compliant | | Accept header validation (406) | ✅ | Compliant | | Notifications/responses return 202 | ✅ (except `initialize` returns 200) | Mostly compliant | -| Requests return SSE stream | ❌ (single long-lived GET stream instead) | Documented deviation | +| Requests return SSE stream | ❌ (long-lived GET streams instead) | Documented deviation | | Session ID on initialize response | ✅ (`Acp-Connection-Id`) | Compliant (renamed) | | Session ID required on subsequent requests | ✅ (`Acp-Connection-Id` + `Acp-Session-Id`) | Compliant (extended) | -| GET opens SSE stream | ✅ (single connection-scoped stream) | Compliant | +| GET opens SSE stream | ✅ (connection-scoped + session-scoped) | Compliant (extended) | | DELETE terminates session | ✅ (terminates connection) | Compliant | | 404 for unknown sessions | ✅ (unknown connection IDs) | Compliant | | Batch requests | ❌ (returns 501) | Documented deviation | @@ -314,10 +331,10 @@ The agent task is spawned once per connection. A single GET SSE stream delivers ### Deviations from MCP Streamable HTTP -1. **Single long-lived GET stream**: MCP opens a new SSE stream for each request response. ACP uses a single long-lived GET stream per connection for all server→client messages. POST requests (except `initialize`) return 202 Accepted immediately, and responses arrive on the GET stream correlated by JSON-RPC `id`. +1. **Long-lived GET streams (connection-scoped + per-session)**: MCP opens a new SSE stream for each request response. ACP uses long-lived GET streams per connection — one connection-scoped stream plus one session-scoped stream per session. POST requests (except `initialize`) return 202 Accepted immediately, and responses arrive on the appropriate GET stream correlated by JSON-RPC `id`. 2. **Initialize returns JSON directly**: MCP's `initialize` returns an SSE stream. ACP's `initialize` returns `200 OK` with a JSON response body containing capabilities and `connectionId`. The `Acp-Connection-Id` is also included in the response header. 3. **HTTP/2 required**: ACP requires HTTP/2 for multiplexing concurrent POST requests alongside the long-lived GET stream. -4. **Two-header model**: ACP uses both `Acp-Connection-Id` (for connection identity) and `Acp-Session-Id` (for session identity on POST requests). MCP only uses `Mcp-Session-Id`. This allows ACP to distinguish connection-level state from session-level operations while supporting multiple concurrent sessions on one connection. +4. **Two-header model**: ACP uses both `Acp-Connection-Id` (for connection identity) and `Acp-Session-Id` (for session identity on POST requests and on the session-scoped GET stream). MCP only uses `Mcp-Session-Id`. This allows ACP to distinguish connection-level state from session-level operations while supporting multiple concurrent sessions on one connection. 5. **WebSocket extension**: MCP doesn't define WebSocket. ACP adds it as a required client capability. Clients MUST support WebSocket, and servers MAY choose to only support WebSocket connections. 6. **Cookie support required**: Clients MUST handle cookies on HTTP transports for the duration of the connection, enabling sticky sessions and per-connection server state. 7. **No batch requests**: Returns 501. May be added later. @@ -336,11 +353,11 @@ The agent task is spawned once per connection. A single GET SSE stream delivers ### Why not just use MCP Streamable HTTP as-is? -MCP opens a new SSE stream for each request response, which creates many long-lived connections and complicates load balancing. ACP uses a single long-lived GET stream per connection for all server→client messages, dramatically reducing connection count and simplifying sticky session routing. This is better suited for ACP's bidirectional, multi-session nature. +MCP opens a new SSE stream for each request response, which creates many short-lived connections and complicates load balancing. ACP uses long-lived GET streams per connection (one connection-scoped plus one per session), dramatically reducing connection count and simplifying sticky session routing. This is better suited for ACP's bidirectional, multi-session nature. ### How are sessions identified? -ACP uses `Acp-Connection-Id` in HTTP headers to identify the connection, and `sessionId` in JSON-RPC message bodies to identify sessions. A single connection may host multiple sessions. The single GET stream delivers messages for all sessions, and clients demux by the `sessionId` field in each message. +ACP uses `Acp-Connection-Id` in HTTP headers to identify the connection, and `Acp-Session-Id` (plus the `sessionId` JSON-RPC field) to identify sessions. A single connection may host multiple sessions. The connection-scoped GET stream delivers connection-level messages; each session-scoped GET stream delivers messages for exactly one session. ### Why add WebSocket support? @@ -352,14 +369,14 @@ By inspecting the `Upgrade: websocket` header. This is standard HTTP behavior. ### Can a client have multiple sessions on one connection? -Yes. A client may call `session/new` multiple times within a single `Acp-Connection-Id`. Each returns a distinct `sessionId` in the response body. All messages for all sessions are delivered on the single GET stream. The client demuxes messages by the `sessionId` field in each JSON-RPC message. +Yes. A client may call `session/new` multiple times within a single `Acp-Connection-Id`. Each returns a distinct `sessionId` in the response body (delivered on the connection-scoped GET stream). For each session, the client opens a separate session-scoped GET stream using `Acp-Connection-Id` + `Acp-Session-Id`. ### What alternative approaches did you consider, and why did you settle on this one? - **Per-request SSE streams (like MCP)**: Rejected — creates too many long-lived connections, complicates load balancing, and wastes resources. - **Separate endpoints** (`/acp/http`, `/acp/ws`): Rejected — single endpoint is simpler; WebSocket upgrade is natural HTTP. - **WebSocket only**: Rejected — doesn't work through all proxies. -- **Session-scoped GET streams**: Rejected — still creates multiple long-lived connections per client. Connection-scoped stream with JSON-RPC demuxing is simpler. +- **Single connection-scoped GET stream with JSON-RPC demuxing**: Rejected — forces both server and client to parse JSON-RPC bodies to route by session, couples all sessions' backpressure together, and makes per-session resume/reconnect awkward. Splitting into a connection-scoped stream plus per-session streams keeps all session-level routing on HTTP headers. ### How does this interact with authentication? @@ -371,7 +388,7 @@ Clients SHOULD include it on all requests after initialization. Not yet implemen ### Why require HTTP/2? -HTTP/2 provides multiplexing, allowing many concurrent POST requests alongside the long-lived GET stream on a single TCP connection. This is essential for efficient operation with the single-stream model. HTTP/1.1 would require separate TCP connections for each concurrent POST, defeating the efficiency gains. +HTTP/2 provides multiplexing, allowing many concurrent POST requests alongside the long-lived GET streams (one connection-scoped plus one per active session) on a single TCP connection. This is essential for efficient operation with the long-lived-stream model. HTTP/1.1 would require separate TCP connections for each concurrent POST and each GET stream, defeating the efficiency gains. ## Revision history @@ -379,3 +396,4 @@ HTTP/2 provides multiplexing, allowing many concurrent POST requests alongside t - **2026-04-01**: Introduced a two-header identity model: `Acp-Connection-Id` (returned at `initialize`, binds to the connection) and `Acp-Session-Id` (returned at `session/new`, scopes to a session). This addresses feedback that the original single `Acp-Session-Id` conflated transport binding with ACP session identity, and enables session-scoped GET listener streams for targeted server-to-client event delivery. Removed connection-scoped GET streams — all GET SSE listeners now require both `Acp-Connection-Id` and `Acp-Session-Id`. - **2026-04-15**: Minor edits - **2026-04-23**: Major revision to single long-lived GET stream model. Changed from per-request SSE streams to a single connection-scoped GET stream for all server→client messages. POST requests (except `initialize`) now return 202 Accepted immediately. `initialize` returns 200 OK with JSON response body. Required HTTP/2 for multiplexing. This change makes the HTTP usage more similar to WebSocket and supports better the bidirectional nature of ACP. +- **2026-05-04**: Split the single GET stream into two: a connection-scoped stream (GET with `Acp-Connection-Id`) for connection-level messages such as responses to `session/new` and `session/load`, and session-scoped streams (GET with `Acp-Connection-Id` + `Acp-Session-Id`) for session updates, server-to-client requests like `request_permission`, and responses to session-scoped POSTs. Routing happens on HTTP headers rather than JSON-RPC body inspection; per-session streams have independent lifetimes. From 2c4e9fb389b36d8c3aded8c88d920e04bdb35c99 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 11:40:57 +0000 Subject: [PATCH 019/152] docs: update registry agents (#1129) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 74aa90740..80785555b 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -684,7 +684,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **7.2.34**, + **7.2.40**, The open source coding agent - **1.14.35**, + **1.14.39**, Date: Tue, 5 May 2026 22:33:04 +0200 Subject: [PATCH 020/152] docs(rfd): Add v2 Draft folder (#1130) --- docs/docs.json | 9 ++++++++- docs/rfds/v2/overview.md | 5 +++++ docs/rfds/{v2-prompt.mdx => v2/prompt.mdx} | 0 docs/v2-changes.md | 9 --------- 4 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 docs/rfds/v2/overview.md rename docs/rfds/{v2-prompt.mdx => v2/prompt.mdx} (100%) delete mode 100644 docs/v2-changes.md diff --git a/docs/docs.json b/docs/docs.json index 84d717ec0..961f796d5 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -130,7 +130,14 @@ "rfds/next-edit-suggestions", "rfds/additional-directories", "rfds/custom-llm-endpoint", - "rfds/streamable-http-websocket-transport" + "rfds/streamable-http-websocket-transport", + { + "group": "v2 Draft", + "expanded": true, + "root": "rfds/v2/overview", + "directory": "accordion", + "pages": ["rfds/v2/prompt"] + } ] }, { diff --git a/docs/rfds/v2/overview.md b/docs/rfds/v2/overview.md new file mode 100644 index 000000000..2d6e2219f --- /dev/null +++ b/docs/rfds/v2/overview.md @@ -0,0 +1,5 @@ +--- +title: "ACP v2 Proposal" +--- + +A collection of RFDs that require breaking changes to the protocol and should make up ACP v2. diff --git a/docs/rfds/v2-prompt.mdx b/docs/rfds/v2/prompt.mdx similarity index 100% rename from docs/rfds/v2-prompt.mdx rename to docs/rfds/v2/prompt.mdx diff --git a/docs/v2-changes.md b/docs/v2-changes.md deleted file mode 100644 index 9f76a8e2b..000000000 --- a/docs/v2-changes.md +++ /dev/null @@ -1,9 +0,0 @@ -# Proposal for changes in an ACP v2 - -A WIP document to keep track of ideas and proposals for breaking changes that would require a version bump in the protocol. - -## Proposed Changes - -- Make `clientInfo` and `agentInfo` required in the `initialize` request. - -## Agreed on Changes From 1edb36f6918e7924973bd2021f25b8c7a8d13c6b Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 09:39:35 +0000 Subject: [PATCH 021/152] docs: update registry agents (#1131) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 80785555b..e1b0758dc 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -67,7 +67,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Augment Code's powerful software agent, backed by industry-leading context engine - **0.25.2**, + **0.26.0**, Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.34**, + **0.3.36**, Factory Droid - AI coding agent powered by Factory AI - **0.118.0** + **0.119.0** Code and build agents with comprehensive multi-provider support - **0.6.26**, + **0.7.0**, Google's official CLI for Gemini - **0.40.1**, + **0.41.1**, GitHub's AI pair programmer - **1.0.40**, + **1.0.41**, Nova by Compass AI - a fully-fledged software engineer at your command - **1.1.3**, + **1.1.4**, Date: Wed, 6 May 2026 13:24:07 +0200 Subject: [PATCH 022/152] docs(rfd): v2 plan overview (#1132) Still a lot to do, but putting some of the framework in place. --- docs/docs.json | 9 +++-- docs/rfds/v2/overview.md | 84 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 88 insertions(+), 5 deletions(-) diff --git a/docs/docs.json b/docs/docs.json index 961f796d5..21d22ae52 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -123,20 +123,21 @@ "rfds/rust-sdk-v1", "rfds/logout-method", "rfds/session-delete", - "rfds/message-id", "rfds/diff-delete", "rfds/boolean-config-option", "rfds/elicitation", "rfds/next-edit-suggestions", "rfds/additional-directories", "rfds/custom-llm-endpoint", - "rfds/streamable-http-websocket-transport", { "group": "v2 Draft", "expanded": true, "root": "rfds/v2/overview", - "directory": "accordion", - "pages": ["rfds/v2/prompt"] + "pages": [ + "rfds/v2/prompt", + "rfds/message-id", + "rfds/streamable-http-websocket-transport" + ] } ] }, diff --git a/docs/rfds/v2/overview.md b/docs/rfds/v2/overview.md index 2d6e2219f..61b835ed2 100644 --- a/docs/rfds/v2/overview.md +++ b/docs/rfds/v2/overview.md @@ -2,4 +2,86 @@ title: "ACP v2 Proposal" --- -A collection of RFDs that require breaking changes to the protocol and should make up ACP v2. +Author(s): [@benbrandt](https://github.com/benbrandt) + +This is a tracking RFD for the collection of RFDs that require breaking changes to the protocol and should make up ACP v2. + +## Elevator pitch + +> What are you proposing to change? + +With ACP, we aim to move fast while keeping breaking changes to a minimum. However, we've gotten to a point where there are enough changes we would like to do that would benefit from some core redesigns that will allow for extending the protocol with new features more easily. + +We've also managed to add new features that has led to learnings that would benefit from consolidation and alignment in other areas of the protocol to smooth things out and make things more consistent. + +## Status quo + +> How do things work today and what problems does this cause? Why would we change things? + +We have had a fairly successful time adding new features via new capabilities and adding in new features in a non-breaking way. But some of the learnings we have made will require breaking changes, and it feels like there are enough of these built up, or RFDs we are stuck due to required changes that now is a good time to do so. + +## What we propose to do about it + +> What are you proposing to improve the situation? + +### Current Draft RFDs + +Current RFDs accepted as Drafts that are targeting v2 release + +- [New Prompt Lifecycle](./prompt.md) +- [Message IDs](../message-id.md) + - [Fork from specified IDs](../session-fork.mds) +- [Remote Transports](../streamable-http-websocket-transport.mdx) + +Other RFDs will progress separately and are not dependent on breaking changes (specifically the new prompt lifecycle) and can land in either or both v1 and v2. + +### RFDs to be Written + +Changes under consideration that still need to be drafted or moved to draft: + +- Capabilities: clean up naming and organization, as well as make some more capabilities required. +- Enum variant extension: Same as session config categories: \_ for extension, preserve non-underscore for future variants +- Streaming/Non-streaming consistency: Offer both options for both messages and tool calls + - Also Terminal Output type for streaming terminal output from an agent + - Expand diff types +- JSON-RPC Batch messages: clearer guidance on how SDK support should work for these +- Truncate/Edit support +- session/new changes: + - Providing starting message history + - Response can provide available commands + - Potentially config options +- Remove session modes and (unstable) session models. These are replaces by session config options +- Plan variants +- Subagent support + +## Shiny future + +> How will things will play out once this feature exists? + +There is a lof of work to do, especially on the SDK side, to support both versions, but it is likely that we should be able to allow Agents specifically to target v2 apis and gracefully fallback to v1 messages for v1 clients, to avoid huge support issues. + +However, once all of this work is in place, it should be much easier to make additional breaking changes in the future when necessary, we've been kind of letting this build up given the effort required for the entire ecosystem, but the ACP maintainers will be charting a course forward to make this as smooth as possible! + +## Implementation details and plan + +> Tell me more about your implementation. What is your detailed implementation plan? + +### v2 + v1 Schema publishing + +I have created a draft of the v2 schema, which is currently a direct duplicate of v1: + +This also has the necessary conversion types that are needed for Rust at least to convert between the two. But this has a nice side-effect of a clear diff of how the schema will change and also what conversion is necessary. So the plan is to start proposing draft RFDs with the relevant schema changes where possible for approval. + +Once we have more pieces in place, we can start publishing both schemas to assist SDK developers to start figuring out how to support this. **This should be done in an opt-in, off by default, clearly labeled unstable way for SDK consumers**. There will likely be bumps as we figure out the necessary plumbing and we shouldn't be shipping v2 in production without feature flags prior to a more stable release as we align all of the necessary pieces. + +### SDK Support + +With the needed breaking changes, as much as possible I am targeting having a consistent API surface for Agents, since they will want to target v2 apis but still support v1 clients. Because of how the version negotiation works, if we can achieve the same thing for clients that will be great, but if not, they will at least be provided clear version entrypoints. + +## Frequently asked questions + +> What questions have arisen over the course of authoring this document or during subsequent discussions? + +## Revision history + +2026-05-06: Initial draft From 79a9a8f3a1617f99fa7628ab76a9c0c71a51e43f Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Wed, 6 May 2026 16:35:59 +0200 Subject: [PATCH 023/152] docs(rfd): Fix link in overview doc (#1134) --- docs/rfds/v2/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfds/v2/overview.md b/docs/rfds/v2/overview.md index 61b835ed2..081dd74a4 100644 --- a/docs/rfds/v2/overview.md +++ b/docs/rfds/v2/overview.md @@ -68,7 +68,7 @@ However, once all of this work is in place, it should be much easier to make add ### v2 + v1 Schema publishing -I have created a draft of the v2 schema, which is currently a direct duplicate of v1: +I have created a [draft of the v2 schema](https://github.com/agentclientprotocol/agent-client-protocol/pull/1099), which is currently a direct duplicate of v1. This also has the necessary conversion types that are needed for Rust at least to convert between the two. But this has a nice side-effect of a clear diff of how the schema will change and also what conversion is necessary. So the plan is to start proposing draft RFDs with the relevant schema changes where possible for approval. From ee7dec173eab23b26df3f0ff7a321b421857a4df Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 14:49:09 +0000 Subject: [PATCH 024/152] docs: update registry agents (#1135) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index e1b0758dc..d73a21d3b 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -282,7 +282,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.36**, + **0.3.38**, Date: Wed, 6 May 2026 16:56:28 +0000 Subject: [PATCH 025/152] docs: update registry agents (#1136) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index d73a21d3b..2fad22f59 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -282,7 +282,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.38**, + **0.3.40**, GitHub's AI pair programmer - **1.0.41**, + **1.0.42**, AI coding assistant with agentic capabilities - **0.2.6** + **0.2.7** Date: Wed, 6 May 2026 20:48:44 +0000 Subject: [PATCH 026/152] docs: update registry agents (#1137) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 2fad22f59..18c4bc187 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -612,7 +612,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Google's official CLI for Gemini - **0.41.1**, + **0.41.2**, Date: Wed, 6 May 2026 23:09:07 +0000 Subject: [PATCH 027/152] docs: update registry agents (#1138) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 18c4bc187..5ef57e938 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -628,7 +628,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > GitHub's AI pair programmer - **1.0.42**, + **1.0.43**, Date: Thu, 7 May 2026 00:06:26 +0000 Subject: [PATCH 028/152] docs: update registry agents (#1139) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 5ef57e938..995d2becd 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.119.0** + **0.120.0** Date: Thu, 7 May 2026 04:07:26 +0000 Subject: [PATCH 029/152] docs: update registry agents (#1140) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 995d2becd..87ed1991f 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.120.0** + **0.120.1** The open source coding agent - **1.14.39**, + **1.14.40**, Date: Thu, 7 May 2026 07:20:12 +0000 Subject: [PATCH 030/152] docs: update registry agents (#1141) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 87ed1991f..e6a382d8f 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -772,7 +772,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Nova by Compass AI - a fully-fledged software engineer at your command - **1.1.4**, + **1.1.5**, Date: Thu, 7 May 2026 10:37:14 +0000 Subject: [PATCH 031/152] docs: update registry agents (#1142) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index e6a382d8f..49a8dd7c5 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -670,7 +670,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > AI Coding Agent by JetBrains - **1468.30.0**, + **1543.24.0**, Date: Thu, 7 May 2026 13:05:07 +0000 Subject: [PATCH 032/152] docs: update registry agents (#1143) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 49a8dd7c5..949623acc 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -829,7 +829,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > AI coding assistant with agentic capabilities - **0.2.7** + **0.2.8** Alibaba's Qwen coding assistant - **0.15.6**, + **0.15.7**, Date: Thu, 7 May 2026 15:38:35 +0000 Subject: [PATCH 033/152] docs: update registry agents (#1144) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 949623acc..c5c6e1952 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -151,7 +151,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Tencent Cloud's official intelligent coding tool - **2.95.0** + **2.95.1** The open source coding agent - **1.14.40**, + **1.14.41**, Date: Thu, 7 May 2026 18:00:16 +0000 Subject: [PATCH 034/152] docs: update registry agents (#1145) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index c5c6e1952..9cd846c30 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -841,7 +841,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Alibaba's Qwen coding assistant - **0.15.7**, + **0.15.8**, Date: Thu, 7 May 2026 20:48:03 +0100 Subject: [PATCH 035/152] docs(rfd): Add `model_config` rfd (#930) * Add plan rfd * Update website --------- Co-authored-by: Ben Brandt --- docs/docs.json | 1 + docs/rfds/model-config-category.mdx | 83 +++++++++++++++++++++++++++++ docs/rfds/updates.mdx | 14 +++++ 3 files changed, 98 insertions(+) create mode 100644 docs/rfds/model-config-category.mdx diff --git a/docs/docs.json b/docs/docs.json index 21d22ae52..94dcdf0e2 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -129,6 +129,7 @@ "rfds/next-edit-suggestions", "rfds/additional-directories", "rfds/custom-llm-endpoint", + "rfds/model-config-category", { "group": "v2 Draft", "expanded": true, diff --git a/docs/rfds/model-config-category.mdx b/docs/rfds/model-config-category.mdx new file mode 100644 index 000000000..376b6c986 --- /dev/null +++ b/docs/rfds/model-config-category.mdx @@ -0,0 +1,83 @@ +--- +title: "Model Config Option Category" +--- + +- Author(s): [anna239](https://github.com/anna239) + +## Elevator pitch + +Add a new `model_config` category to session configuration options, so that agents can expose model-related parameters (context size, speed/quality trade-offs, etc) and clients can group them alongside the main model selector in the UI. + +## Status quo + +The `category` field on `SessionConfigOption` currently supports three values: `mode`, `model`, and `thought_level`. This works well when the model is a single selector, but some agents expose many model configurations — context window size, speed tier, and similar settings that logically belong next to the model picker. + +## What we propose to do about it + +Add a `model_config` variant to `SessionConfigOptionCategory`. + +Agents tag any model-related parameters with `"category": "model_config"`, and clients render them near the primary `model` selector — for example as secondary controls within a model-picker popover or panel. + +### Relationship to `thought_level` + +Once `model_config` exists, `thought_level` is semantically a special case of a model configuration parameter. We keep `thought_level` as-is for backward compatibility — existing clients already handle it — but new model-related options should use `model_config`. + +## Shiny future + +Agents expose rich, parameterized model configurations over ACP. + +## Implementation details and plan + +### JSON format + +An agent declares model-config options in `configOptions`: + +```json +{ + "configOptions": [ + { + "id": "model", + "name": "Model", + "category": "model", + "type": "select", + "currentValue": "sonnet-4.5", + "options": [ + { "value": "sonnet-4.5", "name": "Sonnet 4.5" }, + { "value": "opus-4.6", "name": "Opus 4.6" } + ] + }, + { + "id": "context_size", + "name": "Context Size", + "category": "model_config", + "type": "select", + "currentValue": "200k", + "options": [ + { "value": "200k", "name": "200K" }, + { "value": "1m", "name": "1M" } + ] + }, + { + "id": "fast_mode", + "name": "Fast Mode", + "category": "model_config", + "type": "boolean", + "currentValue": false + } + ] +} +``` + +### Client behavior + +- Clients SHOULD render `model_config` options near the `model` selector (e.g., in the same popover or panel). +- Clients that do not recognize the category MUST handle it gracefully per the existing spec — the option still renders, just without special placement. +- No new client capability negotiation is needed. + +### Should `thought_level` move under `model_config`? + +Not now. Existing clients already handle `thought_level`, so changing its semantics would be a breaking change. New model-related parameters should use `model_config`; `thought_level` remains for backward compatibility. + +## Revision history + +- 2026-04-08: Initial proposal diff --git a/docs/rfds/updates.mdx b/docs/rfds/updates.mdx index 4c9b99632..2ff11f82c 100644 --- a/docs/rfds/updates.mdx +++ b/docs/rfds/updates.mdx @@ -6,6 +6,20 @@ rss: true This page tracks lifecycle changes for ACP Requests for Dialog. For broader ACP announcements, see [Updates](/updates). + +## model_config Category RFD moves to Draft + +The RFD for the `model_config` category been moved to Draft stage. Please review the [RFD](/rfds/model-config-category) for more information on the current proposal and provide feedback before the feature is stabilized. + + + + +## v2 Prompting RFD moves to Draft + +The RFD for how the prompt lifecycle will work in v2 of the protocol been moved to Draft stage. Please review the [RFD](/rfds/v2/prompt) for more information on the current proposal and provide feedback before the feature is stabilized. + + + ## session/close RFD moves to Completed From d6febc3ba94d928466f84c707b249b03921dc18d Mon Sep 17 00:00:00 2001 From: Artem Tyurin Date: Thu, 7 May 2026 22:12:21 +0200 Subject: [PATCH 036/152] docs: Clients page: create CLI/TUI category (#1146) * [Docs] Clients: create CLI/TUI category * Header --- docs/get-started/clients.mdx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/get-started/clients.mdx b/docs/get-started/clients.mdx index 00633df67..8ab810045 100644 --- a/docs/get-started/clients.mdx +++ b/docs/get-started/clients.mdx @@ -20,10 +20,16 @@ The following projects implement ACP directly, connect ACP agents to other envir - Visual Studio Code — through the [ACP Client](https://github.com/formulahendry/vscode-acp) extension - [Zed](https://zed.dev/docs/ai/external-agents) -## Clients and apps +## CLI and TUI -- [ACP UI](https://github.com/formulahendry/acp-ui) (Windows, macOS, Linux, iOS, Android, Web) - [acpx (CLI)](https://github.com/openclaw/acpx) +- [Nori CLI](https://github.com/tilework-tech/nori-cli) +- [pool](https://github.com/poolsideai/pool) +- [Toad](https://www.batrachian.ai/) + +## Desktop and Web + +- [ACP UI](https://github.com/formulahendry/acp-ui) (Windows, macOS, Linux, iOS, Android, Web) - [gemini-cli-desktop](https://github.com/Piebald-AI/gemini-cli-desktop) - [Agent Studio](https://github.com/sxhxliang/agent-studio) - [AionUi](https://github.com/iOfficeAI/AionUi) @@ -31,19 +37,15 @@ The following projects implement ACP directly, connect ACP agents to other envir - [DeepChat](https://github.com/ThinkInAIXYZ/deepchat) - [fabriqa.ai](https://fabriqa.ai) - [Harnss](https://github.com/OpenSource03/harnss) -- [iflow-cli](https://github.com/iflow-ai/iflow-cli) - [Jockey](https://github.com/recailai/jockey) — open-source multi-agent orchestrator (Tauri + Rust + SolidJS) that coordinates Claude Code, Gemini CLI, and Codex CLI via ACP - [Lody](https://lody.ai) - [Minion Mind](https://minion-mind.nebulame.com/) — through the [Agent Client](https://github.com/RAIT-09/obsidian-agent-client) plugin - [Mitto](https://github.com/inercia/mitto) -- [Nori CLI](https://github.com/tilework-tech/nori-cli) - [Ngent](https://github.com/beyond5959/ngent) -- [pool](https://github.com/poolsideai/pool) - [RayClaw](https://github.com/rayclaw/rayclaw?tab=readme-ov-file#acp-agent-client-protocol) - [RLM Code](https://github.com/SuperagenticAI/rlm-code) - [Sidequery _(coming soon)_](https://sidequery.dev) - [Tidewave](https://tidewave.ai/) -- [Toad](https://www.batrachian.ai/) - [Web Browser with AI SDK](https://github.com/mcpc-tech/ai-elements-remix-template) (powered by [@mcpc/acp-ai-provider](https://github.com/mcpc-tech/mcpc/tree/main/packages/acp-ai-provider)) ## Notebook and data tools From 5f658d268d47f864ae78a09d01e77fa127a1ba41 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 21:16:46 +0000 Subject: [PATCH 037/152] docs: update registry agents (#1147) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 9cd846c30..f726eee25 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -118,7 +118,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP wrapper for Anthropic's Claude - **0.32.0**, + **0.33.0**, Date: Thu, 7 May 2026 22:20:11 +0000 Subject: [PATCH 038/152] docs: update registry agents (#1148) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index f726eee25..afd511de2 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -118,7 +118,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP wrapper for Anthropic's Claude - **0.33.0**, + **0.33.1**, Date: Fri, 8 May 2026 00:08:26 +0000 Subject: [PATCH 039/152] docs: update registry agents (#1149) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index afd511de2..4ea493878 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.120.1** + **0.121.0** Date: Fri, 8 May 2026 06:11:01 +0000 Subject: [PATCH 040/152] docs: update registry agents (#1150) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 4ea493878..eeb74d94a 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -772,7 +772,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Nova by Compass AI - a fully-fledged software engineer at your command - **1.1.5**, + **1.1.6**, Date: Fri, 8 May 2026 14:18:21 +0000 Subject: [PATCH 041/152] docs: update registry agents (#1151) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index eeb74d94a..50541a8a1 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -165,7 +165,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP adapter for OpenAI's coding assistant - **0.13.0**, + **0.14.0**, Date: Fri, 8 May 2026 16:47:56 +0000 Subject: [PATCH 042/152] docs: update registry agents (#1152) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 50541a8a1..7826b3ba2 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -772,7 +772,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Nova by Compass AI - a fully-fledged software engineer at your command - **1.1.6**, + **1.1.7**, AI coding assistant with agentic capabilities - **0.2.8** + **0.2.9** Alibaba's Qwen coding assistant - **0.15.8**, + **0.15.9**, Date: Fri, 8 May 2026 22:13:29 +0000 Subject: [PATCH 043/152] docs: update registry agents (#1153) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 7826b3ba2..5330cd910 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -282,7 +282,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.40**, + **0.3.41**, GitHub's AI pair programmer - **1.0.43**, + **1.0.44**, Date: Fri, 8 May 2026 23:12:20 +0000 Subject: [PATCH 044/152] docs: update registry agents (#1154) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 5330cd910..45c8a08ed 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.121.0** + **0.122.0** Code and build agents with comprehensive multi-provider support - **0.7.0**, + **0.7.1**, Date: Sat, 9 May 2026 14:02:14 +0200 Subject: [PATCH 045/152] chore(deps-dev): bump fast-uri from 3.1.1 to 3.1.2 (#1155) Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.1 to 3.1.2. - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](https://github.com/fastify/fast-uri/compare/v3.1.1...v3.1.2) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82354ecaf..1fa11afcd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6970,9 +6970,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.1.tgz", - "integrity": "sha512-h2r7rcm6Ee/J8o0LD5djLuFVcfbZxhvho4vvsbeV0aMvXjUgqv4YpxpkEx0d68l6+IleVfLAdVEfhR7QNMkGHQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { From 2e4ab957ad988fa1961305e18d7dbb9d2f55f645 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 13:54:20 +0000 Subject: [PATCH 046/152] docs: update registry agents (#1156) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 45c8a08ed..d1abcde26 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -829,7 +829,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > AI coding assistant with agentic capabilities - **0.2.9** + **0.2.10** Date: Sat, 9 May 2026 17:14:38 +0000 Subject: [PATCH 047/152] docs: update registry agents (#1157) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index d1abcde26..ee3dd0d42 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -829,7 +829,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > AI coding assistant with agentic capabilities - **0.2.10** + **0.2.11** Date: Sat, 9 May 2026 18:07:51 +0000 Subject: [PATCH 048/152] docs: update registry agents (#1158) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index ee3dd0d42..e606eec9e 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.14.41**, + **1.14.42**, Date: Sat, 9 May 2026 19:34:15 +0000 Subject: [PATCH 049/152] docs: update registry agents (#1159) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index e606eec9e..2368a89bd 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.14.42**, + **1.14.43**, Date: Sat, 9 May 2026 21:04:53 +0000 Subject: [PATCH 050/152] docs: update registry agents (#1160) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 2368a89bd..2d569ab8b 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -684,7 +684,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **7.2.40**, + **7.2.49**, The open source coding agent - **1.14.43**, + **1.14.44**, Date: Sun, 10 May 2026 04:16:22 +0000 Subject: [PATCH 051/152] docs: update registry agents (#1161) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 2d569ab8b..d96e84fc7 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.14.44**, + **1.14.45**, Date: Sun, 10 May 2026 06:47:25 +0000 Subject: [PATCH 052/152] docs: update registry agents (#1163) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index d96e84fc7..9f813510f 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.14.45**, + **1.14.46**, Date: Sun, 10 May 2026 09:03:46 +0000 Subject: [PATCH 053/152] docs: update registry agents (#1164) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 9f813510f..359fd2f24 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -841,7 +841,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Alibaba's Qwen coding assistant - **0.15.9**, + **0.15.10**, Date: Sun, 10 May 2026 13:57:17 +0000 Subject: [PATCH 054/152] docs: update registry agents (#1165) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 359fd2f24..830c176a6 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -598,7 +598,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Code and build agents with comprehensive multi-provider support - **0.7.1**, + **0.7.2**, Date: Mon, 11 May 2026 04:38:09 +0000 Subject: [PATCH 055/152] docs: update registry agents (#1167) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 830c176a6..d2d6245d3 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -772,7 +772,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Nova by Compass AI - a fully-fledged software engineer at your command - **1.1.7**, + **1.1.8**, The open source coding agent - **1.14.46**, + **1.14.48**, Date: Mon, 11 May 2026 08:38:25 +0000 Subject: [PATCH 056/152] docs: update registry agents (#1168) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index d2d6245d3..9c9288699 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -698,7 +698,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Moonshot AI's coding assistant - **1.41.0**, + **1.42.0**, Date: Mon, 11 May 2026 01:52:10 -0700 Subject: [PATCH 057/152] docs: Add agentrq to clients and move gemini to alphanumeric sorted order (#1162) --- docs/get-started/clients.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/get-started/clients.mdx b/docs/get-started/clients.mdx index 8ab810045..ec9af1cf5 100644 --- a/docs/get-started/clients.mdx +++ b/docs/get-started/clients.mdx @@ -30,12 +30,13 @@ The following projects implement ACP directly, connect ACP agents to other envir ## Desktop and Web - [ACP UI](https://github.com/formulahendry/acp-ui) (Windows, macOS, Linux, iOS, Android, Web) -- [gemini-cli-desktop](https://github.com/Piebald-AI/gemini-cli-desktop) - [Agent Studio](https://github.com/sxhxliang/agent-studio) +- [AgentRQ](https://github.com/agentrq/agentrq) — Human-in-the-loop realtime task management and collaboration (Web) - [AionUi](https://github.com/iOfficeAI/AionUi) - [aizen](https://aizen.win) - [DeepChat](https://github.com/ThinkInAIXYZ/deepchat) - [fabriqa.ai](https://fabriqa.ai) +- [gemini-cli-desktop](https://github.com/Piebald-AI/gemini-cli-desktop) - [Harnss](https://github.com/OpenSource03/harnss) - [Jockey](https://github.com/recailai/jockey) — open-source multi-agent orchestrator (Tauri + Rust + SolidJS) that coordinates Claude Code, Gemini CLI, and Codex CLI via ACP - [Lody](https://lody.ai) From cece2b6dbbf427562e5b4995f8271fb6d23c8efc Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 12:24:54 +0000 Subject: [PATCH 058/152] docs: update registry agents (#1169) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 9c9288699..918bff51a 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -234,7 +234,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Cursor's coding agent - **2026.03.30** + **2026.05.09** Date: Mon, 11 May 2026 16:13:34 +0000 Subject: [PATCH 059/152] docs: update registry agents (#1171) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 918bff51a..dc85c4aaa 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -151,7 +151,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Tencent Cloud's official intelligent coding tool - **2.95.1** + **2.96.0** AI coding assistant with agentic capabilities - **0.2.11** + **0.2.12** Date: Mon, 11 May 2026 18:06:44 +0000 Subject: [PATCH 060/152] docs: update registry agents (#1172) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index dc85c4aaa..85992d3bd 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -640,7 +640,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP agent powered by Zhipu AI's GLM Coding Plan models (glm-5.1, glm-5-turbo, glm-4.7, glm-4.5-air). Supports streaming, tool calls, mid-session model switching, image input via Z.AI Coding Plan Vision MCP, and session load/fork/resume with on-disk persistence. - **1.1.2**, + **1.1.3**, Date: Mon, 11 May 2026 20:05:44 +0000 Subject: [PATCH 061/152] docs: update registry agents (#1174) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 85992d3bd..168104e34 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -628,7 +628,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > GitHub's AI pair programmer - **1.0.44**, + **1.0.45**, Date: Mon, 11 May 2026 22:00:03 +0000 Subject: [PATCH 062/152] chore(deps): bump crate-ci/typos from 1.46.0 to 1.46.1 (#1176) Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.46.0 to 1.46.1. - [Release notes](https://github.com/crate-ci/typos/releases) - [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md) - [Commits](https://github.com/crate-ci/typos/compare/bbaefadf97b0ec5fdc942684b647f1a6ab250274...5374cbf686e897b15713110e233094e2874de7ef) --- updated-dependencies: - dependency-name: crate-ci/typos dependency-version: 1.46.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 445f22106..226efe5f5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: run: npm run format:check - name: Check for typos - uses: crate-ci/typos@bbaefadf97b0ec5fdc942684b647f1a6ab250274 + uses: crate-ci/typos@5374cbf686e897b15713110e233094e2874de7ef with: config: ./typos.toml From 3584ba50bc119d94f659261d27cf4f8acdf47854 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 22:00:16 +0000 Subject: [PATCH 063/152] chore(deps): bump actions-rust-lang/setup-rust-toolchain (#1177) Bumps [actions-rust-lang/setup-rust-toolchain](https://github.com/actions-rust-lang/setup-rust-toolchain) from 1.16.0 to 1.16.1. - [Release notes](https://github.com/actions-rust-lang/setup-rust-toolchain/releases) - [Changelog](https://github.com/actions-rust-lang/setup-rust-toolchain/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions-rust-lang/setup-rust-toolchain/compare/2b1f5e9b395427c92ee4e3331786ca3c37afe2d7...46268bd060767258de96ed93c1251119784f2ab6) --- updated-dependencies: - dependency-name: actions-rust-lang/setup-rust-toolchain dependency-version: 1.16.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 226efe5f5..0d82a39e4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: cache: "npm" - name: Setup Rust - uses: actions-rust-lang/setup-rust-toolchain@2b1f5e9b395427c92ee4e3331786ca3c37afe2d7 + uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 with: toolchain: nightly,stable components: rustfmt,clippy From da7988beae2baf11f8627864e9cf641302468741 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 00:01:08 +0200 Subject: [PATCH 064/152] chore(deps): bump release-plz/action from 0.5.128 to 0.5.129 (#1175) Bumps [release-plz/action](https://github.com/release-plz/action) from 0.5.128 to 0.5.129. - [Release notes](https://github.com/release-plz/action/releases) - [Commits](https://github.com/release-plz/action/compare/1528104d2ca23787631a1c1f022abb64b34c1e11...064f4d1e36c843611ddf013be726beaa4ad804db) --- updated-dependencies: - dependency-name: release-plz/action dependency-version: 0.5.129 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-plz.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-plz.yml b/.github/workflows/release-plz.yml index 915e8d838..7e0ac0348 100644 --- a/.github/workflows/release-plz.yml +++ b/.github/workflows/release-plz.yml @@ -38,7 +38,7 @@ jobs: # GitHub App private key secret name private-key: ${{ secrets.RELEASE_PLZ_APP_PRIVATE_KEY }} - name: Run release-plz - uses: release-plz/action@1528104d2ca23787631a1c1f022abb64b34c1e11 + uses: release-plz/action@064f4d1e36c843611ddf013be726beaa4ad804db with: command: release env: @@ -59,7 +59,7 @@ jobs: - *install-rust - *generate-token - name: Run release-plz - uses: release-plz/action@1528104d2ca23787631a1c1f022abb64b34c1e11 + uses: release-plz/action@064f4d1e36c843611ddf013be726beaa4ad804db with: command: release-pr env: From f3840ebbe50c253a8eb917e419608b2158b53247 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 22:01:20 +0000 Subject: [PATCH 065/152] chore(deps): bump the minor group with 3 updates (#1178) Bumps the minor group with 3 updates: [serde_with](https://github.com/jonasbb/serde_with), [cc](https://github.com/rust-lang/cc-rs) and [serde_with_macros](https://github.com/jonasbb/serde_with). Updates `serde_with` from 3.19.0 to 3.20.0 - [Release notes](https://github.com/jonasbb/serde_with/releases) - [Commits](https://github.com/jonasbb/serde_with/compare/v3.19.0...v3.20.0) Updates `cc` from 1.2.61 to 1.2.62 - [Release notes](https://github.com/rust-lang/cc-rs/releases) - [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md) - [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.61...cc-v1.2.62) Updates `serde_with_macros` from 3.19.0 to 3.20.0 - [Release notes](https://github.com/jonasbb/serde_with/releases) - [Commits](https://github.com/jonasbb/serde_with/compare/v3.19.0...v3.20.0) --- updated-dependencies: - dependency-name: serde_with dependency-version: 3.20.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor - dependency-name: cc dependency-version: 1.2.62 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: serde_with_macros dependency-version: 3.20.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 37 +++++++++++++++++++++++++++++++------ Cargo.toml | 2 +- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7aa84afaf..e9b8a3703 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -43,6 +43,15 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + [[package]] name = "bumpalo" version = "3.20.2" @@ -51,9 +60,9 @@ checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "cc" -version = "1.2.61" +version = "1.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" dependencies = [ "find-msvc-tools", "shlex", @@ -473,11 +482,12 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.19.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05839ce67618e14a09b286535c0d9c94e85ef25469b0e13cb4f844e5593eb19" +checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" dependencies = [ "base64", + "bs58", "chrono", "hex", "indexmap 1.9.3", @@ -492,9 +502,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.19.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2ebbe86054f9b45bc3881e865683ccfaccce97b9b4cb53f3039d67f355a334" +checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" dependencies = [ "darling", "proc-macro2", @@ -577,6 +587,21 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tracing" version = "0.1.44" diff --git a/Cargo.toml b/Cargo.toml index 82a36ca4c..ff0761ac9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,7 +61,7 @@ derive_more = { version = "2", features = ["from", "display"] } schemars = { version = "1" } serde = { version = "1", features = ["derive", "rc"] } serde_json = { version = "1", features = ["raw_value"] } -serde_with = { version = "3.19.0", features = ["json", "schemars_1"] } +serde_with = { version = "3.20.0", features = ["json", "schemars_1"] } strum = { version = "0.28", features = ["derive"] } tracing = { version = "0.1", default-features = false, optional = true } From a3f6a4659af364e09007dd5113f10b23f596875f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 00:35:40 +0200 Subject: [PATCH 066/152] chore(deps): bump the minor group with 15 updates (#1180) Bumps the minor group with 15 updates: | Package | From | To | | --- | --- | --- | | [mint](https://github.com/mintlify/mint/tree/HEAD/packages/mint) | `4.2.546` | `4.2.558` | | [@mintlify/cli](https://github.com/mintlify/mint/tree/HEAD/packages/cli) | `4.0.1149` | `4.0.1161` | | [@mintlify/link-rot](https://github.com/mintlify/mint/tree/HEAD/packages/link-rot) | `3.0.1057` | `3.0.1069` | | [@mintlify/prebuild](https://github.com/mintlify/mint/tree/HEAD/packages/prebuild) | `1.0.1022` | `1.0.1034` | | [@mintlify/previewing](https://github.com/mintlify/mint/tree/HEAD/packages/previewing) | `4.0.1083` | `4.0.1095` | | [@types/estree](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/estree) | `1.0.8` | `1.0.9` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.6.0` | `25.7.0` | | [@ungap/structured-clone](https://github.com/ungap/structured-clone) | `1.3.0` | `1.3.1` | | [bare-url](https://github.com/holepunchto/bare-url) | `2.4.2` | `2.4.3` | | [get-east-asian-width](https://github.com/sindresorhus/get-east-asian-width) | `1.5.0` | `1.6.0` | | [is-core-module](https://github.com/inspect-js/is-core-module) | `2.16.1` | `2.16.2` | | [node-abi](https://github.com/electron/node-abi) | `3.90.0` | `3.92.0` | | [socks](https://github.com/JoshGlazebrook/socks) | `2.8.8` | `2.8.9` | | [undici-types](https://github.com/nodejs/undici) | `7.19.2` | `7.21.0` | | [yaml](https://github.com/eemeli/yaml) | `2.8.4` | `2.9.0` | Updates `mint` from 4.2.546 to 4.2.558 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/mint) Updates `@mintlify/cli` from 4.0.1149 to 4.0.1161 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/cli) Updates `@mintlify/link-rot` from 3.0.1057 to 3.0.1069 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/link-rot) Updates `@mintlify/prebuild` from 1.0.1022 to 1.0.1034 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/prebuild) Updates `@mintlify/previewing` from 4.0.1083 to 4.0.1095 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/previewing) Updates `@types/estree` from 1.0.8 to 1.0.9 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/estree) Updates `@types/node` from 25.6.0 to 25.7.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `@ungap/structured-clone` from 1.3.0 to 1.3.1 - [Commits](https://github.com/ungap/structured-clone/compare/v1.3.0...v1.3.1) Updates `bare-url` from 2.4.2 to 2.4.3 - [Release notes](https://github.com/holepunchto/bare-url/releases) - [Commits](https://github.com/holepunchto/bare-url/compare/v2.4.2...v2.4.3) Updates `get-east-asian-width` from 1.5.0 to 1.6.0 - [Release notes](https://github.com/sindresorhus/get-east-asian-width/releases) - [Commits](https://github.com/sindresorhus/get-east-asian-width/compare/v1.5.0...v1.6.0) Updates `is-core-module` from 2.16.1 to 2.16.2 - [Changelog](https://github.com/inspect-js/is-core-module/blob/main/CHANGELOG.md) - [Commits](https://github.com/inspect-js/is-core-module/compare/v2.16.1...v2.16.2) Updates `node-abi` from 3.90.0 to 3.92.0 - [Release notes](https://github.com/electron/node-abi/releases) - [Commits](https://github.com/electron/node-abi/compare/v3.90.0...v3.92.0) Updates `socks` from 2.8.8 to 2.8.9 - [Release notes](https://github.com/JoshGlazebrook/socks/releases) - [Commits](https://github.com/JoshGlazebrook/socks/compare/2.8.8...2.8.9) Updates `undici-types` from 7.19.2 to 7.21.0 - [Release notes](https://github.com/nodejs/undici/releases) - [Commits](https://github.com/nodejs/undici/compare/v7.19.2...v7.21.0) Updates `yaml` from 2.8.4 to 2.9.0 - [Release notes](https://github.com/eemeli/yaml/releases) - [Commits](https://github.com/eemeli/yaml/compare/v2.8.4...v2.9.0) --- updated-dependencies: - dependency-name: mint dependency-version: 4.2.558 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/cli" dependency-version: 4.0.1161 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/link-rot" dependency-version: 3.0.1069 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/prebuild" dependency-version: 1.0.1034 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/previewing" dependency-version: 4.0.1095 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@types/estree" dependency-version: 1.0.9 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@types/node" dependency-version: 25.7.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor - dependency-name: "@ungap/structured-clone" dependency-version: 1.3.1 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: bare-url dependency-version: 2.4.3 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: get-east-asian-width dependency-version: 1.6.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor - dependency-name: is-core-module dependency-version: 2.16.2 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: node-abi dependency-version: 3.92.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor - dependency-name: socks dependency-version: 2.8.9 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: undici-types dependency-version: 7.21.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor - dependency-name: yaml dependency-version: 2.9.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 164 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1fa11afcd..bb9437819 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "license": "Apache-2.0", "devDependencies": { - "mint": "^4.2.546", + "mint": "^4.2.558", "prettier": "^3.8.3" } }, @@ -1049,19 +1049,19 @@ } }, "node_modules/@mintlify/cli": { - "version": "4.0.1149", - "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.1149.tgz", - "integrity": "sha512-Dayno78sMOZeZm1Z7DyDAYCZXRRAtr7Z3mx2YE0FQY3dXLaRyx/EztplYmtCt0osWvFVm/UYvCph3D4gRdn2yA==", + "version": "4.0.1161", + "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.1161.tgz", + "integrity": "sha512-vUubQjIjeAb2eS6pztwSlmMQvGSIoJiaXb78/LCApiFnemDo0etwGZv5pBdMV2Z8E2MHx+zC4gbIjDK8NHER3w==", "dev": true, "license": "Elastic-2.0", "dependencies": { "@inquirer/prompts": "7.9.0", - "@mintlify/common": "1.0.879", - "@mintlify/link-rot": "3.0.1057", - "@mintlify/models": "0.0.303", - "@mintlify/prebuild": "1.0.1022", - "@mintlify/previewing": "4.0.1083", - "@mintlify/validation": "0.1.686", + "@mintlify/common": "1.0.890", + "@mintlify/link-rot": "3.0.1069", + "@mintlify/models": "0.0.306", + "@mintlify/prebuild": "1.0.1034", + "@mintlify/previewing": "4.0.1095", + "@mintlify/validation": "0.1.696", "adm-zip": "0.5.16", "chalk": "5.2.0", "color": "4.2.3", @@ -1093,18 +1093,18 @@ } }, "node_modules/@mintlify/common": { - "version": "1.0.879", - "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.879.tgz", - "integrity": "sha512-EutGZNtTC3xbTRg3cQ0Y31jIkgVDJe/2p0qq7m307cTPQi9+ZGdtDnYi7dtAgIn5WHZJFw0ZaVcFpFlEIa3hSA==", + "version": "1.0.890", + "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.890.tgz", + "integrity": "sha512-MjyN5fh1ujeAemLbJGd1jf6U9cXto6zNqyjrDoFIvDoBEluOFExOYGwwrWU1SClDGC6cISsZcX1lxsdoqtygnQ==", "dev": true, "license": "ISC", "dependencies": { "@asyncapi/parser": "3.4.0", "@asyncapi/specs": "6.8.1", "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.303", + "@mintlify/models": "0.0.306", "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/validation": "0.1.686", + "@mintlify/validation": "0.1.696", "@sindresorhus/slugify": "2.2.0", "@types/mdast": "4.0.4", "acorn": "8.11.2", @@ -1561,18 +1561,18 @@ } }, "node_modules/@mintlify/link-rot": { - "version": "3.0.1057", - "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.1057.tgz", - "integrity": "sha512-hrIlUfIiEkiDktQjXhBIqw6UwepDBcltLuM018BEmlC5Q1jrwK50yxLtSfUMspglTrWzvXIfJDkjrJW6KoPndQ==", + "version": "3.0.1069", + "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.1069.tgz", + "integrity": "sha512-55euuVtWYOTGZ+YvlYAnhTLxjSjOAWHD4swqp27GyS/JBkBsa8Hu6iqdTBfRT2WiKeDqY2xYTswS5uCUkWKsaA==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.879", - "@mintlify/models": "0.0.303", - "@mintlify/prebuild": "1.0.1022", - "@mintlify/previewing": "4.0.1083", + "@mintlify/common": "1.0.890", + "@mintlify/models": "0.0.306", + "@mintlify/prebuild": "1.0.1034", + "@mintlify/previewing": "4.0.1095", "@mintlify/scraping": "4.0.522", - "@mintlify/validation": "0.1.686", + "@mintlify/validation": "0.1.696", "fs-extra": "11.1.0", "unist-util-visit": "4.1.2" }, @@ -1648,9 +1648,9 @@ } }, "node_modules/@mintlify/models": { - "version": "0.0.303", - "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.303.tgz", - "integrity": "sha512-O4Y3x4Yxui6ki4oGREwqkQ2kCC44mHE0FTYCjDvsgkwqVWRO5H35q7xaLIPyoU+Fckgn2QZ2l4YhO/wxvohnlA==", + "version": "0.0.306", + "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.306.tgz", + "integrity": "sha512-3EUvTXg8OJ8mZzXRDga0bSGJwJWto2Wc7qIfoCzNH+MTOh531OWKPk/OAOcMaftJcDggETbCinfDb0GXiqLL8Q==", "dev": true, "license": "Elastic-2.0", "dependencies": { @@ -1698,16 +1698,16 @@ } }, "node_modules/@mintlify/prebuild": { - "version": "1.0.1022", - "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.1022.tgz", - "integrity": "sha512-owJMaOkVhPICeiY3khPd5cab+Q/uqDhp2T0tgHcqHJiQuJWM0fxhvDkXKpwuQE1GLGT77BmDl5/m/lPucINGcw==", + "version": "1.0.1034", + "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.1034.tgz", + "integrity": "sha512-zUP77WYXE+ILMgPVF+aX61Gg6p6N3ZdbuBvzcjb/LWIs/rHfiAmAymil1PYm5Bj0bezdoyw8W/JDH4Gyl99/gg==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.879", + "@mintlify/common": "1.0.890", "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/scraping": "4.0.743", - "@mintlify/validation": "0.1.686", + "@mintlify/scraping": "4.0.754", + "@mintlify/validation": "0.1.696", "chalk": "5.3.0", "favicons": "7.2.0", "front-matter": "4.0.2", @@ -1721,13 +1721,13 @@ } }, "node_modules/@mintlify/prebuild/node_modules/@mintlify/scraping": { - "version": "4.0.743", - "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.743.tgz", - "integrity": "sha512-NNgTHdHLqoGZwdmL9Z3PxNY1wee1gRPb3IcpBv84QC/rovwflimB7h51TEz7aLJkZE5vdgv1c9tuY2TpyDGlIA==", + "version": "4.0.754", + "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.754.tgz", + "integrity": "sha512-OEIWrc2hv1HBBBTOExx8QwXOIfCafqYKlqVZmk6cAuBJF6aRSvbhEHgSwySziicBftzOWSqE1iBWUFD9lDzxyQ==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.879", + "@mintlify/common": "1.0.890", "@mintlify/openapi-parser": "^0.0.8", "fs-extra": "11.1.1", "hast-util-to-mdast": "10.1.0", @@ -1914,15 +1914,15 @@ } }, "node_modules/@mintlify/previewing": { - "version": "4.0.1083", - "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.1083.tgz", - "integrity": "sha512-EGGjNwF0NC/+WqvYGB7wteq+cgyEbkZdmqknhQMYGV+QhqwdeQYRs5s4M2m6zD8NIFGKClwxTrnblTBXpZdWjg==", + "version": "4.0.1095", + "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.1095.tgz", + "integrity": "sha512-6uqxswGNffUnx/DUfkKtbZ0B3h6h1EEv8VWRQXl1TczkkCRR65m9/7kyCAPIEw5/4WoiNOO4ElSJajpg7+VuaA==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.879", - "@mintlify/prebuild": "1.0.1022", - "@mintlify/validation": "0.1.686", + "@mintlify/common": "1.0.890", + "@mintlify/prebuild": "1.0.1034", + "@mintlify/validation": "0.1.696", "adm-zip": "0.5.16", "better-opn": "3.0.2", "chalk": "5.2.0", @@ -2746,14 +2746,14 @@ } }, "node_modules/@mintlify/validation": { - "version": "0.1.686", - "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.686.tgz", - "integrity": "sha512-XmI6HB8CuCxgyCA9m8geu9a6BQO6DfDtDXteiqj55Qz+S+cwZ1TW9YDI6hGzHbVQPpzuwyUU3I8l3TxaLfYPCw==", + "version": "0.1.696", + "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.696.tgz", + "integrity": "sha512-czZCxETAFP3aQID+TsQTurQM7WNegr2frBo0+pUDgb3s0VZb7vjf+3ppNuprWsepbH5UpVS3w2EOkxb1w47bfQ==", "dev": true, "license": "Elastic-2.0", "dependencies": { "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.303", + "@mintlify/models": "0.0.306", "arktype": "2.1.27", "js-yaml": "4.1.0", "lcm": "0.0.3", @@ -4189,9 +4189,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, "license": "MIT" }, @@ -4271,13 +4271,13 @@ } }, "node_modules/@types/node": { - "version": "25.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", - "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.7.0.tgz", + "integrity": "sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.19.0" + "undici-types": "~7.21.0" } }, "node_modules/@types/react": { @@ -4340,9 +4340,9 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", + "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", "dev": true, "license": "ISC" }, @@ -4900,9 +4900,9 @@ } }, "node_modules/bare-url": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.2.tgz", - "integrity": "sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.3.tgz", + "integrity": "sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7344,9 +7344,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", - "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", "dev": true, "license": "MIT", "engines": { @@ -8524,13 +8524,13 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -10605,13 +10605,13 @@ } }, "node_modules/mint": { - "version": "4.2.546", - "resolved": "https://registry.npmjs.org/mint/-/mint-4.2.546.tgz", - "integrity": "sha512-6gLgon/0ocrxNg1ZZHoD5d3ZqsKqrUJujjDiArJ+C9LCJJOCnu9TuGUmi77orE1ddP6UOmdI6fsBbAvaYmH66A==", + "version": "4.2.558", + "resolved": "https://registry.npmjs.org/mint/-/mint-4.2.558.tgz", + "integrity": "sha512-r0seaT/2xk/qZXRhlOSH2ZUCEXyi2KvufX4K5TVIPfTFOBMzU/efwErTmI/qxF8jPawV9cZC+AwSYcQBWTSaOg==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/cli": "4.0.1149" + "@mintlify/cli": "4.0.1161" }, "bin": { "mint": "index.js" @@ -10769,9 +10769,9 @@ } }, "node_modules/node-abi": { - "version": "3.90.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.90.0.tgz", - "integrity": "sha512-pZNQT7UnYlMwMBy5N1lV5X/YLTbZM5ncytN3xL7CHEzhDN8uVe0u55yaPUJICIJjaCW8NrM5BFdqr7HLweStNA==", + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", "dev": true, "license": "MIT", "optional": true, @@ -13230,9 +13230,9 @@ } }, "node_modules/socks": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", - "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "dev": true, "license": "MIT", "dependencies": { @@ -14081,9 +14081,9 @@ } }, "node_modules/undici-types": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", - "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.21.0.tgz", + "integrity": "sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==", "dev": true, "license": "MIT" }, @@ -14836,9 +14836,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", - "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, "license": "ISC", "bin": { diff --git a/package.json b/package.json index 46d9e597f..6bf601c8b 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "docs": "cd docs && npx mint dev" }, "devDependencies": { - "mint": "^4.2.546", + "mint": "^4.2.558", "prettier": "^3.8.3" } } From aadfc25025360effcb0f33f73699d70629a44c4d Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 23:13:38 +0000 Subject: [PATCH 067/152] docs: update registry agents (#1181) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 168104e34..20de0a571 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -684,7 +684,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **7.2.49**, + **7.2.52**, Date: Mon, 11 May 2026 20:12:49 -0400 Subject: [PATCH 068/152] add unstable mcp-over-acp additions to the schema (#1173) * feat: ignore agent-specific files * Gate MCP-over-ACP types behind unstable_mcp_over_acp feature Gate McpServer::Acp, McpServerAcp, and McpCapabilities.acp behind convention for unstable protocol features. * Cleanups * Mirror MCP-over-ACP types in v2 module v2 protocol types currently mirror v1 (enforced by JSON round-trip tests in conversion.rs). Mirror the new unstable MCP-over-ACP additions: - McpServerAcpId newtype - McpServerAcp struct - McpServer::Acp variant - McpCapabilities.acp field Plus IntoV1/IntoV2 conversions for the new types, all gated behind unstable_mcp_over_acp. Regenerates schema.v2.unstable.json and draft/schema-v2.mdx. --------- Co-authored-by: Ben Brandt --- .gitignore | 5 + Cargo.toml | 2 + docs/protocol/draft/schema-v2.mdx | 99 +++++++++++++++- docs/protocol/draft/schema.mdx | 99 +++++++++++++++- schema/schema.unstable.json | 51 ++++++++ schema/schema.v2.unstable.json | 51 ++++++++ src/v1/agent.rs | 185 ++++++++++++++++++++++++++++++ src/v2/agent.rs | 107 +++++++++++++++++ src/v2/conversion.rs | 70 ++++++++++- 9 files changed, 663 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index fac65dd9e..5e93ca7d0 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,8 @@ typescript/*.js.map # TypeDoc generated documentation typescript/docs/ + +.agents +.kiro +.claude + diff --git a/Cargo.toml b/Cargo.toml index ff0761ac9..2ff641afe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ unstable = [ "unstable_elicitation", "unstable_llm_providers", "unstable_logout", + "unstable_mcp_over_acp", "unstable_nes", "unstable_session_additional_directories", "unstable_session_fork", @@ -38,6 +39,7 @@ unstable_cancel_request = [] unstable_elicitation = [] unstable_llm_providers = [] unstable_logout = [] +unstable_mcp_over_acp = [] unstable_nes = [] unstable_session_additional_directories = [] unstable_session_fork = [] diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index b97b07c33..0450ceb6c 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -309,7 +309,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` + - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"acp":false,"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` Implementation | null} > @@ -2491,7 +2491,7 @@ Authentication-related capabilities supported by the agent. McpCapabilities} > MCP capabilities supported by the agent. - - Default: `{"http":false,"sse":false}` + - Default: `{"acp":false,"http":false,"sse":false}` NesCapabilities | null} > @@ -4367,6 +4367,16 @@ these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + **UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Agent supports `McpServer::Acp`. + + - Default: `false` + Agent supports `McpServer::Http`. @@ -4454,6 +4464,43 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +ACP transport configuration + +Only available when the Agent capabilities indicate `mcp_capabilities.acp` is `true`. +The MCP server is provided by an ACP component and communicates over the ACP channel. + + + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpServerAcpId} required> + Unique identifier for this MCP server, generated by the component providing it. + +Providers MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible +on the same ACP connection. + + + + Human-readable name identifying this MCP server. + + + The discriminator value. Must be `"acp"`. + + + + + Stdio transport configuration @@ -4485,6 +4532,54 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte +## McpServerAcp + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +ACP transport configuration for MCP. + +The MCP server is provided by an ACP component and communicates over the ACP channel +using `mcp/connect`, `mcp/message`, and `mcp/disconnect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpServerAcpId} required> + Unique identifier for this MCP server, generated by the component providing it. + +Providers MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible +on the same ACP connection. + + + + Human-readable name identifying this MCP server. + + +## McpServerAcpId + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Unique identifier for an MCP server using the ACP transport. + +The value is opaque and generated by the ACP component providing the MCP server. It is +used by `mcp/connect` to route connection requests back to the component that declared the +server. + +**Type:** `string` + ## McpServerHttp HTTP transport configuration for MCP. diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index b97b07c33..0450ceb6c 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -309,7 +309,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` + - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"acp":false,"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` Implementation | null} > @@ -2491,7 +2491,7 @@ Authentication-related capabilities supported by the agent. McpCapabilities} > MCP capabilities supported by the agent. - - Default: `{"http":false,"sse":false}` + - Default: `{"acp":false,"http":false,"sse":false}` NesCapabilities | null} > @@ -4367,6 +4367,16 @@ these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + **UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Agent supports `McpServer::Acp`. + + - Default: `false` + Agent supports `McpServer::Http`. @@ -4454,6 +4464,43 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +ACP transport configuration + +Only available when the Agent capabilities indicate `mcp_capabilities.acp` is `true`. +The MCP server is provided by an ACP component and communicates over the ACP channel. + + + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpServerAcpId} required> + Unique identifier for this MCP server, generated by the component providing it. + +Providers MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible +on the same ACP connection. + + + + Human-readable name identifying this MCP server. + + + The discriminator value. Must be `"acp"`. + + + + + Stdio transport configuration @@ -4485,6 +4532,54 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte +## McpServerAcp + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +ACP transport configuration for MCP. + +The MCP server is provided by an ACP component and communicates over the ACP channel +using `mcp/connect`, `mcp/message`, and `mcp/disconnect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpServerAcpId} required> + Unique identifier for this MCP server, generated by the component providing it. + +Providers MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible +on the same ACP connection. + + + + Human-readable name identifying this MCP server. + + +## McpServerAcpId + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Unique identifier for an MCP server using the ACP transport. + +The value is opaque and generated by the ACP component providing the MCP server. It is +used by `mcp/connect` to route connection requests back to the component that declared the +server. + +**Type:** `string` + ## McpServerHttp HTTP transport configuration for MCP. diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index b304602c4..b419997ad 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -77,6 +77,7 @@ } ], "default": { + "acp": false, "http": false, "sse": false }, @@ -2942,6 +2943,7 @@ "auth": {}, "loadSession": false, "mcpCapabilities": { + "acp": false, "http": false, "sse": false }, @@ -3304,6 +3306,11 @@ "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", "type": ["object", "null"] }, + "acp": { + "default": false, + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAgent supports [`McpServer::Acp`].", + "type": "boolean" + }, "http": { "default": false, "description": "Agent supports [`McpServer::Http`].", @@ -3351,6 +3358,22 @@ "required": ["type"], "type": "object" }, + { + "allOf": [ + { + "$ref": "#/$defs/McpServerAcp" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nACP transport configuration\n\nOnly available when the Agent capabilities indicate `mcp_capabilities.acp` is `true`.\nThe MCP server is provided by an ACP component and communicates over the ACP channel.", + "properties": { + "type": { + "const": "acp", + "type": "string" + } + }, + "required": ["type"], + "type": "object" + }, { "allOf": [ { @@ -3363,6 +3386,34 @@ ], "description": "Configuration for connecting to an MCP (Model Context Protocol) server.\n\nMCP servers provide tools and context that the agent can use when\nprocessing prompts.\n\nSee protocol docs: [MCP Servers](https://agentclientprotocol.com/protocol/session-setup#mcp-servers)" }, + "McpServerAcp": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nACP transport configuration for MCP.\n\nThe MCP server is provided by an ACP component and communicates over the ACP channel\nusing `mcp/connect`, `mcp/message`, and `mcp/disconnect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "id": { + "allOf": [ + { + "$ref": "#/$defs/McpServerAcpId" + } + ], + "description": "Unique identifier for this MCP server, generated by the component providing it.\n\nProviders MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible\non the same ACP connection." + }, + "name": { + "description": "Human-readable name identifying this MCP server.", + "type": "string" + } + }, + "required": ["name", "id"], + "type": "object" + }, + "McpServerAcpId": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nUnique identifier for an MCP server using the ACP transport.\n\nThe value is opaque and generated by the ACP component providing the MCP server. It is\nused by `mcp/connect` to route connection requests back to the component that declared the\nserver.", + "type": "string" + }, "McpServerHttp": { "description": "HTTP transport configuration for MCP.", "properties": { diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index b304602c4..b419997ad 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -77,6 +77,7 @@ } ], "default": { + "acp": false, "http": false, "sse": false }, @@ -2942,6 +2943,7 @@ "auth": {}, "loadSession": false, "mcpCapabilities": { + "acp": false, "http": false, "sse": false }, @@ -3304,6 +3306,11 @@ "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", "type": ["object", "null"] }, + "acp": { + "default": false, + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAgent supports [`McpServer::Acp`].", + "type": "boolean" + }, "http": { "default": false, "description": "Agent supports [`McpServer::Http`].", @@ -3351,6 +3358,22 @@ "required": ["type"], "type": "object" }, + { + "allOf": [ + { + "$ref": "#/$defs/McpServerAcp" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nACP transport configuration\n\nOnly available when the Agent capabilities indicate `mcp_capabilities.acp` is `true`.\nThe MCP server is provided by an ACP component and communicates over the ACP channel.", + "properties": { + "type": { + "const": "acp", + "type": "string" + } + }, + "required": ["type"], + "type": "object" + }, { "allOf": [ { @@ -3363,6 +3386,34 @@ ], "description": "Configuration for connecting to an MCP (Model Context Protocol) server.\n\nMCP servers provide tools and context that the agent can use when\nprocessing prompts.\n\nSee protocol docs: [MCP Servers](https://agentclientprotocol.com/protocol/session-setup#mcp-servers)" }, + "McpServerAcp": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nACP transport configuration for MCP.\n\nThe MCP server is provided by an ACP component and communicates over the ACP channel\nusing `mcp/connect`, `mcp/message`, and `mcp/disconnect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "id": { + "allOf": [ + { + "$ref": "#/$defs/McpServerAcpId" + } + ], + "description": "Unique identifier for this MCP server, generated by the component providing it.\n\nProviders MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible\non the same ACP connection." + }, + "name": { + "description": "Human-readable name identifying this MCP server.", + "type": "string" + } + }, + "required": ["name", "id"], + "type": "object" + }, + "McpServerAcpId": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nUnique identifier for an MCP server using the ACP transport.\n\nThe value is opaque and generated by the ACP component providing the MCP server. It is\nused by `mcp/connect` to route connection requests back to the component that declared the\nserver.", + "type": "string" + }, "McpServerHttp": { "description": "HTTP transport configuration for MCP.", "properties": { diff --git a/src/v1/agent.rs b/src/v1/agent.rs index 004988887..cd59e5fad 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -2689,6 +2689,16 @@ pub enum McpServer { /// /// Only available when the Agent capabilities indicate `mcp_capabilities.sse` is `true`. Sse(McpServerSse), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// ACP transport configuration + /// + /// Only available when the Agent capabilities indicate `mcp_capabilities.acp` is `true`. + /// The MCP server is provided by an ACP component and communicates over the ACP channel. + #[cfg(feature = "unstable_mcp_over_acp")] + Acp(McpServerAcp), /// Stdio transport configuration /// /// All Agents MUST support this transport. @@ -2798,6 +2808,83 @@ impl McpServerSse { } } +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Unique identifier for an MCP server using the ACP transport. +/// +/// The value is opaque and generated by the ACP component providing the MCP server. It is +/// used by `mcp/connect` to route connection requests back to the component that declared the +/// server. +#[cfg(feature = "unstable_mcp_over_acp")] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Hash, Display, From)] +#[serde(transparent)] +#[from(Arc, String, &'static str)] +#[non_exhaustive] +pub struct McpServerAcpId(pub Arc); + +#[cfg(feature = "unstable_mcp_over_acp")] +impl McpServerAcpId { + #[must_use] + pub fn new(id: impl Into>) -> Self { + Self(id.into()) + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// ACP transport configuration for MCP. +/// +/// The MCP server is provided by an ACP component and communicates over the ACP channel +/// using `mcp/connect`, `mcp/message`, and `mcp/disconnect`. +#[skip_serializing_none] +#[cfg(feature = "unstable_mcp_over_acp")] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct McpServerAcp { + /// Human-readable name identifying this MCP server. + pub name: String, + /// Unique identifier for this MCP server, generated by the component providing it. + /// + /// Providers MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible + /// on the same ACP connection. + pub id: McpServerAcpId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl McpServerAcp { + #[must_use] + pub fn new(name: impl Into, id: impl Into) -> Self { + Self { + name: name.into(), + id: id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + /// Stdio transport configuration for MCP. #[skip_serializing_none] #[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] @@ -4427,6 +4514,14 @@ pub struct McpCapabilities { /// Agent supports [`McpServer::Sse`]. #[serde(default)] pub sse: bool, + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Agent supports [`McpServer::Acp`]. + #[cfg(feature = "unstable_mcp_over_acp")] + #[serde(default)] + pub acp: bool, /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -4456,6 +4551,18 @@ impl McpCapabilities { self } + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Agent supports [`McpServer::Acp`]. + #[cfg(feature = "unstable_mcp_over_acp")] + #[must_use] + pub fn acp(mut self, acp: bool) -> Self { + self.acp = acp; + self + } + /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -5137,6 +5244,84 @@ mod test_serialization { } } + #[cfg(feature = "unstable_mcp_over_acp")] + #[test] + fn test_mcp_server_acp_serialization() { + let server = McpServer::Acp(McpServerAcp::new("project-tools", "project-tools-id")); + + let json = serde_json::to_value(&server).unwrap(); + assert_eq!( + json, + json!({ + "type": "acp", + "name": "project-tools", + "id": "project-tools-id" + }) + ); + + let deserialized: McpServer = serde_json::from_value(json).unwrap(); + match deserialized { + McpServer::Acp(McpServerAcp { name, id, meta: _ }) => { + assert_eq!(name, "project-tools"); + assert_eq!(id, McpServerAcpId::new("project-tools-id")); + } + _ => panic!("Expected Acp variant"), + } + } + + #[cfg(feature = "unstable_mcp_over_acp")] + #[test] + fn test_mcp_server_acp_schema() { + let mcp_server_schema = serde_json::to_value(schemars::schema_for!(McpServer)).unwrap(); + assert!(json_contains_entry( + &mcp_server_schema, + "const", + &json!("acp") + )); + assert!(json_contains_entry( + &mcp_server_schema, + "$ref", + &json!("#/$defs/McpServerAcp") + )); + + let capabilities_schema = + serde_json::to_value(schemars::schema_for!(McpCapabilities)).unwrap(); + assert!(json_contains_key(&capabilities_schema, "acp")); + } + + #[cfg(feature = "unstable_mcp_over_acp")] + fn json_contains_entry( + value: &serde_json::Value, + key: &str, + expected: &serde_json::Value, + ) -> bool { + match value { + serde_json::Value::Object(map) => { + map.get(key) == Some(expected) + || map + .values() + .any(|value| json_contains_entry(value, key, expected)) + } + serde_json::Value::Array(values) => values + .iter() + .any(|value| json_contains_entry(value, key, expected)), + _ => false, + } + } + + #[cfg(feature = "unstable_mcp_over_acp")] + fn json_contains_key(value: &serde_json::Value, key: &str) -> bool { + match value { + serde_json::Value::Object(map) => { + map.contains_key(key) || map.values().any(|value| json_contains_key(value, key)) + } + serde_json::Value::Array(values) => { + values.iter().any(|value| json_contains_key(value, key)) + } + _ => false, + } + } + #[test] fn test_mcp_server_sse_serialization() { let server = McpServer::Sse( diff --git a/src/v2/agent.rs b/src/v2/agent.rs index e7322fd6d..a6e8210d8 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -2689,6 +2689,16 @@ pub enum McpServer { /// /// Only available when the Agent capabilities indicate `mcp_capabilities.sse` is `true`. Sse(McpServerSse), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// ACP transport configuration + /// + /// Only available when the Agent capabilities indicate `mcp_capabilities.acp` is `true`. + /// The MCP server is provided by an ACP component and communicates over the ACP channel. + #[cfg(feature = "unstable_mcp_over_acp")] + Acp(McpServerAcp), /// Stdio transport configuration /// /// All Agents MUST support this transport. @@ -2798,6 +2808,83 @@ impl McpServerSse { } } +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Unique identifier for an MCP server using the ACP transport. +/// +/// The value is opaque and generated by the ACP component providing the MCP server. It is +/// used by `mcp/connect` to route connection requests back to the component that declared the +/// server. +#[cfg(feature = "unstable_mcp_over_acp")] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Hash, Display, From)] +#[serde(transparent)] +#[from(Arc, String, &'static str)] +#[non_exhaustive] +pub struct McpServerAcpId(pub Arc); + +#[cfg(feature = "unstable_mcp_over_acp")] +impl McpServerAcpId { + #[must_use] + pub fn new(id: impl Into>) -> Self { + Self(id.into()) + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// ACP transport configuration for MCP. +/// +/// The MCP server is provided by an ACP component and communicates over the ACP channel +/// using `mcp/connect`, `mcp/message`, and `mcp/disconnect`. +#[skip_serializing_none] +#[cfg(feature = "unstable_mcp_over_acp")] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct McpServerAcp { + /// Human-readable name identifying this MCP server. + pub name: String, + /// Unique identifier for this MCP server, generated by the component providing it. + /// + /// Providers MUST NOT reuse an ID for multiple ACP-transport MCP servers that are visible + /// on the same ACP connection. + pub id: McpServerAcpId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl McpServerAcp { + #[must_use] + pub fn new(name: impl Into, id: impl Into) -> Self { + Self { + name: name.into(), + id: id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + /// Stdio transport configuration for MCP. #[skip_serializing_none] #[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] @@ -4427,6 +4514,14 @@ pub struct McpCapabilities { /// Agent supports [`McpServer::Sse`]. #[serde(default)] pub sse: bool, + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Agent supports [`McpServer::Acp`]. + #[cfg(feature = "unstable_mcp_over_acp")] + #[serde(default)] + pub acp: bool, /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -4456,6 +4551,18 @@ impl McpCapabilities { self } + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Agent supports [`McpServer::Acp`]. + #[cfg(feature = "unstable_mcp_over_acp")] + #[must_use] + pub fn acp(mut self, acp: bool) -> Self { + self.acp = acp; + self + } + /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. diff --git a/src/v2/conversion.rs b/src/v2/conversion.rs index 0258578a3..407d0d417 100644 --- a/src/v2/conversion.rs +++ b/src/v2/conversion.rs @@ -4053,6 +4053,8 @@ impl IntoV1 for super::McpServer { Ok(match self { Self::Http(value) => crate::v1::McpServer::Http(value.into_v1()?), Self::Sse(value) => crate::v1::McpServer::Sse(value.into_v1()?), + #[cfg(feature = "unstable_mcp_over_acp")] + Self::Acp(value) => crate::v1::McpServer::Acp(value.into_v1()?), Self::Stdio(value) => crate::v1::McpServer::Stdio(value.into_v1()?), }) } @@ -4065,6 +4067,8 @@ impl IntoV2 for crate::v1::McpServer { Ok(match self { Self::Http(value) => super::McpServer::Http(value.into_v2()?), Self::Sse(value) => super::McpServer::Sse(value.into_v2()?), + #[cfg(feature = "unstable_mcp_over_acp")] + Self::Acp(value) => super::McpServer::Acp(value.into_v2()?), Self::Stdio(value) => super::McpServer::Stdio(value.into_v2()?), }) } @@ -4146,6 +4150,52 @@ impl IntoV2 for crate::v1::McpServerSse { } } +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::McpServerAcpId { + type Output = crate::v1::McpServerAcpId; + + fn into_v1(self) -> Result { + Ok(crate::v1::McpServerAcpId(self.0.into_v1()?)) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::McpServerAcpId { + type Output = super::McpServerAcpId; + + fn into_v2(self) -> Result { + Ok(super::McpServerAcpId(self.0.into_v2()?)) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::McpServerAcp { + type Output = crate::v1::McpServerAcp; + + fn into_v1(self) -> Result { + let Self { name, id, meta } = self; + Ok(crate::v1::McpServerAcp { + name: name.into_v1()?, + id: id.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::McpServerAcp { + type Output = super::McpServerAcp; + + fn into_v2(self) -> Result { + let Self { name, id, meta } = self; + Ok(super::McpServerAcp { + name: name.into_v2()?, + id: id.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + impl IntoV1 for super::McpServerStdio { type Output = crate::v1::McpServerStdio; @@ -5136,10 +5186,18 @@ impl IntoV1 for super::McpCapabilities { type Output = crate::v1::McpCapabilities; fn into_v1(self) -> Result { - let Self { http, sse, meta } = self; + let Self { + http, + sse, + #[cfg(feature = "unstable_mcp_over_acp")] + acp, + meta, + } = self; Ok(crate::v1::McpCapabilities { http: http.into_v1()?, sse: sse.into_v1()?, + #[cfg(feature = "unstable_mcp_over_acp")] + acp: acp.into_v1()?, meta: meta.into_v1()?, }) } @@ -5149,10 +5207,18 @@ impl IntoV2 for crate::v1::McpCapabilities { type Output = super::McpCapabilities; fn into_v2(self) -> Result { - let Self { http, sse, meta } = self; + let Self { + http, + sse, + #[cfg(feature = "unstable_mcp_over_acp")] + acp, + meta, + } = self; Ok(super::McpCapabilities { http: http.into_v2()?, sse: sse.into_v2()?, + #[cfg(feature = "unstable_mcp_over_acp")] + acp: acp.into_v2()?, meta: meta.into_v2()?, }) } From bbc1683400aea7d873ae446980d804d12ff4c7bd Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 04:07:08 +0000 Subject: [PATCH 069/152] docs: update registry agents (#1182) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 20de0a571..de8e02877 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.122.0** + **0.123.0** Date: Tue, 12 May 2026 09:51:20 +0000 Subject: [PATCH 070/152] docs: update registry agents (#1183) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index de8e02877..fa6249d1d 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -670,7 +670,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > AI Coding Agent by JetBrains - **1543.24.0**, + **1588.20.0**, Date: Tue, 12 May 2026 12:18:42 +0000 Subject: [PATCH 071/152] docs: update registry agents (#1184) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index fa6249d1d..c1068a23a 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -829,7 +829,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > AI coding assistant with agentic capabilities - **0.2.12** + **0.2.13** Date: Tue, 12 May 2026 15:48:41 +0000 Subject: [PATCH 072/152] docs: update registry agents (#1186) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index c1068a23a..99bdcab5b 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -698,7 +698,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Moonshot AI's coding assistant - **1.42.0**, + **1.43.0**, Date: Tue, 12 May 2026 21:46:37 +0200 Subject: [PATCH 073/152] feat(unstable): Add experimental MCP-over-ACP message types (#1185) --- docs/protocol/draft/schema-v2.mdx | 297 +++++++++++++++++++++++++ docs/protocol/draft/schema.mdx | 297 +++++++++++++++++++++++++ docs/rfds/mcp-over-acp.mdx | 87 +++++--- schema/meta.unstable.json | 4 + schema/meta.v2.unstable.json | 4 + schema/schema.unstable.json | 236 ++++++++++++++++++++ schema/schema.v2.unstable.json | 236 ++++++++++++++++++++ src/bin/generate.rs | 66 +++++- src/v1/agent.rs | 50 +++++ src/v1/client.rs | 140 ++++++++++++ src/v1/mcp.rs | 354 +++++++++++++++++++++++++++++ src/v1/mod.rs | 4 + src/v2/agent.rs | 50 +++++ src/v2/client.rs | 140 ++++++++++++ src/v2/conversion.rs | 312 ++++++++++++++++++++++++++ src/v2/mcp.rs | 355 ++++++++++++++++++++++++++++++ src/v2/mod.rs | 4 + 17 files changed, 2595 insertions(+), 41 deletions(-) create mode 100644 src/v1/mcp.rs create mode 100644 src/v2/mcp.rs diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index 0450ceb6c..1fcf3e9f0 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -387,6 +387,94 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +### mcp/message + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Exchanges an MCP-over-ACP message. + +#### MessageMcpNotification + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Notification parameters for `mcp/message`. + +This is used when the wrapped MCP message is a notification and the outer JSON-RPC +envelope has no `id`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection this message is sent on. + + + The inner MCP method name. + + + Optional inner MCP params. + +If omitted or set to `null`, the inner MCP message has no params. + + + +#### MessageMcpRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for `mcp/message`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection this message is sent on. + + + The inner MCP method name. + + + Optional inner MCP params. + +If omitted or set to `null`, the inner MCP message has no params. + + + +#### MessageMcpResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response to `mcp/message`. + +This is the inner MCP response result payload. Any JSON value is valid. + ### nes/accept @@ -1948,6 +2036,205 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +### mcp/connect + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Opens an MCP-over-ACP connection. + +#### ConnectMcpRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for `mcp/connect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpServerAcpId} required> + The ACP MCP server ID that was provided by the component declaring the MCP server. + + +#### ConnectMcpResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response to `mcp/connect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The unique identifier for this MCP-over-ACP connection. + + + +### mcp/disconnect + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Closes an MCP-over-ACP connection. + +#### DisconnectMcpRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for `mcp/disconnect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection to close. + + +#### DisconnectMcpResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response to `mcp/disconnect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + + +### mcp/message + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Exchanges an MCP-over-ACP message. + +#### MessageMcpNotification + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Notification parameters for `mcp/message`. + +This is used when the wrapped MCP message is a notification and the outer JSON-RPC +envelope has no `id`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection this message is sent on. + + + The inner MCP method name. + + + Optional inner MCP params. + +If omitted or set to `null`, the inner MCP message has no params. + + + +#### MessageMcpRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for `mcp/message`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection this message is sent on. + + + The inner MCP method name. + + + Optional inner MCP params. + +If omitted or set to `null`, the inner MCP message has no params. + + + +#### MessageMcpResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response to `mcp/message`. + +This is the inner MCP response result payload. Any JSON value is valid. + ### session/request_permission @@ -4391,6 +4678,16 @@ Agent supports `McpServer::Acp`. +## McpConnectionId + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +A unique identifier for an active MCP-over-ACP connection. + +**Type:** `string` + ## McpServer Configuration for connecting to an MCP (Model Context Protocol) server. diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index 0450ceb6c..1fcf3e9f0 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -387,6 +387,94 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +### mcp/message + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Exchanges an MCP-over-ACP message. + +#### MessageMcpNotification + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Notification parameters for `mcp/message`. + +This is used when the wrapped MCP message is a notification and the outer JSON-RPC +envelope has no `id`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection this message is sent on. + + + The inner MCP method name. + + + Optional inner MCP params. + +If omitted or set to `null`, the inner MCP message has no params. + + + +#### MessageMcpRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for `mcp/message`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection this message is sent on. + + + The inner MCP method name. + + + Optional inner MCP params. + +If omitted or set to `null`, the inner MCP message has no params. + + + +#### MessageMcpResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response to `mcp/message`. + +This is the inner MCP response result payload. Any JSON value is valid. + ### nes/accept @@ -1948,6 +2036,205 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +### mcp/connect + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Opens an MCP-over-ACP connection. + +#### ConnectMcpRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for `mcp/connect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpServerAcpId} required> + The ACP MCP server ID that was provided by the component declaring the MCP server. + + +#### ConnectMcpResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response to `mcp/connect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The unique identifier for this MCP-over-ACP connection. + + + +### mcp/disconnect + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Closes an MCP-over-ACP connection. + +#### DisconnectMcpRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for `mcp/disconnect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection to close. + + +#### DisconnectMcpResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response to `mcp/disconnect`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + + +### mcp/message + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Exchanges an MCP-over-ACP message. + +#### MessageMcpNotification + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Notification parameters for `mcp/message`. + +This is used when the wrapped MCP message is a notification and the outer JSON-RPC +envelope has no `id`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection this message is sent on. + + + The inner MCP method name. + + + Optional inner MCP params. + +If omitted or set to `null`, the inner MCP message has no params. + + + +#### MessageMcpRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for `mcp/message`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +McpConnectionId} required> + The MCP-over-ACP connection this message is sent on. + + + The inner MCP method name. + + + Optional inner MCP params. + +If omitted or set to `null`, the inner MCP message has no params. + + + +#### MessageMcpResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response to `mcp/message`. + +This is the inner MCP response result payload. Any JSON value is valid. + ### session/request_permission @@ -4391,6 +4678,16 @@ Agent supports `McpServer::Acp`. +## McpConnectionId + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +A unique identifier for an active MCP-over-ACP connection. + +**Type:** `string` + ## McpServer Configuration for connecting to an MCP (Model Context Protocol) server. diff --git a/docs/rfds/mcp-over-acp.mdx b/docs/rfds/mcp-over-acp.mdx index 353d02477..12a3c99bc 100644 --- a/docs/rfds/mcp-over-acp.mdx +++ b/docs/rfds/mcp-over-acp.mdx @@ -34,24 +34,27 @@ This enables patterns like: ### How it works -When the client connects, the agent advertises MCP-over-ACP support via `mcpCapabilities.acp` in its `InitializeResponse`. If supported, the client can add MCP servers to a `session/new` request with `"transport": "acp"` and an `id` that identifies the server: +When the client connects, the agent advertises MCP-over-ACP support via `mcpCapabilities.acp` in its `InitializeResponse`. If supported, the client can add MCP servers to a `session/new` request with `"type": "acp"` and an `id` that identifies the server: ```json { "tools": { - "mcpServers": { - "project-tools": { - "transport": "acp", + "mcpServers": [ + { + "type": "acp", + "name": "project-tools", "id": "550e8400-e29b-41d4-a716-446655440000" } - } + ] } } ``` The `id` is generated by the component providing the MCP server. -When the agent connects to the MCP server, an `mcp/connect` message is sent with the MCP server's `id`. This returns a fresh `connectionId`. MCP messages are then sent back and forth using `mcp/message` requests. Finally, `mcp/disconnect` signals that the connection is closing. +When the agent connects to the MCP server, an `mcp/connect` message is sent with the MCP server's `id`. This returns a fresh `connectionId`. MCP messages are then sent back and forth using `mcp/message` requests and notifications. Finally, `mcp/disconnect` signals that the connection is closing. + +`mcp/connect` and `mcp/disconnect` are initiated by the side connecting to the ACP-transport MCP server. In the direct client-provided server case, that means the agent sends them to the client. Once connected, `mcp/message` is bidirectional: the agent can send MCP client-originated requests to the server, and the server can send MCP server-originated requests or notifications back to the agent. ### Bridging and compatibility @@ -78,6 +81,9 @@ sequenceDiagram Agent->>Client: mcp/message (list_files tool call) Client-->>Agent: file listing results + Client->>Agent: mcp/message (server callback or notification) + Agent-->>Client: callback result, if request + Agent-->>Client: response using tool results Agent->>Client: mcp/disconnect (connectionId: "conn-1") @@ -119,7 +125,7 @@ Agents advertise MCP-over-ACP support via the [`mcpCapabilities`](/protocol/sche } ``` -When `mcpCapabilities.acp` is `true`, the agent can handle MCP servers declared with `"transport": "acp"` natively - it will send `mcp/connect`, `mcp/message`, and `mcp/disconnect` messages through the ACP channel. +When `mcpCapabilities.acp` is `true`, the agent can handle MCP servers declared with `"type": "acp"` natively. It will initiate `mcp/connect` and `mcp/disconnect` through the ACP channel, and both sides can exchange MCP payloads with `mcp/message`. Clients don't need to advertise anything - they simply check the agent's capabilities to determine whether bridging is needed. @@ -127,30 +133,27 @@ Clients don't need to advertise anything - they simply check the agent's capabil ### MCP transport schema extension -We extend the MCP JSON schema to include ACP as a transport option: +We extend the MCP server JSON schema to include ACP as a transport option: ```json { "type": "object", "properties": { - "transport": { + "type": { "type": "string", - "enum": ["stdio", "http", "acp"] + "const": "acp" + }, + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "_meta": { + "type": ["object", "null"] } }, - "allOf": [ - { - "if": { "properties": { "transport": { "const": "acp" } } }, - "then": { - "properties": { - "id": { - "type": "string" - } - }, - "required": ["id"] - } - } - ] + "required": ["type", "name", "id"] } ``` @@ -164,13 +167,13 @@ We extend the MCP JSON schema to include ACP as a transport option: "method": "mcp/connect", "params": { "acpId": "550e8400-e29b-41d4-a716-446655440000", - "meta": { ... } + "_meta": { ... } } } -// Response: +// Response result: { "connectionId": "conn-123", - "meta": { ... } + "_meta": { ... } } // Close MCP connection @@ -178,27 +181,49 @@ We extend the MCP JSON schema to include ACP as a transport option: "method": "mcp/disconnect", "params": { "connectionId": "conn-123", - "meta": { ... } + "_meta": { ... } } } +// Response result: +{ + "_meta": { ... } +} ``` **MCP message exchange:** +`mcp/message` is bidirectional. Either side can send the following request or notification shape on an established `connectionId`. + ```json -// Send MCP message (bidirectional - works agent→client or client→agent) +// Send MCP request +{ + "id": 123, + "method": "mcp/message", + "params": { + "connectionId": "conn-123", + "method": "", + "params": { ... }, + "_meta": { ... } + } +} +// Response result: +{ + ... inner MCP result payload ... +} + +// Send MCP notification { "method": "mcp/message", "params": { "connectionId": "conn-123", "method": "", "params": { ... }, - "meta": { ... } + "_meta": { ... } } } ``` -The inner MCP message fields (`method`, `params`) are flattened into the params object. Whether the wrapped message is a request or notification is determined by the presence of an `id` field in the outer JSON-RPC envelope, following JSON-RPC conventions. +The inner MCP message fields (`method`, `params`) are flattened into the params object. The `params` field is optional; if omitted or set to `null`, the inner MCP message has no params. Whether the wrapped message is a request or notification is determined by the presence of an `id` field in the outer JSON-RPC envelope, following JSON-RPC conventions. For requests, the ACP response result is the inner MCP result payload, and inner MCP errors are represented with the outer JSON-RPC error response. ### Routing by ID @@ -222,7 +247,7 @@ Not all agents will support MCP-over-ACP natively. To maintain compatibility, it **How bridging works:** -When a client provides an MCP server with `"transport": "acp"`, and the agent doesn't advertise `mcpCapabilities.acp: true`, a bridge can: +When a client provides an MCP server with `"type": "acp"`, and the agent doesn't advertise `mcpCapabilities.acp: true`, a bridge can: 1. Rewrite the MCP server declaration in `session/new` to use stdio or HTTP transport 2. Spawn the appropriate shim process or HTTP server diff --git a/schema/meta.unstable.json b/schema/meta.unstable.json index 6d1dd249a..ba8454819 100644 --- a/schema/meta.unstable.json +++ b/schema/meta.unstable.json @@ -8,6 +8,7 @@ "document_did_save": "document/didSave", "initialize": "initialize", "logout": "logout", + "mcp_message": "mcp/message", "nes_accept": "nes/accept", "nes_close": "nes/close", "nes_reject": "nes/reject", @@ -33,6 +34,9 @@ "elicitation_create": "elicitation/create", "fs_read_text_file": "fs/read_text_file", "fs_write_text_file": "fs/write_text_file", + "mcp_connect": "mcp/connect", + "mcp_disconnect": "mcp/disconnect", + "mcp_message": "mcp/message", "session_request_permission": "session/request_permission", "session_update": "session/update", "terminal_create": "terminal/create", diff --git a/schema/meta.v2.unstable.json b/schema/meta.v2.unstable.json index 462086fd4..5bf73ea4c 100644 --- a/schema/meta.v2.unstable.json +++ b/schema/meta.v2.unstable.json @@ -8,6 +8,7 @@ "document_did_save": "document/didSave", "initialize": "initialize", "logout": "logout", + "mcp_message": "mcp/message", "nes_accept": "nes/accept", "nes_close": "nes/close", "nes_reject": "nes/reject", @@ -33,6 +34,9 @@ "elicitation_create": "elicitation/create", "fs_read_text_file": "fs/read_text_file", "fs_write_text_file": "fs/write_text_file", + "mcp_connect": "mcp/connect", + "mcp_disconnect": "mcp/disconnect", + "mcp_message": "mcp/message", "session_request_permission": "session/request_permission", "session_update": "session/update", "terminal_create": "terminal/create", diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index b419997ad..3e326ccc1 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -167,6 +167,15 @@ "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nNotification that a URL-based elicitation has completed.", "title": "CompleteElicitationNotification" }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpNotification" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nReceives an MCP-over-ACP notification.", + "title": "MessageMcpNotification" + }, { "allOf": [ { @@ -282,6 +291,33 @@ "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequests structured user input via a form or URL.", "title": "CreateElicitationRequest" }, + { + "allOf": [ + { + "$ref": "#/$defs/ConnectMcpRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nOpens an MCP-over-ACP connection.", + "title": "ConnectMcpRequest" + }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nExchanges an MCP-over-ACP message.", + "title": "MessageMcpRequest" + }, + { + "allOf": [ + { + "$ref": "#/$defs/DisconnectMcpRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCloses an MCP-over-ACP connection.", + "title": "DisconnectMcpRequest" + }, { "allOf": [ { @@ -472,6 +508,14 @@ } ], "title": "ExtMethodResponse" + }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpResponse" + } + ], + "title": "MessageMcpResponse" } ], "description": "All possible responses that an agent can send to a client.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `ClientRequest` variants." @@ -1109,6 +1153,15 @@ "description": "**UNSTABLE**\n\nNotification sent when a suggestion is rejected.", "title": "RejectNesNotification" }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpNotification" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nSends an MCP-over-ACP notification.", + "title": "MessageMcpNotification" + }, { "allOf": [ { @@ -1314,6 +1367,15 @@ "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCloses an active NES session and frees up any resources associated with it.\n\nThe agent must cancel any ongoing work and then free up any resources\nassociated with the NES session.", "title": "CloseNesRequest" }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nExchanges an MCP-over-ACP message.", + "title": "MessageMcpRequest" + }, { "allOf": [ { @@ -1417,6 +1479,22 @@ ], "title": "CreateElicitationResponse" }, + { + "allOf": [ + { + "$ref": "#/$defs/ConnectMcpResponse" + } + ], + "title": "ConnectMcpResponse" + }, + { + "allOf": [ + { + "$ref": "#/$defs/DisconnectMcpResponse" + } + ], + "title": "DisconnectMcpResponse" + }, { "allOf": [ { @@ -1424,6 +1502,14 @@ } ], "title": "ExtMethodResponse" + }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpResponse" + } + ], + "title": "MessageMcpResponse" } ], "description": "All possible responses that a client can send to an agent.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `AgentRequest` variants." @@ -1560,6 +1646,50 @@ "required": ["configOptions"], "type": "object" }, + "ConnectMcpRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `mcp/connect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "acpId": { + "allOf": [ + { + "$ref": "#/$defs/McpServerAcpId" + } + ], + "description": "The ACP MCP server ID that was provided by the component declaring the MCP server." + } + }, + "required": ["acpId"], + "type": "object", + "x-method": "mcp/connect", + "x-side": "client" + }, + "ConnectMcpResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `mcp/connect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "connectionId": { + "allOf": [ + { + "$ref": "#/$defs/McpConnectionId" + } + ], + "description": "The unique identifier for this MCP-over-ACP connection." + } + }, + "required": ["connectionId"], + "type": "object", + "x-method": "mcp/connect", + "x-side": "client" + }, "Content": { "description": "Standard content block (text, images, resources).", "properties": { @@ -2138,6 +2268,41 @@ "x-method": "providers/disable", "x-side": "agent" }, + "DisconnectMcpRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `mcp/disconnect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "connectionId": { + "allOf": [ + { + "$ref": "#/$defs/McpConnectionId" + } + ], + "description": "The MCP-over-ACP connection to close." + } + }, + "required": ["connectionId"], + "type": "object", + "x-method": "mcp/disconnect", + "x-side": "client" + }, + "DisconnectMcpResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `mcp/disconnect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object", + "x-method": "mcp/disconnect", + "x-side": "client" + }, "ElicitationAcceptAction": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nThe user accepted the elicitation and provided content.", "properties": { @@ -3324,6 +3489,10 @@ }, "type": "object" }, + "McpConnectionId": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA unique identifier for an active MCP-over-ACP connection.", + "type": "string" + }, "McpServer": { "anyOf": [ { @@ -3502,6 +3671,73 @@ "required": ["name", "command", "args", "env"], "type": "object" }, + "MessageMcpNotification": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nNotification parameters for `mcp/message`.\n\nThis is used when the wrapped MCP message is a notification and the outer JSON-RPC\nenvelope has no `id`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "connectionId": { + "allOf": [ + { + "$ref": "#/$defs/McpConnectionId" + } + ], + "description": "The MCP-over-ACP connection this message is sent on." + }, + "method": { + "description": "The inner MCP method name.", + "type": "string" + }, + "params": { + "additionalProperties": true, + "description": "Optional inner MCP params.\n\nIf omitted or set to `null`, the inner MCP message has no params.", + "type": ["object", "null"] + } + }, + "required": ["connectionId", "method"], + "type": "object", + "x-method": "mcp/message", + "x-side": "both" + }, + "MessageMcpRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `mcp/message`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "connectionId": { + "allOf": [ + { + "$ref": "#/$defs/McpConnectionId" + } + ], + "description": "The MCP-over-ACP connection this message is sent on." + }, + "method": { + "description": "The inner MCP method name.", + "type": "string" + }, + "params": { + "additionalProperties": true, + "description": "Optional inner MCP params.\n\nIf omitted or set to `null`, the inner MCP message has no params.", + "type": ["object", "null"] + } + }, + "required": ["connectionId", "method"], + "type": "object", + "x-method": "mcp/message", + "x-side": "both" + }, + "MessageMcpResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `mcp/message`.\n\nThis is the inner MCP response result payload. Any JSON value is valid.", + "x-method": "mcp/message", + "x-side": "both" + }, "ModelId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA unique identifier for a model.", "type": "string" diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index b419997ad..3e326ccc1 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -167,6 +167,15 @@ "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nNotification that a URL-based elicitation has completed.", "title": "CompleteElicitationNotification" }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpNotification" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nReceives an MCP-over-ACP notification.", + "title": "MessageMcpNotification" + }, { "allOf": [ { @@ -282,6 +291,33 @@ "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequests structured user input via a form or URL.", "title": "CreateElicitationRequest" }, + { + "allOf": [ + { + "$ref": "#/$defs/ConnectMcpRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nOpens an MCP-over-ACP connection.", + "title": "ConnectMcpRequest" + }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nExchanges an MCP-over-ACP message.", + "title": "MessageMcpRequest" + }, + { + "allOf": [ + { + "$ref": "#/$defs/DisconnectMcpRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCloses an MCP-over-ACP connection.", + "title": "DisconnectMcpRequest" + }, { "allOf": [ { @@ -472,6 +508,14 @@ } ], "title": "ExtMethodResponse" + }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpResponse" + } + ], + "title": "MessageMcpResponse" } ], "description": "All possible responses that an agent can send to a client.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `ClientRequest` variants." @@ -1109,6 +1153,15 @@ "description": "**UNSTABLE**\n\nNotification sent when a suggestion is rejected.", "title": "RejectNesNotification" }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpNotification" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nSends an MCP-over-ACP notification.", + "title": "MessageMcpNotification" + }, { "allOf": [ { @@ -1314,6 +1367,15 @@ "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCloses an active NES session and frees up any resources associated with it.\n\nThe agent must cancel any ongoing work and then free up any resources\nassociated with the NES session.", "title": "CloseNesRequest" }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nExchanges an MCP-over-ACP message.", + "title": "MessageMcpRequest" + }, { "allOf": [ { @@ -1417,6 +1479,22 @@ ], "title": "CreateElicitationResponse" }, + { + "allOf": [ + { + "$ref": "#/$defs/ConnectMcpResponse" + } + ], + "title": "ConnectMcpResponse" + }, + { + "allOf": [ + { + "$ref": "#/$defs/DisconnectMcpResponse" + } + ], + "title": "DisconnectMcpResponse" + }, { "allOf": [ { @@ -1424,6 +1502,14 @@ } ], "title": "ExtMethodResponse" + }, + { + "allOf": [ + { + "$ref": "#/$defs/MessageMcpResponse" + } + ], + "title": "MessageMcpResponse" } ], "description": "All possible responses that a client can send to an agent.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `AgentRequest` variants." @@ -1560,6 +1646,50 @@ "required": ["configOptions"], "type": "object" }, + "ConnectMcpRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `mcp/connect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "acpId": { + "allOf": [ + { + "$ref": "#/$defs/McpServerAcpId" + } + ], + "description": "The ACP MCP server ID that was provided by the component declaring the MCP server." + } + }, + "required": ["acpId"], + "type": "object", + "x-method": "mcp/connect", + "x-side": "client" + }, + "ConnectMcpResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `mcp/connect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "connectionId": { + "allOf": [ + { + "$ref": "#/$defs/McpConnectionId" + } + ], + "description": "The unique identifier for this MCP-over-ACP connection." + } + }, + "required": ["connectionId"], + "type": "object", + "x-method": "mcp/connect", + "x-side": "client" + }, "Content": { "description": "Standard content block (text, images, resources).", "properties": { @@ -2138,6 +2268,41 @@ "x-method": "providers/disable", "x-side": "agent" }, + "DisconnectMcpRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `mcp/disconnect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "connectionId": { + "allOf": [ + { + "$ref": "#/$defs/McpConnectionId" + } + ], + "description": "The MCP-over-ACP connection to close." + } + }, + "required": ["connectionId"], + "type": "object", + "x-method": "mcp/disconnect", + "x-side": "client" + }, + "DisconnectMcpResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `mcp/disconnect`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object", + "x-method": "mcp/disconnect", + "x-side": "client" + }, "ElicitationAcceptAction": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nThe user accepted the elicitation and provided content.", "properties": { @@ -3324,6 +3489,10 @@ }, "type": "object" }, + "McpConnectionId": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA unique identifier for an active MCP-over-ACP connection.", + "type": "string" + }, "McpServer": { "anyOf": [ { @@ -3502,6 +3671,73 @@ "required": ["name", "command", "args", "env"], "type": "object" }, + "MessageMcpNotification": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nNotification parameters for `mcp/message`.\n\nThis is used when the wrapped MCP message is a notification and the outer JSON-RPC\nenvelope has no `id`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "connectionId": { + "allOf": [ + { + "$ref": "#/$defs/McpConnectionId" + } + ], + "description": "The MCP-over-ACP connection this message is sent on." + }, + "method": { + "description": "The inner MCP method name.", + "type": "string" + }, + "params": { + "additionalProperties": true, + "description": "Optional inner MCP params.\n\nIf omitted or set to `null`, the inner MCP message has no params.", + "type": ["object", "null"] + } + }, + "required": ["connectionId", "method"], + "type": "object", + "x-method": "mcp/message", + "x-side": "both" + }, + "MessageMcpRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `mcp/message`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "connectionId": { + "allOf": [ + { + "$ref": "#/$defs/McpConnectionId" + } + ], + "description": "The MCP-over-ACP connection this message is sent on." + }, + "method": { + "description": "The inner MCP method name.", + "type": "string" + }, + "params": { + "additionalProperties": true, + "description": "Optional inner MCP params.\n\nIf omitted or set to `null`, the inner MCP message has no params.", + "type": ["object", "null"] + } + }, + "required": ["connectionId", "method"], + "type": "object", + "x-method": "mcp/message", + "x-side": "both" + }, + "MessageMcpResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `mcp/message`.\n\nThis is the inner MCP response result payload. Any JSON value is valid.", + "x-method": "mcp/message", + "x-side": "both" + }, "ModelId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA unique identifier for a model.", "type": "string" diff --git a/src/bin/generate.rs b/src/bin/generate.rs index 4d96cf611..80025f9af 100644 --- a/src/bin/generate.rs +++ b/src/bin/generate.rs @@ -171,7 +171,7 @@ fn main() { mod markdown_generator { use serde_json::Value; - use std::collections::{BTreeMap, HashMap}; + use std::collections::{BTreeMap, BTreeSet, HashMap}; use std::fmt::Write; use std::fs; use std::process::Command; @@ -189,6 +189,7 @@ mod markdown_generator { } } + #[expect(clippy::too_many_lines)] pub fn generate(&mut self, schema: &Value) -> String { // Extract definitions if let Some(defs) = schema.get("$defs").and_then(|v| v.as_object()) { @@ -227,6 +228,18 @@ mod markdown_generator { "agent" => &mut agent_types, "client" => &mut client_types, "protocol" => &mut protocol_types, + "both" => { + let entry = (name.clone(), def.clone()); + agent_types + .entry(method.to_string()) + .or_default() + .push(entry.clone()); + client_types + .entry(method.to_string()) + .or_default() + .push(entry); + continue; + } _ => unimplemented!("Unexpected side {side}"), }; @@ -240,6 +253,17 @@ mod markdown_generator { } let side_docs = extract_side_docs(); + let mut duplicate_methods = BTreeSet::new(); + for method in agent_types.keys() { + if client_types.contains_key(method) || protocol_types.contains_key(method) { + duplicate_methods.insert(method.clone()); + } + } + for method in client_types.keys() { + if protocol_types.contains_key(method) { + duplicate_methods.insert(method.clone()); + } + } writeln!(&mut self.output, "## Agent").unwrap(); writeln!(&mut self.output).unwrap(); @@ -254,7 +278,13 @@ requests from clients and execute tasks using language models and tools." writeln!(&mut self.output).unwrap(); for (method, types) in agent_types { - self.generate_method(&method, side_docs.agent_method_doc(&method), types); + let anchor_prefix = duplicate_methods.contains(&method).then_some("agent"); + self.generate_method( + anchor_prefix, + &method, + side_docs.agent_method_doc(&method), + types, + ); } writeln!(&mut self.output, "## Client").unwrap(); @@ -270,7 +300,13 @@ and control access to resources." .unwrap(); for (method, types) in client_types { - self.generate_method(&method, side_docs.client_method_doc(&method), types); + let anchor_prefix = duplicate_methods.contains(&method).then_some("client"); + self.generate_method( + anchor_prefix, + &method, + side_docs.client_method_doc(&method), + types, + ); } #[cfg(feature = "unstable_cancel_request")] { @@ -290,7 +326,13 @@ starting with '$/' it is free to ignore the notification." .unwrap(); for (method, types) in protocol_types { - self.generate_method(&method, side_docs.protocol_method_doc(&method), types); + let anchor_prefix = duplicate_methods.contains(&method).then_some("protocol"); + self.generate_method( + anchor_prefix, + &method, + side_docs.protocol_method_doc(&method), + types, + ); } } @@ -304,17 +346,17 @@ starting with '$/' it is free to ignore the notification." fn generate_method( &mut self, + anchor_prefix: Option<&str>, method: &str, docs: &str, mut method_types: Vec<(String, Value)>, ) { if method.contains('/') { - writeln!( - &mut self.output, - "", - Self::anchor_text(method).replace('/', "-") - ) - .unwrap(); + let mut anchor = Self::anchor_text(method).replace('/', "-"); + if let Some(prefix) = anchor_prefix { + anchor = format!("{prefix}-{anchor}"); + } + writeln!(&mut self.output, "").unwrap(); } writeln!( &mut self.output, @@ -1148,6 +1190,7 @@ starting with '$/' it is free to ignore the notification." "document/didClose" => self.agent.get("DidCloseDocumentNotification").unwrap(), "document/didSave" => self.agent.get("DidSaveDocumentNotification").unwrap(), "document/didFocus" => self.agent.get("DidFocusDocumentNotification").unwrap(), + "mcp/message" => self.agent.get("MessageMcpRequest").unwrap(), _ => panic!("Introduced a method? Add it here :)"), } } @@ -1169,6 +1212,9 @@ starting with '$/' it is free to ignore the notification." "elicitation/complete" => { self.client.get("CompleteElicitationNotification").unwrap() } + "mcp/connect" => self.client.get("ConnectMcpRequest").unwrap(), + "mcp/message" => self.client.get("MessageMcpRequest").unwrap(), + "mcp/disconnect" => self.client.get("DisconnectMcpRequest").unwrap(), _ => panic!("Introduced a method? Add it here :)"), } } diff --git a/src/v1/agent.rs b/src/v1/agent.rs index cd59e5fad..73a206cd2 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -18,6 +18,11 @@ use crate::{ ProtocolVersion, SessionId, SkipListener, }; +#[cfg(feature = "unstable_mcp_over_acp")] +use super::mcp::{ + MCP_MESSAGE_METHOD_NAME, MessageMcpNotification, MessageMcpRequest, MessageMcpResponse, +}; + #[cfg(feature = "unstable_nes")] use crate::{ AcceptNesNotification, CloseNesRequest, CloseNesResponse, DidChangeDocumentNotification, @@ -4608,6 +4613,9 @@ pub struct AgentMethodNames { pub session_prompt: &'static str, /// Notification for cancelling operations. pub session_cancel: &'static str, + /// Method for exchanging MCP-over-ACP messages. + #[cfg(feature = "unstable_mcp_over_acp")] + pub mcp_message: &'static str, /// Method for selecting a model for a given session. #[cfg(feature = "unstable_session_model")] pub session_set_model: &'static str, @@ -4671,6 +4679,8 @@ pub const AGENT_METHOD_NAMES: AgentMethodNames = AgentMethodNames { session_set_config_option: SESSION_SET_CONFIG_OPTION_METHOD_NAME, session_prompt: SESSION_PROMPT_METHOD_NAME, session_cancel: SESSION_CANCEL_METHOD_NAME, + #[cfg(feature = "unstable_mcp_over_acp")] + mcp_message: MCP_MESSAGE_METHOD_NAME, #[cfg(feature = "unstable_session_model")] session_set_model: SESSION_SET_MODEL_METHOD_NAME, session_list: SESSION_LIST_METHOD_NAME, @@ -4923,6 +4933,13 @@ pub enum ClientRequest { /// The agent must cancel any ongoing work and then free up any resources /// associated with the NES session. CloseNesRequest(CloseNesRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Exchanges an MCP-over-ACP message. + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpRequest(MessageMcpRequest), /// Handles extension method requests from the client. /// /// Extension methods provide a way to add custom functionality while maintaining @@ -4965,6 +4982,8 @@ impl ClientRequest { Self::SuggestNesRequest(_) => AGENT_METHOD_NAMES.nes_suggest, #[cfg(feature = "unstable_nes")] Self::CloseNesRequest(_) => AGENT_METHOD_NAMES.nes_close, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpRequest(_) => AGENT_METHOD_NAMES.mcp_message, Self::ExtMethodRequest(ext_request) => &ext_request.method, } } @@ -5011,6 +5030,8 @@ pub enum AgentResponse { #[cfg(feature = "unstable_nes")] CloseNesResponse(#[serde(default)] CloseNesResponse), ExtMethodResponse(ExtResponse), + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpResponse(MessageMcpResponse), } /// All possible notifications that a client can send to an agent. @@ -5071,6 +5092,13 @@ pub enum ClientNotification { /// /// Notification sent when a suggestion is rejected. RejectNesNotification(RejectNesNotification), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Sends an MCP-over-ACP notification. + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpNotification(MessageMcpNotification), /// Handles extension notifications from the client. /// /// Extension notifications provide a way to send one-way messages for custom functionality @@ -5100,6 +5128,8 @@ impl ClientNotification { Self::AcceptNesNotification(_) => AGENT_METHOD_NAMES.nes_accept, #[cfg(feature = "unstable_nes")] Self::RejectNesNotification(_) => AGENT_METHOD_NAMES.nes_reject, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpNotification(_) => AGENT_METHOD_NAMES.mcp_message, Self::ExtNotification(ext_notification) => &ext_notification.method, } } @@ -5269,6 +5299,26 @@ mod test_serialization { } } + #[cfg(feature = "unstable_mcp_over_acp")] + #[test] + fn test_client_mcp_message_method_names() { + assert_eq!(AGENT_METHOD_NAMES.mcp_message, "mcp/message"); + + assert_eq!( + ClientRequest::MessageMcpRequest(MessageMcpRequest::new("conn-1", "tools/list")) + .method(), + "mcp/message" + ); + assert_eq!( + ClientNotification::MessageMcpNotification(MessageMcpNotification::new( + "conn-1", + "notifications/progress" + )) + .method(), + "mcp/message" + ); + } + #[cfg(feature = "unstable_mcp_over_acp")] #[test] fn test_mcp_server_acp_schema() { diff --git a/src/v1/client.rs b/src/v1/client.rs index e86b01dc8..e1c8e71aa 100644 --- a/src/v1/client.rs +++ b/src/v1/client.rs @@ -21,6 +21,13 @@ use crate::{ SkipListener, ToolCall, ToolCallUpdate, }; +#[cfg(feature = "unstable_mcp_over_acp")] +use super::mcp::{ + ConnectMcpRequest, ConnectMcpResponse, DisconnectMcpRequest, DisconnectMcpResponse, + MCP_CONNECT_METHOD_NAME, MCP_DISCONNECT_METHOD_NAME, MCP_MESSAGE_METHOD_NAME, + MessageMcpNotification, MessageMcpRequest, MessageMcpResponse, +}; + #[cfg(feature = "unstable_nes")] use crate::{ClientNesCapabilities, PositionEncodingKind}; @@ -1786,6 +1793,15 @@ pub struct ClientMethodNames { pub terminal_wait_for_exit: &'static str, /// Method for killing a terminal. pub terminal_kill: &'static str, + /// Method for opening an MCP-over-ACP connection. + #[cfg(feature = "unstable_mcp_over_acp")] + pub mcp_connect: &'static str, + /// Method for exchanging MCP-over-ACP messages. + #[cfg(feature = "unstable_mcp_over_acp")] + pub mcp_message: &'static str, + /// Method for closing an MCP-over-ACP connection. + #[cfg(feature = "unstable_mcp_over_acp")] + pub mcp_disconnect: &'static str, /// Method for elicitation. #[cfg(feature = "unstable_elicitation")] pub elicitation_create: &'static str, @@ -1805,6 +1821,12 @@ pub const CLIENT_METHOD_NAMES: ClientMethodNames = ClientMethodNames { terminal_release: TERMINAL_RELEASE_METHOD_NAME, terminal_wait_for_exit: TERMINAL_WAIT_FOR_EXIT_METHOD_NAME, terminal_kill: TERMINAL_KILL_METHOD_NAME, + #[cfg(feature = "unstable_mcp_over_acp")] + mcp_connect: MCP_CONNECT_METHOD_NAME, + #[cfg(feature = "unstable_mcp_over_acp")] + mcp_message: MCP_MESSAGE_METHOD_NAME, + #[cfg(feature = "unstable_mcp_over_acp")] + mcp_disconnect: MCP_DISCONNECT_METHOD_NAME, #[cfg(feature = "unstable_elicitation")] elicitation_create: ELICITATION_CREATE_METHOD_NAME, #[cfg(feature = "unstable_elicitation")] @@ -1931,6 +1953,27 @@ pub enum AgentRequest { /// Requests structured user input via a form or URL. #[cfg(feature = "unstable_elicitation")] CreateElicitationRequest(CreateElicitationRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Opens an MCP-over-ACP connection. + #[cfg(feature = "unstable_mcp_over_acp")] + ConnectMcpRequest(ConnectMcpRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Exchanges an MCP-over-ACP message. + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpRequest(MessageMcpRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Closes an MCP-over-ACP connection. + #[cfg(feature = "unstable_mcp_over_acp")] + DisconnectMcpRequest(DisconnectMcpRequest), /// Handles extension method requests from the agent. /// /// Allows the Agent to send an arbitrary request that is not part of the ACP spec. @@ -1956,6 +1999,12 @@ impl AgentRequest { Self::KillTerminalRequest(_) => CLIENT_METHOD_NAMES.terminal_kill, #[cfg(feature = "unstable_elicitation")] Self::CreateElicitationRequest(_) => CLIENT_METHOD_NAMES.elicitation_create, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::ConnectMcpRequest(_) => CLIENT_METHOD_NAMES.mcp_connect, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpRequest(_) => CLIENT_METHOD_NAMES.mcp_message, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::DisconnectMcpRequest(_) => CLIENT_METHOD_NAMES.mcp_disconnect, Self::ExtMethodRequest(ext_request) => &ext_request.method, } } @@ -1982,7 +2031,13 @@ pub enum ClientResponse { KillTerminalResponse(#[serde(default)] KillTerminalResponse), #[cfg(feature = "unstable_elicitation")] CreateElicitationResponse(CreateElicitationResponse), + #[cfg(feature = "unstable_mcp_over_acp")] + ConnectMcpResponse(ConnectMcpResponse), + #[cfg(feature = "unstable_mcp_over_acp")] + DisconnectMcpResponse(#[serde(default)] DisconnectMcpResponse), ExtMethodResponse(ExtResponse), + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpResponse(MessageMcpResponse), } /// All possible notifications that an agent can send to a client. @@ -2016,6 +2071,13 @@ pub enum AgentNotification { /// Notification that a URL-based elicitation has completed. #[cfg(feature = "unstable_elicitation")] CompleteElicitationNotification(CompleteElicitationNotification), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Receives an MCP-over-ACP notification. + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpNotification(MessageMcpNotification), /// Handles extension notifications from the agent. /// /// Allows the Agent to send an arbitrary notification that is not part of the ACP spec. @@ -2034,6 +2096,8 @@ impl AgentNotification { Self::SessionNotification(_) => CLIENT_METHOD_NAMES.session_update, #[cfg(feature = "unstable_elicitation")] Self::CompleteElicitationNotification(_) => CLIENT_METHOD_NAMES.elicitation_complete, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpNotification(_) => CLIENT_METHOD_NAMES.mcp_message, Self::ExtNotification(ext_notification) => &ext_notification.method, } } @@ -2112,4 +2176,80 @@ mod tests { assert_eq!(json["positionEncodings"], json!(["utf-32", "utf-16"])); } + + #[cfg(feature = "unstable_mcp_over_acp")] + #[test] + fn test_agent_mcp_request_method_names() { + use serde_json::json; + + let params: serde_json::Map = + [("cursor".to_string(), json!("abc"))].into_iter().collect(); + + assert_eq!(CLIENT_METHOD_NAMES.mcp_connect, "mcp/connect"); + assert_eq!(CLIENT_METHOD_NAMES.mcp_message, "mcp/message"); + assert_eq!(CLIENT_METHOD_NAMES.mcp_disconnect, "mcp/disconnect"); + + assert_eq!( + AgentRequest::ConnectMcpRequest(ConnectMcpRequest::new("server-1")).method(), + "mcp/connect" + ); + assert_eq!( + AgentRequest::MessageMcpRequest(MessageMcpRequest::new("conn-1", "tools/list")) + .method(), + "mcp/message" + ); + assert_eq!( + AgentRequest::DisconnectMcpRequest(DisconnectMcpRequest::new("conn-1")).method(), + "mcp/disconnect" + ); + assert_eq!( + AgentNotification::MessageMcpNotification(MessageMcpNotification::new( + "conn-1", + "notifications/progress" + )) + .method(), + "mcp/message" + ); + + assert_eq!( + serde_json::to_value(ConnectMcpRequest::new("server-1")).unwrap(), + json!({ "acpId": "server-1" }) + ); + assert_eq!( + serde_json::to_value(ConnectMcpResponse::new("conn-1")).unwrap(), + json!({ "connectionId": "conn-1" }) + ); + assert_eq!( + serde_json::to_value(MessageMcpRequest::new("conn-1", "tools/list").params(params)) + .unwrap(), + json!({ + "connectionId": "conn-1", + "method": "tools/list", + "params": { "cursor": "abc" } + }) + ); + assert_eq!( + serde_json::to_value(DisconnectMcpRequest::new("conn-1")).unwrap(), + json!({ "connectionId": "conn-1" }) + ); + assert_eq!( + serde_json::to_value(MessageMcpNotification::new( + "conn-1", + "notifications/progress" + )) + .unwrap(), + json!({ + "connectionId": "conn-1", + "method": "notifications/progress" + }) + ); + + let request_with_null_params: MessageMcpRequest = serde_json::from_value(json!({ + "connectionId": "conn-1", + "method": "tools/list", + "params": null + })) + .unwrap(); + assert_eq!(request_with_null_params.params, None); + } } diff --git a/src/v1/mcp.rs b/src/v1/mcp.rs new file mode 100644 index 000000000..7f2be29c2 --- /dev/null +++ b/src/v1/mcp.rs @@ -0,0 +1,354 @@ +//! MCP-over-ACP transport types. + +use std::sync::Arc; + +use derive_more::{Display, From}; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use serde_json::value::RawValue; +use serde_with::skip_serializing_none; + +use crate::{IntoOption, McpServerAcpId, Meta}; + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// A unique identifier for an active MCP-over-ACP connection. +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Hash, Display, From)] +#[serde(transparent)] +#[from(Arc, String, &'static str)] +#[non_exhaustive] +pub struct McpConnectionId(pub Arc); + +impl McpConnectionId { + #[must_use] + pub fn new(id: impl Into>) -> Self { + Self(id.into()) + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Request parameters for `mcp/connect`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "client", "x-method" = MCP_CONNECT_METHOD_NAME))] +#[non_exhaustive] +pub struct ConnectMcpRequest { + /// The ACP MCP server ID that was provided by the component declaring the MCP server. + pub acp_id: McpServerAcpId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl ConnectMcpRequest { + #[must_use] + pub fn new(acp_id: impl Into) -> Self { + Self { + acp_id: acp_id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Response to `mcp/connect`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "client", "x-method" = MCP_CONNECT_METHOD_NAME))] +#[non_exhaustive] +pub struct ConnectMcpResponse { + /// The unique identifier for this MCP-over-ACP connection. + pub connection_id: McpConnectionId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl ConnectMcpResponse { + #[must_use] + pub fn new(connection_id: impl Into) -> Self { + Self { + connection_id: connection_id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Request parameters for `mcp/message`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "both", "x-method" = MCP_MESSAGE_METHOD_NAME))] +#[non_exhaustive] +pub struct MessageMcpRequest { + /// The MCP-over-ACP connection this message is sent on. + pub connection_id: McpConnectionId, + /// The inner MCP method name. + pub method: String, + /// Optional inner MCP params. + /// + /// If omitted or set to `null`, the inner MCP message has no params. + #[serde(default)] + pub params: Option>, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl MessageMcpRequest { + #[must_use] + pub fn new(connection_id: impl Into, method: impl Into) -> Self { + Self { + connection_id: connection_id.into(), + method: method.into(), + params: None, + meta: None, + } + } + + /// Optional inner MCP params. + /// + /// If omitted or set to `null`, the inner MCP message has no params. + #[must_use] + pub fn params( + mut self, + params: impl IntoOption>, + ) -> Self { + self.params = params.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Notification parameters for `mcp/message`. +/// +/// This is used when the wrapped MCP message is a notification and the outer JSON-RPC +/// envelope has no `id`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "both", "x-method" = MCP_MESSAGE_METHOD_NAME))] +#[non_exhaustive] +pub struct MessageMcpNotification { + /// The MCP-over-ACP connection this message is sent on. + pub connection_id: McpConnectionId, + /// The inner MCP method name. + pub method: String, + /// Optional inner MCP params. + /// + /// If omitted or set to `null`, the inner MCP message has no params. + #[serde(default)] + pub params: Option>, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl MessageMcpNotification { + #[must_use] + pub fn new(connection_id: impl Into, method: impl Into) -> Self { + Self { + connection_id: connection_id.into(), + method: method.into(), + params: None, + meta: None, + } + } + + /// Optional inner MCP params. + /// + /// If omitted or set to `null`, the inner MCP message has no params. + #[must_use] + pub fn params( + mut self, + params: impl IntoOption>, + ) -> Self { + self.params = params.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Response to `mcp/message`. +/// +/// This is the inner MCP response result payload. Any JSON value is valid. +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, From)] +#[serde(transparent)] +#[schemars(extend("x-side" = "both", "x-method" = MCP_MESSAGE_METHOD_NAME))] +#[non_exhaustive] +pub struct MessageMcpResponse(#[schemars(with = "serde_json::Value")] pub Arc); + +impl MessageMcpResponse { + #[must_use] + pub fn new(result: Arc) -> Self { + Self(result) + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Request parameters for `mcp/disconnect`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "client", "x-method" = MCP_DISCONNECT_METHOD_NAME))] +#[non_exhaustive] +pub struct DisconnectMcpRequest { + /// The MCP-over-ACP connection to close. + pub connection_id: McpConnectionId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl DisconnectMcpRequest { + #[must_use] + pub fn new(connection_id: impl Into) -> Self { + Self { + connection_id: connection_id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Response to `mcp/disconnect`. +#[skip_serializing_none] +#[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "client", "x-method" = MCP_DISCONNECT_METHOD_NAME))] +#[non_exhaustive] +pub struct DisconnectMcpResponse { + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl DisconnectMcpResponse { + #[must_use] + pub fn new() -> Self { + Self::default() + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// Method name for opening an MCP-over-ACP connection. +pub(crate) const MCP_CONNECT_METHOD_NAME: &str = "mcp/connect"; +/// Method name for exchanging MCP-over-ACP messages. +pub(crate) const MCP_MESSAGE_METHOD_NAME: &str = "mcp/message"; +/// Method name for closing an MCP-over-ACP connection. +pub(crate) const MCP_DISCONNECT_METHOD_NAME: &str = "mcp/disconnect"; diff --git a/src/v1/mod.rs b/src/v1/mod.rs index caadb75c1..d076de19d 100644 --- a/src/v1/mod.rs +++ b/src/v1/mod.rs @@ -7,6 +7,8 @@ mod content; mod elicitation; mod error; mod ext; +#[cfg(feature = "unstable_mcp_over_acp")] +mod mcp; #[cfg(feature = "unstable_nes")] mod nes; mod plan; @@ -23,6 +25,8 @@ use derive_more::{Display, From}; pub use elicitation::*; pub use error::*; pub use ext::*; +#[cfg(feature = "unstable_mcp_over_acp")] +pub use mcp::*; #[cfg(feature = "unstable_nes")] pub use nes::*; pub use plan::*; diff --git a/src/v2/agent.rs b/src/v2/agent.rs index a6e8210d8..926e76134 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -18,6 +18,11 @@ use super::{ }; use crate::{IntoOption, ProtocolVersion, SkipListener}; +#[cfg(feature = "unstable_mcp_over_acp")] +use super::mcp::{ + MCP_MESSAGE_METHOD_NAME, MessageMcpNotification, MessageMcpRequest, MessageMcpResponse, +}; + #[cfg(feature = "unstable_nes")] use super::{ AcceptNesNotification, CloseNesRequest, CloseNesResponse, DidChangeDocumentNotification, @@ -4608,6 +4613,9 @@ pub struct AgentMethodNames { pub session_prompt: &'static str, /// Notification for cancelling operations. pub session_cancel: &'static str, + /// Method for exchanging MCP-over-ACP messages. + #[cfg(feature = "unstable_mcp_over_acp")] + pub mcp_message: &'static str, /// Method for selecting a model for a given session. #[cfg(feature = "unstable_session_model")] pub session_set_model: &'static str, @@ -4671,6 +4679,8 @@ pub const AGENT_METHOD_NAMES: AgentMethodNames = AgentMethodNames { session_set_config_option: SESSION_SET_CONFIG_OPTION_METHOD_NAME, session_prompt: SESSION_PROMPT_METHOD_NAME, session_cancel: SESSION_CANCEL_METHOD_NAME, + #[cfg(feature = "unstable_mcp_over_acp")] + mcp_message: MCP_MESSAGE_METHOD_NAME, #[cfg(feature = "unstable_session_model")] session_set_model: SESSION_SET_MODEL_METHOD_NAME, session_list: SESSION_LIST_METHOD_NAME, @@ -4923,6 +4933,13 @@ pub enum ClientRequest { /// The agent must cancel any ongoing work and then free up any resources /// associated with the NES session. CloseNesRequest(CloseNesRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Exchanges an MCP-over-ACP message. + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpRequest(MessageMcpRequest), /// Handles extension method requests from the client. /// /// Extension methods provide a way to add custom functionality while maintaining @@ -4965,6 +4982,8 @@ impl ClientRequest { Self::SuggestNesRequest(_) => AGENT_METHOD_NAMES.nes_suggest, #[cfg(feature = "unstable_nes")] Self::CloseNesRequest(_) => AGENT_METHOD_NAMES.nes_close, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpRequest(_) => AGENT_METHOD_NAMES.mcp_message, Self::ExtMethodRequest(ext_request) => &ext_request.method, } } @@ -5011,6 +5030,8 @@ pub enum AgentResponse { #[cfg(feature = "unstable_nes")] CloseNesResponse(#[serde(default)] CloseNesResponse), ExtMethodResponse(ExtResponse), + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpResponse(MessageMcpResponse), } /// All possible notifications that a client can send to an agent. @@ -5071,6 +5092,13 @@ pub enum ClientNotification { /// /// Notification sent when a suggestion is rejected. RejectNesNotification(RejectNesNotification), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Sends an MCP-over-ACP notification. + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpNotification(MessageMcpNotification), /// Handles extension notifications from the client. /// /// Extension notifications provide a way to send one-way messages for custom functionality @@ -5100,6 +5128,8 @@ impl ClientNotification { Self::AcceptNesNotification(_) => AGENT_METHOD_NAMES.nes_accept, #[cfg(feature = "unstable_nes")] Self::RejectNesNotification(_) => AGENT_METHOD_NAMES.nes_reject, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpNotification(_) => AGENT_METHOD_NAMES.mcp_message, Self::ExtNotification(ext_notification) => &ext_notification.method, } } @@ -5244,6 +5274,26 @@ mod test_serialization { } } + #[cfg(feature = "unstable_mcp_over_acp")] + #[test] + fn test_client_mcp_message_method_names() { + assert_eq!(AGENT_METHOD_NAMES.mcp_message, "mcp/message"); + + assert_eq!( + ClientRequest::MessageMcpRequest(MessageMcpRequest::new("conn-1", "tools/list")) + .method(), + "mcp/message" + ); + assert_eq!( + ClientNotification::MessageMcpNotification(MessageMcpNotification::new( + "conn-1", + "notifications/progress" + )) + .method(), + "mcp/message" + ); + } + #[test] fn test_mcp_server_sse_serialization() { let server = McpServer::Sse( diff --git a/src/v2/client.rs b/src/v2/client.rs index e88b5a943..001408d8d 100644 --- a/src/v2/client.rs +++ b/src/v2/client.rs @@ -21,6 +21,13 @@ use super::{ }; use crate::{IntoMaybeUndefined, IntoOption, MaybeUndefined, SkipListener}; +#[cfg(feature = "unstable_mcp_over_acp")] +use super::mcp::{ + ConnectMcpRequest, ConnectMcpResponse, DisconnectMcpRequest, DisconnectMcpResponse, + MCP_CONNECT_METHOD_NAME, MCP_DISCONNECT_METHOD_NAME, MCP_MESSAGE_METHOD_NAME, + MessageMcpNotification, MessageMcpRequest, MessageMcpResponse, +}; + #[cfg(feature = "unstable_nes")] use super::{ClientNesCapabilities, PositionEncodingKind}; @@ -1786,6 +1793,15 @@ pub struct ClientMethodNames { pub terminal_wait_for_exit: &'static str, /// Method for killing a terminal. pub terminal_kill: &'static str, + /// Method for opening an MCP-over-ACP connection. + #[cfg(feature = "unstable_mcp_over_acp")] + pub mcp_connect: &'static str, + /// Method for exchanging MCP-over-ACP messages. + #[cfg(feature = "unstable_mcp_over_acp")] + pub mcp_message: &'static str, + /// Method for closing an MCP-over-ACP connection. + #[cfg(feature = "unstable_mcp_over_acp")] + pub mcp_disconnect: &'static str, /// Method for elicitation. #[cfg(feature = "unstable_elicitation")] pub elicitation_create: &'static str, @@ -1805,6 +1821,12 @@ pub const CLIENT_METHOD_NAMES: ClientMethodNames = ClientMethodNames { terminal_release: TERMINAL_RELEASE_METHOD_NAME, terminal_wait_for_exit: TERMINAL_WAIT_FOR_EXIT_METHOD_NAME, terminal_kill: TERMINAL_KILL_METHOD_NAME, + #[cfg(feature = "unstable_mcp_over_acp")] + mcp_connect: MCP_CONNECT_METHOD_NAME, + #[cfg(feature = "unstable_mcp_over_acp")] + mcp_message: MCP_MESSAGE_METHOD_NAME, + #[cfg(feature = "unstable_mcp_over_acp")] + mcp_disconnect: MCP_DISCONNECT_METHOD_NAME, #[cfg(feature = "unstable_elicitation")] elicitation_create: ELICITATION_CREATE_METHOD_NAME, #[cfg(feature = "unstable_elicitation")] @@ -1931,6 +1953,27 @@ pub enum AgentRequest { /// Requests structured user input via a form or URL. #[cfg(feature = "unstable_elicitation")] CreateElicitationRequest(CreateElicitationRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Opens an MCP-over-ACP connection. + #[cfg(feature = "unstable_mcp_over_acp")] + ConnectMcpRequest(ConnectMcpRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Exchanges an MCP-over-ACP message. + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpRequest(MessageMcpRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Closes an MCP-over-ACP connection. + #[cfg(feature = "unstable_mcp_over_acp")] + DisconnectMcpRequest(DisconnectMcpRequest), /// Handles extension method requests from the agent. /// /// Allows the Agent to send an arbitrary request that is not part of the ACP spec. @@ -1956,6 +1999,12 @@ impl AgentRequest { Self::KillTerminalRequest(_) => CLIENT_METHOD_NAMES.terminal_kill, #[cfg(feature = "unstable_elicitation")] Self::CreateElicitationRequest(_) => CLIENT_METHOD_NAMES.elicitation_create, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::ConnectMcpRequest(_) => CLIENT_METHOD_NAMES.mcp_connect, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpRequest(_) => CLIENT_METHOD_NAMES.mcp_message, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::DisconnectMcpRequest(_) => CLIENT_METHOD_NAMES.mcp_disconnect, Self::ExtMethodRequest(ext_request) => &ext_request.method, } } @@ -1982,7 +2031,13 @@ pub enum ClientResponse { KillTerminalResponse(#[serde(default)] KillTerminalResponse), #[cfg(feature = "unstable_elicitation")] CreateElicitationResponse(CreateElicitationResponse), + #[cfg(feature = "unstable_mcp_over_acp")] + ConnectMcpResponse(ConnectMcpResponse), + #[cfg(feature = "unstable_mcp_over_acp")] + DisconnectMcpResponse(#[serde(default)] DisconnectMcpResponse), ExtMethodResponse(ExtResponse), + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpResponse(MessageMcpResponse), } /// All possible notifications that an agent can send to a client. @@ -2016,6 +2071,13 @@ pub enum AgentNotification { /// Notification that a URL-based elicitation has completed. #[cfg(feature = "unstable_elicitation")] CompleteElicitationNotification(CompleteElicitationNotification), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Receives an MCP-over-ACP notification. + #[cfg(feature = "unstable_mcp_over_acp")] + MessageMcpNotification(MessageMcpNotification), /// Handles extension notifications from the agent. /// /// Allows the Agent to send an arbitrary notification that is not part of the ACP spec. @@ -2034,6 +2096,8 @@ impl AgentNotification { Self::SessionNotification(_) => CLIENT_METHOD_NAMES.session_update, #[cfg(feature = "unstable_elicitation")] Self::CompleteElicitationNotification(_) => CLIENT_METHOD_NAMES.elicitation_complete, + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpNotification(_) => CLIENT_METHOD_NAMES.mcp_message, Self::ExtNotification(ext_notification) => &ext_notification.method, } } @@ -2112,4 +2176,80 @@ mod tests { assert_eq!(json["positionEncodings"], json!(["utf-32", "utf-16"])); } + + #[cfg(feature = "unstable_mcp_over_acp")] + #[test] + fn test_agent_mcp_request_method_names() { + use serde_json::json; + + let params: serde_json::Map = + [("cursor".to_string(), json!("abc"))].into_iter().collect(); + + assert_eq!(CLIENT_METHOD_NAMES.mcp_connect, "mcp/connect"); + assert_eq!(CLIENT_METHOD_NAMES.mcp_message, "mcp/message"); + assert_eq!(CLIENT_METHOD_NAMES.mcp_disconnect, "mcp/disconnect"); + + assert_eq!( + AgentRequest::ConnectMcpRequest(ConnectMcpRequest::new("server-1")).method(), + "mcp/connect" + ); + assert_eq!( + AgentRequest::MessageMcpRequest(MessageMcpRequest::new("conn-1", "tools/list")) + .method(), + "mcp/message" + ); + assert_eq!( + AgentRequest::DisconnectMcpRequest(DisconnectMcpRequest::new("conn-1")).method(), + "mcp/disconnect" + ); + assert_eq!( + AgentNotification::MessageMcpNotification(MessageMcpNotification::new( + "conn-1", + "notifications/progress" + )) + .method(), + "mcp/message" + ); + + assert_eq!( + serde_json::to_value(ConnectMcpRequest::new("server-1")).unwrap(), + json!({ "acpId": "server-1" }) + ); + assert_eq!( + serde_json::to_value(ConnectMcpResponse::new("conn-1")).unwrap(), + json!({ "connectionId": "conn-1" }) + ); + assert_eq!( + serde_json::to_value(MessageMcpRequest::new("conn-1", "tools/list").params(params)) + .unwrap(), + json!({ + "connectionId": "conn-1", + "method": "tools/list", + "params": { "cursor": "abc" } + }) + ); + assert_eq!( + serde_json::to_value(DisconnectMcpRequest::new("conn-1")).unwrap(), + json!({ "connectionId": "conn-1" }) + ); + assert_eq!( + serde_json::to_value(MessageMcpNotification::new( + "conn-1", + "notifications/progress" + )) + .unwrap(), + json!({ + "connectionId": "conn-1", + "method": "notifications/progress" + }) + ); + + let request_with_null_params: MessageMcpRequest = serde_json::from_value(json!({ + "connectionId": "conn-1", + "method": "tools/list", + "params": null + })) + .unwrap(); + assert_eq!(request_with_null_params.params, None); + } } diff --git a/src/v2/conversion.rs b/src/v2/conversion.rs index 407d0d417..c78efcc5f 100644 --- a/src/v2/conversion.rs +++ b/src/v2/conversion.rs @@ -1688,6 +1688,220 @@ impl IntoV2 for crate::v1::TerminalExitStatus { } } +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::ConnectMcpRequest { + type Output = crate::v1::ConnectMcpRequest; + + fn into_v1(self) -> Result { + let Self { acp_id, meta } = self; + Ok(crate::v1::ConnectMcpRequest { + acp_id: acp_id.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::ConnectMcpRequest { + type Output = super::ConnectMcpRequest; + + fn into_v2(self) -> Result { + let Self { acp_id, meta } = self; + Ok(super::ConnectMcpRequest { + acp_id: acp_id.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::ConnectMcpResponse { + type Output = crate::v1::ConnectMcpResponse; + + fn into_v1(self) -> Result { + let Self { + connection_id, + meta, + } = self; + Ok(crate::v1::ConnectMcpResponse { + connection_id: connection_id.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::ConnectMcpResponse { + type Output = super::ConnectMcpResponse; + + fn into_v2(self) -> Result { + let Self { + connection_id, + meta, + } = self; + Ok(super::ConnectMcpResponse { + connection_id: connection_id.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::MessageMcpRequest { + type Output = crate::v1::MessageMcpRequest; + + fn into_v1(self) -> Result { + let Self { + connection_id, + method, + params, + meta, + } = self; + Ok(crate::v1::MessageMcpRequest { + connection_id: connection_id.into_v1()?, + method: method.into_v1()?, + params: params.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::MessageMcpRequest { + type Output = super::MessageMcpRequest; + + fn into_v2(self) -> Result { + let Self { + connection_id, + method, + params, + meta, + } = self; + Ok(super::MessageMcpRequest { + connection_id: connection_id.into_v2()?, + method: method.into_v2()?, + params: params.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::MessageMcpNotification { + type Output = crate::v1::MessageMcpNotification; + + fn into_v1(self) -> Result { + let Self { + connection_id, + method, + params, + meta, + } = self; + Ok(crate::v1::MessageMcpNotification { + connection_id: connection_id.into_v1()?, + method: method.into_v1()?, + params: params.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::MessageMcpNotification { + type Output = super::MessageMcpNotification; + + fn into_v2(self) -> Result { + let Self { + connection_id, + method, + params, + meta, + } = self; + Ok(super::MessageMcpNotification { + connection_id: connection_id.into_v2()?, + method: method.into_v2()?, + params: params.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::MessageMcpResponse { + type Output = crate::v1::MessageMcpResponse; + + fn into_v1(self) -> Result { + let Self(result) = self; + Ok(crate::v1::MessageMcpResponse::new(result.into_v1()?)) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::MessageMcpResponse { + type Output = super::MessageMcpResponse; + + fn into_v2(self) -> Result { + let Self(result) = self; + Ok(super::MessageMcpResponse::new(result.into_v2()?)) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::DisconnectMcpRequest { + type Output = crate::v1::DisconnectMcpRequest; + + fn into_v1(self) -> Result { + let Self { + connection_id, + meta, + } = self; + Ok(crate::v1::DisconnectMcpRequest { + connection_id: connection_id.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::DisconnectMcpRequest { + type Output = super::DisconnectMcpRequest; + + fn into_v2(self) -> Result { + let Self { + connection_id, + meta, + } = self; + Ok(super::DisconnectMcpRequest { + connection_id: connection_id.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::DisconnectMcpResponse { + type Output = crate::v1::DisconnectMcpResponse; + + fn into_v1(self) -> Result { + let Self { meta } = self; + Ok(crate::v1::DisconnectMcpResponse { + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::DisconnectMcpResponse { + type Output = super::DisconnectMcpResponse; + + fn into_v2(self) -> Result { + let Self { meta } = self; + Ok(super::DisconnectMcpResponse { + meta: meta.into_v2()?, + }) + } +} + impl IntoV1 for super::ClientCapabilities { type Output = crate::v1::ClientCapabilities; @@ -1847,6 +2061,18 @@ impl IntoV1 for super::AgentRequest { Self::CreateElicitationRequest(value) => { crate::v1::AgentRequest::CreateElicitationRequest(value.into_v1()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::ConnectMcpRequest(value) => { + crate::v1::AgentRequest::ConnectMcpRequest(value.into_v1()?) + } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpRequest(value) => { + crate::v1::AgentRequest::MessageMcpRequest(value.into_v1()?) + } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::DisconnectMcpRequest(value) => { + crate::v1::AgentRequest::DisconnectMcpRequest(value.into_v1()?) + } Self::ExtMethodRequest(value) => { crate::v1::AgentRequest::ExtMethodRequest(value.into_v1()?) } @@ -1887,6 +2113,18 @@ impl IntoV2 for crate::v1::AgentRequest { Self::CreateElicitationRequest(value) => { super::AgentRequest::CreateElicitationRequest(value.into_v2()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::ConnectMcpRequest(value) => { + super::AgentRequest::ConnectMcpRequest(value.into_v2()?) + } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpRequest(value) => { + super::AgentRequest::MessageMcpRequest(value.into_v2()?) + } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::DisconnectMcpRequest(value) => { + super::AgentRequest::DisconnectMcpRequest(value.into_v2()?) + } Self::ExtMethodRequest(value) => { super::AgentRequest::ExtMethodRequest(value.into_v2()?) } @@ -1927,6 +2165,18 @@ impl IntoV1 for super::ClientResponse { Self::CreateElicitationResponse(value) => { crate::v1::ClientResponse::CreateElicitationResponse(value.into_v1()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::ConnectMcpResponse(value) => { + crate::v1::ClientResponse::ConnectMcpResponse(value.into_v1()?) + } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpResponse(value) => { + crate::v1::ClientResponse::MessageMcpResponse(value.into_v1()?) + } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::DisconnectMcpResponse(value) => { + crate::v1::ClientResponse::DisconnectMcpResponse(value.into_v1()?) + } Self::ExtMethodResponse(value) => { crate::v1::ClientResponse::ExtMethodResponse(value.into_v1()?) } @@ -1967,6 +2217,18 @@ impl IntoV2 for crate::v1::ClientResponse { Self::CreateElicitationResponse(value) => { super::ClientResponse::CreateElicitationResponse(value.into_v2()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::ConnectMcpResponse(value) => { + super::ClientResponse::ConnectMcpResponse(value.into_v2()?) + } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpResponse(value) => { + super::ClientResponse::MessageMcpResponse(value.into_v2()?) + } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::DisconnectMcpResponse(value) => { + super::ClientResponse::DisconnectMcpResponse(value.into_v2()?) + } Self::ExtMethodResponse(value) => { super::ClientResponse::ExtMethodResponse(value.into_v2()?) } @@ -1986,6 +2248,10 @@ impl IntoV1 for super::AgentNotification { Self::CompleteElicitationNotification(value) => { crate::v1::AgentNotification::CompleteElicitationNotification(value.into_v1()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpNotification(value) => { + crate::v1::AgentNotification::MessageMcpNotification(value.into_v1()?) + } Self::ExtNotification(value) => { crate::v1::AgentNotification::ExtNotification(value.into_v1()?) } @@ -2005,6 +2271,10 @@ impl IntoV2 for crate::v1::AgentNotification { Self::CompleteElicitationNotification(value) => { super::AgentNotification::CompleteElicitationNotification(value.into_v2()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpNotification(value) => { + super::AgentNotification::MessageMcpNotification(value.into_v2()?) + } Self::ExtNotification(value) => { super::AgentNotification::ExtNotification(value.into_v2()?) } @@ -4168,6 +4438,24 @@ impl IntoV2 for crate::v1::McpServerAcpId { } } +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV1 for super::McpConnectionId { + type Output = crate::v1::McpConnectionId; + + fn into_v1(self) -> Result { + Ok(crate::v1::McpConnectionId(self.0.into_v1()?)) + } +} + +#[cfg(feature = "unstable_mcp_over_acp")] +impl IntoV2 for crate::v1::McpConnectionId { + type Output = super::McpConnectionId; + + fn into_v2(self) -> Result { + Ok(super::McpConnectionId(self.0.into_v2()?)) + } +} + #[cfg(feature = "unstable_mcp_over_acp")] impl IntoV1 for super::McpServerAcp { type Output = crate::v1::McpServerAcp; @@ -5291,6 +5579,10 @@ impl IntoV1 for super::ClientRequest { Self::CloseNesRequest(value) => { crate::v1::ClientRequest::CloseNesRequest(value.into_v1()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpRequest(value) => { + crate::v1::ClientRequest::MessageMcpRequest(value.into_v1()?) + } Self::ExtMethodRequest(value) => { crate::v1::ClientRequest::ExtMethodRequest(value.into_v1()?) } @@ -5361,6 +5653,10 @@ impl IntoV2 for crate::v1::ClientRequest { } #[cfg(feature = "unstable_nes")] Self::CloseNesRequest(value) => super::ClientRequest::CloseNesRequest(value.into_v2()?), + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpRequest(value) => { + super::ClientRequest::MessageMcpRequest(value.into_v2()?) + } Self::ExtMethodRequest(value) => { super::ClientRequest::ExtMethodRequest(value.into_v2()?) } @@ -5442,6 +5738,10 @@ impl IntoV1 for super::AgentResponse { Self::ExtMethodResponse(value) => { crate::v1::AgentResponse::ExtMethodResponse(value.into_v1()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpResponse(value) => { + crate::v1::AgentResponse::MessageMcpResponse(value.into_v1()?) + } }) } } @@ -5516,6 +5816,10 @@ impl IntoV2 for crate::v1::AgentResponse { Self::ExtMethodResponse(value) => { super::AgentResponse::ExtMethodResponse(value.into_v2()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpResponse(value) => { + super::AgentResponse::MessageMcpResponse(value.into_v2()?) + } }) } } @@ -5556,6 +5860,10 @@ impl IntoV1 for super::ClientNotification { Self::RejectNesNotification(value) => { crate::v1::ClientNotification::RejectNesNotification(value.into_v1()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpNotification(value) => { + crate::v1::ClientNotification::MessageMcpNotification(value.into_v1()?) + } Self::ExtNotification(value) => { crate::v1::ClientNotification::ExtNotification(value.into_v1()?) } @@ -5599,6 +5907,10 @@ impl IntoV2 for crate::v1::ClientNotification { Self::RejectNesNotification(value) => { super::ClientNotification::RejectNesNotification(value.into_v2()?) } + #[cfg(feature = "unstable_mcp_over_acp")] + Self::MessageMcpNotification(value) => { + super::ClientNotification::MessageMcpNotification(value.into_v2()?) + } Self::ExtNotification(value) => { super::ClientNotification::ExtNotification(value.into_v2()?) } diff --git a/src/v2/mcp.rs b/src/v2/mcp.rs new file mode 100644 index 000000000..7f5ea2ce8 --- /dev/null +++ b/src/v2/mcp.rs @@ -0,0 +1,355 @@ +//! MCP-over-ACP transport types. + +use std::sync::Arc; + +use derive_more::{Display, From}; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use serde_json::value::RawValue; +use serde_with::skip_serializing_none; + +use super::{McpServerAcpId, Meta}; +use crate::IntoOption; + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// A unique identifier for an active MCP-over-ACP connection. +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq, Hash, Display, From)] +#[serde(transparent)] +#[from(Arc, String, &'static str)] +#[non_exhaustive] +pub struct McpConnectionId(pub Arc); + +impl McpConnectionId { + #[must_use] + pub fn new(id: impl Into>) -> Self { + Self(id.into()) + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Request parameters for `mcp/connect`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "client", "x-method" = MCP_CONNECT_METHOD_NAME))] +#[non_exhaustive] +pub struct ConnectMcpRequest { + /// The ACP MCP server ID that was provided by the component declaring the MCP server. + pub acp_id: McpServerAcpId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl ConnectMcpRequest { + #[must_use] + pub fn new(acp_id: impl Into) -> Self { + Self { + acp_id: acp_id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Response to `mcp/connect`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "client", "x-method" = MCP_CONNECT_METHOD_NAME))] +#[non_exhaustive] +pub struct ConnectMcpResponse { + /// The unique identifier for this MCP-over-ACP connection. + pub connection_id: McpConnectionId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl ConnectMcpResponse { + #[must_use] + pub fn new(connection_id: impl Into) -> Self { + Self { + connection_id: connection_id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Request parameters for `mcp/message`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "both", "x-method" = MCP_MESSAGE_METHOD_NAME))] +#[non_exhaustive] +pub struct MessageMcpRequest { + /// The MCP-over-ACP connection this message is sent on. + pub connection_id: McpConnectionId, + /// The inner MCP method name. + pub method: String, + /// Optional inner MCP params. + /// + /// If omitted or set to `null`, the inner MCP message has no params. + #[serde(default)] + pub params: Option>, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl MessageMcpRequest { + #[must_use] + pub fn new(connection_id: impl Into, method: impl Into) -> Self { + Self { + connection_id: connection_id.into(), + method: method.into(), + params: None, + meta: None, + } + } + + /// Optional inner MCP params. + /// + /// If omitted or set to `null`, the inner MCP message has no params. + #[must_use] + pub fn params( + mut self, + params: impl IntoOption>, + ) -> Self { + self.params = params.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Notification parameters for `mcp/message`. +/// +/// This is used when the wrapped MCP message is a notification and the outer JSON-RPC +/// envelope has no `id`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "both", "x-method" = MCP_MESSAGE_METHOD_NAME))] +#[non_exhaustive] +pub struct MessageMcpNotification { + /// The MCP-over-ACP connection this message is sent on. + pub connection_id: McpConnectionId, + /// The inner MCP method name. + pub method: String, + /// Optional inner MCP params. + /// + /// If omitted or set to `null`, the inner MCP message has no params. + #[serde(default)] + pub params: Option>, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl MessageMcpNotification { + #[must_use] + pub fn new(connection_id: impl Into, method: impl Into) -> Self { + Self { + connection_id: connection_id.into(), + method: method.into(), + params: None, + meta: None, + } + } + + /// Optional inner MCP params. + /// + /// If omitted or set to `null`, the inner MCP message has no params. + #[must_use] + pub fn params( + mut self, + params: impl IntoOption>, + ) -> Self { + self.params = params.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Response to `mcp/message`. +/// +/// This is the inner MCP response result payload. Any JSON value is valid. +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, From)] +#[serde(transparent)] +#[schemars(extend("x-side" = "both", "x-method" = MCP_MESSAGE_METHOD_NAME))] +#[non_exhaustive] +pub struct MessageMcpResponse(#[schemars(with = "serde_json::Value")] pub Arc); + +impl MessageMcpResponse { + #[must_use] + pub fn new(result: Arc) -> Self { + Self(result) + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Request parameters for `mcp/disconnect`. +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "client", "x-method" = MCP_DISCONNECT_METHOD_NAME))] +#[non_exhaustive] +pub struct DisconnectMcpRequest { + /// The MCP-over-ACP connection to close. + pub connection_id: McpConnectionId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl DisconnectMcpRequest { + #[must_use] + pub fn new(connection_id: impl Into) -> Self { + Self { + connection_id: connection_id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Response to `mcp/disconnect`. +#[skip_serializing_none] +#[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +#[schemars(extend("x-side" = "client", "x-method" = MCP_DISCONNECT_METHOD_NAME))] +#[non_exhaustive] +pub struct DisconnectMcpResponse { + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl DisconnectMcpResponse { + #[must_use] + pub fn new() -> Self { + Self::default() + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// Method name for opening an MCP-over-ACP connection. +pub(crate) const MCP_CONNECT_METHOD_NAME: &str = "mcp/connect"; +/// Method name for exchanging MCP-over-ACP messages. +pub(crate) const MCP_MESSAGE_METHOD_NAME: &str = "mcp/message"; +/// Method name for closing an MCP-over-ACP connection. +pub(crate) const MCP_DISCONNECT_METHOD_NAME: &str = "mcp/disconnect"; diff --git a/src/v2/mod.rs b/src/v2/mod.rs index 218d91fb8..ae2fda017 100644 --- a/src/v2/mod.rs +++ b/src/v2/mod.rs @@ -18,6 +18,8 @@ pub mod conversion; mod elicitation; mod error; mod ext; +#[cfg(feature = "unstable_mcp_over_acp")] +mod mcp; #[cfg(feature = "unstable_nes")] mod nes; mod plan; @@ -34,6 +36,8 @@ use derive_more::{Display, From}; pub use elicitation::*; pub use error::*; pub use ext::*; +#[cfg(feature = "unstable_mcp_over_acp")] +pub use mcp::*; #[cfg(feature = "unstable_nes")] pub use nes::*; pub use plan::*; From b33c886e8cb69d9f3b4743140a08741495e0a421 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 22:02:24 +0200 Subject: [PATCH 074/152] chore: release v0.13.0 (#1179) Co-authored-by: acp-release-bot[bot] <246668977+acp-release-bot[bot]@users.noreply.github.com> --- CHANGELOG.md | 14 ++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index daca8d04c..2d2a44293 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.13.0](https://github.com/agentclientprotocol/agent-client-protocol/compare/v0.12.2...v0.13.0) - 2026-05-12 + +### Added + +- *(unstable)* Add experimental MCP-over-ACP message types ([#1185](https://github.com/agentclientprotocol/agent-client-protocol/pull/1185)) + +### Other + +- add unstable mcp-over-acp additions to the schema ([#1173](https://github.com/agentclientprotocol/agent-client-protocol/pull/1173)) +- *(deps)* bump the minor group with 3 updates ([#1178](https://github.com/agentclientprotocol/agent-client-protocol/pull/1178)) +- *(deps)* bump the minor group with 2 updates ([#1121](https://github.com/agentclientprotocol/agent-client-protocol/pull/1121)) +- *(unstable)* Start setting up v2 Schema scaffolding for experimentation ([#1099](https://github.com/agentclientprotocol/agent-client-protocol/pull/1099)) +- reorganize to v1 module ([#1094](https://github.com/agentclientprotocol/agent-client-protocol/pull/1094)) + ## [0.12.2](https://github.com/agentclientprotocol/agent-client-protocol/compare/v0.12.1...v0.12.2) - 2026-04-23 ### Added diff --git a/Cargo.lock b/Cargo.lock index e9b8a3703..05fe0c898 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "agent-client-protocol-schema" -version = "0.12.2" +version = "0.13.0" dependencies = [ "anyhow", "derive_more", diff --git a/Cargo.toml b/Cargo.toml index 2ff641afe..fe23153af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "agent-client-protocol-schema" authors = ["Zed "] -version = "0.12.2" +version = "0.13.0" edition = "2024" license = "Apache-2.0" description = "A protocol for standardizing communication between code editors and AI coding agents" From 505627943a90c702cbee6dbc5fdac0f889bceb7e Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Tue, 12 May 2026 22:35:04 +0200 Subject: [PATCH 075/152] docs(rfd): Move Rust SDK RFD to Preview (#1187) --- docs/docs.json | 3 +-- docs/rfds/rust-sdk-v1.mdx | 16 +++++++++------- docs/rfds/updates.mdx | 7 +++++++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/docs/docs.json b/docs/docs.json index 94dcdf0e2..77ccb9e93 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -120,7 +120,6 @@ "rfds/mcp-over-acp", "rfds/session-usage", "rfds/auth-methods", - "rfds/rust-sdk-v1", "rfds/logout-method", "rfds/session-delete", "rfds/diff-delete", @@ -144,7 +143,7 @@ }, { "group": "Preview", - "pages": [] + "pages": ["rfds/rust-sdk-v1"] }, { "group": "Completed", diff --git a/docs/rfds/rust-sdk-v1.mdx b/docs/rfds/rust-sdk-v1.mdx index b29505826..d7a5930ee 100644 --- a/docs/rfds/rust-sdk-v1.mdx +++ b/docs/rfds/rust-sdk-v1.mdx @@ -865,7 +865,7 @@ The new SDK is organized into several crates with clear responsibilities: ### Current status -A working implementation exists in the [symposium-dev/symposium-acp](https://github.com/symposium-dev/symposium-acp) repository and is published on crates.io. It powers: +The implementation has been upstreamed to [agentclientprotocol/rust-sdk](https://github.com/agentclientprotocol/rust-sdk) for preview. The original [`sacp`](https://github.com/symposium-dev/symposium-acp) crates remain published on crates.io and power: - The conductor (proxy chain orchestration) - patchwork-rs (programmatic agent orchestration) @@ -873,12 +873,13 @@ A working implementation exists in the [symposium-dev/symposium-acp](https://git ### Migration path -The transition involves importing the `sacp` implementation into this repository: +The transition involves upstreaming the `sacp` implementation to the `agentclientprotocol/rust-sdk` repository and stabilizing it after preview: -1. **Import `sacp` crates** into this repository with the new `agent-client-protocol-*` naming -2. **Release `agent-client-protocol` v1.0** with the new builder-based API -3. **Deprecate `sacp` crates** on crates.io, pointing users to the `agent-client-protocol` family -4. **Provide migration guidance** for users of the current v0.x SDK +1. **Import `sacp` crates** to `agentclientprotocol/rust-sdk` with the new `agent-client-protocol-*` naming +2. **Preview the upstreamed SDK** to collect feedback on the new builder-based API +3. **Release `agent-client-protocol` v1.0** when this RFD is marked Completed +4. **Deprecate `sacp` crates** on crates.io, pointing users to the `agent-client-protocol` family +5. **Provide migration guidance** for users of the current v0.x SDK Most users will find the migration straightforward - the builder pattern is more ergonomic than the trait-based approach, so the new code is often simpler than the old. @@ -910,10 +911,11 @@ This is a potential future enhancement - enum derives could dispatch to differen ### What changes are needed before stabilizing? -We are in the process of changing how response messages work to simplify the implementation of the conductor. Before stabilizing we should do a thorough review of the methods and look for candidates that can be removed or simplified. +Now that the implementation has been upstreamed, preview feedback should focus on API polish, method review, and identifying any candidates that can be removed or simplified before the 1.0 release. The conductor is feature complete but the support for MCP-over-ACP needs a few minor improvements (in particular, it should detect when the agent only supports stdio bridging and not attempt to use HTTP, which it currently does not). ## Revision history +- 2026-05-12: Moved to Preview after the initial crate import was upstreamed to agentclientprotocol/rust-sdk. - Initial draft based on working implementation in symposium-acp repository. diff --git a/docs/rfds/updates.mdx b/docs/rfds/updates.mdx index 2ff11f82c..0af82becb 100644 --- a/docs/rfds/updates.mdx +++ b/docs/rfds/updates.mdx @@ -6,6 +6,13 @@ rss: true This page tracks lifecycle changes for ACP Requests for Dialog. For broader ACP announcements, see [Updates](/updates). + +## Rust SDK based on SACP RFD moves to Preview stage + +The RFD for basing the Rust SDK on SACP has been moved to Preview stage now that the initial crate import has been upstreamed to [agentclientprotocol/rust-sdk](https://github.com/agentclientprotocol/rust-sdk). Please review the [RFD](/rfds/rust-sdk-v1) for more information on the current proposal and provide feedback before the SDK is stabilized as 1.0. + + + ## model_config Category RFD moves to Draft From a2a4933d219bf5a411302eeb57284515c58fccbf Mon Sep 17 00:00:00 2001 From: Justkog Date: Tue, 12 May 2026 22:39:35 +0200 Subject: [PATCH 076/152] docs: Add Sniptail to ACP clients (#1170) Co-authored-by: JC --- docs/get-started/clients.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/get-started/clients.mdx b/docs/get-started/clients.mdx index ec9af1cf5..80840bb73 100644 --- a/docs/get-started/clients.mdx +++ b/docs/get-started/clients.mdx @@ -73,6 +73,7 @@ These mobile-first tools bring ACP and related coding-agent workflows to phones - [Telegram ACP Bot](https://github.com/mgaitan/telegram-acp-bot) (Telegram) — through the [`telegram-acp-bot`](https://github.com/mgaitan/telegram-acp-bot) connector - [Telegram-ACP](https://github.com/SuperKenVery/Telegram-ACP/) (Telegram) — Supports multi-thread chat and message streaming - [WeChat ACP](https://github.com/formulahendry/wechat-acp) (WeChat) +- [Sniptail](https://github.com/Justkog/sniptail) (Discord, Slack) - self-hosted chat bridge for running coding agents across your team’s repositories ## Frameworks From 2430e99626ffdb63a5bab7d5e6c4c9f21d35b6f5 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 20:52:13 +0000 Subject: [PATCH 077/152] docs: update registry agents (#1188) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 99bdcab5b..fa7fdc064 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.123.0** + **0.123.1** Date: Tue, 12 May 2026 22:37:35 +0000 Subject: [PATCH 078/152] docs: update registry agents (#1189) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index fa7fdc064..ae893cdac 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -598,7 +598,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Code and build agents with comprehensive multi-provider support - **0.7.2**, + **0.7.3**, GitHub's AI pair programmer - **1.0.45**, + **1.0.46**, Date: Wed, 13 May 2026 00:15:37 +0000 Subject: [PATCH 079/152] docs: update registry agents (#1190) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index ae893cdac..fd1d8ceb6 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -135,7 +135,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **2.18.0**, + **3.0.0**, Google's official CLI for Gemini - **0.41.2**, + **0.42.0**, Date: Wed, 13 May 2026 07:30:25 +0000 Subject: [PATCH 080/152] docs: update registry agents (#1191) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index fd1d8ceb6..577b4e3aa 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -841,7 +841,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Alibaba's Qwen coding assistant - **0.15.10**, + **0.15.11**, Date: Wed, 13 May 2026 10:45:21 +0000 Subject: [PATCH 081/152] docs: update registry agents (#1192) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 577b4e3aa..0ad8efac5 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -151,7 +151,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Tencent Cloud's official intelligent coding tool - **2.96.0** + **2.97.0** Co-building with a seasoned Rust partner. - **0.5.1**, + **0.6.0**, Factory Droid - AI coding agent powered by Factory AI - **0.123.1** + **0.124.0** Date: Wed, 13 May 2026 19:08:45 +0000 Subject: [PATCH 082/152] docs: update registry agents (#1193) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 0ad8efac5..ab0daa4b0 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -135,7 +135,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.0**, + **3.0.2**, GitHub's AI pair programmer - **1.0.46**, + **1.0.47**, AI coding assistant with agentic capabilities - **0.2.13** + **0.2.14** Date: Wed, 13 May 2026 20:57:13 +0000 Subject: [PATCH 083/152] docs: update registry agents (#1194) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index ab0daa4b0..ecb0f9c97 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -654,7 +654,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > A local, extensible, open source AI agent that automates engineering tasks - **1.33.1**, + **1.34.0**, ACP adapter for pi coding agent - **0.0.26**, + **0.0.27**, Date: Thu, 14 May 2026 00:16:51 +0000 Subject: [PATCH 084/152] docs: update registry agents (#1195) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index ecb0f9c97..89fe38770 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.14.48**, + **1.14.49**, Date: Thu, 14 May 2026 04:16:49 +0000 Subject: [PATCH 085/152] docs: update registry agents (#1197) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 89fe38770..c7066f322 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -67,7 +67,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Augment Code's powerful software agent, backed by industry-leading context engine - **0.26.0**, + **0.27.0**, Factory Droid - AI coding agent powered by Factory AI - **0.124.0** + **0.125.0** Date: Thu, 14 May 2026 07:26:00 +0000 Subject: [PATCH 086/152] docs: update registry agents (#1198) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index c7066f322..c5b605a7d 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -698,7 +698,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Moonshot AI's coding assistant - **1.43.0**, + **1.44.0**, The open source coding agent - **1.14.49**, + **1.14.50**, Date: Thu, 14 May 2026 13:06:48 +0000 Subject: [PATCH 087/152] docs: update registry agents (#1200) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index c5b605a7d..874032df0 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -151,7 +151,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Tencent Cloud's official intelligent coding tool - **2.97.0** + **2.97.1** Date: Thu, 14 May 2026 23:36:57 +0000 Subject: [PATCH 088/152] Complete prompt variable processing implementation - Regenerate JSON schemas to include new prompt variable types - Fix PromptVariableType serialization test to correctly handle Select variant - All schema files now include PromptTemplate, PromptVariable, and PromptVariableType - Schema generation covers both stable and unstable versions (v1 and v2) - All 275 tests now pass successfully Co-authored-by: QuantuM --- docs/protocol/draft/schema-v2.mdx | 1027 +++++-------- docs/protocol/draft/schema.mdx | 1027 +++++-------- docs/protocol/schema.mdx | 506 ++++--- schema/meta.json | 2 +- schema/meta.unstable.json | 2 +- schema/meta.v2.unstable.json | 2 +- schema/schema.json | 1279 +++++++++++++--- schema/schema.unstable.json | 2254 +++++++++++++++++++++++------ schema/schema.v2.unstable.json | 2254 +++++++++++++++++++++++------ src/v1/agent.rs | 16 + src/v1/content.rs | 254 ++++ src/v2/agent.rs | 16 + src/v2/content.rs | 355 +++++ src/v2/conversion.rs | 210 +++ 14 files changed, 6626 insertions(+), 2578 deletions(-) diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index b97b07c33..0cbd80e73 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -38,7 +38,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The ID of the authentication method to use. @@ -59,7 +58,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -83,7 +81,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - TextDocumentContentChangeEvent[]} required> The content changes. @@ -119,7 +116,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this notification. @@ -149,7 +145,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Position} required> The current cursor position. @@ -188,7 +183,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The language identifier of the document (e.g., "rust", "python"). @@ -227,7 +221,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this notification. @@ -241,7 +234,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Establishes the connection with a client and negotiates protocol capabilities. This method is called once at the beginning of the connection to: - - Negotiate the protocol version to use - Exchange capability information between client and agent - Determine available authentication methods @@ -268,19 +260,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ClientCapabilities} > Capabilities supported by the client. - Default: `{"auth":{"terminal":false},"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false}` - Implementation | null} > Information about the Client name and version sent to the Agent. Note: in future versions of the protocol, this will be required. - ProtocolVersion} required> The latest protocol version supported by the client. @@ -304,32 +293,27 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` - + - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false},"sessionCapabilities":{}}` Implementation | null} > Information about the Agent name and version sent to the Client. Note: in future versions of the protocol, this will be required. - AuthMethod[]} > Authentication methods supported by the agent. - Default: `[]` - ProtocolVersion} required> The protocol version the client specified if supported by the agent, or the latest protocol version supported by the agent. The client should disconnect, if it doesn't support this version. - ### logout @@ -363,7 +347,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - #### LogoutResponse @@ -384,7 +367,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -408,7 +390,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The ID of the accepted suggestion. @@ -446,7 +427,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the NES session to close. @@ -466,7 +446,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -490,7 +469,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The ID of the rejected suggestion. @@ -525,7 +503,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesRepository | null} > Repository metadata, if the workspace is a git repository. @@ -551,7 +528,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for the newly started NES session. @@ -580,7 +556,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesSuggestContext | null} > Context for the suggestion, included based on agent capabilities. @@ -618,7 +593,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesSuggestion[]} required> The list of suggestions. @@ -651,7 +625,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Provider id to disable. @@ -675,7 +648,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -705,7 +677,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - #### ListProvidersResponse @@ -726,7 +697,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ProviderInfo[]} required> Configurable providers with current routing info suitable for UI display. @@ -761,7 +731,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - LlmProtocol} required> Protocol type for this provider. @@ -795,7 +764,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -806,7 +774,6 @@ Cancels ongoing operations for a session. This is a notification sent by the client to cancel an ongoing prompt turn. Upon receiving this notification, the Agent SHOULD: - - Stop all language model requests as soon as possible - Abort all tool call invocations in progress - Send any pending `session/update` notifications @@ -830,7 +797,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session to cancel operations for. @@ -866,7 +832,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session to close. @@ -886,7 +851,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -927,7 +891,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -939,7 +902,6 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the forked session. - The working directory for this session. @@ -969,7 +931,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -980,13 +941,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Initial model state if supported by the Agent - SessionModeState | null} > Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - SessionId} required> Unique identifier for the newly created forked session. @@ -1017,7 +976,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -1028,7 +986,6 @@ Filter sessions by the exact ordered additional workspace roots. Each path must This filter applies only when the field is present and non-empty. When omitted or empty, no additional-root filter is applied. - Opaque cursor token from a previous response's nextCursor field for cursor-based pagination @@ -1051,7 +1008,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Opaque cursor token. If present, pass this in the next request's cursor parameter @@ -1069,7 +1025,6 @@ Loads an existing session to resume a previous conversation. This method is only available if the agent advertises the `loadSession` capability. The agent should: - - Restore the session context and conversation history - Connect to the specified MCP servers - Stream the entire conversation history back to the client via notifications @@ -1094,7 +1049,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -1106,7 +1060,6 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the loaded session. - The working directory for this session. @@ -1132,7 +1085,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -1143,13 +1095,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Initial model state if supported by the Agent - SessionModeState | null} > Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - @@ -1160,7 +1110,6 @@ Creates a new conversation session with the agent. Sessions represent independent conversation contexts with their own history and state. The agent should: - - Create a new session context - Connect to any specified MCP servers - Return a unique session ID for future requests @@ -1185,7 +1134,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -1197,7 +1145,6 @@ Additional workspace roots for this session. Each path must be absolute. These expand the session's filesystem scope without changing `cwd`, which remains the base for relative paths. When omitted or empty, no additional roots are activated for the new session. - The working directory for this session. Must be an absolute path. @@ -1222,7 +1169,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -1233,19 +1179,16 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Initial model state if supported by the Agent - SessionModeState | null} > Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - SessionId} required> Unique identifier for the created session. Used in all subsequent requests for this conversation. - @@ -1254,7 +1197,6 @@ Used in all subsequent requests for this conversation. Processes a user prompt within a session. This method handles the whole lifecycle of a prompt: - - Receives user messages with optional context (files, images, etc.) - Processes the prompt using language models - Reports language model content and tool calls to the Clients @@ -1282,7 +1224,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - **UNSTABLE** @@ -1294,7 +1235,6 @@ A client-generated unique identifier for this user message. If provided, the Agent SHOULD echo this value as `userMessageId` in the `PromptResponse` to confirm it was recorded. Both clients and agents MUST use UUID format for message IDs. - ContentBlock[]} required> The blocks of content that compose the user's message. @@ -1310,7 +1250,6 @@ The client MAY include referenced pieces of context as either When available, `ContentBlock::Resource` is preferred as it avoids extra round-trips and allows the message to include pieces of context from sources the agent may not have access to. - SessionId} required> The ID of the session to send this user message to @@ -1332,7 +1271,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - StopReason} required> Indicates why the agent stopped processing the turn. @@ -1343,7 +1281,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Token usage for this turn (optional). - **UNSTABLE** @@ -1355,7 +1292,6 @@ The acknowledged user message ID. If the client provided a `messageId` in the `PromptRequest`, the agent echoes it here to confirm it was recorded. If the client did not provide one, the agent MAY assign one and return it here. Absence of this field indicates the agent did not record a message ID. - @@ -1387,7 +1323,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -1399,7 +1334,6 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the resumed session. - The working directory for this session. @@ -1425,7 +1359,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -1436,13 +1369,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Initial model state if supported by the Agent - SessionModeState | null} > Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - @@ -1464,7 +1395,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigId} required> The ID of the configuration option to set. @@ -1499,17 +1429,15 @@ variant. -SessionConfigValueId} - required -> +SessionConfigValueId} required> The value ID. + + #### SetSessionConfigOptionResponse Response to `session/set_config_option` method. @@ -1524,7 +1452,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -1561,7 +1488,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the mode to set. @@ -1584,7 +1510,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1614,7 +1539,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ModelId} required> The ID of the model to set. @@ -1641,7 +1565,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## Client @@ -1651,7 +1574,6 @@ Defines the interface that ACP-compliant clients must implement. Clients are typically code editors (IDEs, text editors) that provide the interface between users and AI agents. They manage the environment, handle user interactions, and control access to resources. - ### elicitation/complete @@ -1679,7 +1601,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ElicitationId} required> The ID of the elicitation that completed. @@ -1716,7 +1637,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - A human-readable message describing what input is needed. @@ -1732,11 +1652,7 @@ Form-based elicitation where the client renders a form from the provided schema. The discriminator value. Must be `"form"`. -ElicitationSchema} - required -> +ElicitationSchema} required> A JSON Schema describing the form fields to present to the user. @@ -1748,11 +1664,7 @@ URL-based elicitation where the client directs the user to a URL. -ElicitationId} - required -> +ElicitationId} required> The unique identifier for this elicitation. @@ -1765,6 +1677,8 @@ URL-based elicitation where the client directs the user to a URL. + + #### CreateElicitationResponse **UNSTABLE** @@ -1783,7 +1697,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - **Variants:** @@ -1796,7 +1709,7 @@ The user accepted and provided content. The discriminator value. Must be `"accept"`. - + The user-provided content, if any, as an object matching the requested schema. @@ -1827,6 +1740,8 @@ The elicitation was cancelled. + + ### fs/read_text_file @@ -1853,19 +1768,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of lines to read. - Minimum: `0` - Line number to start reading from (1-based). - Minimum: `0` - Absolute path to the file to read. @@ -1888,7 +1800,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1919,7 +1830,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The text content to write to the file. @@ -1945,7 +1855,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1980,7 +1889,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOption[]} required> Available permission options for the user to choose from. @@ -2006,7 +1914,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - RequestPermissionOutcome} required> The user's decision on the permission request. @@ -2045,7 +1952,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session this update pertains to. @@ -2086,7 +1992,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > Array of command arguments. @@ -2111,7 +2016,6 @@ string output, even if this means the retained output is slightly less than the specified limit. - Minimum: `0` - SessionId} required> The session ID for this request. @@ -2131,7 +2035,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The unique identifier for the created terminal. @@ -2167,7 +2070,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -2190,7 +2092,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -2217,7 +2118,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -2240,7 +2140,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - TerminalExitStatus | null} > Exit status if the command has completed. @@ -2282,7 +2181,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -2305,7 +2203,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -2329,7 +2226,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -2352,13 +2248,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The process exit code (may be null if terminated by signal). - Minimum: `0` - The signal that terminated the process (may be null if exited normally). @@ -2374,7 +2268,6 @@ agents. For example if the implementation uses a single threaded synchronous programming language then there is little it can do to react to a `$/cancel_request` notification. If an agent or client receives notifications starting with '$/' it is free to ignore the notification. - ### $/cancel_request @@ -2392,9 +2285,8 @@ Upon receiving this notification, the receiver: 1. MUST cancel the corresponding request activity and all nested activities 2. MAY send any pending notifications. 3. MUST send one of these responses for the original request: - -- Valid response with appropriate data (partial results or cancellation marker) -- Error response with code `-32800` (Cancelled) + - Valid response with appropriate data (partial results or cancellation marker) + - Error response with code `-32800` (Cancelled) See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/cancellation) @@ -2418,7 +2310,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - RequestId} required> The ID of the request to cancel. @@ -2442,13 +2333,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - LogoutCapabilities | null} > Whether the agent supports the logout method. By supplying `\{\}` it means that the agent supports the logout method. - ## AgentCapabilities @@ -2470,7 +2359,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AgentAuthCapabilities} > **UNSTABLE** @@ -2480,19 +2368,16 @@ This capability is not part of the spec yet, and may be removed or changed at an Authentication-related capabilities supported by the agent. - Default: `{}` - Whether the agent supports `session/load`. - Default: `false` - McpCapabilities} > MCP capabilities supported by the agent. - Default: `{"http":false,"sse":false}` - NesCapabilities | null} > **UNSTABLE** @@ -2500,7 +2385,6 @@ Authentication-related capabilities supported by the agent. This capability is not part of the spec yet, and may be removed or changed at any point. NES (Next Edit Suggestions) capabilities supported by the agent. - PositionEncodingKind | null} > **UNSTABLE** @@ -2508,13 +2392,11 @@ NES (Next Edit Suggestions) capabilities supported by the agent. This capability is not part of the spec yet, and may be removed or changed at any point. The position encoding selected by the agent from the client's supported encodings. - PromptCapabilities} > Prompt capabilities supported by the agent. - - Default: `{"audio":false,"embeddedContext":false,"image":false}` - + - Default: `{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false}` ProvidersCapabilities | null} > **UNSTABLE** @@ -2524,12 +2406,10 @@ This capability is not part of the spec yet, and may be removed or changed at an Provider configuration capabilities supported by the agent. By supplying `\{\}` it means that the agent supports provider configuration methods. - SessionCapabilities} > - Default: `{}` - ## Annotations @@ -2546,7 +2426,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Role[] | null} > @@ -2569,7 +2448,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -2600,7 +2478,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Whether the client supports `terminal` authentication methods. @@ -2608,7 +2485,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte When `true`, the agent may include `terminal` entries in its authentication methods. - Default: `false` - ## AuthEnvVar @@ -2629,7 +2505,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable label for this variable, displayed in client UI. @@ -2643,7 +2518,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Defaults to `false`. - Default: `false` - Whether this value is a secret (e.g. API key, token). @@ -2652,7 +2526,6 @@ Clients should use a password-style input for secret vars. Defaults to `true`. - Default: `true` - ## AuthMethod @@ -2679,7 +2552,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -2718,7 +2590,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > Additional arguments to pass when running the agent binary for terminal auth. @@ -2755,7 +2626,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -2770,6 +2640,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## AuthMethodAgent Agent handles authentication itself. @@ -2786,7 +2658,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -2818,7 +2689,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -2856,7 +2726,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > Additional arguments to pass when running the agent binary for terminal auth. @@ -2888,7 +2757,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable description of what the command does. @@ -2916,7 +2784,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - A hint to display when the input hasn't been provided yet @@ -2936,7 +2803,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AvailableCommand[]} required> Commands the agent can execute @@ -2956,7 +2822,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -2973,13 +2838,13 @@ Schema for boolean properties in an elicitation form. **Properties:** - + Default value. - + Human-readable description. - + Optional title for the property. @@ -3002,7 +2867,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AuthCapabilities} > **UNSTABLE** @@ -3014,7 +2878,6 @@ Determines which authentication method types the agent may include in its `InitializeResponse`. - Default: `{"terminal":false}` - ElicitationCapabilities | null} > **UNSTABLE** @@ -3023,14 +2886,12 @@ This capability is not part of the spec yet, and may be removed or changed at an Elicitation capabilities supported by the client. Determines which elicitation modes the agent may use. - FileSystemCapabilities} > File system capabilities supported by the client. Determines which file operations the agent can request. - Default: `{"readTextFile":false,"writeTextFile":false}` - ClientNesCapabilities | null} > **UNSTABLE** @@ -3038,7 +2899,6 @@ Determines which file operations the agent can request. This capability is not part of the spec yet, and may be removed or changed at any point. NES (Next Edit Suggestions) capabilities supported by the client. - PositionEncodingKind[]} > **UNSTABLE** @@ -3046,13 +2906,11 @@ NES (Next Edit Suggestions) capabilities supported by the client. This capability is not part of the spec yet, and may be removed or changed at any point. The position encodings supported by the client, in order of preference. - Whether the Client support all `terminal/*` methods. - Default: `false` - ## ClientNesCapabilities @@ -3069,7 +2927,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesJumpCapabilities | null} > Whether the client supports the `jump` suggestion kind. @@ -3095,7 +2952,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -3115,7 +2971,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> The actual content block. @@ -3129,7 +2984,6 @@ They provide a structured way to handle various types of user-facing content—w it's text from language models, images for analysis, or embedded resources for context. Content blocks appear in: - - User prompts sent via `session/prompt` - Language model output streamed through `session/update` notifications - Progress updates and results from tool calls @@ -3155,7 +3009,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3181,7 +3034,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3211,7 +3063,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3239,7 +3090,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3277,7 +3127,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3290,6 +3139,41 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +A template that supports variable substitution using \{\{variable_name\}\} syntax. + +Allows dynamic content generation by substituting variables into template strings. +Variables are resolved at processing time and can include values from context, +user input, or system state. + +Requires the `promptVariables` prompt capability when included in prompts. + + + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + + + The discriminator value. Must be `"prompt_template"`. + +PromptVariable[]} required> + Variables available for substitution in this template. + + + + + + + ## ContentChunk A streamed item of content @@ -3304,7 +3188,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -3319,7 +3202,6 @@ A unique identifier for the message this chunk belongs to. All chunks belonging to the same message share the same `messageId`. A change in `messageId` indicates a new message has started. Both clients and agents MUST use UUID format for message IDs. - ## Cost @@ -3357,7 +3239,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the current mode @@ -3381,7 +3262,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The new content after modification. @@ -3405,7 +3285,7 @@ The user accepted the elicitation and provided content. **Properties:** - + The user-provided content, if any, as an object matching the requested schema. @@ -3427,7 +3307,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ElicitationFormCapabilities | null} > Whether the client supports form-based elicitation. @@ -3441,25 +3320,27 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte **Type:** Union - {""} +{""} - {""} +{""} - {""} +{""} - {""} +{""} - {""} +{""} + + ## ElicitationFormCapabilities **UNSTABLE** @@ -3478,7 +3359,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## ElicitationFormMode @@ -3493,11 +3373,7 @@ Form-based elicitation mode where the client renders a form from the provided sc **Shared properties:** -ElicitationSchema} - required -> +ElicitationSchema} required> A JSON Schema describing the form fields to present to the user. @@ -3508,24 +3384,10 @@ Tied to a session, optionally to a specific tool call within that session. -SessionId} - required -> +SessionId} required> The session this elicitation is tied to. - - - ToolCallId - - | null - - } -> +ToolCallId | null} > Optional tool call within the session. @@ -3538,17 +3400,15 @@ Tied to a specific JSON-RPC request outside of a session -RequestId} - required -> +RequestId} required> The request this elicitation is tied to. + + ## ElicitationId **UNSTABLE** @@ -3590,13 +3450,11 @@ String property (or single-select enum when `enum`/`oneOf` is set). Maximum string length. - Minimum: `0` - Minimum string length. - Minimum: `0` - EnumOption[] | null} > Titled enum options for titled single-select enums. @@ -3619,19 +3477,19 @@ Number (floating-point) property. - + Default value. - + Human-readable description. - + Maximum value (inclusive). - + Minimum value (inclusive). - + Optional title for the property. @@ -3646,19 +3504,19 @@ Integer property. - + Default value. - + Human-readable description. - + Maximum value (inclusive). - + Minimum value (inclusive). - + Optional title for the property. @@ -3673,13 +3531,13 @@ Boolean property. - + Default value. - + Human-readable description. - + Optional title for the property. @@ -3707,13 +3565,11 @@ Multi-select array property. Maximum number of items to select. - Minimum: `0` - Minimum number of items to select. - Minimum: `0` - Optional title for the property. @@ -3725,6 +3581,8 @@ Multi-select array property. + + ## ElicitationRequestScope **UNSTABLE** @@ -3738,11 +3596,7 @@ Request-scoped elicitation, tied to a specific JSON-RPC request outside of a ses **Properties:** -RequestId} - required -> +RequestId} required> The request this elicitation is tied to. @@ -3764,7 +3618,6 @@ as required by the elicitation specification. Property definitions (must be primitive types). - Default: `{}` - <>"string"[] | null} > List of required property names. @@ -3776,7 +3629,6 @@ as required by the elicitation specification. Type discriminator. Always `"object"`. - Default: `"object"` - ## ElicitationSchemaType @@ -3786,9 +3638,11 @@ Type discriminator for elicitation schemas. **Type:** Union - Object schema type. +Object schema type. + + ## ElicitationSessionScope **UNSTABLE** @@ -3805,24 +3659,10 @@ during a tool call and needs to redirect it to the user. **Properties:** -SessionId} - required -> +SessionId} required> The session this elicitation is tied to. - - - ToolCallId - - | null - - } -> +ToolCallId | null} > Optional tool call within the session. @@ -3833,9 +3673,11 @@ Items definition for untitled multi-select enum properties. **Type:** Union - String schema type. +String schema type. + + ## ElicitationUrlCapabilities **UNSTABLE** @@ -3854,7 +3696,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## ElicitationUrlMode @@ -3869,11 +3710,7 @@ URL-based elicitation mode where the client directs the user to a URL. **Shared properties:** -ElicitationId} - required -> +ElicitationId} required> The unique identifier for this elicitation. @@ -3887,24 +3724,10 @@ Tied to a session, optionally to a specific tool call within that session. -SessionId} - required -> +SessionId} required> The session this elicitation is tied to. - - - ToolCallId - - | null - - } -> +ToolCallId | null} > Optional tool call within the session. @@ -3917,17 +3740,15 @@ Tied to a specific JSON-RPC request outside of a session -RequestId} - required -> +RequestId} required> The request this elicitation is tied to. + + ## EmbeddedResource The contents of a resource, embedded into a prompt or tool call result. @@ -3942,7 +3763,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3966,7 +3786,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -3989,7 +3808,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -4001,6 +3819,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## EnumOption A titled enum option with a const value and human-readable title. @@ -4030,7 +3850,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The name of the environment variable. @@ -4053,17 +3872,16 @@ See protocol docs: [JSON-RPC Error Object](https://www.jsonrpc.org/specification **Properties:** ErrorCode} required> - A number indicating the error type that occurred. This must be an integer as - defined in the JSON-RPC specification. + A number indicating the error type that occurred. +This must be an integer as defined in the JSON-RPC specification. - - Optional primitive or structured value that contains additional information - about the error. This may include debugging information or context-specific - details. + + Optional primitive or structured value that contains additional information about the error. +This may include debugging information or context-specific details. - A string providing a short description of the error. The message should be - limited to a concise single sentence. + A string providing a short description of the error. +The message should be limited to a concise single sentence. ## ErrorCode @@ -4076,25 +3894,25 @@ and use the reserved range (-32000 to -32099) for protocol-specific errors. **Type:** Union - **Parse error**: Invalid JSON was received by the server. An error occurred on - the server while parsing the JSON text. +**Parse error**: Invalid JSON was received by the server. +An error occurred on the server while parsing the JSON text. - **Invalid request**: The JSON sent is not a valid Request object. +**Invalid request**: The JSON sent is not a valid Request object. - **Method not found**: The method does not exist or is not available. +**Method not found**: The method does not exist or is not available. - **Invalid params**: Invalid method parameter(s). +**Invalid params**: Invalid method parameter(s). - **Internal error**: Internal JSON-RPC error. Reserved for - implementation-defined server errors. +**Internal error**: Internal JSON-RPC error. +Reserved for implementation-defined server errors. @@ -4104,16 +3922,14 @@ This capability is not part of the spec yet, and may be removed or changed at an Execution of the method was aborted either due to a cancellation request from the caller or because of resource constraints or shutdown. - - **Authentication required**: Authentication is required before this operation - can be performed. +**Authentication required**: Authentication is required before this operation can be performed. - **Resource not found**: A given resource, such as a file, was not found. +**Resource not found**: A given resource, such as a file, was not found. @@ -4122,13 +3938,14 @@ because of resource constraints or shutdown. This capability is not part of the spec yet, and may be removed or changed at any point. The agent requires user input via a URL-based elicitation before it can proceed. - - Other undefined error code. +Other undefined error code. + + ## ExtNotification Allows the Agent to send an arbitrary notification that is not part of the ACP spec. @@ -4137,6 +3954,7 @@ while maintaining protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## ExtRequest Allows for sending an arbitrary request that is not part of the ACP spec. @@ -4145,6 +3963,7 @@ protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## ExtResponse Allows for sending an arbitrary response to an `ExtRequest` that is not part of the ACP spec. @@ -4153,6 +3972,7 @@ protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## FileSystemCapabilities File system capabilities that a client may support. @@ -4169,19 +3989,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Whether the Client supports `fs/read_text_file` requests. - Default: `false` - Whether the Client supports `fs/write_text_file` requests. - Default: `false` - ## HttpHeader @@ -4198,7 +4015,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The name of the HTTP header. @@ -4221,7 +4037,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -4248,7 +4063,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Intended for programmatic or logical use, but can be used as a display @@ -4259,7 +4073,6 @@ name fallback if title isn’t present. and easily understood. If not provided, the name should be used for display. - Version of the implementation. Can be displayed to the user or used @@ -4274,19 +4087,19 @@ Schema for integer properties in an elicitation form. **Properties:** - + Default value. - + Human-readable description. - + Maximum value (inclusive). - + Minimum value (inclusive). - + Optional title for the property. @@ -4306,29 +4119,31 @@ Protocol names that do not begin with `_` are reserved for the ACP spec. **Type:** Union - Anthropic API protocol. +Anthropic API protocol. - OpenAI API protocol. +OpenAI API protocol. - Azure OpenAI API protocol. +Azure OpenAI API protocol. - Google Vertex AI API protocol. +Google Vertex AI API protocol. - AWS Bedrock API protocol. +AWS Bedrock API protocol. - Unknown or custom protocol. +Unknown or custom protocol. + + ## LogoutCapabilities **UNSTABLE** @@ -4349,7 +4164,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## McpCapabilities @@ -4366,19 +4180,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Agent supports `McpServer::Http`. - Default: `false` - Agent supports `McpServer::Sse`. - Default: `false` - ## McpServer @@ -4405,7 +4216,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -4436,7 +4246,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -4467,7 +4276,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} required> Command-line arguments to pass to the MCP server. @@ -4485,6 +4293,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## McpServerHttp HTTP transport configuration for MCP. @@ -4499,7 +4309,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -4525,7 +4334,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -4551,7 +4359,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} required> Command-line arguments to pass to the MCP server. @@ -4594,7 +4401,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description of the model. @@ -4617,23 +4423,10 @@ Untitled multi-select items with plain string values. - - "string" - [] - - } - required -> +"string"[]} required> Allowed enum values. -ElicitationStringType} - required -> +ElicitationStringType} required> Item type discriminator. Must be `"string"`. @@ -4645,17 +4438,15 @@ Titled multi-select items with human-readable labels. -EnumOption[]} - required -> +EnumOption[]} required> Titled enum options. + + ## MultiSelectPropertySchema Schema for multi-select (array) properties in an elicitation form. @@ -4677,13 +4468,11 @@ Schema for multi-select (array) properties in an elicitation form. Maximum number of items to select. - Minimum: `0` - Minimum number of items to select. - Minimum: `0` - Optional title for the property. @@ -4703,7 +4492,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesContextCapabilities | null} > Context the agent wants attached to each suggestion request. @@ -4726,7 +4514,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesDiagnosticsCapabilities | null} > Whether the agent wants diagnostics context. @@ -4761,11 +4548,7 @@ A diagnostic (error, warning, etc.). Range} required> The range of the diagnostic. -NesDiagnosticSeverity} - required -> +NesDiagnosticSeverity} required> The severity of the diagnostic. @@ -4779,21 +4562,23 @@ Severity of a diagnostic. **Type:** Union - An error. +An error. - A warning. +A warning. - An informational message. +An informational message. - A hint. +A hint. + + ## NesDiagnosticsCapabilities Capabilities for diagnostics context. @@ -4808,7 +4593,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentDidChangeCapabilities @@ -4825,7 +4609,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - TextDocumentSyncKind} required> The sync kind the agent wants: `"full"` or `"incremental"`. @@ -4845,7 +4628,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentDidFocusCapabilities @@ -4862,7 +4644,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentDidOpenCapabilities @@ -4879,7 +4660,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentDidSaveCapabilities @@ -4896,7 +4676,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentEventCapabilities @@ -4913,7 +4692,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesDocumentDidChangeCapabilities | null} > Whether the agent wants `document/didChange` events, and the sync kind. @@ -4945,13 +4723,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of edit history entries the agent can use. - Minimum: `0` - ## NesEditHistoryEntry @@ -4977,24 +4753,10 @@ A text edit suggestion. **Properties:** - - - Position - - | null - - } -> +Position | null} > Optional suggested cursor position after applying edits. -NesTextEdit[]} - required -> +NesTextEdit[]} required> The text edits to apply. @@ -5018,7 +4780,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesDocumentEventCapabilities | null} > Document event capabilities. @@ -5036,13 +4797,11 @@ A code excerpt from a file. The end line of the excerpt (zero-based). - Minimum: `0` - The start line of the excerpt (zero-based). - Minimum: `0` - The text content of the excerpt. @@ -5062,7 +4821,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesJumpSuggestion @@ -5098,7 +4856,6 @@ An open file in the editor. Timestamp in milliseconds since epoch of when the file was last focused. - Minimum: `0` - The URI of the file. @@ -5121,7 +4878,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesRecentFile @@ -5156,13 +4912,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of recent files the agent can use. - Minimum: `0` - ## NesRejectReason @@ -5172,21 +4926,23 @@ The reason a suggestion was rejected. **Type:** Union - The user explicitly dismissed the suggestion. +The user explicitly dismissed the suggestion. - The suggestion was shown but the user continued editing without interacting. +The suggestion was shown but the user continued editing without interacting. - The suggestion was superseded by a newer suggestion. +The suggestion was superseded by a newer suggestion. - The request was cancelled before the agent returned a response. +The request was cancelled before the agent returned a response. + + ## NesRelatedSnippet A related code snippet from a file. @@ -5195,11 +4951,7 @@ A related code snippet from a file. **Properties:** -NesExcerpt[]} - required -> +NesExcerpt[]} required> The code excerpts. @@ -5220,7 +4972,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesRenameCapabilities @@ -5237,7 +4988,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesRenameSuggestion @@ -5293,7 +5043,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesSearchAndReplaceSuggestion @@ -5307,7 +5056,7 @@ A search-and-replace suggestion. Unique identifier for accept/reject tracking. - + Whether `search` is a regular expression. Defaults to `false`. @@ -5334,7 +5083,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesDiagnostic[] | null} > Current diagnostics (errors, warnings). @@ -5366,24 +5114,10 @@ A text edit suggestion. - - - Position - - | null - - } -> +Position | null} > Optional suggested cursor position after applying edits. -NesTextEdit[]} - required -> +NesTextEdit[]} required> The text edits to apply. @@ -5452,7 +5186,7 @@ A search-and-replace suggestion. Unique identifier for accept/reject tracking. - + Whether `search` is a regular expression. Defaults to `false`. @@ -5471,6 +5205,8 @@ A search-and-replace suggestion. + + ## NesTextEdit A text edit within a suggestion. @@ -5493,17 +5229,19 @@ What triggered the suggestion request. **Type:** Union - Triggered by user typing or cursor movement. +Triggered by user typing or cursor movement. - Triggered by a diagnostic appearing at or near the cursor. +Triggered by a diagnostic appearing at or near the cursor. - Triggered by an explicit user action (keyboard shortcut). +Triggered by an explicit user action (keyboard shortcut). + + ## NesUserAction A user action (typing, cursor movement, etc.). @@ -5522,7 +5260,6 @@ A user action (typing, cursor movement, etc.). Timestamp in milliseconds since epoch. - Minimum: `0` - The URI of the file where the action occurred. @@ -5542,13 +5279,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of user actions the agent can use. - Minimum: `0` - ## NumberPropertySchema @@ -5559,19 +5294,19 @@ Schema for number (floating-point) properties in an elicitation form. **Properties:** - + Default value. - + Human-readable description. - + Maximum value (inclusive). - + Minimum value (inclusive). - + Optional title for the property. @@ -5589,7 +5324,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionKind} required> Hint about the nature of this permission option. @@ -5616,21 +5350,23 @@ Helps clients choose appropriate icons and UI treatment. **Type:** Union - Allow this operation only this time. +Allow this operation only this time. - Allow this operation and remember the choice. +Allow this operation and remember the choice. - Reject this operation only this time. +Reject this operation only this time. - Reject this operation and remember the choice. +Reject this operation and remember the choice. + + ## Plan An execution plan for accomplishing complex tasks. @@ -5651,14 +5387,12 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PlanEntry[]} required> The list of tasks to be accomplished. When updating a plan, the agent must send a complete list of all entries with their current status. The client replaces the entire plan with each update. - ## PlanEntry @@ -5679,7 +5413,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable description of what this task aims to accomplish. @@ -5703,17 +5436,19 @@ See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent **Type:** Union - High priority task - critical to the overall goal. +High priority task - critical to the overall goal. - Medium priority task - important but not critical. +Medium priority task - important but not critical. - Low priority task - nice to have but not essential. +Low priority task - nice to have but not essential. + + ## PlanEntryStatus Status of a plan entry in the execution flow. @@ -5724,17 +5459,19 @@ See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent **Type:** Union - The task has not started yet. +The task has not started yet. - The task is currently being worked on. +The task is currently being worked on. - The task has been successfully completed. +The task has been successfully completed. + + ## Position A zero-based position in a text document. @@ -5749,13 +5486,11 @@ The meaning of `character` depends on the negotiated position encoding. Zero-based character offset (encoding-dependent). - Minimum: `0` - Zero-based line number. - Minimum: `0` - ## PositionEncodingKind @@ -5767,17 +5502,19 @@ Follows the same conventions as LSP 3.17. The default is UTF-16. **Type:** Union - Character offsets count UTF-16 code units. This is the default. +Character offsets count UTF-16 code units. This is the default. - Character offsets count Unicode code points. +Character offsets count Unicode code points. - Character offsets count UTF-8 code units (bytes). +Character offsets count UTF-8 code units (bytes). + + ## PromptCapabilities Prompt capabilities supported by the agent in `session/prompt` requests. @@ -5803,13 +5540,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Agent supports `ContentBlock::Audio`. - Default: `false` - Agent supports embedded context in `session/prompt` requests. @@ -5818,15 +5553,139 @@ When enabled, the Client is allowed to include `ContentBlock::Resource` in prompt requests for pieces of context that are referenced in the message. - Default: `false` - Agent supports `ContentBlock::Image`. - Default: `false` + + + Agent supports prompt variables and templates in `session/prompt` requests. + +When enabled, the Client is allowed to include `ContentBlock::PromptTemplate` +in prompt requests with variable substitution support. + + - Default: `false` + + +## PromptTemplateContent + +A template content block that supports variable substitution. + +Templates use \{\{variable_name\}\} syntax for variable placeholders that can be +substituted with actual values at processing time. This enables dynamic content +generation and reusable prompt templates. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + +PromptVariable[]} required> + Variables available for substitution in this template. + + +## PromptVariable + +A variable that can be substituted in a prompt template. + +Variables define named placeholders that can be replaced with actual values +during template processing. They can include metadata about expected types, +descriptions for user interfaces, and validation constraints. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + Default value to use if no value is provided. + + + Human-readable description of this variable. + + + The variable name (used in \{\{variable_name\}\} placeholders). + + + Whether this variable is required for template processing. + + - Default: `false` + +PromptVariableType | null} > + The expected type of this variable's value. + + + The current value of the variable (if set). + +## PromptVariableType + +The expected type of a prompt variable's value. + +This helps clients provide appropriate input interfaces and validation +for prompt variables. + +**Type:** Union + + +A string value (default if not specified). + + + +A numeric value (integer or float). + +A boolean value (true/false). + + + +A date/time value in ISO 8601 format. + + + +A URL or URI reference. + + + +An email address. + + + +A multiline text value. + + + +A value selected from a predefined list (enum-like). + + + + + + + + + + + ## ProtocolVersion Protocol version identifier. @@ -5836,10 +5695,10 @@ Non-breaking changes should be introduced via capabilities. **Type:** `integer (uint16)` -| Constraint | Value | -| ---------- | ------- | -| Minimum | `0` | -| Maximum | `65535` | +| Constraint | Value | +| ---------- | ----- | +| Minimum | `0` | +| Maximum | `65535` | ## ProviderCurrentConfig @@ -5853,11 +5712,7 @@ Current effective non-secret routing configuration for a provider. **Properties:** -LlmProtocol} - required -> +LlmProtocol} required> Protocol currently used by this provider. @@ -5882,7 +5737,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ProviderCurrentConfig | null} > Current effective non-secret routing config. @@ -5919,7 +5773,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## Range @@ -5952,17 +5805,19 @@ The Server MUST reply with the same value in the Response object if included. Th **Type:** Union - {""} +{""} - {""} +{""} - {""} +{""} + + ## RequestPermissionOutcome The outcome of a permission request. @@ -5998,7 +5853,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionId} required> The ID of the option the user selected. @@ -6010,6 +5864,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## ResourceLink A resource that the server is capable of reading, included in a prompt or tool call result. @@ -6024,7 +5880,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -6047,10 +5902,11 @@ The sender or recipient of messages and data in a conversation. **Type:** Enumeration -| Value | -| ------------- | +| Value | +| ----- | | `"assistant"` | -| `"user"` | +| `"user"` | + ## SelectedPermissionOutcome @@ -6066,7 +5922,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionId} required> The ID of the option the user selected. @@ -6093,7 +5948,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionCapabilities @@ -6118,7 +5972,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionAdditionalDirectoriesCapabilities | null} > **UNSTABLE** @@ -6126,7 +5979,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. - SessionCloseCapabilities | null} > Whether the agent supports `session/close`. @@ -6137,7 +5989,6 @@ Whether the agent supports `additionalDirectories` on supported session lifecycl This capability is not part of the spec yet, and may be removed or changed at any point. Whether the agent supports `session/fork`. - SessionListCapabilities | null} > Whether the agent supports `session/list`. @@ -6162,7 +6013,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionConfigBoolean @@ -6207,7 +6057,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOptionCategory | null} > Optional semantic category for this option (UX only). @@ -6229,18 +6078,10 @@ Single-value selector (dropdown). -SessionConfigValueId} - required -> +SessionConfigValueId} required> The currently selected value. -SessionConfigSelectOptions} - required -> +SessionConfigSelectOptions} required> The set of selectable options. @@ -6269,6 +6110,8 @@ Boolean on/off toggle. + + ## SessionConfigOptionCategory Semantic category for a session configuration option. @@ -6284,21 +6127,23 @@ Category names that do not begin with `_` are reserved for the ACP spec. **Type:** Union - Session mode selector. +Session mode selector. - Model selector. +Model selector. - Thought/reasoning level selector. +Thought/reasoning level selector. - Unknown / uncategorized selector. +Unknown / uncategorized selector. + + ## SessionConfigSelect A single-value selector (dropdown) session configuration option payload. @@ -6307,18 +6152,10 @@ A single-value selector (dropdown) session configuration option payload. **Properties:** -SessionConfigValueId} - required -> +SessionConfigValueId} required> The currently selected value. -SessionConfigSelectOptions} - required -> +SessionConfigSelectOptions} required> The set of selectable options. @@ -6336,7 +6173,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigGroupId} required> Unique identifier for this group. @@ -6362,7 +6198,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description for this option value. @@ -6381,13 +6216,15 @@ Possible values for a session configuration option. **Type:** Union - A flat list of options with no grouping. +A flat list of options with no grouping. - A list of options grouped under headers. +A list of options grouped under headers. + + ## SessionConfigValueId Unique identifier for a session configuration option value. @@ -6414,7 +6251,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionId @@ -6442,7 +6278,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -6452,7 +6287,6 @@ This capability is not part of the spec yet, and may be removed or changed at an Authoritative ordered additional workspace roots for this session. Each path must be absolute. When omitted or empty, there are no additional roots for the session. - The working directory for this session. Must be an absolute path. @@ -6484,7 +6318,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable title for the session. Set to null to clear. @@ -6509,7 +6342,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionMode @@ -6528,7 +6360,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -6557,7 +6388,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionMode[]} required> The set of modes that the Agent can operate in @@ -6584,7 +6414,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ModelInfo[]} required> The set of models that the Agent can use @@ -6609,7 +6438,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionUpdate @@ -6633,7 +6461,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -6648,7 +6475,6 @@ A unique identifier for the message this chunk belongs to. All chunks belonging to the same message share the same `messageId`. A change in `messageId` indicates a new message has started. Both clients and agents MUST use UUID format for message IDs. - The discriminator value. Must be `"user_message_chunk"`. @@ -6668,7 +6494,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -6683,7 +6508,6 @@ A unique identifier for the message this chunk belongs to. All chunks belonging to the same message share the same `messageId`. A change in `messageId` indicates a new message has started. Both clients and agents MUST use UUID format for message IDs. - The discriminator value. Must be `"agent_message_chunk"`. @@ -6703,7 +6527,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -6718,7 +6541,6 @@ A unique identifier for the message this chunk belongs to. All chunks belonging to the same message share the same `messageId`. A change in `messageId` indicates a new message has started. Both clients and agents MUST use UUID format for message IDs. - The discriminator value. Must be `"agent_thought_chunk"`. @@ -6738,7 +6560,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[]} > Content produced by the tool call. @@ -6784,7 +6605,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[] | null} > Replace the content collection. @@ -6829,14 +6649,12 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PlanEntry[]} required> The list of tasks to be accomplished. When updating a plan, the agent must send a complete list of all entries with their current status. The client replaces the entire plan with each update. - The discriminator value. Must be `"plan"`. @@ -6856,7 +6674,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AvailableCommand[]} required> Commands the agent can execute @@ -6881,7 +6698,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the current mode @@ -6904,7 +6720,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -6927,7 +6742,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The discriminator value. Must be `"session_info_update"`. @@ -6957,7 +6771,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Cost | null} > Cumulative session cost (optional). @@ -6969,18 +6782,18 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Total context window size in tokens. - Minimum: `0` - Tokens currently in context. - Minimum: `0` - + + ## StopReason Reasons why an agent stops processing a prompt turn. @@ -6990,22 +6803,22 @@ See protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/promp **Type:** Union - The turn ended successfully. +The turn ended successfully. - The turn ended because the agent reached the maximum number of tokens. +The turn ended because the agent reached the maximum number of tokens. - The turn ended because the agent reached the maximum number of allowed agent - requests between user turns. +The turn ended because the agent reached the maximum number of allowed +agent requests between user turns. - The turn ended because the agent refused to continue. The user prompt and - everything that comes after it won't be included in the next prompt, so this - should be reflected in the UI. +The turn ended because the agent refused to continue. The user prompt +and everything that comes after it won't be included in the next +prompt, so this should be reflected in the UI. @@ -7015,9 +6828,10 @@ This stop reason MUST be returned when the client sends a `session/cancel` notification, even if the cancellation causes exceptions in underlying operations. Agents should catch these exceptions and return this semantically meaningful response to confirm successful cancellation. - + + ## StringFormat String format types for string properties in elicitation schemas. @@ -7025,21 +6839,23 @@ String format types for string properties in elicitation schemas. **Type:** Union - Email address format. +Email address format. - URI format. +URI format. - Date format (YYYY-MM-DD). +Date format (YYYY-MM-DD). - Date-time format (ISO 8601). +Date-time format (ISO 8601). + + ## StringPropertySchema Schema for string properties in an elicitation form. @@ -7067,13 +6883,11 @@ with `"type": "string"`. Maximum string length. - Minimum: `0` - Minimum string length. - Minimum: `0` - EnumOption[] | null} > Titled enum options for titled single-select enums. @@ -7103,7 +6917,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -7122,13 +6935,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The process exit code (may be null if terminated by signal). - Minimum: `0` - The signal that terminated the process (may be null if exited normally). @@ -7148,7 +6959,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -7166,19 +6976,8 @@ When `range` is `Some`, `text` replaces the given range. **Properties:** - - - Range - - | null - - } -> - The range of the document that changed. If `None`, the entire content is - replaced. +Range | null} > + The range of the document that changed. If `None`, the entire content is replaced. The new text for the range, or the full document content if `range` is `None`. @@ -7191,13 +6990,15 @@ How the agent wants document changes delivered. **Type:** Union - Client sends the entire file content on each change. +Client sends the entire file content on each change. - Client sends only the changed ranges. +Client sends only the changed ranges. + + ## TextResourceContents Text-based resource contents. @@ -7212,7 +7013,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -7229,11 +7029,7 @@ Items definition for titled multi-select enum properties. **Properties:** -EnumOption[]} - required -> +EnumOption[]} required> Titled enum options. @@ -7256,7 +7052,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[]} > Content produced by the tool call. @@ -7307,7 +7102,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> The actual content block. @@ -7330,7 +7124,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The new content after modification. @@ -7363,7 +7156,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -7374,6 +7166,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## ToolCallId Unique identifier for a tool call within a session. @@ -7399,13 +7193,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional line number within the file. - Minimum: `0` - The file path being accessed or modified. @@ -7422,22 +7214,24 @@ See protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls# **Type:** Union - The tool call hasn't started running yet because the input is either streaming - or we're awaiting approval. +The tool call hasn't started running yet because the input is either +streaming or we're awaiting approval. - The tool call is currently running. +The tool call is currently running. - The tool call completed successfully. +The tool call completed successfully. - The tool call failed with an error. +The tool call failed with an error. + + ## ToolCallUpdate An update to an existing tool call. @@ -7457,7 +7251,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[] | null} > Replace the content collection. @@ -7496,45 +7289,47 @@ See protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-call **Type:** Union - Reading files or data. +Reading files or data. - Modifying files or content. +Modifying files or content. - Removing files or data. +Removing files or data. - Moving or renaming files. +Moving or renaming files. - Searching for information. +Searching for information. - Running commands or code. +Running commands or code. - Internal reasoning or planning. +Internal reasoning or planning. - Retrieving external data. +Retrieving external data. - Switching the current session mode. +Switching the current session mode. - Other tool types (default). +Other tool types (default). + + ## UnstructuredCommandInput All text that was typed after the command name is provided as input. @@ -7549,7 +7344,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - A hint to display when the input hasn't been provided yet @@ -7563,23 +7357,10 @@ Items definition for untitled multi-select enum properties. **Properties:** - - "string" - [] - - } - required -> +"string"[]} required> Allowed enum values. -ElicitationStringType} - required -> +ElicitationStringType} required> Item type discriminator. Must be `"string"`. @@ -7599,37 +7380,31 @@ Token usage information for a prompt turn. Total cache read tokens. - Minimum: `0` - Total cache write tokens. - Minimum: `0` - Total input tokens across all turns. - Minimum: `0` - Total output tokens across all turns. - Minimum: `0` - Total thought/reasoning tokens - Minimum: `0` - Sum of all token types across session. - Minimum: `0` - ## UsageUpdate @@ -7650,7 +7425,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Cost | null} > Cumulative session cost (optional). @@ -7659,13 +7433,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Total context window size in tokens. - Minimum: `0` - Tokens currently in context. - Minimum: `0` - ## WorkspaceFolder @@ -7682,3 +7454,4 @@ A workspace folder. The URI of the folder. + diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index b97b07c33..0cbd80e73 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -38,7 +38,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The ID of the authentication method to use. @@ -59,7 +58,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -83,7 +81,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - TextDocumentContentChangeEvent[]} required> The content changes. @@ -119,7 +116,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this notification. @@ -149,7 +145,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Position} required> The current cursor position. @@ -188,7 +183,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The language identifier of the document (e.g., "rust", "python"). @@ -227,7 +221,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this notification. @@ -241,7 +234,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Establishes the connection with a client and negotiates protocol capabilities. This method is called once at the beginning of the connection to: - - Negotiate the protocol version to use - Exchange capability information between client and agent - Determine available authentication methods @@ -268,19 +260,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ClientCapabilities} > Capabilities supported by the client. - Default: `{"auth":{"terminal":false},"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false}` - Implementation | null} > Information about the Client name and version sent to the Agent. Note: in future versions of the protocol, this will be required. - ProtocolVersion} required> The latest protocol version supported by the client. @@ -304,32 +293,27 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` - + - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false},"sessionCapabilities":{}}` Implementation | null} > Information about the Agent name and version sent to the Client. Note: in future versions of the protocol, this will be required. - AuthMethod[]} > Authentication methods supported by the agent. - Default: `[]` - ProtocolVersion} required> The protocol version the client specified if supported by the agent, or the latest protocol version supported by the agent. The client should disconnect, if it doesn't support this version. - ### logout @@ -363,7 +347,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - #### LogoutResponse @@ -384,7 +367,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -408,7 +390,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The ID of the accepted suggestion. @@ -446,7 +427,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the NES session to close. @@ -466,7 +446,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -490,7 +469,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The ID of the rejected suggestion. @@ -525,7 +503,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesRepository | null} > Repository metadata, if the workspace is a git repository. @@ -551,7 +528,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for the newly started NES session. @@ -580,7 +556,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesSuggestContext | null} > Context for the suggestion, included based on agent capabilities. @@ -618,7 +593,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesSuggestion[]} required> The list of suggestions. @@ -651,7 +625,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Provider id to disable. @@ -675,7 +648,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -705,7 +677,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - #### ListProvidersResponse @@ -726,7 +697,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ProviderInfo[]} required> Configurable providers with current routing info suitable for UI display. @@ -761,7 +731,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - LlmProtocol} required> Protocol type for this provider. @@ -795,7 +764,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -806,7 +774,6 @@ Cancels ongoing operations for a session. This is a notification sent by the client to cancel an ongoing prompt turn. Upon receiving this notification, the Agent SHOULD: - - Stop all language model requests as soon as possible - Abort all tool call invocations in progress - Send any pending `session/update` notifications @@ -830,7 +797,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session to cancel operations for. @@ -866,7 +832,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session to close. @@ -886,7 +851,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -927,7 +891,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -939,7 +902,6 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the forked session. - The working directory for this session. @@ -969,7 +931,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -980,13 +941,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Initial model state if supported by the Agent - SessionModeState | null} > Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - SessionId} required> Unique identifier for the newly created forked session. @@ -1017,7 +976,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -1028,7 +986,6 @@ Filter sessions by the exact ordered additional workspace roots. Each path must This filter applies only when the field is present and non-empty. When omitted or empty, no additional-root filter is applied. - Opaque cursor token from a previous response's nextCursor field for cursor-based pagination @@ -1051,7 +1008,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Opaque cursor token. If present, pass this in the next request's cursor parameter @@ -1069,7 +1025,6 @@ Loads an existing session to resume a previous conversation. This method is only available if the agent advertises the `loadSession` capability. The agent should: - - Restore the session context and conversation history - Connect to the specified MCP servers - Stream the entire conversation history back to the client via notifications @@ -1094,7 +1049,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -1106,7 +1060,6 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the loaded session. - The working directory for this session. @@ -1132,7 +1085,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -1143,13 +1095,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Initial model state if supported by the Agent - SessionModeState | null} > Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - @@ -1160,7 +1110,6 @@ Creates a new conversation session with the agent. Sessions represent independent conversation contexts with their own history and state. The agent should: - - Create a new session context - Connect to any specified MCP servers - Return a unique session ID for future requests @@ -1185,7 +1134,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -1197,7 +1145,6 @@ Additional workspace roots for this session. Each path must be absolute. These expand the session's filesystem scope without changing `cwd`, which remains the base for relative paths. When omitted or empty, no additional roots are activated for the new session. - The working directory for this session. Must be an absolute path. @@ -1222,7 +1169,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -1233,19 +1179,16 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Initial model state if supported by the Agent - SessionModeState | null} > Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - SessionId} required> Unique identifier for the created session. Used in all subsequent requests for this conversation. - @@ -1254,7 +1197,6 @@ Used in all subsequent requests for this conversation. Processes a user prompt within a session. This method handles the whole lifecycle of a prompt: - - Receives user messages with optional context (files, images, etc.) - Processes the prompt using language models - Reports language model content and tool calls to the Clients @@ -1282,7 +1224,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - **UNSTABLE** @@ -1294,7 +1235,6 @@ A client-generated unique identifier for this user message. If provided, the Agent SHOULD echo this value as `userMessageId` in the `PromptResponse` to confirm it was recorded. Both clients and agents MUST use UUID format for message IDs. - ContentBlock[]} required> The blocks of content that compose the user's message. @@ -1310,7 +1250,6 @@ The client MAY include referenced pieces of context as either When available, `ContentBlock::Resource` is preferred as it avoids extra round-trips and allows the message to include pieces of context from sources the agent may not have access to. - SessionId} required> The ID of the session to send this user message to @@ -1332,7 +1271,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - StopReason} required> Indicates why the agent stopped processing the turn. @@ -1343,7 +1281,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Token usage for this turn (optional). - **UNSTABLE** @@ -1355,7 +1292,6 @@ The acknowledged user message ID. If the client provided a `messageId` in the `PromptRequest`, the agent echoes it here to confirm it was recorded. If the client did not provide one, the agent MAY assign one and return it here. Absence of this field indicates the agent did not record a message ID. - @@ -1387,7 +1323,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -1399,7 +1334,6 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the resumed session. - The working directory for this session. @@ -1425,7 +1359,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -1436,13 +1369,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Initial model state if supported by the Agent - SessionModeState | null} > Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - @@ -1464,7 +1395,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigId} required> The ID of the configuration option to set. @@ -1499,17 +1429,15 @@ variant. -SessionConfigValueId} - required -> +SessionConfigValueId} required> The value ID. + + #### SetSessionConfigOptionResponse Response to `session/set_config_option` method. @@ -1524,7 +1452,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -1561,7 +1488,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the mode to set. @@ -1584,7 +1510,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1614,7 +1539,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ModelId} required> The ID of the model to set. @@ -1641,7 +1565,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## Client @@ -1651,7 +1574,6 @@ Defines the interface that ACP-compliant clients must implement. Clients are typically code editors (IDEs, text editors) that provide the interface between users and AI agents. They manage the environment, handle user interactions, and control access to resources. - ### elicitation/complete @@ -1679,7 +1601,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ElicitationId} required> The ID of the elicitation that completed. @@ -1716,7 +1637,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - A human-readable message describing what input is needed. @@ -1732,11 +1652,7 @@ Form-based elicitation where the client renders a form from the provided schema. The discriminator value. Must be `"form"`. -ElicitationSchema} - required -> +ElicitationSchema} required> A JSON Schema describing the form fields to present to the user. @@ -1748,11 +1664,7 @@ URL-based elicitation where the client directs the user to a URL. -ElicitationId} - required -> +ElicitationId} required> The unique identifier for this elicitation. @@ -1765,6 +1677,8 @@ URL-based elicitation where the client directs the user to a URL. + + #### CreateElicitationResponse **UNSTABLE** @@ -1783,7 +1697,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - **Variants:** @@ -1796,7 +1709,7 @@ The user accepted and provided content. The discriminator value. Must be `"accept"`. - + The user-provided content, if any, as an object matching the requested schema. @@ -1827,6 +1740,8 @@ The elicitation was cancelled. + + ### fs/read_text_file @@ -1853,19 +1768,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of lines to read. - Minimum: `0` - Line number to start reading from (1-based). - Minimum: `0` - Absolute path to the file to read. @@ -1888,7 +1800,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1919,7 +1830,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The text content to write to the file. @@ -1945,7 +1855,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1980,7 +1889,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOption[]} required> Available permission options for the user to choose from. @@ -2006,7 +1914,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - RequestPermissionOutcome} required> The user's decision on the permission request. @@ -2045,7 +1952,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session this update pertains to. @@ -2086,7 +1992,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > Array of command arguments. @@ -2111,7 +2016,6 @@ string output, even if this means the retained output is slightly less than the specified limit. - Minimum: `0` - SessionId} required> The session ID for this request. @@ -2131,7 +2035,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The unique identifier for the created terminal. @@ -2167,7 +2070,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -2190,7 +2092,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -2217,7 +2118,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -2240,7 +2140,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - TerminalExitStatus | null} > Exit status if the command has completed. @@ -2282,7 +2181,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -2305,7 +2203,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -2329,7 +2226,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -2352,13 +2248,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The process exit code (may be null if terminated by signal). - Minimum: `0` - The signal that terminated the process (may be null if exited normally). @@ -2374,7 +2268,6 @@ agents. For example if the implementation uses a single threaded synchronous programming language then there is little it can do to react to a `$/cancel_request` notification. If an agent or client receives notifications starting with '$/' it is free to ignore the notification. - ### $/cancel_request @@ -2392,9 +2285,8 @@ Upon receiving this notification, the receiver: 1. MUST cancel the corresponding request activity and all nested activities 2. MAY send any pending notifications. 3. MUST send one of these responses for the original request: - -- Valid response with appropriate data (partial results or cancellation marker) -- Error response with code `-32800` (Cancelled) + - Valid response with appropriate data (partial results or cancellation marker) + - Error response with code `-32800` (Cancelled) See protocol docs: [Cancellation](https://agentclientprotocol.com/protocol/cancellation) @@ -2418,7 +2310,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - RequestId} required> The ID of the request to cancel. @@ -2442,13 +2333,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - LogoutCapabilities | null} > Whether the agent supports the logout method. By supplying `\{\}` it means that the agent supports the logout method. - ## AgentCapabilities @@ -2470,7 +2359,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AgentAuthCapabilities} > **UNSTABLE** @@ -2480,19 +2368,16 @@ This capability is not part of the spec yet, and may be removed or changed at an Authentication-related capabilities supported by the agent. - Default: `{}` - Whether the agent supports `session/load`. - Default: `false` - McpCapabilities} > MCP capabilities supported by the agent. - Default: `{"http":false,"sse":false}` - NesCapabilities | null} > **UNSTABLE** @@ -2500,7 +2385,6 @@ Authentication-related capabilities supported by the agent. This capability is not part of the spec yet, and may be removed or changed at any point. NES (Next Edit Suggestions) capabilities supported by the agent. - PositionEncodingKind | null} > **UNSTABLE** @@ -2508,13 +2392,11 @@ NES (Next Edit Suggestions) capabilities supported by the agent. This capability is not part of the spec yet, and may be removed or changed at any point. The position encoding selected by the agent from the client's supported encodings. - PromptCapabilities} > Prompt capabilities supported by the agent. - - Default: `{"audio":false,"embeddedContext":false,"image":false}` - + - Default: `{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false}` ProvidersCapabilities | null} > **UNSTABLE** @@ -2524,12 +2406,10 @@ This capability is not part of the spec yet, and may be removed or changed at an Provider configuration capabilities supported by the agent. By supplying `\{\}` it means that the agent supports provider configuration methods. - SessionCapabilities} > - Default: `{}` - ## Annotations @@ -2546,7 +2426,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Role[] | null} > @@ -2569,7 +2448,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -2600,7 +2478,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Whether the client supports `terminal` authentication methods. @@ -2608,7 +2485,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte When `true`, the agent may include `terminal` entries in its authentication methods. - Default: `false` - ## AuthEnvVar @@ -2629,7 +2505,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable label for this variable, displayed in client UI. @@ -2643,7 +2518,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Defaults to `false`. - Default: `false` - Whether this value is a secret (e.g. API key, token). @@ -2652,7 +2526,6 @@ Clients should use a password-style input for secret vars. Defaults to `true`. - Default: `true` - ## AuthMethod @@ -2679,7 +2552,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -2718,7 +2590,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > Additional arguments to pass when running the agent binary for terminal auth. @@ -2755,7 +2626,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -2770,6 +2640,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## AuthMethodAgent Agent handles authentication itself. @@ -2786,7 +2658,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -2818,7 +2689,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -2856,7 +2726,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > Additional arguments to pass when running the agent binary for terminal auth. @@ -2888,7 +2757,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable description of what the command does. @@ -2916,7 +2784,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - A hint to display when the input hasn't been provided yet @@ -2936,7 +2803,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AvailableCommand[]} required> Commands the agent can execute @@ -2956,7 +2822,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -2973,13 +2838,13 @@ Schema for boolean properties in an elicitation form. **Properties:** - + Default value. - + Human-readable description. - + Optional title for the property. @@ -3002,7 +2867,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AuthCapabilities} > **UNSTABLE** @@ -3014,7 +2878,6 @@ Determines which authentication method types the agent may include in its `InitializeResponse`. - Default: `{"terminal":false}` - ElicitationCapabilities | null} > **UNSTABLE** @@ -3023,14 +2886,12 @@ This capability is not part of the spec yet, and may be removed or changed at an Elicitation capabilities supported by the client. Determines which elicitation modes the agent may use. - FileSystemCapabilities} > File system capabilities supported by the client. Determines which file operations the agent can request. - Default: `{"readTextFile":false,"writeTextFile":false}` - ClientNesCapabilities | null} > **UNSTABLE** @@ -3038,7 +2899,6 @@ Determines which file operations the agent can request. This capability is not part of the spec yet, and may be removed or changed at any point. NES (Next Edit Suggestions) capabilities supported by the client. - PositionEncodingKind[]} > **UNSTABLE** @@ -3046,13 +2906,11 @@ NES (Next Edit Suggestions) capabilities supported by the client. This capability is not part of the spec yet, and may be removed or changed at any point. The position encodings supported by the client, in order of preference. - Whether the Client support all `terminal/*` methods. - Default: `false` - ## ClientNesCapabilities @@ -3069,7 +2927,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesJumpCapabilities | null} > Whether the client supports the `jump` suggestion kind. @@ -3095,7 +2952,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -3115,7 +2971,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> The actual content block. @@ -3129,7 +2984,6 @@ They provide a structured way to handle various types of user-facing content—w it's text from language models, images for analysis, or embedded resources for context. Content blocks appear in: - - User prompts sent via `session/prompt` - Language model output streamed through `session/update` notifications - Progress updates and results from tool calls @@ -3155,7 +3009,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3181,7 +3034,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3211,7 +3063,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3239,7 +3090,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3277,7 +3127,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3290,6 +3139,41 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +A template that supports variable substitution using \{\{variable_name\}\} syntax. + +Allows dynamic content generation by substituting variables into template strings. +Variables are resolved at processing time and can include values from context, +user input, or system state. + +Requires the `promptVariables` prompt capability when included in prompts. + + + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + + + The discriminator value. Must be `"prompt_template"`. + +PromptVariable[]} required> + Variables available for substitution in this template. + + + + + + + ## ContentChunk A streamed item of content @@ -3304,7 +3188,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -3319,7 +3202,6 @@ A unique identifier for the message this chunk belongs to. All chunks belonging to the same message share the same `messageId`. A change in `messageId` indicates a new message has started. Both clients and agents MUST use UUID format for message IDs. - ## Cost @@ -3357,7 +3239,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the current mode @@ -3381,7 +3262,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The new content after modification. @@ -3405,7 +3285,7 @@ The user accepted the elicitation and provided content. **Properties:** - + The user-provided content, if any, as an object matching the requested schema. @@ -3427,7 +3307,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ElicitationFormCapabilities | null} > Whether the client supports form-based elicitation. @@ -3441,25 +3320,27 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte **Type:** Union - {""} +{""} - {""} +{""} - {""} +{""} - {""} +{""} - {""} +{""} + + ## ElicitationFormCapabilities **UNSTABLE** @@ -3478,7 +3359,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## ElicitationFormMode @@ -3493,11 +3373,7 @@ Form-based elicitation mode where the client renders a form from the provided sc **Shared properties:** -ElicitationSchema} - required -> +ElicitationSchema} required> A JSON Schema describing the form fields to present to the user. @@ -3508,24 +3384,10 @@ Tied to a session, optionally to a specific tool call within that session. -SessionId} - required -> +SessionId} required> The session this elicitation is tied to. - - - ToolCallId - - | null - - } -> +ToolCallId | null} > Optional tool call within the session. @@ -3538,17 +3400,15 @@ Tied to a specific JSON-RPC request outside of a session -RequestId} - required -> +RequestId} required> The request this elicitation is tied to. + + ## ElicitationId **UNSTABLE** @@ -3590,13 +3450,11 @@ String property (or single-select enum when `enum`/`oneOf` is set). Maximum string length. - Minimum: `0` - Minimum string length. - Minimum: `0` - EnumOption[] | null} > Titled enum options for titled single-select enums. @@ -3619,19 +3477,19 @@ Number (floating-point) property. - + Default value. - + Human-readable description. - + Maximum value (inclusive). - + Minimum value (inclusive). - + Optional title for the property. @@ -3646,19 +3504,19 @@ Integer property. - + Default value. - + Human-readable description. - + Maximum value (inclusive). - + Minimum value (inclusive). - + Optional title for the property. @@ -3673,13 +3531,13 @@ Boolean property. - + Default value. - + Human-readable description. - + Optional title for the property. @@ -3707,13 +3565,11 @@ Multi-select array property. Maximum number of items to select. - Minimum: `0` - Minimum number of items to select. - Minimum: `0` - Optional title for the property. @@ -3725,6 +3581,8 @@ Multi-select array property. + + ## ElicitationRequestScope **UNSTABLE** @@ -3738,11 +3596,7 @@ Request-scoped elicitation, tied to a specific JSON-RPC request outside of a ses **Properties:** -RequestId} - required -> +RequestId} required> The request this elicitation is tied to. @@ -3764,7 +3618,6 @@ as required by the elicitation specification. Property definitions (must be primitive types). - Default: `{}` - <>"string"[] | null} > List of required property names. @@ -3776,7 +3629,6 @@ as required by the elicitation specification. Type discriminator. Always `"object"`. - Default: `"object"` - ## ElicitationSchemaType @@ -3786,9 +3638,11 @@ Type discriminator for elicitation schemas. **Type:** Union - Object schema type. +Object schema type. + + ## ElicitationSessionScope **UNSTABLE** @@ -3805,24 +3659,10 @@ during a tool call and needs to redirect it to the user. **Properties:** -SessionId} - required -> +SessionId} required> The session this elicitation is tied to. - - - ToolCallId - - | null - - } -> +ToolCallId | null} > Optional tool call within the session. @@ -3833,9 +3673,11 @@ Items definition for untitled multi-select enum properties. **Type:** Union - String schema type. +String schema type. + + ## ElicitationUrlCapabilities **UNSTABLE** @@ -3854,7 +3696,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## ElicitationUrlMode @@ -3869,11 +3710,7 @@ URL-based elicitation mode where the client directs the user to a URL. **Shared properties:** -ElicitationId} - required -> +ElicitationId} required> The unique identifier for this elicitation. @@ -3887,24 +3724,10 @@ Tied to a session, optionally to a specific tool call within that session. -SessionId} - required -> +SessionId} required> The session this elicitation is tied to. - - - ToolCallId - - | null - - } -> +ToolCallId | null} > Optional tool call within the session. @@ -3917,17 +3740,15 @@ Tied to a specific JSON-RPC request outside of a session -RequestId} - required -> +RequestId} required> The request this elicitation is tied to. + + ## EmbeddedResource The contents of a resource, embedded into a prompt or tool call result. @@ -3942,7 +3763,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3966,7 +3786,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -3989,7 +3808,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -4001,6 +3819,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## EnumOption A titled enum option with a const value and human-readable title. @@ -4030,7 +3850,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The name of the environment variable. @@ -4053,17 +3872,16 @@ See protocol docs: [JSON-RPC Error Object](https://www.jsonrpc.org/specification **Properties:** ErrorCode} required> - A number indicating the error type that occurred. This must be an integer as - defined in the JSON-RPC specification. + A number indicating the error type that occurred. +This must be an integer as defined in the JSON-RPC specification. - - Optional primitive or structured value that contains additional information - about the error. This may include debugging information or context-specific - details. + + Optional primitive or structured value that contains additional information about the error. +This may include debugging information or context-specific details. - A string providing a short description of the error. The message should be - limited to a concise single sentence. + A string providing a short description of the error. +The message should be limited to a concise single sentence. ## ErrorCode @@ -4076,25 +3894,25 @@ and use the reserved range (-32000 to -32099) for protocol-specific errors. **Type:** Union - **Parse error**: Invalid JSON was received by the server. An error occurred on - the server while parsing the JSON text. +**Parse error**: Invalid JSON was received by the server. +An error occurred on the server while parsing the JSON text. - **Invalid request**: The JSON sent is not a valid Request object. +**Invalid request**: The JSON sent is not a valid Request object. - **Method not found**: The method does not exist or is not available. +**Method not found**: The method does not exist or is not available. - **Invalid params**: Invalid method parameter(s). +**Invalid params**: Invalid method parameter(s). - **Internal error**: Internal JSON-RPC error. Reserved for - implementation-defined server errors. +**Internal error**: Internal JSON-RPC error. +Reserved for implementation-defined server errors. @@ -4104,16 +3922,14 @@ This capability is not part of the spec yet, and may be removed or changed at an Execution of the method was aborted either due to a cancellation request from the caller or because of resource constraints or shutdown. - - **Authentication required**: Authentication is required before this operation - can be performed. +**Authentication required**: Authentication is required before this operation can be performed. - **Resource not found**: A given resource, such as a file, was not found. +**Resource not found**: A given resource, such as a file, was not found. @@ -4122,13 +3938,14 @@ because of resource constraints or shutdown. This capability is not part of the spec yet, and may be removed or changed at any point. The agent requires user input via a URL-based elicitation before it can proceed. - - Other undefined error code. +Other undefined error code. + + ## ExtNotification Allows the Agent to send an arbitrary notification that is not part of the ACP spec. @@ -4137,6 +3954,7 @@ while maintaining protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## ExtRequest Allows for sending an arbitrary request that is not part of the ACP spec. @@ -4145,6 +3963,7 @@ protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## ExtResponse Allows for sending an arbitrary response to an `ExtRequest` that is not part of the ACP spec. @@ -4153,6 +3972,7 @@ protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## FileSystemCapabilities File system capabilities that a client may support. @@ -4169,19 +3989,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Whether the Client supports `fs/read_text_file` requests. - Default: `false` - Whether the Client supports `fs/write_text_file` requests. - Default: `false` - ## HttpHeader @@ -4198,7 +4015,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The name of the HTTP header. @@ -4221,7 +4037,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -4248,7 +4063,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Intended for programmatic or logical use, but can be used as a display @@ -4259,7 +4073,6 @@ name fallback if title isn’t present. and easily understood. If not provided, the name should be used for display. - Version of the implementation. Can be displayed to the user or used @@ -4274,19 +4087,19 @@ Schema for integer properties in an elicitation form. **Properties:** - + Default value. - + Human-readable description. - + Maximum value (inclusive). - + Minimum value (inclusive). - + Optional title for the property. @@ -4306,29 +4119,31 @@ Protocol names that do not begin with `_` are reserved for the ACP spec. **Type:** Union - Anthropic API protocol. +Anthropic API protocol. - OpenAI API protocol. +OpenAI API protocol. - Azure OpenAI API protocol. +Azure OpenAI API protocol. - Google Vertex AI API protocol. +Google Vertex AI API protocol. - AWS Bedrock API protocol. +AWS Bedrock API protocol. - Unknown or custom protocol. +Unknown or custom protocol. + + ## LogoutCapabilities **UNSTABLE** @@ -4349,7 +4164,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## McpCapabilities @@ -4366,19 +4180,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Agent supports `McpServer::Http`. - Default: `false` - Agent supports `McpServer::Sse`. - Default: `false` - ## McpServer @@ -4405,7 +4216,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -4436,7 +4246,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -4467,7 +4276,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} required> Command-line arguments to pass to the MCP server. @@ -4485,6 +4293,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## McpServerHttp HTTP transport configuration for MCP. @@ -4499,7 +4309,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -4525,7 +4334,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -4551,7 +4359,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} required> Command-line arguments to pass to the MCP server. @@ -4594,7 +4401,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description of the model. @@ -4617,23 +4423,10 @@ Untitled multi-select items with plain string values. - - "string" - [] - - } - required -> +"string"[]} required> Allowed enum values. -ElicitationStringType} - required -> +ElicitationStringType} required> Item type discriminator. Must be `"string"`. @@ -4645,17 +4438,15 @@ Titled multi-select items with human-readable labels. -EnumOption[]} - required -> +EnumOption[]} required> Titled enum options. + + ## MultiSelectPropertySchema Schema for multi-select (array) properties in an elicitation form. @@ -4677,13 +4468,11 @@ Schema for multi-select (array) properties in an elicitation form. Maximum number of items to select. - Minimum: `0` - Minimum number of items to select. - Minimum: `0` - Optional title for the property. @@ -4703,7 +4492,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesContextCapabilities | null} > Context the agent wants attached to each suggestion request. @@ -4726,7 +4514,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesDiagnosticsCapabilities | null} > Whether the agent wants diagnostics context. @@ -4761,11 +4548,7 @@ A diagnostic (error, warning, etc.). Range} required> The range of the diagnostic. -NesDiagnosticSeverity} - required -> +NesDiagnosticSeverity} required> The severity of the diagnostic. @@ -4779,21 +4562,23 @@ Severity of a diagnostic. **Type:** Union - An error. +An error. - A warning. +A warning. - An informational message. +An informational message. - A hint. +A hint. + + ## NesDiagnosticsCapabilities Capabilities for diagnostics context. @@ -4808,7 +4593,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentDidChangeCapabilities @@ -4825,7 +4609,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - TextDocumentSyncKind} required> The sync kind the agent wants: `"full"` or `"incremental"`. @@ -4845,7 +4628,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentDidFocusCapabilities @@ -4862,7 +4644,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentDidOpenCapabilities @@ -4879,7 +4660,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentDidSaveCapabilities @@ -4896,7 +4676,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesDocumentEventCapabilities @@ -4913,7 +4692,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesDocumentDidChangeCapabilities | null} > Whether the agent wants `document/didChange` events, and the sync kind. @@ -4945,13 +4723,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of edit history entries the agent can use. - Minimum: `0` - ## NesEditHistoryEntry @@ -4977,24 +4753,10 @@ A text edit suggestion. **Properties:** - - - Position - - | null - - } -> +Position | null} > Optional suggested cursor position after applying edits. -NesTextEdit[]} - required -> +NesTextEdit[]} required> The text edits to apply. @@ -5018,7 +4780,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesDocumentEventCapabilities | null} > Document event capabilities. @@ -5036,13 +4797,11 @@ A code excerpt from a file. The end line of the excerpt (zero-based). - Minimum: `0` - The start line of the excerpt (zero-based). - Minimum: `0` - The text content of the excerpt. @@ -5062,7 +4821,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesJumpSuggestion @@ -5098,7 +4856,6 @@ An open file in the editor. Timestamp in milliseconds since epoch of when the file was last focused. - Minimum: `0` - The URI of the file. @@ -5121,7 +4878,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesRecentFile @@ -5156,13 +4912,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of recent files the agent can use. - Minimum: `0` - ## NesRejectReason @@ -5172,21 +4926,23 @@ The reason a suggestion was rejected. **Type:** Union - The user explicitly dismissed the suggestion. +The user explicitly dismissed the suggestion. - The suggestion was shown but the user continued editing without interacting. +The suggestion was shown but the user continued editing without interacting. - The suggestion was superseded by a newer suggestion. +The suggestion was superseded by a newer suggestion. - The request was cancelled before the agent returned a response. +The request was cancelled before the agent returned a response. + + ## NesRelatedSnippet A related code snippet from a file. @@ -5195,11 +4951,7 @@ A related code snippet from a file. **Properties:** -NesExcerpt[]} - required -> +NesExcerpt[]} required> The code excerpts. @@ -5220,7 +4972,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesRenameCapabilities @@ -5237,7 +4988,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesRenameSuggestion @@ -5293,7 +5043,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## NesSearchAndReplaceSuggestion @@ -5307,7 +5056,7 @@ A search-and-replace suggestion. Unique identifier for accept/reject tracking. - + Whether `search` is a regular expression. Defaults to `false`. @@ -5334,7 +5083,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - NesDiagnostic[] | null} > Current diagnostics (errors, warnings). @@ -5366,24 +5114,10 @@ A text edit suggestion. - - - Position - - | null - - } -> +Position | null} > Optional suggested cursor position after applying edits. -NesTextEdit[]} - required -> +NesTextEdit[]} required> The text edits to apply. @@ -5452,7 +5186,7 @@ A search-and-replace suggestion. Unique identifier for accept/reject tracking. - + Whether `search` is a regular expression. Defaults to `false`. @@ -5471,6 +5205,8 @@ A search-and-replace suggestion. + + ## NesTextEdit A text edit within a suggestion. @@ -5493,17 +5229,19 @@ What triggered the suggestion request. **Type:** Union - Triggered by user typing or cursor movement. +Triggered by user typing or cursor movement. - Triggered by a diagnostic appearing at or near the cursor. +Triggered by a diagnostic appearing at or near the cursor. - Triggered by an explicit user action (keyboard shortcut). +Triggered by an explicit user action (keyboard shortcut). + + ## NesUserAction A user action (typing, cursor movement, etc.). @@ -5522,7 +5260,6 @@ A user action (typing, cursor movement, etc.). Timestamp in milliseconds since epoch. - Minimum: `0` - The URI of the file where the action occurred. @@ -5542,13 +5279,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of user actions the agent can use. - Minimum: `0` - ## NumberPropertySchema @@ -5559,19 +5294,19 @@ Schema for number (floating-point) properties in an elicitation form. **Properties:** - + Default value. - + Human-readable description. - + Maximum value (inclusive). - + Minimum value (inclusive). - + Optional title for the property. @@ -5589,7 +5324,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionKind} required> Hint about the nature of this permission option. @@ -5616,21 +5350,23 @@ Helps clients choose appropriate icons and UI treatment. **Type:** Union - Allow this operation only this time. +Allow this operation only this time. - Allow this operation and remember the choice. +Allow this operation and remember the choice. - Reject this operation only this time. +Reject this operation only this time. - Reject this operation and remember the choice. +Reject this operation and remember the choice. + + ## Plan An execution plan for accomplishing complex tasks. @@ -5651,14 +5387,12 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PlanEntry[]} required> The list of tasks to be accomplished. When updating a plan, the agent must send a complete list of all entries with their current status. The client replaces the entire plan with each update. - ## PlanEntry @@ -5679,7 +5413,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable description of what this task aims to accomplish. @@ -5703,17 +5436,19 @@ See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent **Type:** Union - High priority task - critical to the overall goal. +High priority task - critical to the overall goal. - Medium priority task - important but not critical. +Medium priority task - important but not critical. - Low priority task - nice to have but not essential. +Low priority task - nice to have but not essential. + + ## PlanEntryStatus Status of a plan entry in the execution flow. @@ -5724,17 +5459,19 @@ See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent **Type:** Union - The task has not started yet. +The task has not started yet. - The task is currently being worked on. +The task is currently being worked on. - The task has been successfully completed. +The task has been successfully completed. + + ## Position A zero-based position in a text document. @@ -5749,13 +5486,11 @@ The meaning of `character` depends on the negotiated position encoding. Zero-based character offset (encoding-dependent). - Minimum: `0` - Zero-based line number. - Minimum: `0` - ## PositionEncodingKind @@ -5767,17 +5502,19 @@ Follows the same conventions as LSP 3.17. The default is UTF-16. **Type:** Union - Character offsets count UTF-16 code units. This is the default. +Character offsets count UTF-16 code units. This is the default. - Character offsets count Unicode code points. +Character offsets count Unicode code points. - Character offsets count UTF-8 code units (bytes). +Character offsets count UTF-8 code units (bytes). + + ## PromptCapabilities Prompt capabilities supported by the agent in `session/prompt` requests. @@ -5803,13 +5540,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Agent supports `ContentBlock::Audio`. - Default: `false` - Agent supports embedded context in `session/prompt` requests. @@ -5818,15 +5553,139 @@ When enabled, the Client is allowed to include `ContentBlock::Resource` in prompt requests for pieces of context that are referenced in the message. - Default: `false` - Agent supports `ContentBlock::Image`. - Default: `false` + + + Agent supports prompt variables and templates in `session/prompt` requests. + +When enabled, the Client is allowed to include `ContentBlock::PromptTemplate` +in prompt requests with variable substitution support. + + - Default: `false` + + +## PromptTemplateContent + +A template content block that supports variable substitution. + +Templates use \{\{variable_name\}\} syntax for variable placeholders that can be +substituted with actual values at processing time. This enables dynamic content +generation and reusable prompt templates. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + +PromptVariable[]} required> + Variables available for substitution in this template. + + +## PromptVariable + +A variable that can be substituted in a prompt template. + +Variables define named placeholders that can be replaced with actual values +during template processing. They can include metadata about expected types, +descriptions for user interfaces, and validation constraints. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + Default value to use if no value is provided. + + + Human-readable description of this variable. + + + The variable name (used in \{\{variable_name\}\} placeholders). + + + Whether this variable is required for template processing. + + - Default: `false` + +PromptVariableType | null} > + The expected type of this variable's value. + + + The current value of the variable (if set). + +## PromptVariableType + +The expected type of a prompt variable's value. + +This helps clients provide appropriate input interfaces and validation +for prompt variables. + +**Type:** Union + + +A string value (default if not specified). + + + +A numeric value (integer or float). + +A boolean value (true/false). + + + +A date/time value in ISO 8601 format. + + + +A URL or URI reference. + + + +An email address. + + + +A multiline text value. + + + +A value selected from a predefined list (enum-like). + + + + + + + + + + + ## ProtocolVersion Protocol version identifier. @@ -5836,10 +5695,10 @@ Non-breaking changes should be introduced via capabilities. **Type:** `integer (uint16)` -| Constraint | Value | -| ---------- | ------- | -| Minimum | `0` | -| Maximum | `65535` | +| Constraint | Value | +| ---------- | ----- | +| Minimum | `0` | +| Maximum | `65535` | ## ProviderCurrentConfig @@ -5853,11 +5712,7 @@ Current effective non-secret routing configuration for a provider. **Properties:** -LlmProtocol} - required -> +LlmProtocol} required> Protocol currently used by this provider. @@ -5882,7 +5737,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ProviderCurrentConfig | null} > Current effective non-secret routing config. @@ -5919,7 +5773,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## Range @@ -5952,17 +5805,19 @@ The Server MUST reply with the same value in the Response object if included. Th **Type:** Union - {""} +{""} - {""} +{""} - {""} +{""} + + ## RequestPermissionOutcome The outcome of a permission request. @@ -5998,7 +5853,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionId} required> The ID of the option the user selected. @@ -6010,6 +5864,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## ResourceLink A resource that the server is capable of reading, included in a prompt or tool call result. @@ -6024,7 +5880,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -6047,10 +5902,11 @@ The sender or recipient of messages and data in a conversation. **Type:** Enumeration -| Value | -| ------------- | +| Value | +| ----- | | `"assistant"` | -| `"user"` | +| `"user"` | + ## SelectedPermissionOutcome @@ -6066,7 +5922,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionId} required> The ID of the option the user selected. @@ -6093,7 +5948,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionCapabilities @@ -6118,7 +5972,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionAdditionalDirectoriesCapabilities | null} > **UNSTABLE** @@ -6126,7 +5979,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. - SessionCloseCapabilities | null} > Whether the agent supports `session/close`. @@ -6137,7 +5989,6 @@ Whether the agent supports `additionalDirectories` on supported session lifecycl This capability is not part of the spec yet, and may be removed or changed at any point. Whether the agent supports `session/fork`. - SessionListCapabilities | null} > Whether the agent supports `session/list`. @@ -6162,7 +6013,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionConfigBoolean @@ -6207,7 +6057,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOptionCategory | null} > Optional semantic category for this option (UX only). @@ -6229,18 +6078,10 @@ Single-value selector (dropdown). -SessionConfigValueId} - required -> +SessionConfigValueId} required> The currently selected value. -SessionConfigSelectOptions} - required -> +SessionConfigSelectOptions} required> The set of selectable options. @@ -6269,6 +6110,8 @@ Boolean on/off toggle. + + ## SessionConfigOptionCategory Semantic category for a session configuration option. @@ -6284,21 +6127,23 @@ Category names that do not begin with `_` are reserved for the ACP spec. **Type:** Union - Session mode selector. +Session mode selector. - Model selector. +Model selector. - Thought/reasoning level selector. +Thought/reasoning level selector. - Unknown / uncategorized selector. +Unknown / uncategorized selector. + + ## SessionConfigSelect A single-value selector (dropdown) session configuration option payload. @@ -6307,18 +6152,10 @@ A single-value selector (dropdown) session configuration option payload. **Properties:** -SessionConfigValueId} - required -> +SessionConfigValueId} required> The currently selected value. -SessionConfigSelectOptions} - required -> +SessionConfigSelectOptions} required> The set of selectable options. @@ -6336,7 +6173,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigGroupId} required> Unique identifier for this group. @@ -6362,7 +6198,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description for this option value. @@ -6381,13 +6216,15 @@ Possible values for a session configuration option. **Type:** Union - A flat list of options with no grouping. +A flat list of options with no grouping. - A list of options grouped under headers. +A list of options grouped under headers. + + ## SessionConfigValueId Unique identifier for a session configuration option value. @@ -6414,7 +6251,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionId @@ -6442,7 +6278,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > **UNSTABLE** @@ -6452,7 +6287,6 @@ This capability is not part of the spec yet, and may be removed or changed at an Authoritative ordered additional workspace roots for this session. Each path must be absolute. When omitted or empty, there are no additional roots for the session. - The working directory for this session. Must be an absolute path. @@ -6484,7 +6318,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable title for the session. Set to null to clear. @@ -6509,7 +6342,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionMode @@ -6528,7 +6360,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -6557,7 +6388,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionMode[]} required> The set of modes that the Agent can operate in @@ -6584,7 +6414,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ModelInfo[]} required> The set of models that the Agent can use @@ -6609,7 +6438,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionUpdate @@ -6633,7 +6461,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -6648,7 +6475,6 @@ A unique identifier for the message this chunk belongs to. All chunks belonging to the same message share the same `messageId`. A change in `messageId` indicates a new message has started. Both clients and agents MUST use UUID format for message IDs. - The discriminator value. Must be `"user_message_chunk"`. @@ -6668,7 +6494,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -6683,7 +6508,6 @@ A unique identifier for the message this chunk belongs to. All chunks belonging to the same message share the same `messageId`. A change in `messageId` indicates a new message has started. Both clients and agents MUST use UUID format for message IDs. - The discriminator value. Must be `"agent_message_chunk"`. @@ -6703,7 +6527,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -6718,7 +6541,6 @@ A unique identifier for the message this chunk belongs to. All chunks belonging to the same message share the same `messageId`. A change in `messageId` indicates a new message has started. Both clients and agents MUST use UUID format for message IDs. - The discriminator value. Must be `"agent_thought_chunk"`. @@ -6738,7 +6560,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[]} > Content produced by the tool call. @@ -6784,7 +6605,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[] | null} > Replace the content collection. @@ -6829,14 +6649,12 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PlanEntry[]} required> The list of tasks to be accomplished. When updating a plan, the agent must send a complete list of all entries with their current status. The client replaces the entire plan with each update. - The discriminator value. Must be `"plan"`. @@ -6856,7 +6674,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AvailableCommand[]} required> Commands the agent can execute @@ -6881,7 +6698,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the current mode @@ -6904,7 +6720,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -6927,7 +6742,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The discriminator value. Must be `"session_info_update"`. @@ -6957,7 +6771,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Cost | null} > Cumulative session cost (optional). @@ -6969,18 +6782,18 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Total context window size in tokens. - Minimum: `0` - Tokens currently in context. - Minimum: `0` - + + ## StopReason Reasons why an agent stops processing a prompt turn. @@ -6990,22 +6803,22 @@ See protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/promp **Type:** Union - The turn ended successfully. +The turn ended successfully. - The turn ended because the agent reached the maximum number of tokens. +The turn ended because the agent reached the maximum number of tokens. - The turn ended because the agent reached the maximum number of allowed agent - requests between user turns. +The turn ended because the agent reached the maximum number of allowed +agent requests between user turns. - The turn ended because the agent refused to continue. The user prompt and - everything that comes after it won't be included in the next prompt, so this - should be reflected in the UI. +The turn ended because the agent refused to continue. The user prompt +and everything that comes after it won't be included in the next +prompt, so this should be reflected in the UI. @@ -7015,9 +6828,10 @@ This stop reason MUST be returned when the client sends a `session/cancel` notification, even if the cancellation causes exceptions in underlying operations. Agents should catch these exceptions and return this semantically meaningful response to confirm successful cancellation. - + + ## StringFormat String format types for string properties in elicitation schemas. @@ -7025,21 +6839,23 @@ String format types for string properties in elicitation schemas. **Type:** Union - Email address format. +Email address format. - URI format. +URI format. - Date format (YYYY-MM-DD). +Date format (YYYY-MM-DD). - Date-time format (ISO 8601). +Date-time format (ISO 8601). + + ## StringPropertySchema Schema for string properties in an elicitation form. @@ -7067,13 +6883,11 @@ with `"type": "string"`. Maximum string length. - Minimum: `0` - Minimum string length. - Minimum: `0` - EnumOption[] | null} > Titled enum options for titled single-select enums. @@ -7103,7 +6917,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -7122,13 +6935,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The process exit code (may be null if terminated by signal). - Minimum: `0` - The signal that terminated the process (may be null if exited normally). @@ -7148,7 +6959,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -7166,19 +6976,8 @@ When `range` is `Some`, `text` replaces the given range. **Properties:** - - - Range - - | null - - } -> - The range of the document that changed. If `None`, the entire content is - replaced. +Range | null} > + The range of the document that changed. If `None`, the entire content is replaced. The new text for the range, or the full document content if `range` is `None`. @@ -7191,13 +6990,15 @@ How the agent wants document changes delivered. **Type:** Union - Client sends the entire file content on each change. +Client sends the entire file content on each change. - Client sends only the changed ranges. +Client sends only the changed ranges. + + ## TextResourceContents Text-based resource contents. @@ -7212,7 +7013,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -7229,11 +7029,7 @@ Items definition for titled multi-select enum properties. **Properties:** -EnumOption[]} - required -> +EnumOption[]} required> Titled enum options. @@ -7256,7 +7052,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[]} > Content produced by the tool call. @@ -7307,7 +7102,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> The actual content block. @@ -7330,7 +7124,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The new content after modification. @@ -7363,7 +7156,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -7374,6 +7166,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## ToolCallId Unique identifier for a tool call within a session. @@ -7399,13 +7193,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional line number within the file. - Minimum: `0` - The file path being accessed or modified. @@ -7422,22 +7214,24 @@ See protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls# **Type:** Union - The tool call hasn't started running yet because the input is either streaming - or we're awaiting approval. +The tool call hasn't started running yet because the input is either +streaming or we're awaiting approval. - The tool call is currently running. +The tool call is currently running. - The tool call completed successfully. +The tool call completed successfully. - The tool call failed with an error. +The tool call failed with an error. + + ## ToolCallUpdate An update to an existing tool call. @@ -7457,7 +7251,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[] | null} > Replace the content collection. @@ -7496,45 +7289,47 @@ See protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-call **Type:** Union - Reading files or data. +Reading files or data. - Modifying files or content. +Modifying files or content. - Removing files or data. +Removing files or data. - Moving or renaming files. +Moving or renaming files. - Searching for information. +Searching for information. - Running commands or code. +Running commands or code. - Internal reasoning or planning. +Internal reasoning or planning. - Retrieving external data. +Retrieving external data. - Switching the current session mode. +Switching the current session mode. - Other tool types (default). +Other tool types (default). + + ## UnstructuredCommandInput All text that was typed after the command name is provided as input. @@ -7549,7 +7344,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - A hint to display when the input hasn't been provided yet @@ -7563,23 +7357,10 @@ Items definition for untitled multi-select enum properties. **Properties:** - - "string" - [] - - } - required -> +"string"[]} required> Allowed enum values. -ElicitationStringType} - required -> +ElicitationStringType} required> Item type discriminator. Must be `"string"`. @@ -7599,37 +7380,31 @@ Token usage information for a prompt turn. Total cache read tokens. - Minimum: `0` - Total cache write tokens. - Minimum: `0` - Total input tokens across all turns. - Minimum: `0` - Total output tokens across all turns. - Minimum: `0` - Total thought/reasoning tokens - Minimum: `0` - Sum of all token types across session. - Minimum: `0` - ## UsageUpdate @@ -7650,7 +7425,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Cost | null} > Cumulative session cost (optional). @@ -7659,13 +7433,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Total context window size in tokens. - Minimum: `0` - Tokens currently in context. - Minimum: `0` - ## WorkspaceFolder @@ -7682,3 +7454,4 @@ A workspace folder. The URI of the folder. + diff --git a/docs/protocol/schema.mdx b/docs/protocol/schema.mdx index 56ea67374..407c1b350 100644 --- a/docs/protocol/schema.mdx +++ b/docs/protocol/schema.mdx @@ -38,7 +38,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The ID of the authentication method to use. @@ -59,7 +58,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ### initialize @@ -67,7 +65,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Establishes the connection with a client and negotiates protocol capabilities. This method is called once at the beginning of the connection to: - - Negotiate the protocol version to use - Exchange capability information between client and agent - Determine available authentication methods @@ -94,19 +91,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ClientCapabilities} > Capabilities supported by the client. - Default: `{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false}` - Implementation | null} > Information about the Client name and version sent to the Agent. Note: in future versions of the protocol, this will be required. - ProtocolVersion} required> The latest protocol version supported by the client. @@ -130,32 +124,27 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` - + - Default: `{"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false},"sessionCapabilities":{}}` Implementation | null} > Information about the Agent name and version sent to the Client. Note: in future versions of the protocol, this will be required. - AuthMethod[]} > Authentication methods supported by the agent. - Default: `[]` - ProtocolVersion} required> The protocol version the client specified if supported by the agent, or the latest protocol version supported by the agent. The client should disconnect, if it doesn't support this version. - @@ -166,7 +155,6 @@ Cancels ongoing operations for a session. This is a notification sent by the client to cancel an ongoing prompt turn. Upon receiving this notification, the Agent SHOULD: - - Stop all language model requests as soon as possible - Abort all tool call invocations in progress - Send any pending `session/update` notifications @@ -190,7 +178,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session to cancel operations for. @@ -226,7 +213,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session to close. @@ -246,7 +232,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -274,7 +259,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Opaque cursor token from a previous response's nextCursor field for cursor-based pagination @@ -297,7 +281,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Opaque cursor token. If present, pass this in the next request's cursor parameter @@ -315,7 +298,6 @@ Loads an existing session to resume a previous conversation. This method is only available if the agent advertises the `loadSession` capability. The agent should: - - Restore the session context and conversation history - Connect to the specified MCP servers - Stream the entire conversation history back to the client via notifications @@ -340,7 +322,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The working directory for this session. @@ -366,7 +347,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -375,7 +355,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - @@ -386,7 +365,6 @@ Creates a new conversation session with the agent. Sessions represent independent conversation contexts with their own history and state. The agent should: - - Create a new session context - Connect to any specified MCP servers - Return a unique session ID for future requests @@ -411,7 +389,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The working directory for this session. Must be an absolute path. @@ -436,7 +413,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -445,13 +421,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - SessionId} required> Unique identifier for the created session. Used in all subsequent requests for this conversation. - @@ -460,7 +434,6 @@ Used in all subsequent requests for this conversation. Processes a user prompt within a session. This method handles the whole lifecycle of a prompt: - - Receives user messages with optional context (files, images, etc.) - Processes the prompt using language models - Reports language model content and tool calls to the Clients @@ -488,7 +461,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock[]} required> The blocks of content that compose the user's message. @@ -504,7 +476,6 @@ The client MAY include referenced pieces of context as either When available, `ContentBlock::Resource` is preferred as it avoids extra round-trips and allows the message to include pieces of context from sources the agent may not have access to. - SessionId} required> The ID of the session to send this user message to @@ -526,7 +497,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - StopReason} required> Indicates why the agent stopped processing the turn. @@ -561,7 +531,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The working directory for this session. @@ -587,7 +556,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[] | null} > Initial session configuration options if supported by the Agent. @@ -596,7 +564,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Initial mode state if supported by the Agent See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes) - @@ -618,7 +585,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigId} required> The ID of the configuration option to set. @@ -644,7 +610,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -681,7 +646,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the mode to set. @@ -704,7 +668,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## Client @@ -714,7 +677,6 @@ Defines the interface that ACP-compliant clients must implement. Clients are typically code editors (IDEs, text editors) that provide the interface between users and AI agents. They manage the environment, handle user interactions, and control access to resources. - ### fs/read_text_file @@ -741,19 +703,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Maximum number of lines to read. - Minimum: `0` - Line number to start reading from (1-based). - Minimum: `0` - Absolute path to the file to read. @@ -776,7 +735,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -807,7 +765,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The text content to write to the file. @@ -833,7 +790,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -868,7 +824,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOption[]} required> Available permission options for the user to choose from. @@ -894,7 +849,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - RequestPermissionOutcome} required> The user's decision on the permission request. @@ -933,7 +887,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The ID of the session this update pertains to. @@ -974,7 +927,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} > Array of command arguments. @@ -999,7 +951,6 @@ string output, even if this means the retained output is slightly less than the specified limit. - Minimum: `0` - SessionId} required> The session ID for this request. @@ -1019,7 +970,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The unique identifier for the created terminal. @@ -1055,7 +1005,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -1078,7 +1027,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1105,7 +1053,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -1128,7 +1075,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - TerminalExitStatus | null} > Exit status if the command has completed. @@ -1170,7 +1116,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -1193,7 +1138,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1217,7 +1161,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionId} required> The session ID for this request. @@ -1240,13 +1183,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The process exit code (may be null if terminated by signal). - Minimum: `0` - The signal that terminated the process (may be null if exited normally). @@ -1271,30 +1212,25 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Whether the agent supports `session/load`. - Default: `false` - McpCapabilities} > MCP capabilities supported by the agent. - Default: `{"http":false,"sse":false}` - PromptCapabilities} > Prompt capabilities supported by the agent. - - Default: `{"audio":false,"embeddedContext":false,"image":false}` - + - Default: `{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false}` SessionCapabilities} > - Default: `{}` - ## Annotations @@ -1311,7 +1247,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Role[] | null} > @@ -1334,7 +1269,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -1364,7 +1298,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -1392,7 +1325,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description providing more details about this authentication method. @@ -1418,7 +1350,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable description of what the command does. @@ -1446,7 +1377,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - A hint to display when the input hasn't been provided yet @@ -1466,7 +1396,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AvailableCommand[]} required> Commands the agent can execute @@ -1486,7 +1415,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1514,20 +1442,17 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - FileSystemCapabilities} > File system capabilities supported by the client. Determines which file operations the agent can request. - Default: `{"readTextFile":false,"writeTextFile":false}` - Whether the Client support all `terminal/*` methods. - Default: `false` - ## ConfigOptionUpdate @@ -1544,7 +1469,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -1564,7 +1488,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> The actual content block. @@ -1578,7 +1501,6 @@ They provide a structured way to handle various types of user-facing content—w it's text from language models, images for analysis, or embedded resources for context. Content blocks appear in: - - User prompts sent via `session/prompt` - Language model output streamed through `session/update` notifications - Progress updates and results from tool calls @@ -1604,7 +1526,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -1630,7 +1551,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -1660,7 +1580,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -1688,7 +1607,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -1726,7 +1644,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -1739,6 +1656,41 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +A template that supports variable substitution using \{\{variable_name\}\} syntax. + +Allows dynamic content generation by substituting variables into template strings. +Variables are resolved at processing time and can include values from context, +user input, or system state. + +Requires the `promptVariables` prompt capability when included in prompts. + + + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + + + The discriminator value. Must be `"prompt_template"`. + +PromptVariable[]} required> + Variables available for substitution in this template. + + + + + + + ## ContentChunk A streamed item of content @@ -1753,7 +1705,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -1775,7 +1726,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the current mode @@ -1799,7 +1749,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The new content after modification. @@ -1825,7 +1774,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -1849,7 +1797,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1872,7 +1819,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -1884,6 +1830,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## EnvVariable An environment variable to set when launching an MCP server. @@ -1898,7 +1846,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The name of the environment variable. @@ -1921,17 +1868,16 @@ See protocol docs: [JSON-RPC Error Object](https://www.jsonrpc.org/specification **Properties:** ErrorCode} required> - A number indicating the error type that occurred. This must be an integer as - defined in the JSON-RPC specification. + A number indicating the error type that occurred. +This must be an integer as defined in the JSON-RPC specification. - - Optional primitive or structured value that contains additional information - about the error. This may include debugging information or context-specific - details. + + Optional primitive or structured value that contains additional information about the error. +This may include debugging information or context-specific details. - A string providing a short description of the error. The message should be - limited to a concise single sentence. + A string providing a short description of the error. +The message should be limited to a concise single sentence. ## ErrorCode @@ -1944,40 +1890,41 @@ and use the reserved range (-32000 to -32099) for protocol-specific errors. **Type:** Union - **Parse error**: Invalid JSON was received by the server. An error occurred on - the server while parsing the JSON text. +**Parse error**: Invalid JSON was received by the server. +An error occurred on the server while parsing the JSON text. - **Invalid request**: The JSON sent is not a valid Request object. +**Invalid request**: The JSON sent is not a valid Request object. - **Method not found**: The method does not exist or is not available. +**Method not found**: The method does not exist or is not available. - **Invalid params**: Invalid method parameter(s). +**Invalid params**: Invalid method parameter(s). - **Internal error**: Internal JSON-RPC error. Reserved for - implementation-defined server errors. +**Internal error**: Internal JSON-RPC error. +Reserved for implementation-defined server errors. - **Authentication required**: Authentication is required before this operation - can be performed. +**Authentication required**: Authentication is required before this operation can be performed. - **Resource not found**: A given resource, such as a file, was not found. +**Resource not found**: A given resource, such as a file, was not found. - Other undefined error code. +Other undefined error code. + + ## ExtNotification Allows the Agent to send an arbitrary notification that is not part of the ACP spec. @@ -1986,6 +1933,7 @@ while maintaining protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## ExtRequest Allows for sending an arbitrary request that is not part of the ACP spec. @@ -1994,6 +1942,7 @@ protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## ExtResponse Allows for sending an arbitrary response to an `ExtRequest` that is not part of the ACP spec. @@ -2002,6 +1951,7 @@ protocol compatibility. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + ## FileSystemCapabilities File system capabilities that a client may support. @@ -2018,19 +1968,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Whether the Client supports `fs/read_text_file` requests. - Default: `false` - Whether the Client supports `fs/write_text_file` requests. - Default: `false` - ## HttpHeader @@ -2047,7 +1994,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The name of the HTTP header. @@ -2070,7 +2016,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -2097,7 +2042,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Intended for programmatic or logical use, but can be used as a display @@ -2108,7 +2052,6 @@ name fallback if title isn’t present. and easily understood. If not provided, the name should be used for display. - Version of the implementation. Can be displayed to the user or used @@ -2129,19 +2072,16 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Agent supports `McpServer::Http`. - Default: `false` - Agent supports `McpServer::Sse`. - Default: `false` - ## McpServer @@ -2168,7 +2108,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -2199,7 +2138,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -2230,7 +2168,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} required> Command-line arguments to pass to the MCP server. @@ -2248,6 +2185,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## McpServerHttp HTTP transport configuration for MCP. @@ -2262,7 +2201,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -2288,7 +2226,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - HttpHeader[]} required> HTTP headers to set when making requests to the MCP server. @@ -2314,7 +2251,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - "string"[]} required> Command-line arguments to pass to the MCP server. @@ -2343,7 +2279,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionKind} required> Hint about the nature of this permission option. @@ -2370,21 +2305,23 @@ Helps clients choose appropriate icons and UI treatment. **Type:** Union - Allow this operation only this time. +Allow this operation only this time. - Allow this operation and remember the choice. +Allow this operation and remember the choice. - Reject this operation only this time. +Reject this operation only this time. - Reject this operation and remember the choice. +Reject this operation and remember the choice. + + ## Plan An execution plan for accomplishing complex tasks. @@ -2405,14 +2342,12 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PlanEntry[]} required> The list of tasks to be accomplished. When updating a plan, the agent must send a complete list of all entries with their current status. The client replaces the entire plan with each update. - ## PlanEntry @@ -2433,7 +2368,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable description of what this task aims to accomplish. @@ -2457,17 +2391,19 @@ See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent **Type:** Union - High priority task - critical to the overall goal. +High priority task - critical to the overall goal. - Medium priority task - important but not critical. +Medium priority task - important but not critical. - Low priority task - nice to have but not essential. +Low priority task - nice to have but not essential. + + ## PlanEntryStatus Status of a plan entry in the execution flow. @@ -2478,17 +2414,19 @@ See protocol docs: [Plan Entries](https://agentclientprotocol.com/protocol/agent **Type:** Union - The task has not started yet. +The task has not started yet. - The task is currently being worked on. +The task is currently being worked on. - The task has been successfully completed. +The task has been successfully completed. + + ## PromptCapabilities Prompt capabilities supported by the agent in `session/prompt` requests. @@ -2514,13 +2452,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Agent supports `ContentBlock::Audio`. - Default: `false` - Agent supports embedded context in `session/prompt` requests. @@ -2529,15 +2465,139 @@ When enabled, the Client is allowed to include `ContentBlock::Resource` in prompt requests for pieces of context that are referenced in the message. - Default: `false` - Agent supports `ContentBlock::Image`. - Default: `false` + + + Agent supports prompt variables and templates in `session/prompt` requests. + +When enabled, the Client is allowed to include `ContentBlock::PromptTemplate` +in prompt requests with variable substitution support. + + - Default: `false` + + +## PromptTemplateContent + +A template content block that supports variable substitution. + +Templates use \{\{variable_name\}\} syntax for variable placeholders that can be +substituted with actual values at processing time. This enables dynamic content +generation and reusable prompt templates. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + +PromptVariable[]} required> + Variables available for substitution in this template. + + +## PromptVariable + +A variable that can be substituted in a prompt template. + +Variables define named placeholders that can be replaced with actual values +during template processing. They can include metadata about expected types, +descriptions for user interfaces, and validation constraints. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + Default value to use if no value is provided. + + + Human-readable description of this variable. + + + The variable name (used in \{\{variable_name\}\} placeholders). + + + Whether this variable is required for template processing. + + - Default: `false` + +PromptVariableType | null} > + The expected type of this variable's value. + + + The current value of the variable (if set). + + +## PromptVariableType + +The expected type of a prompt variable's value. + +This helps clients provide appropriate input interfaces and validation +for prompt variables. + +**Type:** Union + + +A string value (default if not specified). + + + +A numeric value (integer or float). + + + +A boolean value (true/false). + + + +A date/time value in ISO 8601 format. + + + +A URL or URI reference. + + + +An email address. + + + +A multiline text value. + + +A value selected from a predefined list (enum-like). + + + + + + + + + ## ProtocolVersion Protocol version identifier. @@ -2547,10 +2607,10 @@ Non-breaking changes should be introduced via capabilities. **Type:** `integer (uint16)` -| Constraint | Value | -| ---------- | ------- | -| Minimum | `0` | -| Maximum | `65535` | +| Constraint | Value | +| ---------- | ----- | +| Minimum | `0` | +| Maximum | `65535` | ## RequestId @@ -2567,17 +2627,19 @@ The Server MUST reply with the same value in the Response object if included. Th **Type:** Union - {""} +{""} - {""} +{""} - {""} +{""} + + ## RequestPermissionOutcome The outcome of a permission request. @@ -2613,7 +2675,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionId} required> The ID of the option the user selected. @@ -2625,6 +2686,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## ResourceLink A resource that the server is capable of reading, included in a prompt or tool call result. @@ -2639,7 +2702,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -2662,10 +2724,11 @@ The sender or recipient of messages and data in a conversation. **Type:** Enumeration -| Value | -| ------------- | +| Value | +| ----- | | `"assistant"` | -| `"user"` | +| `"user"` | + ## SelectedPermissionOutcome @@ -2681,7 +2744,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PermissionOptionId} required> The ID of the option the user selected. @@ -2709,7 +2771,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionCloseCapabilities | null} > Whether the agent supports `session/close`. @@ -2737,7 +2798,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionConfigGroupId @@ -2762,18 +2822,10 @@ Single-value selector (dropdown). **Properties:** -SessionConfigValueId} - required -> +SessionConfigValueId} required> The currently selected value. -SessionConfigSelectOptions} - required -> +SessionConfigSelectOptions} required> The set of selectable options. @@ -2795,21 +2847,23 @@ Category names that do not begin with `_` are reserved for the ACP spec. **Type:** Union - Session mode selector. +Session mode selector. - Model selector. +Model selector. - Thought/reasoning level selector. +Thought/reasoning level selector. - Unknown / uncategorized selector. +Unknown / uncategorized selector. + + ## SessionConfigSelect A single-value selector (dropdown) session configuration option payload. @@ -2818,18 +2872,10 @@ A single-value selector (dropdown) session configuration option payload. **Properties:** -SessionConfigValueId} - required -> +SessionConfigValueId} required> The currently selected value. -SessionConfigSelectOptions} - required -> +SessionConfigSelectOptions} required> The set of selectable options. @@ -2847,7 +2893,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigGroupId} required> Unique identifier for this group. @@ -2873,7 +2918,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional description for this option value. @@ -2892,13 +2936,15 @@ Possible values for a session configuration option. **Type:** Union - A flat list of options with no grouping. +A flat list of options with no grouping. - A list of options grouped under headers. +A list of options grouped under headers. + + ## SessionConfigValueId Unique identifier for a session configuration option value. @@ -2930,7 +2976,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The working directory for this session. Must be an absolute path. @@ -2962,7 +3007,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Human-readable title for the session. Set to null to clear. @@ -2987,7 +3031,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionMode @@ -3006,7 +3049,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -3035,7 +3077,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionMode[]} required> The set of modes that the Agent can operate in @@ -3060,7 +3101,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ## SessionUpdate @@ -3084,7 +3124,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -3107,7 +3146,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -3130,7 +3168,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> A single item of content @@ -3153,7 +3190,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[]} > Content produced by the tool call. @@ -3199,7 +3235,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[] | null} > Replace the content collection. @@ -3244,14 +3279,12 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - PlanEntry[]} required> The list of tasks to be accomplished. When updating a plan, the agent must send a complete list of all entries with their current status. The client replaces the entire plan with each update. - The discriminator value. Must be `"plan"`. @@ -3271,7 +3304,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - AvailableCommand[]} required> Commands the agent can execute @@ -3296,7 +3328,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionModeId} required> The ID of the current mode @@ -3319,7 +3350,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - SessionConfigOption[]} required> The full set of configuration options and their current values. @@ -3342,7 +3372,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The discriminator value. Must be `"session_info_update"`. @@ -3357,6 +3386,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## StopReason Reasons why an agent stops processing a prompt turn. @@ -3366,22 +3397,22 @@ See protocol docs: [Stop Reasons](https://agentclientprotocol.com/protocol/promp **Type:** Union - The turn ended successfully. +The turn ended successfully. - The turn ended because the agent reached the maximum number of tokens. +The turn ended because the agent reached the maximum number of tokens. - The turn ended because the agent reached the maximum number of allowed agent - requests between user turns. +The turn ended because the agent reached the maximum number of allowed +agent requests between user turns. - The turn ended because the agent refused to continue. The user prompt and - everything that comes after it won't be included in the next prompt, so this - should be reflected in the UI. +The turn ended because the agent refused to continue. The user prompt +and everything that comes after it won't be included in the next +prompt, so this should be reflected in the UI. @@ -3391,9 +3422,10 @@ This stop reason MUST be returned when the client sends a `session/cancel` notification, even if the cancellation causes exceptions in underlying operations. Agents should catch these exceptions and return this semantically meaningful response to confirm successful cancellation. - + + ## Terminal Embed a terminal created with `terminal/create` by its id. @@ -3412,7 +3444,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -3431,13 +3462,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The process exit code (may be null if terminated by signal). - Minimum: `0` - The signal that terminated the process (may be null if exited normally). @@ -3457,7 +3486,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Annotations | null} > @@ -3478,7 +3506,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -3506,7 +3533,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[]} > Content produced by the tool call. @@ -3557,7 +3583,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ContentBlock} required> The actual content block. @@ -3580,7 +3605,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - The new content after modification. @@ -3613,7 +3637,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - @@ -3624,6 +3647,8 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + + ## ToolCallId Unique identifier for a tool call within a session. @@ -3649,13 +3674,11 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - Optional line number within the file. - Minimum: `0` - The file path being accessed or modified. @@ -3672,22 +3695,24 @@ See protocol docs: [Status](https://agentclientprotocol.com/protocol/tool-calls# **Type:** Union - The tool call hasn't started running yet because the input is either streaming - or we're awaiting approval. +The tool call hasn't started running yet because the input is either +streaming or we're awaiting approval. - The tool call is currently running. +The tool call is currently running. - The tool call completed successfully. +The tool call completed successfully. - The tool call failed with an error. +The tool call failed with an error. + + ## ToolCallUpdate An update to an existing tool call. @@ -3707,7 +3732,6 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - ToolCallContent[] | null} > Replace the content collection. @@ -3746,45 +3770,47 @@ See protocol docs: [Creating](https://agentclientprotocol.com/protocol/tool-call **Type:** Union - Reading files or data. +Reading files or data. - Modifying files or content. +Modifying files or content. - Removing files or data. +Removing files or data. - Moving or renaming files. +Moving or renaming files. - Searching for information. +Searching for information. - Running commands or code. +Running commands or code. - Internal reasoning or planning. +Internal reasoning or planning. - Retrieving external data. +Retrieving external data. - Switching the current session mode. +Switching the current session mode. - Other tool types (default). +Other tool types (default). + + ## UnstructuredCommandInput All text that was typed after the command name is provided as input. @@ -3799,8 +3825,8 @@ metadata to their interactions. Implementations MUST NOT make assumptions about these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - A hint to display when the input hasn't been provided yet + diff --git a/schema/meta.json b/schema/meta.json index 8dc36e94f..e7b278b98 100644 --- a/schema/meta.json +++ b/schema/meta.json @@ -24,4 +24,4 @@ "terminal_wait_for_exit": "terminal/wait_for_exit" }, "version": 1 -} +} \ No newline at end of file diff --git a/schema/meta.unstable.json b/schema/meta.unstable.json index 6d1dd249a..24306728c 100644 --- a/schema/meta.unstable.json +++ b/schema/meta.unstable.json @@ -45,4 +45,4 @@ "cancel_request": "$/cancel_request" }, "version": 1 -} +} \ No newline at end of file diff --git a/schema/meta.v2.unstable.json b/schema/meta.v2.unstable.json index 462086fd4..7503a6edf 100644 --- a/schema/meta.v2.unstable.json +++ b/schema/meta.v2.unstable.json @@ -45,4 +45,4 @@ "cancel_request": "$/cancel_request" }, "version": 2 -} +} \ No newline at end of file diff --git a/schema/schema.json b/schema/schema.json index d6c327e83..37e7bdab7 100644 --- a/schema/schema.json +++ b/schema/schema.json @@ -6,7 +6,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "loadSession": { "default": false, @@ -34,7 +37,8 @@ "default": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "description": "Prompt capabilities supported by the agent." }, @@ -85,7 +89,9 @@ ] } }, - "required": ["method"], + "required": [ + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -191,7 +197,10 @@ ] } }, - "required": ["id", "method"], + "required": [ + "id", + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -296,7 +305,10 @@ "description": "All possible responses that an agent can send to a client.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `ClientRequest` variants." } }, - "required": ["id", "result"], + "required": [ + "id", + "result" + ], "title": "Result", "type": "object" }, @@ -309,7 +321,10 @@ "$ref": "#/$defs/RequestId" } }, - "required": ["id", "error"], + "required": [ + "id", + "error" + ], "title": "Error", "type": "object" } @@ -322,20 +337,32 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "audience": { "items": { "$ref": "#/$defs/Role" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "lastModified": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "priority": { "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] } }, "type": "object" @@ -346,7 +373,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -365,7 +395,10 @@ "type": "string" } }, - "required": ["data", "mimeType"], + "required": [ + "data", + "mimeType" + ], "type": "object" }, "AuthMethod": { @@ -388,11 +421,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description providing more details about this authentication method.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "description": "Unique identifier for this authentication method.", @@ -403,7 +442,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "AuthenticateRequest": { @@ -412,14 +454,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "methodId": { "description": "The ID of the authentication method to use.\nMust be one of the methods advertised in the initialize response.", "type": "string" } }, - "required": ["methodId"], + "required": [ + "methodId" + ], "type": "object", "x-method": "authenticate", "x-side": "agent" @@ -430,7 +477,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -443,7 +493,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Human-readable description of what the command does.", @@ -465,7 +518,10 @@ "type": "string" } }, - "required": ["name", "description"], + "required": [ + "name", + "description" + ], "type": "object" }, "AvailableCommandInput": { @@ -488,7 +544,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "availableCommands": { "description": "Commands the agent can execute", @@ -498,7 +557,9 @@ "type": "array" } }, - "required": ["availableCommands"], + "required": [ + "availableCommands" + ], "type": "object" }, "BlobResourceContents": { @@ -507,19 +568,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "blob": { "type": "string" }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "uri": { "type": "string" } }, - "required": ["blob", "uri"], + "required": [ + "blob", + "uri" + ], "type": "object" }, "CancelNotification": { @@ -528,7 +598,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -539,7 +612,9 @@ "description": "The ID of the session to cancel operations for." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/cancel", "x-side": "agent" @@ -550,7 +625,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "fs": { "allOf": [ @@ -608,7 +686,9 @@ ] } }, - "required": ["method"], + "required": [ + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -732,7 +812,10 @@ ] } }, - "required": ["id", "method"], + "required": [ + "id", + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -821,7 +904,10 @@ "description": "All possible responses that a client can send to an agent.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `AgentRequest` variants." } }, - "required": ["id", "result"], + "required": [ + "id", + "result" + ], "title": "Result", "type": "object" }, @@ -834,7 +920,10 @@ "$ref": "#/$defs/RequestId" } }, - "required": ["id", "error"], + "required": [ + "id", + "error" + ], "title": "Error", "type": "object" } @@ -847,7 +936,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -858,7 +950,9 @@ "description": "The ID of the session to close." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/close", "x-side": "agent" @@ -869,7 +963,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -882,7 +979,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "The full set of configuration options and their current values.", @@ -892,7 +992,9 @@ "type": "array" } }, - "required": ["configOptions"], + "required": [ + "configOptions" + ], "type": "object" }, "Content": { @@ -901,7 +1003,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "allOf": [ @@ -912,7 +1017,9 @@ "description": "The actual content block." } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object" }, "ContentBlock": { @@ -934,7 +1041,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -950,7 +1059,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -966,7 +1077,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -982,7 +1095,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -998,7 +1113,27 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], + "type": "object" + }, + { + "allOf": [ + { + "$ref": "#/$defs/PromptTemplateContent" + } + ], + "description": "A template that supports variable substitution using {{variable_name}} syntax.\n\nAllows dynamic content generation by substituting variables into template strings.\nVariables are resolved at processing time and can include values from context,\nuser input, or system state.\n\nRequires the `promptVariables` prompt capability when included in prompts.", + "properties": { + "type": { + "const": "prompt_template", + "type": "string" + } + }, + "required": [ + "type" + ], "type": "object" } ] @@ -1009,7 +1144,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "allOf": [ @@ -1020,7 +1158,9 @@ "description": "A single item of content" } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object" }, "CreateTerminalRequest": { @@ -1029,7 +1169,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "args": { "description": "Array of command arguments.", @@ -1044,7 +1187,10 @@ }, "cwd": { "description": "Working directory for the command (absolute path).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "env": { "description": "Environment variables for the command.", @@ -1057,7 +1203,10 @@ "description": "Maximum number of output bytes to retain.\n\nWhen the limit is exceeded, the Client truncates from the beginning of the output\nto stay within the limit.\n\nThe Client MUST ensure truncation happens at a character boundary to maintain valid\nstring output, even if this means the retained output is slightly less than the\nspecified limit.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "sessionId": { "allOf": [ @@ -1068,7 +1217,10 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "command"], + "required": [ + "sessionId", + "command" + ], "type": "object", "x-method": "terminal/create", "x-side": "client" @@ -1079,14 +1231,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "terminalId": { "description": "The unique identifier for the created terminal.", "type": "string" } }, - "required": ["terminalId"], + "required": [ + "terminalId" + ], "type": "object", "x-method": "terminal/create", "x-side": "client" @@ -1097,7 +1254,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "currentModeId": { "allOf": [ @@ -1108,7 +1268,9 @@ "description": "The ID of the current mode" } }, - "required": ["currentModeId"], + "required": [ + "currentModeId" + ], "type": "object" }, "Diff": { @@ -1117,7 +1279,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "newText": { "description": "The new content after modification.", @@ -1125,14 +1290,20 @@ }, "oldText": { "description": "The original content (None for new files).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "path": { "description": "The file path being modified.", "type": "string" } }, - "required": ["path", "newText"], + "required": [ + "path", + "newText" + ], "type": "object" }, "EmbeddedResource": { @@ -1141,7 +1312,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -1157,7 +1331,9 @@ "$ref": "#/$defs/EmbeddedResourceResource" } }, - "required": ["resource"], + "required": [ + "resource" + ], "type": "object" }, "EmbeddedResourceResource": { @@ -1187,7 +1363,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "The name of the environment variable.", @@ -1198,7 +1377,10 @@ "type": "string" } }, - "required": ["name", "value"], + "required": [ + "name", + "value" + ], "type": "object" }, "Error": { @@ -1220,7 +1402,10 @@ "type": "string" } }, - "required": ["code", "message"], + "required": [ + "code", + "message" + ], "type": "object" }, "ErrorCode": { @@ -1298,7 +1483,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "readTextFile": { "default": false, @@ -1319,7 +1507,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "The name of the HTTP header.", @@ -1330,7 +1521,10 @@ "type": "string" } }, - "required": ["name", "value"], + "required": [ + "name", + "value" + ], "type": "object" }, "ImageContent": { @@ -1339,7 +1533,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -1358,10 +1555,16 @@ "type": "string" }, "uri": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["data", "mimeType"], + "required": [ + "data", + "mimeType" + ], "type": "object" }, "Implementation": { @@ -1370,7 +1573,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "Intended for programmatic or logical use, but can be used as a display\nname fallback if title isn’t present.", @@ -1378,14 +1584,20 @@ }, "title": { "description": "Intended for UI and end-user contexts — optimized to be human-readable\nand easily understood.\n\nIf not provided, the name should be used for display.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "version": { "description": "Version of the implementation. Can be displayed to the user or used\nfor debugging or metrics purposes. (e.g. \"1.0.0\").", "type": "string" } }, - "required": ["name", "version"], + "required": [ + "name", + "version" + ], "type": "object" }, "InitializeRequest": { @@ -1394,7 +1606,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "clientCapabilities": { "allOf": [ @@ -1431,7 +1646,9 @@ "description": "The latest protocol version supported by the client." } }, - "required": ["protocolVersion"], + "required": [ + "protocolVersion" + ], "type": "object", "x-method": "initialize", "x-side": "agent" @@ -1442,7 +1659,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "agentCapabilities": { "allOf": [ @@ -1459,7 +1679,8 @@ "promptCapabilities": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "sessionCapabilities": {} }, @@ -1493,7 +1714,9 @@ "description": "The protocol version the client specified if supported by the agent,\nor the latest protocol version supported by the agent.\n\nThe client should disconnect, if it doesn't support this version." } }, - "required": ["protocolVersion"], + "required": [ + "protocolVersion" + ], "type": "object", "x-method": "initialize", "x-side": "agent" @@ -1504,7 +1727,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -1519,7 +1745,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/kill", "x-side": "client" @@ -1530,7 +1759,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -1543,15 +1775,24 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "cursor": { "description": "Opaque cursor token from a previous response's nextCursor field for cursor-based pagination", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "cwd": { "description": "Filter sessions by working directory. Must be an absolute path.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object", @@ -1564,11 +1805,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "nextCursor": { "description": "Opaque cursor token. If present, pass this in the next request's cursor parameter\nto fetch the next page. If absent, there are no more results.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "sessions": { "description": "Array of session information objects", @@ -1578,7 +1825,9 @@ "type": "array" } }, - "required": ["sessions"], + "required": [ + "sessions" + ], "type": "object", "x-method": "session/list", "x-side": "agent" @@ -1589,7 +1838,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "cwd": { "description": "The working directory for this session.", @@ -1611,7 +1863,11 @@ "description": "The ID of the session to load." } }, - "required": ["mcpServers", "cwd", "sessionId"], + "required": [ + "mcpServers", + "cwd", + "sessionId" + ], "type": "object", "x-method": "session/load", "x-side": "agent" @@ -1622,14 +1878,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "modes": { "anyOf": [ @@ -1653,7 +1915,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "http": { "default": false, @@ -1683,7 +1948,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1699,7 +1966,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1720,7 +1989,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "headers": { "description": "HTTP headers to set when making requests to the MCP server.", @@ -1738,7 +2010,11 @@ "type": "string" } }, - "required": ["name", "url", "headers"], + "required": [ + "name", + "url", + "headers" + ], "type": "object" }, "McpServerSse": { @@ -1747,7 +2023,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "headers": { "description": "HTTP headers to set when making requests to the MCP server.", @@ -1765,7 +2044,11 @@ "type": "string" } }, - "required": ["name", "url", "headers"], + "required": [ + "name", + "url", + "headers" + ], "type": "object" }, "McpServerStdio": { @@ -1774,7 +2057,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "args": { "description": "Command-line arguments to pass to the MCP server.", @@ -1799,7 +2085,12 @@ "type": "string" } }, - "required": ["name", "command", "args", "env"], + "required": [ + "name", + "command", + "args", + "env" + ], "type": "object" }, "NewSessionRequest": { @@ -1808,7 +2099,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "cwd": { "description": "The working directory for this session. Must be an absolute path.", @@ -1822,7 +2116,10 @@ "type": "array" } }, - "required": ["cwd", "mcpServers"], + "required": [ + "cwd", + "mcpServers" + ], "type": "object", "x-method": "session/new", "x-side": "agent" @@ -1833,14 +2130,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "modes": { "anyOf": [ @@ -1862,7 +2165,9 @@ "description": "Unique identifier for the created session.\n\nUsed in all subsequent requests for this conversation." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/new", "x-side": "agent" @@ -1873,7 +2178,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "kind": { "allOf": [ @@ -1896,7 +2204,11 @@ "description": "Unique identifier for this permission option." } }, - "required": ["optionId", "name", "kind"], + "required": [ + "optionId", + "name", + "kind" + ], "type": "object" }, "PermissionOptionId": { @@ -1934,7 +2246,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "entries": { "description": "The list of tasks to be accomplished.\n\nWhen updating a plan, the agent must send a complete list of all entries\nwith their current status. The client replaces the entire plan with each update.", @@ -1944,7 +2259,9 @@ "type": "array" } }, - "required": ["entries"], + "required": [ + "entries" + ], "type": "object" }, "PlanEntry": { @@ -1953,7 +2270,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Human-readable description of what this task aims to accomplish.", @@ -1976,7 +2296,11 @@ "description": "Current execution status of this task." } }, - "required": ["content", "priority", "status"], + "required": [ + "content", + "priority", + "status" + ], "type": "object" }, "PlanEntryPriority": { @@ -2025,7 +2349,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "audio": { "default": false, @@ -2041,6 +2368,11 @@ "default": false, "description": "Agent supports [`ContentBlock::Image`].", "type": "boolean" + }, + "promptVariables": { + "default": false, + "description": "Agent supports prompt variables and templates in `session/prompt` requests.\n\nWhen enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`]\nin prompt requests with variable substitution support.", + "type": "boolean" } }, "type": "object" @@ -2051,7 +2383,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "prompt": { "description": "The blocks of content that compose the user's message.\n\nAs a baseline, the Agent MUST support [`ContentBlock::Text`] and [`ContentBlock::ResourceLink`],\nwhile other variants are optionally enabled via [`PromptCapabilities`].\n\nThe Client MUST adapt its interface according to [`PromptCapabilities`].\n\nThe client MAY include referenced pieces of context as either\n[`ContentBlock::Resource`] or [`ContentBlock::ResourceLink`].\n\nWhen available, [`ContentBlock::Resource`] is preferred\nas it avoids extra round-trips and allows the message to include\npieces of context from sources the agent may not have access to.", @@ -2069,7 +2404,10 @@ "description": "The ID of the session to send this user message to" } }, - "required": ["sessionId", "prompt"], + "required": [ + "sessionId", + "prompt" + ], "type": "object", "x-method": "session/prompt", "x-side": "agent" @@ -2080,7 +2418,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "stopReason": { "allOf": [ @@ -2091,11 +2432,174 @@ "description": "Indicates why the agent stopped processing the turn." } }, - "required": ["stopReason"], + "required": [ + "stopReason" + ], "type": "object", "x-method": "session/prompt", "x-side": "agent" }, + "PromptTemplateContent": { + "description": "A template content block that supports variable substitution.\n\nTemplates use {{variable_name}} syntax for variable placeholders that can be\nsubstituted with actual values at processing time. This enables dynamic content\ngeneration and reusable prompt templates.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": [ + "object", + "null" + ] + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "template": { + "description": "The template string with {{variable_name}} placeholders.", + "type": "string" + }, + "variables": { + "description": "Variables available for substitution in this template.", + "items": { + "$ref": "#/$defs/PromptVariable" + }, + "type": "array" + } + }, + "required": [ + "template", + "variables" + ], + "type": "object" + }, + "PromptVariable": { + "description": "A variable that can be substituted in a prompt template.\n\nVariables define named placeholders that can be replaced with actual values\nduring template processing. They can include metadata about expected types,\ndescriptions for user interfaces, and validation constraints.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": [ + "object", + "null" + ] + }, + "default_value": { + "description": "Default value to use if no value is provided.", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "Human-readable description of this variable.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The variable name (used in {{variable_name}} placeholders).", + "type": "string" + }, + "required": { + "default": false, + "description": "Whether this variable is required for template processing.", + "type": "boolean" + }, + "type": { + "anyOf": [ + { + "$ref": "#/$defs/PromptVariableType" + }, + { + "type": "null" + } + ], + "description": "The expected type of this variable's value." + }, + "value": { + "description": "The current value of the variable (if set).", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "PromptVariableType": { + "description": "The expected type of a prompt variable's value.\n\nThis helps clients provide appropriate input interfaces and validation\nfor prompt variables.", + "oneOf": [ + { + "const": "string", + "description": "A string value (default if not specified).", + "type": "string" + }, + { + "const": "number", + "description": "A numeric value (integer or float).", + "type": "string" + }, + { + "const": "boolean", + "description": "A boolean value (true/false).", + "type": "string" + }, + { + "const": "date_time", + "description": "A date/time value in ISO 8601 format.", + "type": "string" + }, + { + "const": "url", + "description": "A URL or URI reference.", + "type": "string" + }, + { + "const": "email", + "description": "An email address.", + "type": "string" + }, + { + "const": "text", + "description": "A multiline text value.", + "type": "string" + }, + { + "additionalProperties": false, + "description": "A value selected from a predefined list (enum-like).", + "properties": { + "select": { + "properties": { + "options": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options" + ], + "type": "object" + } + }, + "required": [ + "select" + ], + "type": "object" + } + ] + }, "ProtocolVersion": { "description": "Protocol version identifier.\n\nThis version is only bumped for breaking changes.\nNon-breaking changes should be introduced via capabilities.", "format": "uint16", @@ -2109,19 +2613,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "limit": { "description": "Maximum number of lines to read.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "line": { "description": "Line number to start reading from (1-based).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "path": { "description": "Absolute path to the file to read.", @@ -2136,7 +2649,10 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "path"], + "required": [ + "sessionId", + "path" + ], "type": "object", "x-method": "fs/read_text_file", "x-side": "client" @@ -2147,13 +2663,18 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "type": "string" } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object", "x-method": "fs/read_text_file", "x-side": "client" @@ -2164,7 +2685,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -2179,7 +2703,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/release", "x-side": "client" @@ -2190,7 +2717,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -2229,7 +2759,9 @@ "type": "string" } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object" }, { @@ -2245,7 +2777,9 @@ "type": "string" } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object" } ] @@ -2256,7 +2790,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "options": { "description": "Available permission options for the user to choose from.", @@ -2282,7 +2819,11 @@ "description": "Details about the tool call requiring permission." } }, - "required": ["sessionId", "toolCall", "options"], + "required": [ + "sessionId", + "toolCall", + "options" + ], "type": "object", "x-method": "session/request_permission", "x-side": "client" @@ -2293,7 +2834,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "outcome": { "allOf": [ @@ -2304,7 +2848,9 @@ "description": "The user's decision on the permission request." } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object", "x-method": "session/request_permission", "x-side": "client" @@ -2315,7 +2861,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -2328,26 +2877,41 @@ ] }, "description": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "type": "string" }, "size": { "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "title": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "uri": { "type": "string" } }, - "required": ["name", "uri"], + "required": [ + "name", + "uri" + ], "type": "object" }, "ResumeSessionRequest": { @@ -2356,7 +2920,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "cwd": { "description": "The working directory for this session.", @@ -2378,7 +2945,10 @@ "description": "The ID of the session to resume." } }, - "required": ["sessionId", "cwd"], + "required": [ + "sessionId", + "cwd" + ], "type": "object", "x-method": "session/resume", "x-side": "agent" @@ -2389,14 +2959,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "modes": { "anyOf": [ @@ -2416,7 +2992,10 @@ }, "Role": { "description": "The sender or recipient of messages and data in a conversation.", - "enum": ["assistant", "user"], + "enum": [ + "assistant", + "user" + ], "type": "string" }, "SelectedPermissionOutcome": { @@ -2425,7 +3004,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "optionId": { "allOf": [ @@ -2436,7 +3018,9 @@ "description": "The ID of the option the user selected." } }, - "required": ["optionId"], + "required": [ + "optionId" + ], "type": "object" }, "SessionCapabilities": { @@ -2445,7 +3029,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "close": { "anyOf": [ @@ -2489,7 +3076,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2521,7 +3111,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" } ], @@ -2529,7 +3121,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "category": { "anyOf": [ @@ -2544,7 +3139,10 @@ }, "description": { "description": "Optional description for the Client to display to the user.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "allOf": [ @@ -2559,7 +3157,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "SessionConfigOptionCategory": { @@ -2607,7 +3208,10 @@ "description": "The set of selectable options." } }, - "required": ["currentValue", "options"], + "required": [ + "currentValue", + "options" + ], "type": "object" }, "SessionConfigSelectGroup": { @@ -2616,7 +3220,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "group": { "allOf": [ @@ -2638,7 +3245,11 @@ "type": "array" } }, - "required": ["group", "name", "options"], + "required": [ + "group", + "name", + "options" + ], "type": "object" }, "SessionConfigSelectOption": { @@ -2647,11 +3258,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description for this option value.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "description": "Human-readable label for this option value.", @@ -2666,7 +3283,10 @@ "description": "Unique identifier for this option value." } }, - "required": ["value", "name"], + "required": [ + "value", + "name" + ], "type": "object" }, "SessionConfigSelectOptions": { @@ -2704,7 +3324,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "cwd": { "description": "The working directory for this session. Must be an absolute path.", @@ -2720,14 +3343,23 @@ }, "title": { "description": "Human-readable title for the session", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "updatedAt": { "description": "ISO 8601 timestamp of last activity", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["sessionId", "cwd"], + "required": [ + "sessionId", + "cwd" + ], "type": "object" }, "SessionInfoUpdate": { @@ -2736,15 +3368,24 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "title": { "description": "Human-readable title for the session. Set to null to clear.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "updatedAt": { "description": "ISO 8601 timestamp of last activity. Set to null to clear.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -2755,7 +3396,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2766,10 +3410,16 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "$ref": "#/$defs/SessionModeId" @@ -2778,7 +3428,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "SessionModeId": { @@ -2791,7 +3444,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "availableModes": { "description": "The set of modes that the Agent can operate in", @@ -2809,7 +3465,10 @@ "description": "The current mode the Agent is in." } }, - "required": ["currentModeId", "availableModes"], + "required": [ + "currentModeId", + "availableModes" + ], "type": "object" }, "SessionNotification": { @@ -2818,7 +3477,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -2837,7 +3499,10 @@ "description": "The actual update content." } }, - "required": ["sessionId", "update"], + "required": [ + "sessionId", + "update" + ], "type": "object", "x-method": "session/update", "x-side": "client" @@ -2848,7 +3513,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2872,7 +3540,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -2888,7 +3558,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -2904,7 +3576,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -2920,7 +3594,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -2936,7 +3612,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -2952,7 +3630,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -2968,7 +3648,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -2984,7 +3666,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -3000,7 +3684,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -3016,7 +3702,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" } ] @@ -3027,7 +3715,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configId": { "allOf": [ @@ -3054,7 +3745,11 @@ "description": "The ID of the configuration option value to set." } }, - "required": ["sessionId", "configId", "value"], + "required": [ + "sessionId", + "configId", + "value" + ], "type": "object", "x-method": "session/set_config_option", "x-side": "agent" @@ -3065,7 +3760,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "The full set of configuration options and their current values.", @@ -3075,7 +3773,9 @@ "type": "array" } }, - "required": ["configOptions"], + "required": [ + "configOptions" + ], "type": "object", "x-method": "session/set_config_option", "x-side": "agent" @@ -3086,7 +3786,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "modeId": { "allOf": [ @@ -3105,7 +3808,10 @@ "description": "The ID of the session to set the mode for." } }, - "required": ["sessionId", "modeId"], + "required": [ + "sessionId", + "modeId" + ], "type": "object", "x-method": "session/set_mode", "x-side": "agent" @@ -3116,7 +3822,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3159,13 +3868,18 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "terminalId": { "type": "string" } }, - "required": ["terminalId"], + "required": [ + "terminalId" + ], "type": "object" }, "TerminalExitStatus": { @@ -3174,17 +3888,26 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitCode": { "description": "The process exit code (may be null if terminated by signal).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "signal": { "description": "The signal that terminated the process (may be null if exited normally).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -3195,7 +3918,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -3210,7 +3936,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/output", "x-side": "client" @@ -3221,7 +3950,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitStatus": { "anyOf": [ @@ -3243,7 +3975,10 @@ "type": "boolean" } }, - "required": ["output", "truncated"], + "required": [ + "output", + "truncated" + ], "type": "object", "x-method": "terminal/output", "x-side": "client" @@ -3254,7 +3989,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -3270,7 +4008,9 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "type": "object" }, "TextResourceContents": { @@ -3279,10 +4019,16 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "text": { "type": "string" @@ -3291,7 +4037,10 @@ "type": "string" } }, - "required": ["text", "uri"], + "required": [ + "text", + "uri" + ], "type": "object" }, "ToolCall": { @@ -3300,7 +4049,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Content produced by the tool call.", @@ -3351,7 +4103,10 @@ "description": "Unique identifier for this tool call within the session." } }, - "required": ["toolCallId", "title"], + "required": [ + "toolCallId", + "title" + ], "type": "object" }, "ToolCallContent": { @@ -3373,7 +4128,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -3389,7 +4146,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -3405,7 +4164,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" } ] @@ -3420,20 +4181,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "line": { "description": "Optional line number within the file.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "path": { "description": "The file path being accessed or modified.", "type": "string" } }, - "required": ["path"], + "required": [ + "path" + ], "type": "object" }, "ToolCallStatus": { @@ -3467,14 +4236,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Replace the content collection.", "items": { "$ref": "#/$defs/ToolCallContent" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "kind": { "anyOf": [ @@ -3492,7 +4267,10 @@ "items": { "$ref": "#/$defs/ToolCallLocation" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "rawInput": { "description": "Update the raw input." @@ -3513,7 +4291,10 @@ }, "title": { "description": "Update the human-readable title.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "toolCallId": { "allOf": [ @@ -3524,7 +4305,9 @@ "description": "The ID of the tool call being updated." } }, - "required": ["toolCallId"], + "required": [ + "toolCallId" + ], "type": "object" }, "ToolKind": { @@ -3588,14 +4371,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "hint": { "description": "A hint to display when the input hasn't been provided yet", "type": "string" } }, - "required": ["hint"], + "required": [ + "hint" + ], "type": "object" }, "WaitForTerminalExitRequest": { @@ -3604,7 +4392,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -3619,7 +4410,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/wait_for_exit", "x-side": "client" @@ -3630,17 +4424,26 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitCode": { "description": "The process exit code (may be null if terminated by signal).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "signal": { "description": "The signal that terminated the process (may be null if exited normally).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object", @@ -3653,7 +4456,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "The text content to write to the file.", @@ -3672,7 +4478,11 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "path", "content"], + "required": [ + "sessionId", + "path", + "content" + ], "type": "object", "x-method": "fs/write_text_file", "x-side": "client" @@ -3683,7 +4493,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3723,11 +4536,15 @@ "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", "properties": { "jsonrpc": { - "enum": ["2.0"], + "enum": [ + "2.0" + ], "type": "string" } }, - "required": ["jsonrpc"], + "required": [ + "jsonrpc" + ], "title": "Agent", "type": "object" }, @@ -3761,14 +4578,18 @@ "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", "properties": { "jsonrpc": { - "enum": ["2.0"], + "enum": [ + "2.0" + ], "type": "string" } }, - "required": ["jsonrpc"], + "required": [ + "jsonrpc" + ], "title": "Client", "type": "object" } ], "title": "Agent Client Protocol" -} +} \ No newline at end of file diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index b304602c4..97d1a18fc 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -6,7 +6,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "id": { "description": "The ID of the accepted suggestion.", @@ -21,7 +24,10 @@ "description": "The session ID for this notification." } }, - "required": ["sessionId", "id"], + "required": [ + "sessionId", + "id" + ], "type": "object", "x-method": "nes/accept", "x-side": "agent" @@ -32,7 +38,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "logout": { "anyOf": [ @@ -54,7 +63,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "auth": { "allOf": [ @@ -113,7 +125,8 @@ "default": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "description": "Prompt capabilities supported by the agent." }, @@ -184,7 +197,9 @@ ] } }, - "required": ["method"], + "required": [ + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -299,7 +314,10 @@ ] } }, - "required": ["id", "method"], + "required": [ + "id", + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -476,7 +494,10 @@ "description": "All possible responses that an agent can send to a client.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `ClientRequest` variants." } }, - "required": ["id", "result"], + "required": [ + "id", + "result" + ], "title": "Result", "type": "object" }, @@ -489,7 +510,10 @@ "$ref": "#/$defs/RequestId" } }, - "required": ["id", "error"], + "required": [ + "id", + "error" + ], "title": "Error", "type": "object" } @@ -502,20 +526,32 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "audience": { "items": { "$ref": "#/$defs/Role" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "lastModified": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "priority": { "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] } }, "type": "object" @@ -526,7 +562,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -545,7 +584,10 @@ "type": "string" } }, - "required": ["data", "mimeType"], + "required": [ + "data", + "mimeType" + ], "type": "object" }, "AuthCapabilities": { @@ -554,7 +596,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "terminal": { "default": false, @@ -570,11 +615,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "label": { "description": "Human-readable label for this variable, displayed in client UI.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "description": "The environment variable name (e.g. `\"OPENAI_API_KEY\"`).", @@ -591,7 +642,9 @@ "type": "boolean" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, "AuthMethod": { @@ -609,7 +662,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -625,7 +680,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -646,11 +703,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description providing more details about this authentication method.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "description": "Unique identifier for this authentication method.", @@ -661,7 +724,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "AuthMethodEnvVar": { @@ -670,11 +736,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description providing more details about this authentication method.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "description": "Unique identifier for this authentication method.", @@ -682,7 +754,10 @@ }, "link": { "description": "Optional link to a page where the user can obtain their credentials.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "description": "Human-readable name of the authentication method.", @@ -696,7 +771,11 @@ "type": "array" } }, - "required": ["id", "name", "vars"], + "required": [ + "id", + "name", + "vars" + ], "type": "object" }, "AuthMethodTerminal": { @@ -705,7 +784,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "args": { "description": "Additional arguments to pass when running the agent binary for terminal auth.", @@ -716,7 +798,10 @@ }, "description": { "description": "Optional description providing more details about this authentication method.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "env": { "additionalProperties": { @@ -734,7 +819,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "AuthenticateRequest": { @@ -743,14 +831,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "methodId": { "description": "The ID of the authentication method to use.\nMust be one of the methods advertised in the initialize response.", "type": "string" } }, - "required": ["methodId"], + "required": [ + "methodId" + ], "type": "object", "x-method": "authenticate", "x-side": "agent" @@ -761,7 +854,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -774,7 +870,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Human-readable description of what the command does.", @@ -796,7 +895,10 @@ "type": "string" } }, - "required": ["name", "description"], + "required": [ + "name", + "description" + ], "type": "object" }, "AvailableCommandInput": { @@ -819,7 +921,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "availableCommands": { "description": "Commands the agent can execute", @@ -829,7 +934,9 @@ "type": "array" } }, - "required": ["availableCommands"], + "required": [ + "availableCommands" + ], "type": "object" }, "BlobResourceContents": { @@ -838,19 +945,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "blob": { "type": "string" }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "uri": { "type": "string" } }, - "required": ["blob", "uri"], + "required": [ + "blob", + "uri" + ], "type": "object" }, "BooleanPropertySchema": { @@ -858,15 +974,24 @@ "properties": { "default": { "description": "Default value.", - "type": ["boolean", "null"] + "type": [ + "boolean", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -877,7 +1002,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -888,7 +1016,9 @@ "description": "The ID of the session to cancel operations for." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/cancel", "x-side": "agent" @@ -899,7 +1029,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "requestId": { "allOf": [ @@ -910,7 +1043,9 @@ "description": "The ID of the request to cancel." } }, - "required": ["requestId"], + "required": [ + "requestId" + ], "type": "object", "x-method": "$/cancel_request", "x-side": "protocol" @@ -921,7 +1056,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "auth": { "allOf": [ @@ -989,7 +1127,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "jump": { "anyOf": [ @@ -1126,7 +1267,9 @@ ] } }, - "required": ["method"], + "required": [ + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -1331,7 +1474,10 @@ ] } }, - "required": ["id", "method"], + "required": [ + "id", + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -1428,7 +1574,10 @@ "description": "All possible responses that a client can send to an agent.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `AgentRequest` variants." } }, - "required": ["id", "result"], + "required": [ + "id", + "result" + ], "title": "Result", "type": "object" }, @@ -1441,7 +1590,10 @@ "$ref": "#/$defs/RequestId" } }, - "required": ["id", "error"], + "required": [ + "id", + "error" + ], "title": "Error", "type": "object" } @@ -1454,7 +1606,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -1465,7 +1620,9 @@ "description": "The ID of the NES session to close." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "nes/close", "x-side": "agent" @@ -1476,7 +1633,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -1489,7 +1649,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -1500,7 +1663,9 @@ "description": "The ID of the session to close." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/close", "x-side": "agent" @@ -1511,7 +1676,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -1524,7 +1692,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "elicitationId": { "allOf": [ @@ -1535,7 +1706,9 @@ "description": "The ID of the elicitation that completed." } }, - "required": ["elicitationId"], + "required": [ + "elicitationId" + ], "type": "object", "x-method": "elicitation/complete", "x-side": "client" @@ -1546,7 +1719,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "The full set of configuration options and their current values.", @@ -1556,7 +1732,9 @@ "type": "array" } }, - "required": ["configOptions"], + "required": [ + "configOptions" + ], "type": "object" }, "Content": { @@ -1565,7 +1743,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "allOf": [ @@ -1576,7 +1757,9 @@ "description": "The actual content block." } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object" }, "ContentBlock": { @@ -1598,7 +1781,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1614,7 +1799,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1630,7 +1817,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1646,7 +1835,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1662,7 +1853,27 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], + "type": "object" + }, + { + "allOf": [ + { + "$ref": "#/$defs/PromptTemplateContent" + } + ], + "description": "A template that supports variable substitution using {{variable_name}} syntax.\n\nAllows dynamic content generation by substituting variables into template strings.\nVariables are resolved at processing time and can include values from context,\nuser input, or system state.\n\nRequires the `promptVariables` prompt capability when included in prompts.", + "properties": { + "type": { + "const": "prompt_template", + "type": "string" + } + }, + "required": [ + "type" + ], "type": "object" } ] @@ -1673,7 +1884,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "allOf": [ @@ -1685,10 +1899,15 @@ }, "messageId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA unique identifier for the message this chunk belongs to.\n\nAll chunks belonging to the same message share the same `messageId`.\nA change in `messageId` indicates a new message has started.\nBoth clients and agents MUST use UUID format for message IDs.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object" }, "Cost": { @@ -1704,7 +1923,10 @@ "type": "string" } }, - "required": ["amount", "currency"], + "required": [ + "amount", + "currency" + ], "type": "object" }, "CreateElicitationRequest": { @@ -1726,7 +1948,9 @@ "type": "string" } }, - "required": ["mode"], + "required": [ + "mode" + ], "type": "object" }, { @@ -1742,7 +1966,9 @@ "type": "string" } }, - "required": ["mode"], + "required": [ + "mode" + ], "type": "object" } ], @@ -1750,14 +1976,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "message": { "description": "A human-readable message describing what input is needed.", "type": "string" } }, - "required": ["message"], + "required": [ + "message" + ], "type": "object", "x-method": "elicitation/create", "x-side": "client" @@ -1781,7 +2012,9 @@ "type": "string" } }, - "required": ["action"], + "required": [ + "action" + ], "type": "object" }, { @@ -1792,7 +2025,9 @@ "type": "string" } }, - "required": ["action"], + "required": [ + "action" + ], "type": "object" }, { @@ -1803,7 +2038,9 @@ "type": "string" } }, - "required": ["action"], + "required": [ + "action" + ], "type": "object" } ], @@ -1811,7 +2048,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -1824,7 +2064,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "args": { "description": "Array of command arguments.", @@ -1839,7 +2082,10 @@ }, "cwd": { "description": "Working directory for the command (absolute path).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "env": { "description": "Environment variables for the command.", @@ -1852,7 +2098,10 @@ "description": "Maximum number of output bytes to retain.\n\nWhen the limit is exceeded, the Client truncates from the beginning of the output\nto stay within the limit.\n\nThe Client MUST ensure truncation happens at a character boundary to maintain valid\nstring output, even if this means the retained output is slightly less than the\nspecified limit.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "sessionId": { "allOf": [ @@ -1863,7 +2112,10 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "command"], + "required": [ + "sessionId", + "command" + ], "type": "object", "x-method": "terminal/create", "x-side": "client" @@ -1874,14 +2126,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "terminalId": { "description": "The unique identifier for the created terminal.", "type": "string" } }, - "required": ["terminalId"], + "required": [ + "terminalId" + ], "type": "object", "x-method": "terminal/create", "x-side": "client" @@ -1892,7 +2149,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "currentModeId": { "allOf": [ @@ -1903,7 +2163,9 @@ "description": "The ID of the current mode" } }, - "required": ["currentModeId"], + "required": [ + "currentModeId" + ], "type": "object" }, "DidChangeDocumentNotification": { @@ -1912,7 +2174,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "contentChanges": { "description": "The content changes.", @@ -1939,7 +2204,12 @@ "type": "integer" } }, - "required": ["sessionId", "uri", "version", "contentChanges"], + "required": [ + "sessionId", + "uri", + "version", + "contentChanges" + ], "type": "object", "x-method": "document/didChange", "x-side": "agent" @@ -1950,7 +2220,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -1965,7 +2238,10 @@ "type": "string" } }, - "required": ["sessionId", "uri"], + "required": [ + "sessionId", + "uri" + ], "type": "object", "x-method": "document/didClose", "x-side": "agent" @@ -1976,7 +2252,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "position": { "allOf": [ @@ -2012,7 +2291,13 @@ "description": "The portion of the file currently visible in the editor viewport." } }, - "required": ["sessionId", "uri", "version", "position", "visibleRange"], + "required": [ + "sessionId", + "uri", + "version", + "position", + "visibleRange" + ], "type": "object", "x-method": "document/didFocus", "x-side": "agent" @@ -2023,7 +2308,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "languageId": { "description": "The language identifier of the document (e.g., \"rust\", \"python\").", @@ -2051,7 +2339,13 @@ "type": "integer" } }, - "required": ["sessionId", "uri", "languageId", "version", "text"], + "required": [ + "sessionId", + "uri", + "languageId", + "version", + "text" + ], "type": "object", "x-method": "document/didOpen", "x-side": "agent" @@ -2062,7 +2356,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -2077,7 +2374,10 @@ "type": "string" } }, - "required": ["sessionId", "uri"], + "required": [ + "sessionId", + "uri" + ], "type": "object", "x-method": "document/didSave", "x-side": "agent" @@ -2088,7 +2388,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "newText": { "description": "The new content after modification.", @@ -2096,14 +2399,20 @@ }, "oldText": { "description": "The original content (None for new files).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "path": { "description": "The file path being modified.", "type": "string" } }, - "required": ["path", "newText"], + "required": [ + "path", + "newText" + ], "type": "object" }, "DisableProvidersRequest": { @@ -2112,14 +2421,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "id": { "description": "Provider id to disable.", "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "type": "object", "x-method": "providers/disable", "x-side": "agent" @@ -2130,7 +2444,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -2145,7 +2462,10 @@ "$ref": "#/$defs/ElicitationContentValue" }, "description": "The user-provided content, if any, as an object matching the requested schema.", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2156,7 +2476,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "form": { "anyOf": [ @@ -2218,7 +2541,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2255,7 +2581,9 @@ "description": "A JSON Schema describing the form fields to present to the user." } }, - "required": ["requestedSchema"], + "required": [ + "requestedSchema" + ], "type": "object" }, "ElicitationId": { @@ -2281,7 +2609,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -2297,7 +2627,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -2313,7 +2645,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -2329,7 +2663,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -2345,7 +2681,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" } ] @@ -2362,7 +2700,9 @@ "description": "The request this elicitation is tied to." } }, - "required": ["requestId"], + "required": [ + "requestId" + ], "type": "object" }, "ElicitationSchema": { @@ -2370,7 +2710,10 @@ "properties": { "description": { "description": "Optional description of what this schema represents.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "properties": { "additionalProperties": { @@ -2385,11 +2728,17 @@ "items": { "type": "string" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "title": { "description": "Optional title for the schema.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "type": { "allOf": [ @@ -2436,7 +2785,9 @@ "description": "Optional tool call within the session." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object" }, "ElicitationStringType": { @@ -2455,7 +2806,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2497,7 +2851,10 @@ "type": "string" } }, - "required": ["elicitationId", "url"], + "required": [ + "elicitationId", + "url" + ], "type": "object" }, "EmbeddedResource": { @@ -2506,7 +2863,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -2522,7 +2882,9 @@ "$ref": "#/$defs/EmbeddedResourceResource" } }, - "required": ["resource"], + "required": [ + "resource" + ], "type": "object" }, "EmbeddedResourceResource": { @@ -2558,7 +2920,10 @@ "type": "string" } }, - "required": ["const", "title"], + "required": [ + "const", + "title" + ], "type": "object" }, "EnvVariable": { @@ -2567,7 +2932,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "The name of the environment variable.", @@ -2578,7 +2946,10 @@ "type": "string" } }, - "required": ["name", "value"], + "required": [ + "name", + "value" + ], "type": "object" }, "Error": { @@ -2600,7 +2971,10 @@ "type": "string" } }, - "required": ["code", "message"], + "required": [ + "code", + "message" + ], "type": "object" }, "ErrorCode": { @@ -2692,7 +3066,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "readTextFile": { "default": false, @@ -2713,7 +3090,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the forked\nsession.", @@ -2742,7 +3122,10 @@ "description": "The ID of the session to fork." } }, - "required": ["sessionId", "cwd"], + "required": [ + "sessionId", + "cwd" + ], "type": "object", "x-method": "session/fork", "x-side": "agent" @@ -2753,14 +3136,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "models": { "anyOf": [ @@ -2793,7 +3182,9 @@ "description": "Unique identifier for the newly created forked session." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/fork", "x-side": "agent" @@ -2804,7 +3195,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "The name of the HTTP header.", @@ -2815,7 +3209,10 @@ "type": "string" } }, - "required": ["name", "value"], + "required": [ + "name", + "value" + ], "type": "object" }, "ImageContent": { @@ -2824,7 +3221,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -2843,10 +3243,16 @@ "type": "string" }, "uri": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["data", "mimeType"], + "required": [ + "data", + "mimeType" + ], "type": "object" }, "Implementation": { @@ -2855,7 +3261,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "Intended for programmatic or logical use, but can be used as a display\nname fallback if title isn’t present.", @@ -2863,14 +3272,20 @@ }, "title": { "description": "Intended for UI and end-user contexts — optimized to be human-readable\nand easily understood.\n\nIf not provided, the name should be used for display.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "version": { "description": "Version of the implementation. Can be displayed to the user or used\nfor debugging or metrics purposes. (e.g. \"1.0.0\").", "type": "string" } }, - "required": ["name", "version"], + "required": [ + "name", + "version" + ], "type": "object" }, "InitializeRequest": { @@ -2879,7 +3294,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "clientCapabilities": { "allOf": [ @@ -2919,7 +3337,9 @@ "description": "The latest protocol version supported by the client." } }, - "required": ["protocolVersion"], + "required": [ + "protocolVersion" + ], "type": "object", "x-method": "initialize", "x-side": "agent" @@ -2930,7 +3350,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "agentCapabilities": { "allOf": [ @@ -2948,7 +3371,8 @@ "promptCapabilities": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "sessionCapabilities": {} }, @@ -2982,7 +3406,9 @@ "description": "The protocol version the client specified if supported by the agent,\nor the latest protocol version supported by the agent.\n\nThe client should disconnect, if it doesn't support this version." } }, - "required": ["protocolVersion"], + "required": [ + "protocolVersion" + ], "type": "object", "x-method": "initialize", "x-side": "agent" @@ -2993,25 +3419,40 @@ "default": { "description": "Default value.", "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "maximum": { "description": "Maximum value (inclusive).", "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "minimum": { "description": "Minimum value (inclusive).", "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -3022,7 +3463,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -3037,7 +3481,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/kill", "x-side": "client" @@ -3048,7 +3495,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3061,7 +3511,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3074,7 +3527,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "providers": { "description": "Configurable providers with current routing info suitable for UI display.", @@ -3084,7 +3540,9 @@ "type": "array" } }, - "required": ["providers"], + "required": [ + "providers" + ], "type": "object", "x-method": "providers/list", "x-side": "agent" @@ -3095,7 +3553,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nFilter sessions by the exact ordered additional workspace roots. Each path must be absolute.\n\nThis filter applies only when the field is present and non-empty. When\nomitted or empty, no additional-root filter is applied.", @@ -3106,11 +3567,17 @@ }, "cursor": { "description": "Opaque cursor token from a previous response's nextCursor field for cursor-based pagination", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "cwd": { "description": "Filter sessions by working directory. Must be an absolute path.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object", @@ -3123,11 +3590,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "nextCursor": { "description": "Opaque cursor token. If present, pass this in the next request's cursor parameter\nto fetch the next page. If absent, there are no more results.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "sessions": { "description": "Array of session information objects", @@ -3137,7 +3610,9 @@ "type": "array" } }, - "required": ["sessions"], + "required": [ + "sessions" + ], "type": "object", "x-method": "session/list", "x-side": "agent" @@ -3183,7 +3658,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the loaded\nsession.", @@ -3212,7 +3690,11 @@ "description": "The ID of the session to load." } }, - "required": ["mcpServers", "cwd", "sessionId"], + "required": [ + "mcpServers", + "cwd", + "sessionId" + ], "type": "object", "x-method": "session/load", "x-side": "agent" @@ -3223,14 +3705,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "models": { "anyOf": [ @@ -3265,7 +3753,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3276,7 +3767,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3289,7 +3783,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3302,7 +3799,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "http": { "default": false, @@ -3332,7 +3832,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -3348,7 +3850,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -3369,7 +3873,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "headers": { "description": "HTTP headers to set when making requests to the MCP server.", @@ -3387,7 +3894,11 @@ "type": "string" } }, - "required": ["name", "url", "headers"], + "required": [ + "name", + "url", + "headers" + ], "type": "object" }, "McpServerSse": { @@ -3396,7 +3907,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "headers": { "description": "HTTP headers to set when making requests to the MCP server.", @@ -3414,7 +3928,11 @@ "type": "string" } }, - "required": ["name", "url", "headers"], + "required": [ + "name", + "url", + "headers" + ], "type": "object" }, "McpServerStdio": { @@ -3423,7 +3941,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "args": { "description": "Command-line arguments to pass to the MCP server.", @@ -3448,7 +3969,12 @@ "type": "string" } }, - "required": ["name", "command", "args", "env"], + "required": [ + "name", + "command", + "args", + "env" + ], "type": "object" }, "ModelId": { @@ -3461,11 +3987,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description of the model.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "modelId": { "allOf": [ @@ -3480,7 +4012,10 @@ "type": "string" } }, - "required": ["modelId", "name"], + "required": [ + "modelId", + "name" + ], "type": "object" }, "MultiSelectItems": { @@ -3514,11 +4049,17 @@ "items": { "type": "string" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "items": { "allOf": [ @@ -3532,20 +4073,31 @@ "description": "Maximum number of items to select.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "minItems": { "description": "Minimum number of items to select.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["items"], + "required": [ + "items" + ], "type": "object" }, "NesCapabilities": { @@ -3554,7 +4106,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "context": { "anyOf": [ @@ -3587,7 +4142,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "diagnostics": { "anyOf": [ @@ -3686,7 +4244,12 @@ "type": "string" } }, - "required": ["uri", "range", "severity", "message"], + "required": [ + "uri", + "range", + "severity", + "message" + ], "type": "object" }, "NesDiagnosticSeverity": { @@ -3720,7 +4283,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3731,7 +4297,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "syncKind": { "allOf": [ @@ -3742,7 +4311,9 @@ "description": "The sync kind the agent wants: `\"full\"` or `\"incremental\"`." } }, - "required": ["syncKind"], + "required": [ + "syncKind" + ], "type": "object" }, "NesDocumentDidCloseCapabilities": { @@ -3751,7 +4322,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3762,7 +4336,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3773,7 +4350,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3784,7 +4364,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3795,7 +4378,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "didChange": { "anyOf": [ @@ -3861,13 +4447,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "maxCount": { "description": "Maximum number of edit history entries the agent can use.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] } }, "type": "object" @@ -3884,7 +4476,10 @@ "type": "string" } }, - "required": ["uri", "diff"], + "required": [ + "uri", + "diff" + ], "type": "object" }, "NesEditSuggestion": { @@ -3917,7 +4512,11 @@ "type": "string" } }, - "required": ["id", "uri", "edits"], + "required": [ + "id", + "uri", + "edits" + ], "type": "object" }, "NesEventCapabilities": { @@ -3926,7 +4525,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "document": { "anyOf": [ @@ -3962,7 +4564,11 @@ "type": "string" } }, - "required": ["startLine", "endLine", "text"], + "required": [ + "startLine", + "endLine", + "text" + ], "type": "object" }, "NesJumpCapabilities": { @@ -3971,7 +4577,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3996,7 +4605,11 @@ "type": "string" } }, - "required": ["id", "uri", "position"], + "required": [ + "id", + "uri", + "position" + ], "type": "object" }, "NesOpenFile": { @@ -4010,7 +4623,10 @@ "description": "Timestamp in milliseconds since epoch of when the file was last focused.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "uri": { "description": "The URI of the file.", @@ -4028,7 +4644,10 @@ "description": "The visible range in the editor, if any." } }, - "required": ["uri", "languageId"], + "required": [ + "uri", + "languageId" + ], "type": "object" }, "NesOpenFilesCapabilities": { @@ -4037,7 +4656,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4058,7 +4680,11 @@ "type": "string" } }, - "required": ["uri", "languageId", "text"], + "required": [ + "uri", + "languageId", + "text" + ], "type": "object" }, "NesRecentFilesCapabilities": { @@ -4067,13 +4693,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "maxCount": { "description": "Maximum number of recent files the agent can use.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] } }, "type": "object" @@ -4118,7 +4750,10 @@ "type": "string" } }, - "required": ["uri", "excerpts"], + "required": [ + "uri", + "excerpts" + ], "type": "object" }, "NesRelatedSnippetsCapabilities": { @@ -4127,7 +4762,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4138,7 +4776,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4167,7 +4808,12 @@ "type": "string" } }, - "required": ["id", "uri", "position", "newName"], + "required": [ + "id", + "uri", + "position", + "newName" + ], "type": "object" }, "NesRepository": { @@ -4186,7 +4832,11 @@ "type": "string" } }, - "required": ["name", "owner", "remoteUrl"], + "required": [ + "name", + "owner", + "remoteUrl" + ], "type": "object" }, "NesSearchAndReplaceCapabilities": { @@ -4195,7 +4845,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4209,7 +4862,10 @@ }, "isRegex": { "description": "Whether `search` is a regular expression. Defaults to `false`.", - "type": ["boolean", "null"] + "type": [ + "boolean", + "null" + ] }, "replace": { "description": "The replacement text.", @@ -4224,7 +4880,12 @@ "type": "string" } }, - "required": ["id", "uri", "search", "replace"], + "required": [ + "id", + "uri", + "search", + "replace" + ], "type": "object" }, "NesSuggestContext": { @@ -4233,49 +4894,70 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "diagnostics": { "description": "Current diagnostics (errors, warnings).", "items": { "$ref": "#/$defs/NesDiagnostic" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "editHistory": { "description": "Recent edit history.", "items": { "$ref": "#/$defs/NesEditHistoryEntry" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "openFiles": { "description": "Currently open files in the editor.", "items": { "$ref": "#/$defs/NesOpenFile" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "recentFiles": { "description": "Recently accessed files.", "items": { "$ref": "#/$defs/NesRecentFile" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "relatedSnippets": { "description": "Related code snippets.", "items": { "$ref": "#/$defs/NesRelatedSnippet" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "userActions": { "description": "Recent user actions (typing, navigation, etc.).", "items": { "$ref": "#/$defs/NesUserAction" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] } }, "type": "object" @@ -4299,7 +4981,9 @@ "type": "string" } }, - "required": ["kind"], + "required": [ + "kind" + ], "type": "object" }, { @@ -4315,7 +4999,9 @@ "type": "string" } }, - "required": ["kind"], + "required": [ + "kind" + ], "type": "object" }, { @@ -4331,7 +5017,9 @@ "type": "string" } }, - "required": ["kind"], + "required": [ + "kind" + ], "type": "object" }, { @@ -4347,7 +5035,9 @@ "type": "string" } }, - "required": ["kind"], + "required": [ + "kind" + ], "type": "object" } ] @@ -4368,7 +5058,10 @@ "description": "The range to replace." } }, - "required": ["range", "newText"], + "required": [ + "range", + "newText" + ], "type": "object" }, "NesTriggerKind": { @@ -4417,7 +5110,12 @@ "type": "string" } }, - "required": ["action", "uri", "position", "timestampMs"], + "required": [ + "action", + "uri", + "position", + "timestampMs" + ], "type": "object" }, "NesUserActionsCapabilities": { @@ -4426,13 +5124,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "maxCount": { "description": "Maximum number of user actions the agent can use.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] } }, "type": "object" @@ -4443,7 +5147,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots for this session. Each path must be absolute.\n\nThese expand the session's filesystem scope without changing `cwd`, which\nremains the base for relative paths. When omitted or empty, no\nadditional roots are activated for the new session.", @@ -4464,7 +5171,10 @@ "type": "array" } }, - "required": ["cwd", "mcpServers"], + "required": [ + "cwd", + "mcpServers" + ], "type": "object", "x-method": "session/new", "x-side": "agent" @@ -4475,14 +5185,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "models": { "anyOf": [ @@ -4515,7 +5231,9 @@ "description": "Unique identifier for the created session.\n\nUsed in all subsequent requests for this conversation." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/new", "x-side": "agent" @@ -4526,25 +5244,40 @@ "default": { "description": "Default value.", "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "maximum": { "description": "Maximum value (inclusive).", "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] }, "minimum": { "description": "Minimum value (inclusive).", "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -4555,7 +5288,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "kind": { "allOf": [ @@ -4578,7 +5314,11 @@ "description": "Unique identifier for this permission option." } }, - "required": ["optionId", "name", "kind"], + "required": [ + "optionId", + "name", + "kind" + ], "type": "object" }, "PermissionOptionId": { @@ -4616,7 +5356,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "entries": { "description": "The list of tasks to be accomplished.\n\nWhen updating a plan, the agent must send a complete list of all entries\nwith their current status. The client replaces the entire plan with each update.", @@ -4626,7 +5369,9 @@ "type": "array" } }, - "required": ["entries"], + "required": [ + "entries" + ], "type": "object" }, "PlanEntry": { @@ -4635,7 +5380,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Human-readable description of what this task aims to accomplish.", @@ -4658,7 +5406,11 @@ "description": "Current execution status of this task." } }, - "required": ["content", "priority", "status"], + "required": [ + "content", + "priority", + "status" + ], "type": "object" }, "PlanEntryPriority": { @@ -4717,7 +5469,10 @@ "type": "integer" } }, - "required": ["line", "character"], + "required": [ + "line", + "character" + ], "type": "object" }, "PositionEncodingKind": { @@ -4746,7 +5501,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "audio": { "default": false, @@ -4762,6 +5520,11 @@ "default": false, "description": "Agent supports [`ContentBlock::Image`].", "type": "boolean" + }, + "promptVariables": { + "default": false, + "description": "Agent supports prompt variables and templates in `session/prompt` requests.\n\nWhen enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`]\nin prompt requests with variable substitution support.", + "type": "boolean" } }, "type": "object" @@ -4772,11 +5535,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "messageId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA client-generated unique identifier for this user message.\n\nIf provided, the Agent SHOULD echo this value as `userMessageId` in the\n[`PromptResponse`] to confirm it was recorded.\nBoth clients and agents MUST use UUID format for message IDs.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "prompt": { "description": "The blocks of content that compose the user's message.\n\nAs a baseline, the Agent MUST support [`ContentBlock::Text`] and [`ContentBlock::ResourceLink`],\nwhile other variants are optionally enabled via [`PromptCapabilities`].\n\nThe Client MUST adapt its interface according to [`PromptCapabilities`].\n\nThe client MAY include referenced pieces of context as either\n[`ContentBlock::Resource`] or [`ContentBlock::ResourceLink`].\n\nWhen available, [`ContentBlock::Resource`] is preferred\nas it avoids extra round-trips and allows the message to include\npieces of context from sources the agent may not have access to.", @@ -4794,7 +5563,10 @@ "description": "The ID of the session to send this user message to" } }, - "required": ["sessionId", "prompt"], + "required": [ + "sessionId", + "prompt" + ], "type": "object", "x-method": "session/prompt", "x-side": "agent" @@ -4805,7 +5577,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "stopReason": { "allOf": [ @@ -4828,14 +5603,180 @@ }, "userMessageId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nThe acknowledged user message ID.\n\nIf the client provided a `messageId` in the [`PromptRequest`], the agent echoes it here\nto confirm it was recorded. If the client did not provide one, the agent MAY assign one\nand return it here. Absence of this field indicates the agent did not record a message ID.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["stopReason"], + "required": [ + "stopReason" + ], "type": "object", "x-method": "session/prompt", "x-side": "agent" }, + "PromptTemplateContent": { + "description": "A template content block that supports variable substitution.\n\nTemplates use {{variable_name}} syntax for variable placeholders that can be\nsubstituted with actual values at processing time. This enables dynamic content\ngeneration and reusable prompt templates.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": [ + "object", + "null" + ] + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "template": { + "description": "The template string with {{variable_name}} placeholders.", + "type": "string" + }, + "variables": { + "description": "Variables available for substitution in this template.", + "items": { + "$ref": "#/$defs/PromptVariable" + }, + "type": "array" + } + }, + "required": [ + "template", + "variables" + ], + "type": "object" + }, + "PromptVariable": { + "description": "A variable that can be substituted in a prompt template.\n\nVariables define named placeholders that can be replaced with actual values\nduring template processing. They can include metadata about expected types,\ndescriptions for user interfaces, and validation constraints.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": [ + "object", + "null" + ] + }, + "default_value": { + "description": "Default value to use if no value is provided.", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "Human-readable description of this variable.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The variable name (used in {{variable_name}} placeholders).", + "type": "string" + }, + "required": { + "default": false, + "description": "Whether this variable is required for template processing.", + "type": "boolean" + }, + "type": { + "anyOf": [ + { + "$ref": "#/$defs/PromptVariableType" + }, + { + "type": "null" + } + ], + "description": "The expected type of this variable's value." + }, + "value": { + "description": "The current value of the variable (if set).", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "PromptVariableType": { + "description": "The expected type of a prompt variable's value.\n\nThis helps clients provide appropriate input interfaces and validation\nfor prompt variables.", + "oneOf": [ + { + "const": "string", + "description": "A string value (default if not specified).", + "type": "string" + }, + { + "const": "number", + "description": "A numeric value (integer or float).", + "type": "string" + }, + { + "const": "boolean", + "description": "A boolean value (true/false).", + "type": "string" + }, + { + "const": "date_time", + "description": "A date/time value in ISO 8601 format.", + "type": "string" + }, + { + "const": "url", + "description": "A URL or URI reference.", + "type": "string" + }, + { + "const": "email", + "description": "An email address.", + "type": "string" + }, + { + "const": "text", + "description": "A multiline text value.", + "type": "string" + }, + { + "additionalProperties": false, + "description": "A value selected from a predefined list (enum-like).", + "properties": { + "select": { + "properties": { + "options": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options" + ], + "type": "object" + } + }, + "required": [ + "select" + ], + "type": "object" + } + ] + }, "ProtocolVersion": { "description": "Protocol version identifier.\n\nThis version is only bumped for breaking changes.\nNon-breaking changes should be introduced via capabilities.", "format": "uint16", @@ -4859,7 +5800,10 @@ "type": "string" } }, - "required": ["apiType", "baseUrl"], + "required": [ + "apiType", + "baseUrl" + ], "type": "object" }, "ProviderInfo": { @@ -4868,7 +5812,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "current": { "anyOf": [ @@ -4897,7 +5844,11 @@ "type": "array" } }, - "required": ["id", "supported", "required"], + "required": [ + "id", + "supported", + "required" + ], "type": "object" }, "ProvidersCapabilities": { @@ -4906,7 +5857,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4931,7 +5885,10 @@ "description": "The start position (inclusive)." } }, - "required": ["start", "end"], + "required": [ + "start", + "end" + ], "type": "object" }, "ReadTextFileRequest": { @@ -4940,19 +5897,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "limit": { "description": "Maximum number of lines to read.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "line": { "description": "Line number to start reading from (1-based).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "path": { "description": "Absolute path to the file to read.", @@ -4967,7 +5933,10 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "path"], + "required": [ + "sessionId", + "path" + ], "type": "object", "x-method": "fs/read_text_file", "x-side": "client" @@ -4978,13 +5947,18 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "type": "string" } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object", "x-method": "fs/read_text_file", "x-side": "client" @@ -4995,7 +5969,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "id": { "description": "The ID of the rejected suggestion.", @@ -5021,7 +5998,10 @@ "description": "The session ID for this notification." } }, - "required": ["sessionId", "id"], + "required": [ + "sessionId", + "id" + ], "type": "object", "x-method": "nes/reject", "x-side": "agent" @@ -5032,7 +6012,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -5047,7 +6030,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/release", "x-side": "client" @@ -5058,7 +6044,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -5097,7 +6086,9 @@ "type": "string" } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object" }, { @@ -5113,7 +6104,9 @@ "type": "string" } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object" } ] @@ -5124,7 +6117,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "options": { "description": "Available permission options for the user to choose from.", @@ -5150,7 +6146,11 @@ "description": "Details about the tool call requiring permission." } }, - "required": ["sessionId", "toolCall", "options"], + "required": [ + "sessionId", + "toolCall", + "options" + ], "type": "object", "x-method": "session/request_permission", "x-side": "client" @@ -5161,7 +6161,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "outcome": { "allOf": [ @@ -5172,7 +6175,9 @@ "description": "The user's decision on the permission request." } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object", "x-method": "session/request_permission", "x-side": "client" @@ -5183,7 +6188,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -5196,26 +6204,41 @@ ] }, "description": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "type": "string" }, "size": { "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "title": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "uri": { "type": "string" } }, - "required": ["name", "uri"], + "required": [ + "name", + "uri" + ], "type": "object" }, "ResumeSessionRequest": { @@ -5224,7 +6247,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the resumed\nsession.", @@ -5253,7 +6279,10 @@ "description": "The ID of the session to resume." } }, - "required": ["sessionId", "cwd"], + "required": [ + "sessionId", + "cwd" + ], "type": "object", "x-method": "session/resume", "x-side": "agent" @@ -5264,14 +6293,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "models": { "anyOf": [ @@ -5302,7 +6337,10 @@ }, "Role": { "description": "The sender or recipient of messages and data in a conversation.", - "enum": ["assistant", "user"], + "enum": [ + "assistant", + "user" + ], "type": "string" }, "SelectedPermissionOutcome": { @@ -5311,7 +6349,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "optionId": { "allOf": [ @@ -5322,7 +6363,9 @@ "description": "The ID of the option the user selected." } }, - "required": ["optionId"], + "required": [ + "optionId" + ], "type": "object" }, "SessionAdditionalDirectoriesCapabilities": { @@ -5331,7 +6374,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5342,7 +6388,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "anyOf": [ @@ -5408,7 +6457,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5421,7 +6473,9 @@ "type": "boolean" } }, - "required": ["currentValue"], + "required": [ + "currentValue" + ], "type": "object" }, "SessionConfigGroupId": { @@ -5451,7 +6505,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -5467,7 +6523,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" } ], @@ -5475,7 +6533,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "category": { "anyOf": [ @@ -5490,7 +6551,10 @@ }, "description": { "description": "Optional description for the Client to display to the user.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "allOf": [ @@ -5505,7 +6569,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "SessionConfigOptionCategory": { @@ -5553,7 +6620,10 @@ "description": "The set of selectable options." } }, - "required": ["currentValue", "options"], + "required": [ + "currentValue", + "options" + ], "type": "object" }, "SessionConfigSelectGroup": { @@ -5562,7 +6632,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "group": { "allOf": [ @@ -5584,7 +6657,11 @@ "type": "array" } }, - "required": ["group", "name", "options"], + "required": [ + "group", + "name", + "options" + ], "type": "object" }, "SessionConfigSelectOption": { @@ -5593,11 +6670,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description for this option value.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "description": "Human-readable label for this option value.", @@ -5612,7 +6695,10 @@ "description": "Unique identifier for this option value." } }, - "required": ["value", "name"], + "required": [ + "value", + "name" + ], "type": "object" }, "SessionConfigSelectOptions": { @@ -5646,7 +6732,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5661,7 +6750,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAuthoritative ordered additional workspace roots for this session. Each path must be absolute.\n\nWhen omitted or empty, there are no additional roots for the session.", @@ -5684,14 +6776,23 @@ }, "title": { "description": "Human-readable title for the session", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "updatedAt": { "description": "ISO 8601 timestamp of last activity", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["sessionId", "cwd"], + "required": [ + "sessionId", + "cwd" + ], "type": "object" }, "SessionInfoUpdate": { @@ -5700,15 +6801,24 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "title": { "description": "Human-readable title for the session. Set to null to clear.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "updatedAt": { "description": "ISO 8601 timestamp of last activity. Set to null to clear.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -5719,7 +6829,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5730,10 +6843,16 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "$ref": "#/$defs/SessionModeId" @@ -5742,7 +6861,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "SessionModeId": { @@ -5755,7 +6877,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "availableModes": { "description": "The set of modes that the Agent can operate in", @@ -5773,7 +6898,10 @@ "description": "The current mode the Agent is in." } }, - "required": ["currentModeId", "availableModes"], + "required": [ + "currentModeId", + "availableModes" + ], "type": "object" }, "SessionModelState": { @@ -5782,7 +6910,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "availableModels": { "description": "The set of models that the Agent can use", @@ -5800,7 +6931,10 @@ "description": "The current model the Agent is in." } }, - "required": ["currentModelId", "availableModels"], + "required": [ + "currentModelId", + "availableModels" + ], "type": "object" }, "SessionNotification": { @@ -5809,7 +6943,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -5828,7 +6965,10 @@ "description": "The actual update content." } }, - "required": ["sessionId", "update"], + "required": [ + "sessionId", + "update" + ], "type": "object", "x-method": "session/update", "x-side": "client" @@ -5839,7 +6979,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5863,7 +7006,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5879,7 +7024,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5895,7 +7042,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5911,7 +7060,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5927,7 +7078,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5943,7 +7096,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5959,7 +7114,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5975,7 +7132,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5991,7 +7150,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -6007,7 +7168,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -6023,7 +7186,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" } ] @@ -6034,7 +7199,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "apiType": { "allOf": [ @@ -6060,7 +7228,11 @@ "type": "string" } }, - "required": ["id", "apiType", "baseUrl"], + "required": [ + "id", + "apiType", + "baseUrl" + ], "type": "object", "x-method": "providers/set", "x-side": "agent" @@ -6071,7 +7243,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -6092,7 +7267,10 @@ "type": "boolean" } }, - "required": ["type", "value"], + "required": [ + "type", + "value" + ], "type": "object" }, { @@ -6107,7 +7285,9 @@ "description": "The value ID." } }, - "required": ["value"], + "required": [ + "value" + ], "title": "value_id", "type": "object" } @@ -6117,7 +7297,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configId": { "allOf": [ @@ -6136,7 +7319,10 @@ "description": "The ID of the session to set the configuration option for." } }, - "required": ["sessionId", "configId"], + "required": [ + "sessionId", + "configId" + ], "type": "object", "x-method": "session/set_config_option", "x-side": "agent" @@ -6147,7 +7333,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "The full set of configuration options and their current values.", @@ -6157,7 +7346,9 @@ "type": "array" } }, - "required": ["configOptions"], + "required": [ + "configOptions" + ], "type": "object", "x-method": "session/set_config_option", "x-side": "agent" @@ -6168,7 +7359,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "modeId": { "allOf": [ @@ -6187,7 +7381,10 @@ "description": "The ID of the session to set the mode for." } }, - "required": ["sessionId", "modeId"], + "required": [ + "sessionId", + "modeId" + ], "type": "object", "x-method": "session/set_mode", "x-side": "agent" @@ -6198,7 +7395,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -6211,7 +7411,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "modelId": { "allOf": [ @@ -6230,7 +7433,10 @@ "description": "The ID of the session to set the model for." } }, - "required": ["sessionId", "modelId"], + "required": [ + "sessionId", + "modelId" + ], "type": "object", "x-method": "session/set_model", "x-side": "agent" @@ -6241,7 +7447,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -6254,7 +7463,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "repository": { "anyOf": [ @@ -6272,11 +7484,17 @@ "items": { "$ref": "#/$defs/WorkspaceFolder" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "workspaceUri": { "description": "The root URI of the workspace.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object", @@ -6289,7 +7507,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -6300,7 +7521,9 @@ "description": "The session ID for the newly started NES session." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "nes/start", "x-side": "agent" @@ -6365,18 +7588,27 @@ "properties": { "default": { "description": "Default value.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "enum": { "description": "Enum values for untitled single-select enums.", "items": { "type": "string" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "format": { "anyOf": [ @@ -6393,28 +7625,43 @@ "description": "Maximum string length.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "minLength": { "description": "Minimum string length.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "oneOf": { "description": "Titled enum options for titled single-select enums.", "items": { "$ref": "#/$defs/EnumOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "pattern": { "description": "Pattern the string must match.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -6425,7 +7672,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "context": { "anyOf": [ @@ -6483,7 +7733,13 @@ "type": "integer" } }, - "required": ["sessionId", "uri", "version", "position", "triggerKind"], + "required": [ + "sessionId", + "uri", + "version", + "position", + "triggerKind" + ], "type": "object", "x-method": "nes/suggest", "x-side": "agent" @@ -6494,7 +7750,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "suggestions": { "description": "The list of suggestions.", @@ -6504,7 +7763,9 @@ "type": "array" } }, - "required": ["suggestions"], + "required": [ + "suggestions" + ], "type": "object", "x-method": "nes/suggest", "x-side": "agent" @@ -6515,13 +7776,18 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "terminalId": { "type": "string" } }, - "required": ["terminalId"], + "required": [ + "terminalId" + ], "type": "object" }, "TerminalExitStatus": { @@ -6530,17 +7796,26 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitCode": { "description": "The process exit code (may be null if terminated by signal).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "signal": { "description": "The signal that terminated the process (may be null if exited normally).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -6551,7 +7826,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -6566,7 +7844,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/output", "x-side": "client" @@ -6577,7 +7858,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitStatus": { "anyOf": [ @@ -6599,7 +7883,10 @@ "type": "boolean" } }, - "required": ["output", "truncated"], + "required": [ + "output", + "truncated" + ], "type": "object", "x-method": "terminal/output", "x-side": "client" @@ -6610,7 +7897,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -6626,7 +7916,9 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "type": "object" }, "TextDocumentContentChangeEvent": { @@ -6648,7 +7940,9 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "type": "object" }, "TextDocumentSyncKind": { @@ -6672,10 +7966,16 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "text": { "type": "string" @@ -6684,7 +7984,10 @@ "type": "string" } }, - "required": ["text", "uri"], + "required": [ + "text", + "uri" + ], "type": "object" }, "TitledMultiSelectItems": { @@ -6698,7 +8001,9 @@ "type": "array" } }, - "required": ["anyOf"], + "required": [ + "anyOf" + ], "type": "object" }, "ToolCall": { @@ -6707,7 +8012,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Content produced by the tool call.", @@ -6758,7 +8066,10 @@ "description": "Unique identifier for this tool call within the session." } }, - "required": ["toolCallId", "title"], + "required": [ + "toolCallId", + "title" + ], "type": "object" }, "ToolCallContent": { @@ -6780,7 +8091,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -6796,7 +8109,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -6812,7 +8127,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" } ] @@ -6827,20 +8144,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "line": { "description": "Optional line number within the file.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "path": { "description": "The file path being accessed or modified.", "type": "string" } }, - "required": ["path"], + "required": [ + "path" + ], "type": "object" }, "ToolCallStatus": { @@ -6874,14 +8199,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Replace the content collection.", "items": { "$ref": "#/$defs/ToolCallContent" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "kind": { "anyOf": [ @@ -6899,7 +8230,10 @@ "items": { "$ref": "#/$defs/ToolCallLocation" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "rawInput": { "description": "Update the raw input." @@ -6920,7 +8254,10 @@ }, "title": { "description": "Update the human-readable title.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "toolCallId": { "allOf": [ @@ -6931,7 +8268,9 @@ "description": "The ID of the tool call being updated." } }, - "required": ["toolCallId"], + "required": [ + "toolCallId" + ], "type": "object" }, "ToolKind": { @@ -6995,14 +8334,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "hint": { "description": "A hint to display when the input hasn't been provided yet", "type": "string" } }, - "required": ["hint"], + "required": [ + "hint" + ], "type": "object" }, "UntitledMultiSelectItems": { @@ -7024,7 +8368,10 @@ "description": "Item type discriminator. Must be `\"string\"`." } }, - "required": ["type", "enum"], + "required": [ + "type", + "enum" + ], "type": "object" }, "Usage": { @@ -7034,13 +8381,19 @@ "description": "Total cache read tokens.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "cachedWriteTokens": { "description": "Total cache write tokens.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "inputTokens": { "description": "Total input tokens across all turns.", @@ -7058,7 +8411,10 @@ "description": "Total thought/reasoning tokens", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "totalTokens": { "description": "Sum of all token types across session.", @@ -7067,7 +8423,11 @@ "type": "integer" } }, - "required": ["totalTokens", "inputTokens", "outputTokens"], + "required": [ + "totalTokens", + "inputTokens", + "outputTokens" + ], "type": "object" }, "UsageUpdate": { @@ -7076,7 +8436,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "cost": { "anyOf": [ @@ -7102,7 +8465,10 @@ "type": "integer" } }, - "required": ["used", "size"], + "required": [ + "used", + "size" + ], "type": "object" }, "WaitForTerminalExitRequest": { @@ -7111,7 +8477,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -7126,7 +8495,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/wait_for_exit", "x-side": "client" @@ -7137,17 +8509,26 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitCode": { "description": "The process exit code (may be null if terminated by signal).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "signal": { "description": "The signal that terminated the process (may be null if exited normally).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object", @@ -7166,7 +8547,10 @@ "type": "string" } }, - "required": ["uri", "name"], + "required": [ + "uri", + "name" + ], "type": "object" }, "WriteTextFileRequest": { @@ -7175,7 +8559,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "The text content to write to the file.", @@ -7194,7 +8581,11 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "path", "content"], + "required": [ + "sessionId", + "path", + "content" + ], "type": "object", "x-method": "fs/write_text_file", "x-side": "client" @@ -7205,7 +8596,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -7245,11 +8639,15 @@ "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", "properties": { "jsonrpc": { - "enum": ["2.0"], + "enum": [ + "2.0" + ], "type": "string" } }, - "required": ["jsonrpc"], + "required": [ + "jsonrpc" + ], "title": "Agent", "type": "object" }, @@ -7283,11 +8681,15 @@ "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", "properties": { "jsonrpc": { - "enum": ["2.0"], + "enum": [ + "2.0" + ], "type": "string" } }, - "required": ["jsonrpc"], + "required": [ + "jsonrpc" + ], "title": "Client", "type": "object" }, @@ -7308,4 +8710,4 @@ } ], "title": "Agent Client Protocol" -} +} \ No newline at end of file diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index b304602c4..97d1a18fc 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -6,7 +6,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "id": { "description": "The ID of the accepted suggestion.", @@ -21,7 +24,10 @@ "description": "The session ID for this notification." } }, - "required": ["sessionId", "id"], + "required": [ + "sessionId", + "id" + ], "type": "object", "x-method": "nes/accept", "x-side": "agent" @@ -32,7 +38,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "logout": { "anyOf": [ @@ -54,7 +63,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "auth": { "allOf": [ @@ -113,7 +125,8 @@ "default": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "description": "Prompt capabilities supported by the agent." }, @@ -184,7 +197,9 @@ ] } }, - "required": ["method"], + "required": [ + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -299,7 +314,10 @@ ] } }, - "required": ["id", "method"], + "required": [ + "id", + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -476,7 +494,10 @@ "description": "All possible responses that an agent can send to a client.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `ClientRequest` variants." } }, - "required": ["id", "result"], + "required": [ + "id", + "result" + ], "title": "Result", "type": "object" }, @@ -489,7 +510,10 @@ "$ref": "#/$defs/RequestId" } }, - "required": ["id", "error"], + "required": [ + "id", + "error" + ], "title": "Error", "type": "object" } @@ -502,20 +526,32 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "audience": { "items": { "$ref": "#/$defs/Role" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "lastModified": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "priority": { "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] } }, "type": "object" @@ -526,7 +562,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -545,7 +584,10 @@ "type": "string" } }, - "required": ["data", "mimeType"], + "required": [ + "data", + "mimeType" + ], "type": "object" }, "AuthCapabilities": { @@ -554,7 +596,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "terminal": { "default": false, @@ -570,11 +615,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "label": { "description": "Human-readable label for this variable, displayed in client UI.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "description": "The environment variable name (e.g. `\"OPENAI_API_KEY\"`).", @@ -591,7 +642,9 @@ "type": "boolean" } }, - "required": ["name"], + "required": [ + "name" + ], "type": "object" }, "AuthMethod": { @@ -609,7 +662,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -625,7 +680,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -646,11 +703,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description providing more details about this authentication method.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "description": "Unique identifier for this authentication method.", @@ -661,7 +724,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "AuthMethodEnvVar": { @@ -670,11 +736,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description providing more details about this authentication method.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "description": "Unique identifier for this authentication method.", @@ -682,7 +754,10 @@ }, "link": { "description": "Optional link to a page where the user can obtain their credentials.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "description": "Human-readable name of the authentication method.", @@ -696,7 +771,11 @@ "type": "array" } }, - "required": ["id", "name", "vars"], + "required": [ + "id", + "name", + "vars" + ], "type": "object" }, "AuthMethodTerminal": { @@ -705,7 +784,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "args": { "description": "Additional arguments to pass when running the agent binary for terminal auth.", @@ -716,7 +798,10 @@ }, "description": { "description": "Optional description providing more details about this authentication method.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "env": { "additionalProperties": { @@ -734,7 +819,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "AuthenticateRequest": { @@ -743,14 +831,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "methodId": { "description": "The ID of the authentication method to use.\nMust be one of the methods advertised in the initialize response.", "type": "string" } }, - "required": ["methodId"], + "required": [ + "methodId" + ], "type": "object", "x-method": "authenticate", "x-side": "agent" @@ -761,7 +854,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -774,7 +870,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Human-readable description of what the command does.", @@ -796,7 +895,10 @@ "type": "string" } }, - "required": ["name", "description"], + "required": [ + "name", + "description" + ], "type": "object" }, "AvailableCommandInput": { @@ -819,7 +921,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "availableCommands": { "description": "Commands the agent can execute", @@ -829,7 +934,9 @@ "type": "array" } }, - "required": ["availableCommands"], + "required": [ + "availableCommands" + ], "type": "object" }, "BlobResourceContents": { @@ -838,19 +945,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "blob": { "type": "string" }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "uri": { "type": "string" } }, - "required": ["blob", "uri"], + "required": [ + "blob", + "uri" + ], "type": "object" }, "BooleanPropertySchema": { @@ -858,15 +974,24 @@ "properties": { "default": { "description": "Default value.", - "type": ["boolean", "null"] + "type": [ + "boolean", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -877,7 +1002,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -888,7 +1016,9 @@ "description": "The ID of the session to cancel operations for." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/cancel", "x-side": "agent" @@ -899,7 +1029,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "requestId": { "allOf": [ @@ -910,7 +1043,9 @@ "description": "The ID of the request to cancel." } }, - "required": ["requestId"], + "required": [ + "requestId" + ], "type": "object", "x-method": "$/cancel_request", "x-side": "protocol" @@ -921,7 +1056,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "auth": { "allOf": [ @@ -989,7 +1127,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "jump": { "anyOf": [ @@ -1126,7 +1267,9 @@ ] } }, - "required": ["method"], + "required": [ + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -1331,7 +1474,10 @@ ] } }, - "required": ["id", "method"], + "required": [ + "id", + "method" + ], "type": "object", "x-docs-ignore": true }, @@ -1428,7 +1574,10 @@ "description": "All possible responses that a client can send to an agent.\n\nThis enum is used internally for routing RPC responses. You typically won't need\nto use this directly - the responses are handled automatically by the connection.\n\nThese are responses to the corresponding `AgentRequest` variants." } }, - "required": ["id", "result"], + "required": [ + "id", + "result" + ], "title": "Result", "type": "object" }, @@ -1441,7 +1590,10 @@ "$ref": "#/$defs/RequestId" } }, - "required": ["id", "error"], + "required": [ + "id", + "error" + ], "title": "Error", "type": "object" } @@ -1454,7 +1606,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -1465,7 +1620,9 @@ "description": "The ID of the NES session to close." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "nes/close", "x-side": "agent" @@ -1476,7 +1633,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -1489,7 +1649,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -1500,7 +1663,9 @@ "description": "The ID of the session to close." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/close", "x-side": "agent" @@ -1511,7 +1676,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -1524,7 +1692,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "elicitationId": { "allOf": [ @@ -1535,7 +1706,9 @@ "description": "The ID of the elicitation that completed." } }, - "required": ["elicitationId"], + "required": [ + "elicitationId" + ], "type": "object", "x-method": "elicitation/complete", "x-side": "client" @@ -1546,7 +1719,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "The full set of configuration options and their current values.", @@ -1556,7 +1732,9 @@ "type": "array" } }, - "required": ["configOptions"], + "required": [ + "configOptions" + ], "type": "object" }, "Content": { @@ -1565,7 +1743,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "allOf": [ @@ -1576,7 +1757,9 @@ "description": "The actual content block." } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object" }, "ContentBlock": { @@ -1598,7 +1781,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1614,7 +1799,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1630,7 +1817,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1646,7 +1835,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -1662,7 +1853,27 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], + "type": "object" + }, + { + "allOf": [ + { + "$ref": "#/$defs/PromptTemplateContent" + } + ], + "description": "A template that supports variable substitution using {{variable_name}} syntax.\n\nAllows dynamic content generation by substituting variables into template strings.\nVariables are resolved at processing time and can include values from context,\nuser input, or system state.\n\nRequires the `promptVariables` prompt capability when included in prompts.", + "properties": { + "type": { + "const": "prompt_template", + "type": "string" + } + }, + "required": [ + "type" + ], "type": "object" } ] @@ -1673,7 +1884,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "allOf": [ @@ -1685,10 +1899,15 @@ }, "messageId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA unique identifier for the message this chunk belongs to.\n\nAll chunks belonging to the same message share the same `messageId`.\nA change in `messageId` indicates a new message has started.\nBoth clients and agents MUST use UUID format for message IDs.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object" }, "Cost": { @@ -1704,7 +1923,10 @@ "type": "string" } }, - "required": ["amount", "currency"], + "required": [ + "amount", + "currency" + ], "type": "object" }, "CreateElicitationRequest": { @@ -1726,7 +1948,9 @@ "type": "string" } }, - "required": ["mode"], + "required": [ + "mode" + ], "type": "object" }, { @@ -1742,7 +1966,9 @@ "type": "string" } }, - "required": ["mode"], + "required": [ + "mode" + ], "type": "object" } ], @@ -1750,14 +1976,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "message": { "description": "A human-readable message describing what input is needed.", "type": "string" } }, - "required": ["message"], + "required": [ + "message" + ], "type": "object", "x-method": "elicitation/create", "x-side": "client" @@ -1781,7 +2012,9 @@ "type": "string" } }, - "required": ["action"], + "required": [ + "action" + ], "type": "object" }, { @@ -1792,7 +2025,9 @@ "type": "string" } }, - "required": ["action"], + "required": [ + "action" + ], "type": "object" }, { @@ -1803,7 +2038,9 @@ "type": "string" } }, - "required": ["action"], + "required": [ + "action" + ], "type": "object" } ], @@ -1811,7 +2048,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -1824,7 +2064,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "args": { "description": "Array of command arguments.", @@ -1839,7 +2082,10 @@ }, "cwd": { "description": "Working directory for the command (absolute path).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "env": { "description": "Environment variables for the command.", @@ -1852,7 +2098,10 @@ "description": "Maximum number of output bytes to retain.\n\nWhen the limit is exceeded, the Client truncates from the beginning of the output\nto stay within the limit.\n\nThe Client MUST ensure truncation happens at a character boundary to maintain valid\nstring output, even if this means the retained output is slightly less than the\nspecified limit.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "sessionId": { "allOf": [ @@ -1863,7 +2112,10 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "command"], + "required": [ + "sessionId", + "command" + ], "type": "object", "x-method": "terminal/create", "x-side": "client" @@ -1874,14 +2126,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "terminalId": { "description": "The unique identifier for the created terminal.", "type": "string" } }, - "required": ["terminalId"], + "required": [ + "terminalId" + ], "type": "object", "x-method": "terminal/create", "x-side": "client" @@ -1892,7 +2149,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "currentModeId": { "allOf": [ @@ -1903,7 +2163,9 @@ "description": "The ID of the current mode" } }, - "required": ["currentModeId"], + "required": [ + "currentModeId" + ], "type": "object" }, "DidChangeDocumentNotification": { @@ -1912,7 +2174,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "contentChanges": { "description": "The content changes.", @@ -1939,7 +2204,12 @@ "type": "integer" } }, - "required": ["sessionId", "uri", "version", "contentChanges"], + "required": [ + "sessionId", + "uri", + "version", + "contentChanges" + ], "type": "object", "x-method": "document/didChange", "x-side": "agent" @@ -1950,7 +2220,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -1965,7 +2238,10 @@ "type": "string" } }, - "required": ["sessionId", "uri"], + "required": [ + "sessionId", + "uri" + ], "type": "object", "x-method": "document/didClose", "x-side": "agent" @@ -1976,7 +2252,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "position": { "allOf": [ @@ -2012,7 +2291,13 @@ "description": "The portion of the file currently visible in the editor viewport." } }, - "required": ["sessionId", "uri", "version", "position", "visibleRange"], + "required": [ + "sessionId", + "uri", + "version", + "position", + "visibleRange" + ], "type": "object", "x-method": "document/didFocus", "x-side": "agent" @@ -2023,7 +2308,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "languageId": { "description": "The language identifier of the document (e.g., \"rust\", \"python\").", @@ -2051,7 +2339,13 @@ "type": "integer" } }, - "required": ["sessionId", "uri", "languageId", "version", "text"], + "required": [ + "sessionId", + "uri", + "languageId", + "version", + "text" + ], "type": "object", "x-method": "document/didOpen", "x-side": "agent" @@ -2062,7 +2356,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -2077,7 +2374,10 @@ "type": "string" } }, - "required": ["sessionId", "uri"], + "required": [ + "sessionId", + "uri" + ], "type": "object", "x-method": "document/didSave", "x-side": "agent" @@ -2088,7 +2388,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "newText": { "description": "The new content after modification.", @@ -2096,14 +2399,20 @@ }, "oldText": { "description": "The original content (None for new files).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "path": { "description": "The file path being modified.", "type": "string" } }, - "required": ["path", "newText"], + "required": [ + "path", + "newText" + ], "type": "object" }, "DisableProvidersRequest": { @@ -2112,14 +2421,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "id": { "description": "Provider id to disable.", "type": "string" } }, - "required": ["id"], + "required": [ + "id" + ], "type": "object", "x-method": "providers/disable", "x-side": "agent" @@ -2130,7 +2444,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -2145,7 +2462,10 @@ "$ref": "#/$defs/ElicitationContentValue" }, "description": "The user-provided content, if any, as an object matching the requested schema.", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2156,7 +2476,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "form": { "anyOf": [ @@ -2218,7 +2541,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2255,7 +2581,9 @@ "description": "A JSON Schema describing the form fields to present to the user." } }, - "required": ["requestedSchema"], + "required": [ + "requestedSchema" + ], "type": "object" }, "ElicitationId": { @@ -2281,7 +2609,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -2297,7 +2627,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -2313,7 +2645,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -2329,7 +2663,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -2345,7 +2681,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" } ] @@ -2362,7 +2700,9 @@ "description": "The request this elicitation is tied to." } }, - "required": ["requestId"], + "required": [ + "requestId" + ], "type": "object" }, "ElicitationSchema": { @@ -2370,7 +2710,10 @@ "properties": { "description": { "description": "Optional description of what this schema represents.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "properties": { "additionalProperties": { @@ -2385,11 +2728,17 @@ "items": { "type": "string" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "title": { "description": "Optional title for the schema.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "type": { "allOf": [ @@ -2436,7 +2785,9 @@ "description": "Optional tool call within the session." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object" }, "ElicitationStringType": { @@ -2455,7 +2806,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -2497,7 +2851,10 @@ "type": "string" } }, - "required": ["elicitationId", "url"], + "required": [ + "elicitationId", + "url" + ], "type": "object" }, "EmbeddedResource": { @@ -2506,7 +2863,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -2522,7 +2882,9 @@ "$ref": "#/$defs/EmbeddedResourceResource" } }, - "required": ["resource"], + "required": [ + "resource" + ], "type": "object" }, "EmbeddedResourceResource": { @@ -2558,7 +2920,10 @@ "type": "string" } }, - "required": ["const", "title"], + "required": [ + "const", + "title" + ], "type": "object" }, "EnvVariable": { @@ -2567,7 +2932,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "The name of the environment variable.", @@ -2578,7 +2946,10 @@ "type": "string" } }, - "required": ["name", "value"], + "required": [ + "name", + "value" + ], "type": "object" }, "Error": { @@ -2600,7 +2971,10 @@ "type": "string" } }, - "required": ["code", "message"], + "required": [ + "code", + "message" + ], "type": "object" }, "ErrorCode": { @@ -2692,7 +3066,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "readTextFile": { "default": false, @@ -2713,7 +3090,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the forked\nsession.", @@ -2742,7 +3122,10 @@ "description": "The ID of the session to fork." } }, - "required": ["sessionId", "cwd"], + "required": [ + "sessionId", + "cwd" + ], "type": "object", "x-method": "session/fork", "x-side": "agent" @@ -2753,14 +3136,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "models": { "anyOf": [ @@ -2793,7 +3182,9 @@ "description": "Unique identifier for the newly created forked session." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/fork", "x-side": "agent" @@ -2804,7 +3195,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "The name of the HTTP header.", @@ -2815,7 +3209,10 @@ "type": "string" } }, - "required": ["name", "value"], + "required": [ + "name", + "value" + ], "type": "object" }, "ImageContent": { @@ -2824,7 +3221,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -2843,10 +3243,16 @@ "type": "string" }, "uri": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["data", "mimeType"], + "required": [ + "data", + "mimeType" + ], "type": "object" }, "Implementation": { @@ -2855,7 +3261,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "name": { "description": "Intended for programmatic or logical use, but can be used as a display\nname fallback if title isn’t present.", @@ -2863,14 +3272,20 @@ }, "title": { "description": "Intended for UI and end-user contexts — optimized to be human-readable\nand easily understood.\n\nIf not provided, the name should be used for display.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "version": { "description": "Version of the implementation. Can be displayed to the user or used\nfor debugging or metrics purposes. (e.g. \"1.0.0\").", "type": "string" } }, - "required": ["name", "version"], + "required": [ + "name", + "version" + ], "type": "object" }, "InitializeRequest": { @@ -2879,7 +3294,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "clientCapabilities": { "allOf": [ @@ -2919,7 +3337,9 @@ "description": "The latest protocol version supported by the client." } }, - "required": ["protocolVersion"], + "required": [ + "protocolVersion" + ], "type": "object", "x-method": "initialize", "x-side": "agent" @@ -2930,7 +3350,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "agentCapabilities": { "allOf": [ @@ -2948,7 +3371,8 @@ "promptCapabilities": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "sessionCapabilities": {} }, @@ -2982,7 +3406,9 @@ "description": "The protocol version the client specified if supported by the agent,\nor the latest protocol version supported by the agent.\n\nThe client should disconnect, if it doesn't support this version." } }, - "required": ["protocolVersion"], + "required": [ + "protocolVersion" + ], "type": "object", "x-method": "initialize", "x-side": "agent" @@ -2993,25 +3419,40 @@ "default": { "description": "Default value.", "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "maximum": { "description": "Maximum value (inclusive).", "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "minimum": { "description": "Minimum value (inclusive).", "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -3022,7 +3463,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -3037,7 +3481,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/kill", "x-side": "client" @@ -3048,7 +3495,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3061,7 +3511,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3074,7 +3527,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "providers": { "description": "Configurable providers with current routing info suitable for UI display.", @@ -3084,7 +3540,9 @@ "type": "array" } }, - "required": ["providers"], + "required": [ + "providers" + ], "type": "object", "x-method": "providers/list", "x-side": "agent" @@ -3095,7 +3553,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nFilter sessions by the exact ordered additional workspace roots. Each path must be absolute.\n\nThis filter applies only when the field is present and non-empty. When\nomitted or empty, no additional-root filter is applied.", @@ -3106,11 +3567,17 @@ }, "cursor": { "description": "Opaque cursor token from a previous response's nextCursor field for cursor-based pagination", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "cwd": { "description": "Filter sessions by working directory. Must be an absolute path.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object", @@ -3123,11 +3590,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "nextCursor": { "description": "Opaque cursor token. If present, pass this in the next request's cursor parameter\nto fetch the next page. If absent, there are no more results.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "sessions": { "description": "Array of session information objects", @@ -3137,7 +3610,9 @@ "type": "array" } }, - "required": ["sessions"], + "required": [ + "sessions" + ], "type": "object", "x-method": "session/list", "x-side": "agent" @@ -3183,7 +3658,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the loaded\nsession.", @@ -3212,7 +3690,11 @@ "description": "The ID of the session to load." } }, - "required": ["mcpServers", "cwd", "sessionId"], + "required": [ + "mcpServers", + "cwd", + "sessionId" + ], "type": "object", "x-method": "session/load", "x-side": "agent" @@ -3223,14 +3705,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "models": { "anyOf": [ @@ -3265,7 +3753,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3276,7 +3767,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3289,7 +3783,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -3302,7 +3799,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "http": { "default": false, @@ -3332,7 +3832,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -3348,7 +3850,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -3369,7 +3873,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "headers": { "description": "HTTP headers to set when making requests to the MCP server.", @@ -3387,7 +3894,11 @@ "type": "string" } }, - "required": ["name", "url", "headers"], + "required": [ + "name", + "url", + "headers" + ], "type": "object" }, "McpServerSse": { @@ -3396,7 +3907,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "headers": { "description": "HTTP headers to set when making requests to the MCP server.", @@ -3414,7 +3928,11 @@ "type": "string" } }, - "required": ["name", "url", "headers"], + "required": [ + "name", + "url", + "headers" + ], "type": "object" }, "McpServerStdio": { @@ -3423,7 +3941,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "args": { "description": "Command-line arguments to pass to the MCP server.", @@ -3448,7 +3969,12 @@ "type": "string" } }, - "required": ["name", "command", "args", "env"], + "required": [ + "name", + "command", + "args", + "env" + ], "type": "object" }, "ModelId": { @@ -3461,11 +3987,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description of the model.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "modelId": { "allOf": [ @@ -3480,7 +4012,10 @@ "type": "string" } }, - "required": ["modelId", "name"], + "required": [ + "modelId", + "name" + ], "type": "object" }, "MultiSelectItems": { @@ -3514,11 +4049,17 @@ "items": { "type": "string" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "items": { "allOf": [ @@ -3532,20 +4073,31 @@ "description": "Maximum number of items to select.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "minItems": { "description": "Minimum number of items to select.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["items"], + "required": [ + "items" + ], "type": "object" }, "NesCapabilities": { @@ -3554,7 +4106,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "context": { "anyOf": [ @@ -3587,7 +4142,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "diagnostics": { "anyOf": [ @@ -3686,7 +4244,12 @@ "type": "string" } }, - "required": ["uri", "range", "severity", "message"], + "required": [ + "uri", + "range", + "severity", + "message" + ], "type": "object" }, "NesDiagnosticSeverity": { @@ -3720,7 +4283,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3731,7 +4297,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "syncKind": { "allOf": [ @@ -3742,7 +4311,9 @@ "description": "The sync kind the agent wants: `\"full\"` or `\"incremental\"`." } }, - "required": ["syncKind"], + "required": [ + "syncKind" + ], "type": "object" }, "NesDocumentDidCloseCapabilities": { @@ -3751,7 +4322,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3762,7 +4336,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3773,7 +4350,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3784,7 +4364,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3795,7 +4378,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "didChange": { "anyOf": [ @@ -3861,13 +4447,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "maxCount": { "description": "Maximum number of edit history entries the agent can use.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] } }, "type": "object" @@ -3884,7 +4476,10 @@ "type": "string" } }, - "required": ["uri", "diff"], + "required": [ + "uri", + "diff" + ], "type": "object" }, "NesEditSuggestion": { @@ -3917,7 +4512,11 @@ "type": "string" } }, - "required": ["id", "uri", "edits"], + "required": [ + "id", + "uri", + "edits" + ], "type": "object" }, "NesEventCapabilities": { @@ -3926,7 +4525,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "document": { "anyOf": [ @@ -3962,7 +4564,11 @@ "type": "string" } }, - "required": ["startLine", "endLine", "text"], + "required": [ + "startLine", + "endLine", + "text" + ], "type": "object" }, "NesJumpCapabilities": { @@ -3971,7 +4577,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -3996,7 +4605,11 @@ "type": "string" } }, - "required": ["id", "uri", "position"], + "required": [ + "id", + "uri", + "position" + ], "type": "object" }, "NesOpenFile": { @@ -4010,7 +4623,10 @@ "description": "Timestamp in milliseconds since epoch of when the file was last focused.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "uri": { "description": "The URI of the file.", @@ -4028,7 +4644,10 @@ "description": "The visible range in the editor, if any." } }, - "required": ["uri", "languageId"], + "required": [ + "uri", + "languageId" + ], "type": "object" }, "NesOpenFilesCapabilities": { @@ -4037,7 +4656,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4058,7 +4680,11 @@ "type": "string" } }, - "required": ["uri", "languageId", "text"], + "required": [ + "uri", + "languageId", + "text" + ], "type": "object" }, "NesRecentFilesCapabilities": { @@ -4067,13 +4693,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "maxCount": { "description": "Maximum number of recent files the agent can use.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] } }, "type": "object" @@ -4118,7 +4750,10 @@ "type": "string" } }, - "required": ["uri", "excerpts"], + "required": [ + "uri", + "excerpts" + ], "type": "object" }, "NesRelatedSnippetsCapabilities": { @@ -4127,7 +4762,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4138,7 +4776,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4167,7 +4808,12 @@ "type": "string" } }, - "required": ["id", "uri", "position", "newName"], + "required": [ + "id", + "uri", + "position", + "newName" + ], "type": "object" }, "NesRepository": { @@ -4186,7 +4832,11 @@ "type": "string" } }, - "required": ["name", "owner", "remoteUrl"], + "required": [ + "name", + "owner", + "remoteUrl" + ], "type": "object" }, "NesSearchAndReplaceCapabilities": { @@ -4195,7 +4845,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4209,7 +4862,10 @@ }, "isRegex": { "description": "Whether `search` is a regular expression. Defaults to `false`.", - "type": ["boolean", "null"] + "type": [ + "boolean", + "null" + ] }, "replace": { "description": "The replacement text.", @@ -4224,7 +4880,12 @@ "type": "string" } }, - "required": ["id", "uri", "search", "replace"], + "required": [ + "id", + "uri", + "search", + "replace" + ], "type": "object" }, "NesSuggestContext": { @@ -4233,49 +4894,70 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "diagnostics": { "description": "Current diagnostics (errors, warnings).", "items": { "$ref": "#/$defs/NesDiagnostic" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "editHistory": { "description": "Recent edit history.", "items": { "$ref": "#/$defs/NesEditHistoryEntry" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "openFiles": { "description": "Currently open files in the editor.", "items": { "$ref": "#/$defs/NesOpenFile" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "recentFiles": { "description": "Recently accessed files.", "items": { "$ref": "#/$defs/NesRecentFile" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "relatedSnippets": { "description": "Related code snippets.", "items": { "$ref": "#/$defs/NesRelatedSnippet" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "userActions": { "description": "Recent user actions (typing, navigation, etc.).", "items": { "$ref": "#/$defs/NesUserAction" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] } }, "type": "object" @@ -4299,7 +4981,9 @@ "type": "string" } }, - "required": ["kind"], + "required": [ + "kind" + ], "type": "object" }, { @@ -4315,7 +4999,9 @@ "type": "string" } }, - "required": ["kind"], + "required": [ + "kind" + ], "type": "object" }, { @@ -4331,7 +5017,9 @@ "type": "string" } }, - "required": ["kind"], + "required": [ + "kind" + ], "type": "object" }, { @@ -4347,7 +5035,9 @@ "type": "string" } }, - "required": ["kind"], + "required": [ + "kind" + ], "type": "object" } ] @@ -4368,7 +5058,10 @@ "description": "The range to replace." } }, - "required": ["range", "newText"], + "required": [ + "range", + "newText" + ], "type": "object" }, "NesTriggerKind": { @@ -4417,7 +5110,12 @@ "type": "string" } }, - "required": ["action", "uri", "position", "timestampMs"], + "required": [ + "action", + "uri", + "position", + "timestampMs" + ], "type": "object" }, "NesUserActionsCapabilities": { @@ -4426,13 +5124,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "maxCount": { "description": "Maximum number of user actions the agent can use.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] } }, "type": "object" @@ -4443,7 +5147,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots for this session. Each path must be absolute.\n\nThese expand the session's filesystem scope without changing `cwd`, which\nremains the base for relative paths. When omitted or empty, no\nadditional roots are activated for the new session.", @@ -4464,7 +5171,10 @@ "type": "array" } }, - "required": ["cwd", "mcpServers"], + "required": [ + "cwd", + "mcpServers" + ], "type": "object", "x-method": "session/new", "x-side": "agent" @@ -4475,14 +5185,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "models": { "anyOf": [ @@ -4515,7 +5231,9 @@ "description": "Unique identifier for the created session.\n\nUsed in all subsequent requests for this conversation." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "session/new", "x-side": "agent" @@ -4526,25 +5244,40 @@ "default": { "description": "Default value.", "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "maximum": { "description": "Maximum value (inclusive).", "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] }, "minimum": { "description": "Minimum value (inclusive).", "format": "double", - "type": ["number", "null"] + "type": [ + "number", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -4555,7 +5288,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "kind": { "allOf": [ @@ -4578,7 +5314,11 @@ "description": "Unique identifier for this permission option." } }, - "required": ["optionId", "name", "kind"], + "required": [ + "optionId", + "name", + "kind" + ], "type": "object" }, "PermissionOptionId": { @@ -4616,7 +5356,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "entries": { "description": "The list of tasks to be accomplished.\n\nWhen updating a plan, the agent must send a complete list of all entries\nwith their current status. The client replaces the entire plan with each update.", @@ -4626,7 +5369,9 @@ "type": "array" } }, - "required": ["entries"], + "required": [ + "entries" + ], "type": "object" }, "PlanEntry": { @@ -4635,7 +5380,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Human-readable description of what this task aims to accomplish.", @@ -4658,7 +5406,11 @@ "description": "Current execution status of this task." } }, - "required": ["content", "priority", "status"], + "required": [ + "content", + "priority", + "status" + ], "type": "object" }, "PlanEntryPriority": { @@ -4717,7 +5469,10 @@ "type": "integer" } }, - "required": ["line", "character"], + "required": [ + "line", + "character" + ], "type": "object" }, "PositionEncodingKind": { @@ -4746,7 +5501,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "audio": { "default": false, @@ -4762,6 +5520,11 @@ "default": false, "description": "Agent supports [`ContentBlock::Image`].", "type": "boolean" + }, + "promptVariables": { + "default": false, + "description": "Agent supports prompt variables and templates in `session/prompt` requests.\n\nWhen enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`]\nin prompt requests with variable substitution support.", + "type": "boolean" } }, "type": "object" @@ -4772,11 +5535,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "messageId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nA client-generated unique identifier for this user message.\n\nIf provided, the Agent SHOULD echo this value as `userMessageId` in the\n[`PromptResponse`] to confirm it was recorded.\nBoth clients and agents MUST use UUID format for message IDs.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "prompt": { "description": "The blocks of content that compose the user's message.\n\nAs a baseline, the Agent MUST support [`ContentBlock::Text`] and [`ContentBlock::ResourceLink`],\nwhile other variants are optionally enabled via [`PromptCapabilities`].\n\nThe Client MUST adapt its interface according to [`PromptCapabilities`].\n\nThe client MAY include referenced pieces of context as either\n[`ContentBlock::Resource`] or [`ContentBlock::ResourceLink`].\n\nWhen available, [`ContentBlock::Resource`] is preferred\nas it avoids extra round-trips and allows the message to include\npieces of context from sources the agent may not have access to.", @@ -4794,7 +5563,10 @@ "description": "The ID of the session to send this user message to" } }, - "required": ["sessionId", "prompt"], + "required": [ + "sessionId", + "prompt" + ], "type": "object", "x-method": "session/prompt", "x-side": "agent" @@ -4805,7 +5577,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "stopReason": { "allOf": [ @@ -4828,14 +5603,180 @@ }, "userMessageId": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nThe acknowledged user message ID.\n\nIf the client provided a `messageId` in the [`PromptRequest`], the agent echoes it here\nto confirm it was recorded. If the client did not provide one, the agent MAY assign one\nand return it here. Absence of this field indicates the agent did not record a message ID.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["stopReason"], + "required": [ + "stopReason" + ], "type": "object", "x-method": "session/prompt", "x-side": "agent" }, + "PromptTemplateContent": { + "description": "A template content block that supports variable substitution.\n\nTemplates use {{variable_name}} syntax for variable placeholders that can be\nsubstituted with actual values at processing time. This enables dynamic content\ngeneration and reusable prompt templates.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": [ + "object", + "null" + ] + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "template": { + "description": "The template string with {{variable_name}} placeholders.", + "type": "string" + }, + "variables": { + "description": "Variables available for substitution in this template.", + "items": { + "$ref": "#/$defs/PromptVariable" + }, + "type": "array" + } + }, + "required": [ + "template", + "variables" + ], + "type": "object" + }, + "PromptVariable": { + "description": "A variable that can be substituted in a prompt template.\n\nVariables define named placeholders that can be replaced with actual values\nduring template processing. They can include metadata about expected types,\ndescriptions for user interfaces, and validation constraints.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": [ + "object", + "null" + ] + }, + "default_value": { + "description": "Default value to use if no value is provided.", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "Human-readable description of this variable.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The variable name (used in {{variable_name}} placeholders).", + "type": "string" + }, + "required": { + "default": false, + "description": "Whether this variable is required for template processing.", + "type": "boolean" + }, + "type": { + "anyOf": [ + { + "$ref": "#/$defs/PromptVariableType" + }, + { + "type": "null" + } + ], + "description": "The expected type of this variable's value." + }, + "value": { + "description": "The current value of the variable (if set).", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "PromptVariableType": { + "description": "The expected type of a prompt variable's value.\n\nThis helps clients provide appropriate input interfaces and validation\nfor prompt variables.", + "oneOf": [ + { + "const": "string", + "description": "A string value (default if not specified).", + "type": "string" + }, + { + "const": "number", + "description": "A numeric value (integer or float).", + "type": "string" + }, + { + "const": "boolean", + "description": "A boolean value (true/false).", + "type": "string" + }, + { + "const": "date_time", + "description": "A date/time value in ISO 8601 format.", + "type": "string" + }, + { + "const": "url", + "description": "A URL or URI reference.", + "type": "string" + }, + { + "const": "email", + "description": "An email address.", + "type": "string" + }, + { + "const": "text", + "description": "A multiline text value.", + "type": "string" + }, + { + "additionalProperties": false, + "description": "A value selected from a predefined list (enum-like).", + "properties": { + "select": { + "properties": { + "options": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "options" + ], + "type": "object" + } + }, + "required": [ + "select" + ], + "type": "object" + } + ] + }, "ProtocolVersion": { "description": "Protocol version identifier.\n\nThis version is only bumped for breaking changes.\nNon-breaking changes should be introduced via capabilities.", "format": "uint16", @@ -4859,7 +5800,10 @@ "type": "string" } }, - "required": ["apiType", "baseUrl"], + "required": [ + "apiType", + "baseUrl" + ], "type": "object" }, "ProviderInfo": { @@ -4868,7 +5812,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "current": { "anyOf": [ @@ -4897,7 +5844,11 @@ "type": "array" } }, - "required": ["id", "supported", "required"], + "required": [ + "id", + "supported", + "required" + ], "type": "object" }, "ProvidersCapabilities": { @@ -4906,7 +5857,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -4931,7 +5885,10 @@ "description": "The start position (inclusive)." } }, - "required": ["start", "end"], + "required": [ + "start", + "end" + ], "type": "object" }, "ReadTextFileRequest": { @@ -4940,19 +5897,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "limit": { "description": "Maximum number of lines to read.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "line": { "description": "Line number to start reading from (1-based).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "path": { "description": "Absolute path to the file to read.", @@ -4967,7 +5933,10 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "path"], + "required": [ + "sessionId", + "path" + ], "type": "object", "x-method": "fs/read_text_file", "x-side": "client" @@ -4978,13 +5947,18 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "type": "string" } }, - "required": ["content"], + "required": [ + "content" + ], "type": "object", "x-method": "fs/read_text_file", "x-side": "client" @@ -4995,7 +5969,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "id": { "description": "The ID of the rejected suggestion.", @@ -5021,7 +5998,10 @@ "description": "The session ID for this notification." } }, - "required": ["sessionId", "id"], + "required": [ + "sessionId", + "id" + ], "type": "object", "x-method": "nes/reject", "x-side": "agent" @@ -5032,7 +6012,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -5047,7 +6030,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/release", "x-side": "client" @@ -5058,7 +6044,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -5097,7 +6086,9 @@ "type": "string" } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object" }, { @@ -5113,7 +6104,9 @@ "type": "string" } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object" } ] @@ -5124,7 +6117,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "options": { "description": "Available permission options for the user to choose from.", @@ -5150,7 +6146,11 @@ "description": "Details about the tool call requiring permission." } }, - "required": ["sessionId", "toolCall", "options"], + "required": [ + "sessionId", + "toolCall", + "options" + ], "type": "object", "x-method": "session/request_permission", "x-side": "client" @@ -5161,7 +6161,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "outcome": { "allOf": [ @@ -5172,7 +6175,9 @@ "description": "The user's decision on the permission request." } }, - "required": ["outcome"], + "required": [ + "outcome" + ], "type": "object", "x-method": "session/request_permission", "x-side": "client" @@ -5183,7 +6188,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -5196,26 +6204,41 @@ ] }, "description": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "type": "string" }, "size": { "format": "int64", - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "title": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "uri": { "type": "string" } }, - "required": ["name", "uri"], + "required": [ + "name", + "uri" + ], "type": "object" }, "ResumeSessionRequest": { @@ -5224,7 +6247,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the resumed\nsession.", @@ -5253,7 +6279,10 @@ "description": "The ID of the session to resume." } }, - "required": ["sessionId", "cwd"], + "required": [ + "sessionId", + "cwd" + ], "type": "object", "x-method": "session/resume", "x-side": "agent" @@ -5264,14 +6293,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "Initial session configuration options if supported by the Agent.", "items": { "$ref": "#/$defs/SessionConfigOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "models": { "anyOf": [ @@ -5302,7 +6337,10 @@ }, "Role": { "description": "The sender or recipient of messages and data in a conversation.", - "enum": ["assistant", "user"], + "enum": [ + "assistant", + "user" + ], "type": "string" }, "SelectedPermissionOutcome": { @@ -5311,7 +6349,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "optionId": { "allOf": [ @@ -5322,7 +6363,9 @@ "description": "The ID of the option the user selected." } }, - "required": ["optionId"], + "required": [ + "optionId" + ], "type": "object" }, "SessionAdditionalDirectoriesCapabilities": { @@ -5331,7 +6374,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5342,7 +6388,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "anyOf": [ @@ -5408,7 +6457,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5421,7 +6473,9 @@ "type": "boolean" } }, - "required": ["currentValue"], + "required": [ + "currentValue" + ], "type": "object" }, "SessionConfigGroupId": { @@ -5451,7 +6505,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -5467,7 +6523,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" } ], @@ -5475,7 +6533,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "category": { "anyOf": [ @@ -5490,7 +6551,10 @@ }, "description": { "description": "Optional description for the Client to display to the user.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "allOf": [ @@ -5505,7 +6569,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "SessionConfigOptionCategory": { @@ -5553,7 +6620,10 @@ "description": "The set of selectable options." } }, - "required": ["currentValue", "options"], + "required": [ + "currentValue", + "options" + ], "type": "object" }, "SessionConfigSelectGroup": { @@ -5562,7 +6632,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "group": { "allOf": [ @@ -5584,7 +6657,11 @@ "type": "array" } }, - "required": ["group", "name", "options"], + "required": [ + "group", + "name", + "options" + ], "type": "object" }, "SessionConfigSelectOption": { @@ -5593,11 +6670,17 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { "description": "Optional description for this option value.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "name": { "description": "Human-readable label for this option value.", @@ -5612,7 +6695,10 @@ "description": "Unique identifier for this option value." } }, - "required": ["value", "name"], + "required": [ + "value", + "name" + ], "type": "object" }, "SessionConfigSelectOptions": { @@ -5646,7 +6732,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5661,7 +6750,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "additionalDirectories": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAuthoritative ordered additional workspace roots for this session. Each path must be absolute.\n\nWhen omitted or empty, there are no additional roots for the session.", @@ -5684,14 +6776,23 @@ }, "title": { "description": "Human-readable title for the session", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "updatedAt": { "description": "ISO 8601 timestamp of last activity", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, - "required": ["sessionId", "cwd"], + "required": [ + "sessionId", + "cwd" + ], "type": "object" }, "SessionInfoUpdate": { @@ -5700,15 +6801,24 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "title": { "description": "Human-readable title for the session. Set to null to clear.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "updatedAt": { "description": "ISO 8601 timestamp of last activity. Set to null to clear.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -5719,7 +6829,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5730,10 +6843,16 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "description": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "id": { "$ref": "#/$defs/SessionModeId" @@ -5742,7 +6861,10 @@ "type": "string" } }, - "required": ["id", "name"], + "required": [ + "id", + "name" + ], "type": "object" }, "SessionModeId": { @@ -5755,7 +6877,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "availableModes": { "description": "The set of modes that the Agent can operate in", @@ -5773,7 +6898,10 @@ "description": "The current mode the Agent is in." } }, - "required": ["currentModeId", "availableModes"], + "required": [ + "currentModeId", + "availableModes" + ], "type": "object" }, "SessionModelState": { @@ -5782,7 +6910,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "availableModels": { "description": "The set of models that the Agent can use", @@ -5800,7 +6931,10 @@ "description": "The current model the Agent is in." } }, - "required": ["currentModelId", "availableModels"], + "required": [ + "currentModelId", + "availableModels" + ], "type": "object" }, "SessionNotification": { @@ -5809,7 +6943,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -5828,7 +6965,10 @@ "description": "The actual update content." } }, - "required": ["sessionId", "update"], + "required": [ + "sessionId", + "update" + ], "type": "object", "x-method": "session/update", "x-side": "client" @@ -5839,7 +6979,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object" @@ -5863,7 +7006,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5879,7 +7024,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5895,7 +7042,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5911,7 +7060,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5927,7 +7078,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5943,7 +7096,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5959,7 +7114,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5975,7 +7132,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -5991,7 +7150,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -6007,7 +7168,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" }, { @@ -6023,7 +7186,9 @@ "type": "string" } }, - "required": ["sessionUpdate"], + "required": [ + "sessionUpdate" + ], "type": "object" } ] @@ -6034,7 +7199,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "apiType": { "allOf": [ @@ -6060,7 +7228,11 @@ "type": "string" } }, - "required": ["id", "apiType", "baseUrl"], + "required": [ + "id", + "apiType", + "baseUrl" + ], "type": "object", "x-method": "providers/set", "x-side": "agent" @@ -6071,7 +7243,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -6092,7 +7267,10 @@ "type": "boolean" } }, - "required": ["type", "value"], + "required": [ + "type", + "value" + ], "type": "object" }, { @@ -6107,7 +7285,9 @@ "description": "The value ID." } }, - "required": ["value"], + "required": [ + "value" + ], "title": "value_id", "type": "object" } @@ -6117,7 +7297,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configId": { "allOf": [ @@ -6136,7 +7319,10 @@ "description": "The ID of the session to set the configuration option for." } }, - "required": ["sessionId", "configId"], + "required": [ + "sessionId", + "configId" + ], "type": "object", "x-method": "session/set_config_option", "x-side": "agent" @@ -6147,7 +7333,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "configOptions": { "description": "The full set of configuration options and their current values.", @@ -6157,7 +7346,9 @@ "type": "array" } }, - "required": ["configOptions"], + "required": [ + "configOptions" + ], "type": "object", "x-method": "session/set_config_option", "x-side": "agent" @@ -6168,7 +7359,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "modeId": { "allOf": [ @@ -6187,7 +7381,10 @@ "description": "The ID of the session to set the mode for." } }, - "required": ["sessionId", "modeId"], + "required": [ + "sessionId", + "modeId" + ], "type": "object", "x-method": "session/set_mode", "x-side": "agent" @@ -6198,7 +7395,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -6211,7 +7411,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "modelId": { "allOf": [ @@ -6230,7 +7433,10 @@ "description": "The ID of the session to set the model for." } }, - "required": ["sessionId", "modelId"], + "required": [ + "sessionId", + "modelId" + ], "type": "object", "x-method": "session/set_model", "x-side": "agent" @@ -6241,7 +7447,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -6254,7 +7463,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "repository": { "anyOf": [ @@ -6272,11 +7484,17 @@ "items": { "$ref": "#/$defs/WorkspaceFolder" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "workspaceUri": { "description": "The root URI of the workspace.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object", @@ -6289,7 +7507,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -6300,7 +7521,9 @@ "description": "The session ID for the newly started NES session." } }, - "required": ["sessionId"], + "required": [ + "sessionId" + ], "type": "object", "x-method": "nes/start", "x-side": "agent" @@ -6365,18 +7588,27 @@ "properties": { "default": { "description": "Default value.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "description": { "description": "Human-readable description.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "enum": { "description": "Enum values for untitled single-select enums.", "items": { "type": "string" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "format": { "anyOf": [ @@ -6393,28 +7625,43 @@ "description": "Maximum string length.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "minLength": { "description": "Minimum string length.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "oneOf": { "description": "Titled enum options for titled single-select enums.", "items": { "$ref": "#/$defs/EnumOption" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "pattern": { "description": "Pattern the string must match.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "title": { "description": "Optional title for the property.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -6425,7 +7672,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "context": { "anyOf": [ @@ -6483,7 +7733,13 @@ "type": "integer" } }, - "required": ["sessionId", "uri", "version", "position", "triggerKind"], + "required": [ + "sessionId", + "uri", + "version", + "position", + "triggerKind" + ], "type": "object", "x-method": "nes/suggest", "x-side": "agent" @@ -6494,7 +7750,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "suggestions": { "description": "The list of suggestions.", @@ -6504,7 +7763,9 @@ "type": "array" } }, - "required": ["suggestions"], + "required": [ + "suggestions" + ], "type": "object", "x-method": "nes/suggest", "x-side": "agent" @@ -6515,13 +7776,18 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "terminalId": { "type": "string" } }, - "required": ["terminalId"], + "required": [ + "terminalId" + ], "type": "object" }, "TerminalExitStatus": { @@ -6530,17 +7796,26 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitCode": { "description": "The process exit code (may be null if terminated by signal).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "signal": { "description": "The signal that terminated the process (may be null if exited normally).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object" @@ -6551,7 +7826,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -6566,7 +7844,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/output", "x-side": "client" @@ -6577,7 +7858,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitStatus": { "anyOf": [ @@ -6599,7 +7883,10 @@ "type": "boolean" } }, - "required": ["output", "truncated"], + "required": [ + "output", + "truncated" + ], "type": "object", "x-method": "terminal/output", "x-side": "client" @@ -6610,7 +7897,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "annotations": { "anyOf": [ @@ -6626,7 +7916,9 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "type": "object" }, "TextDocumentContentChangeEvent": { @@ -6648,7 +7940,9 @@ "type": "string" } }, - "required": ["text"], + "required": [ + "text" + ], "type": "object" }, "TextDocumentSyncKind": { @@ -6672,10 +7966,16 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "mimeType": { - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "text": { "type": "string" @@ -6684,7 +7984,10 @@ "type": "string" } }, - "required": ["text", "uri"], + "required": [ + "text", + "uri" + ], "type": "object" }, "TitledMultiSelectItems": { @@ -6698,7 +8001,9 @@ "type": "array" } }, - "required": ["anyOf"], + "required": [ + "anyOf" + ], "type": "object" }, "ToolCall": { @@ -6707,7 +8012,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Content produced by the tool call.", @@ -6758,7 +8066,10 @@ "description": "Unique identifier for this tool call within the session." } }, - "required": ["toolCallId", "title"], + "required": [ + "toolCallId", + "title" + ], "type": "object" }, "ToolCallContent": { @@ -6780,7 +8091,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -6796,7 +8109,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" }, { @@ -6812,7 +8127,9 @@ "type": "string" } }, - "required": ["type"], + "required": [ + "type" + ], "type": "object" } ] @@ -6827,20 +8144,28 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "line": { "description": "Optional line number within the file.", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "path": { "description": "The file path being accessed or modified.", "type": "string" } }, - "required": ["path"], + "required": [ + "path" + ], "type": "object" }, "ToolCallStatus": { @@ -6874,14 +8199,20 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "Replace the content collection.", "items": { "$ref": "#/$defs/ToolCallContent" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "kind": { "anyOf": [ @@ -6899,7 +8230,10 @@ "items": { "$ref": "#/$defs/ToolCallLocation" }, - "type": ["array", "null"] + "type": [ + "array", + "null" + ] }, "rawInput": { "description": "Update the raw input." @@ -6920,7 +8254,10 @@ }, "title": { "description": "Update the human-readable title.", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] }, "toolCallId": { "allOf": [ @@ -6931,7 +8268,9 @@ "description": "The ID of the tool call being updated." } }, - "required": ["toolCallId"], + "required": [ + "toolCallId" + ], "type": "object" }, "ToolKind": { @@ -6995,14 +8334,19 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "hint": { "description": "A hint to display when the input hasn't been provided yet", "type": "string" } }, - "required": ["hint"], + "required": [ + "hint" + ], "type": "object" }, "UntitledMultiSelectItems": { @@ -7024,7 +8368,10 @@ "description": "Item type discriminator. Must be `\"string\"`." } }, - "required": ["type", "enum"], + "required": [ + "type", + "enum" + ], "type": "object" }, "Usage": { @@ -7034,13 +8381,19 @@ "description": "Total cache read tokens.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "cachedWriteTokens": { "description": "Total cache write tokens.", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "inputTokens": { "description": "Total input tokens across all turns.", @@ -7058,7 +8411,10 @@ "description": "Total thought/reasoning tokens", "format": "uint64", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "totalTokens": { "description": "Sum of all token types across session.", @@ -7067,7 +8423,11 @@ "type": "integer" } }, - "required": ["totalTokens", "inputTokens", "outputTokens"], + "required": [ + "totalTokens", + "inputTokens", + "outputTokens" + ], "type": "object" }, "UsageUpdate": { @@ -7076,7 +8436,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "cost": { "anyOf": [ @@ -7102,7 +8465,10 @@ "type": "integer" } }, - "required": ["used", "size"], + "required": [ + "used", + "size" + ], "type": "object" }, "WaitForTerminalExitRequest": { @@ -7111,7 +8477,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "sessionId": { "allOf": [ @@ -7126,7 +8495,10 @@ "type": "string" } }, - "required": ["sessionId", "terminalId"], + "required": [ + "sessionId", + "terminalId" + ], "type": "object", "x-method": "terminal/wait_for_exit", "x-side": "client" @@ -7137,17 +8509,26 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "exitCode": { "description": "The process exit code (may be null if terminated by signal).", "format": "uint32", "minimum": 0, - "type": ["integer", "null"] + "type": [ + "integer", + "null" + ] }, "signal": { "description": "The signal that terminated the process (may be null if exited normally).", - "type": ["string", "null"] + "type": [ + "string", + "null" + ] } }, "type": "object", @@ -7166,7 +8547,10 @@ "type": "string" } }, - "required": ["uri", "name"], + "required": [ + "uri", + "name" + ], "type": "object" }, "WriteTextFileRequest": { @@ -7175,7 +8559,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] }, "content": { "description": "The text content to write to the file.", @@ -7194,7 +8581,11 @@ "description": "The session ID for this request." } }, - "required": ["sessionId", "path", "content"], + "required": [ + "sessionId", + "path", + "content" + ], "type": "object", "x-method": "fs/write_text_file", "x-side": "client" @@ -7205,7 +8596,10 @@ "_meta": { "additionalProperties": true, "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", - "type": ["object", "null"] + "type": [ + "object", + "null" + ] } }, "type": "object", @@ -7245,11 +8639,15 @@ "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", "properties": { "jsonrpc": { - "enum": ["2.0"], + "enum": [ + "2.0" + ], "type": "string" } }, - "required": ["jsonrpc"], + "required": [ + "jsonrpc" + ], "title": "Agent", "type": "object" }, @@ -7283,11 +8681,15 @@ "description": "A message (request, response, or notification) with `\"jsonrpc\": \"2.0\"` specified as\n[required by JSON-RPC 2.0 Specification][1].\n\n[1]: https://www.jsonrpc.org/specification#compatibility", "properties": { "jsonrpc": { - "enum": ["2.0"], + "enum": [ + "2.0" + ], "type": "string" } }, - "required": ["jsonrpc"], + "required": [ + "jsonrpc" + ], "title": "Client", "type": "object" }, @@ -7308,4 +8710,4 @@ } ], "title": "Agent Client Protocol" -} +} \ No newline at end of file diff --git a/src/v1/agent.rs b/src/v1/agent.rs index 004988887..09d4813f4 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -4364,6 +4364,12 @@ pub struct PromptCapabilities { /// in prompt requests for pieces of context that are referenced in the message. #[serde(default)] pub embedded_context: bool, + /// Agent supports prompt variables and templates in `session/prompt` requests. + /// + /// When enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`] + /// in prompt requests with variable substitution support. + #[serde(default)] + pub prompt_variables: bool, /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -4403,6 +4409,16 @@ impl PromptCapabilities { self } + /// Agent supports prompt variables and templates in `session/prompt` requests. + /// + /// When enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`] + /// in prompt requests with variable substitution support. + #[must_use] + pub fn prompt_variables(mut self, prompt_variables: bool) -> Self { + self.prompt_variables = prompt_variables; + self + } + /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. diff --git a/src/v1/content.rs b/src/v1/content.rs index 0f301bd82..f7ba0daeb 100644 --- a/src/v1/content.rs +++ b/src/v1/content.rs @@ -57,6 +57,14 @@ pub enum ContentBlock { /// /// Requires the `embeddedContext` prompt capability when included in prompts. Resource(EmbeddedResource), + /// A template that supports variable substitution using {{variable_name}} syntax. + /// + /// Allows dynamic content generation by substituting variables into template strings. + /// Variables are resolved at processing time and can include values from context, + /// user input, or system state. + /// + /// Requires the `promptVariables` prompt capability when included in prompts. + PromptTemplate(PromptTemplateContent), } /// Text provided to or from an LLM. @@ -518,6 +526,201 @@ pub enum Role { User, } +/// A template content block that supports variable substitution. +/// +/// Templates use {{variable_name}} syntax for variable placeholders that can be +/// substituted with actual values at processing time. This enables dynamic content +/// generation and reusable prompt templates. +#[serde_as] +#[skip_serializing_none] +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[non_exhaustive] +pub struct PromptTemplateContent { + #[serde_as(deserialize_as = "DefaultOnError")] + #[serde(default)] + pub annotations: Option, + /// The template string with {{variable_name}} placeholders. + pub template: String, + /// Variables available for substitution in this template. + pub variables: Vec, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl PromptTemplateContent { + #[must_use] + pub fn new(template: impl Into, variables: Vec) -> Self { + Self { + annotations: None, + template: template.into(), + variables, + meta: None, + } + } + + #[must_use] + pub fn annotations(mut self, annotations: impl IntoOption) -> Self { + self.annotations = annotations.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } + + /// Substitute variables in the template and return the resolved text. + /// + /// This method processes the template string and replaces {{variable_name}} + /// placeholders with their corresponding values from the variables vector. + /// If a variable is not found or has no value, the placeholder is left unchanged. + #[must_use] + pub fn substitute(&self) -> String { + let mut result = self.template.clone(); + + for variable in &self.variables { + if let Some(value) = &variable.value { + let placeholder = format!("{{{{{}}}}}", variable.name); + result = result.replace(&placeholder, value); + } + } + + result + } +} + +/// A variable that can be substituted in a prompt template. +/// +/// Variables define named placeholders that can be replaced with actual values +/// during template processing. They can include metadata about expected types, +/// descriptions for user interfaces, and validation constraints. +#[serde_as] +#[skip_serializing_none] +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[non_exhaustive] +pub struct PromptVariable { + /// The variable name (used in {{variable_name}} placeholders). + pub name: String, + /// The current value of the variable (if set). + pub value: Option, + /// Human-readable description of this variable. + pub description: Option, + /// The expected type of this variable's value. + #[serde(rename = "type")] + pub variable_type: Option, + /// Whether this variable is required for template processing. + #[serde(default)] + pub required: bool, + /// Default value to use if no value is provided. + pub default_value: Option, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl PromptVariable { + #[must_use] + pub fn new(name: impl Into) -> Self { + Self { + name: name.into(), + value: None, + description: None, + variable_type: None, + required: false, + default_value: None, + meta: None, + } + } + + #[must_use] + pub fn value(mut self, value: impl IntoOption) -> Self { + self.value = value.into_option(); + self + } + + #[must_use] + pub fn description(mut self, description: impl IntoOption) -> Self { + self.description = description.into_option(); + self + } + + #[must_use] + pub fn variable_type(mut self, variable_type: impl IntoOption) -> Self { + self.variable_type = variable_type.into_option(); + self + } + + #[must_use] + pub fn required(mut self, required: bool) -> Self { + self.required = required; + self + } + + #[must_use] + pub fn default_value(mut self, default_value: impl IntoOption) -> Self { + self.default_value = default_value.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } + + /// Get the effective value for this variable, considering default values. + #[must_use] + pub fn effective_value(&self) -> Option<&String> { + self.value.as_ref().or(self.default_value.as_ref()) + } +} + +/// The expected type of a prompt variable's value. +/// +/// This helps clients provide appropriate input interfaces and validation +/// for prompt variables. +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +#[non_exhaustive] +pub enum PromptVariableType { + /// A string value (default if not specified). + String, + /// A numeric value (integer or float). + Number, + /// A boolean value (true/false). + Boolean, + /// A date/time value in ISO 8601 format. + DateTime, + /// A URL or URI reference. + Url, + /// An email address. + Email, + /// A multiline text value. + Text, + /// A value selected from a predefined list (enum-like). + Select { options: Vec }, +} + #[cfg(test)] mod tests { use super::*; @@ -586,4 +789,55 @@ mod tests { assert!(!json.as_object().unwrap().contains_key("annotations")); assert!(!json.as_object().unwrap().contains_key("meta")); } + + #[test] + fn test_prompt_variable_creation() { + let var = PromptVariable::new("username") + .value("alice") + .description("The user's name") + .variable_type(PromptVariableType::String) + .required(true); + + assert_eq!(var.name, "username"); + assert_eq!(var.value, Some("alice".to_string())); + assert_eq!(var.description, Some("The user's name".to_string())); + assert_eq!(var.variable_type, Some(PromptVariableType::String)); + assert!(var.required); + } + + #[test] + fn test_prompt_template_substitution() { + let variables = vec![ + PromptVariable::new("name").value("Alice"), + PromptVariable::new("task").value("code review"), + ]; + + let template = + PromptTemplateContent::new("Hello {{name}}, please help me with {{task}}.", variables); + + let result = template.substitute(); + assert_eq!(result, "Hello Alice, please help me with code review."); + } + + #[test] + fn test_content_block_prompt_template_v1() { + let variables = vec![PromptVariable::new("language").value("Rust")]; + let template_content = PromptTemplateContent::new("Write {{language}} code", variables); + let content_block = ContentBlock::PromptTemplate(template_content); + + // Test serialization + let json = serde_json::to_value(&content_block).unwrap(); + assert_eq!(json["type"], "prompt_template"); + assert_eq!(json["template"], "Write {{language}} code"); + + // Test deserialization + let parsed: ContentBlock = serde_json::from_value(json).unwrap(); + if let ContentBlock::PromptTemplate(template) = parsed { + assert_eq!(template.template, "Write {{language}} code"); + assert_eq!(template.variables.len(), 1); + assert_eq!(template.variables[0].name, "language"); + } else { + panic!("Expected PromptTemplate variant"); + } + } } diff --git a/src/v2/agent.rs b/src/v2/agent.rs index e7322fd6d..c0ef046c8 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -4364,6 +4364,12 @@ pub struct PromptCapabilities { /// in prompt requests for pieces of context that are referenced in the message. #[serde(default)] pub embedded_context: bool, + /// Agent supports prompt variables and templates in `session/prompt` requests. + /// + /// When enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`] + /// in prompt requests with variable substitution support. + #[serde(default)] + pub prompt_variables: bool, /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -4403,6 +4409,16 @@ impl PromptCapabilities { self } + /// Agent supports prompt variables and templates in `session/prompt` requests. + /// + /// When enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`] + /// in prompt requests with variable substitution support. + #[must_use] + pub fn prompt_variables(mut self, prompt_variables: bool) -> Self { + self.prompt_variables = prompt_variables; + self + } + /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. diff --git a/src/v2/content.rs b/src/v2/content.rs index 301479c4b..c9e65f2ec 100644 --- a/src/v2/content.rs +++ b/src/v2/content.rs @@ -58,6 +58,14 @@ pub enum ContentBlock { /// /// Requires the `embeddedContext` prompt capability when included in prompts. Resource(EmbeddedResource), + /// A template that supports variable substitution using {{variable_name}} syntax. + /// + /// Allows dynamic content generation by substituting variables into template strings. + /// Variables are resolved at processing time and can include values from context, + /// user input, or system state. + /// + /// Requires the `promptVariables` prompt capability when included in prompts. + PromptTemplate(PromptTemplateContent), } /// Text provided to or from an LLM. @@ -519,6 +527,201 @@ pub enum Role { User, } +/// A template content block that supports variable substitution. +/// +/// Templates use {{variable_name}} syntax for variable placeholders that can be +/// substituted with actual values at processing time. This enables dynamic content +/// generation and reusable prompt templates. +#[serde_as] +#[skip_serializing_none] +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[non_exhaustive] +pub struct PromptTemplateContent { + #[serde_as(deserialize_as = "DefaultOnError")] + #[serde(default)] + pub annotations: Option, + /// The template string with {{variable_name}} placeholders. + pub template: String, + /// Variables available for substitution in this template. + pub variables: Vec, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl PromptTemplateContent { + #[must_use] + pub fn new(template: impl Into, variables: Vec) -> Self { + Self { + annotations: None, + template: template.into(), + variables, + meta: None, + } + } + + #[must_use] + pub fn annotations(mut self, annotations: impl IntoOption) -> Self { + self.annotations = annotations.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } + + /// Substitute variables in the template and return the resolved text. + /// + /// This method processes the template string and replaces {{variable_name}} + /// placeholders with their corresponding values from the variables vector. + /// If a variable is not found or has no value, the placeholder is left unchanged. + #[must_use] + pub fn substitute(&self) -> String { + let mut result = self.template.clone(); + + for variable in &self.variables { + if let Some(value) = &variable.value { + let placeholder = format!("{{{{{}}}}}", variable.name); + result = result.replace(&placeholder, value); + } + } + + result + } +} + +/// A variable that can be substituted in a prompt template. +/// +/// Variables define named placeholders that can be replaced with actual values +/// during template processing. They can include metadata about expected types, +/// descriptions for user interfaces, and validation constraints. +#[serde_as] +#[skip_serializing_none] +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[non_exhaustive] +pub struct PromptVariable { + /// The variable name (used in {{variable_name}} placeholders). + pub name: String, + /// The current value of the variable (if set). + pub value: Option, + /// Human-readable description of this variable. + pub description: Option, + /// The expected type of this variable's value. + #[serde(rename = "type")] + pub variable_type: Option, + /// Whether this variable is required for template processing. + #[serde(default)] + pub required: bool, + /// Default value to use if no value is provided. + pub default_value: Option, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl PromptVariable { + #[must_use] + pub fn new(name: impl Into) -> Self { + Self { + name: name.into(), + value: None, + description: None, + variable_type: None, + required: false, + default_value: None, + meta: None, + } + } + + #[must_use] + pub fn value(mut self, value: impl IntoOption) -> Self { + self.value = value.into_option(); + self + } + + #[must_use] + pub fn description(mut self, description: impl IntoOption) -> Self { + self.description = description.into_option(); + self + } + + #[must_use] + pub fn variable_type(mut self, variable_type: impl IntoOption) -> Self { + self.variable_type = variable_type.into_option(); + self + } + + #[must_use] + pub fn required(mut self, required: bool) -> Self { + self.required = required; + self + } + + #[must_use] + pub fn default_value(mut self, default_value: impl IntoOption) -> Self { + self.default_value = default_value.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } + + /// Get the effective value for this variable, considering default values. + #[must_use] + pub fn effective_value(&self) -> Option<&String> { + self.value.as_ref().or(self.default_value.as_ref()) + } +} + +/// The expected type of a prompt variable's value. +/// +/// This helps clients provide appropriate input interfaces and validation +/// for prompt variables. +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +#[non_exhaustive] +pub enum PromptVariableType { + /// A string value (default if not specified). + String, + /// A numeric value (integer or float). + Number, + /// A boolean value (true/false). + Boolean, + /// A date/time value in ISO 8601 format. + DateTime, + /// A URL or URI reference. + Url, + /// An email address. + Email, + /// A multiline text value. + Text, + /// A value selected from a predefined list (enum-like). + Select { options: Vec }, +} + #[cfg(test)] mod tests { use super::*; @@ -587,4 +790,156 @@ mod tests { assert!(!json.as_object().unwrap().contains_key("annotations")); assert!(!json.as_object().unwrap().contains_key("meta")); } + + #[test] + fn test_prompt_variable_creation() { + let var = PromptVariable::new("username") + .value("alice") + .description("The user's name") + .variable_type(PromptVariableType::String) + .required(true); + + assert_eq!(var.name, "username"); + assert_eq!(var.value, Some("alice".to_string())); + assert_eq!(var.description, Some("The user's name".to_string())); + assert_eq!(var.variable_type, Some(PromptVariableType::String)); + assert!(var.required); + } + + #[test] + fn test_prompt_variable_effective_value() { + // Test with value set + let var_with_value = PromptVariable::new("test") + .value("actual_value") + .default_value("default_value"); + assert_eq!( + var_with_value.effective_value(), + Some(&"actual_value".to_string()) + ); + + // Test with only default value + let var_with_default = PromptVariable::new("test").default_value("default_value"); + assert_eq!( + var_with_default.effective_value(), + Some(&"default_value".to_string()) + ); + + // Test with neither value nor default + let var_empty = PromptVariable::new("test"); + assert_eq!(var_empty.effective_value(), None); + } + + #[test] + fn test_prompt_template_substitution() { + let variables = vec![ + PromptVariable::new("name").value("Alice"), + PromptVariable::new("age").value("25"), + PromptVariable::new("city").value("New York"), + ]; + + let template = PromptTemplateContent::new( + "Hello {{name}}, you are {{age}} years old and live in {{city}}!", + variables, + ); + + let result = template.substitute(); + assert_eq!( + result, + "Hello Alice, you are 25 years old and live in New York!" + ); + } + + #[test] + fn test_prompt_template_substitution_with_missing_values() { + let variables = vec![ + PromptVariable::new("name").value("Alice"), + PromptVariable::new("age"), // No value set + ]; + + let template = + PromptTemplateContent::new("Hello {{name}}, you are {{age}} years old!", variables); + + let result = template.substitute(); + // Missing variables should remain as placeholders + assert_eq!(result, "Hello Alice, you are {{age}} years old!"); + } + + #[test] + fn test_prompt_template_substitution_with_default_values() { + let variables = vec![ + PromptVariable::new("name").value("Alice"), + PromptVariable::new("greeting").default_value("Hello"), + ]; + + let template = PromptTemplateContent::new("{{greeting}} {{name}}!", variables); + + // Note: substitute() currently only uses explicit values, not defaults + // This behavior could be enhanced to use effective_value() + let result = template.substitute(); + assert_eq!(result, "{{greeting}} Alice!"); + } + + #[test] + fn test_prompt_variable_type_serialization() { + // Test basic types + let string_type = PromptVariableType::String; + let json = serde_json::to_value(&string_type).unwrap(); + assert_eq!(json, "string"); + + let number_type = PromptVariableType::Number; + let json = serde_json::to_value(&number_type).unwrap(); + assert_eq!(json, "number"); + + // Test select type with options + let select_type = PromptVariableType::Select { + options: vec!["option1".to_string(), "option2".to_string()], + }; + let json = serde_json::to_value(&select_type).unwrap(); + assert_eq!(json["select"]["options"], serde_json::json!(["option1", "option2"])); + } + + #[test] + fn test_content_block_prompt_template() { + let variables = vec![PromptVariable::new("user").value("Bob")]; + let template_content = PromptTemplateContent::new("Welcome {{user}}!", variables); + let content_block = ContentBlock::PromptTemplate(template_content); + + // Test serialization + let json = serde_json::to_value(&content_block).unwrap(); + assert_eq!(json["type"], "prompt_template"); + assert_eq!(json["template"], "Welcome {{user}}!"); + + // Test deserialization + let parsed: ContentBlock = serde_json::from_value(json).unwrap(); + if let ContentBlock::PromptTemplate(template) = parsed { + assert_eq!(template.template, "Welcome {{user}}!"); + assert_eq!(template.variables.len(), 1); + assert_eq!(template.variables[0].name, "user"); + } else { + panic!("Expected PromptTemplate variant"); + } + } + + #[test] + fn test_prompt_template_roundtrip() { + let variables = vec![ + PromptVariable::new("name") + .value("Test User") + .description("The name of the user") + .variable_type(PromptVariableType::String) + .required(true), + PromptVariable::new("count") + .value("5") + .variable_type(PromptVariableType::Number) + .default_value("1"), + ]; + + let original = + PromptTemplateContent::new("Hello {{name}}, you have {{count}} messages.", variables); + + let json = serde_json::to_value(&original).unwrap(); + let parsed: PromptTemplateContent = serde_json::from_value(json).unwrap(); + + assert_eq!(original, parsed); + } } diff --git a/src/v2/conversion.rs b/src/v2/conversion.rs index 0258578a3..18910e176 100644 --- a/src/v2/conversion.rs +++ b/src/v2/conversion.rs @@ -5102,12 +5102,14 @@ impl IntoV1 for super::PromptCapabilities { image, audio, embedded_context, + prompt_variables, meta, } = self; Ok(crate::v1::PromptCapabilities { image: image.into_v1()?, audio: audio.into_v1()?, embedded_context: embedded_context.into_v1()?, + prompt_variables: prompt_variables.into_v1()?, meta: meta.into_v1()?, }) } @@ -5121,12 +5123,14 @@ impl IntoV2 for crate::v1::PromptCapabilities { image, audio, embedded_context, + prompt_variables, meta, } = self; Ok(super::PromptCapabilities { image: image.into_v2()?, audio: audio.into_v2()?, embedded_context: embedded_context.into_v2()?, + prompt_variables: prompt_variables.into_v2()?, meta: meta.into_v2()?, }) } @@ -8392,6 +8396,9 @@ impl IntoV1 for super::ContentBlock { Self::Audio(value) => crate::v1::ContentBlock::Audio(value.into_v1()?), Self::ResourceLink(value) => crate::v1::ContentBlock::ResourceLink(value.into_v1()?), Self::Resource(value) => crate::v1::ContentBlock::Resource(value.into_v1()?), + Self::PromptTemplate(value) => { + crate::v1::ContentBlock::PromptTemplate(value.into_v1()?) + } }) } } @@ -8406,6 +8413,7 @@ impl IntoV2 for crate::v1::ContentBlock { Self::Audio(value) => super::ContentBlock::Audio(value.into_v2()?), Self::ResourceLink(value) => super::ContentBlock::ResourceLink(value.into_v2()?), Self::Resource(value) => super::ContentBlock::Resource(value.into_v2()?), + Self::PromptTemplate(value) => super::ContentBlock::PromptTemplate(value.into_v2()?), }) } } @@ -8778,6 +8786,132 @@ impl IntoV2 for crate::v1::Role { } } +impl IntoV1 for super::PromptTemplateContent { + type Output = crate::v1::PromptTemplateContent; + + fn into_v1(self) -> Result { + let Self { + annotations, + template, + variables, + meta, + } = self; + Ok(crate::v1::PromptTemplateContent { + annotations: annotations.into_v1()?, + template: template.into_v1()?, + variables: variables.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +impl IntoV2 for crate::v1::PromptTemplateContent { + type Output = super::PromptTemplateContent; + + fn into_v2(self) -> Result { + let Self { + annotations, + template, + variables, + meta, + } = self; + Ok(super::PromptTemplateContent { + annotations: annotations.into_v2()?, + template: template.into_v2()?, + variables: variables.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +impl IntoV1 for super::PromptVariable { + type Output = crate::v1::PromptVariable; + + fn into_v1(self) -> Result { + let Self { + name, + value, + description, + variable_type, + required, + default_value, + meta, + } = self; + Ok(crate::v1::PromptVariable { + name: name.into_v1()?, + value: value.into_v1()?, + description: description.into_v1()?, + variable_type: variable_type.into_v1()?, + required: required.into_v1()?, + default_value: default_value.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +impl IntoV2 for crate::v1::PromptVariable { + type Output = super::PromptVariable; + + fn into_v2(self) -> Result { + let Self { + name, + value, + description, + variable_type, + required, + default_value, + meta, + } = self; + Ok(super::PromptVariable { + name: name.into_v2()?, + value: value.into_v2()?, + description: description.into_v2()?, + variable_type: variable_type.into_v2()?, + required: required.into_v2()?, + default_value: default_value.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +impl IntoV1 for super::PromptVariableType { + type Output = crate::v1::PromptVariableType; + + fn into_v1(self) -> Result { + Ok(match self { + Self::String => crate::v1::PromptVariableType::String, + Self::Number => crate::v1::PromptVariableType::Number, + Self::Boolean => crate::v1::PromptVariableType::Boolean, + Self::DateTime => crate::v1::PromptVariableType::DateTime, + Self::Url => crate::v1::PromptVariableType::Url, + Self::Email => crate::v1::PromptVariableType::Email, + Self::Text => crate::v1::PromptVariableType::Text, + Self::Select { options } => crate::v1::PromptVariableType::Select { + options: options.into_v1()?, + }, + }) + } +} + +impl IntoV2 for crate::v1::PromptVariableType { + type Output = super::PromptVariableType; + + fn into_v2(self) -> Result { + Ok(match self { + Self::String => super::PromptVariableType::String, + Self::Number => super::PromptVariableType::Number, + Self::Boolean => super::PromptVariableType::Boolean, + Self::DateTime => super::PromptVariableType::DateTime, + Self::Url => super::PromptVariableType::Url, + Self::Email => super::PromptVariableType::Email, + Self::Text => super::PromptVariableType::Text, + Self::Select { options } => super::PromptVariableType::Select { + options: options.into_v2()?, + }, + }) + } +} + #[cfg(test)] mod tests { use super::*; @@ -9023,6 +9157,82 @@ mod tests { assert_json_eq_after_v2_to_v1::(request); } + #[test] + fn round_trips_prompt_template_content() { + let variables = vec![ + v1::PromptVariable::new("name").value("Alice"), + v1::PromptVariable::new("task") + .value("testing") + .description("The task to perform") + .variable_type(v1::PromptVariableType::String) + .required(true), + ]; + let template = + v1::PromptTemplateContent::new("Hello {{name}}, let's do some {{task}}!", variables); + + assert_v1_round_trip::( + template.clone(), + ); + assert_json_eq_after_v1_to_v2::( + template, + ); + } + + #[test] + fn round_trips_prompt_variable_types() { + let test_types = vec![ + v2::PromptVariableType::String, + v2::PromptVariableType::Number, + v2::PromptVariableType::Boolean, + v2::PromptVariableType::DateTime, + v2::PromptVariableType::Url, + v2::PromptVariableType::Email, + v2::PromptVariableType::Text, + v2::PromptVariableType::Select { + options: vec!["option1".to_string(), "option2".to_string()], + }, + ]; + + for var_type in test_types { + assert_v2_round_trip::( + var_type.clone(), + ); + assert_json_eq_after_v2_to_v1::( + var_type, + ); + } + } + + #[test] + fn round_trips_prompt_capabilities_with_variables() { + let capabilities = v1::PromptCapabilities::new() + .image(true) + .audio(false) + .embedded_context(true) + .prompt_variables(true); + + assert_v1_round_trip::( + capabilities.clone(), + ); + assert_json_eq_after_v1_to_v2::( + capabilities, + ); + } + + #[test] + fn round_trips_content_block_with_prompt_template() { + let variables = vec![ + v2::PromptVariable::new("user").value("Bob"), + v2::PromptVariable::new("action").value("review"), + ]; + let template = + v2::PromptTemplateContent::new("{{user}} needs to {{action}} this code", variables); + let content_block = v2::ContentBlock::PromptTemplate(template); + + assert_v2_round_trip::(content_block.clone()); + assert_json_eq_after_v2_to_v1::(content_block); + } + #[test] fn protocol_version_v1_constant_is_unchanged_by_feature_flag() { // Guards against `LATEST` accidentally being re-pointed to V2 in the From d0fef2ef1e8072678682d085cade8c8457d51260 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Fri, 15 May 2026 14:37:07 +0000 Subject: [PATCH 089/152] docs: update registry agents (#1203) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 874032df0..0c7b48e5b 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -67,7 +67,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Augment Code's powerful software agent, backed by industry-leading context engine - **0.27.0**, + **0.27.1**, Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.2**, + **3.0.3**, Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.41**, + **0.3.43**, Factory Droid - AI coding agent powered by Factory AI - **0.125.0** + **0.126.0** GitHub's AI pair programmer - **1.0.47**, + **1.0.48**, The open source coding agent - **7.2.52**, + **7.3.0**, The open source coding agent - **1.14.50**, + **1.15.0**, Date: Fri, 15 May 2026 17:03:52 +0000 Subject: [PATCH 090/152] docs: update registry agents (#1204) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 0c7b48e5b..534b4d6a0 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -963,7 +963,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Open-source DevOps agent in Rust with enterprise-grade security - **0.3.80**, + **0.3.81**, Date: Fri, 15 May 2026 18:55:26 +0000 Subject: [PATCH 091/152] docs: update registry agents (#1205) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 534b4d6a0..a00a63f27 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -654,7 +654,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > A local, extensible, open source AI agent that automates engineering tasks - **1.34.0**, + **1.34.1**, Date: Fri, 15 May 2026 20:37:14 +0000 Subject: [PATCH 092/152] docs: update registry agents (#1206) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index a00a63f27..82c5c2f6c 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -67,7 +67,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Augment Code's powerful software agent, backed by industry-leading context engine - **0.27.1**, + **0.27.2**, ACP wrapper for Anthropic's Claude - **0.33.1**, + **0.34.0**, Date: Fri, 15 May 2026 23:13:50 +0000 Subject: [PATCH 093/152] docs: update registry agents (#1207) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 82c5c2f6c..afcdeebd4 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.126.0** + **0.127.0** Date: Sat, 16 May 2026 06:36:03 +0000 Subject: [PATCH 094/152] docs: update registry agents (#1208) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index afcdeebd4..e7a222e39 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -772,7 +772,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Nova by Compass AI - a fully-fledged software engineer at your command - **1.1.8**, + **1.1.9**, The open source coding agent - **1.15.0**, + **1.15.1**, Date: Sat, 16 May 2026 09:03:44 +0000 Subject: [PATCH 095/152] docs: update registry agents (#1209) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index e7a222e39..94fa2ae63 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -118,7 +118,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP wrapper for Anthropic's Claude - **0.34.0**, + **0.34.1**, Tencent Cloud's official intelligent coding tool - **2.97.1** + **2.97.2** Date: Sat, 16 May 2026 10:39:38 +0000 Subject: [PATCH 096/152] docs: update registry agents (#1210) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 94fa2ae63..50f52d4c0 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -598,7 +598,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Code and build agents with comprehensive multi-provider support - **0.7.3**, + **0.7.4**, Date: Sat, 16 May 2026 14:01:30 +0000 Subject: [PATCH 097/152] docs: update registry agents (#1211) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 50f52d4c0..ffc85644a 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.15.1**, + **1.15.2**, Date: Sat, 16 May 2026 15:17:46 +0000 Subject: [PATCH 098/152] docs: update registry agents (#1212) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index ffc85644a..c644eca5a 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.15.2**, + **1.15.3**, Date: Sat, 16 May 2026 16:15:05 +0000 Subject: [PATCH 099/152] docs: update registry agents (#1213) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index c644eca5a..5f89e3e27 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -640,7 +640,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP agent powered by Zhipu AI's GLM Coding Plan models (glm-5.1, glm-5-turbo, glm-4.7, glm-4.5-air). Supports streaming, tool calls, mid-session model switching, image input via Z.AI Coding Plan Vision MCP, and session load/fork/resume with on-disk persistence. - **1.1.3**, + **1.1.4**, Date: Sat, 16 May 2026 19:34:36 +0000 Subject: [PATCH 100/152] docs: update registry agents (#1215) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 5f89e3e27..158278b95 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.127.0** + **0.128.0** Date: Sat, 16 May 2026 22:23:06 +0200 Subject: [PATCH 101/152] feat(unstable): Add unstable session delete support (#1216) --- Cargo.toml | 2 + docs/docs.json | 1 + docs/protocol/draft/schema-v2.mdx | 92 +++++++++++ docs/protocol/draft/schema.mdx | 92 +++++++++++ docs/protocol/draft/session-delete.mdx | 90 +++++++++++ docs/protocol/draft/session-list.mdx | 6 + schema/meta.unstable.json | 1 + schema/meta.v2.unstable.json | 1 + schema/schema.unstable.json | 74 +++++++++ schema/schema.v2.unstable.json | 74 +++++++++ src/bin/generate.rs | 1 + src/v1/agent.rs | 206 +++++++++++++++++++++++++ src/v2/agent.rs | 206 +++++++++++++++++++++++++ src/v2/conversion.rs | 98 ++++++++++++ 14 files changed, 944 insertions(+) create mode 100644 docs/protocol/draft/session-delete.mdx diff --git a/Cargo.toml b/Cargo.toml index fe23153af..e4c23b216 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ unstable = [ "unstable_mcp_over_acp", "unstable_nes", "unstable_session_additional_directories", + "unstable_session_delete", "unstable_session_fork", "unstable_session_model", "unstable_session_usage", @@ -42,6 +43,7 @@ unstable_logout = [] unstable_mcp_over_acp = [] unstable_nes = [] unstable_session_additional_directories = [] +unstable_session_delete = [] unstable_session_fork = [] unstable_session_model = [] unstable_session_usage = [] diff --git a/docs/docs.json b/docs/docs.json index 77ccb9e93..8f7d3daad 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -84,6 +84,7 @@ "pages": [ "protocol/draft/session-setup", "protocol/draft/session-list", + "protocol/draft/session-delete", "protocol/draft/file-system", "protocol/draft/cancellation", "protocol/draft/schema" diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index 1fcf3e9f0..b38700c38 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -977,6 +977,64 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +### session/delete + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Deletes an existing session from `session/list`. + +This method is only available if the agent advertises the `sessionCapabilities.delete` capability. + +#### DeleteSessionRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for deleting an existing session from `session/list`. + +Only available if the Agent supports the `sessionCapabilities.delete` capability. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +SessionId} required> + The ID of the session to delete. + + +#### DeleteSessionResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response from deleting a session. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + ### session/fork @@ -6522,6 +6580,17 @@ Whether the agent supports `additionalDirectories` on supported session lifecycl SessionCloseCapabilities | null} > Whether the agent supports `session/close`. + +SessionDeleteCapabilities | null} > + **UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Whether the agent supports `session/delete`. + +Optional. Omitted or `null` both mean the agent does not advertise support. +Supplying `\{\}` means the agent supports deleting sessions from `session/list`. + SessionForkCapabilities | null} > **UNSTABLE** @@ -6786,6 +6855,29 @@ Unique identifier for a session configuration option value. **Type:** `string` +## SessionDeleteCapabilities + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Capabilities for the `session/delete` method. + +Supplying `\{\}` means the agent supports deleting sessions from `session/list`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + ## SessionForkCapabilities **UNSTABLE** diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index 1fcf3e9f0..b38700c38 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -977,6 +977,64 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +### session/delete + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Deletes an existing session from `session/list`. + +This method is only available if the agent advertises the `sessionCapabilities.delete` capability. + +#### DeleteSessionRequest + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Request parameters for deleting an existing session from `session/list`. + +Only available if the Agent supports the `sessionCapabilities.delete` capability. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +SessionId} required> + The ID of the session to delete. + + +#### DeleteSessionResponse + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Response from deleting a session. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + ### session/fork @@ -6522,6 +6580,17 @@ Whether the agent supports `additionalDirectories` on supported session lifecycl SessionCloseCapabilities | null} > Whether the agent supports `session/close`. + +SessionDeleteCapabilities | null} > + **UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Whether the agent supports `session/delete`. + +Optional. Omitted or `null` both mean the agent does not advertise support. +Supplying `\{\}` means the agent supports deleting sessions from `session/list`. + SessionForkCapabilities | null} > **UNSTABLE** @@ -6786,6 +6855,29 @@ Unique identifier for a session configuration option value. **Type:** `string` +## SessionDeleteCapabilities + +**UNSTABLE** + +This capability is not part of the spec yet, and may be removed or changed at any point. + +Capabilities for the `session/delete` method. + +Supplying `\{\}` means the agent supports deleting sessions from `session/list`. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + ## SessionForkCapabilities **UNSTABLE** diff --git a/docs/protocol/draft/session-delete.mdx b/docs/protocol/draft/session-delete.mdx new file mode 100644 index 000000000..f07da9e6a --- /dev/null +++ b/docs/protocol/draft/session-delete.mdx @@ -0,0 +1,90 @@ +--- +title: "Session Delete" +description: "Removing sessions from session history" +--- + +The `session/delete` method allows Clients to remove sessions from an Agent's `session/list` results. This gives users a standard way to manage session history across ACP Clients and Agents. + +Before deleting sessions, Clients **MUST** first complete the [initialization](/protocol/initialization) phase and verify the Agent supports this capability. + +
+ +```mermaid +sequenceDiagram + participant Client + participant Agent + + Note over Agent,Client: Initialized + + Client->>Agent: session/list + Agent-->>Client: session/list response (sessions) + + alt User deletes a session + Client->>Agent: session/delete (sessionId) + Agent-->>Client: session/delete response + end + + Client->>Agent: session/list + Agent-->>Client: session/list response (without deleted session) +``` + +
+ +## Checking Support + +Before attempting to delete a session, Clients **MUST** verify that the Agent supports this capability by checking the unstable `sessionCapabilities.delete` field in the `initialize` response: + +```json highlight={7-9} +{ + "jsonrpc": "2.0", + "id": 0, + "result": { + "protocolVersion": 1, + "agentCapabilities": { + "sessionCapabilities": { + "delete": {} + } + } + } +} +``` + +If `sessionCapabilities.delete` is omitted or `null`, the Agent does not support deleting sessions and Clients **MUST NOT** attempt to call `session/delete`. Supplying `{}` means the Agent supports the method. + +## Deleting a Session + +Clients delete a session by calling `session/delete` with the session ID to remove from session history: + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "method": "session/delete", + "params": { + "sessionId": "sess_abc123def456" + } +} +``` + + + Unique identifier for the session to delete. + + +On success, the Agent returns an empty result: + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "result": {} +} +``` + +## Semantics + +- Agents **MUST NOT** accept `session/delete` calls unless they advertised `sessionCapabilities.delete` during initialization. +- Deleted sessions no longer appear in future `session/list` results. +- Deleting an already-deleted session, or a session that never existed, **SHOULD** succeed silently. +- Agents may implement soft delete or hard delete. ACP only specifies the user-facing session-list behavior. +- Behavior for `session/load` on a deleted session is implementation-defined. +- Behavior for deleting an active session is implementation-defined. diff --git a/docs/protocol/draft/session-list.mdx b/docs/protocol/draft/session-list.mdx index 8e1be7908..828d2f717 100644 --- a/docs/protocol/draft/session-list.mdx +++ b/docs/protocol/draft/session-list.mdx @@ -61,6 +61,12 @@ If `sessionCapabilities.list` is not present, the Agent does not support listing list for that session. + + If the Agent advertises the unstable `sessionCapabilities.delete` capability, + Clients can remove sessions from future `session/list` results with + [`session/delete`](/protocol/draft/session-delete). + + ## Listing Sessions Clients discover existing sessions by calling the `session/list` method with optional filtering and pagination parameters: diff --git a/schema/meta.unstable.json b/schema/meta.unstable.json index ba8454819..5775e369d 100644 --- a/schema/meta.unstable.json +++ b/schema/meta.unstable.json @@ -19,6 +19,7 @@ "providers_set": "providers/set", "session_cancel": "session/cancel", "session_close": "session/close", + "session_delete": "session/delete", "session_fork": "session/fork", "session_list": "session/list", "session_load": "session/load", diff --git a/schema/meta.v2.unstable.json b/schema/meta.v2.unstable.json index 5bf73ea4c..91985fc35 100644 --- a/schema/meta.v2.unstable.json +++ b/schema/meta.v2.unstable.json @@ -19,6 +19,7 @@ "providers_set": "providers/set", "session_cancel": "session/cancel", "session_close": "session/close", + "session_delete": "session/delete", "session_fork": "session/fork", "session_list": "session/list", "session_load": "session/load", diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index 3e326ccc1..320aaf10d 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -421,6 +421,14 @@ ], "title": "ListSessionsResponse" }, + { + "allOf": [ + { + "$ref": "#/$defs/DeleteSessionResponse" + } + ], + "title": "DeleteSessionResponse" + }, { "allOf": [ { @@ -1277,6 +1285,15 @@ "description": "Lists existing sessions known to the agent.\n\nThis method is only available if the agent advertises the `sessionCapabilities.list` capability.\n\nThe agent should return metadata about sessions with optional filtering and pagination support.", "title": "ListSessionsRequest" }, + { + "allOf": [ + { + "$ref": "#/$defs/DeleteSessionRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nDeletes an existing session from `session/list`.\n\nThis method is only available if the agent advertises the `sessionCapabilities.delete` capability.", + "title": "DeleteSessionRequest" + }, { "allOf": [ { @@ -2037,6 +2054,41 @@ "required": ["currentModeId"], "type": "object" }, + "DeleteSessionRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for deleting an existing session from `session/list`.\n\nOnly available if the Agent supports the `sessionCapabilities.delete` capability.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "sessionId": { + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], + "description": "The ID of the session to delete." + } + }, + "required": ["sessionId"], + "type": "object", + "x-method": "session/delete", + "x-side": "agent" + }, + "DeleteSessionResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse from deleting a session.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object", + "x-method": "session/delete", + "x-side": "agent" + }, "DidChangeDocumentNotification": { "description": "Notification sent when a file is edited.", "properties": { @@ -5653,6 +5705,17 @@ ], "description": "Whether the agent supports `session/close`." }, + "delete": { + "anyOf": [ + { + "$ref": "#/$defs/SessionDeleteCapabilities" + }, + { + "type": "null" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `session/delete`.\n\nOptional. Omitted or `null` both mean the agent does not advertise support.\nSupplying `{}` means the agent supports deleting sessions from `session/list`." + }, "fork": { "anyOf": [ { @@ -5927,6 +5990,17 @@ "description": "Unique identifier for a session configuration option value.", "type": "string" }, + "SessionDeleteCapabilities": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for the `session/delete` method.\n\nSupplying `{}` means the agent supports deleting sessions from `session/list`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object" + }, "SessionForkCapabilities": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for the `session/fork` method.\n\nBy supplying `{}` it means that the agent supports forking of sessions.", "properties": { diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index 3e326ccc1..320aaf10d 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -421,6 +421,14 @@ ], "title": "ListSessionsResponse" }, + { + "allOf": [ + { + "$ref": "#/$defs/DeleteSessionResponse" + } + ], + "title": "DeleteSessionResponse" + }, { "allOf": [ { @@ -1277,6 +1285,15 @@ "description": "Lists existing sessions known to the agent.\n\nThis method is only available if the agent advertises the `sessionCapabilities.list` capability.\n\nThe agent should return metadata about sessions with optional filtering and pagination support.", "title": "ListSessionsRequest" }, + { + "allOf": [ + { + "$ref": "#/$defs/DeleteSessionRequest" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nDeletes an existing session from `session/list`.\n\nThis method is only available if the agent advertises the `sessionCapabilities.delete` capability.", + "title": "DeleteSessionRequest" + }, { "allOf": [ { @@ -2037,6 +2054,41 @@ "required": ["currentModeId"], "type": "object" }, + "DeleteSessionRequest": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for deleting an existing session from `session/list`.\n\nOnly available if the Agent supports the `sessionCapabilities.delete` capability.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "sessionId": { + "allOf": [ + { + "$ref": "#/$defs/SessionId" + } + ], + "description": "The ID of the session to delete." + } + }, + "required": ["sessionId"], + "type": "object", + "x-method": "session/delete", + "x-side": "agent" + }, + "DeleteSessionResponse": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse from deleting a session.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object", + "x-method": "session/delete", + "x-side": "agent" + }, "DidChangeDocumentNotification": { "description": "Notification sent when a file is edited.", "properties": { @@ -5653,6 +5705,17 @@ ], "description": "Whether the agent supports `session/close`." }, + "delete": { + "anyOf": [ + { + "$ref": "#/$defs/SessionDeleteCapabilities" + }, + { + "type": "null" + } + ], + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `session/delete`.\n\nOptional. Omitted or `null` both mean the agent does not advertise support.\nSupplying `{}` means the agent supports deleting sessions from `session/list`." + }, "fork": { "anyOf": [ { @@ -5927,6 +5990,17 @@ "description": "Unique identifier for a session configuration option value.", "type": "string" }, + "SessionDeleteCapabilities": { + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for the `session/delete` method.\n\nSupplying `{}` means the agent supports deleting sessions from `session/list`.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object" + }, "SessionForkCapabilities": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for the `session/fork` method.\n\nBy supplying `{}` it means that the agent supports forking of sessions.", "properties": { diff --git a/src/bin/generate.rs b/src/bin/generate.rs index 80025f9af..1639e413d 100644 --- a/src/bin/generate.rs +++ b/src/bin/generate.rs @@ -1169,6 +1169,7 @@ starting with '$/' it is free to ignore the notification." "session/new" => self.agent.get("NewSessionRequest").unwrap(), "session/load" => self.agent.get("LoadSessionRequest").unwrap(), "session/list" => self.agent.get("ListSessionsRequest").unwrap(), + "session/delete" => self.agent.get("DeleteSessionRequest").unwrap(), "session/fork" => self.agent.get("ForkSessionRequest").unwrap(), "session/resume" => self.agent.get("ResumeSessionRequest").unwrap(), "session/set_mode" => self.agent.get("SetSessionModeRequest").unwrap(), diff --git a/src/v1/agent.rs b/src/v1/agent.rs index 73a206cd2..06368629f 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -1838,6 +1838,95 @@ impl ListSessionsResponse { } } +// Delete session + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Request parameters for deleting an existing session from `session/list`. +/// +/// Only available if the Agent supports the `sessionCapabilities.delete` capability. +#[cfg(feature = "unstable_session_delete")] +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[schemars(extend("x-side" = "agent", "x-method" = SESSION_DELETE_METHOD_NAME))] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct DeleteSessionRequest { + /// The ID of the session to delete. + pub session_id: SessionId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +#[cfg(feature = "unstable_session_delete")] +impl DeleteSessionRequest { + #[must_use] + pub fn new(session_id: impl Into) -> Self { + Self { + session_id: session_id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Response from deleting a session. +#[cfg(feature = "unstable_session_delete")] +#[skip_serializing_none] +#[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[schemars(extend("x-side" = "agent", "x-method" = SESSION_DELETE_METHOD_NAME))] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct DeleteSessionResponse { + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +#[cfg(feature = "unstable_session_delete")] +impl DeleteSessionResponse { + #[must_use] + pub fn new() -> Self { + Self::default() + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + /// Information about a session returned by session/list #[serde_as] #[skip_serializing_none] @@ -4151,6 +4240,18 @@ pub struct SessionCapabilities { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// + /// Whether the agent supports `session/delete`. + /// + /// Optional. Omitted or `null` both mean the agent does not advertise support. + /// Supplying `{}` means the agent supports deleting sessions from `session/list`. + #[cfg(feature = "unstable_session_delete")] + #[serde_as(deserialize_as = "DefaultOnError")] + #[serde(default)] + pub delete: Option, + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. #[cfg(feature = "unstable_session_additional_directories")] #[serde_as(deserialize_as = "DefaultOnError")] @@ -4195,6 +4296,21 @@ impl SessionCapabilities { self } + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Whether the agent supports `session/delete`. + /// + /// Omitted or `null` both mean the agent does not advertise support. + /// Supplying `{}` means the agent supports deleting sessions from `session/list`. + #[cfg(feature = "unstable_session_delete")] + #[must_use] + pub fn delete(mut self, delete: impl IntoOption) -> Self { + self.delete = delete.into_option(); + self + } + /// **UNSTABLE** /// /// This capability is not part of the spec yet, and may be removed or changed at any point. @@ -4278,6 +4394,46 @@ impl SessionListCapabilities { } } +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Capabilities for the `session/delete` method. +/// +/// Supplying `{}` means the agent supports deleting sessions from `session/list`. +#[cfg(feature = "unstable_session_delete")] +#[skip_serializing_none] +#[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[non_exhaustive] +pub struct SessionDeleteCapabilities { + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +#[cfg(feature = "unstable_session_delete")] +impl SessionDeleteCapabilities { + #[must_use] + pub fn new() -> Self { + Self::default() + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + /// **UNSTABLE** /// /// This capability is not part of the spec yet, and may be removed or changed at any point. @@ -4621,6 +4777,9 @@ pub struct AgentMethodNames { pub session_set_model: &'static str, /// Method for listing existing sessions. pub session_list: &'static str, + /// Method for deleting an existing session. + #[cfg(feature = "unstable_session_delete")] + pub session_delete: &'static str, /// Method for forking an existing session. #[cfg(feature = "unstable_session_fork")] pub session_fork: &'static str, @@ -4684,6 +4843,8 @@ pub const AGENT_METHOD_NAMES: AgentMethodNames = AgentMethodNames { #[cfg(feature = "unstable_session_model")] session_set_model: SESSION_SET_MODEL_METHOD_NAME, session_list: SESSION_LIST_METHOD_NAME, + #[cfg(feature = "unstable_session_delete")] + session_delete: SESSION_DELETE_METHOD_NAME, #[cfg(feature = "unstable_session_fork")] session_fork: SESSION_FORK_METHOD_NAME, session_resume: SESSION_RESUME_METHOD_NAME, @@ -4742,6 +4903,9 @@ pub(crate) const SESSION_CANCEL_METHOD_NAME: &str = "session/cancel"; pub(crate) const SESSION_SET_MODEL_METHOD_NAME: &str = "session/set_model"; /// Method name for listing existing sessions. pub(crate) const SESSION_LIST_METHOD_NAME: &str = "session/list"; +/// Method name for deleting an existing session. +#[cfg(feature = "unstable_session_delete")] +pub(crate) const SESSION_DELETE_METHOD_NAME: &str = "session/delete"; /// Method name for forking an existing session. #[cfg(feature = "unstable_session_fork")] pub(crate) const SESSION_FORK_METHOD_NAME: &str = "session/fork"; @@ -4847,6 +5011,15 @@ pub enum ClientRequest { /// /// The agent should return metadata about sessions with optional filtering and pagination support. ListSessionsRequest(ListSessionsRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Deletes an existing session from `session/list`. + /// + /// This method is only available if the agent advertises the `sessionCapabilities.delete` capability. + #[cfg(feature = "unstable_session_delete")] + DeleteSessionRequest(DeleteSessionRequest), #[cfg(feature = "unstable_session_fork")] /// **UNSTABLE** /// @@ -4967,6 +5140,8 @@ impl ClientRequest { Self::NewSessionRequest(_) => AGENT_METHOD_NAMES.session_new, Self::LoadSessionRequest(_) => AGENT_METHOD_NAMES.session_load, Self::ListSessionsRequest(_) => AGENT_METHOD_NAMES.session_list, + #[cfg(feature = "unstable_session_delete")] + Self::DeleteSessionRequest(_) => AGENT_METHOD_NAMES.session_delete, #[cfg(feature = "unstable_session_fork")] Self::ForkSessionRequest(_) => AGENT_METHOD_NAMES.session_fork, Self::ResumeSessionRequest(_) => AGENT_METHOD_NAMES.session_resume, @@ -5014,6 +5189,8 @@ pub enum AgentResponse { NewSessionResponse(NewSessionResponse), LoadSessionResponse(#[serde(default)] LoadSessionResponse), ListSessionsResponse(ListSessionsResponse), + #[cfg(feature = "unstable_session_delete")] + DeleteSessionResponse(#[serde(default)] DeleteSessionResponse), #[cfg(feature = "unstable_session_fork")] ForkSessionResponse(ForkSessionResponse), ResumeSessionResponse(#[serde(default)] ResumeSessionResponse), @@ -5522,6 +5699,35 @@ mod test_serialization { assert!(matches!(deserialized, AuthMethod::Agent(_))); } + #[cfg(feature = "unstable_session_delete")] + #[test] + fn test_session_delete_serialization() { + assert_eq!(AGENT_METHOD_NAMES.session_delete, "session/delete"); + assert_eq!( + ClientRequest::DeleteSessionRequest(DeleteSessionRequest::new("sess_abc123")).method(), + "session/delete" + ); + assert_eq!( + serde_json::to_value(DeleteSessionRequest::new("sess_abc123")).unwrap(), + json!({ + "sessionId": "sess_abc123" + }) + ); + assert_eq!( + serde_json::to_value(DeleteSessionResponse::new()).unwrap(), + json!({}) + ); + assert_eq!( + serde_json::to_value( + SessionCapabilities::new().delete(SessionDeleteCapabilities::new()) + ) + .unwrap(), + json!({ + "delete": {} + }) + ); + } + #[cfg(feature = "unstable_session_additional_directories")] #[test] fn test_session_additional_directories_serialization() { diff --git a/src/v2/agent.rs b/src/v2/agent.rs index 926e76134..695b4b8c5 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -1838,6 +1838,95 @@ impl ListSessionsResponse { } } +// Delete session + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Request parameters for deleting an existing session from `session/list`. +/// +/// Only available if the Agent supports the `sessionCapabilities.delete` capability. +#[cfg(feature = "unstable_session_delete")] +#[skip_serializing_none] +#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[schemars(extend("x-side" = "agent", "x-method" = SESSION_DELETE_METHOD_NAME))] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct DeleteSessionRequest { + /// The ID of the session to delete. + pub session_id: SessionId, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +#[cfg(feature = "unstable_session_delete")] +impl DeleteSessionRequest { + #[must_use] + pub fn new(session_id: impl Into) -> Self { + Self { + session_id: session_id.into(), + meta: None, + } + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Response from deleting a session. +#[cfg(feature = "unstable_session_delete")] +#[skip_serializing_none] +#[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[schemars(extend("x-side" = "agent", "x-method" = SESSION_DELETE_METHOD_NAME))] +#[serde(rename_all = "camelCase")] +#[non_exhaustive] +pub struct DeleteSessionResponse { + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +#[cfg(feature = "unstable_session_delete")] +impl DeleteSessionResponse { + #[must_use] + pub fn new() -> Self { + Self::default() + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + /// Information about a session returned by session/list #[serde_as] #[skip_serializing_none] @@ -4151,6 +4240,18 @@ pub struct SessionCapabilities { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// + /// Whether the agent supports `session/delete`. + /// + /// Optional. Omitted or `null` both mean the agent does not advertise support. + /// Supplying `{}` means the agent supports deleting sessions from `session/list`. + #[cfg(feature = "unstable_session_delete")] + #[serde_as(deserialize_as = "DefaultOnError")] + #[serde(default)] + pub delete: Option, + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. #[cfg(feature = "unstable_session_additional_directories")] #[serde_as(deserialize_as = "DefaultOnError")] @@ -4195,6 +4296,21 @@ impl SessionCapabilities { self } + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Whether the agent supports `session/delete`. + /// + /// Omitted or `null` both mean the agent does not advertise support. + /// Supplying `{}` means the agent supports deleting sessions from `session/list`. + #[cfg(feature = "unstable_session_delete")] + #[must_use] + pub fn delete(mut self, delete: impl IntoOption) -> Self { + self.delete = delete.into_option(); + self + } + /// **UNSTABLE** /// /// This capability is not part of the spec yet, and may be removed or changed at any point. @@ -4278,6 +4394,46 @@ impl SessionListCapabilities { } } +/// **UNSTABLE** +/// +/// This capability is not part of the spec yet, and may be removed or changed at any point. +/// +/// Capabilities for the `session/delete` method. +/// +/// Supplying `{}` means the agent supports deleting sessions from `session/list`. +#[cfg(feature = "unstable_session_delete")] +#[skip_serializing_none] +#[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] +#[non_exhaustive] +pub struct SessionDeleteCapabilities { + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +#[cfg(feature = "unstable_session_delete")] +impl SessionDeleteCapabilities { + #[must_use] + pub fn new() -> Self { + Self::default() + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } +} + /// **UNSTABLE** /// /// This capability is not part of the spec yet, and may be removed or changed at any point. @@ -4621,6 +4777,9 @@ pub struct AgentMethodNames { pub session_set_model: &'static str, /// Method for listing existing sessions. pub session_list: &'static str, + /// Method for deleting an existing session. + #[cfg(feature = "unstable_session_delete")] + pub session_delete: &'static str, /// Method for forking an existing session. #[cfg(feature = "unstable_session_fork")] pub session_fork: &'static str, @@ -4684,6 +4843,8 @@ pub const AGENT_METHOD_NAMES: AgentMethodNames = AgentMethodNames { #[cfg(feature = "unstable_session_model")] session_set_model: SESSION_SET_MODEL_METHOD_NAME, session_list: SESSION_LIST_METHOD_NAME, + #[cfg(feature = "unstable_session_delete")] + session_delete: SESSION_DELETE_METHOD_NAME, #[cfg(feature = "unstable_session_fork")] session_fork: SESSION_FORK_METHOD_NAME, session_resume: SESSION_RESUME_METHOD_NAME, @@ -4742,6 +4903,9 @@ pub(crate) const SESSION_CANCEL_METHOD_NAME: &str = "session/cancel"; pub(crate) const SESSION_SET_MODEL_METHOD_NAME: &str = "session/set_model"; /// Method name for listing existing sessions. pub(crate) const SESSION_LIST_METHOD_NAME: &str = "session/list"; +/// Method name for deleting an existing session. +#[cfg(feature = "unstable_session_delete")] +pub(crate) const SESSION_DELETE_METHOD_NAME: &str = "session/delete"; /// Method name for forking an existing session. #[cfg(feature = "unstable_session_fork")] pub(crate) const SESSION_FORK_METHOD_NAME: &str = "session/fork"; @@ -4847,6 +5011,15 @@ pub enum ClientRequest { /// /// The agent should return metadata about sessions with optional filtering and pagination support. ListSessionsRequest(ListSessionsRequest), + /// **UNSTABLE** + /// + /// This capability is not part of the spec yet, and may be removed or changed at any point. + /// + /// Deletes an existing session from `session/list`. + /// + /// This method is only available if the agent advertises the `sessionCapabilities.delete` capability. + #[cfg(feature = "unstable_session_delete")] + DeleteSessionRequest(DeleteSessionRequest), #[cfg(feature = "unstable_session_fork")] /// **UNSTABLE** /// @@ -4967,6 +5140,8 @@ impl ClientRequest { Self::NewSessionRequest(_) => AGENT_METHOD_NAMES.session_new, Self::LoadSessionRequest(_) => AGENT_METHOD_NAMES.session_load, Self::ListSessionsRequest(_) => AGENT_METHOD_NAMES.session_list, + #[cfg(feature = "unstable_session_delete")] + Self::DeleteSessionRequest(_) => AGENT_METHOD_NAMES.session_delete, #[cfg(feature = "unstable_session_fork")] Self::ForkSessionRequest(_) => AGENT_METHOD_NAMES.session_fork, Self::ResumeSessionRequest(_) => AGENT_METHOD_NAMES.session_resume, @@ -5014,6 +5189,8 @@ pub enum AgentResponse { NewSessionResponse(NewSessionResponse), LoadSessionResponse(#[serde(default)] LoadSessionResponse), ListSessionsResponse(ListSessionsResponse), + #[cfg(feature = "unstable_session_delete")] + DeleteSessionResponse(#[serde(default)] DeleteSessionResponse), #[cfg(feature = "unstable_session_fork")] ForkSessionResponse(ForkSessionResponse), ResumeSessionResponse(#[serde(default)] ResumeSessionResponse), @@ -5444,6 +5621,35 @@ mod test_serialization { assert!(matches!(deserialized, AuthMethod::Agent(_))); } + #[cfg(feature = "unstable_session_delete")] + #[test] + fn test_session_delete_serialization() { + assert_eq!(AGENT_METHOD_NAMES.session_delete, "session/delete"); + assert_eq!( + ClientRequest::DeleteSessionRequest(DeleteSessionRequest::new("sess_abc123")).method(), + "session/delete" + ); + assert_eq!( + serde_json::to_value(DeleteSessionRequest::new("sess_abc123")).unwrap(), + json!({ + "sessionId": "sess_abc123" + }) + ); + assert_eq!( + serde_json::to_value(DeleteSessionResponse::new()).unwrap(), + json!({}) + ); + assert_eq!( + serde_json::to_value( + SessionCapabilities::new().delete(SessionDeleteCapabilities::new()) + ) + .unwrap(), + json!({ + "delete": {} + }) + ); + } + #[cfg(feature = "unstable_session_additional_directories")] #[test] fn test_session_additional_directories_serialization() { diff --git a/src/v2/conversion.rs b/src/v2/conversion.rs index c78efcc5f..9d49f1b7f 100644 --- a/src/v2/conversion.rs +++ b/src/v2/conversion.rs @@ -3644,6 +3644,56 @@ impl IntoV2 for crate::v1::CloseSessionResponse { } } +#[cfg(feature = "unstable_session_delete")] +impl IntoV1 for super::DeleteSessionRequest { + type Output = crate::v1::DeleteSessionRequest; + + fn into_v1(self) -> Result { + let Self { session_id, meta } = self; + Ok(crate::v1::DeleteSessionRequest { + session_id: session_id.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_session_delete")] +impl IntoV2 for crate::v1::DeleteSessionRequest { + type Output = super::DeleteSessionRequest; + + fn into_v2(self) -> Result { + let Self { session_id, meta } = self; + Ok(super::DeleteSessionRequest { + session_id: session_id.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +#[cfg(feature = "unstable_session_delete")] +impl IntoV1 for super::DeleteSessionResponse { + type Output = crate::v1::DeleteSessionResponse; + + fn into_v1(self) -> Result { + let Self { meta } = self; + Ok(crate::v1::DeleteSessionResponse { + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_session_delete")] +impl IntoV2 for crate::v1::DeleteSessionResponse { + type Output = super::DeleteSessionResponse; + + fn into_v2(self) -> Result { + let Self { meta } = self; + Ok(super::DeleteSessionResponse { + meta: meta.into_v2()?, + }) + } +} + impl IntoV1 for super::ListSessionsRequest { type Output = crate::v1::ListSessionsRequest; @@ -5270,6 +5320,8 @@ impl IntoV1 for super::SessionCapabilities { fn into_v1(self) -> Result { let Self { list, + #[cfg(feature = "unstable_session_delete")] + delete, #[cfg(feature = "unstable_session_additional_directories")] additional_directories, #[cfg(feature = "unstable_session_fork")] @@ -5280,6 +5332,8 @@ impl IntoV1 for super::SessionCapabilities { } = self; Ok(crate::v1::SessionCapabilities { list: list.into_v1()?, + #[cfg(feature = "unstable_session_delete")] + delete: delete.into_v1()?, #[cfg(feature = "unstable_session_additional_directories")] additional_directories: additional_directories.into_v1()?, #[cfg(feature = "unstable_session_fork")] @@ -5297,6 +5351,8 @@ impl IntoV2 for crate::v1::SessionCapabilities { fn into_v2(self) -> Result { let Self { list, + #[cfg(feature = "unstable_session_delete")] + delete, #[cfg(feature = "unstable_session_additional_directories")] additional_directories, #[cfg(feature = "unstable_session_fork")] @@ -5307,6 +5363,8 @@ impl IntoV2 for crate::v1::SessionCapabilities { } = self; Ok(super::SessionCapabilities { list: list.into_v2()?, + #[cfg(feature = "unstable_session_delete")] + delete: delete.into_v2()?, #[cfg(feature = "unstable_session_additional_directories")] additional_directories: additional_directories.into_v2()?, #[cfg(feature = "unstable_session_fork")] @@ -5340,6 +5398,30 @@ impl IntoV2 for crate::v1::SessionListCapabilities { } } +#[cfg(feature = "unstable_session_delete")] +impl IntoV1 for super::SessionDeleteCapabilities { + type Output = crate::v1::SessionDeleteCapabilities; + + fn into_v1(self) -> Result { + let Self { meta } = self; + Ok(crate::v1::SessionDeleteCapabilities { + meta: meta.into_v1()?, + }) + } +} + +#[cfg(feature = "unstable_session_delete")] +impl IntoV2 for crate::v1::SessionDeleteCapabilities { + type Output = super::SessionDeleteCapabilities; + + fn into_v2(self) -> Result { + let Self { meta } = self; + Ok(super::SessionDeleteCapabilities { + meta: meta.into_v2()?, + }) + } +} + #[cfg(feature = "unstable_session_additional_directories")] impl IntoV1 for super::SessionAdditionalDirectoriesCapabilities { type Output = crate::v1::SessionAdditionalDirectoriesCapabilities; @@ -5546,6 +5628,10 @@ impl IntoV1 for super::ClientRequest { Self::ListSessionsRequest(value) => { crate::v1::ClientRequest::ListSessionsRequest(value.into_v1()?) } + #[cfg(feature = "unstable_session_delete")] + Self::DeleteSessionRequest(value) => { + crate::v1::ClientRequest::DeleteSessionRequest(value.into_v1()?) + } #[cfg(feature = "unstable_session_fork")] Self::ForkSessionRequest(value) => { crate::v1::ClientRequest::ForkSessionRequest(value.into_v1()?) @@ -5624,6 +5710,10 @@ impl IntoV2 for crate::v1::ClientRequest { Self::ListSessionsRequest(value) => { super::ClientRequest::ListSessionsRequest(value.into_v2()?) } + #[cfg(feature = "unstable_session_delete")] + Self::DeleteSessionRequest(value) => { + super::ClientRequest::DeleteSessionRequest(value.into_v2()?) + } #[cfg(feature = "unstable_session_fork")] Self::ForkSessionRequest(value) => { super::ClientRequest::ForkSessionRequest(value.into_v2()?) @@ -5700,6 +5790,10 @@ impl IntoV1 for super::AgentResponse { Self::ListSessionsResponse(value) => { crate::v1::AgentResponse::ListSessionsResponse(value.into_v1()?) } + #[cfg(feature = "unstable_session_delete")] + Self::DeleteSessionResponse(value) => { + crate::v1::AgentResponse::DeleteSessionResponse(value.into_v1()?) + } #[cfg(feature = "unstable_session_fork")] Self::ForkSessionResponse(value) => { crate::v1::AgentResponse::ForkSessionResponse(value.into_v1()?) @@ -5780,6 +5874,10 @@ impl IntoV2 for crate::v1::AgentResponse { Self::ListSessionsResponse(value) => { super::AgentResponse::ListSessionsResponse(value.into_v2()?) } + #[cfg(feature = "unstable_session_delete")] + Self::DeleteSessionResponse(value) => { + super::AgentResponse::DeleteSessionResponse(value.into_v2()?) + } #[cfg(feature = "unstable_session_fork")] Self::ForkSessionResponse(value) => { super::AgentResponse::ForkSessionResponse(value.into_v2()?) From 53754c521e9b8a721079ac69a7269448d36e8733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A8=81=E5=B0=91?= Date: Sun, 17 May 2026 04:24:55 +0800 Subject: [PATCH 102/152] docs: Add acp-components to ACP clients (#1201) Co-authored-by: weishao --- docs/get-started/clients.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/get-started/clients.mdx b/docs/get-started/clients.mdx index 80840bb73..9c0984f02 100644 --- a/docs/get-started/clients.mdx +++ b/docs/get-started/clients.mdx @@ -48,6 +48,7 @@ The following projects implement ACP directly, connect ACP agents to other envir - [Sidequery _(coming soon)_](https://sidequery.dev) - [Tidewave](https://tidewave.ai/) - [Web Browser with AI SDK](https://github.com/mcpc-tech/ai-elements-remix-template) (powered by [@mcpc/acp-ai-provider](https://github.com/mcpc-tech/mcpc/tree/main/packages/acp-ai-provider)) +- [ACP Components](https://github.com/zvzuola/acp-components) - A universal frontend component library for building AI Agent interfaces based on the ACP ## Notebook and data tools From 6c45df7e0d9492559aa5a6e078a9ef5762bd8346 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Sat, 16 May 2026 20:28:57 +0000 Subject: [PATCH 103/152] chore: release v0.13.1 (#1217) Co-authored-by: acp-release-bot[bot] <246668977+acp-release-bot[bot]@users.noreply.github.com> --- CHANGELOG.md | 6 ++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d2a44293..74ac27b24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [0.13.1](https://github.com/agentclientprotocol/agent-client-protocol/compare/v0.13.0...v0.13.1) - 2026-05-16 + +### Added + +- *(unstable)* Add unstable session delete support ([#1216](https://github.com/agentclientprotocol/agent-client-protocol/pull/1216)) + ## [0.13.0](https://github.com/agentclientprotocol/agent-client-protocol/compare/v0.12.2...v0.13.0) - 2026-05-12 ### Added diff --git a/Cargo.lock b/Cargo.lock index 05fe0c898..20fd1c063 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "agent-client-protocol-schema" -version = "0.13.0" +version = "0.13.1" dependencies = [ "anyhow", "derive_more", diff --git a/Cargo.toml b/Cargo.toml index e4c23b216..00c5f334f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "agent-client-protocol-schema" authors = ["Zed "] -version = "0.13.0" +version = "0.13.1" edition = "2024" license = "Apache-2.0" description = "A protocol for standardizing communication between code editors and AI coding agents" From 8e0b502a3b2e438fef27f6acbbcce6928c5c89e4 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Sat, 16 May 2026 21:06:52 +0000 Subject: [PATCH 104/152] docs: update registry agents (#1218) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 158278b95..25b8727fd 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -135,7 +135,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.3**, + **3.0.4**,
Date: Sat, 16 May 2026 23:10:44 +0000 Subject: [PATCH 105/152] docs: update registry agents (#1219) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 25b8727fd..92beee4b6 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -118,7 +118,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP wrapper for Anthropic's Claude - **0.34.1**, + **0.35.0**, Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.4**, + **3.0.5**, Date: Sun, 17 May 2026 13:59:11 +0000 Subject: [PATCH 106/152] docs: update registry agents (#1221) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 92beee4b6..99236f89b 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -282,7 +282,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Reduces API costs by more than 50%, produces better and faster work. Uses Hash anchored parallel edits, AST manipulation and a whole lot of neat optimizations. Fully Open Source. - **0.3.43**, + **0.3.44**, Date: Sun, 17 May 2026 18:13:21 +0000 Subject: [PATCH 107/152] docs: update registry agents (#1223) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 99236f89b..ac33178bc 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.15.3**, + **1.15.4**, Date: Sun, 17 May 2026 22:37:05 +0200 Subject: [PATCH 108/152] docs(rfd): Move logout method RFD to Preview (#1225) * docs(rfd): Move logout method RFD to Preview * Document draft authentication flow --- docs/docs.json | 4 +- docs/protocol/draft/authentication.mdx | 168 +++++++++++++++++++++++++ docs/protocol/draft/session-setup.mdx | 2 + docs/rfds/logout-method.mdx | 1 + docs/rfds/updates.mdx | 7 ++ 5 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 docs/protocol/draft/authentication.mdx diff --git a/docs/docs.json b/docs/docs.json index 8f7d3daad..727443ac2 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -82,6 +82,7 @@ "group": "Draft: In Progress and May Change", "hidden": true, "pages": [ + "protocol/draft/authentication", "protocol/draft/session-setup", "protocol/draft/session-list", "protocol/draft/session-delete", @@ -121,7 +122,6 @@ "rfds/mcp-over-acp", "rfds/session-usage", "rfds/auth-methods", - "rfds/logout-method", "rfds/session-delete", "rfds/diff-delete", "rfds/boolean-config-option", @@ -144,7 +144,7 @@ }, { "group": "Preview", - "pages": ["rfds/rust-sdk-v1"] + "pages": ["rfds/rust-sdk-v1", "rfds/logout-method"] }, { "group": "Completed", diff --git a/docs/protocol/draft/authentication.mdx b/docs/protocol/draft/authentication.mdx new file mode 100644 index 000000000..c8600d945 --- /dev/null +++ b/docs/protocol/draft/authentication.mdx @@ -0,0 +1,168 @@ +--- +title: "Authentication" +description: "Authenticating with agents and logging out" +--- + +ACP authentication is negotiated during [initialization](/protocol/initialization). Agents advertise available authentication methods in `authMethods`, Clients choose one by calling `authenticate`, and Agents that support ending an authenticated state advertise the draft `logout` capability. + + + The `logout` method and `agentCapabilities.auth.logout` capability are still + unstable and may change before they are stabilized. + + +
+ +```mermaid +sequenceDiagram + participant Client + participant Agent + + Client->>Agent: initialize + Agent-->>Client: initialize response (authMethods, auth.logout) + + alt Agent requires authentication + Client->>Agent: authenticate (methodId) + Agent-->>Client: authenticate response + end + + Note over Client,Agent: Authenticated requests may proceed + + alt User logs out + Client->>Agent: logout + Agent-->>Client: logout response + end + + Note over Client,Agent: New sessions require authentication again +``` + +
+ +## Advertising Authentication + +Agents advertise authentication options in the `authMethods` field of the `initialize` response. Each method has an `id` that the Client passes back to the Agent in a later `authenticate` request. + +Agents that support `logout` also advertise `agentCapabilities.auth.logout`: + +```json highlight={7-11,12-18} +{ + "jsonrpc": "2.0", + "id": 0, + "result": { + "protocolVersion": 1, + "agentCapabilities": { + "auth": { + "logout": {} + } + }, + "authMethods": [ + { + "id": "agent-login", + "name": "Agent login", + "description": "Sign in using the agent's login flow" + } + ] + } +} +``` + +If `agentCapabilities.auth.logout` is omitted or `null`, the Agent does not support `logout` and Clients **MUST NOT** call it. Supplying `{}` means the Agent supports the method. + +### Authentication method types + +The default authentication method type is `agent`, where the Agent handles authentication itself. When no `type` is present, the method is treated as `agent`: + +```json +{ + "id": "agent-login", + "name": "Agent login", + "description": "Sign in using the agent's login flow" +} +``` + +Draft authentication method types provide additional information so Clients can offer better UI: + +- `env_var`: the user provides credentials that the Client passes to the Agent as environment variables. +- `terminal`: the Client runs the Agent's terminal authentication flow for the user. + +`terminal` methods require Client support. Clients advertise this during initialization with `clientCapabilities.auth.terminal`: + +```json highlight={7-9} +{ + "jsonrpc": "2.0", + "id": 0, + "method": "initialize", + "params": { + "protocolVersion": 1, + "clientCapabilities": { + "auth": { + "terminal": true + } + } + } +} +``` + +See the [draft schema](/protocol/draft/schema#authmethod) for the full `AuthMethod` definitions. + +## Authenticating + +When an Agent requires authentication before allowing session creation, the Client calls `authenticate` with one of the advertised authentication method IDs: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "authenticate", + "params": { + "methodId": "agent-login" + } +} +``` + + + The ID of the authentication method to use. This value must match one of the + methods advertised in the `initialize` response. + + +On success, the Agent returns an empty result: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": {} +} +``` + +After successful authentication, the Client can create new sessions without receiving an `auth_required` error for authentication-gated requests. + +## Logging Out + +The draft `logout` method allows Clients to end the current authenticated state. Clients should only call it after verifying the Agent advertised `agentCapabilities.auth.logout` during initialization. + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "method": "logout", + "params": {} +} +``` + +On success, the Agent returns an empty result: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": {} +} +``` + +After a successful `logout`, new sessions that require authentication will require the Client to call `authenticate` again. + +## Active Sessions + +The protocol does not guarantee what happens to already-running sessions after `logout`. Agents may terminate them, keep them running, or return `auth_required` errors for future session activity. + +Clients **SHOULD** be prepared for active session operations to fail with authentication-related errors after logout and should prompt the user to authenticate again when appropriate. diff --git a/docs/protocol/draft/session-setup.mdx b/docs/protocol/draft/session-setup.mdx index f3d9fbb66..cdc46b65c 100644 --- a/docs/protocol/draft/session-setup.mdx +++ b/docs/protocol/draft/session-setup.mdx @@ -7,6 +7,8 @@ Sessions represent a specific conversation or thread between the [Client](/proto Before creating a session, Clients **MUST** first complete the [initialization](/protocol/initialization) phase to establish protocol compatibility and capabilities. +If the Agent requires authentication, `session/new` may fail with an `auth_required` error until the Client completes the [authentication flow](/protocol/draft/authentication). +
```mermaid diff --git a/docs/rfds/logout-method.mdx b/docs/rfds/logout-method.mdx index 932205dad..0635768c9 100644 --- a/docs/rfds/logout-method.mdx +++ b/docs/rfds/logout-method.mdx @@ -207,4 +207,5 @@ The RFD intentionally does not mandate a specific behavior to allow flexibility. ## Revision history +- 2026-05-17: Moved to Preview. - 2026-02-02: Initial draft diff --git a/docs/rfds/updates.mdx b/docs/rfds/updates.mdx index 0af82becb..05e15401a 100644 --- a/docs/rfds/updates.mdx +++ b/docs/rfds/updates.mdx @@ -6,6 +6,13 @@ rss: true This page tracks lifecycle changes for ACP Requests for Dialog. For broader ACP announcements, see [Updates](/updates). + +## Logout Method RFD moves to Preview stage + +The RFD for adding a `logout` method to the protocol has been moved to Preview stage. Please review the [RFD](/rfds/logout-method) for more information on the current proposal and provide feedback before the feature is stabilized. + + + ## Rust SDK based on SACP RFD moves to Preview stage From b47f90091c7099959531fb4e6610a9d7815040a8 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Sun, 17 May 2026 21:10:48 +0000 Subject: [PATCH 109/152] docs: update registry agents (#1226) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index ac33178bc..f839b6e21 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -598,7 +598,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Code and build agents with comprehensive multi-provider support - **0.7.4**, + **0.7.5**,
Date: Sun, 17 May 2026 23:22:18 +0200 Subject: [PATCH 110/152] fix(unstable): Update additionalDirectories guidance (#1227) In the implementation phase it has become clear most agents treat this as optional data in their persistence, and it is ok to change on resume/load. Given this, loosening the requirements of the RFD. Remove additional-root filter from session list as well, since it is best-effort anyway, and probably more of a footgun than not. --- docs/protocol/draft/file-system.mdx | 2 +- docs/protocol/draft/schema-v2.mdx | 34 ++++++------ docs/protocol/draft/schema.mdx | 34 ++++++------ docs/protocol/draft/session-list.mdx | 23 +++----- docs/protocol/draft/session-setup.mdx | 2 +- docs/rfds/additional-directories.mdx | 36 +++++-------- schema/schema.unstable.json | 17 ++---- schema/schema.v2.unstable.json | 17 ++---- src/v1/agent.rs | 76 ++++++++------------------- src/v2/agent.rs | 76 ++++++++------------------- src/v2/conversion.rs | 20 +------ 11 files changed, 109 insertions(+), 228 deletions(-) diff --git a/docs/protocol/draft/file-system.mdx b/docs/protocol/draft/file-system.mdx index 98c6e3120..5eafdba1e 100644 --- a/docs/protocol/draft/file-system.mdx +++ b/docs/protocol/draft/file-system.mdx @@ -13,7 +13,7 @@ authorize those paths against the session's effective root set. - by default, the effective root set is just `cwd` - if the unstable `sessionCapabilities.additionalDirectories` capability is in use, the effective root set becomes `[cwd, ...additionalDirectories]` - `cwd` remains the base for relative paths; additional roots only expand filesystem scope -- when a Client discovers a session through `session/list`, it SHOULD treat `cwd` plus `SessionInfo.additionalDirectories` as the authoritative current root set until a later lifecycle request changes it +- when a Client discovers a session through `session/list`, it SHOULD use `SessionInfo.additionalDirectories` together with `cwd` as the current root set when the field is present; if omitted, the Agent is not reporting additional-root state, and any later `session/load` or `session/resume` request establishes the root set explicitly Because ACP filesystem methods are client-mediated, the Client remains responsible for enforcing those root boundaries. diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index b38700c38..8ae9dff84 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -1164,17 +1164,6 @@ these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - -"string"[]} > - **UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - -Filter sessions by the exact ordered additional workspace roots. Each path must be absolute. - -This filter applies only when the field is present and non-empty. When -omitted or empty, no additional-root filter is applied. - Opaque cursor token from a previous response's nextCursor field for cursor-based pagination @@ -1251,7 +1240,8 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the loaded -session. +session. It may differ from any previously used or reported list as long as +the request `cwd` matches the session's `cwd`. @@ -1544,7 +1534,8 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the resumed -session. +session. It may differ from any previously used or reported list as long as +the request `cwd` matches the session's `cwd`. @@ -6530,8 +6521,10 @@ This capability is not part of the spec yet, and may be removed or changed at an Capabilities for additional session directories support. -By supplying `\{\}` it means that the agent supports the `additionalDirectories` field on -supported session lifecycle requests and `session/list`. +By supplying `\{\}` it means that the agent supports the `additionalDirectories` +field on supported session lifecycle requests. Agents that also support +`session/list` may return `SessionInfo.additionalDirectories` when they track +that state. **Type:** Object @@ -6575,7 +6568,10 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. -Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. +Whether the agent supports `additionalDirectories` on supported session lifecycle requests. + +Agents that also support `session/list` may return +`SessionInfo.additionalDirectories` when they track that state. SessionCloseCapabilities | null} > @@ -6933,9 +6929,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. -Authoritative ordered additional workspace roots for this session. Each path must be absolute. +Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. -When omitted or empty, there are no additional roots for the session. +Agents may omit this field when they do not track or surface additional-root +state. When present, this is the complete additional-root list known to +the Agent for the session. diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index b38700c38..8ae9dff84 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -1164,17 +1164,6 @@ these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) - -"string"[]} > - **UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - -Filter sessions by the exact ordered additional workspace roots. Each path must be absolute. - -This filter applies only when the field is present and non-empty. When -omitted or empty, no additional-root filter is applied. - Opaque cursor token from a previous response's nextCursor field for cursor-based pagination @@ -1251,7 +1240,8 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the loaded -session. +session. It may differ from any previously used or reported list as long as +the request `cwd` matches the session's `cwd`. @@ -1544,7 +1534,8 @@ Additional workspace roots to activate for this session. Each path must be absol When omitted or empty, no additional roots are activated. When non-empty, this is the complete resulting additional-root list for the resumed -session. +session. It may differ from any previously used or reported list as long as +the request `cwd` matches the session's `cwd`. @@ -6530,8 +6521,10 @@ This capability is not part of the spec yet, and may be removed or changed at an Capabilities for additional session directories support. -By supplying `\{\}` it means that the agent supports the `additionalDirectories` field on -supported session lifecycle requests and `session/list`. +By supplying `\{\}` it means that the agent supports the `additionalDirectories` +field on supported session lifecycle requests. Agents that also support +`session/list` may return `SessionInfo.additionalDirectories` when they track +that state. **Type:** Object @@ -6575,7 +6568,10 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. -Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. +Whether the agent supports `additionalDirectories` on supported session lifecycle requests. + +Agents that also support `session/list` may return +`SessionInfo.additionalDirectories` when they track that state. SessionCloseCapabilities | null} > @@ -6933,9 +6929,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. -Authoritative ordered additional workspace roots for this session. Each path must be absolute. +Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. -When omitted or empty, there are no additional roots for the session. +Agents may omit this field when they do not track or surface additional-root +state. When present, this is the complete additional-root list known to +the Agent for the session. diff --git a/docs/protocol/draft/session-list.mdx b/docs/protocol/draft/session-list.mdx index 828d2f717..8b2a9e7a9 100644 --- a/docs/protocol/draft/session-list.mdx +++ b/docs/protocol/draft/session-list.mdx @@ -55,10 +55,8 @@ If `sessionCapabilities.list` is not present, the Agent does not support listing If the Agent also advertises the unstable - `sessionCapabilities.additionalDirectories` capability, `session/list` - supports filtering by `additionalDirectories`, and any returned - `SessionInfo.additionalDirectories` value is the authoritative additional-root - list for that session. + `sessionCapabilities.additionalDirectories` capability, returned `SessionInfo` + objects may include `additionalDirectories` when the Agent tracks that state. @@ -90,13 +88,6 @@ All parameters are optional. A request with an empty `params` object returns the with a matching `cwd` are returned. - - If the Agent advertises `sessionCapabilities.additionalDirectories`, filter - sessions by the exact ordered additional-root list when this field is present - and non-empty. Omitting the field or providing an empty array means no - additional-root filter is applied. - - Opaque cursor token from a previous response's `nextCursor` field for cursor-based pagination. See [Pagination](#pagination). @@ -148,10 +139,12 @@ The Agent **MUST** respond with a list of sessions and optional pagination metad Working directory for the session. Always an absolute path. - If the Agent advertises `sessionCapabilities.additionalDirectories`, this - is the authoritative ordered additional-root list for the session when - present. Omitting the field or returning an empty array means there are no - additional roots. + If the Agent advertises `sessionCapabilities.additionalDirectories`, it + MAY include this field when it tracks additional-root state for the + session. When present, this is the complete ordered additional-root list + known to the Agent for that session. Omitting the field means the Agent is + not reporting additional-root state; an explicit empty array means the + Agent is reporting no additional roots. diff --git a/docs/protocol/draft/session-setup.mdx b/docs/protocol/draft/session-setup.mdx index cdc46b65c..265558a58 100644 --- a/docs/protocol/draft/session-setup.mdx +++ b/docs/protocol/draft/session-setup.mdx @@ -367,7 +367,7 @@ When present, `additionalDirectories` has the following behavior: - `cwd` remains the primary working directory and the base for relative paths - each `additionalDirectories` entry **MUST** be an absolute path - omitting the field or providing an empty array activates no additional roots for the resulting session -- on `session/load` and `session/resume`, Clients must send the full intended additional-root list again because omitting the field or providing an empty array does not restore stored roots implicitly +- on `session/load` and `session/resume`, Clients must send the full intended additional-root list again; that list may differ from any previous or reported list as long as the request `cwd` matches the session's `cwd`, and omitting the field or providing an empty array does not restore stored roots implicitly ## Session ID diff --git a/docs/rfds/additional-directories.mdx b/docs/rfds/additional-directories.mdx index fb2f512c3..7c5307d64 100644 --- a/docs/rfds/additional-directories.mdx +++ b/docs/rfds/additional-directories.mdx @@ -44,7 +44,7 @@ Without a standardized field, clients and agents must rely on implementation-spe > What are you proposing to improve the situation? -Add `additionalDirectories?: string[]` to the session lifecycle request schemas listed above and to `session/list`, and define protocol-level validation and semantics for it. +Add `additionalDirectories?: string[]` to the session lifecycle request schemas listed above, and add optional additional-root discovery metadata to `session/list` responses. The proposal is scoped to session lifecycle requests, session discovery requests, and session discovery metadata only: @@ -54,7 +54,7 @@ The proposal is scoped to session lifecycle requests, session discovery requests Agents advertise support with `sessionCapabilities.additionalDirectories`. Clients MUST gate usage on that capability. -This proposal also extends `SessionInfo` returned by `session/list` with authoritative `additionalDirectories` state, and allows `session/list` to filter on `cwd` plus `additionalDirectories`, so clients that support session discovery can recover and query the active root set for listed sessions. `session/load` and `session/resume` nevertheless remain explicit-list only: omitting `additionalDirectories` or supplying an empty array means no additional roots are activated for the resulting session, while a non-empty array-valued `additionalDirectories` becomes the complete resulting additional-root list for that request. +This proposal also allows Agents to include `additionalDirectories` in `SessionInfo` returned by `session/list` when they track that state. Because Agents are not required to persist additional-root metadata, Clients treat `SessionInfo.additionalDirectories` as optional discovery metadata rather than required session state. `session/load` and `session/resume` remain explicit-list only: omitting `additionalDirectories` or supplying an empty array means no additional roots are activated for the resulting session, while a non-empty array-valued `additionalDirectories` becomes the complete resulting additional-root list for that request. Clients MAY change the additional-root list on `session/load` or `session/resume` from any previously used or reported list, as long as the request `cwd` matches the session's `cwd` and the Agent accepts the requested roots. ## Shiny future @@ -97,12 +97,6 @@ The following optional property is added to each request type named above: additionalDirectories?: string[] ``` -The following optional property is also added to `ListSessionsRequest`: - -```ts -additionalDirectories?: string[] -``` - The following optional property is also added to `SessionInfo`: ```ts @@ -117,9 +111,9 @@ additionalDirectories?: {} Clients MUST send `additionalDirectories` only when `sessionCapabilities.additionalDirectories` is present. -If an agent advertises `sessionCapabilities.additionalDirectories` and also supports `session/list`, any `SessionInfo.additionalDirectories` value it returns is the authoritative ordered additional-root list for that session. Agents MAY omit the field when there are no additional roots, and clients MUST treat an omitted field the same as `[]`. +If an Agent advertises `sessionCapabilities.additionalDirectories` and also supports `session/list`, it MAY include `SessionInfo.additionalDirectories` for sessions whose additional-root state it tracks. When present, the value is the complete ordered additional-root list known to the Agent for that session. Agents MAY omit the field when they do not track or choose not to surface additional-root state. Clients MUST NOT treat an omitted field as proof that the session has no additional roots; an explicit empty array means the Agent is reporting no additional roots for that session. -If an agent advertises `sessionCapabilities.additionalDirectories` and also supports `session/list`, `ListSessionsRequest.additionalDirectories` filters sessions by exact match on the authoritative ordered additional-root list when the field is present and non-empty. When both `cwd` and a non-empty `additionalDirectories` are present on `session/list`, both filters apply. Omitting the field or supplying an empty array means no additional-root filter is applied. +`ListSessionsRequest` is not extended with `additionalDirectories`. `session/list` filtering remains defined around existing list parameters such as `cwd`; Clients that need to find sessions by additional-root state can filter locally when Agents return `SessionInfo.additionalDirectories`. If adopted, the session-setup, session-list, and filesystem documentation will need corresponding updates so they describe the effective root set rather than `cwd` alone as the session filesystem context or boundary. @@ -142,7 +136,7 @@ If adopted, the session-setup, session-list, and filesystem documentation will n ### `session/list` example -When an agent supports both `sessionCapabilities.additionalDirectories` and `session/list`, clients may filter by `cwd`, `additionalDirectories`, or both. Each returned `SessionInfo` includes the authoritative additional-root list for that session: +When an Agent supports both `sessionCapabilities.additionalDirectories` and `session/list`, Clients may still filter by `cwd`. Agents that track additional-root state may include the complete additional-root list on each returned `SessionInfo`: ```json { @@ -150,11 +144,7 @@ When an agent supports both `sessionCapabilities.additionalDirectories` and `ses "id": 5, "method": "session/list", "params": { - "cwd": "/home/user/project", - "additionalDirectories": [ - "/home/user/shared-lib", - "/home/user/product-docs" - ] + "cwd": "/home/user/project" } } ``` @@ -192,7 +182,7 @@ ACP does not define a wire-level lexical normalization algorithm for `cwd` or `a Clients SHOULD remove exact duplicate path strings before sending the request. Clients SHOULD also avoid entries whose path string exactly matches `cwd`. Overlapping or nested roots are not semantically redundant for ACP purposes: because discovery across the effective ordered root list is ordered and implementation-defined, such entries MAY affect behavior even when they do not change the union of accessible paths. Agents MAY remove exact duplicate path strings, including entries identical to `cwd`, provided doing so preserves the first occurrence order of the remaining entries and does not expand scope. -For `session/list` filtering, matching is against the session's authoritative ordered additional-root list as surfaced in `SessionInfo.additionalDirectories`. Implementations that normalize or canonicalize path strings for comparison SHOULD apply the same platform-appropriate rule consistently to stored session state, `SessionInfo.additionalDirectories`, and `ListSessionsRequest.additionalDirectories`. +When returning `SessionInfo.additionalDirectories`, implementations that normalize or canonicalize path strings SHOULD apply the same platform-appropriate rule consistently to stored session state and the returned `SessionInfo.additionalDirectories`. ### Semantics @@ -228,10 +218,10 @@ For `NewSessionRequest`, the resulting additional root list is: For `LoadSessionRequest` and `ResumeSessionRequest`: -- when `additionalDirectories` is present with a non-empty array value, it is the complete resulting list of additional roots for the active session, even if that list differs from the session's previously stored additional roots; +- when `additionalDirectories` is present with a non-empty array value, it is the complete resulting list of additional roots for the active session, even if that list differs from the session's previously stored or reported additional roots, provided the request `cwd` matches the session's `cwd`; - when omitted or present as an empty array, the resulting additional root list is `[]`. -Agents MUST NOT implicitly reactivate stored additional roots that were not supplied on the `session/load` or `session/resume` request. Supplying `additionalDirectories` on `session/load` or `session/resume` is always allowed when the capability is advertised, and doing so may preserve, replace, reduce, or expand the session's previously stored additional-root list for the resulting active session, subject to validation and policy checks. Clients that need to preserve a session's additional roots across restarts or across client instances MUST obtain, persist, or reconstruct the full list and resend it on load or resume. When `session/list` is available, `SessionInfo.additionalDirectories` provides the authoritative current additional-root list for that purpose. +Agents MUST NOT implicitly reactivate stored additional roots that were not supplied on the `session/load` or `session/resume` request. Supplying `additionalDirectories` on `session/load` or `session/resume` is allowed when the capability is advertised and `cwd` matches the session being loaded or resumed, and doing so may preserve, replace, reduce, or expand the session's previously stored or reported additional-root list for the resulting active session, subject to validation and policy checks. Clients that need to preserve a session's additional roots across restarts or across client instances MUST obtain, persist, or reconstruct the full list and resend it on load or resume. When `session/list` includes `SessionInfo.additionalDirectories`, that value can help with this purpose, but Clients MUST NOT assume it is always returned. For `ForkSessionRequest`: @@ -291,7 +281,7 @@ A client that sends `additionalDirectories`: - SHOULD remove exact duplicate path strings and entries identical to `cwd` before sending; and - MUST NOT assume an agent will infer extra roots from project metadata, directory conventions, or prior session state. -If a client mediates filesystem access through ACP client capabilities such as `fs/read_text_file` and `fs/write_text_file`, it MUST enforce the effective root set for that session when authorizing path-based access. ACP's filesystem methods are client-mediated and operate on absolute paths, so the client remains responsible for boundary enforcement in those flows. When the client learns about an existing session through `session/list`, it SHOULD use `SessionInfo.additionalDirectories` together with `cwd` as the authoritative current root set for those checks until a subsequent lifecycle request establishes a different one. +If a client mediates filesystem access through ACP client capabilities such as `fs/read_text_file` and `fs/write_text_file`, it MUST enforce the effective root set for that session when authorizing path-based access. ACP's filesystem methods are client-mediated and operate on absolute paths, so the client remains responsible for boundary enforcement in those flows. When the client learns about an existing session through `session/list`, it SHOULD use `SessionInfo.additionalDirectories` together with `cwd` as the current root set for those checks when the field is present. If the field is omitted, the Client should rely on roots it obtained, persisted, or reconstructed itself, and any subsequent lifecycle request establishes the resulting active root set explicitly. If a client launches an agent with direct filesystem access, `additionalDirectories` is not, by itself, a sandbox. Clients that need root boundaries to be enforced in that deployment model SHOULD apply operating-system or runtime sandboxing consistent with the declared root set. @@ -392,9 +382,9 @@ Updated agents MUST continue to accept requests that do not include the field. Older implementations may validate request objects strictly against older schemas and MAY reject unknown fields. Clients therefore MUST gate usage on `sessionCapabilities.additionalDirectories`. -This proposal intentionally does not extend the responses to `session/new`, `session/load`, `session/resume`, or `session/fork` to surface authoritative additional-root state directly. That remains consistent with existing ACP response shapes, which also do not return `cwd`. Instead, when `session/list` is supported, `SessionInfo.additionalDirectories` exposes the authoritative ordered additional-root list for listed sessions. `SessionInfoUpdate` remains unchanged because this RFD does not define mid-session mutation of `additionalDirectories`. Clients that need multi-root continuity across `session/load` or `session/resume` MUST still send the full intended list explicitly. +This proposal intentionally does not extend the responses to `session/new`, `session/load`, `session/resume`, or `session/fork` to surface additional-root state directly. That remains consistent with existing ACP response shapes, which also do not return `cwd`. Instead, when `session/list` is supported, Agents MAY expose the complete ordered additional-root list for listed sessions through `SessionInfo.additionalDirectories` when they track that state. `SessionInfoUpdate` remains unchanged because this RFD does not define mid-session mutation of `additionalDirectories`. Clients that need multi-root continuity across `session/load` or `session/resume` MUST still send the full intended list explicitly, and MAY change that list from a previously used or reported list as long as the request `cwd` matches the session's `cwd`. -`session/list` filtering no longer remains `cwd`-only: sessions may be filtered by `cwd`, by `additionalDirectories`, or by both together. Sessions that differ by `additionalDirectories` are therefore both distinguishable and filterable through `SessionInfo.additionalDirectories` and `ListSessionsRequest.additionalDirectories`. +`session/list` filtering remains independent of `additionalDirectories`. Sessions that differ by `additionalDirectories` are distinguishable only when the Agent surfaces that state through `SessionInfo.additionalDirectories`; Clients that need additional-root matching can filter those returned sessions locally. This RFD does not add a new RPC method. It also does not change the meaning of `cwd`, `sessionId`, or `mcpServers`. @@ -429,7 +419,7 @@ Clients MUST gate `additionalDirectories` on `sessionCapabilities.additionalDire ### Why not restore stored roots on `session/load` or `session/resume` when the field is omitted? -Even with `SessionInfo.additionalDirectories` available through `session/list`, implicit restoration would still let an agent reactivate filesystem scope that the current request did not state explicitly. That is undesirable for clients that do not use `session/list`, for clients resuming a session by ID without first listing it, and for clients that want request-time control over the active root set. This proposal therefore keeps load and resume explicit-list only for additional roots: omitting the field or supplying an empty array activates none, while supplying a non-empty array is explicitly allowed and sets the complete resulting additional-root list for that request. +Even when `SessionInfo.additionalDirectories` is available through `session/list`, implicit restoration would still let an Agent reactivate filesystem scope that the current request did not state explicitly. Some Agents also do not persist or surface this state at all. That is undesirable for Clients that do not use `session/list`, for Clients resuming a session by ID without first listing it, and for Clients that want request-time control over the active root set. This proposal therefore keeps load and resume explicit-list only for additional roots: omitting the field or supplying an empty array activates none, while supplying a non-empty array is explicitly allowed and sets the complete resulting additional-root list for that request. That list may differ from any previously used or reported list, as long as the request `cwd` matches the session's `cwd` and the Agent accepts the requested roots. ### What alternative approaches did you consider, and why did you settle on this one? diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index 320aaf10d..ae15000ac 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -3316,13 +3316,6 @@ "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", "type": ["object", "null"] }, - "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nFilter sessions by the exact ordered additional workspace roots. Each path must be absolute.\n\nThis filter applies only when the field is present and non-empty. When\nomitted or empty, no additional-root filter is applied.", - "items": { - "type": "string" - }, - "type": "array" - }, "cursor": { "description": "Opaque cursor token from a previous response's nextCursor field for cursor-based pagination", "type": ["string", "null"] @@ -3405,7 +3398,7 @@ "type": ["object", "null"] }, "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the loaded\nsession.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the loaded\nsession. It may differ from any previously used or reported list as long as\nthe request `cwd` matches the session's `cwd`.", "items": { "type": "string" }, @@ -5566,7 +5559,7 @@ "type": ["object", "null"] }, "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the resumed\nsession.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the resumed\nsession. It may differ from any previously used or reported list as long as\nthe request `cwd` matches the session's `cwd`.", "items": { "type": "string" }, @@ -5665,7 +5658,7 @@ "type": "object" }, "SessionAdditionalDirectoriesCapabilities": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for additional session directories support.\n\nBy supplying `{}` it means that the agent supports the `additionalDirectories` field on\nsupported session lifecycle requests and `session/list`.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for additional session directories support.\n\nBy supplying `{}` it means that the agent supports the `additionalDirectories`\nfield on supported session lifecycle requests. Agents that also support\n`session/list` may return `SessionInfo.additionalDirectories` when they track\nthat state.", "properties": { "_meta": { "additionalProperties": true, @@ -5692,7 +5685,7 @@ "type": "null" } ], - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`." + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `additionalDirectories` on supported session lifecycle requests.\n\nAgents that also support `session/list` may return\n`SessionInfo.additionalDirectories` when they track that state." }, "close": { "anyOf": [ @@ -6025,7 +6018,7 @@ "type": ["object", "null"] }, "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAuthoritative ordered additional workspace roots for this session. Each path must be absolute.\n\nWhen omitted or empty, there are no additional roots for the session.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots for this session, if the Agent reports them. Each path must be absolute.\n\nAgents may omit this field when they do not track or surface additional-root\nstate. When present, this is the complete additional-root list known to\nthe Agent for the session.", "items": { "type": "string" }, diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index 320aaf10d..ae15000ac 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -3316,13 +3316,6 @@ "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", "type": ["object", "null"] }, - "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nFilter sessions by the exact ordered additional workspace roots. Each path must be absolute.\n\nThis filter applies only when the field is present and non-empty. When\nomitted or empty, no additional-root filter is applied.", - "items": { - "type": "string" - }, - "type": "array" - }, "cursor": { "description": "Opaque cursor token from a previous response's nextCursor field for cursor-based pagination", "type": ["string", "null"] @@ -3405,7 +3398,7 @@ "type": ["object", "null"] }, "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the loaded\nsession.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the loaded\nsession. It may differ from any previously used or reported list as long as\nthe request `cwd` matches the session's `cwd`.", "items": { "type": "string" }, @@ -5566,7 +5559,7 @@ "type": ["object", "null"] }, "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the resumed\nsession.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots to activate for this session. Each path must be absolute.\n\nWhen omitted or empty, no additional roots are activated. When non-empty,\nthis is the complete resulting additional-root list for the resumed\nsession. It may differ from any previously used or reported list as long as\nthe request `cwd` matches the session's `cwd`.", "items": { "type": "string" }, @@ -5665,7 +5658,7 @@ "type": "object" }, "SessionAdditionalDirectoriesCapabilities": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for additional session directories support.\n\nBy supplying `{}` it means that the agent supports the `additionalDirectories` field on\nsupported session lifecycle requests and `session/list`.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for additional session directories support.\n\nBy supplying `{}` it means that the agent supports the `additionalDirectories`\nfield on supported session lifecycle requests. Agents that also support\n`session/list` may return `SessionInfo.additionalDirectories` when they track\nthat state.", "properties": { "_meta": { "additionalProperties": true, @@ -5692,7 +5685,7 @@ "type": "null" } ], - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`." + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `additionalDirectories` on supported session lifecycle requests.\n\nAgents that also support `session/list` may return\n`SessionInfo.additionalDirectories` when they track that state." }, "close": { "anyOf": [ @@ -6025,7 +6018,7 @@ "type": ["object", "null"] }, "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAuthoritative ordered additional workspace roots for this session. Each path must be absolute.\n\nWhen omitted or empty, there are no additional roots for the session.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots for this session, if the Agent reports them. Each path must be absolute.\n\nAgents may omit this field when they do not track or surface additional-root\nstate. When present, this is the complete additional-root list known to\nthe Agent for the session.", "items": { "type": "string" }, diff --git a/src/v1/agent.rs b/src/v1/agent.rs index 06368629f..f824cfa26 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -1120,7 +1120,8 @@ pub struct LoadSessionRequest { /// /// When omitted or empty, no additional roots are activated. When non-empty, /// this is the complete resulting additional-root list for the loaded - /// session. + /// session. It may differ from any previously used or reported list as long as + /// the request `cwd` matches the session's `cwd`. #[cfg(feature = "unstable_session_additional_directories")] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub additional_directories: Vec, @@ -1482,7 +1483,8 @@ pub struct ResumeSessionRequest { /// /// When omitted or empty, no additional roots are activated. When non-empty, /// this is the complete resulting additional-root list for the resumed - /// session. + /// session. It may differ from any previously used or reported list as long as + /// the request `cwd` matches the session's `cwd`. #[cfg(feature = "unstable_session_additional_directories")] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub additional_directories: Vec, @@ -1721,17 +1723,6 @@ impl CloseSessionResponse { pub struct ListSessionsRequest { /// Filter sessions by working directory. Must be an absolute path. pub cwd: Option, - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// - /// Filter sessions by the exact ordered additional workspace roots. Each path must be absolute. - /// - /// This filter applies only when the field is present and non-empty. When - /// omitted or empty, no additional-root filter is applied. - #[cfg(feature = "unstable_session_additional_directories")] - #[serde(default, skip_serializing_if = "Vec::is_empty")] - pub additional_directories: Vec, /// Opaque cursor token from a previous response's nextCursor field for cursor-based pagination pub cursor: Option, /// The _meta property is reserved by ACP to allow clients and agents to attach additional @@ -1756,18 +1747,6 @@ impl ListSessionsRequest { self } - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// - /// Filter sessions by the exact ordered additional workspace roots. Each path must be absolute. - #[cfg(feature = "unstable_session_additional_directories")] - #[must_use] - pub fn additional_directories(mut self, additional_directories: Vec) -> Self { - self.additional_directories = additional_directories; - self - } - /// Opaque cursor token from a previous response's nextCursor field for cursor-based pagination #[must_use] pub fn cursor(mut self, cursor: impl IntoOption) -> Self { @@ -1942,9 +1921,11 @@ pub struct SessionInfo { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Authoritative ordered additional workspace roots for this session. Each path must be absolute. + /// Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. /// - /// When omitted or empty, there are no additional roots for the session. + /// Agents may omit this field when they do not track or surface additional-root + /// state. When present, this is the complete additional-root list known to + /// the Agent for the session. #[cfg(feature = "unstable_session_additional_directories")] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub additional_directories: Vec, @@ -1984,7 +1965,7 @@ impl SessionInfo { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Authoritative ordered additional workspace roots for this session. Each path must be absolute. + /// Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. #[cfg(feature = "unstable_session_additional_directories")] #[must_use] pub fn additional_directories(mut self, additional_directories: Vec) -> Self { @@ -4252,7 +4233,10 @@ pub struct SessionCapabilities { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. + /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests. + /// + /// Agents that also support `session/list` may return + /// `SessionInfo.additionalDirectories` when they track that state. #[cfg(feature = "unstable_session_additional_directories")] #[serde_as(deserialize_as = "DefaultOnError")] #[serde(default)] @@ -4315,7 +4299,10 @@ impl SessionCapabilities { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. + /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests. + /// + /// Agents that also support `session/list` may return + /// `SessionInfo.additionalDirectories` when they track that state. #[cfg(feature = "unstable_session_additional_directories")] #[must_use] pub fn additional_directories( @@ -4440,8 +4427,10 @@ impl SessionDeleteCapabilities { /// /// Capabilities for additional session directories support. /// -/// By supplying `{}` it means that the agent supports the `additionalDirectories` field on -/// supported session lifecycle requests and `session/list`. +/// By supplying `{}` it means that the agent supports the `additionalDirectories` +/// field on supported session lifecycle requests. Agents that also support +/// `session/list` may return `SessionInfo.additionalDirectories` when they track +/// that state. #[cfg(feature = "unstable_session_additional_directories")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] @@ -5755,13 +5744,6 @@ mod test_serialization { "mcpServers": [] }) ); - assert_eq!( - serde_json::to_value( - ListSessionsRequest::new().additional_directories(Vec::::new()) - ) - .unwrap(), - json!({}) - ); assert_eq!( serde_json::to_value(SessionInfo::new("sess_abc123", "/home/user/project")).unwrap(), json!({ @@ -5795,22 +5777,6 @@ mod test_serialization { .additional_directories, Vec::::new() ); - - assert_eq!( - serde_json::from_value::(json!({})) - .unwrap() - .additional_directories, - Vec::::new() - ); - - assert_eq!( - serde_json::from_value::(json!({ - "additionalDirectories": [] - })) - .unwrap() - .additional_directories, - Vec::::new() - ); } #[cfg(feature = "unstable_session_additional_directories")] diff --git a/src/v2/agent.rs b/src/v2/agent.rs index 695b4b8c5..a915111e3 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -1120,7 +1120,8 @@ pub struct LoadSessionRequest { /// /// When omitted or empty, no additional roots are activated. When non-empty, /// this is the complete resulting additional-root list for the loaded - /// session. + /// session. It may differ from any previously used or reported list as long as + /// the request `cwd` matches the session's `cwd`. #[cfg(feature = "unstable_session_additional_directories")] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub additional_directories: Vec, @@ -1482,7 +1483,8 @@ pub struct ResumeSessionRequest { /// /// When omitted or empty, no additional roots are activated. When non-empty, /// this is the complete resulting additional-root list for the resumed - /// session. + /// session. It may differ from any previously used or reported list as long as + /// the request `cwd` matches the session's `cwd`. #[cfg(feature = "unstable_session_additional_directories")] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub additional_directories: Vec, @@ -1721,17 +1723,6 @@ impl CloseSessionResponse { pub struct ListSessionsRequest { /// Filter sessions by working directory. Must be an absolute path. pub cwd: Option, - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// - /// Filter sessions by the exact ordered additional workspace roots. Each path must be absolute. - /// - /// This filter applies only when the field is present and non-empty. When - /// omitted or empty, no additional-root filter is applied. - #[cfg(feature = "unstable_session_additional_directories")] - #[serde(default, skip_serializing_if = "Vec::is_empty")] - pub additional_directories: Vec, /// Opaque cursor token from a previous response's nextCursor field for cursor-based pagination pub cursor: Option, /// The _meta property is reserved by ACP to allow clients and agents to attach additional @@ -1756,18 +1747,6 @@ impl ListSessionsRequest { self } - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// - /// Filter sessions by the exact ordered additional workspace roots. Each path must be absolute. - #[cfg(feature = "unstable_session_additional_directories")] - #[must_use] - pub fn additional_directories(mut self, additional_directories: Vec) -> Self { - self.additional_directories = additional_directories; - self - } - /// Opaque cursor token from a previous response's nextCursor field for cursor-based pagination #[must_use] pub fn cursor(mut self, cursor: impl IntoOption) -> Self { @@ -1942,9 +1921,11 @@ pub struct SessionInfo { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Authoritative ordered additional workspace roots for this session. Each path must be absolute. + /// Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. /// - /// When omitted or empty, there are no additional roots for the session. + /// Agents may omit this field when they do not track or surface additional-root + /// state. When present, this is the complete additional-root list known to + /// the Agent for the session. #[cfg(feature = "unstable_session_additional_directories")] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub additional_directories: Vec, @@ -1984,7 +1965,7 @@ impl SessionInfo { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Authoritative ordered additional workspace roots for this session. Each path must be absolute. + /// Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. #[cfg(feature = "unstable_session_additional_directories")] #[must_use] pub fn additional_directories(mut self, additional_directories: Vec) -> Self { @@ -4252,7 +4233,10 @@ pub struct SessionCapabilities { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. + /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests. + /// + /// Agents that also support `session/list` may return + /// `SessionInfo.additionalDirectories` when they track that state. #[cfg(feature = "unstable_session_additional_directories")] #[serde_as(deserialize_as = "DefaultOnError")] #[serde(default)] @@ -4315,7 +4299,10 @@ impl SessionCapabilities { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests and `session/list`. + /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests. + /// + /// Agents that also support `session/list` may return + /// `SessionInfo.additionalDirectories` when they track that state. #[cfg(feature = "unstable_session_additional_directories")] #[must_use] pub fn additional_directories( @@ -4440,8 +4427,10 @@ impl SessionDeleteCapabilities { /// /// Capabilities for additional session directories support. /// -/// By supplying `{}` it means that the agent supports the `additionalDirectories` field on -/// supported session lifecycle requests and `session/list`. +/// By supplying `{}` it means that the agent supports the `additionalDirectories` +/// field on supported session lifecycle requests. Agents that also support +/// `session/list` may return `SessionInfo.additionalDirectories` when they track +/// that state. #[cfg(feature = "unstable_session_additional_directories")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] @@ -5677,13 +5666,6 @@ mod test_serialization { "mcpServers": [] }) ); - assert_eq!( - serde_json::to_value( - ListSessionsRequest::new().additional_directories(Vec::::new()) - ) - .unwrap(), - json!({}) - ); assert_eq!( serde_json::to_value(SessionInfo::new("sess_abc123", "/home/user/project")).unwrap(), json!({ @@ -5717,22 +5699,6 @@ mod test_serialization { .additional_directories, Vec::::new() ); - - assert_eq!( - serde_json::from_value::(json!({})) - .unwrap() - .additional_directories, - Vec::::new() - ); - - assert_eq!( - serde_json::from_value::(json!({ - "additionalDirectories": [] - })) - .unwrap() - .additional_directories, - Vec::::new() - ); } #[cfg(feature = "unstable_session_additional_directories")] diff --git a/src/v2/conversion.rs b/src/v2/conversion.rs index 9d49f1b7f..033da1da2 100644 --- a/src/v2/conversion.rs +++ b/src/v2/conversion.rs @@ -3698,17 +3698,9 @@ impl IntoV1 for super::ListSessionsRequest { type Output = crate::v1::ListSessionsRequest; fn into_v1(self) -> Result { - let Self { - cwd, - #[cfg(feature = "unstable_session_additional_directories")] - additional_directories, - cursor, - meta, - } = self; + let Self { cwd, cursor, meta } = self; Ok(crate::v1::ListSessionsRequest { cwd: cwd.into_v1()?, - #[cfg(feature = "unstable_session_additional_directories")] - additional_directories: additional_directories.into_v1()?, cursor: cursor.into_v1()?, meta: meta.into_v1()?, }) @@ -3719,17 +3711,9 @@ impl IntoV2 for crate::v1::ListSessionsRequest { type Output = super::ListSessionsRequest; fn into_v2(self) -> Result { - let Self { - cwd, - #[cfg(feature = "unstable_session_additional_directories")] - additional_directories, - cursor, - meta, - } = self; + let Self { cwd, cursor, meta } = self; Ok(super::ListSessionsRequest { cwd: cwd.into_v2()?, - #[cfg(feature = "unstable_session_additional_directories")] - additional_directories: additional_directories.into_v2()?, cursor: cursor.into_v2()?, meta: meta.into_v2()?, }) From d42343a3446e18e7a585a809aca2d770b0291eb4 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Sun, 17 May 2026 21:25:33 +0000 Subject: [PATCH 111/152] chore: release v0.13.2 (#1228) Co-authored-by: acp-release-bot[bot] <246668977+acp-release-bot[bot]@users.noreply.github.com> --- CHANGELOG.md | 6 ++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74ac27b24..ebaf85b93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [0.13.2](https://github.com/agentclientprotocol/agent-client-protocol/compare/v0.13.1...v0.13.2) - 2026-05-17 + +### Fixed + +- *(unstable)* Update additionalDirectories guidance ([#1227](https://github.com/agentclientprotocol/agent-client-protocol/pull/1227)) + ## [0.13.1](https://github.com/agentclientprotocol/agent-client-protocol/compare/v0.13.0...v0.13.1) - 2026-05-16 ### Added diff --git a/Cargo.lock b/Cargo.lock index 20fd1c063..a9849cf2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "agent-client-protocol-schema" -version = "0.13.1" +version = "0.13.2" dependencies = [ "anyhow", "derive_more", diff --git a/Cargo.toml b/Cargo.toml index 00c5f334f..ccd3856f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "agent-client-protocol-schema" authors = ["Zed "] -version = "0.13.1" +version = "0.13.2" edition = "2024" license = "Apache-2.0" description = "A protocol for standardizing communication between code editors and AI coding agents" From 7fb5e229bc91b3a57d30db4d7ea59b158b0e99fe Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Sun, 17 May 2026 23:50:12 +0200 Subject: [PATCH 112/152] docs: Document ACP versioning semantics (#1229) --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 7f60b301e..f27a8d100 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,18 @@ The Agent Client Protocol (ACP) standardizes communication between _code editors Learn more at [agentclientprotocol.com](https://agentclientprotocol.com/). +## Versioning + +The published crate and schema package versions describe the Rust crate and JSON Schema artifacts themselves. They follow the compatibility expectations of those artifacts: Rust APIs, generated schema structure, artifact layout, and other details that downstream SDKs or code generators may consume. + +**The current stable ACP protocol version is `1`.** + +ACP wire compatibility is determined separately by the protocol version exchanged during `initialize` via `protocolVersion`. The `version` field in `schema/meta*.json` also describes the ACP protocol version that the corresponding schema represents. + +This means two versions of the JSON Schema artifacts can describe the same wire-compatible ACP protocol version while having different schema structure for SDK generators. For example, a release might change how definitions are organized, named, or emitted in the JSON Schema in a way that affects downstream code generation without changing the JSON messages exchanged by ACP clients and agents. + +Consumers should not infer wire compatibility from the crate or schema package version alone. Use the negotiated `protocolVersion` to determine the ACP wire protocol shape and breaking-compatibility level. Within a protocol version, use the exchanged capabilities to decide which optional ACP messages and features are supported. Use artifact versions to manage compatibility with this repository's Rust and schema outputs. + ## Integrations - [Schema](./schema/schema.json) From 64f729180e7a19279ca4275f77c68575d57af671 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Sun, 17 May 2026 23:52:20 +0200 Subject: [PATCH 113/152] chore: update mint version (#1230) --- package-lock.json | 1452 +++++++++++++-------------------------------- 1 file changed, 425 insertions(+), 1027 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb9437819..1a1d75f29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -265,6 +265,9 @@ "arm" ], "dev": true, + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -282,6 +285,9 @@ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -299,6 +305,9 @@ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -316,6 +325,9 @@ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -333,6 +345,9 @@ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -350,6 +365,9 @@ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -367,6 +385,9 @@ "arm" ], "dev": true, + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -390,6 +411,9 @@ "arm64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -413,6 +437,9 @@ "s390x" ], "dev": true, + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -436,6 +463,9 @@ "x64" ], "dev": true, + "libc": [ + "glibc" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -459,6 +489,9 @@ "arm64" ], "dev": true, + "libc": [ + "musl" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -482,6 +515,9 @@ "x64" ], "dev": true, + "libc": [ + "musl" + ], "license": "Apache-2.0", "optional": true, "os": [ @@ -907,6 +943,19 @@ } } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1049,19 +1098,19 @@ } }, "node_modules/@mintlify/cli": { - "version": "4.0.1161", - "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.1161.tgz", - "integrity": "sha512-vUubQjIjeAb2eS6pztwSlmMQvGSIoJiaXb78/LCApiFnemDo0etwGZv5pBdMV2Z8E2MHx+zC4gbIjDK8NHER3w==", + "version": "4.0.1169", + "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.1169.tgz", + "integrity": "sha512-rVWE8j3r7ONL7Mo/dqfsMWB/iIBF0XOC39SzbCgZlo/4HT+cqDKAAC5xBj5NCHcLmi9/EyXtkTDmCNR3rHCdiA==", "dev": true, "license": "Elastic-2.0", "dependencies": { "@inquirer/prompts": "7.9.0", - "@mintlify/common": "1.0.890", - "@mintlify/link-rot": "3.0.1069", - "@mintlify/models": "0.0.306", - "@mintlify/prebuild": "1.0.1034", - "@mintlify/previewing": "4.0.1095", - "@mintlify/validation": "0.1.696", + "@mintlify/common": "1.0.898", + "@mintlify/link-rot": "3.0.1077", + "@mintlify/models": "0.0.309", + "@mintlify/prebuild": "1.0.1042", + "@mintlify/previewing": "4.0.1103", + "@mintlify/validation": "0.1.704", "adm-zip": "0.5.16", "chalk": "5.2.0", "color": "4.2.3", @@ -1070,16 +1119,16 @@ "fs-extra": "11.2.0", "ink": "6.3.0", "inquirer": "12.3.0", - "js-yaml": "4.1.0", + "js-yaml": "4.1.1", "mdast-util-mdx-jsx": "3.2.0", - "open": "^8.4.2", - "openid-client": "^6.8.2", + "open": "8.4.2", + "openid-client": "6.8.2", "posthog-node": "5.17.2", "react": "19.2.3", "semver": "7.7.2", "unist-util-visit": "5.0.0", "yargs": "17.7.1", - "zod": "^4.3.6" + "zod": "4.3.6" }, "bin": { "mint": "bin/index.js", @@ -1089,22 +1138,22 @@ "node": ">=18.0.0" }, "optionalDependencies": { - "keytar": "^7.9.0" + "keytar": "7.9.0" } }, "node_modules/@mintlify/common": { - "version": "1.0.890", - "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.890.tgz", - "integrity": "sha512-MjyN5fh1ujeAemLbJGd1jf6U9cXto6zNqyjrDoFIvDoBEluOFExOYGwwrWU1SClDGC6cISsZcX1lxsdoqtygnQ==", + "version": "1.0.898", + "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.898.tgz", + "integrity": "sha512-42EeHfjkIr8rTNaC2fNSQ7mcPQPmEbSFuMyOPnCxONEhkO+KilwF9TqyeYT3FkV7pQM3RhcwvhhEd8QIfEC8rg==", "dev": true, "license": "ISC", "dependencies": { "@asyncapi/parser": "3.4.0", "@asyncapi/specs": "6.8.1", - "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.306", - "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/validation": "0.1.696", + "@mintlify/mdx": "3.0.4", + "@mintlify/models": "0.0.309", + "@mintlify/openapi-parser": "0.0.8", + "@mintlify/validation": "0.1.704", "@sindresorhus/slugify": "2.2.0", "@types/mdast": "4.0.4", "acorn": "8.11.2", @@ -1118,7 +1167,7 @@ "hast-util-to-text": "4.0.2", "hex-rgb": "5.0.0", "ignore": "7.0.5", - "js-yaml": "4.1.0", + "js-yaml": "4.1.1", "lodash": "4.18.1", "mdast-util-from-markdown": "2.0.2", "mdast-util-gfm": "3.0.0", @@ -1128,7 +1177,7 @@ "micromark-extension-mdx-jsx": "3.0.1", "micromark-extension-mdxjs": "3.0.0", "openapi-types": "12.1.3", - "postcss": "8.5.6", + "postcss": "8.5.14", "rehype-stringify": "10.0.1", "remark": "15.0.1", "remark-frontmatter": "5.0.0", @@ -1138,8 +1187,8 @@ "remark-parse": "11.0.0", "remark-rehype": "11.1.1", "remark-stringify": "11.0.0", - "sucrase": "^3.34.0", - "tailwindcss": "^3.4.17", + "sucrase": "3.34.0", + "tailwindcss": "3.4.17", "unified": "11.0.5", "unist-builder": "4.0.0", "unist-util-map": "4.0.0", @@ -1561,18 +1610,18 @@ } }, "node_modules/@mintlify/link-rot": { - "version": "3.0.1069", - "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.1069.tgz", - "integrity": "sha512-55euuVtWYOTGZ+YvlYAnhTLxjSjOAWHD4swqp27GyS/JBkBsa8Hu6iqdTBfRT2WiKeDqY2xYTswS5uCUkWKsaA==", + "version": "3.0.1077", + "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.1077.tgz", + "integrity": "sha512-AueSCgWeWAC8XS16eaKTcleAV5CJ3PHfrkTtvyZRSE87AwlEATj9RH26MaHfKSoVSOPl64KIwdd1OPNEfujppA==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.890", - "@mintlify/models": "0.0.306", - "@mintlify/prebuild": "1.0.1034", - "@mintlify/previewing": "4.0.1095", - "@mintlify/scraping": "4.0.522", - "@mintlify/validation": "0.1.696", + "@mintlify/common": "1.0.898", + "@mintlify/models": "0.0.309", + "@mintlify/prebuild": "1.0.1042", + "@mintlify/previewing": "4.0.1103", + "@mintlify/scraping": "4.0.762", + "@mintlify/validation": "0.1.704", "fs-extra": "11.1.0", "unist-util-visit": "4.1.2" }, @@ -1648,13 +1697,13 @@ } }, "node_modules/@mintlify/models": { - "version": "0.0.306", - "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.306.tgz", - "integrity": "sha512-3EUvTXg8OJ8mZzXRDga0bSGJwJWto2Wc7qIfoCzNH+MTOh531OWKPk/OAOcMaftJcDggETbCinfDb0GXiqLL8Q==", + "version": "0.0.309", + "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.309.tgz", + "integrity": "sha512-LmFZA8cn+pXqDOhwI+4sMDdwQLXcXuZMDU9DkTV8bLN/z543V2BtUkcwUytFf7lzKvyOvqDHyVZCjCdFCQmO7A==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "axios": "1.15.0", + "axios": "1.16.1", "openapi-types": "12.1.3" }, "engines": { @@ -1698,90 +1747,34 @@ } }, "node_modules/@mintlify/prebuild": { - "version": "1.0.1034", - "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.1034.tgz", - "integrity": "sha512-zUP77WYXE+ILMgPVF+aX61Gg6p6N3ZdbuBvzcjb/LWIs/rHfiAmAymil1PYm5Bj0bezdoyw8W/JDH4Gyl99/gg==", + "version": "1.0.1042", + "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.1042.tgz", + "integrity": "sha512-4dGquPP4C+xXbTN5vdR67b80Pm1kSJqGzIcLms2qJBJzM/FQEPkUNIZgovFKaHtiaq04pSUQYxebc1uflrZvRg==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.890", - "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/scraping": "4.0.754", - "@mintlify/validation": "0.1.696", + "@mintlify/common": "1.0.898", + "@mintlify/openapi-parser": "0.0.8", + "@mintlify/scraping": "4.0.762", + "@mintlify/validation": "0.1.704", "chalk": "5.3.0", "favicons": "7.2.0", "front-matter": "4.0.2", "fs-extra": "11.1.0", - "js-yaml": "4.1.0", + "js-yaml": "4.1.1", "openapi-types": "12.1.3", "sharp": "0.33.5", "sharp-ico": "0.1.5", "unist-util-visit": "4.1.2", - "uuid": "11.1.0" - } - }, - "node_modules/@mintlify/prebuild/node_modules/@mintlify/scraping": { - "version": "4.0.754", - "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.754.tgz", - "integrity": "sha512-OEIWrc2hv1HBBBTOExx8QwXOIfCafqYKlqVZmk6cAuBJF6aRSvbhEHgSwySziicBftzOWSqE1iBWUFD9lDzxyQ==", - "dev": true, - "license": "Elastic-2.0", - "dependencies": { - "@mintlify/common": "1.0.890", - "@mintlify/openapi-parser": "^0.0.8", - "fs-extra": "11.1.1", - "hast-util-to-mdast": "10.1.0", - "js-yaml": "4.1.0", - "mdast-util-mdx-jsx": "3.1.3", - "neotraverse": "0.6.18", - "puppeteer": "22.14.0", - "rehype-parse": "9.0.1", - "remark-gfm": "4.0.0", - "remark-mdx": "3.0.1", - "remark-parse": "11.0.0", - "remark-stringify": "11.0.0", - "unified": "11.0.5", - "unist-util-visit": "5.0.0", - "yargs": "17.7.1", - "zod": "3.24.0" - }, - "bin": { - "mintlify-scrape": "bin/cli.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@mintlify/prebuild/node_modules/@mintlify/scraping/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" + "uuid": "11.1.1" } }, - "node_modules/@mintlify/prebuild/node_modules/@mintlify/scraping/node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "node_modules/@mintlify/prebuild/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT" }, "node_modules/@mintlify/prebuild/node_modules/chalk": { "version": "5.3.0", @@ -1811,40 +1804,14 @@ "node": ">=14.14" } }, - "node_modules/@mintlify/prebuild/node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mintlify/prebuild/node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", + "node_modules/@mintlify/prebuild/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", "dev": true, "license": "MIT", "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" + "@types/unist": "^2.0.0" }, "funding": { "type": "opencollective", @@ -1867,28 +1834,7 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@mintlify/prebuild/node_modules/unist-util-visit/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@mintlify/prebuild/node_modules/unist-util-visit/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mintlify/prebuild/node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { + "node_modules/@mintlify/prebuild/node_modules/unist-util-visit-parents": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", @@ -1903,26 +1849,16 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/@mintlify/prebuild/node_modules/zod": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.0.tgz", - "integrity": "sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@mintlify/previewing": { - "version": "4.0.1095", - "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.1095.tgz", - "integrity": "sha512-6uqxswGNffUnx/DUfkKtbZ0B3h6h1EEv8VWRQXl1TczkkCRR65m9/7kyCAPIEw5/4WoiNOO4ElSJajpg7+VuaA==", + "version": "4.0.1103", + "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.1103.tgz", + "integrity": "sha512-6QPqc54fbqcNj3Lxa1WjzF9iJHGTkOy6tRIwijOfSdd1oN7XT6/xWzG4K/+kFZ8rLTPTV0adRrLgKxN9jRrSig==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.890", - "@mintlify/prebuild": "1.0.1034", - "@mintlify/validation": "0.1.696", + "@mintlify/common": "1.0.898", + "@mintlify/prebuild": "1.0.1042", + "@mintlify/validation": "0.1.704", "adm-zip": "0.5.16", "better-opn": "3.0.2", "chalk": "5.2.0", @@ -1934,11 +1870,11 @@ "ink": "6.3.0", "ink-spinner": "5.0.0", "is-online": "10.0.0", - "js-yaml": "4.1.0", + "js-yaml": "4.1.1", "openapi-types": "12.1.3", "react": "19.2.3", "socket.io": "4.8.0", - "tar": "6.1.15", + "tar": "7.5.15", "unist-util-visit": "4.1.2", "yargs": "17.7.1" }, @@ -2014,17 +1950,17 @@ } }, "node_modules/@mintlify/scraping": { - "version": "4.0.522", - "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.522.tgz", - "integrity": "sha512-PL2k52WT5S5OAgnT2K13bP7J2El6XwiVvQlrLvxDYw5KMMV+y34YVJI8ZscKb4trjitWDgyK0UTq2KN6NQgn6g==", + "version": "4.0.762", + "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.762.tgz", + "integrity": "sha512-LHdkom5DlSi0a8Wv71/lY949QYHfNs2XIlO5sPm5BJSO8ClBwSm10zZturmeuVvUezWtxwTOvcYXBDBgrmgTSw==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.661", - "@mintlify/openapi-parser": "^0.0.8", + "@mintlify/common": "1.0.898", + "@mintlify/openapi-parser": "0.0.8", "fs-extra": "11.1.1", "hast-util-to-mdast": "10.1.0", - "js-yaml": "4.1.0", + "js-yaml": "4.1.1", "mdast-util-mdx-jsx": "3.1.3", "neotraverse": "0.6.18", "puppeteer": "22.14.0", @@ -2036,7 +1972,7 @@ "unified": "11.0.5", "unist-util-visit": "5.0.0", "yargs": "17.7.1", - "zod": "3.21.4" + "zod": "3.24.0" }, "bin": { "mintlify-scrape": "bin/cli.js" @@ -2045,723 +1981,88 @@ "node": ">=18.0.0" } }, - "node_modules/@mintlify/scraping/node_modules/@floating-ui/react-dom": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", - "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@floating-ui/dom": "^1.7.6" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@mintlify/scraping/node_modules/@mintlify/common": { - "version": "1.0.661", - "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.661.tgz", - "integrity": "sha512-/Hdiblzaomp+AWStQ4smhVMgesQhffzQjC9aYBnmLReNdh2Js+ccQFUaWL3TNIxwiS2esaZvsHSV/D+zyRS3hg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@asyncapi/parser": "3.4.0", - "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.255", - "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/validation": "0.1.555", - "@sindresorhus/slugify": "2.2.0", - "@types/mdast": "4.0.4", - "acorn": "8.11.2", - "acorn-jsx": "5.3.2", - "color-blend": "4.0.0", - "estree-util-to-js": "2.0.0", - "estree-walker": "3.0.3", - "front-matter": "4.0.2", - "hast-util-from-html": "2.0.3", - "hast-util-to-html": "9.0.4", - "hast-util-to-text": "4.0.2", - "hex-rgb": "5.0.0", - "ignore": "7.0.5", - "js-yaml": "4.1.0", - "lodash": "4.17.21", - "mdast-util-from-markdown": "2.0.2", - "mdast-util-gfm": "3.0.0", - "mdast-util-mdx": "3.0.0", - "mdast-util-mdx-jsx": "3.1.3", - "micromark-extension-gfm": "3.0.0", - "micromark-extension-mdx-jsx": "3.0.1", - "micromark-extension-mdxjs": "3.0.0", - "openapi-types": "12.1.3", - "postcss": "8.5.6", - "rehype-stringify": "10.0.1", - "remark": "15.0.1", - "remark-frontmatter": "5.0.0", - "remark-gfm": "4.0.0", - "remark-math": "6.0.0", - "remark-mdx": "3.1.0", - "remark-parse": "11.0.0", - "remark-rehype": "11.1.1", - "remark-stringify": "11.0.0", - "tailwindcss": "3.4.4", - "unified": "11.0.5", - "unist-builder": "4.0.0", - "unist-util-map": "4.0.0", - "unist-util-remove": "4.0.0", - "unist-util-remove-position": "5.0.0", - "unist-util-visit": "5.0.0", - "unist-util-visit-parents": "6.0.1", - "vfile": "6.0.3" - } - }, - "node_modules/@mintlify/scraping/node_modules/@mintlify/common/node_modules/remark-mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", - "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mintlify/scraping/node_modules/@mintlify/mdx": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@mintlify/mdx/-/mdx-3.0.4.tgz", - "integrity": "sha512-tJhdpnM5ReJLNJ2fuDRIEr0zgVd6id7/oAIfs26V46QlygiLsc8qx4Rz3LWIX51rUXW/cfakjj0EATxIciIw+g==", + "node_modules/@mintlify/scraping/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/transformers": "^3.11.0", - "@shikijs/twoslash": "^3.12.2", - "arktype": "^2.1.26", - "hast-util-to-string": "^3.0.1", - "mdast-util-from-markdown": "^2.0.2", - "mdast-util-gfm": "^3.1.0", - "mdast-util-mdx-jsx": "^3.2.0", - "mdast-util-to-hast": "^13.2.0", - "next-mdx-remote-client": "^1.0.3", - "rehype-katex": "^7.0.1", - "remark-gfm": "^4.0.0", - "remark-math": "^6.0.0", - "remark-smartypants": "^3.0.2", - "shiki": "^3.11.0", - "unified": "^11.0.0", - "unist-util-visit": "^5.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "peerDependencies": { - "@radix-ui/react-popover": "^1.1.15", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "engines": { + "node": ">=14.14" } }, - "node_modules/@mintlify/scraping/node_modules/@mintlify/mdx/node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "node_modules/@mintlify/scraping/node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", "dev": true, "license": "MIT", "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mintlify/scraping/node_modules/@mintlify/mdx/node_modules/mdast-util-mdx-jsx": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mintlify/scraping/node_modules/@mintlify/models": { - "version": "0.0.255", - "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.255.tgz", - "integrity": "sha512-LIUkfA7l7ypHAAuOW74ZJws/NwNRqlDRD/U466jarXvvSlGhJec/6J4/I+IEcBvWDnc9anLFKmnGO04jPKgAsg==", - "dev": true, - "license": "Elastic-2.0", - "dependencies": { - "axios": "1.10.0", - "openapi-types": "12.1.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@mintlify/scraping/node_modules/@mintlify/validation": { - "version": "0.1.555", - "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.555.tgz", - "integrity": "sha512-11QVUReL4N5u8wSCgZt4RN7PA0jYQoMEBZ5IrUp5pgb5ZJBOoGV/vPsQrxPPa1cxsUDAuToNhtGxRQtOav/w8w==", - "dev": true, - "license": "Elastic-2.0", - "dependencies": { - "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.255", - "arktype": "2.1.27", - "js-yaml": "4.1.0", - "lcm": "0.0.3", - "lodash": "4.17.21", - "object-hash": "3.0.0", - "openapi-types": "12.1.3", - "uuid": "11.1.0", - "zod": "3.21.4", - "zod-to-json-schema": "3.20.4" - } - }, - "node_modules/@mintlify/scraping/node_modules/@radix-ui/react-arrow": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", - "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-primitive": "2.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@mintlify/scraping/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", - "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-escape-keydown": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@mintlify/scraping/node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", - "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@mintlify/scraping/node_modules/@radix-ui/react-popover": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", - "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/primitive": "1.1.3", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.11", - "@radix-ui/react-focus-guards": "1.1.3", - "@radix-ui/react-focus-scope": "1.1.7", - "@radix-ui/react-id": "1.1.1", - "@radix-ui/react-popper": "1.2.8", - "@radix-ui/react-portal": "1.1.9", - "@radix-ui/react-presence": "1.1.5", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-slot": "1.2.3", - "@radix-ui/react-use-controllable-state": "1.2.2", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.6.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@mintlify/scraping/node_modules/@radix-ui/react-popper": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", - "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.7", - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-context": "1.1.2", - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-callback-ref": "1.1.1", - "@radix-ui/react-use-layout-effect": "1.1.1", - "@radix-ui/react-use-rect": "1.1.1", - "@radix-ui/react-use-size": "1.1.1", - "@radix-ui/rect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@mintlify/scraping/node_modules/@radix-ui/react-portal": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", - "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-primitive": "2.1.3", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@mintlify/scraping/node_modules/@radix-ui/react-presence": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", - "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@mintlify/scraping/node_modules/@radix-ui/react-primitive": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", - "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@radix-ui/react-slot": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@mintlify/scraping/node_modules/axios": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/@mintlify/scraping/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@mintlify/scraping/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@mintlify/scraping/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/@mintlify/scraping/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@mintlify/scraping/node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mintlify/scraping/node_modules/next-mdx-remote-client": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/next-mdx-remote-client/-/next-mdx-remote-client-1.1.7.tgz", - "integrity": "sha512-12Ap5Z/tFIETMXFSBTH2IFEhJAso7MvOJ5ICyesA4q6FM4vtAcmb+4ZKa4tV1IVQJLBVqOhaEfIESZzdwjmrQQ==", - "dev": true, - "license": "MPL 2.0", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@mdx-js/mdx": "^3.1.1", - "@mdx-js/react": "^3.1.1", - "remark-mdx-remove-esm": "^1.3.1", - "serialize-error": "^13.0.1", - "vfile": "^6.0.3", - "vfile-matter": "^5.0.1" - }, - "engines": { - "node": ">=20.9.0" - }, - "peerDependencies": { - "react": ">= 18.3.0 < 19.0.0", - "react-dom": ">= 18.3.0 < 19.0.0" - } - }, - "node_modules/@mintlify/scraping/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@mintlify/scraping/node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mintlify/scraping/node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/@mintlify/scraping/node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mintlify/scraping/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/@mintlify/scraping/node_modules/tailwindcss": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", - "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@mintlify/scraping/node_modules/tailwindcss/node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@mintlify/scraping/node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "node_modules/@mintlify/scraping/node_modules/remark-mdx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", + "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=14" + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/antonk52" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/@mintlify/scraping/node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.0.tgz", + "integrity": "sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@mintlify/scraping/node_modules/zod-to-json-schema": { - "version": "3.20.4", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.20.4.tgz", - "integrity": "sha512-Un9+kInJ2Zt63n6Z7mLqBifzzPcOyX+b+Exuzf7L1+xqck9Q2EPByyTRduV3kmSPaXaRer1JCsucubpgL1fipg==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "zod": "^3.20.0" - } - }, "node_modules/@mintlify/validation": { - "version": "0.1.696", - "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.696.tgz", - "integrity": "sha512-czZCxETAFP3aQID+TsQTurQM7WNegr2frBo0+pUDgb3s0VZb7vjf+3ppNuprWsepbH5UpVS3w2EOkxb1w47bfQ==", + "version": "0.1.704", + "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.704.tgz", + "integrity": "sha512-epUweK7gRjpYWS/0lK6hRzUHSYJKcBrBXYAWt3+loiUAIYypmtWDuZJ0ZM/hreXggmyQndJ6WrS+lToD3PTbMQ==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.306", + "@mintlify/mdx": "3.0.4", + "@mintlify/models": "0.0.309", "arktype": "2.1.27", - "js-yaml": "4.1.0", + "js-yaml": "4.1.1", "lcm": "0.0.3", "lodash": "4.18.1", "neotraverse": "0.6.18", "object-hash": "3.0.0", "openapi-types": "12.1.3", - "uuid": "11.1.0", + "uuid": "11.1.1", "zod": "3.24.0", "zod-to-json-schema": "3.20.4" } @@ -3856,9 +3157,9 @@ } }, "node_modules/@stoplight/spectral-core": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.22.0.tgz", - "integrity": "sha512-4hTxMDs4TFUG4/jKjaZttA65gNuV2PCKI9+51I+J4nL6ylo17DlbW+sl6byKnBuV/85HxaV33ri5fEGlp8lTSA==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.23.0.tgz", + "integrity": "sha512-WvdgmiiJrjiMrcw7ByxfcYtUvAXNp2MhAfcEIXP3Mn8ZOVwyAWIsFjLlsE5zRqj0LuN8+7OQM/L+BMcHj6x/BQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4271,13 +3572,13 @@ } }, "node_modules/@types/node": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.7.0.tgz", - "integrity": "sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==", + "version": "25.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz", + "integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.21.0" + "undici-types": ">=7.24.0 <7.24.7" } }, "node_modules/@types/react": { @@ -4417,13 +3718,16 @@ } }, "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "license": "MIT", + "dependencies": { + "debug": "4" + }, "engines": { - "node": ">= 14" + "node": ">= 6.0.0" } }, "node_modules/aggregate-error": { @@ -4768,14 +4072,15 @@ } }, "node_modules/axios": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", - "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", + "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, @@ -4813,9 +4118,9 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.3.tgz", + "integrity": "sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -5332,13 +4637,13 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/chromium-bidi": { @@ -7234,31 +6539,12 @@ "node": ">=14.14" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -7460,6 +6746,28 @@ "license": "MIT", "optional": true }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -8048,6 +7356,16 @@ "node": ">= 14" } }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/http2-wrapper": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", @@ -8063,17 +7381,17 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", + "agent-base": "6", "debug": "4" }, "engines": { - "node": ">= 14" + "node": ">= 6" } }, "node_modules/ico-endec": { @@ -8172,6 +7490,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -9027,9 +8357,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -9120,9 +8450,9 @@ } }, "node_modules/katex": { - "version": "0.16.45", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.45.tgz", - "integrity": "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==", + "version": "0.16.47", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz", + "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", "dev": true, "funding": [ "https://opencollective.com/katex", @@ -10568,50 +9898,36 @@ } }, "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">= 18" } }, "node_modules/mint": { - "version": "4.2.558", - "resolved": "https://registry.npmjs.org/mint/-/mint-4.2.558.tgz", - "integrity": "sha512-r0seaT/2xk/qZXRhlOSH2ZUCEXyi2KvufX4K5TVIPfTFOBMzU/efwErTmI/qxF8jPawV9cZC+AwSYcQBWTSaOg==", + "version": "4.2.566", + "resolved": "https://registry.npmjs.org/mint/-/mint-4.2.566.tgz", + "integrity": "sha512-TXjRI8qmUipdNu6/eew8VbVGIg8z1EaD+nKLMeXN8JmuNP+jmyfG3r5Gd7WYoQy2gp+QqM0crRNrStCjXUUyIw==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/cli": "4.0.1161" + "@mintlify/cli": "4.0.1169" }, "bin": { "mint": "index.js" @@ -10627,19 +9943,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -11005,14 +10308,14 @@ "license": "MIT" }, "node_modules/openid-client": { - "version": "6.8.4", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.4.tgz", - "integrity": "sha512-QSw0BA08piujetEwfZsHoTrDpMEha7GDZDicQqVwX4u0ChCjefvjDB++TZ8BTg76UpwhzIQgdvvfgfl3HpCSAw==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.2.tgz", + "integrity": "sha512-uOvTCndr4udZsKihJ68H9bUICrriHdUVJ6Az+4Ns6cW55rwM5h0bjVIzDz2SxgOI84LKjFyjOFvERLzdTUROGA==", "dev": true, "license": "MIT", "dependencies": { - "jose": "^6.2.2", - "oauth4webapi": "^3.8.5" + "jose": "^6.1.3", + "oauth4webapi": "^3.8.4" }, "funding": { "url": "https://github.com/sponsors/panva" @@ -11113,6 +10416,30 @@ "node": ">= 14" } }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/pac-resolver": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", @@ -11238,6 +10565,16 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -11330,9 +10667,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", "dev": true, "funding": [ { @@ -11403,9 +10740,9 @@ } }, "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, "funding": [ { @@ -11419,28 +10756,21 @@ ], "license": "MIT", "dependencies": { - "lilconfig": "^3.1.1" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { - "node": ">= 18" + "node": ">= 14" }, "peerDependencies": { - "jiti": ">=1.21.0", "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { - "jiti": { - "optional": true - }, "postcss": { "optional": true }, - "tsx": { - "optional": true - }, - "yaml": { + "ts-node": { "optional": true } } @@ -11605,6 +10935,30 @@ "node": ">= 14" } }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/proxy-agent/node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -13259,6 +12613,16 @@ "node": ">= 14" } }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/source-map": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", @@ -13507,18 +12871,18 @@ } }, "node_modules/sucrase": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", - "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", + "glob": "7.1.6", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", - "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { @@ -13526,7 +12890,7 @@ "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, "node_modules/sucrase/node_modules/commander": { @@ -13566,9 +12930,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.19", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", - "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, "license": "MIT", "dependencies": { @@ -13580,7 +12944,7 @@ "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.7", + "jiti": "^1.21.6", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", @@ -13589,7 +12953,7 @@ "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-load-config": "^4.0.2", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", @@ -13641,6 +13005,16 @@ "node": ">= 6" } }, + "node_modules/tailwindcss/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/tailwindcss/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -13654,23 +13028,44 @@ "node": ">=10.13.0" } }, + "node_modules/tailwindcss/node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "version": "7.5.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz", + "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/tar-fs": { @@ -14081,9 +13476,9 @@ } }, "node_modules/undici-types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.21.0.tgz", - "integrity": "sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "dev": true, "license": "MIT" }, @@ -14422,9 +13817,9 @@ } }, "node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", + "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -14749,9 +14144,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", - "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", "dev": true, "license": "MIT", "engines": { @@ -14829,11 +14224,14 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } }, "node_modules/yaml": { "version": "2.9.0", @@ -14967,9 +14365,9 @@ "license": "MIT" }, "node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", "funding": { From eb0dd9f68da670d4e0c29566d30d90846ba2d08d Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Mon, 18 May 2026 00:28:15 +0200 Subject: [PATCH 114/152] chore: Set minimum supported Rust version (#1232) Also check feature compatibility --- .github/workflows/ci.yml | 54 ++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + 2 files changed, 55 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d82a39e4..7a0664885 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,29 @@ concurrency: cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: + msrv: + name: Minimum supported Rust version + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + + - name: Read MSRV from Cargo.toml + id: msrv + run: | + msrv="$(sed -n 's/^rust-version[[:space:]]*=[[:space:]]*"\([^"]*\)".*/\1/p' Cargo.toml)" + test -n "$msrv" + echo "version=$msrv" >> "$GITHUB_OUTPUT" + + - name: Setup Rust + uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 + with: + toolchain: ${{ steps.msrv.outputs.version }} + + - name: Check with MSRV + run: cargo check --all-targets --all-features --locked + build: name: Build runs-on: ubuntu-latest @@ -61,3 +84,34 @@ jobs: run: | npm run generate git diff --exit-code || (echo "Generated files are out of date. Run 'npm run generate' and commit the changes." && exit 1) + + feature-powerset: + name: Feature powerset (${{ matrix.partition }}) + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + partition: ["1/4", "2/4", "3/4", "4/4"] + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + with: + persist-credentials: false + + - name: Setup Rust + uses: actions-rust-lang/setup-rust-toolchain@46268bd060767258de96ed93c1251119784f2ab6 + with: + toolchain: stable + + - name: Install cargo-hack + uses: taiki-e/install-action@c070f87102a1c75b3183910f391c1cb887fe13c8 + with: + tool: cargo-hack + + - name: Check feature powerset + # `unstable` is an aggregate alias for the individual unstable_* features, + # so excluding it avoids duplicate combinations. Limit the powerset to + # feature pairs to keep CI practical; the regular CI all-features build + # still covers the all-on case. + run: cargo hack --locked check --feature-powerset --exclude-features unstable --no-dev-deps --depth 2 --partition ${{ matrix.partition }} diff --git a/Cargo.toml b/Cargo.toml index ccd3856f1..9098f0276 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ readme = "README.md" keywords = ["agent", "client", "protocol", "ai", "editor"] categories = ["development-tools", "api-bindings"] include = ["/src/**/*.rs", "/README.md", "/LICENSE", "/Cargo.toml"] +rust-version = "1.88.0" [features] unstable = [ From 762032d8038c247cf2bd41ed891b79b0365b275b Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Mon, 18 May 2026 00:12:28 +0000 Subject: [PATCH 115/152] docs: update registry agents (#1234) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index f839b6e21..c22ec570f 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -135,7 +135,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.5**, + **3.0.6**, Date: Mon, 18 May 2026 04:43:50 +0000 Subject: [PATCH 116/152] docs: update registry agents (#1235) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index c22ec570f..820f23741 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -135,7 +135,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.6**, + **3.0.7**, Date: Mon, 18 May 2026 16:35:29 +0000 Subject: [PATCH 117/152] docs: update registry agents (#1236) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 820f23741..893dadd0e 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -118,7 +118,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP wrapper for Anthropic's Claude - **0.35.0**, + **0.36.1**, Date: Mon, 18 May 2026 20:46:36 +0000 Subject: [PATCH 118/152] docs: update registry agents (#1238) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 893dadd0e..daf6196df 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -151,7 +151,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Tencent Cloud's official intelligent coding tool - **2.97.2** + **2.97.3** Date: Mon, 18 May 2026 22:16:47 +0000 Subject: [PATCH 119/152] docs: update registry agents (#1239) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index daf6196df..acacd108a 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.15.4**, + **1.15.5**, Date: Mon, 18 May 2026 23:21:55 +0000 Subject: [PATCH 120/152] docs: update registry agents (#1240) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index acacd108a..7529439e4 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -598,7 +598,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Code and build agents with comprehensive multi-provider support - **0.7.5**, + **0.7.6**, Date: Tue, 19 May 2026 04:35:35 +0000 Subject: [PATCH 121/152] docs: update registry agents (#1254) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 7529439e4..b4c07ebde 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.128.0** + **0.129.0** GitHub's AI pair programmer - **1.0.48**, + **1.0.49**, Date: Tue, 19 May 2026 09:20:49 +0200 Subject: [PATCH 122/152] chore(deps): bump the minor group with 13 updates (#1245) Bumps the minor group with 13 updates: | Package | From | To | | --- | --- | --- | | [mint](https://github.com/mintlify/mint/tree/HEAD/packages/mint) | `4.2.566` | `4.2.568` | | [@mintlify/cli](https://github.com/mintlify/mint/tree/HEAD/packages/cli) | `4.0.1169` | `4.0.1171` | | [@mintlify/common](https://github.com/mintlify/mint/tree/HEAD/packages/common) | `1.0.898` | `1.0.900` | | [@mintlify/link-rot](https://github.com/mintlify/mint/tree/HEAD/packages/link-rot) | `3.0.1077` | `3.0.1079` | | [@mintlify/models](https://github.com/mintlify/mint/tree/HEAD/packages/models) | `0.0.309` | `0.0.310` | | [@mintlify/prebuild](https://github.com/mintlify/mint/tree/HEAD/packages/prebuild) | `1.0.1042` | `1.0.1044` | | [@mintlify/previewing](https://github.com/mintlify/mint/tree/HEAD/packages/previewing) | `4.0.1103` | `4.0.1105` | | [@mintlify/scraping](https://github.com/mintlify/mint/tree/HEAD/packages/scraping) | `4.0.762` | `4.0.764` | | [@mintlify/validation](https://github.com/mintlify/mint/tree/HEAD/packages/validation) | `0.1.704` | `0.1.706` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `25.8.0` | `25.9.0` | | [arktype](https://github.com/arktypeio/arktype/tree/HEAD/ark/type) | `2.1.27` | `2.2.0` | | [mdast-util-from-markdown](https://github.com/syntax-tree/mdast-util-from-markdown) | `2.0.2` | `2.0.3` | | [remark-gfm](https://github.com/remarkjs/remark-gfm) | `4.0.0` | `4.0.1` | Updates `mint` from 4.2.566 to 4.2.568 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/mint) Updates `@mintlify/cli` from 4.0.1169 to 4.0.1171 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/cli) Updates `@mintlify/common` from 1.0.898 to 1.0.900 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/common) Updates `@mintlify/link-rot` from 3.0.1077 to 3.0.1079 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/link-rot) Updates `@mintlify/models` from 0.0.309 to 0.0.310 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/models) Updates `@mintlify/prebuild` from 1.0.1042 to 1.0.1044 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/prebuild) Updates `@mintlify/previewing` from 4.0.1103 to 4.0.1105 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/previewing) Updates `@mintlify/scraping` from 4.0.762 to 4.0.764 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/scraping) Updates `@mintlify/validation` from 0.1.704 to 0.1.706 - [Commits](https://github.com/mintlify/mint/commits/HEAD/packages/validation) Updates `@types/node` from 25.8.0 to 25.9.0 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `arktype` from 2.1.27 to 2.2.0 - [Release notes](https://github.com/arktypeio/arktype/releases) - [Changelog](https://github.com/arktypeio/arktype/blob/main/ark/type/CHANGELOG.md) - [Commits](https://github.com/arktypeio/arktype/commits/arktype@2.2.0/ark/type) Updates `mdast-util-from-markdown` from 2.0.2 to 2.0.3 - [Release notes](https://github.com/syntax-tree/mdast-util-from-markdown/releases) - [Commits](https://github.com/syntax-tree/mdast-util-from-markdown/compare/2.0.2...2.0.3) Updates `remark-gfm` from 4.0.0 to 4.0.1 - [Release notes](https://github.com/remarkjs/remark-gfm/releases) - [Commits](https://github.com/remarkjs/remark-gfm/compare/4.0.0...4.0.1) --- updated-dependencies: - dependency-name: mint dependency-version: 4.2.568 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/cli" dependency-version: 4.0.1171 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/common" dependency-version: 1.0.900 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/link-rot" dependency-version: 3.0.1079 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/models" dependency-version: 0.0.310 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/prebuild" dependency-version: 1.0.1044 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/previewing" dependency-version: 4.0.1105 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/scraping" dependency-version: 4.0.764 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@mintlify/validation" dependency-version: 0.1.706 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: "@types/node" dependency-version: 25.9.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor - dependency-name: arktype dependency-version: 2.2.0 dependency-type: indirect update-type: version-update:semver-minor dependency-group: minor - dependency-name: mdast-util-from-markdown dependency-version: 2.0.3 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor - dependency-name: remark-gfm dependency-version: 4.0.1 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 258 +++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 166 insertions(+), 94 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a1d75f29..cfe50bb62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "license": "Apache-2.0", "devDependencies": { - "mint": "^4.2.558", + "mint": "^4.2.568", "prettier": "^3.8.3" } }, @@ -265,9 +265,6 @@ "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -285,9 +282,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -305,9 +299,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -325,9 +316,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -345,9 +333,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -365,9 +350,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -385,9 +367,6 @@ "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -411,9 +390,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -437,9 +413,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -463,9 +436,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -489,9 +459,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -515,9 +482,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1098,19 +1062,19 @@ } }, "node_modules/@mintlify/cli": { - "version": "4.0.1169", - "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.1169.tgz", - "integrity": "sha512-rVWE8j3r7ONL7Mo/dqfsMWB/iIBF0XOC39SzbCgZlo/4HT+cqDKAAC5xBj5NCHcLmi9/EyXtkTDmCNR3rHCdiA==", + "version": "4.0.1171", + "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.1171.tgz", + "integrity": "sha512-MblZzFDmHXU8wYy1ejA/FdZXCwcuHGLtAPoi6QnF84fps7HYZEzk2Kjsoepg4rNPIoxOgcj6dPG4bP35O0hPsA==", "dev": true, "license": "Elastic-2.0", "dependencies": { "@inquirer/prompts": "7.9.0", - "@mintlify/common": "1.0.898", - "@mintlify/link-rot": "3.0.1077", - "@mintlify/models": "0.0.309", - "@mintlify/prebuild": "1.0.1042", - "@mintlify/previewing": "4.0.1103", - "@mintlify/validation": "0.1.704", + "@mintlify/common": "1.0.900", + "@mintlify/link-rot": "3.0.1079", + "@mintlify/models": "0.0.310", + "@mintlify/prebuild": "1.0.1044", + "@mintlify/previewing": "4.0.1105", + "@mintlify/validation": "0.1.706", "adm-zip": "0.5.16", "chalk": "5.2.0", "color": "4.2.3", @@ -1142,18 +1106,18 @@ } }, "node_modules/@mintlify/common": { - "version": "1.0.898", - "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.898.tgz", - "integrity": "sha512-42EeHfjkIr8rTNaC2fNSQ7mcPQPmEbSFuMyOPnCxONEhkO+KilwF9TqyeYT3FkV7pQM3RhcwvhhEd8QIfEC8rg==", + "version": "1.0.900", + "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.900.tgz", + "integrity": "sha512-1Jf6ThyciGksJMv+WNY6Re1GjNkngCw+A0qptybov1112KJwJmIHzaEFNh4HIugZn7hefhbiXRJLtnbCGFCRhA==", "dev": true, "license": "ISC", "dependencies": { "@asyncapi/parser": "3.4.0", "@asyncapi/specs": "6.8.1", "@mintlify/mdx": "3.0.4", - "@mintlify/models": "0.0.309", + "@mintlify/models": "0.0.310", "@mintlify/openapi-parser": "0.0.8", - "@mintlify/validation": "0.1.704", + "@mintlify/validation": "0.1.706", "@sindresorhus/slugify": "2.2.0", "@types/mdast": "4.0.4", "acorn": "8.11.2", @@ -1245,6 +1209,31 @@ "react-dom": "^18.3.1" } }, + "node_modules/@mintlify/common/node_modules/@mintlify/mdx/node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mintlify/common/node_modules/@mintlify/mdx/node_modules/mdast-util-gfm": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", @@ -1290,6 +1279,25 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mintlify/common/node_modules/@mintlify/mdx/node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mintlify/common/node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", @@ -1546,6 +1554,31 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mintlify/common/node_modules/mdast-util-mdx-jsx/node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mintlify/common/node_modules/next-mdx-remote-client": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/next-mdx-remote-client/-/next-mdx-remote-client-1.1.7.tgz", @@ -1610,18 +1643,18 @@ } }, "node_modules/@mintlify/link-rot": { - "version": "3.0.1077", - "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.1077.tgz", - "integrity": "sha512-AueSCgWeWAC8XS16eaKTcleAV5CJ3PHfrkTtvyZRSE87AwlEATj9RH26MaHfKSoVSOPl64KIwdd1OPNEfujppA==", + "version": "3.0.1079", + "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.1079.tgz", + "integrity": "sha512-iJZbw+E6vb8WQ81/gCeQ4fcndV8S6h82I7FIQ0q7CevAl1o+WhDMNdf3zNM+nlsjyPO99UZJY9KuJO2ayETyTA==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.898", - "@mintlify/models": "0.0.309", - "@mintlify/prebuild": "1.0.1042", - "@mintlify/previewing": "4.0.1103", - "@mintlify/scraping": "4.0.762", - "@mintlify/validation": "0.1.704", + "@mintlify/common": "1.0.900", + "@mintlify/models": "0.0.310", + "@mintlify/prebuild": "1.0.1044", + "@mintlify/previewing": "4.0.1105", + "@mintlify/scraping": "4.0.764", + "@mintlify/validation": "0.1.706", "fs-extra": "11.1.0", "unist-util-visit": "4.1.2" }, @@ -1697,9 +1730,9 @@ } }, "node_modules/@mintlify/models": { - "version": "0.0.309", - "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.309.tgz", - "integrity": "sha512-LmFZA8cn+pXqDOhwI+4sMDdwQLXcXuZMDU9DkTV8bLN/z543V2BtUkcwUytFf7lzKvyOvqDHyVZCjCdFCQmO7A==", + "version": "0.0.310", + "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.310.tgz", + "integrity": "sha512-v0TXVc2jmFxjkYYQZiZbFkFxgMaQD7En3UjyxRW9kssP4xMOl7yaaxIm9+vVS8/TUTcvMv6EXD6Uhis7LXk7UQ==", "dev": true, "license": "Elastic-2.0", "dependencies": { @@ -1747,16 +1780,16 @@ } }, "node_modules/@mintlify/prebuild": { - "version": "1.0.1042", - "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.1042.tgz", - "integrity": "sha512-4dGquPP4C+xXbTN5vdR67b80Pm1kSJqGzIcLms2qJBJzM/FQEPkUNIZgovFKaHtiaq04pSUQYxebc1uflrZvRg==", + "version": "1.0.1044", + "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.1044.tgz", + "integrity": "sha512-oqXM7fkfTdDdTT27ACxbf3jRi/xoj7YwV91ZQFgh3rS3NQ4fIiqKRQQgPAqkxL00fIEYYe6/74fpNAUuPvmc0g==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.898", + "@mintlify/common": "1.0.900", "@mintlify/openapi-parser": "0.0.8", - "@mintlify/scraping": "4.0.762", - "@mintlify/validation": "0.1.704", + "@mintlify/scraping": "4.0.764", + "@mintlify/validation": "0.1.706", "chalk": "5.3.0", "favicons": "7.2.0", "front-matter": "4.0.2", @@ -1850,15 +1883,15 @@ } }, "node_modules/@mintlify/previewing": { - "version": "4.0.1103", - "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.1103.tgz", - "integrity": "sha512-6QPqc54fbqcNj3Lxa1WjzF9iJHGTkOy6tRIwijOfSdd1oN7XT6/xWzG4K/+kFZ8rLTPTV0adRrLgKxN9jRrSig==", + "version": "4.0.1105", + "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.1105.tgz", + "integrity": "sha512-/wcdC0QlEviyTHY5yIOJBSrRGyhc8+1qPkeMOlbkL1wt9OZUK9Cs5S8HrDFvUFLgirV78i3OwU3ISXuXoywiPw==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.898", - "@mintlify/prebuild": "1.0.1042", - "@mintlify/validation": "0.1.704", + "@mintlify/common": "1.0.900", + "@mintlify/prebuild": "1.0.1044", + "@mintlify/validation": "0.1.706", "adm-zip": "0.5.16", "better-opn": "3.0.2", "chalk": "5.2.0", @@ -1950,13 +1983,13 @@ } }, "node_modules/@mintlify/scraping": { - "version": "4.0.762", - "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.762.tgz", - "integrity": "sha512-LHdkom5DlSi0a8Wv71/lY949QYHfNs2XIlO5sPm5BJSO8ClBwSm10zZturmeuVvUezWtxwTOvcYXBDBgrmgTSw==", + "version": "4.0.764", + "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.764.tgz", + "integrity": "sha512-bnNCj+lb9sPuZ/WaUsNHPxhfSOzBywi9dM9430vP2cg8FfqHsasjJuxdzk9NBhYcaI3R7rGFu2DMetZGV7k/jw==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.898", + "@mintlify/common": "1.0.900", "@mintlify/openapi-parser": "0.0.8", "fs-extra": "11.1.1", "hast-util-to-mdast": "10.1.0", @@ -2047,14 +2080,14 @@ } }, "node_modules/@mintlify/validation": { - "version": "0.1.704", - "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.704.tgz", - "integrity": "sha512-epUweK7gRjpYWS/0lK6hRzUHSYJKcBrBXYAWt3+loiUAIYypmtWDuZJ0ZM/hreXggmyQndJ6WrS+lToD3PTbMQ==", + "version": "0.1.706", + "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.706.tgz", + "integrity": "sha512-eAij8SDzz9r8wFsrQmaYSR1cixhUgMq4Sh0LdzqTAL+O4v7u7sPgPgq07lpIxHtwHEiBk8JI3mfHjafQLn4leg==", "dev": true, "license": "Elastic-2.0", "dependencies": { "@mintlify/mdx": "3.0.4", - "@mintlify/models": "0.0.309", + "@mintlify/models": "0.0.310", "arktype": "2.1.27", "js-yaml": "4.1.1", "lcm": "0.0.3", @@ -2067,6 +2100,23 @@ "zod-to-json-schema": "3.20.4" } }, + "node_modules/@mintlify/validation/node_modules/@ark/schema": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.0.tgz", + "integrity": "sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ark/util": "0.56.0" + } + }, + "node_modules/@mintlify/validation/node_modules/@ark/util": { + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.0.tgz", + "integrity": "sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==", + "dev": true, + "license": "MIT" + }, "node_modules/@mintlify/validation/node_modules/@floating-ui/react-dom": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", @@ -2112,6 +2162,18 @@ "react-dom": "^18.3.1" } }, + "node_modules/@mintlify/validation/node_modules/@mintlify/mdx/node_modules/arktype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.2.0.tgz", + "integrity": "sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ark/schema": "0.56.0", + "@ark/util": "0.56.0", + "arkregex": "0.0.5" + } + }, "node_modules/@mintlify/validation/node_modules/@radix-ui/react-arrow": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", @@ -2343,6 +2405,16 @@ } } }, + "node_modules/@mintlify/validation/node_modules/arkregex": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.5.tgz", + "integrity": "sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ark/util": "0.56.0" + } + }, "node_modules/@mintlify/validation/node_modules/mdast-util-gfm": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", @@ -3572,9 +3644,9 @@ } }, "node_modules/@types/node": { - "version": "25.8.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz", - "integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==", + "version": "25.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.0.tgz", + "integrity": "sha512-AOQwYUNolgy3VosiRqXrACUXTN8nJUtPl7FJXMqZVyxiiCLhQuG3jXKvCS1ALr+Y2OmZhzzLVlYPEqJaiqkaJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4350,9 +4422,9 @@ "license": "MIT" }, "node_modules/body-parser/node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -9921,13 +9993,13 @@ } }, "node_modules/mint": { - "version": "4.2.566", - "resolved": "https://registry.npmjs.org/mint/-/mint-4.2.566.tgz", - "integrity": "sha512-TXjRI8qmUipdNu6/eew8VbVGIg8z1EaD+nKLMeXN8JmuNP+jmyfG3r5Gd7WYoQy2gp+QqM0crRNrStCjXUUyIw==", + "version": "4.2.568", + "resolved": "https://registry.npmjs.org/mint/-/mint-4.2.568.tgz", + "integrity": "sha512-kVDNpvLgJZ1AVIuVZGohc25OhtrBaikyKAd27BjH6KTzg3IU8URYYHiMSqa7zWGg0EH4OYPwPRgq3X78XkAjZA==", "dev": true, "license": "Elastic-2.0", "dependencies": { - "@mintlify/cli": "4.0.1169" + "@mintlify/cli": "4.0.1171" }, "bin": { "mint": "index.js" diff --git a/package.json b/package.json index 6bf601c8b..95be49165 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "docs": "cd docs && npx mint dev" }, "devDependencies": { - "mint": "^4.2.558", + "mint": "^4.2.568", "prettier": "^3.8.3" } } From cdc5b371622df0fe310a5b5975342fe773eee4aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 09:35:48 +0200 Subject: [PATCH 123/152] chore(deps): bump num-conv from 0.2.1 to 0.2.2 in the minor group (#1244) Bumps the minor group with 1 update: [num-conv](https://github.com/jhpratt/num-conv). Updates `num-conv` from 0.2.1 to 0.2.2 - [Commits](https://github.com/jhpratt/num-conv/compare/v0.2.1...v0.2.2) --- updated-dependencies: - dependency-name: num-conv dependency-version: 0.2.2 dependency-type: indirect update-type: version-update:semver-patch dependency-group: minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a9849cf2e..7624a7466 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -299,9 +299,9 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "num-conv" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" [[package]] name = "num-traits" From b4b0457b3198c47a704b9481591821914283f0ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 09:36:20 +0200 Subject: [PATCH 124/152] chore(deps): bump taiki-e/install-action from 2.77.6 to 2.79.1 (#1243) Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.77.6 to 2.79.1. - [Release notes](https://github.com/taiki-e/install-action/releases) - [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/taiki-e/install-action/compare/c070f87102a1c75b3183910f391c1cb887fe13c8...b550161ef8a7bc4f2a671c0b03a18ac9ccedea1e) --- updated-dependencies: - dependency-name: taiki-e/install-action dependency-version: 2.79.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a0664885..f3d6e4503 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -105,7 +105,7 @@ jobs: toolchain: stable - name: Install cargo-hack - uses: taiki-e/install-action@c070f87102a1c75b3183910f391c1cb887fe13c8 + uses: taiki-e/install-action@b550161ef8a7bc4f2a671c0b03a18ac9ccedea1e with: tool: cargo-hack From 185212b1a94c75aa094f1f0ff287c058a8d7b525 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 09:36:34 +0200 Subject: [PATCH 125/152] chore(deps): bump actions/create-github-app-token from 3.1.1 to 3.2.0 (#1242) Bumps [actions/create-github-app-token](https://github.com/actions/create-github-app-token) from 3.1.1 to 3.2.0. - [Release notes](https://github.com/actions/create-github-app-token/releases) - [Changelog](https://github.com/actions/create-github-app-token/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/create-github-app-token/compare/1b10c78c7865c340bc4f6099eb2f838309f1e8c3...bcd2ba49218906704ab6c1aa796996da409d3eb1) --- updated-dependencies: - dependency-name: actions/create-github-app-token dependency-version: 3.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release-plz.yml | 2 +- .github/workflows/sync-registry.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-plz.yml b/.github/workflows/release-plz.yml index 7e0ac0348..0542cf2cb 100644 --- a/.github/workflows/release-plz.yml +++ b/.github/workflows/release-plz.yml @@ -30,7 +30,7 @@ jobs: # Generating a GitHub token, so that PRs and tags created by # the release-plz-action can trigger actions workflows. name: Generate GitHub token - uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 id: generate-token with: # GitHub App ID secret name diff --git a/.github/workflows/sync-registry.yml b/.github/workflows/sync-registry.yml index d9e0f44ee..c83c22f47 100644 --- a/.github/workflows/sync-registry.yml +++ b/.github/workflows/sync-registry.yml @@ -56,7 +56,7 @@ jobs: # Generating a GitHub token, so that PRs and tags created by # the action can trigger actions workflows. - name: Generate GitHub token - uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 id: generate-token with: # GitHub App ID secret name From 819e8f475b0f8e44691d7b8b7536bb60bb75e2c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 09:36:50 +0200 Subject: [PATCH 126/152] chore(deps): bump crate-ci/typos from 1.46.1 to 1.46.2 (#1241) Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.46.1 to 1.46.2. - [Release notes](https://github.com/crate-ci/typos/releases) - [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md) - [Commits](https://github.com/crate-ci/typos/compare/5374cbf686e897b15713110e233094e2874de7ef...aca895bf05aec0cb7dffa6f94495e923224d9f17) --- updated-dependencies: - dependency-name: crate-ci/typos dependency-version: 1.46.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3d6e4503..6019f5e9e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,7 +67,7 @@ jobs: run: npm run format:check - name: Check for typos - uses: crate-ci/typos@5374cbf686e897b15713110e233094e2874de7ef + uses: crate-ci/typos@aca895bf05aec0cb7dffa6f94495e923224d9f17 with: config: ./typos.toml From 9b1c342d39c067f743576bb1bb1112623ca7f6b3 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 08:40:36 +0000 Subject: [PATCH 127/152] docs: update registry agents (#1256) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index b4c07ebde..80fc16edc 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -628,7 +628,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > GitHub's AI pair programmer - **1.0.49**, + **1.0.50**, Date: Tue, 19 May 2026 12:25:55 +0200 Subject: [PATCH 128/152] docs: Document protocol naming conventions (#1257) Closes #1249 --- docs/protocol/overview.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/protocol/overview.mdx b/docs/protocol/overview.mdx index a8dbf1dd5..1f2b2fdb8 100644 --- a/docs/protocol/overview.mdx +++ b/docs/protocol/overview.mdx @@ -196,6 +196,10 @@ All methods follow standard JSON-RPC 2.0 [error handling](https://www.jsonrpc.or - Errors include an `error` object with `code` and `message` - Notifications never receive responses (success or error) +## Conventions + +Unless explicitly defined otherwise in the schema, ACP-defined JSON object property keys use `camelCase`. String values carried by discriminator fields use `snake_case`. The JSON-RPC envelope fields (`jsonrpc`, `id`, `method`, `params`, `result`, and `error`) follow the JSON-RPC 2.0 specification. + ## Extensibility The protocol provides built-in mechanisms for adding custom functionality while maintaining compatibility: From d03f4716c5b353015f9d21a1a7e5409c82741fb0 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 16:33:36 +0000 Subject: [PATCH 129/152] docs: update registry agents (#1258) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 80fc16edc..9a86697bc 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -670,7 +670,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > AI Coding Agent by JetBrains - **1588.20.0**, + **1668.43.0**, The open source coding agent - **7.3.0**, + **7.3.1**, Mistral's open-source coding assistant - **2.9.3**, + **2.10.0**, Open-source DevOps agent in Rust with enterprise-grade security - **0.3.81**, + **0.3.82**, Date: Tue, 19 May 2026 19:18:52 +0000 Subject: [PATCH 130/152] docs: update registry agents (#1259) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 9a86697bc..4c7d0981a 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -135,7 +135,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.7**, + **3.0.8**, Date: Tue, 19 May 2026 22:26:23 +0200 Subject: [PATCH 131/152] docs: Fill out draft protocol documentation (#1260) Makes it easier to see diffs as we iterate on these for new RFDs --- docs/docs.json | 12 + docs/protocol/draft/agent-plan.mdx | 83 +++++ docs/protocol/draft/content.mdx | 204 +++++++++++ docs/protocol/draft/error.mdx | 6 + docs/protocol/draft/extensibility.mdx | 134 ++++++++ docs/protocol/draft/initialization.mdx | 225 ++++++++++++ docs/protocol/draft/overview.mdx | 214 ++++++++++++ docs/protocol/draft/prompt-turn.mdx | 319 ++++++++++++++++++ .../protocol/draft/session-config-options.mdx | 282 ++++++++++++++++ docs/protocol/draft/session-modes.mdx | 173 ++++++++++ docs/protocol/draft/slash-commands.mdx | 96 ++++++ docs/protocol/draft/terminals.mdx | 281 +++++++++++++++ docs/protocol/draft/tool-calls.mdx | 310 +++++++++++++++++ docs/protocol/draft/transports.mdx | 52 +++ 14 files changed, 2391 insertions(+) create mode 100644 docs/protocol/draft/agent-plan.mdx create mode 100644 docs/protocol/draft/content.mdx create mode 100644 docs/protocol/draft/error.mdx create mode 100644 docs/protocol/draft/extensibility.mdx create mode 100644 docs/protocol/draft/initialization.mdx create mode 100644 docs/protocol/draft/overview.mdx create mode 100644 docs/protocol/draft/prompt-turn.mdx create mode 100644 docs/protocol/draft/session-config-options.mdx create mode 100644 docs/protocol/draft/session-modes.mdx create mode 100644 docs/protocol/draft/slash-commands.mdx create mode 100644 docs/protocol/draft/terminals.mdx create mode 100644 docs/protocol/draft/tool-calls.mdx create mode 100644 docs/protocol/draft/transports.mdx diff --git a/docs/docs.json b/docs/docs.json index 727443ac2..dc0fc8d27 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -82,12 +82,24 @@ "group": "Draft: In Progress and May Change", "hidden": true, "pages": [ + "protocol/draft/overview", "protocol/draft/authentication", + "protocol/draft/initialization", "protocol/draft/session-setup", "protocol/draft/session-list", "protocol/draft/session-delete", + "protocol/draft/prompt-turn", + "protocol/draft/content", + "protocol/draft/tool-calls", "protocol/draft/file-system", "protocol/draft/cancellation", + "protocol/draft/terminals", + "protocol/draft/agent-plan", + "protocol/draft/session-modes", + "protocol/draft/session-config-options", + "protocol/draft/slash-commands", + "protocol/draft/extensibility", + "protocol/draft/transports", "protocol/draft/schema" ] } diff --git a/docs/protocol/draft/agent-plan.mdx b/docs/protocol/draft/agent-plan.mdx new file mode 100644 index 000000000..874572a72 --- /dev/null +++ b/docs/protocol/draft/agent-plan.mdx @@ -0,0 +1,83 @@ +--- +title: "Agent Plan" +description: "How Agents communicate their execution plans" +--- + +Plans are execution strategies for complex tasks that require multiple steps. + +Agents may share plans with Clients through [`session/update`](./prompt-turn#3-agent-reports-output) notifications, providing real-time visibility into their thinking and progress. + +## Creating Plans + +When the language model creates an execution plan, the Agent **SHOULD** report it to the Client: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "plan", + "entries": [ + { + "content": "Analyze the existing codebase structure", + "priority": "high", + "status": "pending" + }, + { + "content": "Identify components that need refactoring", + "priority": "high", + "status": "pending" + }, + { + "content": "Create unit tests for critical functions", + "priority": "medium", + "status": "pending" + } + ] + } + } +} +``` + + + An array of [plan entries](#plan-entries) representing the tasks to be + accomplished + + +## Plan Entries + +Each plan entry represents a specific task or goal within the overall execution strategy: + + + A human-readable description of what this task aims to accomplish + + + + The relative importance of this task. + +- `high` +- `medium` +- `low` + + + + + The current [execution status](#status) of this task + +- `pending` +- `in_progress` +- `completed` + + + +## Updating Plans + +As the Agent progresses through the plan, it **SHOULD** report updates by sending more `session/update` notifications with the same structure. + +The Agent **MUST** send a complete list of all plan entries in each update and their current status. The Client **MUST** replace the current plan completely. + +### Dynamic Planning + +Plans can evolve during execution. The Agent **MAY** add, remove, or modify plan entries as it discovers new requirements or completes tasks, allowing it to adapt based on what it learns. diff --git a/docs/protocol/draft/content.mdx b/docs/protocol/draft/content.mdx new file mode 100644 index 000000000..931f451eb --- /dev/null +++ b/docs/protocol/draft/content.mdx @@ -0,0 +1,204 @@ +--- +title: "Content" +description: "Understanding content blocks in the Agent Client Protocol" +--- + +Content blocks represent displayable information that flows through the Agent Client Protocol. They provide a structured way to handle various types of user-facing content—whether it's text from language models, images for analysis, or embedded resources for context. + +Content blocks appear in: + +- User prompts sent via [`session/prompt`](./prompt-turn#1-user-message) +- Language model output streamed through [`session/update`](./prompt-turn#3-agent-reports-output) notifications +- Progress updates and results from [tool calls](./tool-calls) + +## Content Types + +The Agent Client Protocol uses the same `ContentBlock` structure as the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/specification/2025-06-18/schema#contentblock). + +This design choice enables Agents to seamlessly forward content from MCP tool outputs without transformation. + +### Text Content + +Plain text messages form the foundation of most interactions. + +```json +{ + "type": "text", + "text": "What's the weather like today?" +} +``` + +All Agents **MUST** support text content blocks when included in prompts. + + + The text content to display + + + + Optional metadata about how the content should be used or displayed. [Learn + more](https://modelcontextprotocol.io/specification/2025-06-18/server/resources#annotations). + + +### Image Content + +Images can be included for visual context or analysis. + +```json +{ + "type": "image", + "mimeType": "image/png", + "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB..." +} +``` + + Requires the `image` [prompt +capability](./initialization#prompt-capabilities) when included in prompts. + + + Base64-encoded image data + + + + The MIME type of the image (e.g., "image/png", "image/jpeg") + + + + Optional URI reference for the image source + + + + Optional metadata about how the content should be used or displayed. [Learn + more](https://modelcontextprotocol.io/specification/2025-06-18/server/resources#annotations). + + +### Audio Content + +Audio data for transcription or analysis. + +```json +{ + "type": "audio", + "mimeType": "audio/wav", + "data": "UklGRiQAAABXQVZFZm10IBAAAAABAAEAQB8AAAB..." +} +``` + + Requires the `audio` [prompt +capability](./initialization#prompt-capabilities) when included in prompts. + + + Base64-encoded audio data + + + + The MIME type of the audio (e.g., "audio/wav", "audio/mp3") + + + + Optional metadata about how the content should be used or displayed. [Learn + more](https://modelcontextprotocol.io/specification/2025-06-18/server/resources#annotations). + + +### Embedded Resource + +Complete resource contents embedded directly in the message. + +```json +{ + "type": "resource", + "resource": { + "uri": "file:///home/user/script.py", + "mimeType": "text/x-python", + "text": "def hello():\n print('Hello, world!')" + } +} +``` + +This is the preferred way to include context in prompts, such as when using @-mentions to reference files or other resources. + +By embedding the content directly in the request, Clients can include context from sources that the Agent may not have direct access to. + + Requires the `embeddedContext` [prompt +capability](./initialization#prompt-capabilities) when included in prompts. + + + The embedded resource contents, which can be either: + + + + The URI identifying the resource + + + + The text content of the resource + + + + Optional MIME type of the text content + + + + + + + The URI identifying the resource + + + + Base64-encoded binary data + + + + Optional MIME type of the blob + + + + + + + Optional metadata about how the content should be used or displayed. [Learn + more](https://modelcontextprotocol.io/specification/2025-06-18/server/resources#annotations). + + +### Resource Link + +References to resources that the Agent can access. + +```json +{ + "type": "resource_link", + "uri": "file:///home/user/document.pdf", + "name": "document.pdf", + "mimeType": "application/pdf", + "size": 1024000 +} +``` + + + The URI of the resource + + + + A human-readable name for the resource + + + + The MIME type of the resource + + + + Optional display title for the resource + + + + Optional description of the resource contents + + + + Optional size of the resource in bytes + + + + Optional metadata about how the content should be used or displayed. [Learn + more](https://modelcontextprotocol.io/specification/2025-06-18/server/resources#annotations). + diff --git a/docs/protocol/draft/error.mdx b/docs/protocol/draft/error.mdx new file mode 100644 index 000000000..01d1aba38 --- /dev/null +++ b/docs/protocol/draft/error.mdx @@ -0,0 +1,6 @@ +--- +title: "Error" +description: "Error handling in the Agent Client Protocol" +--- + +_Documentation coming soon_ diff --git a/docs/protocol/draft/extensibility.mdx b/docs/protocol/draft/extensibility.mdx new file mode 100644 index 000000000..314410132 --- /dev/null +++ b/docs/protocol/draft/extensibility.mdx @@ -0,0 +1,134 @@ +--- +title: "Extensibility" +description: "Adding custom data and capabilities" +--- + +The Agent Client Protocol provides built-in extension mechanisms that allow implementations to add custom functionality while maintaining compatibility with the core protocol. These mechanisms ensure that Agents and Clients can innovate without breaking interoperability. + +## The `_meta` Field + +All types in the protocol include a `_meta` field with type `{ [key: string]: unknown }` that implementations can use to attach custom information. This includes requests, responses, notifications, and even nested types like content blocks, tool calls, plan entries, and capability objects. + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "session/prompt", + "params": { + "sessionId": "sess_abc123def456", + "prompt": [ + { + "type": "text", + "text": "Hello, world!" + } + ], + "_meta": { + "traceparent": "00-80e1afed08e019fc1110464cfa66635c-7a085853722dc6d2-01", + "zed.dev/debugMode": true + } + } +} +``` + +Clients may propagate fields to the agent for correlation purposes, such as `requestId`. The following root-level keys in `_meta` **SHOULD** be reserved for [W3C trace context](https://www.w3.org/TR/trace-context/) to guarantee interop with existing MCP implementations and OpenTelemetry tooling: + +- `traceparent` +- `tracestate` +- `baggage` + +Implementations **MUST NOT** add any custom fields at the root of a type that's part of the specification. All possible names are reserved for future protocol versions. + +## Extension Methods + +The protocol reserves any method name starting with an underscore (`_`) for custom extensions. This allows implementations to add new functionality without the risk of conflicting with future protocol versions. + +Extension methods follow standard [JSON-RPC 2.0](https://www.jsonrpc.org/specification) semantics: + +- **[Requests](https://www.jsonrpc.org/specification#request_object)** - Include an `id` field and expect a response +- **[Notifications](https://www.jsonrpc.org/specification#notification)** - Omit the `id` field and are one-way + +### Custom Requests + +In addition to the requests specified by the protocol, implementations **MAY** expose and call custom JSON-RPC requests as long as their name starts with an underscore (`_`). + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "_zed.dev/workspace/buffers", + "params": { + "language": "rust" + } +} +``` + +Upon receiving a custom request, implementations **MUST** respond accordingly with the provided `id`: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "buffers": [ + { "id": 0, "path": "/home/user/project/src/main.rs" }, + { "id": 1, "path": "/home/user/project/src/editor.rs" } + ] + } +} +``` + +If the receiving end doesn't recognize the custom method name, it should respond with the standard "Method not found" error: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "error": { + "code": -32601, + "message": "Method not found" + } +} +``` + +To avoid such cases, extensions **SHOULD** advertise their [custom capabilities](#advertising-custom-capabilities) so that callers can check their availability first and adapt their behavior or interface accordingly. + +### Custom Notifications + +Custom notifications are regular JSON-RPC notifications that start with an underscore (`_`). Like all notifications, they omit the `id` field: + +```json +{ + "jsonrpc": "2.0", + "method": "_zed.dev/file_opened", + "params": { + "path": "/home/user/project/src/editor.rs" + } +} +``` + +Unlike with custom requests, implementations **SHOULD** ignore unrecognized notifications. + +## Advertising Custom Capabilities + +Implementations **SHOULD** use the `_meta` field in capability objects to advertise support for extensions and their methods: + +```json +{ + "jsonrpc": "2.0", + "id": 0, + "result": { + "protocolVersion": 1, + "agentCapabilities": { + "loadSession": true, + "_meta": { + "zed.dev": { + "workspace": true, + "fileNotifications": true + } + } + } + } +} +``` + +This allows implementations to negotiate custom features during initialization without breaking compatibility with standard Clients and Agents. diff --git a/docs/protocol/draft/initialization.mdx b/docs/protocol/draft/initialization.mdx new file mode 100644 index 000000000..50307e71b --- /dev/null +++ b/docs/protocol/draft/initialization.mdx @@ -0,0 +1,225 @@ +--- +title: "Initialization" +description: "How all Agent Client Protocol connections begin" +--- + +{/* todo! link to all concepts */} + +The Initialization phase allows [Clients](./overview#client) and [Agents](./overview#agent) to negotiate protocol versions, capabilities, and authentication methods. + +
+ +```mermaid +sequenceDiagram + participant Client + participant Agent + + Note over Client, Agent: Connection established + Client->>Agent: initialize + Note right of Agent: Negotiate protocol
version & capabilities + Agent-->>Client: initialize response + Note over Client,Agent: Ready for session setup +``` + +
+ +Before a Session can be created, Clients **MUST** initialize the connection by calling the `initialize` method with: + +- The latest [protocol version](#protocol-version) supported +- The [capabilities](#client-capabilities) supported + +They **SHOULD** also provide a name and version to the Agent. + +```json +{ + "jsonrpc": "2.0", + "id": 0, + "method": "initialize", + "params": { + "protocolVersion": 1, + "clientCapabilities": { + "fs": { + "readTextFile": true, + "writeTextFile": true + }, + "terminal": true + }, + "clientInfo": { + "name": "my-client", + "title": "My Client", + "version": "1.0.0" + } + } +} +``` + +The Agent **MUST** respond with the chosen [protocol version](#protocol-version) and the [capabilities](#agent-capabilities) it supports. It **SHOULD** also provide a name and version to the Client as well: + +```json +{ + "jsonrpc": "2.0", + "id": 0, + "result": { + "protocolVersion": 1, + "agentCapabilities": { + "loadSession": true, + "promptCapabilities": { + "image": true, + "audio": true, + "embeddedContext": true + }, + "mcpCapabilities": { + "http": true, + "sse": true + } + }, + "agentInfo": { + "name": "my-agent", + "title": "My Agent", + "version": "1.0.0" + }, + "authMethods": [] + } +} +``` + +## Protocol version + +The protocol versions that appear in the `initialize` requests and responses are a single integer that identifies a **MAJOR** protocol version. This version is only incremented when breaking changes are introduced. + +Clients and Agents **MUST** agree on a protocol version and act according to its specification. + +See [Capabilities](#capabilities) to learn how non-breaking features are introduced. + +### Version Negotiation + +The `initialize` request **MUST** include the latest protocol version the Client supports. + +If the Agent supports the requested version, it **MUST** respond with the same version. Otherwise, the Agent **MUST** respond with the latest version it supports. + +If the Client does not support the version specified by the Agent in the `initialize` response, the Client **SHOULD** close the connection and inform the user about it. + +## Capabilities + +Capabilities describe features supported by the Client and the Agent. + +All capabilities included in the `initialize` request are **OPTIONAL**. Clients and Agents **SHOULD** support all possible combinations of their peer's capabilities. + +The introduction of new capabilities is not considered a breaking change. Therefore, Clients and Agents **MUST** treat all capabilities omitted in the `initialize` request as **UNSUPPORTED**. + +Capabilities are high-level and are not attached to a specific base protocol concept. + +Capabilities may specify the availability of protocol methods, notifications, or a subset of their parameters. They may also signal behaviors of the Agent or Client implementation. + +Implementations can also [advertise custom capabilities](./extensibility#advertising-custom-capabilities) using the `_meta` field to indicate support for protocol extensions. + +### Client Capabilities + +The Client **SHOULD** specify whether it supports the following capabilities: + +#### File System + + + The `fs/read_text_file` method is available. + + + + The `fs/write_text_file` method is available. + + + + Learn more about File System methods + + +#### Terminal + + + All `terminal/*` methods are available, allowing the Agent to execute and + manage shell commands. + + + + Learn more about Terminals + + +### Agent Capabilities + +The Agent **SHOULD** specify whether it supports the following capabilities: + + + The [`session/load`](./session-setup#loading-sessions) method is available. + + + + Object indicating the different types of [content](./content) that may be + included in `session/prompt` requests. + + +#### Prompt capabilities + +As a baseline, all Agents **MUST** support `ContentBlock::Text` and `ContentBlock::ResourceLink` in `session/prompt` requests. + +Optionally, they **MAY** support richer types of [content](./content) by specifying the following capabilities: + + + The prompt may include `ContentBlock::Image` + + + + The prompt may include `ContentBlock::Audio` + + + + The prompt may include `ContentBlock::Resource` + + +#### MCP capabilities + + + The Agent supports connecting to MCP servers over HTTP. + + + + The Agent supports connecting to MCP servers over SSE. + +Note: This transport has been deprecated by the MCP spec. + + + +#### Session Capabilities + +As a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`. + +Optionally, they **MAY** support other session methods and notifications by specifying additional capabilities. + + + `session/load` is still handled by the top-level `load_session` capability. + This will be unified in future versions of the protocol. + + +## Implementation Information + +Both Clients and Agents **SHOULD** provide information about their implementation in the `clientInfo` and `agentInfo` fields respectively. Both take the following three fields: + + + Intended for programmatic or logical use, but can be used as a display name + fallback if title isn’t present. + + + + Intended for UI and end-user contexts — optimized to be human-readable and + easily understood. If not provided, the name should be used for display. + + + + Version of the implementation. Can be displayed to the user or used for + debugging or metrics purposes. + + + + Note: in future versions of the protocol, this information will be required. + + +--- + +Once the connection is initialized, you're ready to [create a session](./session-setup) and begin the conversation with the Agent. diff --git a/docs/protocol/draft/overview.mdx b/docs/protocol/draft/overview.mdx new file mode 100644 index 000000000..a8dbf1dd5 --- /dev/null +++ b/docs/protocol/draft/overview.mdx @@ -0,0 +1,214 @@ +--- +title: "Overview" +description: "How the Agent Client Protocol works" +--- + +The Agent Client Protocol allows [Agents](#agent) and [Clients](#client) to communicate by exposing methods that each side can call and sending notifications to inform each other of events. + +## Communication Model + +The protocol follows the [JSON-RPC 2.0](https://www.jsonrpc.org/specification) specification with two types of messages: + +- **Methods**: Request-response pairs that expect a result or error +- **Notifications**: One-way messages that don't expect a response + +## Message Flow + +A typical flow follows this pattern: + + + + +- Client → Agent: `initialize` to establish connection +- Client → Agent: `authenticate` if required by the Agent + + + + + +- Client → Agent: `session/new` to create a new session +- Client → Agent: `session/load` to resume an existing session if supported + + + + + - Client → Agent: `session/prompt` to send user message + - Agent → Client: `session/update` notifications for progress updates + - Agent → Client: File operations or permission requests as needed + - Client → Agent: `session/cancel` to interrupt processing if needed + - Turn ends and the Agent sends the `session/prompt` response with a stop reason + + + +## Agent + +Agents are programs that use generative AI to autonomously modify code. They typically run as subprocesses of the Client. + +### Baseline Methods + +Schema]} +> + [Negotiate versions and exchange capabilities.](./initialization). + + +Schema]} +> + Authenticate with the Agent (if required). + + +Schema]} +> + [Create a new conversation session](./session-setup#creating-a-session). + + +Schema]} +> + [Send user prompts](./prompt-turn#1-user-message) to the Agent. + + +### Optional Methods + +Schema]} +> + [Load an existing session](./session-setup#loading-sessions) (requires + `loadSession` capability). + + +Schema]} +> + [Switch between agent operating + modes](./session-modes#setting-the-current-mode). + + +### Notifications + +Schema]} +> + [Cancel ongoing operations](./prompt-turn#cancellation) (no response + expected). + + +## Client + +Clients provide the interface between users and agents. They are typically code editors (IDEs, text editors) but can also be other UIs for interacting with agents. Clients manage the environment, handle user interactions, and control access to resources. + +### Baseline Methods + +Schema]} +> + [Request user authorization](./tool-calls#requesting-permission) for tool + calls. + + +### Optional Methods + +Schema]} +> + [Read file contents](./file-system#reading-files) (requires `fs.readTextFile` + capability). + + +Schema]} +> + [Write file contents](./file-system#writing-files) (requires + `fs.writeTextFile` capability). + + +Schema]} +> + [Create a new terminal](./terminals) (requires `terminal` capability). + + +Schema]} +> + Get terminal output and exit status (requires `terminal` capability). + + +Schema]} +> + Release a terminal (requires `terminal` capability). + + +Schema]} +> + Wait for terminal command to exit (requires `terminal` capability). + + +Schema]} +> + Kill terminal command without releasing (requires `terminal` capability). + + +### Notifications + +Schema]} +> + [Send session updates](./prompt-turn#3-agent-reports-output) to inform the + Client of changes (no response expected). This includes: - [Message + chunks](./content) (agent, user, thought) - [Tool calls and + updates](./tool-calls) - [Plans](./agent-plan) - [Available commands + updates](./slash-commands#advertising-commands) - [Mode + changes](./session-modes#from-the-agent) + + +## Argument requirements + +- All file paths in the protocol **MUST** be absolute. +- Line numbers are 1-based + +## Error Handling + +All methods follow standard JSON-RPC 2.0 [error handling](https://www.jsonrpc.org/specification#error_object): + +- Successful responses include a `result` field +- Errors include an `error` object with `code` and `message` +- Notifications never receive responses (success or error) + +## Extensibility + +The protocol provides built-in mechanisms for adding custom functionality while maintaining compatibility: + +- Add custom data using `_meta` fields +- Create custom methods by prefixing their name with underscore (`_`) +- Advertise custom capabilities during initialization + +Learn about [protocol extensibility](./extensibility) to understand how to use these mechanisms. + +## Next Steps + +- Learn about [Initialization](./initialization) to understand version and capability negotiation +- Understand [Session Setup](./session-setup) for creating and loading sessions +- Review the [Prompt Turn](./prompt-turn) lifecycle +- Explore [Extensibility](./extensibility) to add custom features diff --git a/docs/protocol/draft/prompt-turn.mdx b/docs/protocol/draft/prompt-turn.mdx new file mode 100644 index 000000000..57e8df34f --- /dev/null +++ b/docs/protocol/draft/prompt-turn.mdx @@ -0,0 +1,319 @@ +--- +title: "Prompt Turn" +description: "Understanding the core conversation flow" +--- + +A prompt turn represents a complete interaction cycle between the [Client](./overview#client) and [Agent](./overview#agent), starting with a user message and continuing until the Agent completes its response. This may involve multiple exchanges with the language model and tool invocations. + +Before sending prompts, Clients **MUST** first complete the [initialization](./initialization) phase and [session setup](./session-setup). + +## The Prompt Turn Lifecycle + +A prompt turn follows a structured flow that enables rich interactions between the user, Agent, and any connected tools. + +
+ +```mermaid +sequenceDiagram + participant Client + participant Agent + + Note over Agent,Client: Session ready + + Note left of Client: User sends message + Client->>Agent: session/prompt (user message) + Note right of Agent: Process with LLM + + loop Until completion + Note right of Agent: LLM responds with
content/tool calls + Agent->>Client: session/update (plan) + Agent->>Client: session/update (agent_message_chunk) + + opt Tool calls requested + Agent->>Client: session/update (tool_call) + opt Permission required + Agent->>Client: session/request_permission + Note left of Client: User grants/denies + Client-->>Agent: Permission response + end + Agent->>Client: session/update (tool_call status: in_progress) + Note right of Agent: Execute tool + Agent->>Client: session/update (tool_call status: completed) + Note right of Agent: Send tool results
back to LLM + end + + opt User cancelled during execution + Note left of Client: User cancels prompt + Client->>Agent: session/cancel + Note right of Agent: Abort operations + Agent-->>Client: session/prompt response (cancelled) + end + end + + Agent-->>Client: session/prompt response (stopReason) + +``` + +### 1. User Message + +The turn begins when the Client sends a `session/prompt`: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "method": "session/prompt", + "params": { + "sessionId": "sess_abc123def456", + "prompt": [ + { + "type": "text", + "text": "Can you analyze this code for potential issues?" + }, + { + "type": "resource", + "resource": { + "uri": "file:///home/user/project/main.py", + "mimeType": "text/x-python", + "text": "def process_data(items):\n for item in items:\n print(item)" + } + } + ] + } +} +``` + + + The [ID](./session-setup#session-id) of the session to send this message to. + + + The contents of the user message, e.g. text, images, files, etc. + + Clients **MUST** restrict types of content according to the [Prompt Capabilities](./initialization#prompt-capabilities) established during [initialization](./initialization). + + + Learn more about Content + + + + +### 2. Agent Processing + +Upon receiving the prompt request, the Agent processes the user's message and sends it to the language model, which **MAY** respond with text content, tool calls, or both. + +### 3. Agent Reports Output + +The Agent reports the model's output to the Client via `session/update` notifications. This may include the Agent's plan for accomplishing the task: + +```json expandable +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "plan", + "entries": [ + { + "content": "Check for syntax errors", + "priority": "high", + "status": "pending" + }, + { + "content": "Identify potential type issues", + "priority": "medium", + "status": "pending" + }, + { + "content": "Review error handling patterns", + "priority": "medium", + "status": "pending" + }, + { + "content": "Suggest improvements", + "priority": "low", + "status": "pending" + } + ] + } + } +} +``` + + + Learn more about Agent Plans + + +The Agent then reports text responses from the model: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "agent_message_chunk", + "content": { + "type": "text", + "text": "I'll analyze your code for potential issues. Let me examine it..." + } + } + } +} +``` + +If the model requested tool calls, these are also reported immediately: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "tool_call", + "toolCallId": "call_001", + "title": "Analyzing Python code", + "kind": "other", + "status": "pending" + } + } +} +``` + +### 4. Check for Completion + +If there are no pending tool calls, the turn ends and the Agent **MUST** respond to the original `session/prompt` request with a `StopReason`: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": { + "stopReason": "end_turn" + } +} +``` + +Agents **MAY** stop the turn at any point by returning the corresponding [`StopReason`](#stop-reasons). + +### 5. Tool Invocation and Status Reporting + +Before proceeding with execution, the Agent **MAY** request permission from the Client via the `session/request_permission` method. + +Once permission is granted (if required), the Agent **SHOULD** invoke the tool and report a status update marking the tool as `in_progress`: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "tool_call_update", + "toolCallId": "call_001", + "status": "in_progress" + } + } +} +``` + +As the tool runs, the Agent **MAY** send additional updates, providing real-time feedback about tool execution progress. + +While tools execute on the Agent, they **MAY** leverage Client capabilities such as the file system (`fs`) methods to access resources within the Client's environment. + +When the tool completes, the Agent sends another update with the final status and any content: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "tool_call_update", + "toolCallId": "call_001", + "status": "completed", + "content": [ + { + "type": "content", + "content": { + "type": "text", + "text": "Analysis complete:\n- No syntax errors found\n- Consider adding type hints for better clarity\n- The function could benefit from error handling for empty lists" + } + } + ] + } + } +} +``` + + + Learn more about Tool Calls + + +### 6. Continue Conversation + +The Agent sends the tool results back to the language model as another request. + +The cycle returns to [step 2](#2-agent-processing), continuing until the language model completes its response without requesting additional tool calls or the turn gets stopped by the Agent or cancelled by the Client. + +## Stop Reasons + +When an Agent stops a turn, it must specify the corresponding `StopReason`: + + + The language model finishes responding without requesting more tools + + + + The maximum token limit is reached + + + + The maximum number of model requests in a single turn is exceeded + + +The Agent refuses to continue + +The Client cancels the turn + +## Cancellation + +Clients **MAY** cancel an ongoing prompt turn at any time by sending a `session/cancel` notification: + +```json +{ + "jsonrpc": "2.0", + "method": "session/cancel", + "params": { + "sessionId": "sess_abc123def456" + } +} +``` + +The Client **SHOULD** preemptively mark all non-finished tool calls pertaining to the current turn as `cancelled` as soon as it sends the `session/cancel` notification. + +The Client **MUST** respond to all pending `session/request_permission` requests with the `cancelled` outcome. + +When the Agent receives this notification, it **SHOULD** stop all language model requests and all tool call invocations as soon as possible. + +After all ongoing operations have been successfully aborted and pending updates have been sent, the Agent **MUST** respond to the original `session/prompt` request with the `cancelled` [stop reason](#stop-reasons). + + + API client libraries and tools often throw an exception when their operation is aborted, which may propagate as an error response to `session/prompt`. + +Clients often display unrecognized errors from the Agent to the user, which would be undesirable for cancellations as they aren't considered errors. + +Agents **MUST** catch these errors and return the semantically meaningful `cancelled` stop reason, so that Clients can reliably confirm the cancellation. + + + +The Agent **MAY** send `session/update` notifications with content or tool call updates after receiving the `session/cancel` notification, but it **MUST** ensure that it does so before responding to the `session/prompt` request. + +The Client **SHOULD** still accept tool call updates received after sending `session/cancel`. + +--- + +Once a prompt turn completes, the Client may send another `session/prompt` to continue the conversation, building on the context established in previous turns. diff --git a/docs/protocol/draft/session-config-options.mdx b/docs/protocol/draft/session-config-options.mdx new file mode 100644 index 000000000..524b489fe --- /dev/null +++ b/docs/protocol/draft/session-config-options.mdx @@ -0,0 +1,282 @@ +--- +title: "Session Config Options" +description: "Flexible configuration selectors for agent sessions" +--- + +Agents can provide an arbitrary list of configuration options for a session, allowing Clients to offer users customizable selectors for things like models, modes, reasoning levels, and more. + + + Session Config Options are the preferred way to expose session-level + configuration. If an Agent provides `configOptions`, Clients **SHOULD** use + them instead of the [`modes`](./session-modes) field. Modes will be removed in + a future version of the protocol. + + +## Initial State + +During [Session Setup](./session-setup) the Agent **MAY** return a list of configuration options and their current values: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "sessionId": "sess_abc123def456", + "configOptions": [ + { + "id": "mode", + "name": "Session Mode", + "description": "Controls how the agent requests permission", + "category": "mode", + "type": "select", + "currentValue": "ask", + "options": [ + { + "value": "ask", + "name": "Ask", + "description": "Request permission before making any changes" + }, + { + "value": "code", + "name": "Code", + "description": "Write and modify code with full tool access" + } + ] + }, + { + "id": "model", + "name": "Model", + "category": "model", + "type": "select", + "currentValue": "model-1", + "options": [ + { + "value": "model-1", + "name": "Model 1", + "description": "The fastest model" + }, + { + "value": "model-2", + "name": "Model 2", + "description": "The most powerful model" + } + ] + } + ] + } +} +``` + + + The list of configuration options available for this session. The order of + this array represents the Agent's preferred priority. Clients **SHOULD** + respect this ordering when displaying options. + + +### ConfigOption + + + Unique identifier for this configuration option. Used when setting values. + + + + Human-readable label for the option + + + + Optional description providing more details about what this option controls + + + + Optional [semantic category](#option-categories) to help Clients provide + consistent UX. + + + + The type of input control. Currently only `select` is supported. + + + + The currently selected value for this option + + + + The available values for this option + + +### ConfigOptionValue + + + The value identifier used when setting this option + + + + Human-readable name to display + + + + Optional description of what this value does + + +## Option Categories + +Each config option **MAY** include a `category` field. Categories are semantic metadata intended to help Clients provide consistent UX, such as attaching keyboard shortcuts, choosing icons, or deciding placement. + + + Categories are for UX purposes only and **MUST NOT** be required for + correctness. Clients **MUST** handle missing or unknown categories gracefully. + + +Category names beginning with `_` are free for custom use (e.g., `_my_custom_category`). Category names that do not begin with `_` are reserved for the ACP spec. + +| Category | Description | +| --------------- | -------------------------------- | +| `mode` | Session mode selector | +| `model` | Model selector | +| `thought_level` | Thought/reasoning level selector | + +When multiple options share the same category, Clients **SHOULD** use the array ordering to resolve ties, preferring earlier options in the list for prominent placement or keyboard shortcuts. + +## Option Ordering + +The order of the `configOptions` array is significant. Agents **SHOULD** place higher-priority options first in the list. + +Clients **SHOULD**: + +- Display options in the order provided by the Agent +- Use ordering to resolve ties when multiple options share the same category +- If displaying a limited number of options, prefer those at the beginning of the list + +## Default Values and Graceful Degradation + +Agents **MUST** always provide a default value for every configuration option. This ensures the Agent can operate correctly even if: + +- The Client doesn't support configuration options +- The Client chooses not to display certain options +- The Client receives an option type it doesn't recognize + +If a Client receives an option with an unrecognized `type`, it **SHOULD** ignore that option. The Agent will continue using its default value. + +## Setting a Config Option + +The current value of a config option can be changed at any point during a session, whether the Agent is idle or generating a response. + +### From the Client + +Clients can change a config option value by calling the `session/set_config_option` method: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "method": "session/set_config_option", + "params": { + "sessionId": "sess_abc123def456", + "configId": "mode", + "value": "code" + } +} +``` + + + The ID of the session + + + + The `id` of the configuration option to change + + + + The new value to set. Must be one of the values listed in the option's + `options` array. + + +The Agent **MUST** respond with the complete list of all configuration options and their current values: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": { + "configOptions": [ + { + "id": "mode", + "name": "Session Mode", + "type": "select", + "currentValue": "code", + "options": [...] + }, + { + "id": "model", + "name": "Model", + "type": "select", + "currentValue": "model-1", + "options": [...] + } + ] + } +} +``` + + + The response always contains the **complete** configuration state. This allows + Agents to reflect dependent changes. For example, if changing the model + affects available reasoning options, or if an option's available values change + based on another selection. + + +### From the Agent + +The Agent can also change configuration options and notify the Client by sending a `config_option_update` session notification: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "config_option_update", + "configOptions": [ + { + "id": "mode", + "name": "Session Mode", + "type": "select", + "currentValue": "code", + "options": [...] + }, + { + "id": "model", + "name": "Model", + "type": "select", + "currentValue": "model-2", + "options": [...] + } + ] + } + } +} +``` + +This notification also contains the complete configuration state. Common reasons an Agent might update configuration options include: + +- Switching modes after completing a planning phase +- Falling back to a different model due to rate limits or errors +- Adjusting available options based on context discovered during execution + +## Relationship to Session Modes + +Session Config Options supersede the older [Session Modes](./session-modes) API. However, during the transition period, Agents that provide mode-like configuration **SHOULD** send both: + +- `configOptions` with a `category: "mode"` option for Clients that support config options +- `modes` for Clients that only support the older API + +If an Agent provides both `configOptions` and `modes` in the session response: + +- Clients that support config options **SHOULD** use `configOptions` exclusively and ignore `modes` +- Clients that don't support config options **SHOULD** fall back to `modes` +- Agents **SHOULD** keep both in sync to ensure consistent behavior regardless of which field the Client uses + + + Learn about the Session Modes API + diff --git a/docs/protocol/draft/session-modes.mdx b/docs/protocol/draft/session-modes.mdx new file mode 100644 index 000000000..03bdaa170 --- /dev/null +++ b/docs/protocol/draft/session-modes.mdx @@ -0,0 +1,173 @@ +--- +title: "Session Modes" +description: "Switch between different agent operating modes" +--- + + + You can now use [Session Config Options](./session-config-options). Dedicated + session mode methods will be removed in a future version of the protocol. + Until then, you can offer both to clients for backwards compatibility. + + +Agents can provide a set of modes they can operate in. Modes often affect the system prompts used, the availability of tools, and whether they request permission before running. + +## Initial state + +During [Session Setup](./session-setup) the Agent **MAY** return a list of modes it can operate in and the currently active mode: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "sessionId": "sess_abc123def456", + "modes": { + "currentModeId": "ask", + "availableModes": [ + { + "id": "ask", + "name": "Ask", + "description": "Request permission before making any changes" + }, + { + "id": "architect", + "name": "Architect", + "description": "Design and plan software systems without implementation" + }, + { + "id": "code", + "name": "Code", + "description": "Write and modify code with full tool access" + } + ] + } + } +} +``` + + + The current mode state for the session + + +### SessionModeState + + + The ID of the mode that is currently active + + + + The set of modes that the Agent can operate in + + +### SessionMode + + + Unique identifier for this mode + + + + Human-readable name of the mode + + + + Optional description providing more details about what this mode does + + +## Setting the current mode + +The current mode can be changed at any point during a session, whether the Agent is idle or generating a response. + +### From the Client + +Typically, Clients display the available modes to the user and allow them to change the current one, which they can do by calling the [`session/set_mode`](./schema#session%2Fset-mode) method. + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "method": "session/set_mode", + "params": { + "sessionId": "sess_abc123def456", + "modeId": "code" + } +} +``` + + + The ID of the session to set the mode for + + + + The ID of the mode to switch to. Must be one of the modes listed in + `availableModes` + + +### From the Agent + +The Agent can also change its own mode and let the Client know by sending the `current_mode_update` session notification: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "current_mode_update", + "modeId": "code" + } + } +} +``` + +#### Exiting plan modes + +A common case where an Agent might switch modes is from within a special "exit mode" tool that can be provided to the language model during plan/architect modes. The language model can call this tool when it determines it's ready to start implementing a solution. + +This "switch mode" tool will usually request permission before running, which it can do just like any other tool: + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "method": "session/request_permission", + "params": { + "sessionId": "sess_abc123def456", + "toolCall": { + "toolCallId": "call_switch_mode_001", + "title": "Ready for implementation", + "kind": "switch_mode", + "status": "pending", + "content": [ + { + "type": "text", + "text": "## Implementation Plan..." + } + ] + }, + "options": [ + { + "optionId": "code", + "name": "Yes, and auto-accept all actions", + "kind": "allow_always" + }, + { + "optionId": "ask", + "name": "Yes, and manually accept actions", + "kind": "allow_once" + }, + { + "optionId": "reject", + "name": "No, stay in architect mode", + "kind": "reject_once" + } + ] + } +} +``` + +When an option is chosen, the tool runs, setting the mode and sending the `current_mode_update` notification mentioned above. + + + Learn more about permission requests + diff --git a/docs/protocol/draft/slash-commands.mdx b/docs/protocol/draft/slash-commands.mdx new file mode 100644 index 000000000..271b115dd --- /dev/null +++ b/docs/protocol/draft/slash-commands.mdx @@ -0,0 +1,96 @@ +--- +title: "Slash Commands" +description: "Advertise available slash commands to clients" +--- + +Agents can advertise a set of slash commands that users can invoke. These commands provide quick access to specific agent capabilities and workflows. Commands are run as part of regular [prompt](./prompt-turn) requests where the Client includes the command text in the prompt. + +## Advertising commands + +After creating a session, the Agent **MAY** send a list of available commands via the `available_commands_update` session notification: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "available_commands_update", + "availableCommands": [ + { + "name": "web", + "description": "Search the web for information", + "input": { + "hint": "query to search for" + } + }, + { + "name": "test", + "description": "Run tests for the current project" + }, + { + "name": "plan", + "description": "Create a detailed implementation plan", + "input": { + "hint": "description of what to plan" + } + } + ] + } + } +} +``` + + + The list of commands available in this session + + +### AvailableCommand + + + The command name (e.g., "web", "test", "plan") + + + + Human-readable description of what the command does + + + + Optional input specification for the command + + +### AvailableCommandInput + +Currently supports unstructured text input: + + + A hint to display when the input hasn't been provided yet + + +## Dynamic updates + +The Agent can update the list of available commands at any time during a session by sending another `available_commands_update` notification. This allows commands to be added based on context, removed when no longer relevant, or modified with updated descriptions. + +## Running commands + +Commands are included as regular user messages in prompt requests: + +```json +{ + "jsonrpc": "2.0", + "id": 3, + "method": "session/prompt", + "params": { + "sessionId": "sess_abc123def456", + "prompt": [ + { + "type": "text", + "text": "/web agent client protocol" + } + ] + } +} +``` + +The Agent recognizes the command prefix and processes it accordingly. Commands may be accompanied by any other user message content types (images, audio, etc.) in the same prompt array. diff --git a/docs/protocol/draft/terminals.mdx b/docs/protocol/draft/terminals.mdx new file mode 100644 index 000000000..270ec7588 --- /dev/null +++ b/docs/protocol/draft/terminals.mdx @@ -0,0 +1,281 @@ +--- +title: "Terminals" +description: "Executing and managing terminal commands" +--- + +The terminal methods allow Agents to execute shell commands within the Client's environment. These methods enable Agents to run build processes, execute scripts, and interact with command-line tools while providing real-time output streaming and process control. + +## Checking Support + +Before attempting to use terminal methods, Agents **MUST** verify that the Client supports this capability by checking the [Client Capabilities](./initialization#client-capabilities) field in the `initialize` response: + +```json highlight={7} +{ + "jsonrpc": "2.0", + "id": 0, + "result": { + "protocolVersion": 1, + "clientCapabilities": { + "terminal": true + } + } +} +``` + +If `terminal` is `false` or not present, the Agent **MUST NOT** attempt to call any terminal methods. + +## Executing Commands + +The `terminal/create` method starts a command in a new terminal: + +```json +{ + "jsonrpc": "2.0", + "id": 5, + "method": "terminal/create", + "params": { + "sessionId": "sess_abc123def456", + "command": "npm", + "args": ["test", "--coverage"], + "env": [ + { + "name": "NODE_ENV", + "value": "test" + } + ], + "cwd": "/home/user/project", + "outputByteLimit": 1048576 + } +} +``` + + + The [Session ID](./session-setup#session-id) for this request + + + + The command to execute + + + + Array of command arguments + + + + Environment variables for the command. + +Each variable has: + +- `name`: The environment variable name +- `value`: The environment variable value + + + + + Working directory for the command (absolute path) + + + + Maximum number of output bytes to retain. Once exceeded, earlier output is + truncated to stay within this limit. + +When the limit is exceeded, the Client truncates from the beginning of the output +to stay within the limit. + +The Client **MUST** ensure truncation happens at a character boundary to maintain valid +string output, even if this means the retained output is slightly less than the +specified limit. + + + +The Client returns a Terminal ID immediately without waiting for completion: + +```json +{ + "jsonrpc": "2.0", + "id": 5, + "result": { + "terminalId": "term_xyz789" + } +} +``` + +This allows the command to run in the background while the Agent performs other operations. + +After creating the terminal, the Agent can use the `terminal/wait_for_exit` method to wait for the command to complete. + + + The Agent **MUST** release the terminal using `terminal/release` when it's no + longer needed. + + +## Embedding in Tool Calls + +Terminals can be embedded directly in [tool calls](./tool-calls) to provide real-time output to users: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "tool_call", + "toolCallId": "call_002", + "title": "Running tests", + "kind": "execute", + "status": "in_progress", + "content": [ + { + "type": "terminal", + "terminalId": "term_xyz789" + } + ] + } + } +} +``` + +When a terminal is embedded in a tool call, the Client displays live output as it's generated and continues to display it even after the terminal is released. + +## Getting Output + +The `terminal/output` method retrieves the current terminal output without waiting for the command to complete: + +```json +{ + "jsonrpc": "2.0", + "id": 6, + "method": "terminal/output", + "params": { + "sessionId": "sess_abc123def456", + "terminalId": "term_xyz789" + } +} +``` + +The Client responds with the current output and exit status (if the command has finished): + +```json +{ + "jsonrpc": "2.0", + "id": 6, + "result": { + "output": "Running tests...\n✓ All tests passed (42 total)\n", + "truncated": false, + "exitStatus": { + "exitCode": 0, + "signal": null + } + } +} +``` + + + The terminal output captured so far + + + + Whether the output was truncated due to byte limits + + + + Present only if the command has exited. Contains: + +- `exitCode`: The process exit code (may be null) +- `signal`: The signal that terminated the process (may be null) + + + +## Waiting for Exit + +The `terminal/wait_for_exit` method returns once the command completes: + +```json +{ + "jsonrpc": "2.0", + "id": 7, + "method": "terminal/wait_for_exit", + "params": { + "sessionId": "sess_abc123def456", + "terminalId": "term_xyz789" + } +} +``` + +The Client responds once the command exits: + +```json +{ + "jsonrpc": "2.0", + "id": 7, + "result": { + "exitCode": 0, + "signal": null + } +} +``` + + + The process exit code (may be null if terminated by signal) + + + + The signal that terminated the process (may be null if exited normally) + + +## Killing Commands + +The `terminal/kill` method terminates a command without releasing the terminal: + +```json +{ + "jsonrpc": "2.0", + "id": 8, + "method": "terminal/kill", + "params": { + "sessionId": "sess_abc123def456", + "terminalId": "term_xyz789" + } +} +``` + +After killing a command, the terminal remains valid and can be used with: + +- `terminal/output` to get the final output +- `terminal/wait_for_exit` to get the exit status + +The Agent **MUST** still call `terminal/release` when it's done using it. + +### Building a Timeout + +Agents can implement command timeouts by combining terminal methods: + +1. Create a terminal with `terminal/create` +2. Start a timer for the desired timeout duration +3. Concurrently wait for either the timer to expire or `terminal/wait_for_exit` to return +4. If the timer expires first: + - Call `terminal/kill` to terminate the command + - Call `terminal/output` to retrieve any final output + - Include the output in the response to the model +5. Call `terminal/release` when done + +## Releasing Terminals + +The `terminal/release` kills the command if still running and releases all resources: + +```json +{ + "jsonrpc": "2.0", + "id": 9, + "method": "terminal/release", + "params": { + "sessionId": "sess_abc123def456", + "terminalId": "term_xyz789" + } +} +``` + +After release the terminal ID becomes invalid for all other `terminal/*` methods. + +If the terminal was added to a tool call, the client **SHOULD** continue to display its output after release. diff --git a/docs/protocol/draft/tool-calls.mdx b/docs/protocol/draft/tool-calls.mdx new file mode 100644 index 000000000..2982296a9 --- /dev/null +++ b/docs/protocol/draft/tool-calls.mdx @@ -0,0 +1,310 @@ +--- +title: "Tool Calls" +description: "How Agents report tool call execution" +--- + +Tool calls represent actions that language models request Agents to perform during a [prompt turn](./prompt-turn). When an LLM determines it needs to interact with external systems—like reading files, running code, or fetching data—it generates tool calls that the Agent executes on its behalf. + +Agents report tool calls through [`session/update`](./prompt-turn#3-agent-reports-output) notifications, allowing Clients to display real-time progress and results to users. + +While Agents handle the actual execution, they may leverage Client capabilities like [permission requests](#requesting-permission) or [file system access](./file-system) to provide a richer, more integrated experience. + +## Creating + +When the language model requests a tool invocation, the Agent **SHOULD** report it to the Client: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "tool_call", + "toolCallId": "call_001", + "title": "Reading configuration file", + "kind": "read", + "status": "pending" + } + } +} +``` + + + A unique identifier for this tool call within the session + + + + A human-readable title describing what the tool is doing + + + + The category of tool being invoked. + + + - `read` - Reading files or data - `edit` - Modifying files or content - + `delete` - Removing files or data - `move` - Moving or renaming files - + `search` - Searching for information - `execute` - Running commands or code - + `think` - Internal reasoning or planning - `fetch` - Retrieving external data + - `other` - Other tool types (default) + + +Tool kinds help Clients choose appropriate icons and optimize how they display tool execution progress. + + + + + The current [execution status](#status) (defaults to `pending`) + + + + [Content produced](#content) by the tool call + + + + [File locations](#following-the-agent) affected by this tool call + + + + The raw input parameters sent to the tool + + + + The raw output returned by the tool + + +## Updating + +As tools execute, Agents send updates to report progress and results. + +Updates use the `session/update` notification with `tool_call_update`: + +```json +{ + "jsonrpc": "2.0", + "method": "session/update", + "params": { + "sessionId": "sess_abc123def456", + "update": { + "sessionUpdate": "tool_call_update", + "toolCallId": "call_001", + "status": "in_progress", + "content": [ + { + "type": "content", + "content": { + "type": "text", + "text": "Found 3 configuration files..." + } + } + ] + } + } +} +``` + +All fields except `toolCallId` are optional in updates. Only the fields being changed need to be included. + +## Requesting Permission + +The Agent **MAY** request permission from the user before executing a tool call by calling the `session/request_permission` method: + +```json +{ + "jsonrpc": "2.0", + "id": 5, + "method": "session/request_permission", + "params": { + "sessionId": "sess_abc123def456", + "toolCall": { + "toolCallId": "call_001" + }, + "options": [ + { + "optionId": "allow-once", + "name": "Allow once", + "kind": "allow_once" + }, + { + "optionId": "reject-once", + "name": "Reject", + "kind": "reject_once" + } + ] + } +} +``` + + + The session ID for this request + + + + The tool call update containing details about the operation + + + + Available [permission options](#permission-options) for the user to choose + from + + +The Client responds with the user's decision: + +```json +{ + "jsonrpc": "2.0", + "id": 5, + "result": { + "outcome": { + "outcome": "selected", + "optionId": "allow-once" + } + } +} +``` + +Clients **MAY** automatically allow or reject permission requests according to the user settings. + +If the current prompt turn gets [cancelled](./prompt-turn#cancellation), the Client **MUST** respond with the `"cancelled"` outcome: + +```json +{ + "jsonrpc": "2.0", + "id": 5, + "result": { + "outcome": { + "outcome": "cancelled" + } + } +} +``` + + + The user's decision, either: - `cancelled` - The [prompt turn was + cancelled](./prompt-turn#cancellation) - `selected` with an `optionId` - The + ID of the selected permission option + + +### Permission Options + +Each permission option provided to the Client contains: + + + Unique identifier for this option + + + + Human-readable label to display to the user + + + + A hint to help Clients choose appropriate icons and UI treatment for each option. + +- `allow_once` - Allow this operation only this time +- `allow_always` - Allow this operation and remember the choice +- `reject_once` - Reject this operation only this time +- `reject_always` - Reject this operation and remember the choice + + + +## Status + +Tool calls progress through different statuses during their lifecycle: + + + The tool call hasn't started running yet because the input is either streaming + or awaiting approval + + + + The tool call is currently running + + + + The tool call completed successfully + + +The tool call failed with an error + +## Content + +Tool calls can produce different types of content: + +### Regular Content + +Standard [content blocks](./content) like text, images, or resources: + +```json +{ + "type": "content", + "content": { + "type": "text", + "text": "Analysis complete. Found 3 issues." + } +} +``` + +### Diffs + +File modifications shown as diffs: + +```json +{ + "type": "diff", + "path": "/home/user/project/src/config.json", + "oldText": "{\n \"debug\": false\n}", + "newText": "{\n \"debug\": true\n}" +} +``` + + + The absolute file path being modified + + + + The original content (null for new files) + + + + The new content after modification + + +### Terminals + +Live terminal output from command execution: + +```json +{ + "type": "terminal", + "terminalId": "term_xyz789" +} +``` + + + The ID of a terminal created with `terminal/create` + + +When a terminal is embedded in a tool call, the Client displays live output as it's generated and continues to display it even after the terminal is released. + + + Learn more about Terminals + + +## Following the Agent + +Tool calls can report file locations they're working with, enabling Clients to implement "follow-along" features that track which files the Agent is accessing or modifying in real-time. + +```json +{ + "path": "/home/user/project/src/main.py", + "line": 42 +} +``` + + + The absolute file path being accessed or modified + + + + Optional line number within the file + diff --git a/docs/protocol/draft/transports.mdx b/docs/protocol/draft/transports.mdx new file mode 100644 index 000000000..274fdbdbb --- /dev/null +++ b/docs/protocol/draft/transports.mdx @@ -0,0 +1,52 @@ +--- +title: "Transports" +description: "Mechanisms for agents and clients to communicate with each other" +--- + +ACP uses JSON-RPC to encode messages. JSON-RPC messages **MUST** be UTF-8 encoded. + +The protocol currently defines the following transport mechanisms for agent-client communication: + +1. [stdio](#stdio), communication over standard in and standard out +2. _[Streamable HTTP](#streamable-http) (draft proposal in progress)_ + +Agents and clients **SHOULD** support stdio whenever possible. + +It is also possible for agents and clients to implement [custom transports](#custom-transports). + +## stdio + +In the **stdio** transport: + +- The client launches the agent as a subprocess. +- The agent reads JSON-RPC messages from its standard input (`stdin`) and sends messages to its standard output (`stdout`). +- Messages are individual JSON-RPC requests, notifications, or responses. +- Messages are delimited by newlines (`\n`), and **MUST NOT** contain embedded newlines. +- The agent **MAY** write UTF-8 strings to its standard error (`stderr`) for logging purposes. Clients **MAY** capture, forward, or ignore this logging. +- The agent **MUST NOT** write anything to its `stdout` that is not a valid ACP message. +- The client **MUST NOT** write anything to the agent's `stdin` that is not a valid ACP message. + +```mermaid +sequenceDiagram + participant Client + participant Agent Process + + Client->>+Agent Process: Launch subprocess + loop Message Exchange + Client->>Agent Process: Write to stdin + Agent Process->>Client: Write to stdout + Agent Process--)Client: Optional logs on stderr + end + Client->>Agent Process: Close stdin, terminate subprocess + deactivate Agent Process +``` + +## _Streamable HTTP_ + +_In discussion, draft proposal in progress._ + +## Custom Transports + +Agents and clients **MAY** implement additional custom transport mechanisms to suit their specific needs. The protocol is transport-agnostic and can be implemented over any communication channel that supports bidirectional message exchange. + +Implementers who choose to support custom transports **MUST** ensure they preserve the JSON-RPC message format and lifecycle requirements defined by ACP. Custom transports **SHOULD** document their specific connection establishment and message exchange patterns to aid interoperability. From e617072866f4f4b1e71b0f68856d142fbcddd804 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Wed, 20 May 2026 04:38:10 +0000 Subject: [PATCH 132/152] docs: update registry agents (#1262) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 4c7d0981a..1452b5d61 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -598,7 +598,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Code and build agents with comprehensive multi-provider support - **0.7.6**, + **0.7.7**,
Date: Wed, 20 May 2026 08:37:42 +0000 Subject: [PATCH 133/152] docs: update registry agents (#1263) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 1452b5d61..ffd2c4af1 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -135,7 +135,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.8**, + **3.0.9**, Date: Wed, 20 May 2026 15:57:21 +0000 Subject: [PATCH 134/152] docs: update registry agents (#1265) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index ffd2c4af1..cb5b5d001 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -751,7 +751,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Mistral's open-source coding assistant - **2.10.0**, + **2.10.1**, Date: Wed, 20 May 2026 22:46:24 +0000 Subject: [PATCH 135/152] docs: update registry agents (#1266) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index cb5b5d001..6a8a0d301 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -628,7 +628,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > GitHub's AI pair programmer - **1.0.50**, + **1.0.51**, Date: Thu, 21 May 2026 00:20:11 +0000 Subject: [PATCH 136/152] docs: update registry agents (#1267) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 6a8a0d301..8ea8d5d18 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -786,7 +786,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > The open source coding agent - **1.15.5**, + **1.15.6**, Date: Thu, 21 May 2026 11:04:38 +0200 Subject: [PATCH 137/152] docs: Add schema download note to schema page (#1269) --- docs/protocol/draft/schema-v2.mdx | 5 +++++ docs/protocol/draft/schema.mdx | 5 +++++ docs/protocol/schema.mdx | 5 +++++ src/bin/generate.rs | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index 8ae9dff84..e84a9dc9c 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -3,6 +3,11 @@ title: "Schema" description: "Schema definitions for the Agent Client Protocol" --- + + The schema file can be downloaded directly from the [latest GitHub + release](https://github.com/agentclientprotocol/agent-client-protocol/releases/latest/download/schema.json). + + ## Agent Defines the interface that all ACP-compliant agents must implement. diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index 8ae9dff84..e84a9dc9c 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -3,6 +3,11 @@ title: "Schema" description: "Schema definitions for the Agent Client Protocol" --- + + The schema file can be downloaded directly from the [latest GitHub + release](https://github.com/agentclientprotocol/agent-client-protocol/releases/latest/download/schema.json). + + ## Agent Defines the interface that all ACP-compliant agents must implement. diff --git a/docs/protocol/schema.mdx b/docs/protocol/schema.mdx index 56ea67374..4584fd470 100644 --- a/docs/protocol/schema.mdx +++ b/docs/protocol/schema.mdx @@ -3,6 +3,11 @@ title: "Schema" description: "Schema definitions for the Agent Client Protocol" --- + + The schema file can be downloaded directly from the [latest GitHub + release](https://github.com/agentclientprotocol/agent-client-protocol/releases/latest/download/schema.json). + + ## Agent Defines the interface that all ACP-compliant agents must implement. diff --git a/src/bin/generate.rs b/src/bin/generate.rs index 1639e413d..3155f6412 100644 --- a/src/bin/generate.rs +++ b/src/bin/generate.rs @@ -206,6 +206,12 @@ mod markdown_generator { .unwrap(); writeln!(&mut self.output, "---").unwrap(); writeln!(&mut self.output).unwrap(); + writeln!( + &mut self.output, + "The schema file can be downloaded directly from the [latest GitHub release](https://github.com/agentclientprotocol/agent-client-protocol/releases/latest/download/schema.json)." + ) + .unwrap(); + writeln!(&mut self.output).unwrap(); let mut agent_types: BTreeMap> = BTreeMap::new(); let mut client_types: BTreeMap> = BTreeMap::new(); From 4244a28b47aa2dd4c4f2a8820fe2868c89947356 Mon Sep 17 00:00:00 2001 From: Ben Brandt Date: Thu, 21 May 2026 11:08:05 +0200 Subject: [PATCH 138/152] ci: Skip feature powerset when Rust is unchanged (#1270) --- .github/workflows/ci.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6019f5e9e..d39423fb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -85,8 +85,44 @@ jobs: npm run generate git diff --exit-code || (echo "Generated files are out of date. Run 'npm run generate' and commit the changes." && exit 1) + rust-changes: + name: Detect Rust changes + runs-on: ubuntu-latest + outputs: + changed: ${{ steps.rust-changes.outputs.changed }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + with: + fetch-depth: 0 + persist-credentials: false + + - name: Check for Rust file changes + id: rust-changes + env: + EVENT_NAME: ${{ github.event_name }} + BASE_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }} + HEAD_SHA: ${{ github.sha }} + run: | + if [ "$EVENT_NAME" = "workflow_dispatch" ]; then + echo "changed=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + if [ "$BASE_SHA" = "0000000000000000000000000000000000000000" ]; then + echo "changed=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + if git diff --name-only "$BASE_SHA" "$HEAD_SHA" | grep -Eq '(^|/)(Cargo\.toml|Cargo\.lock)$|\.rs$'; then + echo "changed=true" >> "$GITHUB_OUTPUT" + else + echo "changed=false" >> "$GITHUB_OUTPUT" + fi + feature-powerset: name: Feature powerset (${{ matrix.partition }}) + needs: rust-changes + if: needs.rust-changes.outputs.changed == 'true' runs-on: ubuntu-latest timeout-minutes: 30 strategy: From 2a18ab276a23d7d2e4db3266549e40e163105120 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Thu, 21 May 2026 10:05:00 +0000 Subject: [PATCH 139/152] docs: update registry agents (#1271) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 8ea8d5d18..6dc7f67b1 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.129.0** + **0.130.0** Date: Thu, 21 May 2026 12:19:37 +0200 Subject: [PATCH 140/152] fix(unstable): Rename provider method types to singular (#1272) For set and disable, these only ever operate on one at a time. --- docs/protocol/draft/schema-v2.mdx | 8 ++-- docs/protocol/draft/schema.mdx | 8 ++-- docs/rfds/custom-llm-endpoint.mdx | 8 ++-- schema/schema.unstable.json | 24 +++++----- schema/schema.v2.unstable.json | 24 +++++----- src/bin/generate.rs | 4 +- src/v1/agent.rs | 44 ++++++++--------- src/v2/agent.rs | 44 ++++++++--------- src/v2/conversion.rs | 80 +++++++++++++++---------------- 9 files changed, 122 insertions(+), 122 deletions(-) diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index e84a9dc9c..fc6f502c7 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -726,7 +726,7 @@ This capability is not part of the spec yet, and may be removed or changed at an Disables a provider. -#### DisableProvidersRequest +#### DisableProviderRequest **UNSTABLE** @@ -750,7 +750,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Provider id to disable. -#### DisableProvidersResponse +#### DisableProviderResponse **UNSTABLE** @@ -834,7 +834,7 @@ This capability is not part of the spec yet, and may be removed or changed at an Replaces the configuration for a provider. -#### SetProvidersRequest +#### SetProviderRequest **UNSTABLE** @@ -870,7 +870,7 @@ May include authorization, routing, or other integration-specific headers. Provider id to configure. -#### SetProvidersResponse +#### SetProviderResponse **UNSTABLE** diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index e84a9dc9c..fc6f502c7 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -726,7 +726,7 @@ This capability is not part of the spec yet, and may be removed or changed at an Disables a provider. -#### DisableProvidersRequest +#### DisableProviderRequest **UNSTABLE** @@ -750,7 +750,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte Provider id to disable. -#### DisableProvidersResponse +#### DisableProviderResponse **UNSTABLE** @@ -834,7 +834,7 @@ This capability is not part of the spec yet, and may be removed or changed at an Replaces the configuration for a provider. -#### SetProvidersRequest +#### SetProviderRequest **UNSTABLE** @@ -870,7 +870,7 @@ May include authorization, routing, or other integration-specific headers. Provider id to configure. -#### SetProvidersResponse +#### SetProviderResponse **UNSTABLE** diff --git a/docs/rfds/custom-llm-endpoint.mdx b/docs/rfds/custom-llm-endpoint.mdx index 275e569df..222824c75 100644 --- a/docs/rfds/custom-llm-endpoint.mdx +++ b/docs/rfds/custom-llm-endpoint.mdx @@ -174,7 +174,7 @@ interface ProvidersListResponse { `providers/set` updates the full configuration for one provider id. ```typescript -interface ProvidersSetRequest { +interface SetProviderRequest { /** Provider id to configure. */ id: string; @@ -195,7 +195,7 @@ interface ProvidersSetRequest { _meta?: Record; } -interface ProvidersSetResponse { +interface SetProviderResponse { /** Extension metadata */ _meta?: Record; } @@ -204,7 +204,7 @@ interface ProvidersSetResponse { ### `providers/disable` ```typescript -interface ProvidersDisableRequest { +interface DisableProviderRequest { /** Provider id to disable. */ id: string; @@ -212,7 +212,7 @@ interface ProvidersDisableRequest { _meta?: Record; } -interface ProvidersDisableResponse { +interface DisableProviderResponse { /** Extension metadata */ _meta?: Record; } diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index ae15000ac..d88d9b556 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -376,18 +376,18 @@ { "allOf": [ { - "$ref": "#/$defs/SetProvidersResponse" + "$ref": "#/$defs/SetProviderResponse" } ], - "title": "SetProvidersResponse" + "title": "SetProviderResponse" }, { "allOf": [ { - "$ref": "#/$defs/DisableProvidersResponse" + "$ref": "#/$defs/DisableProviderResponse" } ], - "title": "DisableProvidersResponse" + "title": "DisableProviderResponse" }, { "allOf": [ @@ -1234,20 +1234,20 @@ { "allOf": [ { - "$ref": "#/$defs/SetProvidersRequest" + "$ref": "#/$defs/SetProviderRequest" } ], "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nReplaces the configuration for a provider.", - "title": "SetProvidersRequest" + "title": "SetProviderRequest" }, { "allOf": [ { - "$ref": "#/$defs/DisableProvidersRequest" + "$ref": "#/$defs/DisableProviderRequest" } ], "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nDisables a provider.", - "title": "DisableProvidersRequest" + "title": "DisableProviderRequest" }, { "allOf": [ @@ -2289,7 +2289,7 @@ "required": ["path", "newText"], "type": "object" }, - "DisableProvidersRequest": { + "DisableProviderRequest": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `providers/disable`.", "properties": { "_meta": { @@ -2307,7 +2307,7 @@ "x-method": "providers/disable", "x-side": "agent" }, - "DisableProvidersResponse": { + "DisableProviderResponse": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `providers/disable`.", "properties": { "_meta": { @@ -6382,7 +6382,7 @@ } ] }, - "SetProvidersRequest": { + "SetProviderRequest": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `providers/set`.\n\nReplaces the full configuration for one provider id.", "properties": { "_meta": { @@ -6419,7 +6419,7 @@ "x-method": "providers/set", "x-side": "agent" }, - "SetProvidersResponse": { + "SetProviderResponse": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `providers/set`.", "properties": { "_meta": { diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index ae15000ac..d88d9b556 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -376,18 +376,18 @@ { "allOf": [ { - "$ref": "#/$defs/SetProvidersResponse" + "$ref": "#/$defs/SetProviderResponse" } ], - "title": "SetProvidersResponse" + "title": "SetProviderResponse" }, { "allOf": [ { - "$ref": "#/$defs/DisableProvidersResponse" + "$ref": "#/$defs/DisableProviderResponse" } ], - "title": "DisableProvidersResponse" + "title": "DisableProviderResponse" }, { "allOf": [ @@ -1234,20 +1234,20 @@ { "allOf": [ { - "$ref": "#/$defs/SetProvidersRequest" + "$ref": "#/$defs/SetProviderRequest" } ], "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nReplaces the configuration for a provider.", - "title": "SetProvidersRequest" + "title": "SetProviderRequest" }, { "allOf": [ { - "$ref": "#/$defs/DisableProvidersRequest" + "$ref": "#/$defs/DisableProviderRequest" } ], "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nDisables a provider.", - "title": "DisableProvidersRequest" + "title": "DisableProviderRequest" }, { "allOf": [ @@ -2289,7 +2289,7 @@ "required": ["path", "newText"], "type": "object" }, - "DisableProvidersRequest": { + "DisableProviderRequest": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `providers/disable`.", "properties": { "_meta": { @@ -2307,7 +2307,7 @@ "x-method": "providers/disable", "x-side": "agent" }, - "DisableProvidersResponse": { + "DisableProviderResponse": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `providers/disable`.", "properties": { "_meta": { @@ -6382,7 +6382,7 @@ } ] }, - "SetProvidersRequest": { + "SetProviderRequest": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for `providers/set`.\n\nReplaces the full configuration for one provider id.", "properties": { "_meta": { @@ -6419,7 +6419,7 @@ "x-method": "providers/set", "x-side": "agent" }, - "SetProvidersResponse": { + "SetProviderResponse": { "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to `providers/set`.", "properties": { "_meta": { diff --git a/src/bin/generate.rs b/src/bin/generate.rs index 3155f6412..a68085f4b 100644 --- a/src/bin/generate.rs +++ b/src/bin/generate.rs @@ -1170,8 +1170,8 @@ starting with '$/' it is free to ignore the notification." "initialize" => self.agent.get("InitializeRequest").unwrap(), "authenticate" => self.agent.get("AuthenticateRequest").unwrap(), "providers/list" => self.agent.get("ListProvidersRequest").unwrap(), - "providers/set" => self.agent.get("SetProvidersRequest").unwrap(), - "providers/disable" => self.agent.get("DisableProvidersRequest").unwrap(), + "providers/set" => self.agent.get("SetProviderRequest").unwrap(), + "providers/disable" => self.agent.get("DisableProviderRequest").unwrap(), "session/new" => self.agent.get("NewSessionRequest").unwrap(), "session/load" => self.agent.get("LoadSessionRequest").unwrap(), "session/list" => self.agent.get("ListSessionsRequest").unwrap(), diff --git a/src/v1/agent.rs b/src/v1/agent.rs index f824cfa26..a52cb95c5 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -3814,7 +3814,7 @@ impl ListProvidersResponse { #[schemars(extend("x-side" = "agent", "x-method" = PROVIDERS_SET_METHOD_NAME))] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct SetProvidersRequest { +pub struct SetProviderRequest { /// Provider id to configure. pub id: String, /// Protocol type for this provider. @@ -3835,7 +3835,7 @@ pub struct SetProvidersRequest { } #[cfg(feature = "unstable_llm_providers")] -impl SetProvidersRequest { +impl SetProviderRequest { #[must_use] pub fn new(id: impl Into, api_type: LlmProtocol, base_url: impl Into) -> Self { Self { @@ -3878,7 +3878,7 @@ impl SetProvidersRequest { #[schemars(extend("x-side" = "agent", "x-method" = PROVIDERS_SET_METHOD_NAME))] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct SetProvidersResponse { +pub struct SetProviderResponse { /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -3889,7 +3889,7 @@ pub struct SetProvidersResponse { } #[cfg(feature = "unstable_llm_providers")] -impl SetProvidersResponse { +impl SetProviderResponse { #[must_use] pub fn new() -> Self { Self::default() @@ -3918,7 +3918,7 @@ impl SetProvidersResponse { #[schemars(extend("x-side" = "agent", "x-method" = PROVIDERS_DISABLE_METHOD_NAME))] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct DisableProvidersRequest { +pub struct DisableProviderRequest { /// Provider id to disable. pub id: String, /// The _meta property is reserved by ACP to allow clients and agents to attach additional @@ -3931,7 +3931,7 @@ pub struct DisableProvidersRequest { } #[cfg(feature = "unstable_llm_providers")] -impl DisableProvidersRequest { +impl DisableProviderRequest { #[must_use] pub fn new(id: impl Into) -> Self { Self { @@ -3963,7 +3963,7 @@ impl DisableProvidersRequest { #[schemars(extend("x-side" = "agent", "x-method" = PROVIDERS_DISABLE_METHOD_NAME))] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct DisableProvidersResponse { +pub struct DisableProviderResponse { /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -3974,7 +3974,7 @@ pub struct DisableProvidersResponse { } #[cfg(feature = "unstable_llm_providers")] -impl DisableProvidersResponse { +impl DisableProviderResponse { #[must_use] pub fn new() -> Self { Self::default() @@ -4952,14 +4952,14 @@ pub enum ClientRequest { /// /// Replaces the configuration for a provider. #[cfg(feature = "unstable_llm_providers")] - SetProvidersRequest(SetProvidersRequest), + SetProviderRequest(SetProviderRequest), /// **UNSTABLE** /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// /// Disables a provider. #[cfg(feature = "unstable_llm_providers")] - DisableProvidersRequest(DisableProvidersRequest), + DisableProviderRequest(DisableProviderRequest), /// **UNSTABLE** /// /// This capability is not part of the spec yet, and may be removed or changed at any point. @@ -5121,9 +5121,9 @@ impl ClientRequest { #[cfg(feature = "unstable_llm_providers")] Self::ListProvidersRequest(_) => AGENT_METHOD_NAMES.providers_list, #[cfg(feature = "unstable_llm_providers")] - Self::SetProvidersRequest(_) => AGENT_METHOD_NAMES.providers_set, + Self::SetProviderRequest(_) => AGENT_METHOD_NAMES.providers_set, #[cfg(feature = "unstable_llm_providers")] - Self::DisableProvidersRequest(_) => AGENT_METHOD_NAMES.providers_disable, + Self::DisableProviderRequest(_) => AGENT_METHOD_NAMES.providers_disable, #[cfg(feature = "unstable_logout")] Self::LogoutRequest(_) => AGENT_METHOD_NAMES.logout, Self::NewSessionRequest(_) => AGENT_METHOD_NAMES.session_new, @@ -5170,9 +5170,9 @@ pub enum AgentResponse { #[cfg(feature = "unstable_llm_providers")] ListProvidersResponse(ListProvidersResponse), #[cfg(feature = "unstable_llm_providers")] - SetProvidersResponse(#[serde(default)] SetProvidersResponse), + SetProviderResponse(#[serde(default)] SetProviderResponse), #[cfg(feature = "unstable_llm_providers")] - DisableProvidersResponse(#[serde(default)] DisableProvidersResponse), + DisableProviderResponse(#[serde(default)] DisableProviderResponse), #[cfg(feature = "unstable_logout")] LogoutResponse(#[serde(default)] LogoutResponse), NewSessionResponse(NewSessionResponse), @@ -6429,14 +6429,14 @@ mod test_serialization { #[cfg(feature = "unstable_llm_providers")] #[test] - fn test_set_providers_request_serialization() { + fn test_set_provider_request_serialization() { use std::collections::HashMap; let mut headers = HashMap::new(); headers.insert("Authorization".to_string(), "Bearer sk-test".to_string()); let request = - SetProvidersRequest::new("main", LlmProtocol::OpenAi, "https://api.openai.com/v1") + SetProviderRequest::new("main", LlmProtocol::OpenAi, "https://api.openai.com/v1") .headers(headers); let json = serde_json::to_value(&request).unwrap(); @@ -6452,7 +6452,7 @@ mod test_serialization { }) ); - let deserialized: SetProvidersRequest = serde_json::from_value(json).unwrap(); + let deserialized: SetProviderRequest = serde_json::from_value(json).unwrap(); assert_eq!(deserialized.id, "main"); assert_eq!(deserialized.api_type, LlmProtocol::OpenAi); assert_eq!(deserialized.base_url, "https://api.openai.com/v1"); @@ -6465,9 +6465,9 @@ mod test_serialization { #[cfg(feature = "unstable_llm_providers")] #[test] - fn test_set_providers_request_omits_empty_headers() { + fn test_set_provider_request_omits_empty_headers() { let request = - SetProvidersRequest::new("main", LlmProtocol::Anthropic, "https://api.anthropic.com"); + SetProviderRequest::new("main", LlmProtocol::Anthropic, "https://api.anthropic.com"); let json = serde_json::to_value(&request).unwrap(); // headers should be omitted when empty @@ -6476,13 +6476,13 @@ mod test_serialization { #[cfg(feature = "unstable_llm_providers")] #[test] - fn test_disable_providers_request_serialization() { - let request = DisableProvidersRequest::new("secondary"); + fn test_disable_provider_request_serialization() { + let request = DisableProviderRequest::new("secondary"); let json = serde_json::to_value(&request).unwrap(); assert_eq!(json, json!({ "id": "secondary" })); - let deserialized: DisableProvidersRequest = serde_json::from_value(json).unwrap(); + let deserialized: DisableProviderRequest = serde_json::from_value(json).unwrap(); assert_eq!(deserialized.id, "secondary"); } diff --git a/src/v2/agent.rs b/src/v2/agent.rs index a915111e3..1096410a1 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -3814,7 +3814,7 @@ impl ListProvidersResponse { #[schemars(extend("x-side" = "agent", "x-method" = PROVIDERS_SET_METHOD_NAME))] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct SetProvidersRequest { +pub struct SetProviderRequest { /// Provider id to configure. pub id: String, /// Protocol type for this provider. @@ -3835,7 +3835,7 @@ pub struct SetProvidersRequest { } #[cfg(feature = "unstable_llm_providers")] -impl SetProvidersRequest { +impl SetProviderRequest { #[must_use] pub fn new(id: impl Into, api_type: LlmProtocol, base_url: impl Into) -> Self { Self { @@ -3878,7 +3878,7 @@ impl SetProvidersRequest { #[schemars(extend("x-side" = "agent", "x-method" = PROVIDERS_SET_METHOD_NAME))] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct SetProvidersResponse { +pub struct SetProviderResponse { /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -3889,7 +3889,7 @@ pub struct SetProvidersResponse { } #[cfg(feature = "unstable_llm_providers")] -impl SetProvidersResponse { +impl SetProviderResponse { #[must_use] pub fn new() -> Self { Self::default() @@ -3918,7 +3918,7 @@ impl SetProvidersResponse { #[schemars(extend("x-side" = "agent", "x-method" = PROVIDERS_DISABLE_METHOD_NAME))] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct DisableProvidersRequest { +pub struct DisableProviderRequest { /// Provider id to disable. pub id: String, /// The _meta property is reserved by ACP to allow clients and agents to attach additional @@ -3931,7 +3931,7 @@ pub struct DisableProvidersRequest { } #[cfg(feature = "unstable_llm_providers")] -impl DisableProvidersRequest { +impl DisableProviderRequest { #[must_use] pub fn new(id: impl Into) -> Self { Self { @@ -3963,7 +3963,7 @@ impl DisableProvidersRequest { #[schemars(extend("x-side" = "agent", "x-method" = PROVIDERS_DISABLE_METHOD_NAME))] #[serde(rename_all = "camelCase")] #[non_exhaustive] -pub struct DisableProvidersResponse { +pub struct DisableProviderResponse { /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -3974,7 +3974,7 @@ pub struct DisableProvidersResponse { } #[cfg(feature = "unstable_llm_providers")] -impl DisableProvidersResponse { +impl DisableProviderResponse { #[must_use] pub fn new() -> Self { Self::default() @@ -4952,14 +4952,14 @@ pub enum ClientRequest { /// /// Replaces the configuration for a provider. #[cfg(feature = "unstable_llm_providers")] - SetProvidersRequest(SetProvidersRequest), + SetProviderRequest(SetProviderRequest), /// **UNSTABLE** /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// /// Disables a provider. #[cfg(feature = "unstable_llm_providers")] - DisableProvidersRequest(DisableProvidersRequest), + DisableProviderRequest(DisableProviderRequest), /// **UNSTABLE** /// /// This capability is not part of the spec yet, and may be removed or changed at any point. @@ -5121,9 +5121,9 @@ impl ClientRequest { #[cfg(feature = "unstable_llm_providers")] Self::ListProvidersRequest(_) => AGENT_METHOD_NAMES.providers_list, #[cfg(feature = "unstable_llm_providers")] - Self::SetProvidersRequest(_) => AGENT_METHOD_NAMES.providers_set, + Self::SetProviderRequest(_) => AGENT_METHOD_NAMES.providers_set, #[cfg(feature = "unstable_llm_providers")] - Self::DisableProvidersRequest(_) => AGENT_METHOD_NAMES.providers_disable, + Self::DisableProviderRequest(_) => AGENT_METHOD_NAMES.providers_disable, #[cfg(feature = "unstable_logout")] Self::LogoutRequest(_) => AGENT_METHOD_NAMES.logout, Self::NewSessionRequest(_) => AGENT_METHOD_NAMES.session_new, @@ -5170,9 +5170,9 @@ pub enum AgentResponse { #[cfg(feature = "unstable_llm_providers")] ListProvidersResponse(ListProvidersResponse), #[cfg(feature = "unstable_llm_providers")] - SetProvidersResponse(#[serde(default)] SetProvidersResponse), + SetProviderResponse(#[serde(default)] SetProviderResponse), #[cfg(feature = "unstable_llm_providers")] - DisableProvidersResponse(#[serde(default)] DisableProvidersResponse), + DisableProviderResponse(#[serde(default)] DisableProviderResponse), #[cfg(feature = "unstable_logout")] LogoutResponse(#[serde(default)] LogoutResponse), NewSessionResponse(NewSessionResponse), @@ -6351,14 +6351,14 @@ mod test_serialization { #[cfg(feature = "unstable_llm_providers")] #[test] - fn test_set_providers_request_serialization() { + fn test_set_provider_request_serialization() { use std::collections::HashMap; let mut headers = HashMap::new(); headers.insert("Authorization".to_string(), "Bearer sk-test".to_string()); let request = - SetProvidersRequest::new("main", LlmProtocol::OpenAi, "https://api.openai.com/v1") + SetProviderRequest::new("main", LlmProtocol::OpenAi, "https://api.openai.com/v1") .headers(headers); let json = serde_json::to_value(&request).unwrap(); @@ -6374,7 +6374,7 @@ mod test_serialization { }) ); - let deserialized: SetProvidersRequest = serde_json::from_value(json).unwrap(); + let deserialized: SetProviderRequest = serde_json::from_value(json).unwrap(); assert_eq!(deserialized.id, "main"); assert_eq!(deserialized.api_type, LlmProtocol::OpenAi); assert_eq!(deserialized.base_url, "https://api.openai.com/v1"); @@ -6387,9 +6387,9 @@ mod test_serialization { #[cfg(feature = "unstable_llm_providers")] #[test] - fn test_set_providers_request_omits_empty_headers() { + fn test_set_provider_request_omits_empty_headers() { let request = - SetProvidersRequest::new("main", LlmProtocol::Anthropic, "https://api.anthropic.com"); + SetProviderRequest::new("main", LlmProtocol::Anthropic, "https://api.anthropic.com"); let json = serde_json::to_value(&request).unwrap(); // headers should be omitted when empty @@ -6398,13 +6398,13 @@ mod test_serialization { #[cfg(feature = "unstable_llm_providers")] #[test] - fn test_disable_providers_request_serialization() { - let request = DisableProvidersRequest::new("secondary"); + fn test_disable_provider_request_serialization() { + let request = DisableProviderRequest::new("secondary"); let json = serde_json::to_value(&request).unwrap(); assert_eq!(json, json!({ "id": "secondary" })); - let deserialized: DisableProvidersRequest = serde_json::from_value(json).unwrap(); + let deserialized: DisableProviderRequest = serde_json::from_value(json).unwrap(); assert_eq!(deserialized.id, "secondary"); } diff --git a/src/v2/conversion.rs b/src/v2/conversion.rs index 033da1da2..f1c31102b 100644 --- a/src/v2/conversion.rs +++ b/src/v2/conversion.rs @@ -5083,8 +5083,8 @@ impl IntoV2 for crate::v1::ListProvidersResponse { } #[cfg(feature = "unstable_llm_providers")] -impl IntoV1 for super::SetProvidersRequest { - type Output = crate::v1::SetProvidersRequest; +impl IntoV1 for super::SetProviderRequest { + type Output = crate::v1::SetProviderRequest; fn into_v1(self) -> Result { let Self { @@ -5094,7 +5094,7 @@ impl IntoV1 for super::SetProvidersRequest { headers, meta, } = self; - Ok(crate::v1::SetProvidersRequest { + Ok(crate::v1::SetProviderRequest { id: id.into_v1()?, api_type: api_type.into_v1()?, base_url: base_url.into_v1()?, @@ -5105,8 +5105,8 @@ impl IntoV1 for super::SetProvidersRequest { } #[cfg(feature = "unstable_llm_providers")] -impl IntoV2 for crate::v1::SetProvidersRequest { - type Output = super::SetProvidersRequest; +impl IntoV2 for crate::v1::SetProviderRequest { + type Output = super::SetProviderRequest; fn into_v2(self) -> Result { let Self { @@ -5116,7 +5116,7 @@ impl IntoV2 for crate::v1::SetProvidersRequest { headers, meta, } = self; - Ok(super::SetProvidersRequest { + Ok(super::SetProviderRequest { id: id.into_v2()?, api_type: api_type.into_v2()?, base_url: base_url.into_v2()?, @@ -5127,36 +5127,36 @@ impl IntoV2 for crate::v1::SetProvidersRequest { } #[cfg(feature = "unstable_llm_providers")] -impl IntoV1 for super::SetProvidersResponse { - type Output = crate::v1::SetProvidersResponse; +impl IntoV1 for super::SetProviderResponse { + type Output = crate::v1::SetProviderResponse; fn into_v1(self) -> Result { let Self { meta } = self; - Ok(crate::v1::SetProvidersResponse { + Ok(crate::v1::SetProviderResponse { meta: meta.into_v1()?, }) } } #[cfg(feature = "unstable_llm_providers")] -impl IntoV2 for crate::v1::SetProvidersResponse { - type Output = super::SetProvidersResponse; +impl IntoV2 for crate::v1::SetProviderResponse { + type Output = super::SetProviderResponse; fn into_v2(self) -> Result { let Self { meta } = self; - Ok(super::SetProvidersResponse { + Ok(super::SetProviderResponse { meta: meta.into_v2()?, }) } } #[cfg(feature = "unstable_llm_providers")] -impl IntoV1 for super::DisableProvidersRequest { - type Output = crate::v1::DisableProvidersRequest; +impl IntoV1 for super::DisableProviderRequest { + type Output = crate::v1::DisableProviderRequest; fn into_v1(self) -> Result { let Self { id, meta } = self; - Ok(crate::v1::DisableProvidersRequest { + Ok(crate::v1::DisableProviderRequest { id: id.into_v1()?, meta: meta.into_v1()?, }) @@ -5164,12 +5164,12 @@ impl IntoV1 for super::DisableProvidersRequest { } #[cfg(feature = "unstable_llm_providers")] -impl IntoV2 for crate::v1::DisableProvidersRequest { - type Output = super::DisableProvidersRequest; +impl IntoV2 for crate::v1::DisableProviderRequest { + type Output = super::DisableProviderRequest; fn into_v2(self) -> Result { let Self { id, meta } = self; - Ok(super::DisableProvidersRequest { + Ok(super::DisableProviderRequest { id: id.into_v2()?, meta: meta.into_v2()?, }) @@ -5177,24 +5177,24 @@ impl IntoV2 for crate::v1::DisableProvidersRequest { } #[cfg(feature = "unstable_llm_providers")] -impl IntoV1 for super::DisableProvidersResponse { - type Output = crate::v1::DisableProvidersResponse; +impl IntoV1 for super::DisableProviderResponse { + type Output = crate::v1::DisableProviderResponse; fn into_v1(self) -> Result { let Self { meta } = self; - Ok(crate::v1::DisableProvidersResponse { + Ok(crate::v1::DisableProviderResponse { meta: meta.into_v1()?, }) } } #[cfg(feature = "unstable_llm_providers")] -impl IntoV2 for crate::v1::DisableProvidersResponse { - type Output = super::DisableProvidersResponse; +impl IntoV2 for crate::v1::DisableProviderResponse { + type Output = super::DisableProviderResponse; fn into_v2(self) -> Result { let Self { meta } = self; - Ok(super::DisableProvidersResponse { + Ok(super::DisableProviderResponse { meta: meta.into_v2()?, }) } @@ -5594,12 +5594,12 @@ impl IntoV1 for super::ClientRequest { crate::v1::ClientRequest::ListProvidersRequest(value.into_v1()?) } #[cfg(feature = "unstable_llm_providers")] - Self::SetProvidersRequest(value) => { - crate::v1::ClientRequest::SetProvidersRequest(value.into_v1()?) + Self::SetProviderRequest(value) => { + crate::v1::ClientRequest::SetProviderRequest(value.into_v1()?) } #[cfg(feature = "unstable_llm_providers")] - Self::DisableProvidersRequest(value) => { - crate::v1::ClientRequest::DisableProvidersRequest(value.into_v1()?) + Self::DisableProviderRequest(value) => { + crate::v1::ClientRequest::DisableProviderRequest(value.into_v1()?) } #[cfg(feature = "unstable_logout")] Self::LogoutRequest(value) => crate::v1::ClientRequest::LogoutRequest(value.into_v1()?), @@ -5676,12 +5676,12 @@ impl IntoV2 for crate::v1::ClientRequest { super::ClientRequest::ListProvidersRequest(value.into_v2()?) } #[cfg(feature = "unstable_llm_providers")] - Self::SetProvidersRequest(value) => { - super::ClientRequest::SetProvidersRequest(value.into_v2()?) + Self::SetProviderRequest(value) => { + super::ClientRequest::SetProviderRequest(value.into_v2()?) } #[cfg(feature = "unstable_llm_providers")] - Self::DisableProvidersRequest(value) => { - super::ClientRequest::DisableProvidersRequest(value.into_v2()?) + Self::DisableProviderRequest(value) => { + super::ClientRequest::DisableProviderRequest(value.into_v2()?) } #[cfg(feature = "unstable_logout")] Self::LogoutRequest(value) => super::ClientRequest::LogoutRequest(value.into_v2()?), @@ -5754,12 +5754,12 @@ impl IntoV1 for super::AgentResponse { crate::v1::AgentResponse::ListProvidersResponse(value.into_v1()?) } #[cfg(feature = "unstable_llm_providers")] - Self::SetProvidersResponse(value) => { - crate::v1::AgentResponse::SetProvidersResponse(value.into_v1()?) + Self::SetProviderResponse(value) => { + crate::v1::AgentResponse::SetProviderResponse(value.into_v1()?) } #[cfg(feature = "unstable_llm_providers")] - Self::DisableProvidersResponse(value) => { - crate::v1::AgentResponse::DisableProvidersResponse(value.into_v1()?) + Self::DisableProviderResponse(value) => { + crate::v1::AgentResponse::DisableProviderResponse(value.into_v1()?) } #[cfg(feature = "unstable_logout")] Self::LogoutResponse(value) => { @@ -5840,12 +5840,12 @@ impl IntoV2 for crate::v1::AgentResponse { super::AgentResponse::ListProvidersResponse(value.into_v2()?) } #[cfg(feature = "unstable_llm_providers")] - Self::SetProvidersResponse(value) => { - super::AgentResponse::SetProvidersResponse(value.into_v2()?) + Self::SetProviderResponse(value) => { + super::AgentResponse::SetProviderResponse(value.into_v2()?) } #[cfg(feature = "unstable_llm_providers")] - Self::DisableProvidersResponse(value) => { - super::AgentResponse::DisableProvidersResponse(value.into_v2()?) + Self::DisableProviderResponse(value) => { + super::AgentResponse::DisableProviderResponse(value.into_v2()?) } #[cfg(feature = "unstable_logout")] Self::LogoutResponse(value) => super::AgentResponse::LogoutResponse(value.into_v2()?), From b901c33e6871dc4ab2c8a3ba2d3694a527578d24 Mon Sep 17 00:00:00 2001 From: Naman Rajpal Date: Thu, 21 May 2026 05:40:03 -0700 Subject: [PATCH 141/152] docs: add ACP to AG-UI connector to clients list (#1268) ACP to AG-UI is a protocol bridge that connects any ACP-compatible agent to web frontends via AG-UI events over SSE. Tested with Kiro CLI and Claude Agent ACP, supports CopilotKit, AG-UI HttpAgent, and custom UI integrations. Co-authored-by: Naman Rajpal --- docs/get-started/clients.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/get-started/clients.mdx b/docs/get-started/clients.mdx index 9c0984f02..3ca9e71de 100644 --- a/docs/get-started/clients.mdx +++ b/docs/get-started/clients.mdx @@ -91,6 +91,7 @@ These frameworks add ACP support through dedicated integrations or adapters: These connectors bridge ACP into other environments and transport layers: +- [ACP to AG-UI](https://github.com/namanrajpal/acp-to-agui) — bridges any ACP agent to web frontends via [AG-UI](https://docs.ag-ui.com) events over SSE; works with CopilotKit, AG-UI HttpAgent, or custom UIs (Web) - [AgentRQ](https://github.com/agentrq/acp-gateway) — bridges stdio-based ACP agents to the AgentRQ - Human-in-the-loop task collaboration service using MCP server. - [Aptove Bridge](https://github.com/aptove/bridge) — bridges stdio-based ACP agents to the Aptove mobile client over WebSocket - [OpenClaw](https://docs.openclaw.ai/cli/acp) — through the [`openclaw acp`](https://docs.openclaw.ai/cli/acp) bridge to an OpenClaw Gateway From 33f6a9b2e7624271acbc269bd566cb8b260c76a1 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Thu, 21 May 2026 13:34:16 +0000 Subject: [PATCH 142/152] docs: update registry agents (#1274) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 6dc7f67b1..8773dfd1f 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -841,7 +841,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Alibaba's Qwen coding assistant - **0.15.11**, + **0.16.0**, Date: Thu, 21 May 2026 16:51:32 +0000 Subject: [PATCH 143/152] docs: update registry agents (#1275) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 8773dfd1f..d03e2fdee 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -151,7 +151,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Tencent Cloud's official intelligent coding tool - **2.97.3** + **2.97.4** Cursor's coding agent - **2026.05.09** + **2026.05.20** The open source coding agent - **1.15.6**, + **1.15.7**, Date: Thu, 21 May 2026 20:51:38 +0200 Subject: [PATCH 144/152] docs(rfd): Move additional directories RFD to Preview (#1276) --- docs/docs.json | 7 +++++-- docs/protocol/draft/file-system.mdx | 2 +- docs/protocol/draft/schema-v2.mdx | 15 ++++++++------- docs/protocol/draft/schema.mdx | 15 ++++++++------- docs/protocol/draft/session-list.mdx | 13 +++++++------ docs/rfds/additional-directories.mdx | 11 ++++++----- docs/rfds/updates.mdx | 7 +++++++ schema/schema.unstable.json | 6 +++--- schema/schema.v2.unstable.json | 6 +++--- src/v1/agent.rs | 20 +++++++++++--------- src/v2/agent.rs | 20 +++++++++++--------- 11 files changed, 70 insertions(+), 52 deletions(-) diff --git a/docs/docs.json b/docs/docs.json index dc0fc8d27..c95f7cfc8 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -139,7 +139,6 @@ "rfds/boolean-config-option", "rfds/elicitation", "rfds/next-edit-suggestions", - "rfds/additional-directories", "rfds/custom-llm-endpoint", "rfds/model-config-category", { @@ -156,7 +155,11 @@ }, { "group": "Preview", - "pages": ["rfds/rust-sdk-v1", "rfds/logout-method"] + "pages": [ + "rfds/rust-sdk-v1", + "rfds/logout-method", + "rfds/additional-directories" + ] }, { "group": "Completed", diff --git a/docs/protocol/draft/file-system.mdx b/docs/protocol/draft/file-system.mdx index 5eafdba1e..d11ff2f51 100644 --- a/docs/protocol/draft/file-system.mdx +++ b/docs/protocol/draft/file-system.mdx @@ -13,7 +13,7 @@ authorize those paths against the session's effective root set. - by default, the effective root set is just `cwd` - if the unstable `sessionCapabilities.additionalDirectories` capability is in use, the effective root set becomes `[cwd, ...additionalDirectories]` - `cwd` remains the base for relative paths; additional roots only expand filesystem scope -- when a Client discovers a session through `session/list`, it SHOULD use `SessionInfo.additionalDirectories` together with `cwd` as the current root set when the field is present; if omitted, the Agent is not reporting additional-root state, and any later `session/load` or `session/resume` request establishes the root set explicitly +- when a Client discovers a session through `session/list`, it SHOULD use `cwd` together with any `SessionInfo.additionalDirectories` entries returned for that session as the reported root set; omitted and empty values report no additional roots, and any later `session/load` or `session/resume` request establishes the root set explicitly Because ACP filesystem methods are client-mediated, the Client remains responsible for enforcing those root boundaries. diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index fc6f502c7..155d074f2 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -6528,8 +6528,8 @@ Capabilities for additional session directories support. By supplying `\{\}` it means that the agent supports the `additionalDirectories` field on supported session lifecycle requests. Agents that also support -`session/list` may return `SessionInfo.additionalDirectories` when they track -that state. +`session/list` may return `SessionInfo.additionalDirectories` to report the +complete ordered additional-root list associated with a listed session. **Type:** Object @@ -6576,7 +6576,8 @@ This capability is not part of the spec yet, and may be removed or changed at an Whether the agent supports `additionalDirectories` on supported session lifecycle requests. Agents that also support `session/list` may return -`SessionInfo.additionalDirectories` when they track that state. +`SessionInfo.additionalDirectories` to report the complete ordered +additional-root list associated with a listed session. SessionCloseCapabilities | null} > @@ -6934,11 +6935,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. -Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. +Additional workspace roots reported for this session. Each path must be absolute. -Agents may omit this field when they do not track or surface additional-root -state. When present, this is the complete additional-root list known to -the Agent for the session. +When present, this is the complete ordered additional-root list reported +by the Agent. Omitted and empty values are equivalent: the response +reports no additional roots. diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index fc6f502c7..155d074f2 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -6528,8 +6528,8 @@ Capabilities for additional session directories support. By supplying `\{\}` it means that the agent supports the `additionalDirectories` field on supported session lifecycle requests. Agents that also support -`session/list` may return `SessionInfo.additionalDirectories` when they track -that state. +`session/list` may return `SessionInfo.additionalDirectories` to report the +complete ordered additional-root list associated with a listed session. **Type:** Object @@ -6576,7 +6576,8 @@ This capability is not part of the spec yet, and may be removed or changed at an Whether the agent supports `additionalDirectories` on supported session lifecycle requests. Agents that also support `session/list` may return -`SessionInfo.additionalDirectories` when they track that state. +`SessionInfo.additionalDirectories` to report the complete ordered +additional-root list associated with a listed session. SessionCloseCapabilities | null} > @@ -6934,11 +6935,11 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte This capability is not part of the spec yet, and may be removed or changed at any point. -Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. +Additional workspace roots reported for this session. Each path must be absolute. -Agents may omit this field when they do not track or surface additional-root -state. When present, this is the complete additional-root list known to -the Agent for the session. +When present, this is the complete ordered additional-root list reported +by the Agent. Omitted and empty values are equivalent: the response +reports no additional roots. diff --git a/docs/protocol/draft/session-list.mdx b/docs/protocol/draft/session-list.mdx index 8b2a9e7a9..6f9e5701a 100644 --- a/docs/protocol/draft/session-list.mdx +++ b/docs/protocol/draft/session-list.mdx @@ -56,7 +56,8 @@ If `sessionCapabilities.list` is not present, the Agent does not support listing If the Agent also advertises the unstable `sessionCapabilities.additionalDirectories` capability, returned `SessionInfo` - objects may include `additionalDirectories` when the Agent tracks that state. + objects may include `additionalDirectories` to report additional workspace + roots for listed sessions. @@ -140,11 +141,11 @@ The Agent **MUST** respond with a list of sessions and optional pagination metad If the Agent advertises `sessionCapabilities.additionalDirectories`, it - MAY include this field when it tracks additional-root state for the - session. When present, this is the complete ordered additional-root list - known to the Agent for that session. Omitting the field means the Agent is - not reporting additional-root state; an explicit empty array means the - Agent is reporting no additional roots. + MAY include this field to report the complete ordered additional-root list + associated with the listed session. Omitted and empty values are + equivalent: this `SessionInfo` response reports no additional roots. + Clients MUST NOT merge this field with prior values or infer additional + roots from agent-specific state. diff --git a/docs/rfds/additional-directories.mdx b/docs/rfds/additional-directories.mdx index 7c5307d64..0f65bfaf7 100644 --- a/docs/rfds/additional-directories.mdx +++ b/docs/rfds/additional-directories.mdx @@ -54,7 +54,7 @@ The proposal is scoped to session lifecycle requests, session discovery requests Agents advertise support with `sessionCapabilities.additionalDirectories`. Clients MUST gate usage on that capability. -This proposal also allows Agents to include `additionalDirectories` in `SessionInfo` returned by `session/list` when they track that state. Because Agents are not required to persist additional-root metadata, Clients treat `SessionInfo.additionalDirectories` as optional discovery metadata rather than required session state. `session/load` and `session/resume` remain explicit-list only: omitting `additionalDirectories` or supplying an empty array means no additional roots are activated for the resulting session, while a non-empty array-valued `additionalDirectories` becomes the complete resulting additional-root list for that request. Clients MAY change the additional-root list on `session/load` or `session/resume` from any previously used or reported list, as long as the request `cwd` matches the session's `cwd` and the Agent accepts the requested roots. +This proposal also allows Agents to include `additionalDirectories` in `SessionInfo` returned by `session/list`. Because Agents are not required to persist additional-root metadata, Clients treat `SessionInfo.additionalDirectories` as optional discovery metadata rather than required session state. `session/load` and `session/resume` remain explicit-list only: omitting `additionalDirectories` or supplying an empty array means no additional roots are activated for the resulting session, while a non-empty array-valued `additionalDirectories` becomes the complete resulting additional-root list for that request. Clients MAY change the additional-root list on `session/load` or `session/resume` from any previously used or reported list, as long as the request `cwd` matches the session's `cwd` and the Agent accepts the requested roots. ## Shiny future @@ -111,11 +111,11 @@ additionalDirectories?: {} Clients MUST send `additionalDirectories` only when `sessionCapabilities.additionalDirectories` is present. -If an Agent advertises `sessionCapabilities.additionalDirectories` and also supports `session/list`, it MAY include `SessionInfo.additionalDirectories` for sessions whose additional-root state it tracks. When present, the value is the complete ordered additional-root list known to the Agent for that session. Agents MAY omit the field when they do not track or choose not to surface additional-root state. Clients MUST NOT treat an omitted field as proof that the session has no additional roots; an explicit empty array means the Agent is reporting no additional roots for that session. +If an Agent advertises `sessionCapabilities.additionalDirectories` and also supports `session/list`, it MAY include `SessionInfo.additionalDirectories` to report the complete ordered additional-root list associated with a listed session. Omitted and empty values are equivalent: the `SessionInfo` response reports no additional roots. Clients MUST NOT merge this field with prior values or infer additional roots from agent-specific state. `ListSessionsRequest` is not extended with `additionalDirectories`. `session/list` filtering remains defined around existing list parameters such as `cwd`; Clients that need to find sessions by additional-root state can filter locally when Agents return `SessionInfo.additionalDirectories`. -If adopted, the session-setup, session-list, and filesystem documentation will need corresponding updates so they describe the effective root set rather than `cwd` alone as the session filesystem context or boundary. +The session-setup, session-list, and filesystem documentation describe the effective root set rather than `cwd` alone as the session filesystem context or boundary. ### Capability advertisement example @@ -281,7 +281,7 @@ A client that sends `additionalDirectories`: - SHOULD remove exact duplicate path strings and entries identical to `cwd` before sending; and - MUST NOT assume an agent will infer extra roots from project metadata, directory conventions, or prior session state. -If a client mediates filesystem access through ACP client capabilities such as `fs/read_text_file` and `fs/write_text_file`, it MUST enforce the effective root set for that session when authorizing path-based access. ACP's filesystem methods are client-mediated and operate on absolute paths, so the client remains responsible for boundary enforcement in those flows. When the client learns about an existing session through `session/list`, it SHOULD use `SessionInfo.additionalDirectories` together with `cwd` as the current root set for those checks when the field is present. If the field is omitted, the Client should rely on roots it obtained, persisted, or reconstructed itself, and any subsequent lifecycle request establishes the resulting active root set explicitly. +If a client mediates filesystem access through ACP client capabilities such as `fs/read_text_file` and `fs/write_text_file`, it MUST enforce the effective root set for that session when authorizing path-based access. ACP's filesystem methods are client-mediated and operate on absolute paths, so the client remains responsible for boundary enforcement in those flows. When the client learns about an existing session through `session/list`, it SHOULD use `cwd` together with any `SessionInfo.additionalDirectories` entries returned for that session as the reported root set. Omitted and empty values report no additional roots. Any subsequent lifecycle request establishes the resulting active root set explicitly. If a client launches an agent with direct filesystem access, `additionalDirectories` is not, by itself, a sandbox. Clients that need root boundaries to be enforced in that deployment model SHOULD apply operating-system or runtime sandboxing consistent with the declared root set. @@ -382,7 +382,7 @@ Updated agents MUST continue to accept requests that do not include the field. Older implementations may validate request objects strictly against older schemas and MAY reject unknown fields. Clients therefore MUST gate usage on `sessionCapabilities.additionalDirectories`. -This proposal intentionally does not extend the responses to `session/new`, `session/load`, `session/resume`, or `session/fork` to surface additional-root state directly. That remains consistent with existing ACP response shapes, which also do not return `cwd`. Instead, when `session/list` is supported, Agents MAY expose the complete ordered additional-root list for listed sessions through `SessionInfo.additionalDirectories` when they track that state. `SessionInfoUpdate` remains unchanged because this RFD does not define mid-session mutation of `additionalDirectories`. Clients that need multi-root continuity across `session/load` or `session/resume` MUST still send the full intended list explicitly, and MAY change that list from a previously used or reported list as long as the request `cwd` matches the session's `cwd`. +This proposal intentionally does not extend the responses to `session/new`, `session/load`, `session/resume`, or `session/fork` to surface additional-root state directly. That remains consistent with existing ACP response shapes, which also do not return `cwd`. Instead, when `session/list` is supported, Agents MAY expose the complete ordered additional-root list for listed sessions through `SessionInfo.additionalDirectories`. Omitted and empty values report no additional roots for that `SessionInfo`. `SessionInfoUpdate` remains unchanged because this RFD does not define mid-session mutation of `additionalDirectories`. Clients that need multi-root continuity across `session/load` or `session/resume` MUST still send the full intended list explicitly, and MAY change that list from a previously used or reported list as long as the request `cwd` matches the session's `cwd`. `session/list` filtering remains independent of `additionalDirectories`. Sessions that differ by `additionalDirectories` are distinguishable only when the Agent surfaces that state through `SessionInfo.additionalDirectories`; Clients that need additional-root matching can filter those returned sessions locally. @@ -433,4 +433,5 @@ This proposal is preferred because it is additive, keeps `cwd` semantics stable, ## Revision history +- 2026-05-21: Moved to Preview. - 2026-03-24: Initial draft. diff --git a/docs/rfds/updates.mdx b/docs/rfds/updates.mdx index 05e15401a..73f1b6c99 100644 --- a/docs/rfds/updates.mdx +++ b/docs/rfds/updates.mdx @@ -6,6 +6,13 @@ rss: true This page tracks lifecycle changes for ACP Requests for Dialog. For broader ACP announcements, see [Updates](/updates). + +## Additional Directories RFD moves to Preview stage + +The RFD for allowing clients to specify additional workspace roots for session lifecycle requests has been moved to Preview stage. Please review the [RFD](/rfds/additional-directories) for more information on the current proposal and provide feedback before the feature is stabilized. + + + ## Logout Method RFD moves to Preview stage diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index d88d9b556..a76dac3b6 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -5658,7 +5658,7 @@ "type": "object" }, "SessionAdditionalDirectoriesCapabilities": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for additional session directories support.\n\nBy supplying `{}` it means that the agent supports the `additionalDirectories`\nfield on supported session lifecycle requests. Agents that also support\n`session/list` may return `SessionInfo.additionalDirectories` when they track\nthat state.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for additional session directories support.\n\nBy supplying `{}` it means that the agent supports the `additionalDirectories`\nfield on supported session lifecycle requests. Agents that also support\n`session/list` may return `SessionInfo.additionalDirectories` to report the\ncomplete ordered additional-root list associated with a listed session.", "properties": { "_meta": { "additionalProperties": true, @@ -5685,7 +5685,7 @@ "type": "null" } ], - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `additionalDirectories` on supported session lifecycle requests.\n\nAgents that also support `session/list` may return\n`SessionInfo.additionalDirectories` when they track that state." + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `additionalDirectories` on supported session lifecycle requests.\n\nAgents that also support `session/list` may return\n`SessionInfo.additionalDirectories` to report the complete ordered\nadditional-root list associated with a listed session." }, "close": { "anyOf": [ @@ -6018,7 +6018,7 @@ "type": ["object", "null"] }, "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots for this session, if the Agent reports them. Each path must be absolute.\n\nAgents may omit this field when they do not track or surface additional-root\nstate. When present, this is the complete additional-root list known to\nthe Agent for the session.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots reported for this session. Each path must be absolute.\n\nWhen present, this is the complete ordered additional-root list reported\nby the Agent. Omitted and empty values are equivalent: the response\nreports no additional roots.", "items": { "type": "string" }, diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index d88d9b556..a76dac3b6 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -5658,7 +5658,7 @@ "type": "object" }, "SessionAdditionalDirectoriesCapabilities": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for additional session directories support.\n\nBy supplying `{}` it means that the agent supports the `additionalDirectories`\nfield on supported session lifecycle requests. Agents that also support\n`session/list` may return `SessionInfo.additionalDirectories` when they track\nthat state.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nCapabilities for additional session directories support.\n\nBy supplying `{}` it means that the agent supports the `additionalDirectories`\nfield on supported session lifecycle requests. Agents that also support\n`session/list` may return `SessionInfo.additionalDirectories` to report the\ncomplete ordered additional-root list associated with a listed session.", "properties": { "_meta": { "additionalProperties": true, @@ -5685,7 +5685,7 @@ "type": "null" } ], - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `additionalDirectories` on supported session lifecycle requests.\n\nAgents that also support `session/list` may return\n`SessionInfo.additionalDirectories` when they track that state." + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nWhether the agent supports `additionalDirectories` on supported session lifecycle requests.\n\nAgents that also support `session/list` may return\n`SessionInfo.additionalDirectories` to report the complete ordered\nadditional-root list associated with a listed session." }, "close": { "anyOf": [ @@ -6018,7 +6018,7 @@ "type": ["object", "null"] }, "additionalDirectories": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots for this session, if the Agent reports them. Each path must be absolute.\n\nAgents may omit this field when they do not track or surface additional-root\nstate. When present, this is the complete additional-root list known to\nthe Agent for the session.", + "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAdditional workspace roots reported for this session. Each path must be absolute.\n\nWhen present, this is the complete ordered additional-root list reported\nby the Agent. Omitted and empty values are equivalent: the response\nreports no additional roots.", "items": { "type": "string" }, diff --git a/src/v1/agent.rs b/src/v1/agent.rs index a52cb95c5..86428b80c 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -1921,11 +1921,11 @@ pub struct SessionInfo { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. + /// Additional workspace roots reported for this session. Each path must be absolute. /// - /// Agents may omit this field when they do not track or surface additional-root - /// state. When present, this is the complete additional-root list known to - /// the Agent for the session. + /// When present, this is the complete ordered additional-root list reported + /// by the Agent. Omitted and empty values are equivalent: the response + /// reports no additional roots. #[cfg(feature = "unstable_session_additional_directories")] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub additional_directories: Vec, @@ -1965,7 +1965,7 @@ impl SessionInfo { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. + /// Additional workspace roots reported for this session. Each path must be absolute. #[cfg(feature = "unstable_session_additional_directories")] #[must_use] pub fn additional_directories(mut self, additional_directories: Vec) -> Self { @@ -4236,7 +4236,8 @@ pub struct SessionCapabilities { /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests. /// /// Agents that also support `session/list` may return - /// `SessionInfo.additionalDirectories` when they track that state. + /// `SessionInfo.additionalDirectories` to report the complete ordered + /// additional-root list associated with a listed session. #[cfg(feature = "unstable_session_additional_directories")] #[serde_as(deserialize_as = "DefaultOnError")] #[serde(default)] @@ -4302,7 +4303,8 @@ impl SessionCapabilities { /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests. /// /// Agents that also support `session/list` may return - /// `SessionInfo.additionalDirectories` when they track that state. + /// `SessionInfo.additionalDirectories` to report the complete ordered + /// additional-root list associated with a listed session. #[cfg(feature = "unstable_session_additional_directories")] #[must_use] pub fn additional_directories( @@ -4429,8 +4431,8 @@ impl SessionDeleteCapabilities { /// /// By supplying `{}` it means that the agent supports the `additionalDirectories` /// field on supported session lifecycle requests. Agents that also support -/// `session/list` may return `SessionInfo.additionalDirectories` when they track -/// that state. +/// `session/list` may return `SessionInfo.additionalDirectories` to report the +/// complete ordered additional-root list associated with a listed session. #[cfg(feature = "unstable_session_additional_directories")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] diff --git a/src/v2/agent.rs b/src/v2/agent.rs index 1096410a1..03f92a673 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -1921,11 +1921,11 @@ pub struct SessionInfo { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. + /// Additional workspace roots reported for this session. Each path must be absolute. /// - /// Agents may omit this field when they do not track or surface additional-root - /// state. When present, this is the complete additional-root list known to - /// the Agent for the session. + /// When present, this is the complete ordered additional-root list reported + /// by the Agent. Omitted and empty values are equivalent: the response + /// reports no additional roots. #[cfg(feature = "unstable_session_additional_directories")] #[serde(default, skip_serializing_if = "Vec::is_empty")] pub additional_directories: Vec, @@ -1965,7 +1965,7 @@ impl SessionInfo { /// /// This capability is not part of the spec yet, and may be removed or changed at any point. /// - /// Additional workspace roots for this session, if the Agent reports them. Each path must be absolute. + /// Additional workspace roots reported for this session. Each path must be absolute. #[cfg(feature = "unstable_session_additional_directories")] #[must_use] pub fn additional_directories(mut self, additional_directories: Vec) -> Self { @@ -4236,7 +4236,8 @@ pub struct SessionCapabilities { /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests. /// /// Agents that also support `session/list` may return - /// `SessionInfo.additionalDirectories` when they track that state. + /// `SessionInfo.additionalDirectories` to report the complete ordered + /// additional-root list associated with a listed session. #[cfg(feature = "unstable_session_additional_directories")] #[serde_as(deserialize_as = "DefaultOnError")] #[serde(default)] @@ -4302,7 +4303,8 @@ impl SessionCapabilities { /// Whether the agent supports `additionalDirectories` on supported session lifecycle requests. /// /// Agents that also support `session/list` may return - /// `SessionInfo.additionalDirectories` when they track that state. + /// `SessionInfo.additionalDirectories` to report the complete ordered + /// additional-root list associated with a listed session. #[cfg(feature = "unstable_session_additional_directories")] #[must_use] pub fn additional_directories( @@ -4429,8 +4431,8 @@ impl SessionDeleteCapabilities { /// /// By supplying `{}` it means that the agent supports the `additionalDirectories` /// field on supported session lifecycle requests. Agents that also support -/// `session/list` may return `SessionInfo.additionalDirectories` when they track -/// that state. +/// `session/list` may return `SessionInfo.additionalDirectories` to report the +/// complete ordered additional-root list associated with a listed session. #[cfg(feature = "unstable_session_additional_directories")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] From 24d058b75c6c7d56bb5744f3771c9e328fa33b32 Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Thu, 21 May 2026 21:49:46 +0000 Subject: [PATCH 145/152] docs: update registry agents (#1277) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index d03e2fdee..7680dfa39 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -294,7 +294,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Factory Droid - AI coding agent powered by Factory AI - **0.130.0** + **0.131.0** Date: Thu, 21 May 2026 23:19:04 +0000 Subject: [PATCH 146/152] docs: update registry agents (#1278) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 7680dfa39..900ab2840 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -598,7 +598,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Code and build agents with comprehensive multi-provider support - **0.7.7**, + **0.7.8**, Date: Fri, 22 May 2026 04:38:00 +0000 Subject: [PATCH 147/152] docs: update registry agents (#1279) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 900ab2840..683c43041 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -118,7 +118,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > ACP wrapper for Anthropic's Claude - **0.36.1**, + **0.37.0**, Google's official CLI for Gemini - **0.42.0**, + **0.43.0**, A local, extensible, open source AI agent that automates engineering tasks - **1.34.1**, + **1.35.0**, Date: Fri, 22 May 2026 08:33:19 +0000 Subject: [PATCH 148/152] docs: update registry agents (#1280) Co-authored-by: benbrandt <2111074+benbrandt@users.noreply.github.com> --- docs/get-started/registry.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/registry.mdx b/docs/get-started/registry.mdx index 683c43041..c33338e52 100644 --- a/docs/get-started/registry.mdx +++ b/docs/get-started/registry.mdx @@ -135,7 +135,7 @@ Visit [the registry repository on GitHub](https://github.com/agentclientprotocol > Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more - **3.0.9**, + **3.0.10**, Date: Fri, 22 May 2026 14:26:10 +0200 Subject: [PATCH 149/152] feat: Stabilize logout method (#1273) --- Cargo.toml | 2 - .../logout-method-stabilized.mdx | 13 ++ docs/docs.json | 11 +- docs/protocol/authentication.mdx | 142 ++++++++++++++++++ docs/protocol/draft/authentication.mdx | 9 +- docs/protocol/draft/initialization.mdx | 14 ++ docs/protocol/draft/overview.mdx | 5 + docs/protocol/draft/schema-v2.mdx | 26 +--- docs/protocol/draft/schema.mdx | 26 +--- docs/protocol/initialization.mdx | 14 ++ docs/protocol/overview.mdx | 5 + docs/protocol/schema.mdx | 93 +++++++++++- docs/rfds/logout-method.mdx | 5 +- docs/rfds/updates.mdx | 7 + docs/updates.mdx | 11 ++ schema/meta.json | 1 + schema/schema.json | 86 +++++++++++ schema/schema.unstable.json | 12 +- schema/schema.v2.unstable.json | 12 +- src/v1/agent.rs | 44 ------ src/v2/agent.rs | 44 ------ src/v2/conversion.rs | 16 -- 22 files changed, 414 insertions(+), 184 deletions(-) create mode 100644 docs/announcements/logout-method-stabilized.mdx create mode 100644 docs/protocol/authentication.mdx diff --git a/Cargo.toml b/Cargo.toml index 9098f0276..a3adf0a39 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,6 @@ unstable = [ "unstable_cancel_request", "unstable_elicitation", "unstable_llm_providers", - "unstable_logout", "unstable_mcp_over_acp", "unstable_nes", "unstable_session_additional_directories", @@ -40,7 +39,6 @@ unstable_auth_methods = [] unstable_cancel_request = [] unstable_elicitation = [] unstable_llm_providers = [] -unstable_logout = [] unstable_mcp_over_acp = [] unstable_nes = [] unstable_session_additional_directories = [] diff --git a/docs/announcements/logout-method-stabilized.mdx b/docs/announcements/logout-method-stabilized.mdx new file mode 100644 index 000000000..9ba6361d1 --- /dev/null +++ b/docs/announcements/logout-method-stabilized.mdx @@ -0,0 +1,13 @@ +--- +title: Logout Method is stabilized +sidebarTitle: Logout Method stabilized +description: Announcement that the logout method is now part of the stable ACP protocol. +--- + +**Published:** May 21, 2026 + +The [Logout Method RFD](/rfds/logout-method) has moved to Completed and the `logout` method is stabilized. + +When advertised via `agentCapabilities.auth.logout`, Clients can now ask Agents to end the current authenticated state and return the connection to a state where future authentication-gated requests require `authenticate` again. + +For the protocol documentation, see [Logging Out](/protocol/authentication#logging-out). diff --git a/docs/docs.json b/docs/docs.json index c95f7cfc8..988e18433 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -64,6 +64,7 @@ "pages": [ "protocol/overview", "protocol/initialization", + "protocol/authentication", "protocol/session-setup", "protocol/session-list", "protocol/prompt-turn", @@ -155,11 +156,7 @@ }, { "group": "Preview", - "pages": [ - "rfds/rust-sdk-v1", - "rfds/logout-method", - "rfds/additional-directories" - ] + "pages": ["rfds/rust-sdk-v1", "rfds/additional-directories"] }, { "group": "Completed", @@ -170,7 +167,8 @@ "rfds/session-info-update", "rfds/acp-agent-registry", "rfds/session-resume", - "rfds/session-close" + "rfds/session-close", + "rfds/logout-method" ] } ] @@ -196,6 +194,7 @@ { "group": "Announcements", "pages": [ + "announcements/logout-method-stabilized", "announcements/session-close-stabilized", "announcements/session-resume-stabilized", "announcements/transports-working-group", diff --git a/docs/protocol/authentication.mdx b/docs/protocol/authentication.mdx new file mode 100644 index 000000000..fc790bf4c --- /dev/null +++ b/docs/protocol/authentication.mdx @@ -0,0 +1,142 @@ +--- +title: "Authentication" +description: "Authenticating with agents and logging out" +--- + +ACP authentication is negotiated during [initialization](/protocol/initialization). Agents advertise available authentication methods in `authMethods`, Clients choose one by calling `authenticate`, and Agents that support ending an authenticated state advertise the `logout` capability. + +
+ +```mermaid +sequenceDiagram + participant Client + participant Agent + + Client->>Agent: initialize + Agent-->>Client: initialize response (authMethods, auth.logout) + + alt Agent requires authentication + Client->>Agent: authenticate (methodId) + Agent-->>Client: authenticate response + end + + Note over Client,Agent: Authenticated requests may proceed + + alt User logs out + Client->>Agent: logout + Agent-->>Client: logout response + end + + Note over Client,Agent: New sessions require authentication again +``` + +
+ +## Advertising Authentication + +Agents advertise authentication options in the `authMethods` field of the `initialize` response. Each method has an `id` that the Client passes back to the Agent in a later `authenticate` request. + +Agents that support `logout` also advertise `agentCapabilities.auth.logout`: + +```json highlight={7-11,12-18} +{ + "jsonrpc": "2.0", + "id": 0, + "result": { + "protocolVersion": 1, + "agentCapabilities": { + "auth": { + "logout": {} + } + }, + "authMethods": [ + { + "id": "agent-login", + "name": "Agent login", + "description": "Sign in using the agent's login flow" + } + ] + } +} +``` + +If `agentCapabilities.auth.logout` is omitted or `null`, the Agent does not support `logout` and Clients **MUST NOT** call it. Supplying `{}` means the Agent supports the method. + +### Authentication Method Types + +The default authentication method type is `agent`, where the Agent handles authentication itself. When no `type` is present, the method is treated as `agent`: + +```json +{ + "id": "agent-login", + "name": "Agent login", + "description": "Sign in using the agent's login flow" +} +``` + +An explicit `"type": "agent"` is also accepted but not required. + +See the [schema](/protocol/schema#authmethod) for the full stable `AuthMethod` definition. + +## Authenticating + +When an Agent requires authentication before allowing session creation, the Client calls `authenticate` with one of the advertised authentication method IDs: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "authenticate", + "params": { + "methodId": "agent-login" + } +} +``` + + + The ID of the authentication method to use. This value must match one of the + methods advertised in the `initialize` response. + + +On success, the Agent returns an empty result: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": {} +} +``` + +After successful authentication, the Client can create new sessions without receiving an `auth_required` error for authentication-gated requests. + +## Logging Out + +The `logout` method allows Clients to end the current authenticated state. Clients should only call it after verifying the Agent advertised `agentCapabilities.auth.logout` during initialization. + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "method": "logout", + "params": {} +} +``` + +On success, the Agent returns an empty result: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": {} +} +``` + +After a successful `logout`, new sessions that require authentication will require the Client to call `authenticate` again. + +## Active Sessions + +The protocol does not guarantee what happens to already-running sessions after `logout`. Agents may terminate them, keep them running, or return `auth_required` errors for future session activity. + +Clients **SHOULD** be prepared for active session operations to fail with authentication-related errors after logout and should prompt the user to authenticate again when appropriate. diff --git a/docs/protocol/draft/authentication.mdx b/docs/protocol/draft/authentication.mdx index c8600d945..7f7fe8a1d 100644 --- a/docs/protocol/draft/authentication.mdx +++ b/docs/protocol/draft/authentication.mdx @@ -3,12 +3,7 @@ title: "Authentication" description: "Authenticating with agents and logging out" --- -ACP authentication is negotiated during [initialization](/protocol/initialization). Agents advertise available authentication methods in `authMethods`, Clients choose one by calling `authenticate`, and Agents that support ending an authenticated state advertise the draft `logout` capability. - - - The `logout` method and `agentCapabilities.auth.logout` capability are still - unstable and may change before they are stabilized. - +ACP authentication is negotiated during [initialization](/protocol/initialization). Agents advertise available authentication methods in `authMethods`, Clients choose one by calling `authenticate`, and Agents that support ending an authenticated state advertise the `logout` capability.
@@ -138,7 +133,7 @@ After successful authentication, the Client can create new sessions without rece ## Logging Out -The draft `logout` method allows Clients to end the current authenticated state. Clients should only call it after verifying the Agent advertised `agentCapabilities.auth.logout` during initialization. +The `logout` method allows Clients to end the current authenticated state. Clients should only call it after verifying the Agent advertised `agentCapabilities.auth.logout` during initialization. ```json { diff --git a/docs/protocol/draft/initialization.mdx b/docs/protocol/draft/initialization.mdx index 50307e71b..6a8a3232a 100644 --- a/docs/protocol/draft/initialization.mdx +++ b/docs/protocol/draft/initialization.mdx @@ -155,6 +155,10 @@ The Agent **SHOULD** specify whether it supports the following capabilities: included in `session/prompt` requests. + + Authentication-related capabilities supported by the Agent. + + #### Prompt capabilities As a baseline, all Agents **MUST** support `ContentBlock::Text` and `ContentBlock::ResourceLink` in `session/prompt` requests. @@ -186,6 +190,16 @@ Note: This transport has been deprecated by the MCP spec. +#### Authentication Capabilities + + + The [`logout`](./authentication#logging-out) method is available. + + + + Learn more about Authentication + + #### Session Capabilities As a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`. diff --git a/docs/protocol/draft/overview.mdx b/docs/protocol/draft/overview.mdx index a8dbf1dd5..5bfdbb0a9 100644 --- a/docs/protocol/draft/overview.mdx +++ b/docs/protocol/draft/overview.mdx @@ -84,6 +84,11 @@ Agents are programs that use generative AI to autonomously modify code. They typ `loadSession` capability). +Schema]}> + [End the current authenticated state](./authentication#logging-out) (requires + `agentCapabilities.auth.logout` capability). + + Schema]} diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index 155d074f2..31a88570d 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -339,10 +339,6 @@ The client should disconnect, if it doesn't support this version. ### logout -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Logs out of the current authenticated state. After a successful logout, all new sessions will require authentication. @@ -350,10 +346,6 @@ There is no guarantee about the behavior of already running sessions. #### LogoutRequest -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Request parameters for the logout method. Terminates the current authenticated session. @@ -373,10 +365,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte #### LogoutResponse -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Response to the `logout` method. **Type:** Object @@ -2767,10 +2755,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte ## AgentAuthCapabilities -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Authentication-related capabilities supported by the agent. **Type:** Object @@ -2814,11 +2798,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte AgentAuthCapabilities} > - **UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - -Authentication-related capabilities supported by the agent. + Authentication-related capabilities supported by the agent. - Default: `{}` @@ -4672,10 +4652,6 @@ Protocol names that do not begin with `_` are reserved for the ACP spec. ## LogoutCapabilities -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Logout capabilities supported by the agent. By supplying `\{\}` it means that the agent supports the logout method. diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index 155d074f2..31a88570d 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -339,10 +339,6 @@ The client should disconnect, if it doesn't support this version. ### logout -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Logs out of the current authenticated state. After a successful logout, all new sessions will require authentication. @@ -350,10 +346,6 @@ There is no guarantee about the behavior of already running sessions. #### LogoutRequest -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Request parameters for the logout method. Terminates the current authenticated session. @@ -373,10 +365,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte #### LogoutResponse -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Response to the `logout` method. **Type:** Object @@ -2767,10 +2755,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte ## AgentAuthCapabilities -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Authentication-related capabilities supported by the agent. **Type:** Object @@ -2814,11 +2798,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte AgentAuthCapabilities} > - **UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - -Authentication-related capabilities supported by the agent. + Authentication-related capabilities supported by the agent. - Default: `{}` @@ -4672,10 +4652,6 @@ Protocol names that do not begin with `_` are reserved for the ACP spec. ## LogoutCapabilities -**UNSTABLE** - -This capability is not part of the spec yet, and may be removed or changed at any point. - Logout capabilities supported by the agent. By supplying `\{\}` it means that the agent supports the logout method. diff --git a/docs/protocol/initialization.mdx b/docs/protocol/initialization.mdx index 50307e71b..6a8a3232a 100644 --- a/docs/protocol/initialization.mdx +++ b/docs/protocol/initialization.mdx @@ -155,6 +155,10 @@ The Agent **SHOULD** specify whether it supports the following capabilities: included in `session/prompt` requests. + + Authentication-related capabilities supported by the Agent. + + #### Prompt capabilities As a baseline, all Agents **MUST** support `ContentBlock::Text` and `ContentBlock::ResourceLink` in `session/prompt` requests. @@ -186,6 +190,16 @@ Note: This transport has been deprecated by the MCP spec. +#### Authentication Capabilities + + + The [`logout`](./authentication#logging-out) method is available. + + + + Learn more about Authentication + + #### Session Capabilities As a baseline, all Agents **MUST** support `session/new`, `session/prompt`, `session/cancel`, and `session/update`. diff --git a/docs/protocol/overview.mdx b/docs/protocol/overview.mdx index 1f2b2fdb8..71b4bc01b 100644 --- a/docs/protocol/overview.mdx +++ b/docs/protocol/overview.mdx @@ -84,6 +84,11 @@ Agents are programs that use generative AI to autonomously modify code. They typ `loadSession` capability). +Schema]}> + [End the current authenticated state](./authentication#logging-out) (requires + `agentCapabilities.auth.logout` capability). + + Schema]} diff --git a/docs/protocol/schema.mdx b/docs/protocol/schema.mdx index 4584fd470..41aa4c6be 100644 --- a/docs/protocol/schema.mdx +++ b/docs/protocol/schema.mdx @@ -140,7 +140,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` + - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` Implementation | null} > @@ -163,6 +163,49 @@ The client should disconnect, if it doesn't support this version. +### logout + +Logs out of the current authenticated state. + +After a successful logout, all new sessions will require authentication. +There is no guarantee about the behavior of already running sessions. + +#### LogoutRequest + +Request parameters for the logout method. + +Terminates the current authenticated session. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + +#### LogoutResponse + +Response to the `logout` method. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + ### session/cancel @@ -1257,6 +1300,29 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte The signal that terminated the process (may be null if exited normally). +## AgentAuthCapabilities + +Authentication-related capabilities supported by the agent. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +LogoutCapabilities | null} > + Whether the agent supports the logout method. + +By supplying `\{\}` it means that the agent supports the logout method. + + + ## AgentCapabilities Capabilities supported by the agent. @@ -1277,6 +1343,12 @@ these keys. See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + +AgentAuthCapabilities} > + Authentication-related capabilities supported by the agent. + + - Default: `{}` + Whether the agent supports `session/load`. @@ -2120,6 +2192,25 @@ If not provided, the name should be used for display. for debugging or metrics purposes. (e.g. "1.0.0"). +## LogoutCapabilities + +Logout capabilities supported by the agent. + +By supplying `\{\}` it means that the agent supports the logout method. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + ## McpCapabilities MCP capabilities supported by the agent diff --git a/docs/rfds/logout-method.mdx b/docs/rfds/logout-method.mdx index 0635768c9..bb62738f3 100644 --- a/docs/rfds/logout-method.mdx +++ b/docs/rfds/logout-method.mdx @@ -66,7 +66,7 @@ interface LogoutResponse { ### Capability Advertisement -The `logout` capability should be advertised within a new `auth` object in `AgentCapabilities`: +The `logout` capability is advertised within the `auth` object in `AgentCapabilities`: ```typescript interface AgentCapabilities { @@ -177,7 +177,7 @@ interface LogoutCapabilities { ### Behavior 1. **Pre-condition**: The client should only call `logout` if: - - The agent advertises `auth.logout: {}` + - The agent advertises `agentCapabilities.auth.logout: {}` 2. **Agent responsibilities**: - Invalidate any stored tokens or credentials as appropriate @@ -207,5 +207,6 @@ The RFD intentionally does not mandate a specific behavior to allow flexibility. ## Revision history +- 2026-05-21: RFD marked as Completed; `logout` is stabilized - 2026-05-17: Moved to Preview. - 2026-02-02: Initial draft diff --git a/docs/rfds/updates.mdx b/docs/rfds/updates.mdx index 73f1b6c99..f0f7d8e6f 100644 --- a/docs/rfds/updates.mdx +++ b/docs/rfds/updates.mdx @@ -6,6 +6,13 @@ rss: true This page tracks lifecycle changes for ACP Requests for Dialog. For broader ACP announcements, see [Updates](/updates). + +## Logout Method RFD moves to Completed + +The RFD for the `logout` method has been stabilized and is now a part of the protocol. Please review the [documentation](/protocol/authentication#logging-out) for more information. + + + ## Additional Directories RFD moves to Preview stage diff --git a/docs/updates.mdx b/docs/updates.mdx index 9063b1c31..b4d7f1471 100644 --- a/docs/updates.mdx +++ b/docs/updates.mdx @@ -6,6 +6,17 @@ rss: true This page is for larger ACP announcements and project updates. For lifecycle changes to Requests for Dialog, see [RFD Updates](/rfds/updates). + +## Logout Method is Stabilized + +The Logout Method RFD has moved to Completed and the `logout` method is stabilized. + +This gives clients a standard way to end an authenticated state and let users authenticate again without restarting the ACP connection. + +[Read the full announcement](/announcements/logout-method-stabilized). + + + ## Session Close is Stabilized diff --git a/schema/meta.json b/schema/meta.json index 8dc36e94f..bc5135b29 100644 --- a/schema/meta.json +++ b/schema/meta.json @@ -2,6 +2,7 @@ "agentMethods": { "authenticate": "authenticate", "initialize": "initialize", + "logout": "logout", "session_cancel": "session/cancel", "session_close": "session/close", "session_list": "session/list", diff --git a/schema/schema.json b/schema/schema.json index d6c327e83..559f3f453 100644 --- a/schema/schema.json +++ b/schema/schema.json @@ -1,5 +1,27 @@ { "$defs": { + "AgentAuthCapabilities": { + "description": "Authentication-related capabilities supported by the agent.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "logout": { + "anyOf": [ + { + "$ref": "#/$defs/LogoutCapabilities" + }, + { + "type": "null" + } + ], + "description": "Whether the agent supports the logout method.\n\nBy supplying `{}` it means that the agent supports the logout method." + } + }, + "type": "object" + }, "AgentCapabilities": { "description": "Capabilities supported by the agent.\n\nAdvertised during initialization to inform the client about\navailable features and content types.\n\nSee protocol docs: [Agent Capabilities](https://agentclientprotocol.com/protocol/initialization#agent-capabilities)", "properties": { @@ -8,6 +30,15 @@ "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", "type": ["object", "null"] }, + "auth": { + "allOf": [ + { + "$ref": "#/$defs/AgentAuthCapabilities" + } + ], + "default": {}, + "description": "Authentication-related capabilities supported by the agent." + }, "loadSession": { "default": false, "description": "Whether the agent supports `session/load`.", @@ -220,6 +251,14 @@ ], "title": "AuthenticateResponse" }, + { + "allOf": [ + { + "$ref": "#/$defs/LogoutResponse" + } + ], + "title": "LogoutResponse" + }, { "allOf": [ { @@ -642,6 +681,15 @@ "description": "Authenticates the client using the specified authentication method.\n\nCalled when the agent requires authentication before allowing session creation.\nThe client provides the authentication method ID that was advertised during initialization.\n\nAfter successful authentication, the client can proceed to create sessions with\n`new_session` without receiving an `auth_required` error.\n\nSee protocol docs: [Initialization](https://agentclientprotocol.com/protocol/initialization)", "title": "AuthenticateRequest" }, + { + "allOf": [ + { + "$ref": "#/$defs/LogoutRequest" + } + ], + "description": "Logs out of the current authenticated state.\n\nAfter a successful logout, all new sessions will require authentication.\nThere is no guarantee about the behavior of already running sessions.", + "title": "LogoutRequest" + }, { "allOf": [ { @@ -1451,6 +1499,7 @@ } ], "default": { + "auth": {}, "loadSession": false, "mcpCapabilities": { "http": false, @@ -1647,6 +1696,43 @@ "x-method": "session/load", "x-side": "agent" }, + "LogoutCapabilities": { + "description": "Logout capabilities supported by the agent.\n\nBy supplying `{}` it means that the agent supports the logout method.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object" + }, + "LogoutRequest": { + "description": "Request parameters for the logout method.\n\nTerminates the current authenticated session.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object", + "x-method": "logout", + "x-side": "agent" + }, + "LogoutResponse": { + "description": "Response to the `logout` method.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + } + }, + "type": "object", + "x-method": "logout", + "x-side": "agent" + }, "McpCapabilities": { "description": "MCP capabilities supported by the agent", "properties": { diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index a76dac3b6..383a1b2b5 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -27,7 +27,7 @@ "x-side": "agent" }, "AgentAuthCapabilities": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAuthentication-related capabilities supported by the agent.", + "description": "Authentication-related capabilities supported by the agent.", "properties": { "_meta": { "additionalProperties": true, @@ -63,7 +63,7 @@ } ], "default": {}, - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAuthentication-related capabilities supported by the agent." + "description": "Authentication-related capabilities supported by the agent." }, "loadSession": { "default": false, @@ -1255,7 +1255,7 @@ "$ref": "#/$defs/LogoutRequest" } ], - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nLogs out of the current authenticated state.\n\nAfter a successful logout, all new sessions will require authentication.\nThere is no guarantee about the behavior of already running sessions.", + "description": "Logs out of the current authenticated state.\n\nAfter a successful logout, all new sessions will require authentication.\nThere is no guarantee about the behavior of already running sessions.", "title": "LogoutRequest" }, { @@ -3472,7 +3472,7 @@ "x-side": "agent" }, "LogoutCapabilities": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nLogout capabilities supported by the agent.\n\nBy supplying `{}` it means that the agent supports the logout method.", + "description": "Logout capabilities supported by the agent.\n\nBy supplying `{}` it means that the agent supports the logout method.", "properties": { "_meta": { "additionalProperties": true, @@ -3483,7 +3483,7 @@ "type": "object" }, "LogoutRequest": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for the logout method.\n\nTerminates the current authenticated session.", + "description": "Request parameters for the logout method.\n\nTerminates the current authenticated session.", "properties": { "_meta": { "additionalProperties": true, @@ -3496,7 +3496,7 @@ "x-side": "agent" }, "LogoutResponse": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to the `logout` method.", + "description": "Response to the `logout` method.", "properties": { "_meta": { "additionalProperties": true, diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index a76dac3b6..383a1b2b5 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -27,7 +27,7 @@ "x-side": "agent" }, "AgentAuthCapabilities": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAuthentication-related capabilities supported by the agent.", + "description": "Authentication-related capabilities supported by the agent.", "properties": { "_meta": { "additionalProperties": true, @@ -63,7 +63,7 @@ } ], "default": {}, - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nAuthentication-related capabilities supported by the agent." + "description": "Authentication-related capabilities supported by the agent." }, "loadSession": { "default": false, @@ -1255,7 +1255,7 @@ "$ref": "#/$defs/LogoutRequest" } ], - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nLogs out of the current authenticated state.\n\nAfter a successful logout, all new sessions will require authentication.\nThere is no guarantee about the behavior of already running sessions.", + "description": "Logs out of the current authenticated state.\n\nAfter a successful logout, all new sessions will require authentication.\nThere is no guarantee about the behavior of already running sessions.", "title": "LogoutRequest" }, { @@ -3472,7 +3472,7 @@ "x-side": "agent" }, "LogoutCapabilities": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nLogout capabilities supported by the agent.\n\nBy supplying `{}` it means that the agent supports the logout method.", + "description": "Logout capabilities supported by the agent.\n\nBy supplying `{}` it means that the agent supports the logout method.", "properties": { "_meta": { "additionalProperties": true, @@ -3483,7 +3483,7 @@ "type": "object" }, "LogoutRequest": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nRequest parameters for the logout method.\n\nTerminates the current authenticated session.", + "description": "Request parameters for the logout method.\n\nTerminates the current authenticated session.", "properties": { "_meta": { "additionalProperties": true, @@ -3496,7 +3496,7 @@ "x-side": "agent" }, "LogoutResponse": { - "description": "**UNSTABLE**\n\nThis capability is not part of the spec yet, and may be removed or changed at any point.\n\nResponse to the `logout` method.", + "description": "Response to the `logout` method.", "properties": { "_meta": { "additionalProperties": true, diff --git a/src/v1/agent.rs b/src/v1/agent.rs index 86428b80c..bd081d1cc 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -335,14 +335,9 @@ impl AuthenticateResponse { // Logout -/// **UNSTABLE** -/// -/// This capability is not part of the spec yet, and may be removed or changed at any point. -/// /// Request parameters for the logout method. /// /// Terminates the current authenticated session. -#[cfg(feature = "unstable_logout")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[schemars(extend("x-side" = "agent", "x-method" = LOGOUT_METHOD_NAME))] @@ -358,7 +353,6 @@ pub struct LogoutRequest { pub meta: Option, } -#[cfg(feature = "unstable_logout")] impl LogoutRequest { #[must_use] pub fn new() -> Self { @@ -377,12 +371,7 @@ impl LogoutRequest { } } -/// **UNSTABLE** -/// -/// This capability is not part of the spec yet, and may be removed or changed at any point. -/// /// Response to the `logout` method. -#[cfg(feature = "unstable_logout")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[schemars(extend("x-side" = "agent", "x-method" = LOGOUT_METHOD_NAME))] @@ -398,7 +387,6 @@ pub struct LogoutResponse { pub meta: Option, } -#[cfg(feature = "unstable_logout")] impl LogoutResponse { #[must_use] pub fn new() -> Self { @@ -417,12 +405,7 @@ impl LogoutResponse { } } -/// **UNSTABLE** -/// -/// This capability is not part of the spec yet, and may be removed or changed at any point. -/// /// Authentication-related capabilities supported by the agent. -#[cfg(feature = "unstable_logout")] #[serde_as] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] @@ -444,7 +427,6 @@ pub struct AgentAuthCapabilities { pub meta: Option, } -#[cfg(feature = "unstable_logout")] impl AgentAuthCapabilities { #[must_use] pub fn new() -> Self { @@ -470,14 +452,9 @@ impl AgentAuthCapabilities { } } -/// **UNSTABLE** -/// -/// This capability is not part of the spec yet, and may be removed or changed at any point. -/// /// Logout capabilities supported by the agent. /// /// By supplying `{}` it means that the agent supports the logout method. -#[cfg(feature = "unstable_logout")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[non_exhaustive] @@ -491,7 +468,6 @@ pub struct LogoutCapabilities { pub meta: Option, } -#[cfg(feature = "unstable_logout")] impl LogoutCapabilities { #[must_use] pub fn new() -> Self { @@ -4017,12 +3993,7 @@ pub struct AgentCapabilities { pub mcp_capabilities: McpCapabilities, #[serde(default)] pub session_capabilities: SessionCapabilities, - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// /// Authentication-related capabilities supported by the agent. - #[cfg(feature = "unstable_logout")] #[serde(default)] pub auth: AgentAuthCapabilities, /// **UNSTABLE** @@ -4097,12 +4068,7 @@ impl AgentCapabilities { self } - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// /// Authentication-related capabilities supported by the agent. - #[cfg(feature = "unstable_logout")] #[must_use] pub fn auth(mut self, auth: AgentAuthCapabilities) -> Self { self.auth = auth; @@ -4779,7 +4745,6 @@ pub struct AgentMethodNames { /// Method for closing an active session. pub session_close: &'static str, /// Method for logging out of an authenticated session. - #[cfg(feature = "unstable_logout")] pub logout: &'static str, /// Method for starting an NES session. #[cfg(feature = "unstable_nes")] @@ -4840,7 +4805,6 @@ pub const AGENT_METHOD_NAMES: AgentMethodNames = AgentMethodNames { session_fork: SESSION_FORK_METHOD_NAME, session_resume: SESSION_RESUME_METHOD_NAME, session_close: SESSION_CLOSE_METHOD_NAME, - #[cfg(feature = "unstable_logout")] logout: LOGOUT_METHOD_NAME, #[cfg(feature = "unstable_nes")] nes_start: NES_START_METHOD_NAME, @@ -4905,7 +4869,6 @@ pub(crate) const SESSION_RESUME_METHOD_NAME: &str = "session/resume"; /// Method name for closing an active session. pub(crate) const SESSION_CLOSE_METHOD_NAME: &str = "session/close"; /// Method name for logging out of an authenticated session. -#[cfg(feature = "unstable_logout")] pub(crate) const LOGOUT_METHOD_NAME: &str = "logout"; /// All possible requests that a client can send to an agent. @@ -4962,15 +4925,10 @@ pub enum ClientRequest { /// Disables a provider. #[cfg(feature = "unstable_llm_providers")] DisableProviderRequest(DisableProviderRequest), - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// /// Logs out of the current authenticated state. /// /// After a successful logout, all new sessions will require authentication. /// There is no guarantee about the behavior of already running sessions. - #[cfg(feature = "unstable_logout")] LogoutRequest(LogoutRequest), /// Creates a new conversation session with the agent. /// @@ -5126,7 +5084,6 @@ impl ClientRequest { Self::SetProviderRequest(_) => AGENT_METHOD_NAMES.providers_set, #[cfg(feature = "unstable_llm_providers")] Self::DisableProviderRequest(_) => AGENT_METHOD_NAMES.providers_disable, - #[cfg(feature = "unstable_logout")] Self::LogoutRequest(_) => AGENT_METHOD_NAMES.logout, Self::NewSessionRequest(_) => AGENT_METHOD_NAMES.session_new, Self::LoadSessionRequest(_) => AGENT_METHOD_NAMES.session_load, @@ -5175,7 +5132,6 @@ pub enum AgentResponse { SetProviderResponse(#[serde(default)] SetProviderResponse), #[cfg(feature = "unstable_llm_providers")] DisableProviderResponse(#[serde(default)] DisableProviderResponse), - #[cfg(feature = "unstable_logout")] LogoutResponse(#[serde(default)] LogoutResponse), NewSessionResponse(NewSessionResponse), LoadSessionResponse(#[serde(default)] LoadSessionResponse), diff --git a/src/v2/agent.rs b/src/v2/agent.rs index 03f92a673..993ffc2db 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -335,14 +335,9 @@ impl AuthenticateResponse { // Logout -/// **UNSTABLE** -/// -/// This capability is not part of the spec yet, and may be removed or changed at any point. -/// /// Request parameters for the logout method. /// /// Terminates the current authenticated session. -#[cfg(feature = "unstable_logout")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[schemars(extend("x-side" = "agent", "x-method" = LOGOUT_METHOD_NAME))] @@ -358,7 +353,6 @@ pub struct LogoutRequest { pub meta: Option, } -#[cfg(feature = "unstable_logout")] impl LogoutRequest { #[must_use] pub fn new() -> Self { @@ -377,12 +371,7 @@ impl LogoutRequest { } } -/// **UNSTABLE** -/// -/// This capability is not part of the spec yet, and may be removed or changed at any point. -/// /// Response to the `logout` method. -#[cfg(feature = "unstable_logout")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[schemars(extend("x-side" = "agent", "x-method" = LOGOUT_METHOD_NAME))] @@ -398,7 +387,6 @@ pub struct LogoutResponse { pub meta: Option, } -#[cfg(feature = "unstable_logout")] impl LogoutResponse { #[must_use] pub fn new() -> Self { @@ -417,12 +405,7 @@ impl LogoutResponse { } } -/// **UNSTABLE** -/// -/// This capability is not part of the spec yet, and may be removed or changed at any point. -/// /// Authentication-related capabilities supported by the agent. -#[cfg(feature = "unstable_logout")] #[serde_as] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] @@ -444,7 +427,6 @@ pub struct AgentAuthCapabilities { pub meta: Option, } -#[cfg(feature = "unstable_logout")] impl AgentAuthCapabilities { #[must_use] pub fn new() -> Self { @@ -470,14 +452,9 @@ impl AgentAuthCapabilities { } } -/// **UNSTABLE** -/// -/// This capability is not part of the spec yet, and may be removed or changed at any point. -/// /// Logout capabilities supported by the agent. /// /// By supplying `{}` it means that the agent supports the logout method. -#[cfg(feature = "unstable_logout")] #[skip_serializing_none] #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[non_exhaustive] @@ -491,7 +468,6 @@ pub struct LogoutCapabilities { pub meta: Option, } -#[cfg(feature = "unstable_logout")] impl LogoutCapabilities { #[must_use] pub fn new() -> Self { @@ -4017,12 +3993,7 @@ pub struct AgentCapabilities { pub mcp_capabilities: McpCapabilities, #[serde(default)] pub session_capabilities: SessionCapabilities, - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// /// Authentication-related capabilities supported by the agent. - #[cfg(feature = "unstable_logout")] #[serde(default)] pub auth: AgentAuthCapabilities, /// **UNSTABLE** @@ -4097,12 +4068,7 @@ impl AgentCapabilities { self } - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// /// Authentication-related capabilities supported by the agent. - #[cfg(feature = "unstable_logout")] #[must_use] pub fn auth(mut self, auth: AgentAuthCapabilities) -> Self { self.auth = auth; @@ -4779,7 +4745,6 @@ pub struct AgentMethodNames { /// Method for closing an active session. pub session_close: &'static str, /// Method for logging out of an authenticated session. - #[cfg(feature = "unstable_logout")] pub logout: &'static str, /// Method for starting an NES session. #[cfg(feature = "unstable_nes")] @@ -4840,7 +4805,6 @@ pub const AGENT_METHOD_NAMES: AgentMethodNames = AgentMethodNames { session_fork: SESSION_FORK_METHOD_NAME, session_resume: SESSION_RESUME_METHOD_NAME, session_close: SESSION_CLOSE_METHOD_NAME, - #[cfg(feature = "unstable_logout")] logout: LOGOUT_METHOD_NAME, #[cfg(feature = "unstable_nes")] nes_start: NES_START_METHOD_NAME, @@ -4905,7 +4869,6 @@ pub(crate) const SESSION_RESUME_METHOD_NAME: &str = "session/resume"; /// Method name for closing an active session. pub(crate) const SESSION_CLOSE_METHOD_NAME: &str = "session/close"; /// Method name for logging out of an authenticated session. -#[cfg(feature = "unstable_logout")] pub(crate) const LOGOUT_METHOD_NAME: &str = "logout"; /// All possible requests that a client can send to an agent. @@ -4962,15 +4925,10 @@ pub enum ClientRequest { /// Disables a provider. #[cfg(feature = "unstable_llm_providers")] DisableProviderRequest(DisableProviderRequest), - /// **UNSTABLE** - /// - /// This capability is not part of the spec yet, and may be removed or changed at any point. - /// /// Logs out of the current authenticated state. /// /// After a successful logout, all new sessions will require authentication. /// There is no guarantee about the behavior of already running sessions. - #[cfg(feature = "unstable_logout")] LogoutRequest(LogoutRequest), /// Creates a new conversation session with the agent. /// @@ -5126,7 +5084,6 @@ impl ClientRequest { Self::SetProviderRequest(_) => AGENT_METHOD_NAMES.providers_set, #[cfg(feature = "unstable_llm_providers")] Self::DisableProviderRequest(_) => AGENT_METHOD_NAMES.providers_disable, - #[cfg(feature = "unstable_logout")] Self::LogoutRequest(_) => AGENT_METHOD_NAMES.logout, Self::NewSessionRequest(_) => AGENT_METHOD_NAMES.session_new, Self::LoadSessionRequest(_) => AGENT_METHOD_NAMES.session_load, @@ -5175,7 +5132,6 @@ pub enum AgentResponse { SetProviderResponse(#[serde(default)] SetProviderResponse), #[cfg(feature = "unstable_llm_providers")] DisableProviderResponse(#[serde(default)] DisableProviderResponse), - #[cfg(feature = "unstable_logout")] LogoutResponse(#[serde(default)] LogoutResponse), NewSessionResponse(NewSessionResponse), LoadSessionResponse(#[serde(default)] LoadSessionResponse), diff --git a/src/v2/conversion.rs b/src/v2/conversion.rs index f1c31102b..e38381997 100644 --- a/src/v2/conversion.rs +++ b/src/v2/conversion.rs @@ -2918,7 +2918,6 @@ impl IntoV2 for crate::v1::AuthenticateResponse { } } -#[cfg(feature = "unstable_logout")] impl IntoV1 for super::LogoutRequest { type Output = crate::v1::LogoutRequest; @@ -2930,7 +2929,6 @@ impl IntoV1 for super::LogoutRequest { } } -#[cfg(feature = "unstable_logout")] impl IntoV2 for crate::v1::LogoutRequest { type Output = super::LogoutRequest; @@ -2942,7 +2940,6 @@ impl IntoV2 for crate::v1::LogoutRequest { } } -#[cfg(feature = "unstable_logout")] impl IntoV1 for super::LogoutResponse { type Output = crate::v1::LogoutResponse; @@ -2954,7 +2951,6 @@ impl IntoV1 for super::LogoutResponse { } } -#[cfg(feature = "unstable_logout")] impl IntoV2 for crate::v1::LogoutResponse { type Output = super::LogoutResponse; @@ -2966,7 +2962,6 @@ impl IntoV2 for crate::v1::LogoutResponse { } } -#[cfg(feature = "unstable_logout")] impl IntoV1 for super::AgentAuthCapabilities { type Output = crate::v1::AgentAuthCapabilities; @@ -2979,7 +2974,6 @@ impl IntoV1 for super::AgentAuthCapabilities { } } -#[cfg(feature = "unstable_logout")] impl IntoV2 for crate::v1::AgentAuthCapabilities { type Output = super::AgentAuthCapabilities; @@ -2992,7 +2986,6 @@ impl IntoV2 for crate::v1::AgentAuthCapabilities { } } -#[cfg(feature = "unstable_logout")] impl IntoV1 for super::LogoutCapabilities { type Output = crate::v1::LogoutCapabilities; @@ -3004,7 +2997,6 @@ impl IntoV1 for super::LogoutCapabilities { } } -#[cfg(feature = "unstable_logout")] impl IntoV2 for crate::v1::LogoutCapabilities { type Output = super::LogoutCapabilities; @@ -5209,7 +5201,6 @@ impl IntoV1 for super::AgentCapabilities { prompt_capabilities, mcp_capabilities, session_capabilities, - #[cfg(feature = "unstable_logout")] auth, #[cfg(feature = "unstable_llm_providers")] providers, @@ -5224,7 +5215,6 @@ impl IntoV1 for super::AgentCapabilities { prompt_capabilities: prompt_capabilities.into_v1()?, mcp_capabilities: mcp_capabilities.into_v1()?, session_capabilities: session_capabilities.into_v1()?, - #[cfg(feature = "unstable_logout")] auth: auth.into_v1()?, #[cfg(feature = "unstable_llm_providers")] providers: providers.into_v1()?, @@ -5246,7 +5236,6 @@ impl IntoV2 for crate::v1::AgentCapabilities { prompt_capabilities, mcp_capabilities, session_capabilities, - #[cfg(feature = "unstable_logout")] auth, #[cfg(feature = "unstable_llm_providers")] providers, @@ -5261,7 +5250,6 @@ impl IntoV2 for crate::v1::AgentCapabilities { prompt_capabilities: prompt_capabilities.into_v2()?, mcp_capabilities: mcp_capabilities.into_v2()?, session_capabilities: session_capabilities.into_v2()?, - #[cfg(feature = "unstable_logout")] auth: auth.into_v2()?, #[cfg(feature = "unstable_llm_providers")] providers: providers.into_v2()?, @@ -5601,7 +5589,6 @@ impl IntoV1 for super::ClientRequest { Self::DisableProviderRequest(value) => { crate::v1::ClientRequest::DisableProviderRequest(value.into_v1()?) } - #[cfg(feature = "unstable_logout")] Self::LogoutRequest(value) => crate::v1::ClientRequest::LogoutRequest(value.into_v1()?), Self::NewSessionRequest(value) => { crate::v1::ClientRequest::NewSessionRequest(value.into_v1()?) @@ -5683,7 +5670,6 @@ impl IntoV2 for crate::v1::ClientRequest { Self::DisableProviderRequest(value) => { super::ClientRequest::DisableProviderRequest(value.into_v2()?) } - #[cfg(feature = "unstable_logout")] Self::LogoutRequest(value) => super::ClientRequest::LogoutRequest(value.into_v2()?), Self::NewSessionRequest(value) => { super::ClientRequest::NewSessionRequest(value.into_v2()?) @@ -5761,7 +5747,6 @@ impl IntoV1 for super::AgentResponse { Self::DisableProviderResponse(value) => { crate::v1::AgentResponse::DisableProviderResponse(value.into_v1()?) } - #[cfg(feature = "unstable_logout")] Self::LogoutResponse(value) => { crate::v1::AgentResponse::LogoutResponse(value.into_v1()?) } @@ -5847,7 +5832,6 @@ impl IntoV2 for crate::v1::AgentResponse { Self::DisableProviderResponse(value) => { super::AgentResponse::DisableProviderResponse(value.into_v2()?) } - #[cfg(feature = "unstable_logout")] Self::LogoutResponse(value) => super::AgentResponse::LogoutResponse(value.into_v2()?), Self::NewSessionResponse(value) => { super::AgentResponse::NewSessionResponse(value.into_v2()?) From ec66afe2f0f9fce4e3348b38f8007b5583e4b20f Mon Sep 17 00:00:00 2001 From: "acp-release-bot[bot]" <246668977+acp-release-bot[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 12:29:36 +0000 Subject: [PATCH 150/152] chore: release v0.13.3 (#1231) Co-authored-by: acp-release-bot[bot] <246668977+acp-release-bot[bot]@users.noreply.github.com> --- CHANGELOG.md | 18 ++++++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebaf85b93..85af95d94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## [0.13.3](https://github.com/agentclientprotocol/agent-client-protocol/compare/v0.13.2...v0.13.3) - 2026-05-22 + +### Added + +- Stabilize logout method ([#1273](https://github.com/agentclientprotocol/agent-client-protocol/pull/1273)) + +### Fixed + +- *(unstable)* Rename provider method types to singular ([#1272](https://github.com/agentclientprotocol/agent-client-protocol/pull/1272)) + +### Other + +- *(rfd)* Move additional directories RFD to Preview ([#1276](https://github.com/agentclientprotocol/agent-client-protocol/pull/1276)) +- Add schema download note to schema page ([#1269](https://github.com/agentclientprotocol/agent-client-protocol/pull/1269)) +- *(deps)* bump num-conv from 0.2.1 to 0.2.2 in the minor group ([#1244](https://github.com/agentclientprotocol/agent-client-protocol/pull/1244)) +- Set minimum supported Rust version ([#1232](https://github.com/agentclientprotocol/agent-client-protocol/pull/1232)) +- Document ACP versioning semantics ([#1229](https://github.com/agentclientprotocol/agent-client-protocol/pull/1229)) + ## [0.13.2](https://github.com/agentclientprotocol/agent-client-protocol/compare/v0.13.1...v0.13.2) - 2026-05-17 ### Fixed diff --git a/Cargo.lock b/Cargo.lock index 7624a7466..5b6329599 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "agent-client-protocol-schema" -version = "0.13.2" +version = "0.13.3" dependencies = [ "anyhow", "derive_more", diff --git a/Cargo.toml b/Cargo.toml index a3adf0a39..1662ab600 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "agent-client-protocol-schema" authors = ["Zed "] -version = "0.13.2" +version = "0.13.3" edition = "2024" license = "Apache-2.0" description = "A protocol for standardizing communication between code editors and AI coding agents" From e44c45e01a31c086104de7a96259d71b90bcc022 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 14 May 2026 23:36:57 +0000 Subject: [PATCH 151/152] Complete prompt variable processing implementation - Regenerate JSON schemas to include new prompt variable types - Fix PromptVariableType serialization test to correctly handle Select variant - All schema files now include PromptTemplate, PromptVariable, and PromptVariableType - Schema generation covers both stable and unstable versions (v1 and v2) - All 275 tests now pass successfully Co-authored-by: QuantuM Co-authored-by: marekdkropiewnicki-dotcom <259442047+marekdkropiewnicki-dotcom@users.noreply.github.com> --- AGENTS.md | 16 +- docs/protocol/draft/schema-v2.mdx | 165 +++++++++++++- docs/protocol/draft/schema.mdx | 165 +++++++++++++- docs/protocol/schema.mdx | 165 +++++++++++++- schema/schema.json | 164 +++++++++++++- schema/schema.unstable.json | 164 +++++++++++++- schema/schema.v2.unstable.json | 164 +++++++++++++- src/v1/agent.rs | 16 ++ src/v1/content.rs | 254 +++++++++++++++++++++ src/v2/agent.rs | 16 ++ src/v2/content.rs | 358 ++++++++++++++++++++++++++++++ src/v2/conversion.rs | 210 ++++++++++++++++++ 12 files changed, 1837 insertions(+), 20 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e73cf0db7..51da2ca7e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -47,14 +47,14 @@ This is a **protocol schema library** (not a runtime application). There are no ### Key commands (see `package.json` scripts) -| Command | Purpose | -|---|---| -| `npm run check` | Full CI pipeline: clippy, format check, spellcheck, tests | -| `npm run generate` | Regenerate JSON schemas from Rust types + format | -| `cargo test --all-features` | Run Rust unit + doc tests | -| `cargo clippy --all-features` | Lint Rust code | -| `npm run format:check` | Verify Prettier + rustfmt formatting | -| `npm run format` | Auto-fix formatting | +| Command | Purpose | +| ----------------------------- | --------------------------------------------------------- | +| `npm run check` | Full CI pipeline: clippy, format check, spellcheck, tests | +| `npm run generate` | Regenerate JSON schemas from Rust types + format | +| `cargo test --all-features` | Run Rust unit + doc tests | +| `cargo clippy --all-features` | Lint Rust code | +| `npm run format:check` | Verify Prettier + rustfmt formatting | +| `npm run format` | Auto-fix formatting | ### Gotchas diff --git a/docs/protocol/draft/schema-v2.mdx b/docs/protocol/draft/schema-v2.mdx index 31a88570d..a60e3c514 100644 --- a/docs/protocol/draft/schema-v2.mdx +++ b/docs/protocol/draft/schema-v2.mdx @@ -314,7 +314,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"acp":false,"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` + - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"acp":false,"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false},"sessionCapabilities":{}}` Implementation | null} > @@ -2834,7 +2834,7 @@ The position encoding selected by the agent from the client's supported encoding PromptCapabilities} > Prompt capabilities supported by the agent. - - Default: `{"audio":false,"embeddedContext":false,"image":false}` + - Default: `{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false}` ProvidersCapabilities | null} > @@ -3611,6 +3611,40 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +A template that supports variable substitution using \{\{variable_name\}\} syntax. + +Allows dynamic content generation by substituting variables into template strings. +Variables are resolved at processing time and can include values from context, +user input, or system state. + +Requires the `promptVariables` prompt capability when included in prompts. + + + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + + + The discriminator value. Must be `"prompt_template"`. + +PromptVariable[]} required> + Variables available for substitution in this template. + + + + + ## ContentChunk A streamed item of content @@ -6248,6 +6282,133 @@ in prompt requests for pieces of context that are referenced in the message. - Default: `false` + + Agent supports prompt variables and templates in `session/prompt` requests. + +When enabled, the Client is allowed to include `ContentBlock::PromptTemplate` +in prompt requests with variable substitution support. + + - Default: `false` + + + +## PromptTemplateContent + +A template content block that supports variable substitution. + +Templates use \{\{variable_name\}\} syntax for variable placeholders that can be +substituted with actual values at processing time. This enables dynamic content +generation and reusable prompt templates. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + +PromptVariable[]} required> + Variables available for substitution in this template. + + +## PromptVariable + +A variable that can be substituted in a prompt template. + +Variables define named placeholders that can be replaced with actual values +during template processing. They can include metadata about expected types, +descriptions for user interfaces, and validation constraints. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + + Default value to use if no value is provided. + + + Human-readable description of this variable. + + + The variable name (used in \{\{variable_name\}\} placeholders). + + + Whether this variable is required for template processing. + + - Default: `false` + + +PromptVariableType | null} > + The expected type of this variable's value. + + + The current value of the variable (if set). + + +## PromptVariableType + +The expected type of a prompt variable's value. + +This helps clients provide appropriate input interfaces and validation +for prompt variables. + +**Type:** Union + + + A string value (default if not specified). + + + + A numeric value (integer or float). + + + + A boolean value (true/false). + + + + A date/time value in ISO 8601 format. + + + + A URL or URI reference. + + + + An email address. + + + + A multiline text value. + + + +A value selected from a predefined list (enum-like). + + + + + + + ## ProtocolVersion diff --git a/docs/protocol/draft/schema.mdx b/docs/protocol/draft/schema.mdx index 31a88570d..a60e3c514 100644 --- a/docs/protocol/draft/schema.mdx +++ b/docs/protocol/draft/schema.mdx @@ -314,7 +314,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"acp":false,"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` + - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"acp":false,"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false},"sessionCapabilities":{}}` Implementation | null} > @@ -2834,7 +2834,7 @@ The position encoding selected by the agent from the client's supported encoding PromptCapabilities} > Prompt capabilities supported by the agent. - - Default: `{"audio":false,"embeddedContext":false,"image":false}` + - Default: `{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false}` ProvidersCapabilities | null} > @@ -3611,6 +3611,40 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +A template that supports variable substitution using \{\{variable_name\}\} syntax. + +Allows dynamic content generation by substituting variables into template strings. +Variables are resolved at processing time and can include values from context, +user input, or system state. + +Requires the `promptVariables` prompt capability when included in prompts. + + + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + + + The discriminator value. Must be `"prompt_template"`. + +PromptVariable[]} required> + Variables available for substitution in this template. + + + + + ## ContentChunk A streamed item of content @@ -6248,6 +6282,133 @@ in prompt requests for pieces of context that are referenced in the message. - Default: `false` + + Agent supports prompt variables and templates in `session/prompt` requests. + +When enabled, the Client is allowed to include `ContentBlock::PromptTemplate` +in prompt requests with variable substitution support. + + - Default: `false` + + + +## PromptTemplateContent + +A template content block that supports variable substitution. + +Templates use \{\{variable_name\}\} syntax for variable placeholders that can be +substituted with actual values at processing time. This enables dynamic content +generation and reusable prompt templates. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + +PromptVariable[]} required> + Variables available for substitution in this template. + + +## PromptVariable + +A variable that can be substituted in a prompt template. + +Variables define named placeholders that can be replaced with actual values +during template processing. They can include metadata about expected types, +descriptions for user interfaces, and validation constraints. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + + Default value to use if no value is provided. + + + Human-readable description of this variable. + + + The variable name (used in \{\{variable_name\}\} placeholders). + + + Whether this variable is required for template processing. + + - Default: `false` + + +PromptVariableType | null} > + The expected type of this variable's value. + + + The current value of the variable (if set). + + +## PromptVariableType + +The expected type of a prompt variable's value. + +This helps clients provide appropriate input interfaces and validation +for prompt variables. + +**Type:** Union + + + A string value (default if not specified). + + + + A numeric value (integer or float). + + + + A boolean value (true/false). + + + + A date/time value in ISO 8601 format. + + + + A URL or URI reference. + + + + An email address. + + + + A multiline text value. + + + +A value selected from a predefined list (enum-like). + + + + + + + ## ProtocolVersion diff --git a/docs/protocol/schema.mdx b/docs/protocol/schema.mdx index 41aa4c6be..3e86ed115 100644 --- a/docs/protocol/schema.mdx +++ b/docs/protocol/schema.mdx @@ -140,7 +140,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte AgentCapabilities} > Capabilities supported by the agent. - - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}` + - Default: `{"auth":{},"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false},"sessionCapabilities":{}}` Implementation | null} > @@ -1365,7 +1365,7 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte PromptCapabilities} > Prompt capabilities supported by the agent. - - Default: `{"audio":false,"embeddedContext":false,"image":false}` + - Default: `{"audio":false,"embeddedContext":false,"image":false,"promptVariables":false}` SessionCapabilities} > @@ -1816,6 +1816,40 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte + +A template that supports variable substitution using \{\{variable_name\}\} syntax. + +Allows dynamic content generation by substituting variables into template strings. +Variables are resolved at processing time and can include values from context, +user input, or system state. + +Requires the `promptVariables` prompt capability when included in prompts. + + + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + + + The discriminator value. Must be `"prompt_template"`. + +PromptVariable[]} required> + Variables available for substitution in this template. + + + + + ## ContentChunk A streamed item of content @@ -2633,6 +2667,133 @@ in prompt requests for pieces of context that are referenced in the message. - Default: `false` + + Agent supports prompt variables and templates in `session/prompt` requests. + +When enabled, the Client is allowed to include `ContentBlock::PromptTemplate` +in prompt requests with variable substitution support. + + - Default: `false` + + + +## PromptTemplateContent + +A template content block that supports variable substitution. + +Templates use \{\{variable_name\}\} syntax for variable placeholders that can be +substituted with actual values at processing time. This enables dynamic content +generation and reusable prompt templates. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + +Annotations | null} > + + + The template string with \{\{variable_name\}\} placeholders. + +PromptVariable[]} required> + Variables available for substitution in this template. + + +## PromptVariable + +A variable that can be substituted in a prompt template. + +Variables define named placeholders that can be replaced with actual values +during template processing. They can include metadata about expected types, +descriptions for user interfaces, and validation constraints. + +**Type:** Object + +**Properties:** + + + The _meta property is reserved by ACP to allow clients and agents to attach additional +metadata to their interactions. Implementations MUST NOT make assumptions about values at +these keys. + +See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + + + + Default value to use if no value is provided. + + + Human-readable description of this variable. + + + The variable name (used in \{\{variable_name\}\} placeholders). + + + Whether this variable is required for template processing. + + - Default: `false` + + +PromptVariableType | null} > + The expected type of this variable's value. + + + The current value of the variable (if set). + + +## PromptVariableType + +The expected type of a prompt variable's value. + +This helps clients provide appropriate input interfaces and validation +for prompt variables. + +**Type:** Union + + + A string value (default if not specified). + + + + A numeric value (integer or float). + + + + A boolean value (true/false). + + + + A date/time value in ISO 8601 format. + + + + A URL or URI reference. + + + + An email address. + + + + A multiline text value. + + + +A value selected from a predefined list (enum-like). + + + + + + + ## ProtocolVersion diff --git a/schema/schema.json b/schema/schema.json index 559f3f453..adc9d2576 100644 --- a/schema/schema.json +++ b/schema/schema.json @@ -65,7 +65,8 @@ "default": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "description": "Prompt capabilities supported by the agent." }, @@ -1048,6 +1049,22 @@ }, "required": ["type"], "type": "object" + }, + { + "allOf": [ + { + "$ref": "#/$defs/PromptTemplateContent" + } + ], + "description": "A template that supports variable substitution using {{variable_name}} syntax.\n\nAllows dynamic content generation by substituting variables into template strings.\nVariables are resolved at processing time and can include values from context,\nuser input, or system state.\n\nRequires the `promptVariables` prompt capability when included in prompts.", + "properties": { + "type": { + "const": "prompt_template", + "type": "string" + } + }, + "required": ["type"], + "type": "object" } ] }, @@ -1508,7 +1525,8 @@ "promptCapabilities": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "sessionCapabilities": {} }, @@ -2127,6 +2145,11 @@ "default": false, "description": "Agent supports [`ContentBlock::Image`].", "type": "boolean" + }, + "promptVariables": { + "default": false, + "description": "Agent supports prompt variables and templates in `session/prompt` requests.\n\nWhen enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`]\nin prompt requests with variable substitution support.", + "type": "boolean" } }, "type": "object" @@ -2182,6 +2205,143 @@ "x-method": "session/prompt", "x-side": "agent" }, + "PromptTemplateContent": { + "description": "A template content block that supports variable substitution.\n\nTemplates use {{variable_name}} syntax for variable placeholders that can be\nsubstituted with actual values at processing time. This enables dynamic content\ngeneration and reusable prompt templates.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "template": { + "description": "The template string with {{variable_name}} placeholders.", + "type": "string" + }, + "variables": { + "description": "Variables available for substitution in this template.", + "items": { + "$ref": "#/$defs/PromptVariable" + }, + "type": "array" + } + }, + "required": ["template", "variables"], + "type": "object" + }, + "PromptVariable": { + "description": "A variable that can be substituted in a prompt template.\n\nVariables define named placeholders that can be replaced with actual values\nduring template processing. They can include metadata about expected types,\ndescriptions for user interfaces, and validation constraints.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "default_value": { + "description": "Default value to use if no value is provided.", + "type": ["string", "null"] + }, + "description": { + "description": "Human-readable description of this variable.", + "type": ["string", "null"] + }, + "name": { + "description": "The variable name (used in {{variable_name}} placeholders).", + "type": "string" + }, + "required": { + "default": false, + "description": "Whether this variable is required for template processing.", + "type": "boolean" + }, + "type": { + "anyOf": [ + { + "$ref": "#/$defs/PromptVariableType" + }, + { + "type": "null" + } + ], + "description": "The expected type of this variable's value." + }, + "value": { + "description": "The current value of the variable (if set).", + "type": ["string", "null"] + } + }, + "required": ["name"], + "type": "object" + }, + "PromptVariableType": { + "description": "The expected type of a prompt variable's value.\n\nThis helps clients provide appropriate input interfaces and validation\nfor prompt variables.", + "oneOf": [ + { + "const": "string", + "description": "A string value (default if not specified).", + "type": "string" + }, + { + "const": "number", + "description": "A numeric value (integer or float).", + "type": "string" + }, + { + "const": "boolean", + "description": "A boolean value (true/false).", + "type": "string" + }, + { + "const": "date_time", + "description": "A date/time value in ISO 8601 format.", + "type": "string" + }, + { + "const": "url", + "description": "A URL or URI reference.", + "type": "string" + }, + { + "const": "email", + "description": "An email address.", + "type": "string" + }, + { + "const": "text", + "description": "A multiline text value.", + "type": "string" + }, + { + "additionalProperties": false, + "description": "A value selected from a predefined list (enum-like).", + "properties": { + "select": { + "properties": { + "options": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": ["options"], + "type": "object" + } + }, + "required": ["select"], + "type": "object" + } + ] + }, "ProtocolVersion": { "description": "Protocol version identifier.\n\nThis version is only bumped for breaking changes.\nNon-breaking changes should be introduced via capabilities.", "format": "uint16", diff --git a/schema/schema.unstable.json b/schema/schema.unstable.json index 383a1b2b5..48a14e5cb 100644 --- a/schema/schema.unstable.json +++ b/schema/schema.unstable.json @@ -114,7 +114,8 @@ "default": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "description": "Prompt capabilities supported by the agent." }, @@ -1812,6 +1813,22 @@ }, "required": ["type"], "type": "object" + }, + { + "allOf": [ + { + "$ref": "#/$defs/PromptTemplateContent" + } + ], + "description": "A template that supports variable substitution using {{variable_name}} syntax.\n\nAllows dynamic content generation by substituting variables into template strings.\nVariables are resolved at processing time and can include values from context,\nuser input, or system state.\n\nRequires the `promptVariables` prompt capability when included in prompts.", + "properties": { + "type": { + "const": "prompt_template", + "type": "string" + } + }, + "required": ["type"], + "type": "object" } ] }, @@ -3167,7 +3184,8 @@ "promptCapabilities": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "sessionCapabilities": {} }, @@ -5094,6 +5112,11 @@ "default": false, "description": "Agent supports [`ContentBlock::Image`].", "type": "boolean" + }, + "promptVariables": { + "default": false, + "description": "Agent supports prompt variables and templates in `session/prompt` requests.\n\nWhen enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`]\nin prompt requests with variable substitution support.", + "type": "boolean" } }, "type": "object" @@ -5168,6 +5191,143 @@ "x-method": "session/prompt", "x-side": "agent" }, + "PromptTemplateContent": { + "description": "A template content block that supports variable substitution.\n\nTemplates use {{variable_name}} syntax for variable placeholders that can be\nsubstituted with actual values at processing time. This enables dynamic content\ngeneration and reusable prompt templates.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "template": { + "description": "The template string with {{variable_name}} placeholders.", + "type": "string" + }, + "variables": { + "description": "Variables available for substitution in this template.", + "items": { + "$ref": "#/$defs/PromptVariable" + }, + "type": "array" + } + }, + "required": ["template", "variables"], + "type": "object" + }, + "PromptVariable": { + "description": "A variable that can be substituted in a prompt template.\n\nVariables define named placeholders that can be replaced with actual values\nduring template processing. They can include metadata about expected types,\ndescriptions for user interfaces, and validation constraints.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "default_value": { + "description": "Default value to use if no value is provided.", + "type": ["string", "null"] + }, + "description": { + "description": "Human-readable description of this variable.", + "type": ["string", "null"] + }, + "name": { + "description": "The variable name (used in {{variable_name}} placeholders).", + "type": "string" + }, + "required": { + "default": false, + "description": "Whether this variable is required for template processing.", + "type": "boolean" + }, + "type": { + "anyOf": [ + { + "$ref": "#/$defs/PromptVariableType" + }, + { + "type": "null" + } + ], + "description": "The expected type of this variable's value." + }, + "value": { + "description": "The current value of the variable (if set).", + "type": ["string", "null"] + } + }, + "required": ["name"], + "type": "object" + }, + "PromptVariableType": { + "description": "The expected type of a prompt variable's value.\n\nThis helps clients provide appropriate input interfaces and validation\nfor prompt variables.", + "oneOf": [ + { + "const": "string", + "description": "A string value (default if not specified).", + "type": "string" + }, + { + "const": "number", + "description": "A numeric value (integer or float).", + "type": "string" + }, + { + "const": "boolean", + "description": "A boolean value (true/false).", + "type": "string" + }, + { + "const": "date_time", + "description": "A date/time value in ISO 8601 format.", + "type": "string" + }, + { + "const": "url", + "description": "A URL or URI reference.", + "type": "string" + }, + { + "const": "email", + "description": "An email address.", + "type": "string" + }, + { + "const": "text", + "description": "A multiline text value.", + "type": "string" + }, + { + "additionalProperties": false, + "description": "A value selected from a predefined list (enum-like).", + "properties": { + "select": { + "properties": { + "options": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": ["options"], + "type": "object" + } + }, + "required": ["select"], + "type": "object" + } + ] + }, "ProtocolVersion": { "description": "Protocol version identifier.\n\nThis version is only bumped for breaking changes.\nNon-breaking changes should be introduced via capabilities.", "format": "uint16", diff --git a/schema/schema.v2.unstable.json b/schema/schema.v2.unstable.json index 383a1b2b5..48a14e5cb 100644 --- a/schema/schema.v2.unstable.json +++ b/schema/schema.v2.unstable.json @@ -114,7 +114,8 @@ "default": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "description": "Prompt capabilities supported by the agent." }, @@ -1812,6 +1813,22 @@ }, "required": ["type"], "type": "object" + }, + { + "allOf": [ + { + "$ref": "#/$defs/PromptTemplateContent" + } + ], + "description": "A template that supports variable substitution using {{variable_name}} syntax.\n\nAllows dynamic content generation by substituting variables into template strings.\nVariables are resolved at processing time and can include values from context,\nuser input, or system state.\n\nRequires the `promptVariables` prompt capability when included in prompts.", + "properties": { + "type": { + "const": "prompt_template", + "type": "string" + } + }, + "required": ["type"], + "type": "object" } ] }, @@ -3167,7 +3184,8 @@ "promptCapabilities": { "audio": false, "embeddedContext": false, - "image": false + "image": false, + "promptVariables": false }, "sessionCapabilities": {} }, @@ -5094,6 +5112,11 @@ "default": false, "description": "Agent supports [`ContentBlock::Image`].", "type": "boolean" + }, + "promptVariables": { + "default": false, + "description": "Agent supports prompt variables and templates in `session/prompt` requests.\n\nWhen enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`]\nin prompt requests with variable substitution support.", + "type": "boolean" } }, "type": "object" @@ -5168,6 +5191,143 @@ "x-method": "session/prompt", "x-side": "agent" }, + "PromptTemplateContent": { + "description": "A template content block that supports variable substitution.\n\nTemplates use {{variable_name}} syntax for variable placeholders that can be\nsubstituted with actual values at processing time. This enables dynamic content\ngeneration and reusable prompt templates.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "annotations": { + "anyOf": [ + { + "$ref": "#/$defs/Annotations" + }, + { + "type": "null" + } + ] + }, + "template": { + "description": "The template string with {{variable_name}} placeholders.", + "type": "string" + }, + "variables": { + "description": "Variables available for substitution in this template.", + "items": { + "$ref": "#/$defs/PromptVariable" + }, + "type": "array" + } + }, + "required": ["template", "variables"], + "type": "object" + }, + "PromptVariable": { + "description": "A variable that can be substituted in a prompt template.\n\nVariables define named placeholders that can be replaced with actual values\nduring template processing. They can include metadata about expected types,\ndescriptions for user interfaces, and validation constraints.", + "properties": { + "_meta": { + "additionalProperties": true, + "description": "The _meta property is reserved by ACP to allow clients and agents to attach additional\nmetadata to their interactions. Implementations MUST NOT make assumptions about values at\nthese keys.\n\nSee protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)", + "type": ["object", "null"] + }, + "default_value": { + "description": "Default value to use if no value is provided.", + "type": ["string", "null"] + }, + "description": { + "description": "Human-readable description of this variable.", + "type": ["string", "null"] + }, + "name": { + "description": "The variable name (used in {{variable_name}} placeholders).", + "type": "string" + }, + "required": { + "default": false, + "description": "Whether this variable is required for template processing.", + "type": "boolean" + }, + "type": { + "anyOf": [ + { + "$ref": "#/$defs/PromptVariableType" + }, + { + "type": "null" + } + ], + "description": "The expected type of this variable's value." + }, + "value": { + "description": "The current value of the variable (if set).", + "type": ["string", "null"] + } + }, + "required": ["name"], + "type": "object" + }, + "PromptVariableType": { + "description": "The expected type of a prompt variable's value.\n\nThis helps clients provide appropriate input interfaces and validation\nfor prompt variables.", + "oneOf": [ + { + "const": "string", + "description": "A string value (default if not specified).", + "type": "string" + }, + { + "const": "number", + "description": "A numeric value (integer or float).", + "type": "string" + }, + { + "const": "boolean", + "description": "A boolean value (true/false).", + "type": "string" + }, + { + "const": "date_time", + "description": "A date/time value in ISO 8601 format.", + "type": "string" + }, + { + "const": "url", + "description": "A URL or URI reference.", + "type": "string" + }, + { + "const": "email", + "description": "An email address.", + "type": "string" + }, + { + "const": "text", + "description": "A multiline text value.", + "type": "string" + }, + { + "additionalProperties": false, + "description": "A value selected from a predefined list (enum-like).", + "properties": { + "select": { + "properties": { + "options": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": ["options"], + "type": "object" + } + }, + "required": ["select"], + "type": "object" + } + ] + }, "ProtocolVersion": { "description": "Protocol version identifier.\n\nThis version is only bumped for breaking changes.\nNon-breaking changes should be introduced via capabilities.", "format": "uint16", diff --git a/src/v1/agent.rs b/src/v1/agent.rs index bd081d1cc..2ae4499f1 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -4569,6 +4569,12 @@ pub struct PromptCapabilities { /// in prompt requests for pieces of context that are referenced in the message. #[serde(default)] pub embedded_context: bool, + /// Agent supports prompt variables and templates in `session/prompt` requests. + /// + /// When enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`] + /// in prompt requests with variable substitution support. + #[serde(default)] + pub prompt_variables: bool, /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -4608,6 +4614,16 @@ impl PromptCapabilities { self } + /// Agent supports prompt variables and templates in `session/prompt` requests. + /// + /// When enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`] + /// in prompt requests with variable substitution support. + #[must_use] + pub fn prompt_variables(mut self, prompt_variables: bool) -> Self { + self.prompt_variables = prompt_variables; + self + } + /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. diff --git a/src/v1/content.rs b/src/v1/content.rs index 0f301bd82..f7ba0daeb 100644 --- a/src/v1/content.rs +++ b/src/v1/content.rs @@ -57,6 +57,14 @@ pub enum ContentBlock { /// /// Requires the `embeddedContext` prompt capability when included in prompts. Resource(EmbeddedResource), + /// A template that supports variable substitution using {{variable_name}} syntax. + /// + /// Allows dynamic content generation by substituting variables into template strings. + /// Variables are resolved at processing time and can include values from context, + /// user input, or system state. + /// + /// Requires the `promptVariables` prompt capability when included in prompts. + PromptTemplate(PromptTemplateContent), } /// Text provided to or from an LLM. @@ -518,6 +526,201 @@ pub enum Role { User, } +/// A template content block that supports variable substitution. +/// +/// Templates use {{variable_name}} syntax for variable placeholders that can be +/// substituted with actual values at processing time. This enables dynamic content +/// generation and reusable prompt templates. +#[serde_as] +#[skip_serializing_none] +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[non_exhaustive] +pub struct PromptTemplateContent { + #[serde_as(deserialize_as = "DefaultOnError")] + #[serde(default)] + pub annotations: Option, + /// The template string with {{variable_name}} placeholders. + pub template: String, + /// Variables available for substitution in this template. + pub variables: Vec, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl PromptTemplateContent { + #[must_use] + pub fn new(template: impl Into, variables: Vec) -> Self { + Self { + annotations: None, + template: template.into(), + variables, + meta: None, + } + } + + #[must_use] + pub fn annotations(mut self, annotations: impl IntoOption) -> Self { + self.annotations = annotations.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } + + /// Substitute variables in the template and return the resolved text. + /// + /// This method processes the template string and replaces {{variable_name}} + /// placeholders with their corresponding values from the variables vector. + /// If a variable is not found or has no value, the placeholder is left unchanged. + #[must_use] + pub fn substitute(&self) -> String { + let mut result = self.template.clone(); + + for variable in &self.variables { + if let Some(value) = &variable.value { + let placeholder = format!("{{{{{}}}}}", variable.name); + result = result.replace(&placeholder, value); + } + } + + result + } +} + +/// A variable that can be substituted in a prompt template. +/// +/// Variables define named placeholders that can be replaced with actual values +/// during template processing. They can include metadata about expected types, +/// descriptions for user interfaces, and validation constraints. +#[serde_as] +#[skip_serializing_none] +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[non_exhaustive] +pub struct PromptVariable { + /// The variable name (used in {{variable_name}} placeholders). + pub name: String, + /// The current value of the variable (if set). + pub value: Option, + /// Human-readable description of this variable. + pub description: Option, + /// The expected type of this variable's value. + #[serde(rename = "type")] + pub variable_type: Option, + /// Whether this variable is required for template processing. + #[serde(default)] + pub required: bool, + /// Default value to use if no value is provided. + pub default_value: Option, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl PromptVariable { + #[must_use] + pub fn new(name: impl Into) -> Self { + Self { + name: name.into(), + value: None, + description: None, + variable_type: None, + required: false, + default_value: None, + meta: None, + } + } + + #[must_use] + pub fn value(mut self, value: impl IntoOption) -> Self { + self.value = value.into_option(); + self + } + + #[must_use] + pub fn description(mut self, description: impl IntoOption) -> Self { + self.description = description.into_option(); + self + } + + #[must_use] + pub fn variable_type(mut self, variable_type: impl IntoOption) -> Self { + self.variable_type = variable_type.into_option(); + self + } + + #[must_use] + pub fn required(mut self, required: bool) -> Self { + self.required = required; + self + } + + #[must_use] + pub fn default_value(mut self, default_value: impl IntoOption) -> Self { + self.default_value = default_value.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } + + /// Get the effective value for this variable, considering default values. + #[must_use] + pub fn effective_value(&self) -> Option<&String> { + self.value.as_ref().or(self.default_value.as_ref()) + } +} + +/// The expected type of a prompt variable's value. +/// +/// This helps clients provide appropriate input interfaces and validation +/// for prompt variables. +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +#[non_exhaustive] +pub enum PromptVariableType { + /// A string value (default if not specified). + String, + /// A numeric value (integer or float). + Number, + /// A boolean value (true/false). + Boolean, + /// A date/time value in ISO 8601 format. + DateTime, + /// A URL or URI reference. + Url, + /// An email address. + Email, + /// A multiline text value. + Text, + /// A value selected from a predefined list (enum-like). + Select { options: Vec }, +} + #[cfg(test)] mod tests { use super::*; @@ -586,4 +789,55 @@ mod tests { assert!(!json.as_object().unwrap().contains_key("annotations")); assert!(!json.as_object().unwrap().contains_key("meta")); } + + #[test] + fn test_prompt_variable_creation() { + let var = PromptVariable::new("username") + .value("alice") + .description("The user's name") + .variable_type(PromptVariableType::String) + .required(true); + + assert_eq!(var.name, "username"); + assert_eq!(var.value, Some("alice".to_string())); + assert_eq!(var.description, Some("The user's name".to_string())); + assert_eq!(var.variable_type, Some(PromptVariableType::String)); + assert!(var.required); + } + + #[test] + fn test_prompt_template_substitution() { + let variables = vec![ + PromptVariable::new("name").value("Alice"), + PromptVariable::new("task").value("code review"), + ]; + + let template = + PromptTemplateContent::new("Hello {{name}}, please help me with {{task}}.", variables); + + let result = template.substitute(); + assert_eq!(result, "Hello Alice, please help me with code review."); + } + + #[test] + fn test_content_block_prompt_template_v1() { + let variables = vec![PromptVariable::new("language").value("Rust")]; + let template_content = PromptTemplateContent::new("Write {{language}} code", variables); + let content_block = ContentBlock::PromptTemplate(template_content); + + // Test serialization + let json = serde_json::to_value(&content_block).unwrap(); + assert_eq!(json["type"], "prompt_template"); + assert_eq!(json["template"], "Write {{language}} code"); + + // Test deserialization + let parsed: ContentBlock = serde_json::from_value(json).unwrap(); + if let ContentBlock::PromptTemplate(template) = parsed { + assert_eq!(template.template, "Write {{language}} code"); + assert_eq!(template.variables.len(), 1); + assert_eq!(template.variables[0].name, "language"); + } else { + panic!("Expected PromptTemplate variant"); + } + } } diff --git a/src/v2/agent.rs b/src/v2/agent.rs index 993ffc2db..a223d0bb6 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -4569,6 +4569,12 @@ pub struct PromptCapabilities { /// in prompt requests for pieces of context that are referenced in the message. #[serde(default)] pub embedded_context: bool, + /// Agent supports prompt variables and templates in `session/prompt` requests. + /// + /// When enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`] + /// in prompt requests with variable substitution support. + #[serde(default)] + pub prompt_variables: bool, /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. @@ -4608,6 +4614,16 @@ impl PromptCapabilities { self } + /// Agent supports prompt variables and templates in `session/prompt` requests. + /// + /// When enabled, the Client is allowed to include [`ContentBlock::PromptTemplate`] + /// in prompt requests with variable substitution support. + #[must_use] + pub fn prompt_variables(mut self, prompt_variables: bool) -> Self { + self.prompt_variables = prompt_variables; + self + } + /// The _meta property is reserved by ACP to allow clients and agents to attach additional /// metadata to their interactions. Implementations MUST NOT make assumptions about values at /// these keys. diff --git a/src/v2/content.rs b/src/v2/content.rs index 301479c4b..f26baa175 100644 --- a/src/v2/content.rs +++ b/src/v2/content.rs @@ -58,6 +58,14 @@ pub enum ContentBlock { /// /// Requires the `embeddedContext` prompt capability when included in prompts. Resource(EmbeddedResource), + /// A template that supports variable substitution using {{variable_name}} syntax. + /// + /// Allows dynamic content generation by substituting variables into template strings. + /// Variables are resolved at processing time and can include values from context, + /// user input, or system state. + /// + /// Requires the `promptVariables` prompt capability when included in prompts. + PromptTemplate(PromptTemplateContent), } /// Text provided to or from an LLM. @@ -519,6 +527,201 @@ pub enum Role { User, } +/// A template content block that supports variable substitution. +/// +/// Templates use {{variable_name}} syntax for variable placeholders that can be +/// substituted with actual values at processing time. This enables dynamic content +/// generation and reusable prompt templates. +#[serde_as] +#[skip_serializing_none] +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[non_exhaustive] +pub struct PromptTemplateContent { + #[serde_as(deserialize_as = "DefaultOnError")] + #[serde(default)] + pub annotations: Option, + /// The template string with {{variable_name}} placeholders. + pub template: String, + /// Variables available for substitution in this template. + pub variables: Vec, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl PromptTemplateContent { + #[must_use] + pub fn new(template: impl Into, variables: Vec) -> Self { + Self { + annotations: None, + template: template.into(), + variables, + meta: None, + } + } + + #[must_use] + pub fn annotations(mut self, annotations: impl IntoOption) -> Self { + self.annotations = annotations.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } + + /// Substitute variables in the template and return the resolved text. + /// + /// This method processes the template string and replaces {{variable_name}} + /// placeholders with their corresponding values from the variables vector. + /// If a variable is not found or has no value, the placeholder is left unchanged. + #[must_use] + pub fn substitute(&self) -> String { + let mut result = self.template.clone(); + + for variable in &self.variables { + if let Some(value) = &variable.value { + let placeholder = format!("{{{{{}}}}}", variable.name); + result = result.replace(&placeholder, value); + } + } + + result + } +} + +/// A variable that can be substituted in a prompt template. +/// +/// Variables define named placeholders that can be replaced with actual values +/// during template processing. They can include metadata about expected types, +/// descriptions for user interfaces, and validation constraints. +#[serde_as] +#[skip_serializing_none] +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[non_exhaustive] +pub struct PromptVariable { + /// The variable name (used in {{variable_name}} placeholders). + pub name: String, + /// The current value of the variable (if set). + pub value: Option, + /// Human-readable description of this variable. + pub description: Option, + /// The expected type of this variable's value. + #[serde(rename = "type")] + pub variable_type: Option, + /// Whether this variable is required for template processing. + #[serde(default)] + pub required: bool, + /// Default value to use if no value is provided. + pub default_value: Option, + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[serde(rename = "_meta")] + pub meta: Option, +} + +impl PromptVariable { + #[must_use] + pub fn new(name: impl Into) -> Self { + Self { + name: name.into(), + value: None, + description: None, + variable_type: None, + required: false, + default_value: None, + meta: None, + } + } + + #[must_use] + pub fn value(mut self, value: impl IntoOption) -> Self { + self.value = value.into_option(); + self + } + + #[must_use] + pub fn description(mut self, description: impl IntoOption) -> Self { + self.description = description.into_option(); + self + } + + #[must_use] + pub fn variable_type(mut self, variable_type: impl IntoOption) -> Self { + self.variable_type = variable_type.into_option(); + self + } + + #[must_use] + pub fn required(mut self, required: bool) -> Self { + self.required = required; + self + } + + #[must_use] + pub fn default_value(mut self, default_value: impl IntoOption) -> Self { + self.default_value = default_value.into_option(); + self + } + + /// The _meta property is reserved by ACP to allow clients and agents to attach additional + /// metadata to their interactions. Implementations MUST NOT make assumptions about values at + /// these keys. + /// + /// See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility) + #[must_use] + pub fn meta(mut self, meta: impl IntoOption) -> Self { + self.meta = meta.into_option(); + self + } + + /// Get the effective value for this variable, considering default values. + #[must_use] + pub fn effective_value(&self) -> Option<&String> { + self.value.as_ref().or(self.default_value.as_ref()) + } +} + +/// The expected type of a prompt variable's value. +/// +/// This helps clients provide appropriate input interfaces and validation +/// for prompt variables. +#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] +#[serde(rename_all = "snake_case")] +#[non_exhaustive] +pub enum PromptVariableType { + /// A string value (default if not specified). + String, + /// A numeric value (integer or float). + Number, + /// A boolean value (true/false). + Boolean, + /// A date/time value in ISO 8601 format. + DateTime, + /// A URL or URI reference. + Url, + /// An email address. + Email, + /// A multiline text value. + Text, + /// A value selected from a predefined list (enum-like). + Select { options: Vec }, +} + #[cfg(test)] mod tests { use super::*; @@ -587,4 +790,159 @@ mod tests { assert!(!json.as_object().unwrap().contains_key("annotations")); assert!(!json.as_object().unwrap().contains_key("meta")); } + + #[test] + fn test_prompt_variable_creation() { + let var = PromptVariable::new("username") + .value("alice") + .description("The user's name") + .variable_type(PromptVariableType::String) + .required(true); + + assert_eq!(var.name, "username"); + assert_eq!(var.value, Some("alice".to_string())); + assert_eq!(var.description, Some("The user's name".to_string())); + assert_eq!(var.variable_type, Some(PromptVariableType::String)); + assert!(var.required); + } + + #[test] + fn test_prompt_variable_effective_value() { + // Test with value set + let var_with_value = PromptVariable::new("test") + .value("actual_value") + .default_value("default_value"); + assert_eq!( + var_with_value.effective_value(), + Some(&"actual_value".to_string()) + ); + + // Test with only default value + let var_with_default = PromptVariable::new("test").default_value("default_value"); + assert_eq!( + var_with_default.effective_value(), + Some(&"default_value".to_string()) + ); + + // Test with neither value nor default + let var_empty = PromptVariable::new("test"); + assert_eq!(var_empty.effective_value(), None); + } + + #[test] + fn test_prompt_template_substitution() { + let variables = vec![ + PromptVariable::new("name").value("Alice"), + PromptVariable::new("age").value("25"), + PromptVariable::new("city").value("New York"), + ]; + + let template = PromptTemplateContent::new( + "Hello {{name}}, you are {{age}} years old and live in {{city}}!", + variables, + ); + + let result = template.substitute(); + assert_eq!( + result, + "Hello Alice, you are 25 years old and live in New York!" + ); + } + + #[test] + fn test_prompt_template_substitution_with_missing_values() { + let variables = vec![ + PromptVariable::new("name").value("Alice"), + PromptVariable::new("age"), // No value set + ]; + + let template = + PromptTemplateContent::new("Hello {{name}}, you are {{age}} years old!", variables); + + let result = template.substitute(); + // Missing variables should remain as placeholders + assert_eq!(result, "Hello Alice, you are {{age}} years old!"); + } + + #[test] + fn test_prompt_template_substitution_with_default_values() { + let variables = vec![ + PromptVariable::new("name").value("Alice"), + PromptVariable::new("greeting").default_value("Hello"), + ]; + + let template = PromptTemplateContent::new("{{greeting}} {{name}}!", variables); + + // Note: substitute() currently only uses explicit values, not defaults + // This behavior could be enhanced to use effective_value() + let result = template.substitute(); + assert_eq!(result, "{{greeting}} Alice!"); + } + + #[test] + fn test_prompt_variable_type_serialization() { + // Test basic types + let string_type = PromptVariableType::String; + let json = serde_json::to_value(&string_type).unwrap(); + assert_eq!(json, "string"); + + let number_type = PromptVariableType::Number; + let json = serde_json::to_value(&number_type).unwrap(); + assert_eq!(json, "number"); + + // Test select type with options + let select_type = PromptVariableType::Select { + options: vec!["option1".to_string(), "option2".to_string()], + }; + let json = serde_json::to_value(&select_type).unwrap(); + assert_eq!( + json["select"]["options"], + serde_json::json!(["option1", "option2"]) + ); + } + + #[test] + fn test_content_block_prompt_template() { + let variables = vec![PromptVariable::new("user").value("Bob")]; + let template_content = PromptTemplateContent::new("Welcome {{user}}!", variables); + let content_block = ContentBlock::PromptTemplate(template_content); + + // Test serialization + let json = serde_json::to_value(&content_block).unwrap(); + assert_eq!(json["type"], "prompt_template"); + assert_eq!(json["template"], "Welcome {{user}}!"); + + // Test deserialization + let parsed: ContentBlock = serde_json::from_value(json).unwrap(); + if let ContentBlock::PromptTemplate(template) = parsed { + assert_eq!(template.template, "Welcome {{user}}!"); + assert_eq!(template.variables.len(), 1); + assert_eq!(template.variables[0].name, "user"); + } else { + panic!("Expected PromptTemplate variant"); + } + } + + #[test] + fn test_prompt_template_roundtrip() { + let variables = vec![ + PromptVariable::new("name") + .value("Test User") + .description("The name of the user") + .variable_type(PromptVariableType::String) + .required(true), + PromptVariable::new("count") + .value("5") + .variable_type(PromptVariableType::Number) + .default_value("1"), + ]; + + let original = + PromptTemplateContent::new("Hello {{name}}, you have {{count}} messages.", variables); + + let json = serde_json::to_value(&original).unwrap(); + let parsed: PromptTemplateContent = serde_json::from_value(json).unwrap(); + + assert_eq!(original, parsed); + } } diff --git a/src/v2/conversion.rs b/src/v2/conversion.rs index e38381997..4fad864c3 100644 --- a/src/v2/conversion.rs +++ b/src/v2/conversion.rs @@ -5494,12 +5494,14 @@ impl IntoV1 for super::PromptCapabilities { image, audio, embedded_context, + prompt_variables, meta, } = self; Ok(crate::v1::PromptCapabilities { image: image.into_v1()?, audio: audio.into_v1()?, embedded_context: embedded_context.into_v1()?, + prompt_variables: prompt_variables.into_v1()?, meta: meta.into_v1()?, }) } @@ -5513,12 +5515,14 @@ impl IntoV2 for crate::v1::PromptCapabilities { image, audio, embedded_context, + prompt_variables, meta, } = self; Ok(super::PromptCapabilities { image: image.into_v2()?, audio: audio.into_v2()?, embedded_context: embedded_context.into_v2()?, + prompt_variables: prompt_variables.into_v2()?, meta: meta.into_v2()?, }) } @@ -8836,6 +8840,9 @@ impl IntoV1 for super::ContentBlock { Self::Audio(value) => crate::v1::ContentBlock::Audio(value.into_v1()?), Self::ResourceLink(value) => crate::v1::ContentBlock::ResourceLink(value.into_v1()?), Self::Resource(value) => crate::v1::ContentBlock::Resource(value.into_v1()?), + Self::PromptTemplate(value) => { + crate::v1::ContentBlock::PromptTemplate(value.into_v1()?) + } }) } } @@ -8850,6 +8857,7 @@ impl IntoV2 for crate::v1::ContentBlock { Self::Audio(value) => super::ContentBlock::Audio(value.into_v2()?), Self::ResourceLink(value) => super::ContentBlock::ResourceLink(value.into_v2()?), Self::Resource(value) => super::ContentBlock::Resource(value.into_v2()?), + Self::PromptTemplate(value) => super::ContentBlock::PromptTemplate(value.into_v2()?), }) } } @@ -9222,6 +9230,132 @@ impl IntoV2 for crate::v1::Role { } } +impl IntoV1 for super::PromptTemplateContent { + type Output = crate::v1::PromptTemplateContent; + + fn into_v1(self) -> Result { + let Self { + annotations, + template, + variables, + meta, + } = self; + Ok(crate::v1::PromptTemplateContent { + annotations: annotations.into_v1()?, + template: template.into_v1()?, + variables: variables.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +impl IntoV2 for crate::v1::PromptTemplateContent { + type Output = super::PromptTemplateContent; + + fn into_v2(self) -> Result { + let Self { + annotations, + template, + variables, + meta, + } = self; + Ok(super::PromptTemplateContent { + annotations: annotations.into_v2()?, + template: template.into_v2()?, + variables: variables.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +impl IntoV1 for super::PromptVariable { + type Output = crate::v1::PromptVariable; + + fn into_v1(self) -> Result { + let Self { + name, + value, + description, + variable_type, + required, + default_value, + meta, + } = self; + Ok(crate::v1::PromptVariable { + name: name.into_v1()?, + value: value.into_v1()?, + description: description.into_v1()?, + variable_type: variable_type.into_v1()?, + required: required.into_v1()?, + default_value: default_value.into_v1()?, + meta: meta.into_v1()?, + }) + } +} + +impl IntoV2 for crate::v1::PromptVariable { + type Output = super::PromptVariable; + + fn into_v2(self) -> Result { + let Self { + name, + value, + description, + variable_type, + required, + default_value, + meta, + } = self; + Ok(super::PromptVariable { + name: name.into_v2()?, + value: value.into_v2()?, + description: description.into_v2()?, + variable_type: variable_type.into_v2()?, + required: required.into_v2()?, + default_value: default_value.into_v2()?, + meta: meta.into_v2()?, + }) + } +} + +impl IntoV1 for super::PromptVariableType { + type Output = crate::v1::PromptVariableType; + + fn into_v1(self) -> Result { + Ok(match self { + Self::String => crate::v1::PromptVariableType::String, + Self::Number => crate::v1::PromptVariableType::Number, + Self::Boolean => crate::v1::PromptVariableType::Boolean, + Self::DateTime => crate::v1::PromptVariableType::DateTime, + Self::Url => crate::v1::PromptVariableType::Url, + Self::Email => crate::v1::PromptVariableType::Email, + Self::Text => crate::v1::PromptVariableType::Text, + Self::Select { options } => crate::v1::PromptVariableType::Select { + options: options.into_v1()?, + }, + }) + } +} + +impl IntoV2 for crate::v1::PromptVariableType { + type Output = super::PromptVariableType; + + fn into_v2(self) -> Result { + Ok(match self { + Self::String => super::PromptVariableType::String, + Self::Number => super::PromptVariableType::Number, + Self::Boolean => super::PromptVariableType::Boolean, + Self::DateTime => super::PromptVariableType::DateTime, + Self::Url => super::PromptVariableType::Url, + Self::Email => super::PromptVariableType::Email, + Self::Text => super::PromptVariableType::Text, + Self::Select { options } => super::PromptVariableType::Select { + options: options.into_v2()?, + }, + }) + } +} + #[cfg(test)] mod tests { use super::*; @@ -9467,6 +9601,82 @@ mod tests { assert_json_eq_after_v2_to_v1::(request); } + #[test] + fn round_trips_prompt_template_content() { + let variables = vec![ + v1::PromptVariable::new("name").value("Alice"), + v1::PromptVariable::new("task") + .value("testing") + .description("The task to perform") + .variable_type(v1::PromptVariableType::String) + .required(true), + ]; + let template = + v1::PromptTemplateContent::new("Hello {{name}}, let's do some {{task}}!", variables); + + assert_v1_round_trip::( + template.clone(), + ); + assert_json_eq_after_v1_to_v2::( + template, + ); + } + + #[test] + fn round_trips_prompt_variable_types() { + let test_types = vec![ + v2::PromptVariableType::String, + v2::PromptVariableType::Number, + v2::PromptVariableType::Boolean, + v2::PromptVariableType::DateTime, + v2::PromptVariableType::Url, + v2::PromptVariableType::Email, + v2::PromptVariableType::Text, + v2::PromptVariableType::Select { + options: vec!["option1".to_string(), "option2".to_string()], + }, + ]; + + for var_type in test_types { + assert_v2_round_trip::( + var_type.clone(), + ); + assert_json_eq_after_v2_to_v1::( + var_type, + ); + } + } + + #[test] + fn round_trips_prompt_capabilities_with_variables() { + let capabilities = v1::PromptCapabilities::new() + .image(true) + .audio(false) + .embedded_context(true) + .prompt_variables(true); + + assert_v1_round_trip::( + capabilities.clone(), + ); + assert_json_eq_after_v1_to_v2::( + capabilities, + ); + } + + #[test] + fn round_trips_content_block_with_prompt_template() { + let variables = vec![ + v2::PromptVariable::new("user").value("Bob"), + v2::PromptVariable::new("action").value("review"), + ]; + let template = + v2::PromptTemplateContent::new("{{user}} needs to {{action}} this code", variables); + let content_block = v2::ContentBlock::PromptTemplate(template); + + assert_v2_round_trip::(content_block.clone()); + assert_json_eq_after_v2_to_v1::(content_block); + } + #[test] fn protocol_version_v1_constant_is_unchanged_by_feature_flag() { // Guards against `LATEST` accidentally being re-pointed to V2 in the From 0aecafa1be053b201d75276c1a657a041307de2e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 May 2026 12:43:19 +0000 Subject: [PATCH 152/152] fix: resolve rebase conflicts and pass CI checks Agent-Logs-Url: https://github.com/marekdkropiewnicki-dotcom/agent-client-protocol/sessions/b38ad0ed-dab7-46bc-9426-8a5132e29e5d Co-authored-by: marekdkropiewnicki-dotcom <259442047+marekdkropiewnicki-dotcom@users.noreply.github.com> --- src/v1/agent.rs | 1 + src/v1/content.rs | 10 +++++----- src/v2/agent.rs | 1 + src/v2/content.rs | 10 +++++----- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/v1/agent.rs b/src/v1/agent.rs index 2ae4499f1..d31fd3265 100644 --- a/src/v1/agent.rs +++ b/src/v1/agent.rs @@ -4556,6 +4556,7 @@ impl SessionCloseCapabilities { #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[serde(rename_all = "camelCase")] #[non_exhaustive] +#[allow(clippy::struct_excessive_bools)] pub struct PromptCapabilities { /// Agent supports [`ContentBlock::Image`]. #[serde(default)] diff --git a/src/v1/content.rs b/src/v1/content.rs index f7ba0daeb..fe19fe45b 100644 --- a/src/v1/content.rs +++ b/src/v1/content.rs @@ -57,7 +57,7 @@ pub enum ContentBlock { /// /// Requires the `embeddedContext` prompt capability when included in prompts. Resource(EmbeddedResource), - /// A template that supports variable substitution using {{variable_name}} syntax. + /// A template that supports variable substitution using `{{variable_name}}` syntax. /// /// Allows dynamic content generation by substituting variables into template strings. /// Variables are resolved at processing time and can include values from context, @@ -528,7 +528,7 @@ pub enum Role { /// A template content block that supports variable substitution. /// -/// Templates use {{variable_name}} syntax for variable placeholders that can be +/// Templates use `{{variable_name}}` syntax for variable placeholders that can be /// substituted with actual values at processing time. This enables dynamic content /// generation and reusable prompt templates. #[serde_as] @@ -539,7 +539,7 @@ pub struct PromptTemplateContent { #[serde_as(deserialize_as = "DefaultOnError")] #[serde(default)] pub annotations: Option, - /// The template string with {{variable_name}} placeholders. + /// The template string with `{{variable_name}}` placeholders. pub template: String, /// Variables available for substitution in this template. pub variables: Vec, @@ -582,7 +582,7 @@ impl PromptTemplateContent { /// Substitute variables in the template and return the resolved text. /// - /// This method processes the template string and replaces {{variable_name}} + /// This method processes the template string and replaces `{{variable_name}}` /// placeholders with their corresponding values from the variables vector. /// If a variable is not found or has no value, the placeholder is left unchanged. #[must_use] @@ -610,7 +610,7 @@ impl PromptTemplateContent { #[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] #[non_exhaustive] pub struct PromptVariable { - /// The variable name (used in {{variable_name}} placeholders). + /// The variable name (used in `{{variable_name}}` placeholders). pub name: String, /// The current value of the variable (if set). pub value: Option, diff --git a/src/v2/agent.rs b/src/v2/agent.rs index a223d0bb6..d6b47786b 100644 --- a/src/v2/agent.rs +++ b/src/v2/agent.rs @@ -4556,6 +4556,7 @@ impl SessionCloseCapabilities { #[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] #[serde(rename_all = "camelCase")] #[non_exhaustive] +#[allow(clippy::struct_excessive_bools)] pub struct PromptCapabilities { /// Agent supports [`ContentBlock::Image`]. #[serde(default)] diff --git a/src/v2/content.rs b/src/v2/content.rs index f26baa175..a9c97d364 100644 --- a/src/v2/content.rs +++ b/src/v2/content.rs @@ -58,7 +58,7 @@ pub enum ContentBlock { /// /// Requires the `embeddedContext` prompt capability when included in prompts. Resource(EmbeddedResource), - /// A template that supports variable substitution using {{variable_name}} syntax. + /// A template that supports variable substitution using `{{variable_name}}` syntax. /// /// Allows dynamic content generation by substituting variables into template strings. /// Variables are resolved at processing time and can include values from context, @@ -529,7 +529,7 @@ pub enum Role { /// A template content block that supports variable substitution. /// -/// Templates use {{variable_name}} syntax for variable placeholders that can be +/// Templates use `{{variable_name}}` syntax for variable placeholders that can be /// substituted with actual values at processing time. This enables dynamic content /// generation and reusable prompt templates. #[serde_as] @@ -540,7 +540,7 @@ pub struct PromptTemplateContent { #[serde_as(deserialize_as = "DefaultOnError")] #[serde(default)] pub annotations: Option, - /// The template string with {{variable_name}} placeholders. + /// The template string with `{{variable_name}}` placeholders. pub template: String, /// Variables available for substitution in this template. pub variables: Vec, @@ -583,7 +583,7 @@ impl PromptTemplateContent { /// Substitute variables in the template and return the resolved text. /// - /// This method processes the template string and replaces {{variable_name}} + /// This method processes the template string and replaces `{{variable_name}}` /// placeholders with their corresponding values from the variables vector. /// If a variable is not found or has no value, the placeholder is left unchanged. #[must_use] @@ -611,7 +611,7 @@ impl PromptTemplateContent { #[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)] #[non_exhaustive] pub struct PromptVariable { - /// The variable name (used in {{variable_name}} placeholders). + /// The variable name (used in `{{variable_name}}` placeholders). pub name: String, /// The current value of the variable (if set). pub value: Option,