From 8fe88218f119509d2dcd30124b93c6922c8497b7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 04:42:42 +0000 Subject: [PATCH] chore(main): release 4.0.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 177 ++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 3 files changed, 179 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 24e095ae..e6f87756 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "3.12.0" + ".": "4.0.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index cf42238f..6b1d0c0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,182 @@ # Changelog +## [4.0.0](https://github.com/adcontextprotocol/adcp-client-python/compare/v3.12.0...v4.0.0) (2026-04-22) + + +### ⚠ BREAKING CHANGES + +* **types:** rename Asset content types to Content +* **server:** pluggable TaskStore on A2A — unblock production A2A adoption +* **server:** expert-review followups — tenant-scoped idempotency, A2A context_factory, ContextVar safety +* **types:** AssetsNN semantic aliases + format_category shim + downstream smoke +* **sdk:** ResolvedBrand.brand_manifest removed. Use .brand. CreateMediaBuyRequest.brand_manifest removed. Use brand. BrandManifest, FormatCategory, DeliverTo, PromotedProducts, PromotedOfferings, Pricing, PackageStatus imports now raise ImportError. See MIGRATION_v3_to_v4.md. +* **webhooks:** ADCPClient webhook verification now requires raw_body to be passed through from the HTTP handler. Callers that relied on the implicit re-serialize-from-payload fallback will start seeing ADCPWebhookSignatureError until they plumb the raw body through from their framework's pre-parse hook. Fix path: +* **webhooks:** get_adcp_signed_headers_for_webhook now signs the compact-separator JSON form of the payload. Callers that previously hand-serialized spaced JSON and POSTed it with content= will see signature mismatches after this change. The fix is to also serialize with separators=(",", ":") or switch to httpx json= which already uses that form. +* serve(mount=...) kwarg removed. +* ``Budget.authority_level`` is removed. Migrate to ``reallocation_threshold`` / ``reallocation_unlimited`` on ``plan.budget``, and set ``plan.human_review_required`` for decisions affecting data subjects. See the rc.4 migration section in README.md. + +### Features + +* A2A server support in serve() ([d0c3015](https://github.com/adcontextprotocol/adcp-client-python/commit/d0c3015db1ff691964a1791414c3abedeaed225f)) +* A2A server support in serve() ([4e5db4f](https://github.com/adcontextprotocol/adcp-client-python/commit/4e5db4f71839efc3db61f4c415e315f7c091dbbf)), closes [#175](https://github.com/adcontextprotocol/adcp-client-python/issues/175) +* **a2a:** auto-retain contextId + taskId across multi-turn calls ([0564635](https://github.com/adcontextprotocol/adcp-client-python/commit/056463547e88dde2919d644d2dbc32e13dea947a)) +* **a2a:** auto-retain contextId + taskId across multi-turn calls ([8a084ec](https://github.com/adcontextprotocol/adcp-client-python/commit/8a084ecd1e8cf3e31c57fbe6f6c25f673b6cbe07)) +* ADCP 3.0 server DX helpers, type guards, and schema sync ([de4a079](https://github.com/adcontextprotocol/adcp-client-python/commit/de4a079e6319994ca3a122815337be88be2c52e6)) +* ADCP 3.0 server DX helpers, type guards, and schema sync to latest ([bf0d81d](https://github.com/adcontextprotocol/adcp-client-python/commit/bf0d81d4d2b399cb6a33c0b32562a798ca78bde4)) +* AdCP RFC 9421 request-signing profile ([ba53961](https://github.com/adcontextprotocol/adcp-client-python/commit/ba5396181715ef514c6e0df11b675a516d24244b)) +* add collection_list and sync_governance task methods ([2dbeac1](https://github.com/adcontextprotocol/adcp-client-python/commit/2dbeac1b6bb452a18674bf21ab67a547818b69ff)) +* address PR review — real-world transforms and SDK error types ([cfaa9c5](https://github.com/adcontextprotocol/adcp-client-python/commit/cfaa9c505d7e82eed5c40f7651094e6dac703f91)) +* AssetsNN aliases, format_category shim, MCP adoption hooks — unblock salesagent ([ed7d30a](https://github.com/adcontextprotocol/adcp-client-python/commit/ed7d30a8508b00c970247165191c0d9c83255d64)) +* auto-inject context passthrough in create_tool_caller ([4d4fe5e](https://github.com/adcontextprotocol/adcp-client-python/commit/4d4fe5e556e66b4e1bd6f8543d6c6f4ce2f109ae)) +* bump to 4.0.0b1 with test fixtures updated for new schema shape ([dcd6709](https://github.com/adcontextprotocol/adcp-client-python/commit/dcd670987d4853930e5f66773309cae2b4504880)) +* bundle-based schema sync + Sigstore verify + 4.0.0b1 on latest ([755071a](https://github.com/adcontextprotocol/adcp-client-python/commit/755071a8e24f079c2e0b305a96d495fa654e362f)) +* error translation helper for multi-transport servers ([7825ed6](https://github.com/adcontextprotocol/adcp-client-python/commit/7825ed60bc3ff0078c7050673bc169429e066487)) +* error translation helper for multi-transport servers ([#176](https://github.com/adcontextprotocol/adcp-client-python/issues/176)) ([88126d1](https://github.com/adcontextprotocol/adcp-client-python/commit/88126d111c10d860d8e14d27d700e193c29b3c31)) +* **examples:** add seller_agent.py reference impl ([40341c9](https://github.com/adcontextprotocol/adcp-client-python/commit/40341c90fea23df5a67ff3196bc68ed4026e3347)) +* idempotency_key auto-injection, typed errors, and capability gate ([af9dd2d](https://github.com/adcontextprotocol/adcp-client-python/commit/af9dd2d18a5a78e500a8fdb9808f0c5c5c2c7f25)) +* idempotency_key auto-injection, typed errors, and capability gate ([12cc983](https://github.com/adcontextprotocol/adcp-client-python/commit/12cc983b9126f4a816ffc69e2db45a84af169342)) +* implement AdCP RFC 9421 request-signing profile ([fc995e9](https://github.com/adcontextprotocol/adcp-client-python/commit/fc995e9f084aecc910dc279d9d7b0bc64fe7737d)) +* MCP response + error extraction per AdCP spec ([d991b1e](https://github.com/adcontextprotocol/adcp-client-python/commit/d991b1ef7bab7db596e721267ff396ef0bb99f45)) +* MCP response + error extraction per AdCP spec ([896beb8](https://github.com/adcontextprotocol/adcp-client-python/commit/896beb8415d4142f25b9e6008ddbeedae17ed570)) +* **mcp:** auto-generate sync_governance inputSchema from Pydantic ([ac1edb3](https://github.com/adcontextprotocol/adcp-client-python/commit/ac1edb3fda6f9848b95c40539c5bcfde03442cbe)) +* **mcp:** inline \$defs in generated inputSchema (closes [#208](https://github.com/adcontextprotocol/adcp-client-python/issues/208)) ([8eaeb4d](https://github.com/adcontextprotocol/adcp-client-python/commit/8eaeb4d085d7fd3f5268a818d11e339eda950b26)) +* **mcp:** inline $defs in generated inputSchema (closes [#208](https://github.com/adcontextprotocol/adcp-client-python/issues/208)) ([ffa58e5](https://github.com/adcontextprotocol/adcp-client-python/commit/ffa58e594130d400e3f300edead1ea04cb0361ca)) +* **migrate+types:** v3->v4 codemod, strict-validation flag, version helpers, subclass test ([0f50d39](https://github.com/adcontextprotocol/adcp-client-python/commit/0f50d39ba6481f4a5bfcee11a82d16bfacb0f716)) +* **migrate+types:** v3->v4 codemod, strict-validation flag, version helpers, subclass test ([32bfbeb](https://github.com/adcontextprotocol/adcp-client-python/commit/32bfbeb88f7be83e690adaf78a60aa753be88c25)) +* salesagent review feedback - typed error codes, state machine export, missing types ([8ef8161](https://github.com/adcontextprotocol/adcp-client-python/commit/8ef8161bd51f886bea7eaeaf71bd010f60d1dc8c)) +* **schemas:** regen for AdCP 3.0 GA — custom pricing + experimental_features ([4dfaffe](https://github.com/adcontextprotocol/adcp-client-python/commit/4dfaffe867cefb4e91183542ab0e5a03d451ee6c)) +* **schemas:** regen for AdCP 3.0 GA — custom pricing + experimental_features ([db913ba](https://github.com/adcontextprotocol/adcp-client-python/commit/db913ba311ebba79e8401fe16e6674bb51bec9ef)), closes [#204](https://github.com/adcontextprotocol/adcp-client-python/issues/204) +* **sdk:** 4.0 beta cleanup — version wiring, brand_manifest drop, migration guide ([ebaab12](https://github.com/adcontextprotocol/adcp-client-python/commit/ebaab126db21877f27ceb5413ced02b315bc8dd3)) +* **server+migrate:** round-1 feedback followups ([dbbc390](https://github.com/adcontextprotocol/adcp-client-python/commit/dbbc390fd30b78060e72108a01d45b09035e4cf6)) +* **server+migrate:** round-1 feedback followups ([0fe9cb5](https://github.com/adcontextprotocol/adcp-client-python/commit/0fe9cb56daf01cd1cee6cb5fb16e3a94f51d03d4)) +* **server:** AccountAwareToolContext + multi-tenant contract doc ([69fd3da](https://github.com/adcontextprotocol/adcp-client-python/commit/69fd3dab019c822d62fd1b4ac17b2628c3a36182)) +* **server:** AccountAwareToolContext + multi-tenant contract doc ([3747939](https://github.com/adcontextprotocol/adcp-client-python/commit/3747939427e77b391bd9444beaa60c8b2f72e425)) +* **server:** context_factory, tenant_id, DISCOVERY_TOOLS — unblock MCP adoption ([2203c1d](https://github.com/adcontextprotocol/adcp-client-python/commit/2203c1d162649096ee3d32886666d2d5e4ef0d4b)) +* **server:** DISCOVERY_METHODS + document tools/list pre-auth posture (closes [#222](https://github.com/adcontextprotocol/adcp-client-python/issues/222)) ([a26c948](https://github.com/adcontextprotocol/adcp-client-python/commit/a26c94876226b17abee706c2e1df725af141d0c0)) +* **server:** DISCOVERY_METHODS + lock tools/list pre-auth posture (closes [#222](https://github.com/adcontextprotocol/adcp-client-python/issues/222)) ([ba2de29](https://github.com/adcontextprotocol/adcp-client-python/commit/ba2de2964547f38105a9354a81a7c4bddad49762)) +* **server:** gate tools/list on method overrides ([#220](https://github.com/adcontextprotocol/adcp-client-python/issues/220)) ([816d22c](https://github.com/adcontextprotocol/adcp-client-python/commit/816d22ccd809a0e9cf45c05789eea7e0c8178464)) +* **server:** gate tools/list on method overrides (closes [#220](https://github.com/adcontextprotocol/adcp-client-python/issues/220)) ([fc1a788](https://github.com/adcontextprotocol/adcp-client-python/commit/fc1a7885325d3587a1066140c4838f4e46f8b9c8)) +* **server:** idempotency middleware per AdCP [#2315](https://github.com/adcontextprotocol/adcp-client-python/issues/2315) spec ([101713c](https://github.com/adcontextprotocol/adcp-client-python/commit/101713c231598e07175b5350c98acb404c72d3ea)) +* **server:** idempotency middleware per AdCP [#2315](https://github.com/adcontextprotocol/adcp-client-python/issues/2315) spec ([f708ed2](https://github.com/adcontextprotocol/adcp-client-python/commit/f708ed2312f13a1d8a82014901a0b4b2223342fe)) +* **server:** middleware parity, auth, A2A parser hook, startup log ([549d190](https://github.com/adcontextprotocol/adcp-client-python/commit/549d190cf4ed9b82611f14e2a432d9dd43b870c3)) +* **server:** middleware parity, auth, A2A parser hook, startup log ([c9d7bbc](https://github.com/adcontextprotocol/adcp-client-python/commit/c9d7bbc14717e0710cc848cf74f11445b4d3f870)) +* **server:** per-skill middleware hook in ADCPAgentExecutor ([#226](https://github.com/adcontextprotocol/adcp-client-python/issues/226)) ([4e95764](https://github.com/adcontextprotocol/adcp-client-python/commit/4e95764984f54498f16699f8d7ed288c4e77bc3b)) +* **server:** per-skill middleware hook in ADCPAgentExecutor (closes [#226](https://github.com/adcontextprotocol/adcp-client-python/issues/226)) ([6f9bd26](https://github.com/adcontextprotocol/adcp-client-python/commit/6f9bd26981af36cfa7f17731c683cf521a65732a)) +* **server:** pluggable PushNotificationConfigStore on A2A ([#225](https://github.com/adcontextprotocol/adcp-client-python/issues/225)) ([ea21864](https://github.com/adcontextprotocol/adcp-client-python/commit/ea21864fc8d490dc28b9d5a433d6baabc1518f4b)) +* **server:** pluggable PushNotificationConfigStore on A2A (closes [#225](https://github.com/adcontextprotocol/adcp-client-python/issues/225)) ([4f64c8d](https://github.com/adcontextprotocol/adcp-client-python/commit/4f64c8d0a87aee8875af1ffe27211bf766778ead)) +* **server:** pluggable TaskStore on A2A — unblock production A2A adoption ([69ebccd](https://github.com/adcontextprotocol/adcp-client-python/commit/69ebccd81eccf2970321c379c244cbc0e27873b2)) +* **server:** propagate caller_identity from transport into ToolContext ([b4a4c93](https://github.com/adcontextprotocol/adcp-client-python/commit/b4a4c9336f7207c2765c9cfd771e4c124fe3e566)) +* **server:** propagate caller_identity from transport into ToolContext ([1f3cf8f](https://github.com/adcontextprotocol/adcp-client-python/commit/1f3cf8f44ce92ede4cb48b125e057494cefe5e89)) +* **server:** request-body size cap middleware (closes [#239](https://github.com/adcontextprotocol/adcp-client-python/issues/239)) ([21249a5](https://github.com/adcontextprotocol/adcp-client-python/commit/21249a5032c8afa4f59033dec0b896e6cc4b637d)) +* **server:** request-body size cap middleware (closes [#239](https://github.com/adcontextprotocol/adcp-client-python/issues/239)) ([9ccf960](https://github.com/adcontextprotocol/adcp-client-python/commit/9ccf9601182e248861bf0683fbfe55408f76e93f)) +* **server:** thread ToolContext through TestControllerStore (closes [#227](https://github.com/adcontextprotocol/adcp-client-python/issues/227)) ([a4c6489](https://github.com/adcontextprotocol/adcp-client-python/commit/a4c6489285ba76b1e57caf09bf561c3aa1461ecf)) +* **server:** thread ToolContext through TestControllerStore (closes [#227](https://github.com/adcontextprotocol/adcp-client-python/issues/227)) ([a0d89e3](https://github.com/adcontextprotocol/adcp-client-python/commit/a0d89e3be1a60fa29aa7b1dfd81d4f8b79f9132d)) +* **server:** typed handler params via Pydantic annotation (closes [#214](https://github.com/adcontextprotocol/adcp-client-python/issues/214)) ([dcc2c87](https://github.com/adcontextprotocol/adcp-client-python/commit/dcc2c876215546fa5e15d8db4ff7e6ba32c5b442)) +* **server:** typed handler params via Pydantic annotation (closes [#214](https://github.com/adcontextprotocol/adcp-client-python/issues/214)) ([4e86e1a](https://github.com/adcontextprotocol/adcp-client-python/commit/4e86e1a55cc09793d18e312f97124622b761feff)) +* **server:** TypeVar-bound ADCPHandler for typed ToolContext subclasses ([#223](https://github.com/adcontextprotocol/adcp-client-python/issues/223)) ([d737527](https://github.com/adcontextprotocol/adcp-client-python/commit/d737527027fcf5b77ba40c4502251449633f059d)) +* **server:** TypeVar-bound ADCPHandler for typed ToolContext subclasses (closes [#223](https://github.com/adcontextprotocol/adcp-client-python/issues/223)) ([e1eb923](https://github.com/adcontextprotocol/adcp-client-python/commit/e1eb92350e9872cfadbff4bff6a274a49af59c83)) +* **server:** wire idempotency errors to wire + capability helper + DX polish ([5b8f353](https://github.com/adcontextprotocol/adcp-client-python/commit/5b8f3531905af238d47f4c0503cce42d6852700e)) +* **signing:** async revocation-list + JWKS fetchers ([55a8fd4](https://github.com/adcontextprotocol/adcp-client-python/commit/55a8fd45c7b4b9520c105a7e1e555bc247146e6a)) +* **signing:** async revocation-list + JWKS fetchers ([1c2e676](https://github.com/adcontextprotocol/adcp-client-python/commit/1c2e67624f313416b85d1f10b659eb0e84021f3d)) +* **signing:** auto-sign outgoing requests via ADCPClient signing kwarg ([551aaf8](https://github.com/adcontextprotocol/adcp-client-python/commit/551aaf8fe97c8b10d8dfef540925d1528c80ec00)) +* **signing:** auto-sign outgoing requests via ADCPClient signing kwarg ([c07c946](https://github.com/adcontextprotocol/adcp-client-python/commit/c07c946ff50cdd3ef32db263877ed6aada40e964)) +* **signing:** full-wire e2e + DX fixes from integrator walkthrough ([a44896b](https://github.com/adcontextprotocol/adcp-client-python/commit/a44896b743ac4d0694be9b99dce2df103c2cfb0a)) +* **signing:** generate_signing_keypair() programmatic API (closes [#217](https://github.com/adcontextprotocol/adcp-client-python/issues/217)) ([dd2b961](https://github.com/adcontextprotocol/adcp-client-python/commit/dd2b9614957d65787868b5effddb2775b74afae9)) +* **signing:** generate_signing_keypair() programmatic API (closes [#217](https://github.com/adcontextprotocol/adcp-client-python/issues/217)) ([c6d5505](https://github.com/adcontextprotocol/adcp-client-python/commit/c6d5505c8d6025961f0bd9d6af1041102b4bee82)) +* **signing:** IP-pinned httpx transport closes DNS-rebinding TOCTOU ([9a7ee9c](https://github.com/adcontextprotocol/adcp-client-python/commit/9a7ee9c3185e6e7945f06bd27872363f24e164fd)) +* **signing:** IP-pinned httpx transport closes DNS-rebinding TOCTOU ([1fa0820](https://github.com/adcontextprotocol/adcp-client-python/commit/1fa082003acd317b9743099fb83dc898614db573)) +* **signing:** keygen --encrypt flag and adcp-keygen entry point ([01c0c5d](https://github.com/adcontextprotocol/adcp-client-python/commit/01c0c5d49ffff416144708213f953a6b0cedd5ca)) +* **signing:** live revocation-list fetcher with signed JWS verification ([249b79d](https://github.com/adcontextprotocol/adcp-client-python/commit/249b79d956f7962637314042be1116c8f5076cbb)) +* **signing:** live revocation-list fetcher with signed JWS verification ([fbe3e90](https://github.com/adcontextprotocol/adcp-client-python/commit/fbe3e909a04b04068acc644413ad78155aa0a6df)) +* **signing:** module rename + keygen --encrypt + adcp-keygen entry point ([7bce09a](https://github.com/adcontextprotocol/adcp-client-python/commit/7bce09aa2841a15a7b4461fd707b59bd78156dbd)) +* **signing:** PostgreSQL-backed PgReplayStore for multi-instance verifiers ([8118033](https://github.com/adcontextprotocol/adcp-client-python/commit/811803396e13b185f6626c7011b449823b6a1e20)) +* **signing:** PostgreSQL-backed PgReplayStore for multi-instance verifiers ([3ad3951](https://github.com/adcontextprotocol/adcp-client-python/commit/3ad395189c44807d48bb6381ef16e591ca1ca5fe)) +* strip bogus Literal['reuse'] subclasses from datamodel-codegen ([3684227](https://github.com/adcontextprotocol/adcp-client-python/commit/36842278e3a0085372f14496f4737fba632cc408)) +* switch ADCP_VERSION to latest, remap aliases for schema redesign ([253be88](https://github.com/adcontextprotocol/adcp-client-python/commit/253be88ba17cb16723fcae014e9ded288ffe848c)) +* sync rc.4 schemas + wire update_rights task ([67119bf](https://github.com/adcontextprotocol/adcp-client-python/commit/67119bf303553ebf2251931ccce4bac5f9c3de50)) +* sync rc.4 schemas + wire update_rights task ([6c0e0e9](https://github.com/adcontextprotocol/adcp-client-python/commit/6c0e0e9e3037bd6a59b9f184d9a8fa347cc4fe20)) +* sync schemas from protocol bundle with Sigstore verification ([66b9fb1](https://github.com/adcontextprotocol/adcp-client-python/commit/66b9fb1efb7c64d1d7a3e188433fdcef755244d0)) +* ToolAnnotations and agent-facing descriptions for all 56 MCP tools ([66729ee](https://github.com/adcontextprotocol/adcp-client-python/commit/66729ee02982b21425a7731de0d17f9c724846d5)) +* **types:** AssetsNN semantic aliases + format_category shim + downstream smoke ([f5c6b18](https://github.com/adcontextprotocol/adcp-client-python/commit/f5c6b18cef8b8df5e9e7e77d4a6eb8b4945ce3b4)) +* **types:** regenerate schemas + inject Literal-discriminator defaults ([27468aa](https://github.com/adcontextprotocol/adcp-client-python/commit/27468aa358295bdfdeb10af722e422aa6eef9d6b)) +* **types:** regenerate schemas + inject Literal-discriminator defaults ([a4bd6d8](https://github.com/adcontextprotocol/adcp-client-python/commit/a4bd6d85bb7ab8799096d58c2f37414f7f7c995f)) +* **types:** rename <Type>Asset content types to <Type>Content ([7d0679f](https://github.com/adcontextprotocol/adcp-client-python/commit/7d0679f0884e893f1b691ee41fe8d19edfcd9f0e)) +* **webhooks:** adcp.webhooks.deliver() + A2A artifacts conformance ([493f219](https://github.com/adcontextprotocol/adcp-client-python/commit/493f2197f1618b3a626f2f8b99187985dc4a2fab)) +* **webhooks:** adcp.webhooks.deliver() one-shot legacy-auth dispatcher ([3bf663d](https://github.com/adcontextprotocol/adcp-client-python/commit/3bf663da780ee4db3d08eaf04ca68ee37dccd281)) +* **webhooks:** add from_pem and sign_legacy_webhook helpers ([19a8ab3](https://github.com/adcontextprotocol/adcp-client-python/commit/19a8ab389878013e6901d1ecf15d5d931842131b)) +* **webhooks:** RFC 9421 signing + idempotency_key + sender/receiver UX ([63732c8](https://github.com/adcontextprotocol/adcp-client-python/commit/63732c89a3c4955cf79963a139e7627061a4a6f3)) +* **webhooks:** RFC 9421 signing + required idempotency_key + sender/receiver UX ([c640b8c](https://github.com/adcontextprotocol/adcp-client-python/commit/c640b8c2d0908f2ba21665e1a8acb4125a50cc6e)) + + +### Bug Fixes + +* CI failures - noqa F401 on guard re-exports, dynamic model_rebuild ([378ac50](https://github.com/adcontextprotocol/adcp-client-python/commit/378ac504db796eee0ef9c32bc72f4453324e9c81)) +* CI failures and review findings ([9089711](https://github.com/adcontextprotocol/adcp-client-python/commit/90897117e8d59a9881d88dc249418228f589ac8d)) +* CI lint - sort imports in types/__init__.py, pin ADCP_VERSION ([cfbdca1](https://github.com/adcontextprotocol/adcp-client-python/commit/cfbdca1ace226782c12e4ec83de36d66da2bad2c)) +* CI lint (noqa F401 re-exports) and pin ADCP_VERSION to 3.0.0-rc.3 ([5959e7b](https://github.com/adcontextprotocol/adcp-client-python/commit/5959e7b76f36d6ae584df842b4a84ce164cf4a43)) +* **example:** derive port and AGENT_URL from ADCP_PORT env ([1df2306](https://github.com/adcontextprotocol/adcp-client-python/commit/1df230638359ba2cbc1b7d26f1ef5af769e1f811)) +* **harness,server:** surface partial/failing storyboards, reuse port on rerun, default list_creatives timestamps ([3b27001](https://github.com/adcontextprotocol/adcp-client-python/commit/3b2700147058fe2b770e387046d3972f64d34147)) +* **idempotency:** honor new required Idempotency.supported field in strict gate ([9ff08c9](https://github.com/adcontextprotocol/adcp-client-python/commit/9ff08c9b1a3578e4ff9d240b8df9f1736e5c989c)) +* make ergonomic codegen resilient to datamodel-codegen variant suffix shifts ([138179b](https://github.com/adcontextprotocol/adcp-client-python/commit/138179b2b666ef631c4a7ce0e0cab59d09f989a6)) +* **migrate+types:** PR [#247](https://github.com/adcontextprotocol/adcp-client-python/issues/247) expert-review followups ([ac505c0](https://github.com/adcontextprotocol/adcp-client-python/commit/ac505c028741ce61efac741a34afdfecddc43eb2)) +* mypy override errors in subclass handlers ([d35bc63](https://github.com/adcontextprotocol/adcp-client-python/commit/d35bc6310119c88a9205eae9e7961be674e030d7)) +* mypy valid-type in generated code, subclass handler param types ([eb4e027](https://github.com/adcontextprotocol/adcp-client-python/commit/eb4e027664529e9236ec6db2f0a13ae396359bda)) +* noqa F401 on new re-exports (TRANSIENT_CODES, MEDIA_BUY_STATE_MACHINE, PaginationResponse) ([b4059c5](https://github.com/adcontextprotocol/adcp-client-python/commit/b4059c5763d1972635f36dc1f74345dbcb546196)) +* resolve CI failures from latest-tracking regeneration ([8b49e1a](https://github.com/adcontextprotocol/adcp-client-python/commit/8b49e1a47335222688ee811abe8173c2a97c9db3)) +* **sdk:** remove stray noqa, correct capabilities_response docstring ([05ac689](https://github.com/adcontextprotocol/adcp-client-python/commit/05ac68914d608fbbcffa3f3576355eebfc7bc9fc)) +* **sdk:** SDK cheap fixes for DX Stream B1 ([e67e8ed](https://github.com/adcontextprotocol/adcp-client-python/commit/e67e8ed9643c117b8545143b26b5904da56285b1)) +* **sdk:** three cleanups from round-4 validator findings ([d7e93f7](https://github.com/adcontextprotocol/adcp-client-python/commit/d7e93f73171f3c4f9d153e1cc207747120ed5ee9)) +* **seller:** declare compliance_testing block and add missing force_creative_status scenario ([5de1c61](https://github.com/adcontextprotocol/adcp-client-python/commit/5de1c61062ee628e9dcfe786c948db58e5727fb8)) +* **server:** expert-review followups — tenant-scoped idempotency, A2A context_factory, ContextVar safety ([5f053af](https://github.com/adcontextprotocol/adcp-client-python/commit/5f053af8aa4eca0369a3355d6c7dd498a155713f)) +* **server:** PR [#230](https://github.com/adcontextprotocol/adcp-client-python/issues/230) expert-review followups — cross-tenant isolation + hardening ([bb2bc67](https://github.com/adcontextprotocol/adcp-client-python/commit/bb2bc67abb5d470fa126a27c232fea2343f9495e)) +* **server:** PR [#232](https://github.com/adcontextprotocol/adcp-client-python/issues/232) expert-review followups — scope_provider injection, loud anonymous fallback, SSRF/secret-storage docs ([5d3eff8](https://github.com/adcontextprotocol/adcp-client-python/commit/5d3eff8140ab7825947b72c4f04bda9ffc9ae8f0)) +* **server:** PR [#233](https://github.com/adcontextprotocol/adcp-client-python/issues/233) expert-review followups — security docs + retry/transform tests ([afbbfac](https://github.com/adcontextprotocol/adcp-client-python/commit/afbbfac5c87581cd0096d525c1dbf264356020ea)) +* **server:** PR [#234](https://github.com/adcontextprotocol/adcp-client-python/issues/234) expert-review followups — TypeVar tests & docs ([df5898c](https://github.com/adcontextprotocol/adcp-client-python/commit/df5898ca7dead3acb25fc7d5571ae1f88c55a52e)) +* **server:** PR [#237](https://github.com/adcontextprotocol/adcp-client-python/issues/237) expert-review followups ([a415786](https://github.com/adcontextprotocol/adcp-client-python/commit/a415786b6fdf02bf43c19996a41488c881b81f68)) +* **server:** PR [#238](https://github.com/adcontextprotocol/adcp-client-python/issues/238) expert-review followups ([a198656](https://github.com/adcontextprotocol/adcp-client-python/commit/a1986562eb0e36bf1ec3a4e2136082c93b994698)) +* **server:** PR [#238](https://github.com/adcontextprotocol/adcp-client-python/issues/238) review round 2 — MCP field surfacing + custom-validator doc ([4d4e2e7](https://github.com/adcontextprotocol/adcp-client-python/commit/4d4e2e7784bbb970e5d7cd8505d36f5570c96c4e)) +* **server:** PR [#241](https://github.com/adcontextprotocol/adcp-client-python/issues/241) expert-review followups ([ce189f8](https://github.com/adcontextprotocol/adcp-client-python/commit/ce189f84f5392f45964fa3e5e355436e675222e9)) +* **server:** PR [#244](https://github.com/adcontextprotocol/adcp-client-python/issues/244) expert-review followups ([6af9a7d](https://github.com/adcontextprotocol/adcp-client-python/commit/6af9a7d00bdcda5378b8225de2531f99cea1d1a2)) +* **server:** PR [#245](https://github.com/adcontextprotocol/adcp-client-python/issues/245) code-review followups — fail loudly on silent-skip paths ([a0a3077](https://github.com/adcontextprotocol/adcp-client-python/commit/a0a3077b9d99f60f2aed2300de139aebd7fc0e41)) +* **server:** Threat 3 merge-blocker on advertised-tools gate ([11abb3b](https://github.com/adcontextprotocol/adcp-client-python/commit/11abb3b7cced61611d856763e42995a9c32966b1)) +* **signing:** PR [#206](https://github.com/adcontextprotocol/adcp-client-python/issues/206) reviewer fixes — IDN normalization, HTTPS_PROXY, fail-closed reuse ([b432b03](https://github.com/adcontextprotocol/adcp-client-python/commit/b432b03003c5cf2d1afa393d7dd5d714e0785405)) +* **signing:** PR [#243](https://github.com/adcontextprotocol/adcp-client-python/issues/243) expert-review followups ([e616307](https://github.com/adcontextprotocol/adcp-client-python/commit/e6163077b84a73523b89c653154694d250124ea2)) +* **signing:** round-2 review — harden identifier check, drop invalid SQL ([4ea1d8f](https://github.com/adcontextprotocol/adcp-client-python/commit/4ea1d8fa0cd3e3f44130dcbc02ec9c0079116978)) +* **signing:** round-2 review — harden issuer/Last-Modified, slide next_update on 304 ([8dbcbc5](https://github.com/adcontextprotocol/adcp-client-python/commit/8dbcbc521ce4d3e3a064583b130488ade388d317)) +* sort TYPE_CHECKING imports in base.py and mcp_tools.py (I001) ([71f7448](https://github.com/adcontextprotocol/adcp-client-python/commit/71f7448a2f91203dcfc3516ae0f74dda6739910f)) +* suppress E501 in mcp_tools.py (tool descriptions are long strings) ([9eea1d9](https://github.com/adcontextprotocol/adcp-client-python/commit/9eea1d9f79df6f4752337eaa9e7a6c914e9e270f)) +* **webhooks,seller,signals:** round-6 P1+P2 DX fixes ([6e51519](https://github.com/adcontextprotocol/adcp-client-python/commit/6e515192b9eac96f90cd1e0923425b3121201f62)) +* **webhooks:** align deliver() with canonical compact-separator on-wire form ([92240d5](https://github.com/adcontextprotocol/adcp-client-python/commit/92240d5c481f743569447c1c63d8ef1637c53436)) +* **webhooks:** re-apply compact-separator signer after rebase onto 3.0 GA ([166aa1b](https://github.com/adcontextprotocol/adcp-client-python/commit/166aa1b46e63c11eb5438f41a937e8dcd60114a6)) +* **webhooks:** sign compact-separator JSON to match httpx wire format ([1c2a527](https://github.com/adcontextprotocol/adcp-client-python/commit/1c2a52798bf8415fac6b9d920d3d984410e02114)) +* **webhooks:** verifier fails closed when raw_body missing (adcp[#2478](https://github.com/adcontextprotocol/adcp-client-python/issues/2478)) ([9a906a9](https://github.com/adcontextprotocol/adcp-client-python/commit/9a906a9466cda28f4043f1fa05895401385fccba)) + + +### Documentation + +* **creative:** fix NameError in build_creative fallback ([afe6afb](https://github.com/adcontextprotocol/adcp-client-python/commit/afe6afbae671594e185c236dda6f0aa25123f8df)) +* **creative:** remove anti-patterns from build-creative-agent skill ([9e42039](https://github.com/adcontextprotocol/adcp-client-python/commit/9e42039cc7da9191dee1efe0737fb2f642337ba0)) +* **design:** FastMCP native registration investigation ([#209](https://github.com/adcontextprotocol/adcp-client-python/issues/209)) ([d32694f](https://github.com/adcontextprotocol/adcp-client-python/commit/d32694f00fa7aef27d54b0671233646c6fdf5bbf)) +* **design:** FastMCP native registration investigation (closes [#209](https://github.com/adcontextprotocol/adcp-client-python/issues/209)) ([ba3cb73](https://github.com/adcontextprotocol/adcp-client-python/commit/ba3cb733ddd4e4d60aad8c5a2296acd02d98b9ad)) +* fix DX gaps in skill docs from real-world agent builds ([dc63f8b](https://github.com/adcontextprotocol/adcp-client-python/commit/dc63f8bdb7f4a1fb9eb3eac3e529219d3d26fe29)) +* **generative-seller:** fix invalid enums and document generative tools ([99e9f2e](https://github.com/adcontextprotocol/adcp-client-python/commit/99e9f2e2e366c48b578cc3f7dd38e66093c09357)) +* link upstream codegen bug in post_generate_fixes ([ee6f52c](https://github.com/adcontextprotocol/adcp-client-python/commit/ee6f52c745ae44e692cc544c25a21779558ace3f)) +* **retail:** fix invalid capability enum and storyboard invocation ([249acb1](https://github.com/adcontextprotocol/adcp-client-python/commit/249acb1b5c2a4f926e786bf4a5dda70b8b9dd2e8)) +* **seller,retail:** teach proposal refine schema and webhook emission ([9723eef](https://github.com/adcontextprotocol/adcp-client-python/commit/9723eefe687571a5de1bd2da2472b9c293edf612)) +* **seller:** correct invalid schema claims and serve() signature ([f3a77c6](https://github.com/adcontextprotocol/adcp-client-python/commit/f3a77c65d0b7efa2ae36c3a9f561be0d074e62fe)) +* **seller:** replace false compliance_testing auto-wire with explicit kwarg ([8d74805](https://github.com/adcontextprotocol/adcp-client-python/commit/8d74805c1acf9868a13d1edfce03ab46970dcde7)) +* **signals,generative:** correct idempotency.wrap decorator usage ([3ba41e6](https://github.com/adcontextprotocol/adcp-client-python/commit/3ba41e61d7f5c18b5ac5a489d8c29e4897eabe0d)) +* **signals,seller:** round-2 validator findings ([2b941d0](https://github.com/adcontextprotocol/adcp-client-python/commit/2b941d0c49dbfb4ccd85f9e93836b1832ceb14c2)) +* **signals:** tighten signal_ids filter, idempotency, validation command ([e0fb6d6](https://github.com/adcontextprotocol/adcp-client-python/commit/e0fb6d650adf4db90ad3d86716b08606b59c6103)) +* **skills,examples:** align webhook + proposal examples with real SDK and schema ([a9e2a63](https://github.com/adcontextprotocol/adcp-client-python/commit/a9e2a63f8d8df6bd61a0e35124097017148e22c6)) +* **skills:** round-8 DX polish — scope seller, self-contain signals ([3686e38](https://github.com/adcontextprotocol/adcp-client-python/commit/3686e38e5adbe8921dfca8cc14b8862ada9a1eb5)) +* **skills:** round-8 DX polish — scope seller, self-contain signals ([8b5075c](https://github.com/adcontextprotocol/adcp-client-python/commit/8b5075c68d37fe5771ee758752e8db835edff4c8)) + + +### Miscellaneous Chores + +* mark 4.0 breaking change for release-please ([8d0c430](https://github.com/adcontextprotocol/adcp-client-python/commit/8d0c4302a4cd35beb070827082305c729bc0dd78)) + ## [4.0.0b1] — 2026-04-20 First 4.0 beta. See [MIGRATION_v3_to_v4.md](MIGRATION_v3_to_v4.md) for upgrade diff --git a/pyproject.toml b/pyproject.toml index 39b30785..f3e6e2cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "adcp" -version = "4.0.0b1" +version = "4.0.0" description = "Official Python client for the Ad Context Protocol (AdCP)" authors = [ {name = "AdCP Community", email = "maintainers@adcontextprotocol.org"}