Repository navigation
Releases
Releases · agentclientprotocol/python-sdk
1.0.0
Agent Client Protocol Python SDK 1.0.0 is the first stable 1.x release.
Highlights
- Stable ACP v1 bindings now track
schema-v1.23.0, with the missing v1 protocol methods, stablesession/resumeandsession/closerouting, and request cancellation via$/cancel_request. - Experimental ACP v2 bindings and runtime track
schema-v2.0.0-alpha.5, with protocol negotiation and support over stdio, Streamable HTTP, and WebSocket. - More robust transport handling: malformed and non-object JSON-RPC frames, invalid response IDs, SSE UTF-8 boundaries, and error responses are handled consistently.
- Session snapshots isolate raw tool payloads, explicitly empty permission options are rejected, and subprocess shutdown bounds stdin closure.
- Package support extends to Python 3.15 (Python requirement:
>=3.10,<3.16), with dependency security updates.
Upgrading from 0.12.x
This is a major release with API changes. Review these before upgrading:
- The
acp.helpersmodule and its top-level builder exports have been removed. Construct generated models fromacp.schemadirectly; discriminator fields have defaults. For example, replacetext_block("Hello")withTextContentBlock(text="Hello")imported fromacp.schema. - Review v1 schema changes, including session notice capabilities, the stable tool-call
namefield,TerminalAuthMethodreplacingEnvVarAuthMethod, and stricter accepted elicitation content. See the quickstart. - Experimental v2 connection methods and handlers use expanded snake-case parameters, for example
connection.new_session(cwd="/workspace"). See the v2 guide. - Web transports use Starlette and
httpx2[http2]. Installagent-client-protocol[http]for those optional dependencies. See the web transport guide.
The stable SDK version does not change the experimental status of protocol v2 or the web transports.
pip install --upgrade agent-client-protocol==1.0.0What's Changed
- fix: handle UTF-8 split across SSE chunks by @Excelius-Wang in #135
- refactor(codegen): generate schema bindings directly by @PsiACE in #136
- refactor: remove schema helper API by @PsiACE in #137
- feat(schema): update to 1.21.0 by @PsiACE in #138
- refactor(codegen): separate v1 schema semantics by @PsiACE in #140
- feat(codegen): generate experimental v2 bindings by @PsiACE in #141
- feat(v2): add experimental runtime and negotiation by @PsiACE in #139
- refactor: simplify web transports with Starlette by @frostming in #142
- chore: migrate HTTP client dependency from httpx to httpx2 by @frostming in #143
- chore(deps): bump anyio from 4.14.1 to 4.14.2 in the uv group across 1 directory by @dependabot[bot] in #145
- feat(schema)!: bump ACP v1 schema to 1.23.0 by @PsiACE in #146
- feat(v2)!: bump ACP draft schema to 2.0.0-alpha.5 by @PsiACE in #147
- feat: complete missing v1 protocol methods by @frostming in #148
- refactor: derive routers from protocol metadata by @frostming in #149
- refactor(v2)!: expand parameters and derive routes from protocols by @frostming in #150
- chore(deps): bump urllib3 from 2.7.0 to 2.8.0 in the uv group across 1 directory by @dependabot[bot] in #164
- chore(deps): bump virtualenv from 20.36.1 to 21.7.13 in the uv group across 1 directory by @dependabot[bot] in #165
- fix: make the schema codegen host-independent by @PerryLink in #151
- fix: bound stdin closure during subprocess shutdown by @Oscar-Williams in #152
- fix: align AgentSideConnection.to_agent type with AgentFactory by @extreme-structure in #157
- fix: route stable session/resume and session/close by @monody0007 in #159
- fix(contrib): reject explicitly empty permission options by @monody0007 in #156
- fix(connection): support $/cancel_request request cancellation by @monody0007 in #158
- fix(ws): warn when the server ignores binary frames by @frostming in #166
- feat(http): serve v2 over Streamable HTTP and WebSocket by @odellus in #163
- fix(transport): ignore JSON-RPC frames that are not objects by @PerryLink in #153
- fix: isolate raw tool payloads in session snapshots by @ningyixi in #171
- fix(ws): ignore non-object JSON frames in client transport by @CHLIN0 in #169
- fix(connection): ignore responses whose id is not a RequestId by @PerryLink in #167
- fix(http): skip non-object JSON in SSE streams by @ningyixi in #172
- feat: support Python 3.15 by @daeho-ro in #173
- chore(deps): bump dev tooling for security advisories by @benbrandt in #178
- fix: align JSON-RPC error handling across transports by @PsiACE in #174
- chore(deps): bump the uv group across 1 directory with 2 updates by @dependabot[bot] in #180
- chore(deps): bump virtualenv from 21.14.12 to 21.14.13 in the uv group across 1 directory by @dependabot[bot] in #181
New Contributors
- @Excelius-Wang made their first contribution in #135
- @PerryLink made their first contribution in #151
- @Oscar-Williams made their first contribution in #152
- @extreme-structure made their first contribution in #157
- @monody0007 made their first contribution in #159
- @odellus made their first contribution in #163
- @ningyixi made their first contribution in #171
- @CHLIN0 made their first contribution in #169
- @daeho-ro made their first contribution in #173
- @benbrandt made their first contribution in #178
Full Changelog: 0.12.1...1.0.0
1.0.0rc3
What's Changed
- chore(deps): bump urllib3 from 2.7.0 to 2.8.0 in the uv group across 1 directory by @dependabot[bot] in #164
- chore(deps): bump virtualenv from 20.36.1 to 21.7.13 in the uv group across 1 directory by @dependabot[bot] in #165
- fix: make the schema codegen host-independent by @PerryLink in #151
- fix: bound stdin closure during subprocess shutdown by @Oscar-Williams in #152
- fix: align AgentSideConnection.to_agent type with AgentFactory by @extreme-structure in #157
- fix: route stable session/resume and session/close by @monody0007 in #159
- fix(contrib): reject explicitly empty permission options by @monody0007 in #156
- fix(connection): support $/cancel_request request cancellation by @monody0007 in #158
- fix(ws): warn when the server ignores binary frames by @frostming in #166
- feat(http): serve v2 over Streamable HTTP and WebSocket by @odellus in #163
- fix(transport): ignore JSON-RPC frames that are not objects by @PerryLink in #153
New Contributors
- @PerryLink made their first contribution in #151
- @Oscar-Williams made their first contribution in #152
- @extreme-structure made their first contribution in #157
- @monody0007 made their first contribution in #159
- @odellus made their first contribution in #163
Full Changelog: 1.0.0rc2...1.0.0rc3
v1.0.0rc2
What's Changed
- chore: migrate HTTP client dependency from httpx to httpx2 by @frostming in #143
- chore(deps): bump anyio from 4.14.1 to 4.14.2 in the uv group across 1 directory by @dependabot[bot] in #145
- feat(schema)!: bump ACP v1 schema to 1.23.0 by @PsiACE in #146
- feat(v2)!: bump ACP draft schema to 2.0.0-alpha.5 by @PsiACE in #147
- feat: complete missing v1 protocol methods by @frostming in #148
- refactor: derive routers from protocol metadata by @frostming in #149
- refactor(v2)!: expand parameters and derive routes from protocols by @frostming in #150
Full Changelog: 1.0.0rc1...1.0.0rc2
v1.0.0 RC1
What's Changed
- fix: handle UTF-8 split across SSE chunks by @Excelius-Wang in #135
- refactor(codegen): generate schema bindings directly by @PsiACE in #136
- refactor: remove schema helper API by @PsiACE in #137
- feat(schema): update to 1.21.0 by @PsiACE in #138
- refactor(codegen): separate v1 schema semantics by @PsiACE in #140
- feat(codegen): generate experimental v2 bindings by @PsiACE in #141
- feat(v2): add experimental runtime and negotiation by @PsiACE in #139
- refactor: simplify web transports with Starlette by @frostming in #142
New Contributors
- @Excelius-Wang made their first contribution in #135
Full Changelog: 0.12.1...1.0.0rc1
0.12.1
What's Changed
- fix(codegen): support datamodel-code-generator 0.71 by @PsiACE in #127
- chore(deps): bump h2 from 4.3.0 to 4.4.1 in the uv group across 1 directory by @dependabot[bot] in #131
- refactor(connection): simplify connection handling and remove unused components by @frostming in #132
- chore(deps): bump pymdown-extensions from 11.0 to 11.0.1 in the uv group across 1 directory by @dependabot[bot] in #133
- fix(connection): preserve notification response ordering by @hallerite in #129
New Contributors
- @hallerite made their first contribution in #129
Full Changelog: 0.12.0...0.12.1
0.12.0
What's Changed
- feat(schema): bump ACP schema to v1.19.0 (extensible unions + lenient deserialization) by @michelTho in #117
- RFD-based ACP HTTP and WS web transport implementation by @federicociner in #118
- chore(deps-dev): bump datamodel-code-generator from 0.35.0 to 0.64.0 in the uv group across 1 directory by @dependabot[bot] in #123
- release: 0.12.0 by @PsiACE in #124
New Contributors
- @federicociner made their first contribution in #118
Full Changelog: 0.11.1...0.12.0
0.11.1
What's Changed
- fix(connection): log unhandled RPC handler exceptions by @michelTho in #116
- package scritps/ directory as well by @mcepl in #120
- chore(deps): bump pymdown-extensions from 10.21.3 to 11.0 in the uv group across 1 directory by @dependabot[bot] in #121
- chore: bump version to 0.11.1 by @PsiACE in #122
New Contributors
Full Changelog: 0.11.0...0.11.1
0.11.0
What's Changed
- chore(deps): bump uv from 0.11.6 to 0.11.15 in the uv group across 1 directory by @dependabot[bot] in #107
- feat: update ACP schema to v0.13.3 by @PsiACE in #106
- feat: update ACP schema to v0.13.6 by @PsiACE in #110
- fix: recover from oversized JSON-RPC frames by @PsiACE in #111
- fix: close run_agent connection on cancellation by @PsiACE in #113
- feat(schema): bump ACP schema to v1.16.0 by @PsiACE in #114
Full Changelog: 0.10.1...0.11.0
0.10.1
What's Changed
- chore(deps): bump urllib3 from 2.6.3 to 2.7.0 in the uv group across 1 directory by @dependabot[bot] in #96
- chore(deps): bump pymdown-extensions from 10.16.1 to 10.21.3 in the uv group across 1 directory by @dependabot[bot] in #99
- chore(deps): bump idna from 3.11 to 3.15 in the uv group across 1 directory by @dependabot[bot] in #100
- fix(examples): improve gemini.py CLI experience by @whhe in #103
- fix: assign receive-loop attributes before spawning recv task by @SAY-5 in #102
- release: 0.10.1 by @PsiACE in #104
New Contributors
Full Changelog: 0.10.0...0.10.1
0.10.0
What's Changed
- chore(deps): bump uv from 0.9.7 to 0.11.6 in the uv group across 1 directory by @dependabot[bot] in #88
- chore(deps-dev): bump pytest from 8.4.2 to 9.0.3 in the uv group across 1 directory by @dependabot[bot] in #89
- fix: reject pending requests on EOF to prevent infinite hang by @simonrosenberg in #86
- chore(deps-dev): bump python-dotenv from 1.2.1 to 1.2.2 in the uv group across 1 directory by @dependabot[bot] in #90
- feat: bump acp protocol to 0.12.2 by @PsiACE in #93
- fix(schema): coerce string protocolVersion in InitializeRequest by @WeeeeeKdY in #92
- fix: skip blank/whitespace lines in receive loop by @aorumbayev in #87
- feat: add receive_timeout parameter to Connection class by @birdg0 in #84
New Contributors
- @simonrosenberg made their first contribution in #86
- @WeeeeeKdY made their first contribution in #92
- @aorumbayev made their first contribution in #87
- @birdg0 made their first contribution in #84
Full Changelog: 0.9.0...0.10.0