From 44d15f32aa2c6813032959ebd3b618d657554a81 Mon Sep 17 00:00:00 2001 From: adk-bot Date: Wed, 4 Nov 2026 11:53:23 -0800 Subject: [PATCH 01/10] chore(release/candidate): release 2.14.0 --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 247 ++++++++++++++++++++++++++ src/google/adk/version.py | 2 +- 3 files changed, 249 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index d18e9443765..b9c017b3338 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.13.0" + ".": "2.14.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index c39b1e0e82d..83b1d137261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,252 @@ # Changelog +## [2.14.0](https://github.com/google/adk-python/compare/v2.13.0...v2.14.0) (2026-11-04) + + +### ⚠ BREAKING CHANGES + +* close malformed live WebSockets instead of wedging them + +### Features + +* **a2a:** graduate the A2A integration from experimental ([95d4a56](https://github.com/google/adk-python/commit/95d4a5660f5ab4707b251c0b7c86053e5c6f311e)) +* add --reload_agents flag to adk run for hot-reloading ([4f8e4ae](https://github.com/google/adk-python/commit/4f8e4aeef9a1a40fdd4b864818167b93a23d5ef0)), closes [#3679](https://github.com/google/adk-python/issues/3679) +* add a2a agent card generation with the CLI ([875e2ae](https://github.com/google/adk-python/commit/875e2aef7e800ca307fcff85b68e54d6101ba63c)) +* add get_active_events helper function ([3640e7d](https://github.com/google/adk-python/commit/3640e7d0c74bb2d377a58271ac6290d2e51ee60d)), closes [#4959](https://github.com/google/adk-python/issues/4959) +* add MongoDB-backed memory service ([cbca417](https://github.com/google/adk-python/commit/cbca417c40e1aa052446391d2d7b36ae92978da9)) +* add MongoDB-backed session service ([9833835](https://github.com/google/adk-python/commit/9833835193016a559578800743ac87fe318bd48f)) +* allow McpToolset callers to receive MCP server notifications ([9a5117b](https://github.com/google/adk-python/commit/9a5117b73b8b7f8d7e6547d2e109336b8a7b053c)), closes [#6385](https://github.com/google/adk-python/issues/6385) +* **artifacts:** add experimental FsspecArtifactService with read and listing support ([6bf806a](https://github.com/google/adk-python/commit/6bf806a0107be8ce8e9dff92631f19f68f0c8cf6)) +* avoid ReadFileTool OOM by streaming file reads ([fd8d8c1](https://github.com/google/adk-python/commit/fd8d8c1e054a1e40abd564f3cfbd6a074e1d975a)), closes [#7131](https://github.com/google/adk-python/issues/7131) +* **bigquery:** make built-in BigQuery skills loadable and discoverable via get_bigquery_skill ([665945d](https://github.com/google/adk-python/commit/665945db17579b68d0586f482b5d715c3e5f62c5)) +* **classifiers:** add RefusalAnswer for questions a model declines ([d45df6a](https://github.com/google/adk-python/commit/d45df6a44e1fd1261997b2f1e7e6f74314e0bf9f)) +* **classifiers:** label requests made by classifiers ([7bfe227](https://github.com/google/adk-python/commit/7bfe227f0a129f65d7cdd6389c39be879719987b)) +* **cli:** pip install wheels and installable packages passed to --extra_packages ([e3d0ec9](https://github.com/google/adk-python/commit/e3d0ec9263f8a22bc857535baea0ce8456d689b6)) +* **cli:** support Python versions other than 3.11 in adk deploy images ([bd77f3f](https://github.com/google/adk-python/commit/bd77f3f2c53a8d274a882f600f4e758f187d7d46)) +* **eval:** run each eval case N times in adk eval for steadier verdicts ([7f3517e](https://github.com/google/adk-python/commit/7f3517e43d7b6012f51438cffb60e6d7983e4217)) +* **evaluation:** graduate mature evaluation and user simulation classes from experimental ([1112606](https://github.com/google/adk-python/commit/1112606c22856d4633a8c80d178386b168b2f632)) +* expose active lifecycle hook metadata ([2084efb](https://github.com/google/adk-python/commit/2084efbe1b9fd51c24f214fa9e2d818081a549c9)), closes [#6979](https://github.com/google/adk-python/issues/6979) +* expose session rewind as a REST endpoint ([b01c5ff](https://github.com/google/adk-python/commit/b01c5fff5378fed116b6978cb9293909e3c4a5e0)), closes [#7177](https://github.com/google/adk-python/issues/7177) +* **features:** graduate 26 auth, environment, app, cli, and cache modules from experimental ([c54b253](https://github.com/google/adk-python/commit/c54b253eba3359264a5f86805051aeb6cd93034d)) +* **features:** promote 16 toolset and integration features to stable ([799fc94](https://github.com/google/adk-python/commit/799fc9459eb9443a63db11a179d6422b7e1dc1c0)) +* **integrations:** add OpenAIDecisionsClassifier for the OpenAI Decisions API ([aa98d18](https://github.com/google/adk-python/commit/aa98d180b6abf1966dbe378094a69aa488c2123e)) +* **integrations:** add TeamsRunner for Microsoft Teams ([c4376a6](https://github.com/google/adk-python/commit/c4376a65764bfd7abd016b81cde1e5165318b604)) +* **integrations:** add vector search retrieval to MongoDbMemoryService ([1c84bb9](https://github.com/google/adk-python/commit/1c84bb955b9dd5b118594ccb9e219ac393ee31f9)) +* **integrations:** keep MongoDB credentials out of Agent Engine packages ([caf828d](https://github.com/google/adk-python/commit/caf828df5ef9e6322826ad4fe0dd0d2dce552a64)) +* let a plugin configure event compaction per session ([9331638](https://github.com/google/adk-python/commit/93316384945d782a4de6e78b768f772e210ddcba)), closes [#4132](https://github.com/google/adk-python/issues/4132) +* let AgentEvaluator evaluate an agent built at runtime ([ce92e92](https://github.com/google/adk-python/commit/ce92e924721e873afec74bdb393072eb32615f96)), closes [#1792](https://github.com/google/adk-python/issues/1792) +* let applications customize tool retry guidance ([03b4fbc](https://github.com/google/adk-python/commit/03b4fbcee711365ecca4861a39119b2b6ecc5b2f)), closes [#7564](https://github.com/google/adk-python/issues/7564) +* **live:** save image frames when save_live_blob is set ([3cd8742](https://github.com/google/adk-python/commit/3cd87427ac9c016b0cf335459a90c9902b0737d9)) +* **plugins:** add flag to write content_formatter error details to BigQuery ([0f15a83](https://github.com/google/adk-python/commit/0f15a83b7905a796534746da1d2ea72218d8bd5a)) +* **plugins:** record workflow node observations in the BigQuery analytics plugin ([c31856d](https://github.com/google/adk-python/commit/c31856d17ab54d82dbe89b4e511d34395ffc977b)) +* **plugins:** support conversation_only eval view mode and session prompt fallback ([5762ef8](https://github.com/google/adk-python/commit/5762ef81f2f7a11bce064491e86d6f5e3cf3ea88)) +* read large files from AgentEngineEnvironment in chunks ([4c88040](https://github.com/google/adk-python/commit/4c880408b5468afb9196a4701cf6cb2a34c6b545)) +* serialize prompt-cache creation tokens on LlmResponse ([b89dda4](https://github.com/google/adk-python/commit/b89dda409e062bd20015ad9508cf75d252dd2ab9)) +* store eval files outside a read-only agents_dir ([ff66b1f](https://github.com/google/adk-python/commit/ff66b1f178c02bc0ef5d97b4303cb2c446f045cc)), closes [#3887](https://github.com/google/adk-python/issues/3887) +* support configuring eval case parallelism in eval config and CLI ([e9e8f61](https://github.com/google/adk-python/commit/e9e8f6156fb73cdfe799af0a0a57786e807732df)) +* support input and output files in ContainerCodeExecutor ([effd641](https://github.com/google/adk-python/commit/effd64101112643cf96ce6bdef6ece26080f6d49)) +* support large file writes in AgentEngineEnvironment ([5843c58](https://github.com/google/adk-python/commit/5843c582f15a89627bf379accea4ca182bcf706c)) +* **telemetry:** measure streaming latency of model calls ([e0b812a](https://github.com/google/adk-python/commit/e0b812a3df0280f3c68c3097705cbb1643730c94)) +* **telemetry:** record inference token metrics for failed calls ([7367645](https://github.com/google/adk-python/commit/7367645c53d91fbf659db5b38fe8fb296d47c5d1)) +* **telemetry:** record the semconv-genai inference token metrics under schema v2 ([ad46719](https://github.com/google/adk-python/commit/ad467193e4193f811ff86114f7b6155dc7cd7698)) +* **tools:** add extensible tool argument matcher ([ed76f94](https://github.com/google/adk-python/commit/ed76f94501f0e4dad9346e064980c1059bded1a7)) +* **tools:** add semantic argument matching to Environment Simulation injections ([08c289b](https://github.com/google/adk-python/commit/08c289bb48e9fda73ed06d03dc7d8879c73fd2db)) +* **tools:** preserve tool display titles on BaseTool, McpTool, and events ([29956a8](https://github.com/google/adk-python/commit/29956a8e69366c58f95b54eface6497b2294629d)) + + +### Bug Fixes + +* **a2a:** propagate task cancellation to active runner invocations ([14765ab](https://github.com/google/adk-python/commit/14765ab2bf78500e167ccd08c97cffd9b143a80d)) +* accept declared field names in set_model_response for aliased schemas ([3700f0d](https://github.com/google/adk-python/commit/3700f0d1b99fee5a0bda8dc48a92df15179b3730)) +* accept pre-parsed dict in ToolConfirmation response wrapper ([4666178](https://github.com/google/adk-python/commit/4666178ebc8e39dbc00240d3b023c52bdc107348)), closes [#7681](https://github.com/google/adk-python/issues/7681) +* align gen_ai.choice system name with request model for LiteLLM ([960cd5d](https://github.com/google/adk-python/commit/960cd5ddfff135c39cf8dbe185f0f08a309c927c)), closes [#7631](https://github.com/google/adk-python/issues/7631) +* allow a missing screenshot in ComputerState's type ([8f8e0c2](https://github.com/google/adk-python/commit/8f8e0c2701c1bbbd6e774c65c3d830acf23fd9f1)) +* allow opentelemetry-api and opentelemetry-sdk up to 1.45.2 ([73ae69e](https://github.com/google/adk-python/commit/73ae69ebab7e3d23faf7378a7caba0e697b65c4f)), closes [#7433](https://github.com/google/adk-python/issues/7433) +* allow whole-file reads of empty files in ReadFileTool ([2a0bffa](https://github.com/google/adk-python/commit/2a0bffa1258dd3b806acb6368acc8f5d29868474)) +* always send the A2A-Version header from RemoteA2aAgent's own HTTP client ([e44b316](https://github.com/google/adk-python/commit/e44b31675e51e69a5929158ff1f3d63fd3c4777e)) +* answer the coordinator when a task-mode remote agent fails ([6c67240](https://github.com/google/adk-python/commit/6c672404ef96863963303b0a03000c35f7068044)) +* **antigravity:** extract subagent names from step tool calls and avoid root_agent_subagent fallback ([491d7db](https://github.com/google/adk-python/commit/491d7dbdaa784011d5768d43341df25f13256d71)) +* **apps:** close LLM stream on early exit in LlmEventSummarizer ([c15f249](https://github.com/google/adk-python/commit/c15f249aa789f7ad8fcc94118917a1747285d0b3)) +* ask for re-authorization when the OAuth2 refresh token is revoked ([70e1cbd](https://github.com/google/adk-python/commit/70e1cbde75314f8a7a231a064b17754794baaa87)), closes [#7730](https://github.com/google/adk-python/issues/7730) +* **auth:** support raw token strings in HTTP and API key auth resume ([d324744](https://github.com/google/adk-python/commit/d324744645ee372db8ecce4c0209e9c70ce18e0b)) +* avoid passing unknown alternate judge verdicts ([4c66a00](https://github.com/google/adk-python/commit/4c66a009106cbb855a79f4dc7383712057212e1e)) +* avoid unconditional blocking credential refresh in AgentRegistry ([cb91239](https://github.com/google/adk-python/commit/cb912393ebcbb954964ee3678bb3c4879201aa31)) +* **bigquery:** improve error messages when write_mode is BLOCKED ([5849762](https://github.com/google/adk-python/commit/5849762718871e206b7745f0318f8399a5dd5f52)) +* block internal ADK toggles and exec gadgets in YAML configs ([1c7e8f7](https://github.com/google/adk-python/commit/1c7e8f76b6c995b69b5cc9ec1ac2960988388a1d)) +* build skill script commands from validated paths and arguments ([ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) +* cap litellm below 1.106.3 ([55a6fe5](https://github.com/google/adk-python/commit/55a6fe5f3d40734bab219d5a5032e19c3d0f5326)) +* classify compaction failures with error.type ([8038bd7](https://github.com/google/adk-python/commit/8038bd7f43657d7bf5330cbc9cae0b8da95ee6f4)) +* classify stream-level non-retryable BigQuery write errors as non_retryable ([bd38535](https://github.com/google/adk-python/commit/bd38535817a9639408a5f863c0f044aaa65d74cb)) +* clear strict mypy errors in auth, workflow and runtime helpers ([1b118f4](https://github.com/google/adk-python/commit/1b118f43a492fdc684d2ae8a73f9a68a46d40948)) +* clear strict mypy errors in the a2a package ([ee87201](https://github.com/google/adk-python/commit/ee8720162db4fcbf9b144d2f5c8e2fdf8bf85ef0)) +* clear strict mypy errors in the agent runtime and config ([b094693](https://github.com/google/adk-python/commit/b094693407f07765fc6f69d101bb969d8189d86a)) +* clear strict mypy errors in the MCP SDK seam ([2717d54](https://github.com/google/adk-python/commit/2717d54bb66ac9d8597c9ac4b3c4dbb884654e45)) +* clear strict mypy errors in tools and integrations ([fbd5ca0](https://github.com/google/adk-python/commit/fbd5ca0f6ad8671adefedaff937610024c4a7989)) +* **cli:** monitor ASGI receive channel for client disconnect in /run_sse ([1fbe9e0](https://github.com/google/adk-python/commit/1fbe9e034506a0a9a03039a68e822fb1b787a165)) +* close inner async generators across node `_run_impl` and skip compaction on early close ([facd7dd](https://github.com/google/adk-python/commit/facd7ddafe0e23715e079e50971ad27b251e2e98)) +* close malformed live WebSockets instead of wedging them ([3b227d6](https://github.com/google/adk-python/commit/3b227d6ec82490dae6473f681dcc825b1ac31679)) +* compact AgentTool nested history at caller token threshold ([ae8323b](https://github.com/google/adk-python/commit/ae8323b6d3de2fa75181e80f510ca91b0a0da336)), closes [#7397](https://github.com/google/adk-python/issues/7397) +* **compaction:** cancel in-flight summarization when invocation aborts ([87d9dcd](https://github.com/google/adk-python/commit/87d9dcdf5273b54f61ee9d9cba95c30e5c0a5e0e)) +* complete A2A task when the run recovers from an error ([512d56b](https://github.com/google/adk-python/commit/512d56b2220b08feda559787045a7d8c9f8ebe0f)) +* convert Enum tool arguments to the declared member ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab)) +* convert list[Enum] tool arguments to the declared members ([58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) +* copy initial state in InMemorySessionService.create_session ([cec52fc](https://github.com/google/adk-python/commit/cec52fc005a2c76963feb0a424647ca9576ebb2d)) +* count tool outputs since the last model call toward token threshold ([a72a8ed](https://github.com/google/adk-python/commit/a72a8ed391c542417ce4c73c3bde751bb1d522cc)) +* declare the retrieval tool query parameter as required ([5cc364b](https://github.com/google/adk-python/commit/5cc364b75587bc1806cd50b43905c074851c870c)), closes [#7677](https://github.com/google/adk-python/issues/7677) +* decode base64 bytes in rehydrated workflow node outputs ([81c3fe6](https://github.com/google/adk-python/commit/81c3fe649232f79b03f5663da90d4434ddeb8073)) +* disambiguate colliding connector tool names in ApplicationIntegrationToolset ([f08f9d6](https://github.com/google/adk-python/commit/f08f9d677f16f36980be56d34bb1b4a444b2d934)) +* don't score a judge response that leaves a rubric without a verdict ([d1f2add](https://github.com/google/adk-python/commit/d1f2add4fe759c7c9109cba5eae2b20809fc6795)) +* don't write shared state for a rejected duplicate Redis session ([c501d8e](https://github.com/google/adk-python/commit/c501d8eda44d386847a23a9599ce0d785009b8ec)), closes [#7816](https://github.com/google/adk-python/issues/7816) +* drop per-invocation retry counts when an invocation ends ([42a8a87](https://github.com/google/adk-python/commit/42a8a87928a092be2c2138c619f4d15ad12c953a)), closes [#7637](https://github.com/google/adk-python/issues/7637) +* drop temp: state keys in VertexAiSessionService.create_session ([da4af77](https://github.com/google/adk-python/commit/da4af771b1c3ac8fde8a4030d67c412c1a1c1b6c)), closes [#7818](https://github.com/google/adk-python/issues/7818) +* **eval:** preserve live usage without extra inference calls ([8cd3b12](https://github.com/google/adk-python/commit/8cd3b12c8a5d658c5e0d3ea0731d8be34a092a4a)), closes [#7321](https://github.com/google/adk-python/issues/7321) +* exclude replayed nodes from workflow max_concurrency count ([adc2433](https://github.com/google/adk-python/commit/adc2433bf467cf3ba778189e3b0ddf17bde5f0fb)), closes [#7618](https://github.com/google/adk-python/issues/7618) +* exclude thought parts from SQLite memory search results ([de34d8d](https://github.com/google/adk-python/commit/de34d8dc53e6165db59aad37f32e8259d66f2765)), closes [#7688](https://github.com/google/adk-python/issues/7688) +* exclude thought text from preloaded memories ([b138b5a](https://github.com/google/adk-python/commit/b138b5a6a84762c51b30311a2d9c97ab4713bc93)) +* export all shipped plugins from google.adk.plugins ([4496bef](https://github.com/google/adk-python/commit/4496bef701661b48221df56f75a89ff70449bcdc)) +* filter hidden artifacts from LLM context ([0c053dd](https://github.com/google/adk-python/commit/0c053dd5a6ae208a8ef262eced276137a7a7b441)), closes [#6873](https://github.com/google/adk-python/issues/6873) +* find CJK and Thai words inside a sentence in sqlite memory ([f8ced6f](https://github.com/google/adk-python/commit/f8ced6f952c1214e3140a27c5b2152e166632b22)), closes [#7959](https://github.com/google/adk-python/issues/7959) +* **flows:** elide system instruction markers from relayed agent text ([cbe7c5e](https://github.com/google/adk-python/commit/cbe7c5e529ae214c70e33b87cb8538f4cd4e3154)) +* **flows:** run on_model_error callbacks when a model call is cancelled ([36cb10d](https://github.com/google/adk-python/commit/36cb10ddc40884258374f7586438d980bc713d63)) +* give ModelArmorPlugin its own client on each event loop ([c9d2c48](https://github.com/google/adk-python/commit/c9d2c48beac85f5343398bd970b0cbf6485f8e9c)), closes [#7644](https://github.com/google/adk-python/issues/7644) +* handle an expired OAuth2 token that has no refresh token ([cbe786b](https://github.com/google/adk-python/commit/cbe786b6d8c8af9483353367a9febca4432a7bda)), closes [#7728](https://github.com/google/adk-python/issues/7728) +* handle non-UTF-8 avatar configuration files ([27dda3e](https://github.com/google/adk-python/commit/27dda3e11eefef25fd75ba4b3ea43ded989f6e56)) +* harden callable type hint resolution and FunctionNode TypeAdapter handling ([da35ca7](https://github.com/google/adk-python/commit/da35ca77d71f7d74c8b7d7550f6e1b591a6690e0)) +* hold the SQLite write lock across the SqliteSessionService stale check ([bc0b418](https://github.com/google/adk-python/commit/bc0b41871699a70a3bf1169bb7e7ff91d2db5e31)) +* honor query parameter style and explode ([1d81896](https://github.com/google/adk-python/commit/1d81896aa081e7b2e50b3a4a227f7c6933805752)), closes [#7204](https://github.com/google/adk-python/issues/7204) +* honor tool_config function calling mode in AnthropicLlm ([da786ed](https://github.com/google/adk-python/commit/da786ed22d61415904a1ca0964d840c31a8f2c02)), closes [#7633](https://github.com/google/adk-python/issues/7633) +* ignore thought parts when scoring response_match_score ([571670d](https://github.com/google/adk-python/commit/571670d9f7e1760985d0bd41a009600ee14b6acd)) +* keep a node's branch when it relays sub-agent events ([27edb47](https://github.com/google/adk-python/commit/27edb4712f5cf1470c77cf515811b99b6ec46014)) +* keep a wildcard allow_origins off the builder and internal agents ([b7ac5ef](https://github.com/google/adk-python/commit/b7ac5ef7557186518ce57cb3dbfd58ec6c1b8bfe)) +* keep ADK tracking headers and http options when client_kwargs sets http_options ([fb197fa](https://github.com/google/adk-python/commit/fb197fa39470614a9a079cf33c69cabf6b0df260)) +* keep content and errors when a workflow node delegates its output ([efec445](https://github.com/google/adk-python/commit/efec445a46fe637a4ac14bc79df1cb955c4ef96a)), closes [#7949](https://github.com/google/adk-python/issues/7949) +* keep create_session state when rewinding a session ([dfd534a](https://github.com/google/adk-python/commit/dfd534a8802a1f03beaae90f90d29892b28a6918)), closes [#4933](https://github.com/google/adk-python/issues/4933) +* keep in-memory artifact scopes separate when identifiers contain / ([27cdf7f](https://github.com/google/adk-python/commit/27cdf7fb5017e2bc220049bcf9db74d0a995a2fd)), closes [#7706](https://github.com/google/adk-python/issues/7706) +* keep partial events out of Agent Engine storage ([3a6b7a5](https://github.com/google/adk-python/commit/3a6b7a51da72cdffa9d0611dced7446fc49240dd)), closes [#7828](https://github.com/google/adk-python/issues/7828) +* keep rejected saves out of the FileArtifactService catalog ([2cabbdd](https://github.com/google/adk-python/commit/2cabbddf1199f996e6e7e9040341eaecfb4add80)), closes [#7832](https://github.com/google/adk-python/issues/7832) +* keep span status and events in SqliteSpanExporter ([28743ec](https://github.com/google/adk-python/commit/28743ecd5327ea3a64d5540763f955debc360e88)), closes [#7484](https://github.com/google/adk-python/issues/7484) +* keep streamed ApigeeLlm tool call chunks without an index together ([d563d80](https://github.com/google/adk-python/commit/d563d80372e0281236c57a299fbaafb0e5595c4a)) +* keep the keys beside result in a Responses tool output ([9c45214](https://github.com/google/adk-python/commit/9c45214e323e6c8254db55c0ea96ed1dc36a6042)), closes [#7836](https://github.com/google/adk-python/issues/7836) +* keep the model's thoughts out of to_mcp_server results ([9688feb](https://github.com/google/adk-python/commit/9688feb5ce88f761420e50c03963a881d009d671)), closes [#7834](https://github.com/google/adk-python/issues/7834) +* keep the streamed thought signature on its own part ([a9cabe7](https://github.com/google/adk-python/commit/a9cabe7269b9d63feb812b3051d2a6eda89ce85f)) +* keep thought parts out of FirestoreMemoryService ([af371b7](https://github.com/google/adk-python/commit/af371b7236c87bad36957e5f691b350c513e6bb2)) +* keep thought parts out of Memory Bank events ([4fae7b7](https://github.com/google/adk-python/commit/4fae7b75c9c9d41bc2ee3ac79001b87f005be6ab)), closes [#7850](https://github.com/google/adk-python/issues/7850) +* keep turns a rewind took back out of long-term memory ([2591397](https://github.com/google/adk-python/commit/2591397bba40f1d0899aca0ea37c162381d0a119)), closes [#7570](https://github.com/google/adk-python/issues/7570) +* leave no-usage turns out of the token_usage_v1 average ([5e52b21](https://github.com/google/adk-python/commit/5e52b21a8cf0b82805283a3f77f3fcfcda4811e7)), closes [#7734](https://github.com/google/adk-python/issues/7734) +* list built-in tools in the rubric multi-turn trajectory evaluator ([0478150](https://github.com/google/adk-python/commit/047815043ca57dae1abfec263768c3fca4130659)) +* **live:** drop saved audio from history replayed to the CascadeLive reasoner ([50ab3b5](https://github.com/google/adk-python/commit/50ab3b5e9708900e2153d448647dc69b6164285f)) +* **live:** log live event and request identifiers instead of contents ([6582001](https://github.com/google/adk-python/commit/65820018ea8c452e5cf6a87012a715add5c3a774)) +* **live:** make CascadeLive reply to history that ends with a user turn ([e4a824f](https://github.com/google/adk-python/commit/e4a824f24b5fd25b929419a6dfe3f871cafd61c6)) +* load AgentDetails tool declarations back as genai Tools ([4255760](https://github.com/google/adk-python/commit/4255760205854e35bb34367c4949cc295b627f6d)), closes [#7876](https://github.com/google/adk-python/issues/7876) +* map Anthropic model_context_window_exceeded to MAX_TOKENS ([cd72afa](https://github.com/google/adk-python/commit/cd72afa4fcce8b478cf20725f8ed21b00e6fbcbc)) +* mark failed A2A tasks as error events ([25d1917](https://github.com/google/adk-python/commit/25d191710985371dfb93a131f2fa797734850952)), closes [#6708](https://github.com/google/adk-python/issues/6708) +* mark failed MCP tool results as errors for Claude ([37b1ab3](https://github.com/google/adk-python/commit/37b1ab3c20a0bee18e5c4429a05a0007cd8ea8d6)), closes [#7664](https://github.com/google/adk-python/issues/7664) +* mark failed MCP tool results as errors on the interactions API ([72205cd](https://github.com/google/adk-python/commit/72205cd3ee52ed4ab49359cc951f2283e3d35191)) +* match SKILL.md frontmatter delimiters as whole lines ([25105b4](https://github.com/google/adk-python/commit/25105b40ed9f84769ae368edc35e821df2a19e69)), closes [#7725](https://github.com/google/adk-python/issues/7725) +* normalize array-tail schema types ([3a5bbd2](https://github.com/google/adk-python/commit/3a5bbd2f593c3785eff9b9855054744df0b64db8)) +* only reject Firestore ids fully matching __.*__ ([e533f55](https://github.com/google/adk-python/commit/e533f55581f7f49f79daee2d250e1950678c25a0)), closes [#7855](https://github.com/google/adk-python/issues/7855) +* pass the caller's temp: state to an AgentTool's wrapped agent ([12c7bed](https://github.com/google/adk-python/commit/12c7bed7661ccf942f0f6d3b62bed22a23ea0a85)), closes [#7595](https://github.com/google/adk-python/issues/7595) +* pin certifi 2026.10.19 in the constraints files ([466648b](https://github.com/google/adk-python/commit/466648bb4e26c3f5cd1c1903c66a82c800703e68)) +* **plugins:** prevent BQAA offload data loss and preserve binary MIME ([14236ff](https://github.com/google/adk-python/commit/14236ffe522d10699d9090f9188cfa7af5a8a66c)), closes [#7868](https://github.com/google/adk-python/issues/7868) +* point litellm install hints at google-adk[extensions] ([47e613d](https://github.com/google/adk-python/commit/47e613d84769d2e4f84bf5f4be7ecb81fe1996a7)) +* present the mTLS client certificate from RemoteA2aAgent's default client ([d2ae901](https://github.com/google/adk-python/commit/d2ae9016a6a63e073dea129e647553c04cf09864)) +* preserve empty environment simulation responses ([dcbeb54](https://github.com/google/adk-python/commit/dcbeb54ff76f47b797dcf16aee27fe3d715b16a9)) +* preserve non-UTF-8 bytes in EditFileTool ([e3d1594](https://github.com/google/adk-python/commit/e3d1594d04f8ae88921fadae4bc8f16bcb698d0b)), closes [#7314](https://github.com/google/adk-python/issues/7314) +* preserve span kinds in SQLite traces ([ebec2c8](https://github.com/google/adk-python/commit/ebec2c83bb2e0a19163ae92371854f682cc8ce2a)) +* preserve split Unicode surrogate pairs ([0af1cdc](https://github.com/google/adk-python/commit/0af1cdce3b1a92d0067c66f43fb9a4fd217ec73a)) +* preserve union arguments when exporting MCP tool schemas ([ce4e0c4](https://github.com/google/adk-python/commit/ce4e0c40772e8d460d6b727c3bdf56efe7ac779b)) +* preserve workflow routes when flushing and delegating output ([af6f671](https://github.com/google/adk-python/commit/af6f671965075260dd5d22ae49d48f044d99e039)), closes [#7930](https://github.com/google/adk-python/issues/7930) +* prevent file truncation on invalid write_file content ([611b8e7](https://github.com/google/adk-python/commit/611b8e7cc22008146c9e23587a81580424410477)) +* read interaction errors list on failed interactions ([1a5a36d](https://github.com/google/adk-python/commit/1a5a36d23a0e8f28a1a48123d4378ae2fea85402)) +* read Workflow.graph when drawing the dev UI graph ([e5b7dc8](https://github.com/google/adk-python/commit/e5b7dc8c68c64a093363cc195ce27304a8efe904)), closes [#7528](https://github.com/google/adk-python/issues/7528) +* reap ADK sessions of dead MCP connections in to_mcp_server ([17fb8af](https://github.com/google/adk-python/commit/17fb8afc15a7cd8f33d82328d65b8e0e47436739)), closes [#7154](https://github.com/google/adk-python/issues/7154) +* record an invocation when an agent turn yields no events ([94eb6c4](https://github.com/google/adk-python/commit/94eb6c4fc1f3da1eec8b50bca6775bf6ccb7d4ec)) +* reject model-supplied urls with a backslash in the authority ([4d0cd98](https://github.com/google/adk-python/commit/4d0cd985faedb3c0d9e3579077de327a6ef86a52)) +* reject names with a trailing newline ([e2e9336](https://github.com/google/adk-python/commit/e2e9336a7fde1ea6450a56629090be7bc06cae52)) +* reject non-identifier or keyword agent names in adk create ([3655990](https://github.com/google/adk-python/commit/3655990f6ce1e55c40c5710351f6cf06cde0669b)) +* reject path-breaking identity ids in FirestoreSessionService ([ec9756e](https://github.com/google/adk-python/commit/ec9756eaed517d89fde20e5f514b798edb532854)), closes [#7800](https://github.com/google/adk-python/issues/7800) +* report a LiteLlm stream without a finish reason as truncated ([f1f63d3](https://github.com/google/adk-python/commit/f1f63d30363571b15813411fb48d2c598fde1aaa)) +* report long-running AgentEngineEnvironment commands as timed out ([b13fa19](https://github.com/google/adk-python/commit/b13fa19ad61ad857690758e6a440a7b7de3f9128)) +* report truncated Apigee tool calls as max tokens ([3638d76](https://github.com/google/adk-python/commit/3638d764f72c7ccbf07ee5261305b27d9fc464db)), closes [#7648](https://github.com/google/adk-python/issues/7648) +* report unreadable SKILL.md files to on_error ([da98d4d](https://github.com/google/adk-python/commit/da98d4d641b673369ef96ee94424459083dd7703)) +* report unusable LiteLlm tool call arguments as malformed ([d5ecb99](https://github.com/google/adk-python/commit/d5ecb990ff1a8e1110d25ea218ae4e9410283d60)), closes [#7802](https://github.com/google/adk-python/issues/7802) +* require authlib 1.9.1 or newer for CVE fixes ([b84e0a0](https://github.com/google/adk-python/commit/b84e0a0a394fea73144408eb649efb06df74791f)) +* resolve nested models in legacy function declarations ([392feb2](https://github.com/google/adk-python/commit/392feb2a68f1f642d484b873da8bb2dfc6759f9d)), closes [#6984](https://github.com/google/adk-python/issues/6984) +* restrict VertexAiSessionService.create_session config options ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) +* return AgentTool input_schema validation errors to the model ([95dd267](https://github.com/google/adk-python/commit/95dd267c22f822d554e93df165274389d5ae7f31)) +* run LlamaIndexRetrieval lookups off the event loop ([bc291ab](https://github.com/google/adk-python/commit/bc291ab62ab2c0eaaaf01c7d9c0238b48842753f)), closes [#7674](https://github.com/google/adk-python/issues/7674) +* **runner:** close isolated runs that end on a terminal node outcome ([471341f](https://github.com/google/adk-python/commit/471341f28d23a57c6f15d74c83cd3fc3300fdc3d)) +* **runner:** key finished isolation scopes by invocation id ([8d7445d](https://github.com/google/adk-python/commit/8d7445d99d9404f68805a7cb72b848a795c30bc1)) +* **runner:** seal tool calls on task cancel and unify runner teardown ([abd8f0f](https://github.com/google/adk-python/commit/abd8f0f69bab8d5ee9b3e0e5a88d42b57e69b3d6)) +* **runner:** skip abort seal when a newer turn has updated the session ([7414308](https://github.com/google/adk-python/commit/74143085e9ec53f179f613f8f5fc01a14a8acf77)) +* scope cached Eventarc publisher clients per running event loop ([c77b5b4](https://github.com/google/adk-python/commit/c77b5b4134d8ba0f81a6564ef33c17046995b78e)) +* **scripts:** accept a shared guide page documenting a module's exports ([db60432](https://github.com/google/adk-python/commit/db60432275b8db9e41e0935d87d1b40b4c623675)) +* send a JSON-safe state_delta from VertexAiSessionService ([f6325bc](https://github.com/google/adk-python/commit/f6325bc2251302db26f3e5aa6dd8e4d439ea5d75)), closes [#7826](https://github.com/google/adk-python/issues/7826) +* send the request's headers when loading MCP resources ([28d4975](https://github.com/google/adk-python/commit/28d49753845ad0ed0d024cdeb7f738b6ff1446e0)), closes [#7822](https://github.com/google/adk-python/issues/7822) +* send the thinking level on the interactions API ([c20b90a](https://github.com/google/adk-python/commit/c20b90afb524571b4070a9d961dfe31b946df908)), closes [#7924](https://github.com/google/adk-python/issues/7924) +* serialize DatabaseSessionService writes on SQLite files ([c3abc93](https://github.com/google/adk-python/commit/c3abc93d11260e87bb1bd1445faa25a6b5b0d681)) +* serialize Firestore event payloads and wrap nested state arrays ([0894c03](https://github.com/google/adk-python/commit/0894c034c499bd195558f31c677c44d31d1555e0)) +* serialize Gemma 3 tool results that hold datetimes, bytes or models ([2b84cca](https://github.com/google/adk-python/commit/2b84cca3a1c9235ad5c5a971d4ec12424a278e5b)), closes [#7667](https://github.com/google/adk-python/issues/7667) +* **sessions:** base64-encode non-UTF-8 bytes in JSON state serialization ([73dca84](https://github.com/google/adk-python/commit/73dca84ef0ee14998d91e738dada6b82008cf8d2)) +* **sessions:** encode binary bytes as base64 in session state ([d91dd34](https://github.com/google/adk-python/commit/d91dd34e864281d879c8aca9d34a1792d77e7b08)) +* set error.type on spans that end in an error ([a96fc11](https://github.com/google/adk-python/commit/a96fc11b58a92187ad6cdaba0059d6999964fbe8)), closes [#7494](https://github.com/google/adk-python/issues/7494) +* share the parent's memory service with AgentTool sub-agents ([4e0ac64](https://github.com/google/adk-python/commit/4e0ac64e36ecbcae233a0d26f3d697b3eaad0568)) +* skip storage writes for partial events in RedisSessionService ([7662758](https://github.com/google/adk-python/commit/766275863d1e80489344f0fbe5b4bfa3b933a9a9)) +* skip the MCP mTLS probe unless google-auth would use a client cert ([0e5d6c9](https://github.com/google/adk-python/commit/0e5d6c963cb6935ff1c28535f167c96a96746ad4)) +* split CJK sentences in ElevenLabsTTS ([0fe80f1](https://github.com/google/adk-python/commit/0fe80f19c2495895d8f432a6af7e6515d3a0426e)) +* stamp the model response event when finalizing it ([1e63423](https://github.com/google/adk-python/commit/1e63423e5198a8d9dd04214add6bd67cb7d561bf)), closes [#7695](https://github.com/google/adk-python/issues/7695) +* stop a session id from replacing sessionless in-memory memories ([b8d69f8](https://github.com/google/adk-python/commit/b8d69f8541f74cc690f4adf1d7ea7c4c1d508fa0)), closes [#7711](https://github.com/google/adk-python/issues/7711) +* stop a slow resumed node from timing out replayed siblings ([3565ad3](https://github.com/google/adk-python/commit/3565ad3dd0c95125b92e38b02cfe22a77fe5249e)) +* stop list_sessions(user_id="") from listing every user in Firestore ([b981250](https://github.com/google/adk-python/commit/b98125006644d8fee70606dab71d350ab674daf0)), closes [#7662](https://github.com/google/adk-python/issues/7662) +* stop LiteLlm from running tool calls quoted in answer text ([6b00a38](https://github.com/google/adk-python/commit/6b00a38901e7181801f645e5890da54aa322b6dc)) +* stop McpTool falling back to HTTP auth on an empty OAuth2 token ([83acbc5](https://github.com/google/adk-python/commit/83acbc50f45afa07e47e72007d4291f2fa6f36e6)), closes [#7646](https://github.com/google/adk-python/issues/7646) +* stop rerunning a finished node when a later interrupt resumes ([d0c3af5](https://github.com/google/adk-python/commit/d0c3af571faf71252a226bbcb4891cb08374d773)) +* stop running truncated Claude tool calls ([b9d2bc3](https://github.com/google/adk-python/commit/b9d2bc3d95487ecc4a437b813f9b8fa634e1be54)) +* store DatabaseSessionService JSON columns as json on PostgreSQL ([d487c53](https://github.com/google/adk-python/commit/d487c537774278a98d5970b67c03a10049af2786)) +* store non-ASCII session JSON unescaped on SQLite ([bdb1ced](https://github.com/google/adk-python/commit/bdb1cedf3a33d87c43f16da44a16dbde7f38008e)) +* strip the JSON code fence when replaying schema output on resume ([f4fa73e](https://github.com/google/adk-python/commit/f4fa73e80894c4c1d532c8dfa8c19962dd8927c2)) +* stub ADC in modules that imported google.auth.default by name ([92dfe41](https://github.com/google/adk-python/commit/92dfe41e8db5ce248d7141498662787990f8e508)) +* support deepcopy and pickling in AgentEngineSandboxCodeExecutor ([d60c870](https://github.com/google/adk-python/commit/d60c870ad512fb19d596caea31f647bdb36a50a8)) +* take final input and cache counts from Anthropic message_delta ([329933f](https://github.com/google/adk-python/commit/329933f755d5f987d7e25d8348548dc718b21a0a)) +* **telemetry:** give every gen_ai duration and token histogram bucket bounds ([ba45671](https://github.com/google/adk-python/commit/ba456715ce8a25c99218db992d4b96ab30f2d5c5)) +* **telemetry:** Record the aggregated answer of a streamed inference, not its chunks ([80a4411](https://github.com/google/adk-python/commit/80a44111c7a4fe8b739249f6e4ffc649b72ce257)) +* **tracing:** extract standard W3C traceparent and baggage headers on FastAPI requests ([f27b8f1](https://github.com/google/adk-python/commit/f27b8f1055f78005c651bdebaae1f510cbb3b476)), closes [#7844](https://github.com/google/adk-python/issues/7844) +* treat after_timestamp=0 as a filter in session services ([6b182d8](https://github.com/google/adk-python/commit/6b182d8a0ee1ee5e13467290ee1bfff5842a9a89)) +* treat an empty session id as absent in DatabaseSessionService ([1a337ca](https://github.com/google/adk-python/commit/1a337ca6a58045304d86450b0f6b65e82efc4a15)) +* unwrap PEP 604 optional parameters in BaseTool.from_config ([19e3d5b](https://github.com/google/adk-python/commit/19e3d5b4af8230f97d787a0f165f491841989a46)), closes [#7840](https://github.com/google/adk-python/issues/7840) +* use set_model_response for output_schema agents that can transfer ([73b6790](https://github.com/google/adk-python/commit/73b6790b2688c27330eecd18b590157c0704ee58)), closes [#7717](https://github.com/google/adk-python/issues/7717) +* use the continue URI and scopes from Agent Registry bindings ([a81df0e](https://github.com/google/adk-python/commit/a81df0ef978502dd0e9e144d3630a87d14476e27)) +* validate skill_id path segments before GCS blob lookup ([7394fba](https://github.com/google/adk-python/commit/7394fba39042d8ec7b7a12217128eaa45614d8c5)) +* wait for pending event appends before retrying a node ([3b74a99](https://github.com/google/adk-python/commit/3b74a99bd0e4e405fadd712e7253af2b0dcbe25d)), closes [#7524](https://github.com/google/adk-python/issues/7524) +* **workflow:** keep JoinNode in a loop firing after the first iteration ([b6600be](https://github.com/google/adk-python/commit/b6600be7b40e1b561418ecaf395240948881d9c0)) +* **workflow:** never retry configuration or invariant errors and add policy helpers ([c4b2640](https://github.com/google/adk-python/commit/c4b2640d3e4aa1e34954d48b43780a5c909fbf31)) +* **workflow:** retry a failed parallel worker item instead of the batch ([a9714ec](https://github.com/google/adk-python/commit/a9714eceb6b012cd68d7701467acdb098a6befc8)) +* wrap class descriptors from __dict__ ([2de5876](https://github.com/google/adk-python/commit/2de5876b09f7bc92b1d6f041a1513e6b0eb870d2)), closes [#6980](https://github.com/google/adk-python/issues/6980) + + +### Performance Improvements + +* cut a 30-node workflow's 200-turn run by 23% ([532580c](https://github.com/google/adk-python/commit/532580c8e0511c659eac39cd9305a02ecb796064)) +* cut a 30-node workflow's peak memory by 9% ([1f21370](https://github.com/google/adk-python/commit/1f2137094d0453a31411b4338e70c7c0e8e01289)) +* handle workflow node paths and branches as plain strings ([ba8905a](https://github.com/google/adk-python/commit/ba8905a36ddcdae459d431ca648bc39cb219a9f7)) +* skip the rewind pass for a workflow node with no events ([073b005](https://github.com/google/adk-python/commit/073b0054780583903a927245cc8e1cca03c0a588)) +* skip three event-history scans when nothing can match ([0ea43cc](https://github.com/google/adk-python/commit/0ea43cc3986078699ef69a0437aca74bd7dfa520)) +* skip two per-turn history scans in an LLM agent node ([e34f126](https://github.com/google/adk-python/commit/e34f126ac3cc9bb40629565f2aa79ecfcbe3c65c)) + + +### Documentation + +* add security section to MongoDB integration README ([1f49e28](https://github.com/google/adk-python/commit/1f49e2894ab05fa90b1d76358f1ef0092fc54db2)) +* add unit guides for the app container, the runner and events ([2147ef8](https://github.com/google/adk-python/commit/2147ef8562ffb58d4b0d3682cc690c09d45dbe31)) +* add unit guides for writing tools and toolsets ([09ab726](https://github.com/google/adk-python/commit/09ab726c66f95960620d011f70c4f41c992f9ea2)) +* **agents:** update ManagedAgent examples and tests to antigravity-preview-09-2026 ([3fbf2b5](https://github.com/google/adk-python/commit/3fbf2b5c226c5935c17fe5678715ca70876abc9a)) +* disable all content paths in the telemetry admin lock recipe ([34750dc](https://github.com/google/adk-python/commit/34750dcb85f4cdefefe002f8c3f156c471d29b52)) +* fix Google Cloud Run typo in adk_knowledge_agent README ([95d8610](https://github.com/google/adk-python/commit/95d8610ea3445ce9c6d0cf70aed1a0071ddc1e2f)) +* **guides:** add LlmClassifier unit guide ([6c20444](https://github.com/google/adk-python/commit/6c2044453982af250c54d8f668fc47bb82643e16)) +* **guides:** add TypesafeClassifier unit guide ([48d18a6](https://github.com/google/adk-python/commit/48d18a6aea65ed399bf036f29e383219ec167b3b)) +* **samples:** add an AgentEngineEnvironment sample agent ([d3a199d](https://github.com/google/adk-python/commit/d3a199d4c47d4c01bab91aee3cd36af1277fd510)) +* say ContainerCodeExecutor runs as the image's user, not non-root ([7a64c7c](https://github.com/google/adk-python/commit/7a64c7c552d369a03c644317df7eb1a133acc75d)), closes [#7712](https://github.com/google/adk-python/issues/7712) + ## [2.13.0](https://github.com/google/adk-python/compare/v2.12.0...v2.13.0) (2026-10-22) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 66e6cfbc832..4bcbd55e54a 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "2.13.0" +__version__ = "2.14.0" From 74560b36e7f395fbd23dcedd55f69e39ad13293e Mon Sep 17 00:00:00 2001 From: adk-bot <223368873+adk-bot@users.noreply.github.com> Date: Wed, 4 Nov 2026 19:53:48 +0000 Subject: [PATCH 02/10] chore: add curated highlights to changelog --- CHANGELOG.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83b1d137261..f5bb183dfc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,21 @@ ## [2.14.0](https://github.com/google/adk-python/compare/v2.13.0...v2.14.0) (2026-11-04) +### Highlights + +This release stabilizes core A2A integrations, evaluation tools, and runtime modules while adding MongoDB persistence services and performance enhancements for multi-turn workflows. + +* **Features**: Build on stable production APIs as core modules, evaluation frameworks, toolsets, and A2A integration graduate out of experimental status. ([c54b253](https://github.com/google/adk-python/commit/c54b253eba3359264a5f86805051aeb6cd93034d)) +* **Integrations**: Persist session states and enable vector search retrieval over long-term agent memories using new MongoDB-backed services. ([cbca417](https://github.com/google/adk-python/commit/cbca417c40e1aa052446391d2d7b36ae92978da9)) +* **CLI**: Instantly see local agent updates without restarting the CLI by passing the new `--reload_agents` flag to `adk run`. ([4f8e4ae](https://github.com/google/adk-python/commit/4f8e4aeef9a1a40fdd4b864818167b93a23d5ef0)) +* **Performance**: Run complex multi-turn workflows up to 23% faster with reduced memory consumption. ([532580c](https://github.com/google/adk-python/commit/532580c8e0511c659eac39cd9305a02ecb796064)) + +#### Breaking changes +* Ensure live WebSocket clients handle disconnects and re-establish connections gracefully, as malformed WebSockets will now close immediately instead of remaining stuck. + +
+All changes + ### ⚠ BREAKING CHANGES * close malformed live WebSockets instead of wedging them @@ -84,7 +99,6 @@ * clear strict mypy errors in tools and integrations ([fbd5ca0](https://github.com/google/adk-python/commit/fbd5ca0f6ad8671adefedaff937610024c4a7989)) * **cli:** monitor ASGI receive channel for client disconnect in /run_sse ([1fbe9e0](https://github.com/google/adk-python/commit/1fbe9e034506a0a9a03039a68e822fb1b787a165)) * close inner async generators across node `_run_impl` and skip compaction on early close ([facd7dd](https://github.com/google/adk-python/commit/facd7ddafe0e23715e079e50971ad27b251e2e98)) -* close malformed live WebSockets instead of wedging them ([3b227d6](https://github.com/google/adk-python/commit/3b227d6ec82490dae6473f681dcc825b1ac31679)) * compact AgentTool nested history at caller token threshold ([ae8323b](https://github.com/google/adk-python/commit/ae8323b6d3de2fa75181e80f510ca91b0a0da336)), closes [#7397](https://github.com/google/adk-python/issues/7397) * **compaction:** cancel in-flight summarization when invocation aborts ([87d9dcd](https://github.com/google/adk-python/commit/87d9dcdf5273b54f61ee9d9cba95c30e5c0a5e0e)) * complete A2A task when the run recovers from an error ([512d56b](https://github.com/google/adk-python/commit/512d56b2220b08feda559787045a7d8c9f8ebe0f)) @@ -209,7 +223,7 @@ * support deepcopy and pickling in AgentEngineSandboxCodeExecutor ([d60c870](https://github.com/google/adk-python/commit/d60c870ad512fb19d596caea31f647bdb36a50a8)) * take final input and cache counts from Anthropic message_delta ([329933f](https://github.com/google/adk-python/commit/329933f755d5f987d7e25d8348548dc718b21a0a)) * **telemetry:** give every gen_ai duration and token histogram bucket bounds ([ba45671](https://github.com/google/adk-python/commit/ba456715ce8a25c99218db992d4b96ab30f2d5c5)) -* **telemetry:** Record the aggregated answer of a streamed inference, not its chunks ([80a4411](https://github.com/google/adk-python/commit/80a44111c7a4fe8b739249f6e4ffc649b72ce257)) +* **telemetry:** record the aggregated answer of a streamed inference, not its chunks ([80a4411](https://github.com/google/adk-python/commit/80a44111c7a4fe8b739249f6e4ffc649b72ce257)) * **tracing:** extract standard W3C traceparent and baggage headers on FastAPI requests ([f27b8f1](https://github.com/google/adk-python/commit/f27b8f1055f78005c651bdebaae1f510cbb3b476)), closes [#7844](https://github.com/google/adk-python/issues/7844) * treat after_timestamp=0 as a filter in session services ([6b182d8](https://github.com/google/adk-python/commit/6b182d8a0ee1ee5e13467290ee1bfff5842a9a89)) * treat an empty session id as absent in DatabaseSessionService ([1a337ca](https://github.com/google/adk-python/commit/1a337ca6a58045304d86450b0f6b65e82efc4a15)) @@ -247,6 +261,8 @@ * **samples:** add an AgentEngineEnvironment sample agent ([d3a199d](https://github.com/google/adk-python/commit/d3a199d4c47d4c01bab91aee3cd36af1277fd510)) * say ContainerCodeExecutor runs as the image's user, not non-root ([7a64c7c](https://github.com/google/adk-python/commit/7a64c7c552d369a03c644317df7eb1a133acc75d)), closes [#7712](https://github.com/google/adk-python/issues/7712) +
+ ## [2.13.0](https://github.com/google/adk-python/compare/v2.12.0...v2.13.0) (2026-10-22) From 7798b1243a0be9d07c5a5037dd95fbeaa8f0e23f Mon Sep 17 00:00:00 2001 From: haranrk Date: Wed, 4 Nov 2026 23:26:23 +0000 Subject: [PATCH 03/10] chore: curate release highlights --- CHANGELOG.md | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5bb183dfc2..0cd29af88f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,15 +5,17 @@ ### Highlights -This release stabilizes core A2A integrations, evaluation tools, and runtime modules while adding MongoDB persistence services and performance enhancements for multi-turn workflows. +This release graduates A2A, evaluation and dozens of runtime modules out of experimental, adds MongoDB-backed sessions and memory plus Microsoft Teams and OpenAI Decisions integrations, and makes long multi-turn workflows faster. -* **Features**: Build on stable production APIs as core modules, evaluation frameworks, toolsets, and A2A integration graduate out of experimental status. ([c54b253](https://github.com/google/adk-python/commit/c54b253eba3359264a5f86805051aeb6cd93034d)) -* **Integrations**: Persist session states and enable vector search retrieval over long-term agent memories using new MongoDB-backed services. ([cbca417](https://github.com/google/adk-python/commit/cbca417c40e1aa052446391d2d7b36ae92978da9)) -* **CLI**: Instantly see local agent updates without restarting the CLI by passing the new `--reload_agents` flag to `adk run`. ([4f8e4ae](https://github.com/google/adk-python/commit/4f8e4aeef9a1a40fdd4b864818167b93a23d5ef0)) -* **Performance**: Run complex multi-turn workflows up to 23% faster with reduced memory consumption. ([532580c](https://github.com/google/adk-python/commit/532580c8e0511c659eac39cd9305a02ecb796064)) +* **A2A**: The A2A integration is now stable, and `adk` can generate an A2A agent card for your agent from the CLI. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/a2a/utils/agent_to_a2a/index.md) for more details. ([95d4a56](https://github.com/google/adk-python/commit/95d4a5660f5ab4707b251c0b7c86053e5c6f311e), [875e2ae](https://github.com/google/adk-python/commit/875e2aef7e800ca307fcff85b68e54d6101ba63c)) +* **Stable APIs**: 26 auth, environment, app, CLI and cache modules, 16 toolset and integration features, and the mature evaluation and user simulation classes graduate from experimental, so you can build on them without experimental warnings. ([c54b253](https://github.com/google/adk-python/commit/c54b253eba3359264a5f86805051aeb6cd93034d), [799fc94](https://github.com/google/adk-python/commit/799fc9459eb9443a63db11a179d6422b7e1dc1c0), [1112606](https://github.com/google/adk-python/commit/1112606c22856d4633a8c80d178386b168b2f632)) +* **MongoDbSessionService and MongoDbMemoryService**: Persist sessions and long-term memory in MongoDB, with vector search retrieval over memories. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/integrations/mongodb/session_service/index.md) for more details. ([9833835](https://github.com/google/adk-python/commit/9833835193016a559578800743ac87fe318bd48f), [cbca417](https://github.com/google/adk-python/commit/cbca417c40e1aa052446391d2d7b36ae92978da9), [1c84bb9](https://github.com/google/adk-python/commit/1c84bb955b9dd5b118594ccb9e219ac393ee31f9)) +* **TeamsRunner and OpenAIDecisionsClassifier**: Serve an ADK agent in Microsoft Teams, and classify requests with the OpenAI Decisions API. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/integrations/teams/teams_runner/index.md) for more details. ([c4376a6](https://github.com/google/adk-python/commit/c4376a65764bfd7abd016b81cde1e5165318b604), [aa98d18](https://github.com/google/adk-python/commit/aa98d180b6abf1966dbe378094a69aa488c2123e)) +* **Workflow performance**: Long multi-turn workflows run faster and use less memory; a 30-node workflow's 200-turn run is 23% faster with 9% lower peak memory. ([532580c](https://github.com/google/adk-python/commit/532580c8e0511c659eac39cd9305a02ecb796064), [1f21370](https://github.com/google/adk-python/commit/1f2137094d0453a31411b4338e70c7c0e8e01289)) #### Breaking changes -* Ensure live WebSocket clients handle disconnects and re-establish connections gracefully, as malformed WebSockets will now close immediately instead of remaining stuck. + +* **Live WebSockets (`/run_live`) now close instead of hanging**: the server closes the socket with code 1007 on a malformed frame and 1000 when the run ends, so reconnect for each new live run instead of reusing an idle socket. ([3b227d6](https://github.com/google/adk-python/commit/3b227d6ec82490dae6473f681dcc825b1ac31679))
All changes @@ -92,11 +94,6 @@ This release stabilizes core A2A integrations, evaluation tools, and runtime mod * cap litellm below 1.106.3 ([55a6fe5](https://github.com/google/adk-python/commit/55a6fe5f3d40734bab219d5a5032e19c3d0f5326)) * classify compaction failures with error.type ([8038bd7](https://github.com/google/adk-python/commit/8038bd7f43657d7bf5330cbc9cae0b8da95ee6f4)) * classify stream-level non-retryable BigQuery write errors as non_retryable ([bd38535](https://github.com/google/adk-python/commit/bd38535817a9639408a5f863c0f044aaa65d74cb)) -* clear strict mypy errors in auth, workflow and runtime helpers ([1b118f4](https://github.com/google/adk-python/commit/1b118f43a492fdc684d2ae8a73f9a68a46d40948)) -* clear strict mypy errors in the a2a package ([ee87201](https://github.com/google/adk-python/commit/ee8720162db4fcbf9b144d2f5c8e2fdf8bf85ef0)) -* clear strict mypy errors in the agent runtime and config ([b094693](https://github.com/google/adk-python/commit/b094693407f07765fc6f69d101bb969d8189d86a)) -* clear strict mypy errors in the MCP SDK seam ([2717d54](https://github.com/google/adk-python/commit/2717d54bb66ac9d8597c9ac4b3c4dbb884654e45)) -* clear strict mypy errors in tools and integrations ([fbd5ca0](https://github.com/google/adk-python/commit/fbd5ca0f6ad8671adefedaff937610024c4a7989)) * **cli:** monitor ASGI receive channel for client disconnect in /run_sse ([1fbe9e0](https://github.com/google/adk-python/commit/1fbe9e034506a0a9a03039a68e822fb1b787a165)) * close inner async generators across node `_run_impl` and skip compaction on early close ([facd7dd](https://github.com/google/adk-python/commit/facd7ddafe0e23715e079e50971ad27b251e2e98)) * compact AgentTool nested history at caller token threshold ([ae8323b](https://github.com/google/adk-python/commit/ae8323b6d3de2fa75181e80f510ca91b0a0da336)), closes [#7397](https://github.com/google/adk-python/issues/7397) @@ -160,7 +157,6 @@ This release stabilizes core A2A integrations, evaluation tools, and runtime mod * normalize array-tail schema types ([3a5bbd2](https://github.com/google/adk-python/commit/3a5bbd2f593c3785eff9b9855054744df0b64db8)) * only reject Firestore ids fully matching __.*__ ([e533f55](https://github.com/google/adk-python/commit/e533f55581f7f49f79daee2d250e1950678c25a0)), closes [#7855](https://github.com/google/adk-python/issues/7855) * pass the caller's temp: state to an AgentTool's wrapped agent ([12c7bed](https://github.com/google/adk-python/commit/12c7bed7661ccf942f0f6d3b62bed22a23ea0a85)), closes [#7595](https://github.com/google/adk-python/issues/7595) -* pin certifi 2026.10.19 in the constraints files ([466648b](https://github.com/google/adk-python/commit/466648bb4e26c3f5cd1c1903c66a82c800703e68)) * **plugins:** prevent BQAA offload data loss and preserve binary MIME ([14236ff](https://github.com/google/adk-python/commit/14236ffe522d10699d9090f9188cfa7af5a8a66c)), closes [#7868](https://github.com/google/adk-python/issues/7868) * point litellm install hints at google-adk[extensions] ([47e613d](https://github.com/google/adk-python/commit/47e613d84769d2e4f84bf5f4be7ecb81fe1996a7)) * present the mTLS client certificate from RemoteA2aAgent's default client ([d2ae901](https://github.com/google/adk-python/commit/d2ae9016a6a63e073dea129e647553c04cf09864)) @@ -194,7 +190,6 @@ This release stabilizes core A2A integrations, evaluation tools, and runtime mod * **runner:** seal tool calls on task cancel and unify runner teardown ([abd8f0f](https://github.com/google/adk-python/commit/abd8f0f69bab8d5ee9b3e0e5a88d42b57e69b3d6)) * **runner:** skip abort seal when a newer turn has updated the session ([7414308](https://github.com/google/adk-python/commit/74143085e9ec53f179f613f8f5fc01a14a8acf77)) * scope cached Eventarc publisher clients per running event loop ([c77b5b4](https://github.com/google/adk-python/commit/c77b5b4134d8ba0f81a6564ef33c17046995b78e)) -* **scripts:** accept a shared guide page documenting a module's exports ([db60432](https://github.com/google/adk-python/commit/db60432275b8db9e41e0935d87d1b40b4c623675)) * send a JSON-safe state_delta from VertexAiSessionService ([f6325bc](https://github.com/google/adk-python/commit/f6325bc2251302db26f3e5aa6dd8e4d439ea5d75)), closes [#7826](https://github.com/google/adk-python/issues/7826) * send the request's headers when loading MCP resources ([28d4975](https://github.com/google/adk-python/commit/28d49753845ad0ed0d024cdeb7f738b6ff1446e0)), closes [#7822](https://github.com/google/adk-python/issues/7822) * send the thinking level on the interactions API ([c20b90a](https://github.com/google/adk-python/commit/c20b90afb524571b4070a9d961dfe31b946df908)), closes [#7924](https://github.com/google/adk-python/issues/7924) @@ -219,7 +214,6 @@ This release stabilizes core A2A integrations, evaluation tools, and runtime mod * store DatabaseSessionService JSON columns as json on PostgreSQL ([d487c53](https://github.com/google/adk-python/commit/d487c537774278a98d5970b67c03a10049af2786)) * store non-ASCII session JSON unescaped on SQLite ([bdb1ced](https://github.com/google/adk-python/commit/bdb1cedf3a33d87c43f16da44a16dbde7f38008e)) * strip the JSON code fence when replaying schema output on resume ([f4fa73e](https://github.com/google/adk-python/commit/f4fa73e80894c4c1d532c8dfa8c19962dd8927c2)) -* stub ADC in modules that imported google.auth.default by name ([92dfe41](https://github.com/google/adk-python/commit/92dfe41e8db5ce248d7141498662787990f8e508)) * support deepcopy and pickling in AgentEngineSandboxCodeExecutor ([d60c870](https://github.com/google/adk-python/commit/d60c870ad512fb19d596caea31f647bdb36a50a8)) * take final input and cache counts from Anthropic message_delta ([329933f](https://github.com/google/adk-python/commit/329933f755d5f987d7e25d8348548dc718b21a0a)) * **telemetry:** give every gen_ai duration and token histogram bucket bounds ([ba45671](https://github.com/google/adk-python/commit/ba456715ce8a25c99218db992d4b96ab30f2d5c5)) @@ -255,7 +249,6 @@ This release stabilizes core A2A integrations, evaluation tools, and runtime mod * add unit guides for writing tools and toolsets ([09ab726](https://github.com/google/adk-python/commit/09ab726c66f95960620d011f70c4f41c992f9ea2)) * **agents:** update ManagedAgent examples and tests to antigravity-preview-09-2026 ([3fbf2b5](https://github.com/google/adk-python/commit/3fbf2b5c226c5935c17fe5678715ca70876abc9a)) * disable all content paths in the telemetry admin lock recipe ([34750dc](https://github.com/google/adk-python/commit/34750dcb85f4cdefefe002f8c3f156c471d29b52)) -* fix Google Cloud Run typo in adk_knowledge_agent README ([95d8610](https://github.com/google/adk-python/commit/95d8610ea3445ce9c6d0cf70aed1a0071ddc1e2f)) * **guides:** add LlmClassifier unit guide ([6c20444](https://github.com/google/adk-python/commit/6c2044453982af250c54d8f668fc47bb82643e16)) * **guides:** add TypesafeClassifier unit guide ([48d18a6](https://github.com/google/adk-python/commit/48d18a6aea65ed399bf036f29e383219ec167b3b)) * **samples:** add an AgentEngineEnvironment sample agent ([d3a199d](https://github.com/google/adk-python/commit/d3a199d4c47d4c01bab91aee3cd36af1277fd510)) From 0c3ae288ed30b38d52a1f37f67ce1bada59f1211 Mon Sep 17 00:00:00 2001 From: "Wei (Jack) Sun" Date: Wed, 4 Nov 2026 23:58:20 -0800 Subject: [PATCH 04/10] Update CHANGELOG for release highlights and changes This release graduates execution environments, A2A, evaluation, and core runtime modules from experimental, adds multi-run evaluation and semantic tool argument matching, adds Microsoft Teams and OpenAI Decisions integrations, and improves long multi-turn workflows. --- CHANGELOG.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cd29af88f7..3e4de763de9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,22 @@ ### Highlights -This release graduates A2A, evaluation and dozens of runtime modules out of experimental, adds MongoDB-backed sessions and memory plus Microsoft Teams and OpenAI Decisions integrations, and makes long multi-turn workflows faster. - -* **A2A**: The A2A integration is now stable, and `adk` can generate an A2A agent card for your agent from the CLI. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/a2a/utils/agent_to_a2a/index.md) for more details. ([95d4a56](https://github.com/google/adk-python/commit/95d4a5660f5ab4707b251c0b7c86053e5c6f311e), [875e2ae](https://github.com/google/adk-python/commit/875e2aef7e800ca307fcff85b68e54d6101ba63c)) +This release graduates execution environments, A2A, evaluation, and core runtime modules from experimental, adds multi-run evaluation and semantic tool argument matching, adds Microsoft Teams and OpenAI Decisions integrations, and makes long multi-turn workflows faster. +* **Execution environments and sandboxes**: + * `BaseEnvironment`, `LocalEnvironment`, `EnvironmentToolset`, `DaytonaEnvironment`, and `E2BEnvironment` are now stable. ([c54b253](https://github.com/google/adk-python/commit/c54b253eba3359264a5f86805051aeb6cd93034d), [799fc94](https://github.com/google/adk-python/commit/799fc9459eb9443a63db11a179d6422b7e1dc1c0)) + * `BaseEnvironment.read_file_stream` streams files in chunks across `LocalEnvironment`, `E2BEnvironment`, and `DaytonaEnvironment` so `ReadFileTool` reads line ranges without loading the whole file into memory. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/environment/base_environment/index.md) for more details. ([fd8d8c1](https://github.com/google/adk-python/commit/fd8d8c1e054a1e40abd564f3cfbd6a074e1d975a)) + * `AgentEngineEnvironment` reads and writes large files in chunks and reports commands over 570 seconds as timed out before the service deadline. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/integrations/vmaas/agent_engine_environment/index.md) and [sample](https://github.com/google/adk-python/tree/main/contributing/samples/environment_and_skills/agent_engine_environment) for more details. ([4c88040](https://github.com/google/adk-python/commit/4c880408b5468afb9196a4701cf6cb2a34c6b545), [5843c58](https://github.com/google/adk-python/commit/5843c582f15a89627bf379accea4ca182bcf706c), [b13fa19](https://github.com/google/adk-python/commit/b13fa19ad61ad857690758e6a440a7b7de3f9128), [d3a199d](https://github.com/google/adk-python/commit/d3a199d4c47d4c01bab91aee3cd36af1277fd510)) + * `ContainerCodeExecutor` supports input and output files, and `RunSkillScriptTool` runs skill scripts from validated paths and arguments instead of a shell command string. ([effd641](https://github.com/google/adk-python/commit/effd64101112643cf96ce6bdef6ece26080f6d49), [ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) +* **Evaluation**: + * `MultiRunConfig` (`adk eval --num_runs`) and `--parallelism` run each eval case multiple times concurrently and combine scores or pass rates across runs. See the [eval config](https://github.com/google/adk-python/blob/main/docs/guides/evaluation/eval_config/index.md) and [agent evaluator](https://github.com/google/adk-python/blob/main/docs/guides/evaluation/agent_evaluator/index.md) guides for more details. ([7f3517e](https://github.com/google/adk-python/commit/7f3517e43d7b6012f51438cffb60e6d7983e4217), [e9e8f61](https://github.com/google/adk-python/commit/e9e8f6156fb73cdfe799af0a0a57786e807732df)) + * `AgentEvaluator` accepts a `BaseNode` or `App` built at runtime, and `--eval_storage_uri` stores eval files outside a read-only `agents_dir`. ([ce92e92](https://github.com/google/adk-python/commit/ce92e924721e873afec74bdb393072eb32615f96), [ff66b1f](https://github.com/google/adk-python/commit/ff66b1f178c02bc0ef5d97b4303cb2c446f045cc)) + * `ToolArgsMatcher` compares tool call arguments in evaluations and `EnvironmentSimulation` using exact, case-insensitive, numeric-tolerance, or LLM-backed semantic checks. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/tools/tool_args_matcher/tool_args_matcher/index.md) for more details. ([ed76f94](https://github.com/google/adk-python/commit/ed76f94501f0e4dad9346e064980c1059bded1a7), [08c289b](https://github.com/google/adk-python/commit/08c289bb48e9fda73ed06d03dc7d8879c73fd2db)) +* **A2A**: The A2A integration is now stable, and `adk generate_agent_card` builds an A2A agent card from the CLI. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/a2a/utils/agent_to_a2a/index.md) for more details. ([95d4a56](https://github.com/google/adk-python/commit/95d4a5660f5ab4707b251c0b7c86053e5c6f311e), [875e2ae](https://github.com/google/adk-python/commit/875e2aef7e800ca307fcff85b68e54d6101ba63c)) +* **Integrations**: + * `TeamsRunner` connects an ADK agent to Microsoft Teams chats and channels. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/integrations/teams/teams_runner/index.md) for more details. ([c4376a6](https://github.com/google/adk-python/commit/c4376a65764bfd7abd016b81cde1e5165318b604)) + * `OpenAIDecisionsClassifier` classifies workflow and tool-gating questions with the OpenAI Decisions API. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/integrations/openai/openai_decisions_classifier/index.md) for more details. ([aa98d18](https://github.com/google/adk-python/commit/aa98d180b6abf1966dbe378094a69aa488c2123e)) + * `MongoDbMemoryService` adds vector search retrieval (`retrieval_mode="vector"` or `"auto"`) and TTL expiration (`memory_ttl_days`). See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/integrations/mongodb/memory_service/index.md) for more details. ([1c84bb9](https://github.com/google/adk-python/commit/1c84bb955b9dd5b118594ccb9e219ac393ee31f9)) * **Stable APIs**: 26 auth, environment, app, CLI and cache modules, 16 toolset and integration features, and the mature evaluation and user simulation classes graduate from experimental, so you can build on them without experimental warnings. ([c54b253](https://github.com/google/adk-python/commit/c54b253eba3359264a5f86805051aeb6cd93034d), [799fc94](https://github.com/google/adk-python/commit/799fc9459eb9443a63db11a179d6422b7e1dc1c0), [1112606](https://github.com/google/adk-python/commit/1112606c22856d4633a8c80d178386b168b2f632)) -* **MongoDbSessionService and MongoDbMemoryService**: Persist sessions and long-term memory in MongoDB, with vector search retrieval over memories. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/integrations/mongodb/session_service/index.md) for more details. ([9833835](https://github.com/google/adk-python/commit/9833835193016a559578800743ac87fe318bd48f), [cbca417](https://github.com/google/adk-python/commit/cbca417c40e1aa052446391d2d7b36ae92978da9), [1c84bb9](https://github.com/google/adk-python/commit/1c84bb955b9dd5b118594ccb9e219ac393ee31f9)) -* **TeamsRunner and OpenAIDecisionsClassifier**: Serve an ADK agent in Microsoft Teams, and classify requests with the OpenAI Decisions API. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/integrations/teams/teams_runner/index.md) for more details. ([c4376a6](https://github.com/google/adk-python/commit/c4376a65764bfd7abd016b81cde1e5165318b604), [aa98d18](https://github.com/google/adk-python/commit/aa98d180b6abf1966dbe378094a69aa488c2123e)) * **Workflow performance**: Long multi-turn workflows run faster and use less memory; a 30-node workflow's 200-turn run is 23% faster with 9% lower peak memory. ([532580c](https://github.com/google/adk-python/commit/532580c8e0511c659eac39cd9305a02ecb796064), [1f21370](https://github.com/google/adk-python/commit/1f2137094d0453a31411b4338e70c7c0e8e01289)) #### Breaking changes From 5687b55026d99ffdbc8109f92fa74a45d402289c Mon Sep 17 00:00:00 2001 From: haranrk Date: Thu, 5 Nov 2026 18:01:40 +0000 Subject: [PATCH 05/10] chore: drop 2.13.0 duplicates and document breaking and behavior changes --- CHANGELOG.md | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e4de763de9..36b55d0cc7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,21 @@ This release graduates execution environments, A2A, evaluation, and core runtime #### Breaking changes * **Live WebSockets (`/run_live`) now close instead of hanging**: the server closes the socket with code 1007 on a malformed frame and 1000 when the run ends, so reconnect for each new live run instead of reusing an idle socket. ([3b227d6](https://github.com/google/adk-python/commit/3b227d6ec82490dae6473f681dcc825b1ac31679)) +* **Enum tool arguments arrive as members**: tools whose parameters are annotated with a plain `Enum` (or `list[Enum]`) now receive the declared members instead of raw strings, so `arg == "celsius"` is now `False` and `str(arg)` on a `(str, Enum)` gives `Unit.CELSIUS`. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) +* **`VertexAiSessionService.create_session` accepts only session config options**: it forwards only `display_name`, `ttl`, `expire_time`, `labels` and their camelCase aliases, and raises `ValueError` for anything else, such as `http_options`, `session_state`/`sessionState`, `sessionId` or `wait_for_completion`. ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) +* **Firestore sessions store `event_data` as a JSON string**: 2.13.0 cannot read sessions that 2.14.0 has appended to, so rolling back after upgrading breaks those sessions. ([0894c03](https://github.com/google/adk-python/commit/0894c034c499bd195558f31c677c44d31d1555e0)) +* **`RunSkillScriptTool` no longer takes `command`**: it runs skill scripts from validated paths and arguments, returns `INVALID_ARGUMENTS` when `command` is supplied, and `UNSUPPORTED_SCRIPT_TYPE` for scripts that are not Python or shell. ([ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) +* **Promoted features can no longer be disabled**: `ADK_DISABLE_=1` and `override_feature_enabled(F, False)` no longer turn off the 16 toolset and integration features promoted to stable (2.13.0 raised `RuntimeError` when these were used while disabled). ([799fc94](https://github.com/google/adk-python/commit/799fc9459eb9443a63db11a179d6422b7e1dc1c0)) + +#### Behavior changes + +* OpenAPI tool query parameters now follow their declared `style` and `explode`. ([1d81896](https://github.com/google/adk-python/commit/1d81896aa081e7b2e50b3a4a227f7c6933805752)) +* `DatabaseSessionService` creates new PostgreSQL JSON columns as `json` instead of `jsonb`; existing `jsonb` tables are not migrated and keep working (the PostgreSQL sample README shows how to convert them). Queries outside ADK that rely on jsonb-only operators or GIN indexes will not work on new tables. ([d487c53](https://github.com/google/adk-python/commit/d487c537774278a98d5970b67c03a10049af2786)) +* `gen_ai.invoke_workflow.duration`, `gen_ai.client.operation.duration`, and `gen_ai.client.token.usage` histograms now use the semconv bucket bounds. ([ba45671](https://github.com/google/adk-python/commit/ba456715ce8a25c99218db992d4b96ab30f2d5c5)) +* An agent with an `output_schema`, no tools of its own, and a transfer target now gets the `set_model_response` tool instead of JSON mode on models that cannot combine a response schema with function calling, which adds two events per response. ([73b6790](https://github.com/google/adk-python/commit/73b6790b2688c27330eecd18b590157c0704ee58)) +* Token-threshold compaction counts tool outputs since the last model call, so it fires earlier for an unchanged `token_threshold`. ([a72a8ed](https://github.com/google/adk-python/commit/a72a8ed391c542417ce4c73c3bde751bb1d522cc)) +* A nested workflow whose terminal `wait_for_output` node is re-triggered into a new waiting run no longer surfaces that node's earlier output. ([cddc57f](https://github.com/google/adk-python/commit/cddc57f63db9aa8e8048184b647c62f9800063f3)) +* New `teams` and `fsspec` extras, and the `e2b` floor is raised to 2.29.5. ([c4376a6](https://github.com/google/adk-python/commit/c4376a65764bfd7abd016b81cde1e5165318b604), [6bf806a](https://github.com/google/adk-python/commit/6bf806a0107be8ce8e9dff92631f19f68f0c8cf6), [75fb788](https://github.com/google/adk-python/commit/75fb78863b96f0381e2117dba28f8442fa45ba68))
All changes @@ -40,8 +55,6 @@ This release graduates execution environments, A2A, evaluation, and core runtime * add --reload_agents flag to adk run for hot-reloading ([4f8e4ae](https://github.com/google/adk-python/commit/4f8e4aeef9a1a40fdd4b864818167b93a23d5ef0)), closes [#3679](https://github.com/google/adk-python/issues/3679) * add a2a agent card generation with the CLI ([875e2ae](https://github.com/google/adk-python/commit/875e2aef7e800ca307fcff85b68e54d6101ba63c)) * add get_active_events helper function ([3640e7d](https://github.com/google/adk-python/commit/3640e7d0c74bb2d377a58271ac6290d2e51ee60d)), closes [#4959](https://github.com/google/adk-python/issues/4959) -* add MongoDB-backed memory service ([cbca417](https://github.com/google/adk-python/commit/cbca417c40e1aa052446391d2d7b36ae92978da9)) -* add MongoDB-backed session service ([9833835](https://github.com/google/adk-python/commit/9833835193016a559578800743ac87fe318bd48f)) * allow McpToolset callers to receive MCP server notifications ([9a5117b](https://github.com/google/adk-python/commit/9a5117b73b8b7f8d7e6547d2e109336b8a7b053c)), closes [#6385](https://github.com/google/adk-python/issues/6385) * **artifacts:** add experimental FsspecArtifactService with read and listing support ([6bf806a](https://github.com/google/adk-python/commit/6bf806a0107be8ce8e9dff92631f19f68f0c8cf6)) * avoid ReadFileTool OOM by streaming file reads ([fd8d8c1](https://github.com/google/adk-python/commit/fd8d8c1e054a1e40abd564f3cfbd6a074e1d975a)), closes [#7131](https://github.com/google/adk-python/issues/7131) @@ -59,7 +72,6 @@ This release graduates execution environments, A2A, evaluation, and core runtime * **integrations:** add OpenAIDecisionsClassifier for the OpenAI Decisions API ([aa98d18](https://github.com/google/adk-python/commit/aa98d180b6abf1966dbe378094a69aa488c2123e)) * **integrations:** add TeamsRunner for Microsoft Teams ([c4376a6](https://github.com/google/adk-python/commit/c4376a65764bfd7abd016b81cde1e5165318b604)) * **integrations:** add vector search retrieval to MongoDbMemoryService ([1c84bb9](https://github.com/google/adk-python/commit/1c84bb955b9dd5b118594ccb9e219ac393ee31f9)) -* **integrations:** keep MongoDB credentials out of Agent Engine packages ([caf828d](https://github.com/google/adk-python/commit/caf828df5ef9e6322826ad4fe0dd0d2dce552a64)) * let a plugin configure event compaction per session ([9331638](https://github.com/google/adk-python/commit/93316384945d782a4de6e78b768f772e210ddcba)), closes [#4132](https://github.com/google/adk-python/issues/4132) * let AgentEvaluator evaluate an agent built at runtime ([ce92e92](https://github.com/google/adk-python/commit/ce92e924721e873afec74bdb393072eb32615f96)), closes [#1792](https://github.com/google/adk-python/issues/1792) * let applications customize tool retry guidance ([03b4fbc](https://github.com/google/adk-python/commit/03b4fbcee711365ecca4861a39119b2b6ecc5b2f)), closes [#7564](https://github.com/google/adk-python/issues/7564) @@ -101,7 +113,6 @@ This release graduates execution environments, A2A, evaluation, and core runtime * **bigquery:** improve error messages when write_mode is BLOCKED ([5849762](https://github.com/google/adk-python/commit/5849762718871e206b7745f0318f8399a5dd5f52)) * block internal ADK toggles and exec gadgets in YAML configs ([1c7e8f7](https://github.com/google/adk-python/commit/1c7e8f76b6c995b69b5cc9ec1ac2960988388a1d)) * build skill script commands from validated paths and arguments ([ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) -* cap litellm below 1.106.3 ([55a6fe5](https://github.com/google/adk-python/commit/55a6fe5f3d40734bab219d5a5032e19c3d0f5326)) * classify compaction failures with error.type ([8038bd7](https://github.com/google/adk-python/commit/8038bd7f43657d7bf5330cbc9cae0b8da95ee6f4)) * classify stream-level non-retryable BigQuery write errors as non_retryable ([bd38535](https://github.com/google/adk-python/commit/bd38535817a9639408a5f863c0f044aaa65d74cb)) * **cli:** monitor ASGI receive channel for client disconnect in /run_sse ([1fbe9e0](https://github.com/google/adk-python/commit/1fbe9e034506a0a9a03039a68e822fb1b787a165)) @@ -139,7 +150,6 @@ This release graduates execution environments, A2A, evaluation, and core runtime * ignore thought parts when scoring response_match_score ([571670d](https://github.com/google/adk-python/commit/571670d9f7e1760985d0bd41a009600ee14b6acd)) * keep a node's branch when it relays sub-agent events ([27edb47](https://github.com/google/adk-python/commit/27edb4712f5cf1470c77cf515811b99b6ec46014)) * keep a wildcard allow_origins off the builder and internal agents ([b7ac5ef](https://github.com/google/adk-python/commit/b7ac5ef7557186518ce57cb3dbfd58ec6c1b8bfe)) -* keep ADK tracking headers and http options when client_kwargs sets http_options ([fb197fa](https://github.com/google/adk-python/commit/fb197fa39470614a9a079cf33c69cabf6b0df260)) * keep content and errors when a workflow node delegates its output ([efec445](https://github.com/google/adk-python/commit/efec445a46fe637a4ac14bc79df1cb955c4ef96a)), closes [#7949](https://github.com/google/adk-python/issues/7949) * keep create_session state when rewinding a session ([dfd534a](https://github.com/google/adk-python/commit/dfd534a8802a1f03beaae90f90d29892b28a6918)), closes [#4933](https://github.com/google/adk-python/issues/4933) * keep in-memory artifact scopes separate when identifiers contain / ([27cdf7f](https://github.com/google/adk-python/commit/27cdf7fb5017e2bc220049bcf9db74d0a995a2fd)), closes [#7706](https://github.com/google/adk-python/issues/7706) @@ -168,7 +178,6 @@ This release graduates execution environments, A2A, evaluation, and core runtime * only reject Firestore ids fully matching __.*__ ([e533f55](https://github.com/google/adk-python/commit/e533f55581f7f49f79daee2d250e1950678c25a0)), closes [#7855](https://github.com/google/adk-python/issues/7855) * pass the caller's temp: state to an AgentTool's wrapped agent ([12c7bed](https://github.com/google/adk-python/commit/12c7bed7661ccf942f0f6d3b62bed22a23ea0a85)), closes [#7595](https://github.com/google/adk-python/issues/7595) * **plugins:** prevent BQAA offload data loss and preserve binary MIME ([14236ff](https://github.com/google/adk-python/commit/14236ffe522d10699d9090f9188cfa7af5a8a66c)), closes [#7868](https://github.com/google/adk-python/issues/7868) -* point litellm install hints at google-adk[extensions] ([47e613d](https://github.com/google/adk-python/commit/47e613d84769d2e4f84bf5f4be7ecb81fe1996a7)) * present the mTLS client certificate from RemoteA2aAgent's default client ([d2ae901](https://github.com/google/adk-python/commit/d2ae9016a6a63e073dea129e647553c04cf09864)) * preserve empty environment simulation responses ([dcbeb54](https://github.com/google/adk-python/commit/dcbeb54ff76f47b797dcf16aee27fe3d715b16a9)) * preserve non-UTF-8 bytes in EditFileTool ([e3d1594](https://github.com/google/adk-python/commit/e3d1594d04f8ae88921fadae4bc8f16bcb698d0b)), closes [#7314](https://github.com/google/adk-python/issues/7314) @@ -190,7 +199,6 @@ This release graduates execution environments, A2A, evaluation, and core runtime * report truncated Apigee tool calls as max tokens ([3638d76](https://github.com/google/adk-python/commit/3638d764f72c7ccbf07ee5261305b27d9fc464db)), closes [#7648](https://github.com/google/adk-python/issues/7648) * report unreadable SKILL.md files to on_error ([da98d4d](https://github.com/google/adk-python/commit/da98d4d641b673369ef96ee94424459083dd7703)) * report unusable LiteLlm tool call arguments as malformed ([d5ecb99](https://github.com/google/adk-python/commit/d5ecb990ff1a8e1110d25ea218ae4e9410283d60)), closes [#7802](https://github.com/google/adk-python/issues/7802) -* require authlib 1.9.1 or newer for CVE fixes ([b84e0a0](https://github.com/google/adk-python/commit/b84e0a0a394fea73144408eb649efb06df74791f)) * resolve nested models in legacy function declarations ([392feb2](https://github.com/google/adk-python/commit/392feb2a68f1f642d484b873da8bb2dfc6759f9d)), closes [#6984](https://github.com/google/adk-python/issues/6984) * restrict VertexAiSessionService.create_session config options ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) * return AgentTool input_schema validation errors to the model ([95dd267](https://github.com/google/adk-python/commit/95dd267c22f822d554e93df165274389d5ae7f31)) From ab736ea84abbb64a4883f7c7624f627c44624329 Mon Sep 17 00:00:00 2001 From: haranrk Date: Thu, 5 Nov 2026 19:25:05 +0000 Subject: [PATCH 06/10] chore: add cherry-picked fixes to 2.14.0 changelog --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36b55d0cc7d..5005e3948d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime #### Breaking changes * **Live WebSockets (`/run_live`) now close instead of hanging**: the server closes the socket with code 1007 on a malformed frame and 1000 when the run ends, so reconnect for each new live run instead of reusing an idle socket. ([3b227d6](https://github.com/google/adk-python/commit/3b227d6ec82490dae6473f681dcc825b1ac31679)) -* **Enum tool arguments arrive as members**: tools whose parameters are annotated with a plain `Enum` (or `list[Enum]`) now receive the declared members instead of raw strings, so `arg == "celsius"` is now `False` and `str(arg)` on a `(str, Enum)` gives `Unit.CELSIUS`. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) +* **Enum tool arguments arrive as members**: tools whose parameters are annotated with a plain `Enum` (or `list[Enum]`) now receive the declared members instead of raw strings, so `arg == "celsius"` is now `False` and `str(arg)` on a `(str, Enum)` gives `Unit.CELSIUS`. Members a tool returns in its result are sent to the model as their values. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) * **`VertexAiSessionService.create_session` accepts only session config options**: it forwards only `display_name`, `ttl`, `expire_time`, `labels` and their camelCase aliases, and raises `ValueError` for anything else, such as `http_options`, `session_state`/`sessionState`, `sessionId` or `wait_for_completion`. ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) * **Firestore sessions store `event_data` as a JSON string**: 2.13.0 cannot read sessions that 2.14.0 has appended to, so rolling back after upgrading breaks those sessions. ([0894c03](https://github.com/google/adk-python/commit/0894c034c499bd195558f31c677c44d31d1555e0)) * **`RunSkillScriptTool` no longer takes `command`**: it runs skill scripts from validated paths and arguments, returns `INVALID_ARGUMENTS` when `command` is supplied, and `UNSUPPORTED_SCRIPT_TYPE` for scripts that are not Python or shell. ([ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) @@ -150,6 +150,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime * ignore thought parts when scoring response_match_score ([571670d](https://github.com/google/adk-python/commit/571670d9f7e1760985d0bd41a009600ee14b6acd)) * keep a node's branch when it relays sub-agent events ([27edb47](https://github.com/google/adk-python/commit/27edb4712f5cf1470c77cf515811b99b6ec46014)) * keep a wildcard allow_origins off the builder and internal agents ([b7ac5ef](https://github.com/google/adk-python/commit/b7ac5ef7557186518ce57cb3dbfd58ec6c1b8bfe)) +* keep a2a converters utils importable without the a2a extra ([f3fcccd](https://github.com/google/adk-python/commit/f3fcccda23cd46bf4cbf6b7ff796430ebc59f996)) * keep content and errors when a workflow node delegates its output ([efec445](https://github.com/google/adk-python/commit/efec445a46fe637a4ac14bc79df1cb955c4ef96a)), closes [#7949](https://github.com/google/adk-python/issues/7949) * keep create_session state when rewinding a session ([dfd534a](https://github.com/google/adk-python/commit/dfd534a8802a1f03beaae90f90d29892b28a6918)), closes [#4933](https://github.com/google/adk-python/issues/4933) * keep in-memory artifact scopes separate when identifiers contain / ([27cdf7f](https://github.com/google/adk-python/commit/27cdf7fb5017e2bc220049bcf9db74d0a995a2fd)), closes [#7706](https://github.com/google/adk-python/issues/7706) @@ -190,6 +191,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime * read Workflow.graph when drawing the dev UI graph ([e5b7dc8](https://github.com/google/adk-python/commit/e5b7dc8c68c64a093363cc195ce27304a8efe904)), closes [#7528](https://github.com/google/adk-python/issues/7528) * reap ADK sessions of dead MCP connections in to_mcp_server ([17fb8af](https://github.com/google/adk-python/commit/17fb8afc15a7cd8f33d82328d65b8e0e47436739)), closes [#7154](https://github.com/google/adk-python/issues/7154) * record an invocation when an agent turn yields no events ([94eb6c4](https://github.com/google/adk-python/commit/94eb6c4fc1f3da1eec8b50bca6775bf6ccb7d4ec)) +* record inference token metrics under google-genai instrumentor 0.7b2 ([eb20e15](https://github.com/google/adk-python/commit/eb20e1563faeef36ff2c3edcfd20e57fce632900)) * reject model-supplied urls with a backslash in the authority ([4d0cd98](https://github.com/google/adk-python/commit/4d0cd985faedb3c0d9e3579077de327a6ef86a52)) * reject names with a trailing newline ([e2e9336](https://github.com/google/adk-python/commit/e2e9336a7fde1ea6450a56629090be7bc06cae52)) * reject non-identifier or keyword agent names in adk create ([3655990](https://github.com/google/adk-python/commit/3655990f6ce1e55c40c5710351f6cf06cde0669b)) @@ -209,6 +211,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime * **runner:** skip abort seal when a newer turn has updated the session ([7414308](https://github.com/google/adk-python/commit/74143085e9ec53f179f613f8f5fc01a14a8acf77)) * scope cached Eventarc publisher clients per running event loop ([c77b5b4](https://github.com/google/adk-python/commit/c77b5b4134d8ba0f81a6564ef33c17046995b78e)) * send a JSON-safe state_delta from VertexAiSessionService ([f6325bc](https://github.com/google/adk-python/commit/f6325bc2251302db26f3e5aa6dd8e4d439ea5d75)), closes [#7826](https://github.com/google/adk-python/issues/7826) +* send Enum members in tool results as their values ([3f5b30e](https://github.com/google/adk-python/commit/3f5b30e5d35f1490837dbe47007ab283088ce619)) * send the request's headers when loading MCP resources ([28d4975](https://github.com/google/adk-python/commit/28d49753845ad0ed0d024cdeb7f738b6ff1446e0)), closes [#7822](https://github.com/google/adk-python/issues/7822) * send the thinking level on the interactions API ([c20b90a](https://github.com/google/adk-python/commit/c20b90afb524571b4070a9d961dfe31b946df908)), closes [#7924](https://github.com/google/adk-python/issues/7924) * serialize DatabaseSessionService writes on SQLite files ([c3abc93](https://github.com/google/adk-python/commit/c3abc93d11260e87bb1bd1445faa25a6b5b0d681)) From 5450e810f2f0abe546a89354ff835a70752a0ff3 Mon Sep 17 00:00:00 2001 From: haranrk Date: Thu, 5 Nov 2026 20:18:46 +0000 Subject: [PATCH 07/10] chore: label live WebSocket close change as a fix --- CHANGELOG.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5005e3948d1..b2dd945b649 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,6 @@ This release graduates execution environments, A2A, evaluation, and core runtime #### Breaking changes -* **Live WebSockets (`/run_live`) now close instead of hanging**: the server closes the socket with code 1007 on a malformed frame and 1000 when the run ends, so reconnect for each new live run instead of reusing an idle socket. ([3b227d6](https://github.com/google/adk-python/commit/3b227d6ec82490dae6473f681dcc825b1ac31679)) * **Enum tool arguments arrive as members**: tools whose parameters are annotated with a plain `Enum` (or `list[Enum]`) now receive the declared members instead of raw strings, so `arg == "celsius"` is now `False` and `str(arg)` on a `(str, Enum)` gives `Unit.CELSIUS`. Members a tool returns in its result are sent to the model as their values. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) * **`VertexAiSessionService.create_session` accepts only session config options**: it forwards only `display_name`, `ttl`, `expire_time`, `labels` and their camelCase aliases, and raises `ValueError` for anything else, such as `http_options`, `session_state`/`sessionState`, `sessionId` or `wait_for_completion`. ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) * **Firestore sessions store `event_data` as a JSON string**: 2.13.0 cannot read sessions that 2.14.0 has appended to, so rolling back after upgrading breaks those sessions. ([0894c03](https://github.com/google/adk-python/commit/0894c034c499bd195558f31c677c44d31d1555e0)) @@ -34,6 +33,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime #### Behavior changes +* `/run_live` now closes the socket with code 1007 on a malformed frame and 1000 when the run ends, instead of leaving it hanging; reconnect for each new live run instead of reusing an idle socket. ([3b227d6](https://github.com/google/adk-python/commit/3b227d6ec82490dae6473f681dcc825b1ac31679)) * OpenAPI tool query parameters now follow their declared `style` and `explode`. ([1d81896](https://github.com/google/adk-python/commit/1d81896aa081e7b2e50b3a4a227f7c6933805752)) * `DatabaseSessionService` creates new PostgreSQL JSON columns as `json` instead of `jsonb`; existing `jsonb` tables are not migrated and keep working (the PostgreSQL sample README shows how to convert them). Queries outside ADK that rely on jsonb-only operators or GIN indexes will not work on new tables. ([d487c53](https://github.com/google/adk-python/commit/d487c537774278a98d5970b67c03a10049af2786)) * `gen_ai.invoke_workflow.duration`, `gen_ai.client.operation.duration`, and `gen_ai.client.token.usage` histograms now use the semconv bucket bounds. ([ba45671](https://github.com/google/adk-python/commit/ba456715ce8a25c99218db992d4b96ab30f2d5c5)) @@ -45,10 +45,6 @@ This release graduates execution environments, A2A, evaluation, and core runtime
All changes -### ⚠ BREAKING CHANGES - -* close malformed live WebSockets instead of wedging them - ### Features * **a2a:** graduate the A2A integration from experimental ([95d4a56](https://github.com/google/adk-python/commit/95d4a5660f5ab4707b251c0b7c86053e5c6f311e)) @@ -117,6 +113,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime * classify stream-level non-retryable BigQuery write errors as non_retryable ([bd38535](https://github.com/google/adk-python/commit/bd38535817a9639408a5f863c0f044aaa65d74cb)) * **cli:** monitor ASGI receive channel for client disconnect in /run_sse ([1fbe9e0](https://github.com/google/adk-python/commit/1fbe9e034506a0a9a03039a68e822fb1b787a165)) * close inner async generators across node `_run_impl` and skip compaction on early close ([facd7dd](https://github.com/google/adk-python/commit/facd7ddafe0e23715e079e50971ad27b251e2e98)) +* close malformed live WebSockets instead of wedging them ([3b227d6](https://github.com/google/adk-python/commit/3b227d6ec82490dae6473f681dcc825b1ac31679)) * compact AgentTool nested history at caller token threshold ([ae8323b](https://github.com/google/adk-python/commit/ae8323b6d3de2fa75181e80f510ca91b0a0da336)), closes [#7397](https://github.com/google/adk-python/issues/7397) * **compaction:** cancel in-flight summarization when invocation aborts ([87d9dcd](https://github.com/google/adk-python/commit/87d9dcdf5273b54f61ee9d9cba95c30e5c0a5e0e)) * complete A2A task when the run recovers from an error ([512d56b](https://github.com/google/adk-python/commit/512d56b2220b08feda559787045a7d8c9f8ebe0f)) From d89dbde042aac852fb35f5a98421efb50be3367f Mon Sep 17 00:00:00 2001 From: haranrk Date: Fri, 6 Nov 2026 19:00:48 +0000 Subject: [PATCH 08/10] chore: reclassify 2.14.0 breaking changes after upgrade validation --- CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2dd945b649..48ef5a4c37d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,11 +25,9 @@ This release graduates execution environments, A2A, evaluation, and core runtime #### Breaking changes -* **Enum tool arguments arrive as members**: tools whose parameters are annotated with a plain `Enum` (or `list[Enum]`) now receive the declared members instead of raw strings, so `arg == "celsius"` is now `False` and `str(arg)` on a `(str, Enum)` gives `Unit.CELSIUS`. Members a tool returns in its result are sent to the model as their values. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) -* **`VertexAiSessionService.create_session` accepts only session config options**: it forwards only `display_name`, `ttl`, `expire_time`, `labels` and their camelCase aliases, and raises `ValueError` for anything else, such as `http_options`, `session_state`/`sessionState`, `sessionId` or `wait_for_completion`. ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) -* **Firestore sessions store `event_data` as a JSON string**: 2.13.0 cannot read sessions that 2.14.0 has appended to, so rolling back after upgrading breaks those sessions. ([0894c03](https://github.com/google/adk-python/commit/0894c034c499bd195558f31c677c44d31d1555e0)) +* **Enum tool arguments arrive as members**: `FunctionTool` parameters annotated `Enum`, `Optional[Enum]`, or `list[Enum]` now receive enum members instead of the raw strings the model sent (as `FUNCTION_TOOL_ARG_VALIDATION` already did). For a plain `Enum`, `arg == "value"`, string-keyed dict lookups, `match` on strings, `json.dumps`, and string methods no longer work, including inside callable `require_confirmation` checks. For a `(str, Enum)`, `str()` and, on Python 3.11+, f-strings now render `Cls.MEMBER`. Compare against members, use `.value`, or switch to `StrEnum`. Enum members a tool returns in its result are still sent to the model as their values. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) +* **`VertexAiSessionService.create_session` accepts only session config options**: extra keyword arguments are limited to `display_name`, `ttl`, `expire_time`, and `labels` (plus camelCase aliases). Other Sessions API config keys, such as `http_options`, `session_state`, `sessionId`, and `wait_for_completion`, now raise `ValueError` (HTTP 400 when sent as session `options` to `adk api_server`). Use `state=` and `session_id=` for state and IDs. ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) * **`RunSkillScriptTool` no longer takes `command`**: it runs skill scripts from validated paths and arguments, returns `INVALID_ARGUMENTS` when `command` is supplied, and `UNSUPPORTED_SCRIPT_TYPE` for scripts that are not Python or shell. ([ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) -* **Promoted features can no longer be disabled**: `ADK_DISABLE_=1` and `override_feature_enabled(F, False)` no longer turn off the 16 toolset and integration features promoted to stable (2.13.0 raised `RuntimeError` when these were used while disabled). ([799fc94](https://github.com/google/adk-python/commit/799fc9459eb9443a63db11a179d6422b7e1dc1c0)) #### Behavior changes @@ -41,6 +39,8 @@ This release graduates execution environments, A2A, evaluation, and core runtime * Token-threshold compaction counts tool outputs since the last model call, so it fires earlier for an unchanged `token_threshold`. ([a72a8ed](https://github.com/google/adk-python/commit/a72a8ed391c542417ce4c73c3bde751bb1d522cc)) * A nested workflow whose terminal `wait_for_output` node is re-triggered into a new waiting run no longer surfaces that node's earlier output. ([cddc57f](https://github.com/google/adk-python/commit/cddc57f63db9aa8e8048184b647c62f9800063f3)) * New `teams` and `fsspec` extras, and the `e2b` floor is raised to 2.29.5. ([c4376a6](https://github.com/google/adk-python/commit/c4376a65764bfd7abd016b81cde1e5165318b604), [6bf806a](https://github.com/google/adk-python/commit/6bf806a0107be8ce8e9dff92631f19f68f0c8cf6), [75fb788](https://github.com/google/adk-python/commit/75fb78863b96f0381e2117dba28f8442fa45ba68)) +* `FirestoreSessionService` stores event payloads as JSON strings and wraps nested lists in app and user state. Existing sessions keep loading and accept new events, but sessions this version writes to cannot be read by 2.13.0 or earlier after a rollback. ([0894c03](https://github.com/google/adk-python/commit/0894c034c499bd195558f31c677c44d31d1555e0)) +* The 16 toolset and integration features promoted to stable (Bigtable, Computer Use, Daytona and E2B environments, Environment Simulation, GCS, MCP agent server, Pub/Sub, Spanner, and others) are always available: `ADK_DISABLE_`, `override_feature_enabled(, False)`, and `--disable_features` no longer block them, with no error or warning. ([799fc94](https://github.com/google/adk-python/commit/799fc9459eb9443a63db11a179d6422b7e1dc1c0))
All changes From d2fc3891ecee1808a8d52e5843c082734f90f1c4 Mon Sep 17 00:00:00 2001 From: haranrk Date: Fri, 6 Nov 2026 19:16:16 +0000 Subject: [PATCH 09/10] chore: clarify RunSkillScriptTool breaking change --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48ef5a4c37d..27967d0071e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime * **Enum tool arguments arrive as members**: `FunctionTool` parameters annotated `Enum`, `Optional[Enum]`, or `list[Enum]` now receive enum members instead of the raw strings the model sent (as `FUNCTION_TOOL_ARG_VALIDATION` already did). For a plain `Enum`, `arg == "value"`, string-keyed dict lookups, `match` on strings, `json.dumps`, and string methods no longer work, including inside callable `require_confirmation` checks. For a `(str, Enum)`, `str()` and, on Python 3.11+, f-strings now render `Cls.MEMBER`. Compare against members, use `.value`, or switch to `StrEnum`. Enum members a tool returns in its result are still sent to the model as their values. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) * **`VertexAiSessionService.create_session` accepts only session config options**: extra keyword arguments are limited to `display_name`, `ttl`, `expire_time`, and `labels` (plus camelCase aliases). Other Sessions API config keys, such as `http_options`, `session_state`, `sessionId`, and `wait_for_completion`, now raise `ValueError` (HTTP 400 when sent as session `options` to `adk api_server`). Use `state=` and `session_id=` for state and IDs. ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) -* **`RunSkillScriptTool` no longer takes `command`**: it runs skill scripts from validated paths and arguments, returns `INVALID_ARGUMENTS` when `command` is supplied, and `UNSUPPORTED_SCRIPT_TYPE` for scripts that are not Python or shell. ([ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) +* **`RunSkillScriptTool` no longer takes `command` in environment mode**: with a `SkillToolset` environment, the model now passes `args`, `short_options`, and `positional_args` instead of a free-form shell `command`, scripts run from the skill directory instead of the environment working directory, and only `.py`, `.sh`, and `.bash` scripts are supported (others return `UNSUPPORTED_SCRIPT_TYPE`). Calls, eval sets, or prompts that pass `command` now return `INVALID_ARGUMENTS`. This closes a hole that let a prompt-injected model run arbitrary shell commands. ([ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) #### Behavior changes From f4a809067ae711899954cfc4305a6bd65fbae1f1 Mon Sep 17 00:00:00 2001 From: haranrk Date: Fri, 6 Nov 2026 22:29:37 +0000 Subject: [PATCH 10/10] chore: add require_confirmation raw-args fix to 2.14.0 changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27967d0071e..ff2ea3c8446 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime #### Breaking changes -* **Enum tool arguments arrive as members**: `FunctionTool` parameters annotated `Enum`, `Optional[Enum]`, or `list[Enum]` now receive enum members instead of the raw strings the model sent (as `FUNCTION_TOOL_ARG_VALIDATION` already did). For a plain `Enum`, `arg == "value"`, string-keyed dict lookups, `match` on strings, `json.dumps`, and string methods no longer work, including inside callable `require_confirmation` checks. For a `(str, Enum)`, `str()` and, on Python 3.11+, f-strings now render `Cls.MEMBER`. Compare against members, use `.value`, or switch to `StrEnum`. Enum members a tool returns in its result are still sent to the model as their values. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) +* **Enum tool arguments arrive as members**: `FunctionTool` parameters annotated `Enum`, `Optional[Enum]`, or `list[Enum]` now receive enum members instead of the raw strings the model sent (as `FUNCTION_TOOL_ARG_VALIDATION` already did). For a plain `Enum`, `arg == "value"`, string-keyed dict lookups, `match` on strings, `json.dumps`, and string methods no longer work. A callable `require_confirmation` still receives the raw values (unless `FUNCTION_TOOL_ARG_VALIDATION` is on). For a `(str, Enum)`, `str()` and, on Python 3.11+, f-strings now render `Cls.MEMBER`. Compare against members, use `.value`, or switch to `StrEnum`. Enum members a tool returns in its result are still sent to the model as their values. ([82fe029](https://github.com/google/adk-python/commit/82fe029b8490479229dbfc33815468fe17a427ab), [58332a2](https://github.com/google/adk-python/commit/58332a284b73435eb5c54dac73f6740258b7a741)) * **`VertexAiSessionService.create_session` accepts only session config options**: extra keyword arguments are limited to `display_name`, `ttl`, `expire_time`, and `labels` (plus camelCase aliases). Other Sessions API config keys, such as `http_options`, `session_state`, `sessionId`, and `wait_for_completion`, now raise `ValueError` (HTTP 400 when sent as session `options` to `adk api_server`). Use `state=` and `session_id=` for state and IDs. ([968cd86](https://github.com/google/adk-python/commit/968cd869ff79be622eb921c5e314bd19efd889d2)) * **`RunSkillScriptTool` no longer takes `command` in environment mode**: with a `SkillToolset` environment, the model now passes `args`, `short_options`, and `positional_args` instead of a free-form shell `command`, scripts run from the skill directory instead of the environment working directory, and only `.py`, `.sh`, and `.bash` scripts are supported (others return `UNSUPPORTED_SCRIPT_TYPE`). Calls, eval sets, or prompts that pass `command` now return `INVALID_ARGUMENTS`. This closes a hole that let a prompt-injected model run arbitrary shell commands. ([ff61524](https://github.com/google/adk-python/commit/ff61524bb1378bd355d92b5b88955ea142f83be0)) @@ -174,6 +174,7 @@ This release graduates execution environments, A2A, evaluation, and core runtime * match SKILL.md frontmatter delimiters as whole lines ([25105b4](https://github.com/google/adk-python/commit/25105b40ed9f84769ae368edc35e821df2a19e69)), closes [#7725](https://github.com/google/adk-python/issues/7725) * normalize array-tail schema types ([3a5bbd2](https://github.com/google/adk-python/commit/3a5bbd2f593c3785eff9b9855054744df0b64db8)) * only reject Firestore ids fully matching __.*__ ([e533f55](https://github.com/google/adk-python/commit/e533f55581f7f49f79daee2d250e1950678c25a0)), closes [#7855](https://github.com/google/adk-python/issues/7855) +* pass raw argument values to a callable require_confirmation ([504d5d1](https://github.com/google/adk-python/commit/504d5d1643d4961a54b56d142e15022b580b9894)) * pass the caller's temp: state to an AgentTool's wrapped agent ([12c7bed](https://github.com/google/adk-python/commit/12c7bed7661ccf942f0f6d3b62bed22a23ea0a85)), closes [#7595](https://github.com/google/adk-python/issues/7595) * **plugins:** prevent BQAA offload data loss and preserve binary MIME ([14236ff](https://github.com/google/adk-python/commit/14236ffe522d10699d9090f9188cfa7af5a8a66c)), closes [#7868](https://github.com/google/adk-python/issues/7868) * present the mTLS client certificate from RemoteA2aAgent's default client ([d2ae901](https://github.com/google/adk-python/commit/d2ae9016a6a63e073dea129e647553c04cf09864))