TraptureIQ Guides Changelog
The ADK changelog Google doesn't write
Every release of google/adk-python, pulled straight from the repo — plus the handful of versions where something changed that actually breaks a deployment, which nobody tracks because nobody else has hit it.
google/adk-python ships constantly and publishes every release as a bare GitHub entry with no indication of which ones actually change how a deployed agent behaves. Most are safe to skip. A few are not, and the only way to know which is to have been burned by one.
2 releases below carry a TraptureIQ note — a change verified to matter for a real deployment, not a summary of what shipped.
Releases
Highlights
- **Execution cancellation**: Pass an `abort_signal` to `Runner`, `Workflow`, and nodes to stop a run gracefully; `/run_sse` now cancels the run when the client disconnects. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/runners/runner/abort.md) for more details. ([ef5bbcf](https://github.com/google/adk-python/commit/ef5bbcfe51670bd211645a043914c162e7c1cd60), [3d73603](https://github.com/google/adk-python/commit/3d73603deb180a6518982b2b60f036c764f0cf7e))
- **Tool confirmation in workflows**: Tool nodes now pause for user approval via `RequestInput`, the same way an `LlmAgent` does, instead of passing an error downstream. ([ce132b9](https://github.com/google/adk-python/commit/ce132b92d471b8df903524593d863171b000a764))
- **ModelConsultTool**: Let an agent consult another model mid-task, capped by per-turn and per-session budgets. See the [unit guide](https://github.com/google/adk-python/blob/main/docs/guides/tools/model_consult/model_consult_tool/index.md) for more details. ([84cc99a](https://github.com/google/adk-python/commit/84cc99abd53010817a85b51fdcdc5d4f48366769))
- **SQLite memory service**: Keep agent memory in a local SQLite database, selected with a `sqlite://` memory service URI. ([9625b06](https://github.com/google/adk-python/commit/9625b06c9a1be6b9ecd85225657690ae5c0e9d3e))
- **MCP SDK 2.x**: Connect to MCP servers over the modern protocol through a new opt-in path. ([e738c26](https://github.com/google/adk-python/commit/e738c26fe5abcecffe2fbeba31f8d837086aad8a))
- **Dev UI runtime config is served by the server**: The web server now serves `/dev-ui/assets/config/runtime-config.json` per request and no longer writes `runtime-config.json` into the installed package. If you edited or read that file, set the logo with `--logo-text` and `--logo-image-url` and fetch the config from the server instead. ([3722746](https://github.com/google/adk-python/commit/3722746568a33226d54ba51876801c5948479eb5))
⚠ BREAKING CHANGES
- serve the dev UI runtime config from the server instead of a file
Features
- add a sample preloading memory profiles into the instruction ([fdf1b7f](https://github.com/google/adk-python/commit/fdf1b7fbac216b98181cbfa83609f186f3cde2d0))
- add avatar configuration to server commands ([e4c0d94](https://github.com/google/adk-python/commit/e4c0d946f6d602b0ac23804328473b8d9e597b3e)), closes [#5435](https://github.com/google/adk-python/issues/5435)
- add max llm calls to server commands ([14f4154](https://github.com/google/adk-python/commit/14f4154893e15f293cc09a8ea2cd824a17b04ed8)), closes [#5434](https://github.com/google/adk-python/issues/5434)
- add optional abort_signal support to Runner, Workflow, and Nodes ([ef5bbcf](https://github.com/google/adk-python/commit/ef5bbcfe51670bd211645a043914c162e7c1cd60)), closes [#4796](https://github.com/google/adk-python/issues/4796)
- add pagination to list_accessible_data_agents in data_agent toolset ([46d5a2d](https://github.com/google/adk-python/commit/46d5a2d37d13303bd8ede3ee4558b850a4b3409f))
- add sqlite memory service ([9625b06](https://github.com/google/adk-python/commit/9625b06c9a1be6b9ecd85225657690ae5c0e9d3e))
- add the model consult session context handover layer ([b2da4c6](https://github.com/google/adk-python/commit/b2da4c6030dcd4b4f156743201a49f01bd4ec61a))
- **cli:** wire abort_signal to /run_sse on client disconnect ([3d73603](https://github.com/google/adk-python/commit/3d73603deb180a6518982b2b60f036c764f0cf7e))
- default Vertex project from GCP metadata ([8d8bbd2](https://github.com/google/adk-python/commit/8d8bbd286ffa6f1d00753f40dbba8c928aacce19))
- **events:** add internal metadata for ADK events ([8e29f16](https://github.com/google/adk-python/commit/8e29f16645e0607d2942bbdfe2010f7d7bacd7c1))
- honor tool_thread_pool_config for sync tools outside live mode ([c50ade3](https://github.com/google/adk-python/commit/c50ade39c88f391032887bcd1ba5e9299697d8c8))
- let BigQuery tools run where CMEK is required ([4d06641](https://github.com/google/adk-python/commit/4d06641e7dff5f2f2fa77feea24f68885110cf6d)), closes [#3931](https://github.com/google/adk-python/issues/3931)
- **live:** default to a pre-built avatar for VIDEO live sessions ([d5c9b11](https://github.com/google/adk-python/commit/d5c9b11b6440bbc66e0482c3c88cb28324a8544e))
- mark spans whose response came from a callback ([9633ab9](https://github.com/google/adk-python/commit/9633ab9f8227ebeba18b5ceca12e58377ab8ab4a))
- **mcp:** add an opt-in modern-protocol connect path for MCP SDK 2.x ([e738c26](https://github.com/google/adk-python/commit/e738c26fe5abcecffe2fbeba31f8d837086aad8a))
- **plugins:** add optional ToolCallIntegrityPlugin ([b7efc4e](https://github.com/google/adk-python/commit/b7efc4edb4deee133f13c7358b5164e8ac23a67d))
- propagate grounding metadata from MCP _meta ([0960104](https://github.com/google/adk-python/commit/09601045f4daced76b00f92c641fb1899ae3fa53)), closes [#6081](https://github.com/google/adk-python/issues/6081)
- skip __init__.py for config-based adk create ([d594b69](https://github.com/google/adk-python/commit/d594b693053fb29c3b30815270a31cd17990eab2)), closes [#6753](https://github.com/google/adk-python/issues/6753)
- synthesize abort event and function response on cancellation ([da65851](https://github.com/google/adk-python/commit/da65851a9e25005480db8164f8f0fff92ba31922))
- **telemetry:** move skill telemetry span attributes out of experimental ([e0f4c97](https://github.com/google/adk-python/commit/e0f4c979e119ee31f58882d4823cdb3bcd568b1e))
- **tools:** add ModelConsultTool with turn and session budgets ([84cc99a](https://github.com/google/adk-python/commit/84cc99abd53010817a85b51fdcdc5d4f48366769))
- **tools:** invoke advisor models without tools for model_consult ([28c47b5](https://github.com/google/adk-python/commit/28c47b550d29746ce4f4b38a30617e0f6e14c1eb))
- **workflow:** pause tool nodes for tool confirmation via RequestInput ([ce132b9](https://github.com/google/adk-python/commit/ce132b92d471b8df903524593d863171b000a764))
- **workflow:** propagate skip_summarization from node tools to tool response ([5a0421c](https://github.com/google/adk-python/commit/5a0421cbc58ae7b9e00ae4cd41f124863b0cbb70))
- **workflow:** run plugin tool callbacks around ToolNode calls ([cfeece9](https://github.com/google/adk-python/commit/cfeece9efbb93a6ad3efb7baf7e9bf9061c83e69))
Bug Fixes
- accept a client factory written against either httpx major ([438c3eb](https://github.com/google/adk-python/commit/438c3eb65564d8e1f14896be37886a2c4905b14a))
- accept dotted registry ids in GCPSkillRegistry ([cbbdec3](https://github.com/google/adk-python/commit/cbbdec3f79b2ae830cc8d34de83d2cc18e128222)), closes [#7136](https://github.com/google/adk-python/issues/7136)
- **antigravity:** extract real execution output for built-in tool steps ([3fd932d](https://github.com/google/adk-python/commit/3fd932d525789c0ba616ac762897930392033e45))
- **artifacts:** return None for negative versions in InMemoryArtifactService ([6193957](https://github.com/google/adk-python/commit/6193957a53d58b7dc14942c09ac53b71a4cbc21f))
- cancel the in-flight tool call when the caller is cancelled ([f0dd560](https://github.com/google/adk-python/commit/f0dd560a6db286f9aa9c903a19b63278023c6716))
- classify plugin output before persisting events ([044a1ec](https://github.com/google/adk-python/commit/044a1ec3f434cf2e3f7acfdbd52305b60d16f6e5)), closes [#7184](https://github.com/google/adk-python/issues/7184)
- detect a dead MCP session whose transport sits behind a dispatcher ([8632980](https://github.com/google/adk-python/commit/86329806d1eb5c4cc767ab291730ccdf338d5ae5))
- drop stale replies to superseded tool updates ([fdca5e7](https://github.com/google/adk-python/commit/fdca5e7b20db78347a19966354af4219c2bd012a))
- drop unpairable trailing FRs in rearrange ([643df96](https://github.com/google/adk-python/commit/643df966a0fa223454e34a4eee1eddd68931ffa3)), closes [#6751](https://github.com/google/adk-python/issues/6751)
- **eval:** skip content-less events when mapping Vertex multi-turn turns ([fd2ca87](https://github.com/google/adk-python/commit/fd2ca8773ed51ec13a96670fdeb11f333727217a))
- **flows:** detect thought-only and whitespace turns as empty content ([dea8110](https://github.com/google/adk-python/commit/dea81109d15066b89dd3447f7c20523cc06d5e6a))
- follow redirects when downloading skills in GcpSkillRegistry ([fd14aec](https://github.com/google/adk-python/commit/fd14aec26534adb9743e963f39af468f1f0c329f))
- install greenlet with the db extra and name it when missing ([ffc2494](https://github.com/google/adk-python/commit/ffc2494a656d4fdaaec1c930d1124bba339a3cfd))
- isolate and clean up single_turn LlmAgent node_input events ([6f30039](https://github.com/google/adk-python/commit/6f3003907564e93e625477f1856a483937aae3d6)), closes [#7227](https://github.com/google/adk-python/issues/7227)
- keep credential-request events out of the compaction prompt ([b562ef4](https://github.com/google/adk-python/commit/b562ef4de858adc81d62f1438771c77bb06ff8e0))
- keep default credentials out of pickled AgentRegistry toolsets ([345a1a8](https://github.com/google/adk-python/commit/345a1a83307b868aaf966ac02f1fbee9be46836e))
- keep identical streamed function calls that have no model-provided id ([46b22e4](https://github.com/google/adk-python/commit/46b22e4e8ac3cb800dd9d8e8b5c936c22c655a77))
- **live:** only cache audio blobs in the live input realtime cache ([b627a15](https://github.com/google/adk-python/commit/b627a15b6b3862a197815a123be6a1a702d33355))
- load validated MCP toolsets under adk web ([f44d512](https://github.com/google/adk-python/commit/f44d51244a59a6a05210d45d23e1f6e75148a7df)), closes [#6735](https://github.com/google/adk-python/issues/6735)
- look up padded session ids the same way create_session stores them ([eef75de](https://github.com/google/adk-python/commit/eef75de8db16f3aea98e7a99e068046b66822313)), closes [#6941](https://github.com/google/adk-python/issues/6941)
- make conformance runs report replay and recording failures ([5355c7c](https://github.com/google/adk-python/commit/5355c7c60684e38e9ea158e34a41974e525be90f))
- only apply --avatar_config to live sessions requesting video ([4d241bf](https://github.com/google/adk-python/commit/4d241bff1bdf63ddf5ef947a2aa5d145b008c013))
- persist sibling tool results before a tool confirmation request ([67d3e49](https://github.com/google/adk-python/commit/67d3e494b610c6962ca8290dcb66c9f6b8b08735)), closes [#6732](https://github.com/google/adk-python/issues/6732)
- **plugins:** let tools run as workflow nodes under ToolCallIntegrityPlugin ([b057697](https://github.com/google/adk-python/commit/b0576978ec1f341980abdf385cf47f8b22da4178))
- **plugins:** record content_formatter failure class in error_message ([e5a24b6](https://github.com/google/adk-python/commit/e5a24b6f168581a1904049a8896a6939cdb88e30))
- preserve single-turn structured output ([6b96ba1](https://github.com/google/adk-python/commit/6b96ba199b3e2684272fad870d9e0ab45b79ec33)), closes [#6089](https://github.com/google/adk-python/issues/6089)
- prevent improper merging of parallel streaming function calls ([cacf92a](https://github.com/google/adk-python/commit/cacf92a5f4b72bd49f552da584725e79a7e2153f))
- propagate url_prefix to FastAPI root_path ([2daa303](https://github.com/google/adk-python/commit/2daa303fe495a2e8048484bcd8bf748cec377524)), closes [#7070](https://github.com/google/adk-python/issues/7070)
- refresh the access token in the BigQuery MCP sample ([9a33588](https://github.com/google/adk-python/commit/9a33588b445be5f204983b2b2c929821b2c513ef)), closes [#7217](https://github.com/google/adk-python/issues/7217)
- reject RestApiTool path params with "." or ".." segments ([6f3aabe](https://github.com/google/adk-python/commit/6f3aabeef09bccb63db235f6496d4d4af218c3f9)), closes [#7065](https://github.com/google/adk-python/issues/7065)
- render Jinja2 instructions in a sandbox and expose a read-only state mapping ([0e19550](https://github.com/google/adk-python/commit/0e19550c53b8bddaf380b50849189a5201892191))
- replay a parallel tool call that never ran when a sibling answered ([7298e09](https://github.com/google/adk-python/commit/7298e09acb485c4b226ec552c899f661df64fe49)), closes [#7108](https://github.com/google/adk-python/issues/7108)
- report the events the SQLite migration actually migrated ([31e5358](https://github.com/google/adk-python/commit/31e5358c7742021b9bc72663ebeb68366f9edc08)), closes [#7298](https://github.com/google/adk-python/issues/7298)
- resolve Agent Registry MCP bindings for the deployed agent at runtime ([9115d61](https://github.com/google/adk-python/commit/9115d612ea0286f867273042d6f23f04f75540cc))
- resume a remote A2A agent when a human answers its relayed pause ([caf2356](https://github.com/google/adk-python/commit/caf235659a5e75e265882dfc617aeaff00000384)), closes [#6721](https://github.com/google/adk-python/issues/6721)
- run BigQuery tools off the event loop via BigQueryToolset async adapter ([497b65b](https://github.com/google/adk-python/commit/497b65b14b3337a0450e7452c215cf1204d3bb7b)), closes [#7160](https://github.com/google/adk-python/issues/7160)
- **runner:** collect and close toolsets from Workflow graph nodes in Runner.close() ([6fbb22b](https://github.com/google/adk-python/commit/6fbb22b14e80c8cb2733f83611094e52df847a98))
- **runners:** safely skip non-BaseNode instances in _collect_toolset ([018c41c](https://github.com/google/adk-python/commit/018c41c8dddac3fcd2b4ca53feec128498b3b823))
- **sessions:** disable pool reset on return for StaticPool in DatabaseSessionService ([74bb82b](https://github.com/google/adk-python/commit/74bb82bc9989dc8213e15aedd7279a5b1a7549bd))
- **sessions:** let any colon-prefixed key bypass state_schema validation again ([6e1ec09](https://github.com/google/adk-python/commit/6e1ec0931ec7a7d37c402d69cfeae5883897396f))
- stamp Redis sessions with the event timestamp ([def458b](https://github.com/google/adk-python/commit/def458b609c2811d137b0332b2fc7b201dddd5c0)), closes [#7292](https://github.com/google/adk-python/issues/7292)
- stop live session teardown hanging and lazy-load the auth transport ([41bebdc](https://github.com/google/adk-python/commit/41bebdc0ad5bb53fd07827643a01c0a7591a2417))
- stop RemoteA2aAgent failing on a2a-sdk 0.3.4 to 0.3.10 ([5b079ee](https://github.com/google/adk-python/commit/5b079eedbfbbe44441a537741acc3477e6118b8d))
- stop update_time onupdate from overriding explicit writes ([aec7c0a](https://github.com/google/adk-python/commit/aec7c0ad09af620c837c4ba7bbb596219bf3cc07)), closes [#7276](https://github.com/google/adk-python/issues/7276)
- **tools:** apply the load_web_page SSRF checks on the proxy path ([d7a7c3c](https://github.com/google/adk-python/commit/d7a7c3c6881785420fc9a25374629b08c18aad25))
- **tools:** package model_consult advisor prompt as a single user content block ([ecb429c](https://github.com/google/adk-python/commit/ecb429c941d213a1a44f739bb2ec46a23973f307))
- **tools:** stop marking every NodeTool as long-running ([0478224](https://github.com/google/adk-python/commit/0478224ba50d4044325fbccb474aa6aaf46987d5))
- **tools:** surface NodeTool failures to on_tool_error and return dict validation errors ([b4c5272](https://github.com/google/adk-python/commit/b4c5272c53eb5401480ad7472535d1099ef4e9d7))
- treat inbound new_message in Runner.run_async as a user turn ([15ec279](https://github.com/google/adk-python/commit/15ec2791315db8d63a700c1ae2ad87a58b0bcaec))
- **workflow:** keep outputs of sibling nodes that finished in the same tick as a failing node ([2c759e9](https://github.com/google/adk-python/commit/2c759e9e6e0a12e74e2d114a962559e1152d9f26))
- **workflow:** run ToolNode tools with the node context so deltas are emitted ([cffc967](https://github.com/google/adk-python/commit/cffc9677dac4f00c55a38e4331318da2b1595c6c))
Documentation
- add known issues for A2A workflow output schema and serialization ([f7967c3](https://github.com/google/adk-python/commit/f7967c35fecbd2080953d28d0f9f9a8d71674fc2))
- add unit guide for Node and `@node` ([3e59f4d](https://github.com/google/adk-python/commit/3e59f4dd18391cd9d56cc712c64ec030cba9fab7))
- document execution cancellation, node tool direct output, and span provenance ([76af4b0](https://github.com/google/adk-python/commit/76af4b08cbc81e46c933d1558305f7336d876cc0))
- explain local lockfile needed by tox in adk-setup skill ([96319fc](https://github.com/google/adk-python/commit/96319fc85d01c64137610de85250f950055e9747))
- explain why live audio is not flushed on generation_complete ([dcd5d76](https://github.com/google/adk-python/commit/dcd5d76036aa28048cf52c1fb902082290d20c90))
- fix to_a2a import so the task mode sample runs ([e6bdb4d](https://github.com/google/adk-python/commit/e6bdb4dab7a1657a871ef63292f9b76e26a95bd0))
- **runners:** add developer guide for execution cancellation ([4e48bb0](https://github.com/google/adk-python/commit/4e48bb07292ac80a0c897bf1311454750bda8097))
- **tools:** add ModelConsultTool developer guide and sample agent ([89ebdec](https://github.com/google/adk-python/commit/89ebdecf233b9d57fcd27cc4b003a9a62b107097))
Highlights
- **Skills**: Control resource usage and tool persistence dynamically using new ephemeral lifecycles and active skill limits (experimental; enable with `ADK_ENABLE_SKILL_LIFECYCLE=1`). ([43b73e4](https://github.com/google/adk-python/commit/43b73e4fc0920c08693bcec3985c832c7d9870b0))
- **Database Integrations**: Perform high-performance vector and hybrid searches seamlessly within your agent flows with the new MongoDB toolset. ([0961ced](https://github.com/google/adk-python/commit/0961ced3e3dd92056ecf10c7b10aa736eead08f1))
- **Evaluation**: Optimize agent execution costs and latency with new evaluation metrics for tracking duration, token consumption, and model call counts. ([2d428ea](https://github.com/google/adk-python/commit/2d428ead3860fbc131de362b485eb15551373665))
- **Model Support**: Integrate OpenAI reasoning models more effectively with automated request parameter adaptation and precise reasoning token reporting. ([52a2f0f](https://github.com/google/adk-python/commit/52a2f0f09f2910043127042e6ba3dd805d5a1479))
- **BigQuery protected write mode** now runs a non-SELECT statement only when the dry run places it in the session's anonymous dataset, so multi-statement scripts, `CALL`, `EXPORT DATA` and other statements the dry run gives no destination are rejected. ([8b883d0](https://github.com/google/adk-python/commit/8b883d07147f62f8e9979ec8e6b1205437d60f4f))
- **BigQuery protected mode** keeps its BigQuery session in process memory instead of session state, so its temporary tables do not survive a restart or carry over to another replica. ([094012b](https://github.com/google/adk-python/commit/094012b4509fc136083e6be95f273ad1163fbf2c))
- **`OpenAIResponsesLlm`** ignores `thinking_config` (`thinking_level` / `thinking_budget`) with a warning; use `OpenAIGenerateContentConfig.effort` instead. ([b3d1392](https://github.com/google/adk-python/commit/b3d1392a1a9caf382b9483c5fecd4b9140949abb))
- **`AgentEvaluator.evaluate` and `evaluate_eval_set`** raise `ValueError` when no eval cases are evaluated, instead of passing. ([9dbc2ae](https://github.com/google/adk-python/commit/9dbc2aebd7a0ad88183d166c19398bbbab93d507))
- **Instruction templating** leaves `${var}` and backslash-escaped `\{var}` as written instead of filling them from state. ([0caecd2](https://github.com/google/adk-python/commit/0caecd236f95131da625a3bf1de282130f6aa437))
- **Legacy live-audio modules** under `google.adk.flows.llm_flows` (`audio_cache_manager`, `audio_transcriber`, `transcription_manager`) emit a `DeprecationWarning` on import; move to `google.adk.live`. Test suites run with `-W error` will fail on these imports. ([bf2bc56](https://github.com/google/adk-python/commit/bf2bc561ef9c2b9cfaec5bc6ca441b6c1d3b3496))
Features
- add a duration efficiency metric to ADK eval ([49e7264](https://github.com/google/adk-python/commit/49e7264bf6a72a6b42813300a2192e0898ff5b23))
- add an EPHEMERAL skill lifecycle that lasts one turn (experimental, off by default; enable with `ADK_ENABLE_SKILL_LIFECYCLE=1`) ([f938abd](https://github.com/google/adk-python/commit/f938abd8beb213774eda069dd2a315fe998c399e))
- add an opt-in unload_skill tool to SkillToolset (experimental, off by default; enable with `ADK_ENABLE_SKILL_LIFECYCLE=1`) ([ce53a36](https://github.com/google/adk-python/commit/ce53a36c0a221542afbd22dc4f3d6f5e3c8fecd7))
- add dev-only deploy endpoints for Agent Runtime, Cloud Run, and GKE ([1235104](https://github.com/google/adk-python/commit/1235104b6598eb3a6b92abc5d07c52edb62dee5b))
- add informational efficiency metrics (tokens, calls) to ADK eval ([2d428ea](https://github.com/google/adk-python/commit/2d428ead3860fbc131de362b485eb15551373665))
- add MongoDB toolset with vector and hybrid search ([0961ced](https://github.com/google/adk-python/commit/0961ced3e3dd92056ecf10c7b10aa736eead08f1))
- add name-based request processor helpers to BaseLlmFlow ([fd335cd](https://github.com/google/adk-python/commit/fd335cda08be4764c2ef3570d172cf0fcd468ef7))
- add on_error handler to skill listing functions ([9b220e7](https://github.com/google/adk-python/commit/9b220e7546858fecfc1bb94430d8e2af9b50f78c))
- add optional context_builder to RemoteA2aAgent ([322e3bf](https://github.com/google/adk-python/commit/322e3bf0ae4896f44ce4589926c1daa930c781b5)), closes [#3301](https://github.com/google/adk-python/issues/3301)
- add programmatic skill activation APIs to SkillToolset ([a0f3955](https://github.com/google/adk-python/commit/a0f395570461f2eccfecb132c6c751064b1e6bbe))
- add skill lifecycle modes and an active-skill cap to SkillToolset (experimental, off by default; enable with `ADK_ENABLE_SKILL_LIFECYCLE=1`) ([43b73e4](https://github.com/google/adk-python/commit/43b73e4fc0920c08693bcec3985c832c7d9870b0))
- **bigquery:** add default_project_id and default_dataset_id to BigQueryToolConfig ([6f301fc](https://github.com/google/adk-python/commit/6f301fcc6b7a31d61c35d606e8a5968769ffd357))
- **cli:** add gemini-3.8-flash to the `adk create` model options ([6592ee5](https://github.com/google/adk-python/commit/6592ee5b5b11dbc6a8dfa33703cb4a682990af47))
- **cli:** auto-configure session and memory services on Agent Runtime ([fede561](https://github.com/google/adk-python/commit/fede5618df90c1d9ab340334519068916fa3af50))
- **context:** add abort signal primitives to InvocationContext and Context; the Runner and workflows do not act on an abort yet ([d99b23f](https://github.com/google/adk-python/commit/d99b23fbf1dc32383f88708f3b84453dde97897f))
- drop an unloaded skill's instructions from later requests (experimental, off by default; enable with `ADK_ENABLE_SKILL_LIFECYCLE=1`) ([accb906](https://github.com/google/adk-python/commit/accb906eac1534e4cc8ba66a7b2d5a389996522b))
- expose serving tier via `RunConfig.service_tier` ([3e3d1dc](https://github.com/google/adk-python/commit/3e3d1dce4d6015a1d88fedcd8e3cffb789037835))
- expose session options in api_server REST endpoint ([fa4719e](https://github.com/google/adk-python/commit/fa4719e78db01ec6333875dc26fd2bd88c786f6c)), closes [#6342](https://github.com/google/adk-python/issues/6342)
- **integrations:** add a google-adk[openai] extra ([9be86bf](https://github.com/google/adk-python/commit/9be86bf610390202ad233bfc34219862c1885410))
- **integrations:** move the OpenAI models to `google.adk.integrations.openai`; `google.adk.labs.openai` still re-exports them ([95c0591](https://github.com/google/adk-python/commit/95c0591031edfd7068b5c71d6ae61fd9a34f2809))
- let SkillToolset notice that a loaded skill has changed ([f848b7e](https://github.com/google/adk-python/commit/f848b7e3bd4943d245b324fd233483c9857804cf))
- **mcp:** identify ADK in the MCP clientInfo handshake ([5117f28](https://github.com/google/adk-python/commit/5117f286de5587af254d22830962108221e1c98a))
- **mcp:** identify ADK in the User-Agent of MCP HTTP requests ([061dcd6](https://github.com/google/adk-python/commit/061dcd64bcc6abba8586a71e5c868eaad51e6d4b))
- **openai:** adapt request params for reasoning models on both surfaces ([137eba8](https://github.com/google/adk-python/commit/137eba8431e4e66bc469ddf6c6b8f6c38b56cc52))
- **openai:** add api_key/base_url with per-request key resolution to OpenAILlm ([56aabce](https://github.com/google/adk-python/commit/56aabce2323cd132554471b403c11110c7f9daf3))
- **openai:** add OpenAIGenerateContentConfig and per-model reasoning effort ([bb9023d](https://github.com/google/adk-python/commit/bb9023d1fae8bf2d273f47281570a23732a7e128))
- **openai:** honor tool_config mode and all tool declarations in OpenAILlm ([ed758bb](https://github.com/google/adk-python/commit/ed758bbabf7a4ca76f13602e0e1cbb24c793abef))
- **openai:** report reasoning tokens on Chat Completions; add live tests ([52a2f0f](https://github.com/google/adk-python/commit/52a2f0f09f2910043127042e6ba3dd805d5a1479))
- **openai:** surface streaming usage and finish reason in OpenAILlm ([ed030cb](https://github.com/google/adk-python/commit/ed030cbf431ef6c12a2b3a75dcc7aff08378cb82))
- **openai:** use build_reasoning_effort for reasoning in OpenAIResponsesLlm ([b3d1392](https://github.com/google/adk-python/commit/b3d1392a1a9caf382b9483c5fecd4b9140949abb))
- send the deferred service tier on interactions API requests ([cc912d5](https://github.com/google/adk-python/commit/cc912d587464051f3a3f4197d58a14a5c42ddc83))
- **skills:** add SkillDiscoveryMode to control how the skill catalog is disclosed ([3d3c1d9](https://github.com/google/adk-python/commit/3d3c1d90c89128d721569f54115be2b1d0ac5a74)), closes [#7092](https://github.com/google/adk-python/issues/7092)
- stamp the Agent Registry URN as gen_ai.main_agent.id ([5c3f64e](https://github.com/google/adk-python/commit/5c3f64e08c21912194acf71d0992e59f897c3229))
- stream partial function-call arguments across model adapters ([f449780](https://github.com/google/adk-python/commit/f44978013378ecba9e3cfc0c955b7890ceb7951b))
- **telemetry:** allow per-feature enabling of experimental telemetry ([0add163](https://github.com/google/adk-python/commit/0add163161099f435ce32bf3ba35d4502c80efd7))
- **tools:** add `behavior` field to control Live non-blocking function calls ([6189b2e](https://github.com/google/adk-python/commit/6189b2e03ab7979950bca90755b0d628822e97d7))
- when using interactions api with deferred tier, wait on an interaction operation ([b011fb2](https://github.com/google/adk-python/commit/b011fb21bd50ac006273d71dba8c32f1123a5519))
- **workflow:** filter rewound invocations during workflow rehydration ([ab4dba6](https://github.com/google/adk-python/commit/ab4dba6ef14c1deed57f9759a4cb6e089a94de67))
- **workflow:** let DEFAULT_ROUTE fan out to several nodes ([ffc191b](https://github.com/google/adk-python/commit/ffc191bbe57145da82c0776e56c5d5c410c442ec))
- **workflow:** unwrap NodeTool in build_node and bind state in _ToolNode ([5c59a73](https://github.com/google/adk-python/commit/5c59a730974546c7f56e72c2e06a91ec114cda92))
Bug Fixes
- accept a client factory written against either httpx major ([b726964](https://github.com/google/adk-python/commit/b7269649074507e9c8640135472cc1c9e5c09f57))
- **agents:** accept the default hint in request_confirmation ([768969d](https://github.com/google/adk-python/commit/768969db14c0764dd72b04107d4fa25811772791))
- **agents:** allow descriptionless BaseNode in LlmAgent tools ([6373f23](https://github.com/google/adk-python/commit/6373f232c79136b80fe196bde1b351ddde13f9f4))
- **agents:** trigger after_agent_callback on cancellation ([37aa730](https://github.com/google/adk-python/commit/37aa7308bbcfd41a2eebee73f51e6f40a5448e78))
- allow forwarding session ID as context_id for remote A2A agents ([e10a1be](https://github.com/google/adk-python/commit/e10a1becd3ab44654a57e45b3b288b810c5b5602))
- **auth:** keep the OAuth2 client secret out of session state ([9b9aac0](https://github.com/google/adk-python/commit/9b9aac038fcc8a2358331bc93d58dca4b85d31d2))
- **auth:** report an auth scheme that carries no OAuth2 flows ([b22cfc4](https://github.com/google/adk-python/commit/b22cfc43c2d2a8dfd5dc5666aa5afc5f9fde847a))
- **bigquery:** reject writes protected mode cannot place in the session dataset ([8b883d0](https://github.com/google/adk-python/commit/8b883d07147f62f8e9979ec8e6b1205437d60f4f))
- **bigtable:** release the per-call data client in execute_sql ([f39cbf5](https://github.com/google/adk-python/commit/f39cbf560d08f727de0693e4bb8860dcb96fecd2))
- bound artifact reference resolution depth in load_artifact ([87b9f25](https://github.com/google/adk-python/commit/87b9f25b372733d8899a47817c7f3b72cbad5959))
- build the Gemini API clients once per event loop ([8164341](https://github.com/google/adk-python/commit/8164341ec5dc7d21d405e553c51cb0bd41cc7afa))
- **cli:** omit http_options from the generated recordings file ([09326ca](https://github.com/google/adk-python/commit/09326ca18a8d545f48199544078a5b190839697c))
- **cli:** reject multi-line env values when generating the Dockerfile ([8192d1b](https://github.com/google/adk-python/commit/8192d1bf75eadcf4e53c15abb948f2e3fcf7705c))
- **cli:** use exec-form RUN/CMD in generated Dockerfiles and validate app names ([9327437](https://github.com/google/adk-python/commit/93274370ffc60feb500f44665bb52a8c54e515b7))
- **cli:** validate the test name on every dev server test endpoint ([4c2bafb](https://github.com/google/adk-python/commit/4c2bafb7ed197046e44a2fa3a57f636c4f79054b))
- coerce integral floats inside list[int] tool parameters ([b1cba29](https://github.com/google/adk-python/commit/b1cba290b2505e5e1c324fc34e4cf53605ccefa7))
- **compaction:** stop backwards prompt token scan at compaction boundary ([4d9abb5](https://github.com/google/adk-python/commit/4d9abb5840a2f4d4135850cc4f9ee0c1ccf9fd24))
- complete an A2A task whose run ends without a status message ([9750c4c](https://github.com/google/adk-python/commit/9750c4c4a8658b6d92ccecfe7feecf9967866f8c))
- confine agent builder file globs to the configured directory ([896a29a](https://github.com/google/adk-python/commit/896a29a94abfae5387ca4e6f92eb07747f190d5e))
- **confirmation:** skip confirmation requests authored by other agents before resolving history ([e19ce05](https://github.com/google/adk-python/commit/e19ce0579b849a96df41fb27079d26548978970e))
- **core:** stop executing code found in the model's private reasoning ([a2a2f66](https://github.com/google/adk-python/commit/a2a2f6656aca4d7fe3606162e807462afa21e2ff))
- correct get_bigtable_data_client return annotation ([c673c59](https://github.com/google/adk-python/commit/c673c59c979822128ecdad8c63c378ffc1a9600e))
- do not match dollar-brace or escaped patterns in instructions ([0caecd2](https://github.com/google/adk-python/commit/0caecd236f95131da625a3bf1de282130f6aa437)), closes [#5706](https://github.com/google/adk-python/issues/5706)
- **eval:** ignore UI-only InvocationEvent fields on eval case save ([a4a50a4](https://github.com/google/adk-python/commit/a4a50a4d5bfe54e4ebe5173464b74bb4c2c0c055))
- **eval:** pin the specific version for safety_v1 ([997f408](https://github.com/google/adk-python/commit/997f40899042e0f00be83929bcf094fddded9355))
- exclude the local .adk folder from deployed agent images ([c409bd3](https://github.com/google/adk-python/commit/c409bd334b821c779fecb06cbdfcb4fa97a3b9f4))
- extract URL fragment key-value pairs as query params ([0cfe43b](https://github.com/google/adk-python/commit/0cfe43b657ead31fe463866f2a348b7d7ce38119))
- fence server-supplied tool description before reaching the model ([a519b6f](https://github.com/google/adk-python/commit/a519b6f6235146d5bc18f19582f8d4360b9adb64))
- **flows:** hold a tool call that requires confirmation in the framework ([1d0daeb](https://github.com/google/adk-python/commit/1d0daebaf7fbc286d3fad9b03ecf75efa9039d8d))
- **flows:** keep the streaming flags when after_model_callback replaces a response ([39e4538](https://github.com/google/adk-python/commit/39e4538578cc1c07be7bd201c3cda0e34040a271)), closes [#7035](https://github.com/google/adk-python/issues/7035)
- **flows:** only hold a tool call when its confirmation hook answers True ([659e28f](https://github.com/google/adk-python/commit/659e28f1a2cd9f9d9ffe2b662527623a2aa1bbc7))
- **flows:** prune orphaned function calls on interrupted turns ([54274cd](https://github.com/google/adk-python/commit/54274cdeba42a46e4346f48589c84fe2ebcc0da2))
- **flows:** release a tool thread pool when its event loop closes ([7ae1c9b](https://github.com/google/adk-python/commit/7ae1c9b026c84bf8a65921003f71b0f30c8e3166))
- forward tool output schema on the LiteLLM path ([fca7b88](https://github.com/google/adk-python/commit/fca7b887fba94e3b328025cd62e6a77830e0edc5)), closes [#6784](https://github.com/google/adk-python/issues/6784)
- give each LocalEvalService its own default UserSimulatorProvider ([55d47ae](https://github.com/google/adk-python/commit/55d47aea2ef7a495cb6de2358cd0df9f30c83553))
- hide run_skill_script when no skill has a script ([d8d9715](https://github.com/google/adk-python/commit/d8d97159c9fa02a3b3bbce9326674964b8b61ed0)), closes [#6281](https://github.com/google/adk-python/issues/6281)
- honor capability for schema and tools ([e37af14](https://github.com/google/adk-python/commit/e37af1435a7d4424c3d29c6cfd543c46e57a106e)), closes [#6954](https://github.com/google/adk-python/issues/6954)
- instruct models to format code for non-builtin sandbox executors ([8aafa4e](https://github.com/google/adk-python/commit/8aafa4eee65f50337b4f1234b3c7dd7bf51c2242))
- **integrations:** hold sandbox and BigQuery session bindings in process ([094012b](https://github.com/google/adk-python/commit/094012b4509fc136083e6be95f273ad1163fbf2c))
- join streamed reasoning into one thought part per block ([fed0e88](https://github.com/google/adk-python/commit/fed0e88b79eba197630bd0febec05de3bb557f13)), closes [#6895](https://github.com/google/adk-python/issues/6895)
- keep the latest write when parallel tool calls update a state list ([d42a3be](https://github.com/google/adk-python/commit/d42a3bebb847c8b9df3ee02cc011fa7260c8bc89))
- **litellm:** report malformed tool-call arguments instead of raising ([75d84b1](https://github.com/google/adk-python/commit/75d84b11c660e15e5065c43285ca00f73f25a1f7)), closes [#5896](https://github.com/google/adk-python/issues/5896) [#6716](https://github.com/google/adk-python/issues/6716)
- **live:** enqueue background function response events ([7807005](https://github.com/google/adk-python/commit/7807005e8df76644a378bc4e9fa115ecd47421b1))
- **live:** screen live content that does not complete the turn ([58b4fab](https://github.com/google/adk-python/commit/58b4fab2e7821102d203ddf890b10f0c19540fce))
- make shell JSON envelope parsing robust to other stdout garbage ([b07ec93](https://github.com/google/adk-python/commit/b07ec93f8be250d9c28a1633106c76608e18c08a))
- mark a workflow's span failed when one of its nodes failed ([dfc4b58](https://github.com/google/adk-python/commit/dfc4b5803f49033227b49e7f53d291299d304148))
- match a Latin word embedded in unspaced-script text ([13ecc31](https://github.com/google/adk-python/commit/13ecc31aca16ff8d862abcba9ba7974f5fb796fc))
- match tool response by name instead of assuming first part ([f199858](https://github.com/google/adk-python/commit/f199858e0f62c9e2e2aba81410f39c07eccf8619)), closes [#6603](https://github.com/google/adk-python/issues/6603)
- **mcp:** only attach application default credentials over https ([5a018c9](https://github.com/google/adk-python/commit/5a018c9af6a5ec47ef67e95481cd800b36ac1215))
- **mcp:** rebuild a session the server reports it no longer holds ([86ea33d](https://github.com/google/adk-python/commit/86ea33d7e9f0ca0623351ffa7da76d16913b67fa)), closes [#7060](https://github.com/google/adk-python/issues/7060)
- **mcp:** report an api key auth scheme that declares no key location ([d7370e1](https://github.com/google/adk-python/commit/d7370e11c47e156435eeb76ba737800489a94a5b))
- **mcp:** widen MCP bound to admit MCP 2.x ([d64dcfa](https://github.com/google/adk-python/commit/d64dcfaaca7601fe705605f6a8bde7ddb110d701))
- measure the compaction token threshold against the agent's own prompt ([8ccea93](https://github.com/google/adk-python/commit/8ccea93fdaec4faf197dff986b7a12b686dfceca))
- **models:** keep the keys beside "result" in a Claude tool result ([ffb5363](https://github.com/google/adk-python/commit/ffb5363b7e69d3c232e746fdbca20da4db61da23)), closes [#7073](https://github.com/google/adk-python/issues/7073)
- **models:** say how to reach a third-party model when a bare name misses ([87ccdc7](https://github.com/google/adk-python/commit/87ccdc796c8a231ae305fa59556263e8e613d0b6))
- only load artifacts listed for the current session ([cb7c469](https://github.com/google/adk-python/commit/cb7c4691ad23e02670052c54d5c63487f21b4194))
- **openai:** robustly parse Chat Completions responses (finish_reason, usage, choices) ([f28d28a](https://github.com/google/adk-python/commit/f28d28a37cce6e122f436d02edb3b5ee3301c830))
- **openai:** serialize non-string system_instruction ([783463d](https://github.com/google/adk-python/commit/783463dab1ff62b4a804f2eab3ae4c5e3ca9b140))
- **openapi:** handle HTTP 401 in RestApiTool and recover stale OAuth2 credentials ([9511479](https://github.com/google/adk-python/commit/9511479d6b165d012f4d3a539d6e25e061664b69))
- persist sandbox session state and add warning for static sandbox in AgentEngineSandboxCodeExecutor ([73ab76d](https://github.com/google/adk-python/commit/73ab76da459fcf34d6252013b6bd7f5be18a60ce))
- **plugins:** verify BigQuery table readiness once, not on every restart ([a9cf81f](https://github.com/google/adk-python/commit/a9cf81fe2165a7e5727a6867f3546d8217baeb2a)), closes [#7017](https://github.com/google/adk-python/issues/7017)
- preserve Annotated metadata in tool declarations and arg conversion ([2ecb3fb](https://github.com/google/adk-python/commit/2ecb3fb02467bcdcdf1e61c5f64d114261ac5f2c))
- preserve empty text and bytes in memory ([df55309](https://github.com/google/adk-python/commit/df55309744107fc13126179e14298438a541e3f7))
- preserve eval case order when updating ([a6c6623](https://github.com/google/adk-python/commit/a6c6623455e6064f1934bdff260abdc3f6eb5025)), closes [#7220](https://github.com/google/adk-python/issues/7220)
- preserve file artifact creation timestamps ([e93ff5b](https://github.com/google/adk-python/commit/e93ff5b01067ef1401796e6982de3b3740d18170))
- prevent cubic backtracking in _strip_json_code_fence ([3a06a86](https://github.com/google/adk-python/commit/3a06a8621d04fd87aad9f6b078c999c78a96fb66))
- prevent filenames from colliding with version storage ([26e8af2](https://github.com/google/adk-python/commit/26e8af2c0c1fc21c6b4bf08b34d651ece3ce9103))
- raise a clear error when conformance replay recordings are missing ([7a1b49f](https://github.com/google/adk-python/commit/7a1b49fd20ab2dd5c352ce00202dd77c028422eb)), closes [#7128](https://github.com/google/adk-python/issues/7128)
- raise clear ImportError when VertexAiSearchTool bypass needs gcp ([4e73b7d](https://github.com/google/adk-python/commit/4e73b7db48674cbcd9281e13fdb4ca7935cf058b))
- raise InvocationNotFoundError instead of bare ValueError on rewind ([fc16a78](https://github.com/google/adk-python/commit/fc16a78a2bba393f35c9b44025cf45548cdda3f9))
- raise when evaluate or evaluate_eval_set evaluates zero cases ([9dbc2ae](https://github.com/google/adk-python/commit/9dbc2aebd7a0ad88183d166c19398bbbab93d507)), closes [#6951](https://github.com/google/adk-python/issues/6951)
- redact signed URIs and HTTP options from errors and logs ([f425287](https://github.com/google/adk-python/commit/f42528732e73b5f13dc633e1558f0313099b0db9))
- reject num_samples=0 in JudgeModelOptions at construction time ([85e0868](https://github.com/google/adk-python/commit/85e08686f8310e00b2b031a042db86405920b4b2))
- reject parallelism < 1 in LocalEvalService instead of hanging ([9beb524](https://github.com/google/adk-python/commit/9beb52416d6b0c377e58e7e84bdfcd7e88eea415))
- reject reserved path segments with slashes in validate_path_segment ([5e29872](https://github.com/google/adk-python/commit/5e29872b1c29850929e126191af1bd2d8a7f94d1)), closes [#6973](https://github.com/google/adk-python/issues/6973)
- reject the reserved segment 'user' as a session_id ([b8de426](https://github.com/google/adk-python/commit/b8de4266d90fb9a6500079d062561cfdd4cf21d6)), closes [#7063](https://github.com/google/adk-python/issues/7063)
- report an A2A stream that ends before the remote task finishes ([e29ee23](https://github.com/google/adk-python/commit/e29ee231e02ec9e82dc91ee008c8a2798d021f3d)), closes [#6585](https://github.com/google/adk-python/issues/6585)
- report the event fields a session backend cannot store ([3e1ae9f](https://github.com/google/adk-python/commit/3e1ae9faed934532b9f5015578d1b9731817ce60))
- require agent authorship before resume-dispatching a function call ([2c61b84](https://github.com/google/adk-python/commit/2c61b8444a600c8d42ffaad36bdc31dfc31d13ed))
- resolve agent transfers from the caller's declared targets ([1538efe](https://github.com/google/adk-python/commit/1538efe880e88ea264f0b5a9c0f7b799bfd9d131))
- resolve deepcopy recursion in VertexAiCodeExecutor ([b3fe92b](https://github.com/google/adk-python/commit/b3fe92b38aa281efd083068ec5fc042f1011f1a2)), closes [#1762](https://github.com/google/adk-python/issues/1762)
- restore oldest-first Redis session lists ([6863842](https://github.com/google/adk-python/commit/686384246751dfa4703657f4730f02194fc028a9))
- run on_event callbacks for before_run early exits ([63e918a](https://github.com/google/adk-python/commit/63e918a31304802b3d466c6841f0aef67241c45a)), closes [#7007](https://github.com/google/adk-python/issues/7007)
- **runners:** ensure after_run plugin callback executes on early generator exit ([ba89707](https://github.com/google/adk-python/commit/ba89707af49279b14e36315b4565c70149846f9e))
- **runners:** keep the caller's OpenTelemetry trace in sync Runner.run ([1760b06](https://github.com/google/adk-python/commit/1760b06a903de4bb93cedadd15209a7911e43b2a))
- **sessions:** avoid redundant temp state processing in append_event and exclude temp keys from rewind delta ([52b247e](https://github.com/google/adk-python/commit/52b247eccabb8b2f16bbc795fe8a35670aa2f371))
- **sessions:** avoid runtime index drop and guard concurrent index creation ([cd6dee0](https://github.com/google/adk-python/commit/cd6dee0503f5d5495125e5b023e64230f8da4b7b))
- **sessions:** disable pool reset on return for StaticPool in DatabaseSessionService ([8ff50af](https://github.com/google/adk-python/commit/8ff50af7f0135b758b84e1c6c4405443f3464f5a))
- **sessions:** report the redacted database URL when migration cannot connect ([1579927](https://github.com/google/adk-python/commit/1579927e5eb95593d5b0a56f1e272fec1f9dc892))
- **sessions:** stop get_user_state aliasing stored user state ([dd96b81](https://github.com/google/adk-python/commit/dd96b811ea1abd2febfac781ad4f4b43efd8e36f))
- skip unreplayable function responses ([7dcfade](https://github.com/google/adk-python/commit/7dcfadedafc280c1c5e07ddf0a7b3fe30b00c107))
- stop a re-emitted output echo from reordering the replay sequence ([4b819ab](https://github.com/google/adk-python/commit/4b819ab7f28c639cff79991a3ea095a16d715e81)), closes [#7027](https://github.com/google/adk-python/issues/7027)
- stop Agent import loading authlib ([ac1d51b](https://github.com/google/adk-python/commit/ac1d51b456c8f5666c480b472c7abc25794306c7))
- stop background tools before the transfer delay ([c79f60f](https://github.com/google/adk-python/commit/c79f60f8acf572e9c45a611bc3726b27420d220b)), closes [#7006](https://github.com/google/adk-python/issues/7006)
- stop internal Agent Config subclassing from warning on plain imports ([3699fad](https://github.com/google/adk-python/commit/3699fad41bfecdd3ef8c43116ed7de89c339692b)), closes [#6968](https://github.com/google/adk-python/issues/6968)
- stop probing for mTLS credentials on every MCP session ([dfc96d0](https://github.com/google/adk-python/commit/dfc96d0aa9bca3af3bd788eeebc0485b4f7d8fac))
- stop retaining spans on servers with no debug trace endpoint ([7560061](https://github.com/google/adk-python/commit/756006175ade27be2de7530c415db22fa9f5f82f)), closes [#6915](https://github.com/google/adk-python/issues/6915)
- stop returned sessions aliasing scoped state ([557643b](https://github.com/google/adk-python/commit/557643bb32bd53696b1697d0bc9508ecbe3a27c6))
- stop the multimodal tool results plugin sending media twice ([a4d97b7](https://github.com/google/adk-python/commit/a4d97b7c3cf476202ba4adf65263e714fcbb1257))
- StreamingResponseAggregator drops/duplicates function calls in streaming mode ([3cf4ce2](https://github.com/google/adk-python/commit/3cf4ce2b8d6d1523903e32f772f9112e09ac0c74)), closes [#6566](https://github.com/google/adk-python/issues/6566)
- support openapi basic auth ([f2fe475](https://github.com/google/adk-python/commit/f2fe4759f1648439663a1f3b06957fd362c12a7f)), closes [#5492](https://github.com/google/adk-python/issues/5492)
- **telemetry:** make `google.adk.telemetry.tracing` importable on OpenTelemetry 1.39; `google.adk.telemetry.google_cloud` still needs a newer OpenTelemetry ([8f1323a](https://github.com/google/adk-python/commit/8f1323ae6daf5cc0a7e12f856fd56e5fa8c9c81b))
- **telemetry:** record only the function responses on a merged tool span ([42358b1](https://github.com/google/adk-python/commit/42358b156bd4862c1f86261ed76bf3ca7462fd2b))
- **tools:** clarify google_search_agent instruction to use built-in grounding ([56d3cae](https://github.com/google/adk-python/commit/56d3caece5229d912faa1dbed7770f695a467dec))
- **tools:** propagate outer CancelledError in stop_streaming ([b8836bd](https://github.com/google/adk-python/commit/b8836bdb22d75438640ec11edffec2b66bb9a30b))
- **tools:** stop ExampleTool crashing a live run that opens with no message ([1414fac](https://github.com/google/adk-python/commit/1414fac5474b685e3a1b297c71cf7468ed322867))
- trace tool calls under the agent, not under the model call ([83d966c](https://github.com/google/adk-python/commit/83d966cfe8b31a12629a10fca23a6c462083cfe6))
- use full query text and own logger in PreloadMemoryTool ([82687cf](https://github.com/google/adk-python/commit/82687cf819f64531376da9062dfa3cb2e5beff9e)), closes [#6884](https://github.com/google/adk-python/issues/6884)
- validate and coerce function tool argument types (opt-in; enable with `ADK_ENABLE_FUNCTION_TOOL_ARG_VALIDATION=1`) ([24b37e1](https://github.com/google/adk-python/commit/24b37e1716582bd3e6b0d27d142f70707d960bb4)), closes [#4612](https://github.com/google/adk-python/issues/4612)
- validate the detect_anomalies target data subquery ([60d0a9b](https://github.com/google/adk-python/commit/60d0a9bfb48e0b14691e40111a3bd79b07897a2c))
- **workflow:** allow resolved interrupts to resume without rerun_on_resume ([307d041](https://github.com/google/adk-python/commit/307d0413b4ab9a0458e3a9c5d2177af466a1eb74))
- **workflow:** do not leak descendant isolation_scope to parent in _reconstruct_node_states ([2fb34bc](https://github.com/google/adk-python/commit/2fb34bc69be71c1ec121e37bf5e87d0f64b4e96d))
- **workflow:** isolate peer task-mode agents in dynamic run_node calls ([ddbb59e](https://github.com/google/adk-python/commit/ddbb59ebf5306b5b09de01f35de20aa42af43078))
- **workflow:** resume interrupted agent transfers in static workflows ([97aefd8](https://github.com/google/adk-python/commit/97aefd87d315242d5060ad30fc6d33ca7ea77ee6))
- **workflow:** unwrap Content inputs for parallel workers after START ([e80677d](https://github.com/google/adk-python/commit/e80677dda26fd21450f6a23d46bef49a4003d1fb))
Performance Improvements
- **sessions:** add id DESC to events composite index to eliminate filesort ([a00a2a9](https://github.com/google/adk-python/commit/a00a2a9771e3e48831457ce2b5038aa8fef17706))
- **sessions:** cache TypeAdapter in State and support key iteration ([220acfd](https://github.com/google/adk-python/commit/220acfdec67477c69941001be38b4d57444e35f3))
- trace a streamed model call once instead of once per chunk ([733162e](https://github.com/google/adk-python/commit/733162e8f848c79ca6c7981240ac294e1da914fe))
- **workflow:** avoid redundant event scans in _apply_rewinds and NodeRunner ([f5ef8df](https://github.com/google/adk-python/commit/f5ef8dfd52d44097acfd33aac3af38ec92766117))
Documentation
- add unit guides for the third-party and cloud integrations ([3d70669](https://github.com/google/adk-python/commit/3d70669b4218ba10d6546ffff00f00008f0f4878))
- **agents:** add BaseAgent unit guide ([7d42b78](https://github.com/google/adk-python/commit/7d42b784f93653f09c1bfeea18d394ac27b6b8ec))
- **agents:** add Context unit guide ([c03683a](https://github.com/google/adk-python/commit/c03683a83853f03cb4dca830bc4a544787ec0d1a))
- **agents:** add InvocationContext unit guide ([5f3b6f0](https://github.com/google/adk-python/commit/5f3b6f0624cf43211eac30adecee194ce11847fe))
- **agents:** add LlmAgent unit guide ([75bf1dc](https://github.com/google/adk-python/commit/75bf1dc8a04e102e7cd84c4db06cc7f7308869aa))
- **apps:** describe the sliding-window compaction that actually runs ([9cb4eed](https://github.com/google/adk-python/commit/9cb4eedc95eab37ea41323688ae86a9361e1e979))
- list the twenty guides missing from the guides index ([68204f5](https://github.com/google/adk-python/commit/68204f58ec316acecc1e1e03846236e8a51f5e98))
- make the single-turn node example runnable ([06d4895](https://github.com/google/adk-python/commit/06d4895ba5a051b606127010ca3961832734faf5))
- **models:** add developer unit guide for ServiceTier ([0636bf8](https://github.com/google/adk-python/commit/0636bf8b3966536a3249903bf97e4a8995930a2a))
- **readme:** point the eval quickstart at a sample that exists ([c3f4e63](https://github.com/google/adk-python/commit/c3f4e63f1e0819631c3ff23eceb3102d3b734e7f))
- remove the 1.x breaking-changes callout from the README ([d69f995](https://github.com/google/adk-python/commit/d69f995c2e7ba7676bce3036c58d6b9cfbd60de2))
- rewrite the unit guides for the third-party integrations ([1addd76](https://github.com/google/adk-python/commit/1addd76c594f2eb05b9e5ba1c1860d8b08d08ed9))
- **samples:** add a Grok-4.6-on-Vertex sample using the labs OpenAI model ([40a0a8d](https://github.com/google/adk-python/commit/40a0a8d1368b4c17b1bbf48f76228983b36d0ecf))
- **samples:** add a hello-world OpenAI sample using the labs OpenAI model ([eb1a002](https://github.com/google/adk-python/commit/eb1a00245cd1fff0af34794e349fc65e40d2847b))
- **sessions:** document runtime DDL and concurrent index guidelines ([0002760](https://github.com/google/adk-python/commit/0002760ffd57b979cd0725f199bd1742d82ba6a3))
- **telemetry:** name the real do_not_elide parameter ([c7ae45a](https://github.com/google/adk-python/commit/c7ae45ad1aea4598549aa222021635f698921ea0))
- **workflow:** index BaseNode unit guide in documentation ([692b40a](https://github.com/google/adk-python/commit/692b40aed6fe0f88c7ffeedbc115f540605ae13e))
Highlights
- **Telemetry**: OpenTelemetry event names are now preserved on platforms outside of Agent Engine, ensuring more accurate and consistent tracking. ([9110770](https://github.com/google/adk-python/commit/9110770dc487283b95844ad843db9eec9e56e92d))
Bug Fixes
- **telemetry:** only drop the OTel event name on Agent Engine ([9110770](https://github.com/google/adk-python/commit/9110770dc487283b95844ad843db9eec9e56e92d))
Highlights
- **Claude Integration**: Access the step-by-step reasoning process of Claude models by ensuring visible thoughts are requested during adaptive thinking tasks. ([ba0d542](https://github.com/google/adk-python/commit/ba0d542181df87b6e1da9709fa0410082484443a))
Bug Fixes
- request visible thoughts for Claude adaptive thinking ([ba0d542](https://github.com/google/adk-python/commit/ba0d542181df87b6e1da9709fa0410082484443a))
Highlights
- **Models**: Safeguard agent uptime by automatically failing over to backup models when the primary model encounters errors. ([c300b8d](https://github.com/google/adk-python/commit/c300b8ded62b8bc4168cdede4c85bec66d1aa8ee))
- **Integrations**: Build rich voice and telephony agents using the newly added LiveKit runner. ([f277d91](https://github.com/google/adk-python/commit/f277d9117781fb4e2d8cd2608a1d484c29884e60))
- **Workflows**: Simplify graph workflow management by authoring and loading ADK 2.0 graphs directly from declarative YAML configurations. ([2a9461b](https://github.com/google/adk-python/commit/2a9461b1da1c3f7bf732cb37ac43a865f907c6a4))
- **MCP**: Work with MCP SDK 2.x servers as well as 1.x. Installs continue to resolve 1.x by default; install 2.x deliberately to opt in. ([856acf2](https://github.com/google/adk-python/commit/856acf21e3155d2145f9af0709434dd46843539c))
- **Workflow node resumption**: A node that failed now runs again when the workflow resumes, where before it replayed as though it had completed. Make node bodies idempotent: a node that performs an external side effect and then fails will perform that side effect again on every resume.
- **GCS tool local paths**: The GCS tools now read and write local files only inside the directory named by `local_file_root`, and refuse local file access entirely when that setting is absent. Paths may be absolute or relative, and are judged by where they resolve.
- **In-memory sessions only**: `InMemorySessionService` now raises `SessionNotFoundError` when an event is appended to a session it does not hold, instead of accepting the event and discarding it. The database-backed services already behaved this way, so this affects in-memory sessions alone.
⚠ BREAKING CHANGES
- retry a nested workflow when a node inside it fails
- confine GCS tool local file paths to a configured root
- rerun a failed node on resume instead of replaying it as complete
- raise SessionNotFoundError when appending to an unknown session
- **mcp:** under MCP SDK 2.x, fields a server sends that the SDK does not declare no longer reach the caller. 2.x closed its models, so an unknown key on a `CallToolResult`, or on a tool declaration read via `raw_mcp_tool`, is discarded during validation before ADK sees it. `_meta` is unaffected: it is a declared field and still arrives. Nothing in ADK can restore the others; a server that relies on vendor extensions should move them under `_meta`. On 1.x they still arrive as before.
Features
- add a2a_state_forwarding sample ([1b28de4](https://github.com/google/adk-python/commit/1b28de4891d35bc9e9d6fa91f896796577cdf6b6))
- add FallbackModel for automatic failover between models ([c300b8d](https://github.com/google/adk-python/commit/c300b8ded62b8bc4168cdede4c85bec66d1aa8ee))
- add get_authenticated_url and get_signed_url to GcsArtifactService ([10ac52b](https://github.com/google/adk-python/commit/10ac52b5f05c5a3e7f9c6b6bbbc867cc962c657b))
- add ignore_args option to tool trajectory evaluation ([e2a213f](https://github.com/google/adk-python/commit/e2a213f5e4c56d3aa4b5129d5c9db644b0543ceb))
- add transfer_reason to transfer_to_agent to prevent loops ([22ab4d8](https://github.com/google/adk-python/commit/22ab4d82ca026adc87ffbf47a7ea2ed8e99676d1))
- agent evaluations print detailed results when all tests pass ([e1ae543](https://github.com/google/adk-python/commit/e1ae543766212106bcee62b595fd10f854445291)), closes [#3891](https://github.com/google/adk-python/issues/3891)
- generalize docker build and run for multicloud environments ([0673f05](https://github.com/google/adk-python/commit/0673f0548f30c5fd42280553123582c4e4ef1e95))
- **integrations:** add LiveKit runner for voice and telephony ([f277d91](https://github.com/google/adk-python/commit/f277d9117781fb4e2d8cd2608a1d484c29884e60))
- load ADK 2.0 graph workflows from YAML configuration ([2a9461b](https://github.com/google/adk-python/commit/2a9461b1da1c3f7bf732cb37ac43a865f907c6a4))
- **mcp:** support MCP SDK 2.x alongside 1.x ([856acf2](https://github.com/google/adk-python/commit/856acf21e3155d2145f9af0709434dd46843539c))
- support hyphenated column names in BigQuery tools ([b736b0d](https://github.com/google/adk-python/commit/b736b0d142acefd8ac9bc3d7b4acd1ef664c4282))
- **telemetry:** add ability to track skill loads ([0cd24c8](https://github.com/google/adk-python/commit/0cd24c84a9160450d8f1254557fd65a194448338))
- **telemetry:** add script execution instrumentation ([0dbc37d](https://github.com/google/adk-python/commit/0dbc37d67e928d22acef937a8f441683c88af415))
- **telemetry:** export logs over OTLP to telemetry.googleapis.com ([5e6df42](https://github.com/google/adk-python/commit/5e6df4207e42a1192f88f731ce30a5ade8770c1c))
- **tools:** support FunctionNode auto-inference in NodeTool ([ea8609d](https://github.com/google/adk-python/commit/ea8609d3457e54e67606a47289f4c10eb58091d4))
Bug Fixes
- **a2a:** quote a fetched card description and drop relayed auth responses ([7ee3ae9](https://github.com/google/adk-python/commit/7ee3ae9cce4c89b2a56fbb4d1616f92e00cf7787))
- **a2a:** require https for a non-loopback agent card URL ([fe30ebb](https://github.com/google/adk-python/commit/fe30ebbe729aecc622b5dd82d29bccb29d8723a2))
- **a2a:** stop a completed task delegation breaking later peer delegations ([04be48b](https://github.com/google/adk-python/commit/04be48b26048631e914175798d16dc6de5c2d062)), closes [#6831](https://github.com/google/adk-python/issues/6831)
- add optional OIDC verification for Pub/Sub and Eventarc triggers ([73d9fe0](https://github.com/google/adk-python/commit/73d9fe053f99188e01ad186df5dcc401c48e79d7))
- append the user's next turn when it joins a paused task ([678d7e9](https://github.com/google/adk-python/commit/678d7e9394acea792115610cea4dcd332ffb68c6))
- apply state_delta when resuming without a new_message ([6de43b0](https://github.com/google/adk-python/commit/6de43b05a07f8ca89909664b3a21049646d7336c)), closes [#6644](https://github.com/google/adk-python/issues/6644)
- **artifacts:** give concurrent gcs artifact saves distinct versions ([0a12027](https://github.com/google/adk-python/commit/0a12027c737ac7b4c01abdb1c4805b57e98ab1fe))
- **auth:** declare that AuthHandler.generate_auth_uri can return None ([e4c8994](https://github.com/google/adk-python/commit/e4c8994d159eee7e337142a2aaf8df9e078a006e))
- balance callback lifecycle for hallucinated tool calls ([f842a15](https://github.com/google/adk-python/commit/f842a15cdbd3e4efb2ae205bbee111b0eca3b95d)), closes [#4775](https://github.com/google/adk-python/issues/4775)
- **bigquery:** lazy-load Dataplex so BigQueryToolset imports without it ([b65be01](https://github.com/google/adk-python/commit/b65be0155cd68b849809b9a13dc1eda8e43474f6))
- **callables:** extract unified CallableSpec and resolve doc and unwrap edge cases ([c506ddf](https://github.com/google/adk-python/commit/c506ddf3bc34a6312ffc81899221bfa3f2da3b1d))
- cancel the invocation when a sync run() generator is closed early ([080d5e7](https://github.com/google/adk-python/commit/080d5e7829be649c8928f7afcd58befa8303b91b))
- **cli:** explicitly set memory_service_uri='memory://' when --in_memory is passed ([b0bb3dd](https://github.com/google/adk-python/commit/b0bb3dd28e1cebbb9d6ce32e2017ffccf5b40a4a))
- **cli:** make the decorators on API and dev server routes take effect ([308cc32](https://github.com/google/adk-python/commit/308cc32de316182f87efb1cd7ded9acf460ed58d))
- **cli:** sync the Agent Engine class-method catalogue with its source ([0043044](https://github.com/google/adk-python/commit/00430445f5c3554f07ed1c7f8c3da66dff1f9adb))
- close a task-mode delegation when the remote agent finishes ([4cd8aa4](https://github.com/google/adk-python/commit/4cd8aa4043277b7c40aabad77ebb7c8bd11c6ca0))
- coerce an integral float back to int for an int-typed tool parameter ([adbee3c](https://github.com/google/adk-python/commit/adbee3cd86256dda90cfd3235a1b89b4720d3e80))
- coerce callable AgentInfo.instruction for app-info ([ada8652](https://github.com/google/adk-python/commit/ada8652cdf68e855a9754888a304916e66d770a4)), closes [#6909](https://github.com/google/adk-python/issues/6909)
- default AgentCardBuilder capabilities to streaming=True ([b018062](https://github.com/google/adk-python/commit/b0180620f4c2f4f4467a89c37a30f75bf849700b)), closes [#6672](https://github.com/google/adk-python/issues/6672)
- defer local state/event mutation until Vertex append succeeds ([903f37f](https://github.com/google/adk-python/commit/903f37fda5f6624cdaf2c28f6e072c3b6ba8472a)), closes [#6998](https://github.com/google/adk-python/issues/6998)
- end a live session when the client closes the request queue, instead of reconnecting or busy-waiting ([07b1173](https://github.com/google/adk-python/commit/07b1173e6a694e05d40554daaba74cc21e2e75cd))
- end tool callback chains on the first non-None result ([895b6f2](https://github.com/google/adk-python/commit/895b6f2a59ff1881127261ec71891d494da999f0))
- **environment:** terminate the whole process tree when a local command times out ([fa321f1](https://github.com/google/adk-python/commit/fa321f1b49f7bd961b58ad19fd8b8e6fa285b918))
- fail a workflow when a detached dynamic node errors or interrupts ([34e13df](https://github.com/google/adk-python/commit/34e13df41750fc5243a1cd42a86491ee5acdd876))
- **flows:** keep code execution going instead of reporting no content ([ae30506](https://github.com/google/adk-python/commit/ae305062a026ca9f7c0f3a6c76a8b60eb8e951e8)), closes [#7002](https://github.com/google/adk-python/issues/7002)
- **flows:** move before_tool_callback from prepare phase into per-tool execution ([fb45e24](https://github.com/google/adk-python/commit/fb45e242c8054f024bb15a0e6e58244c8973d82b))
- **flows:** propagate contextvars set in before_tool_callback to the tool ([0b75a66](https://github.com/google/adk-python/commit/0b75a66d17a8b8a251c5f2bd903d47a4bdf05dc1))
- **flows:** restrict agent transfer to the declared transfer targets ([8fefa37](https://github.com/google/adk-python/commit/8fefa3769d74ac4b2b3e352f0a1ac075a0fc26d2))
- forward GenerateContentConfig.seed to LiteLLM ([668e024](https://github.com/google/adk-python/commit/668e024b68218947df4595ea6a50adcf1fce67c3)), closes [#6513](https://github.com/google/adk-python/issues/6513)
- forward the agent's generation config (temperature, top_p, top_k, max_output_tokens, seed, media_resolution) to the Live API ([bd74c42](https://github.com/google/adk-python/commit/bd74c42b4e73fd6ded01b737c336773ff528ef0f))
- **gcs:** judge a local path by where it lands, not by whether it is absolute ([48b28de](https://github.com/google/adk-python/commit/48b28deeb8d3d761ffff5b7ce51300142d5cbff3))
- guard malformed tool call argument JSON in LiteLlm response parsing ([6e59663](https://github.com/google/adk-python/commit/6e5966353630bc45a1538c9d6ae67977eb6746e9)), closes [#5896](https://github.com/google/adk-python/issues/5896)
- handle failed inference cases gracefully in GEPA pipeline ([7bffb0a](https://github.com/google/adk-python/commit/7bffb0af29ebfc42b5e5248bdfebff9828f525e8)), closes [#6004](https://github.com/google/adk-python/issues/6004)
- honor save_live_blob when caching live user audio ([b2c7664](https://github.com/google/adk-python/commit/b2c7664eb4c589cd234e5a3196db3fc80583839c))
- initialize Anthropic client off event loop ([e421017](https://github.com/google/adk-python/commit/e4210172e995a3fbe62e62734968a667a837013b))
- invalidate import caches during agent module validation ([c7ffcfa](https://github.com/google/adk-python/commit/c7ffcfa85a8e8970f6318306479d9c4c110583b2)), closes [#6948](https://github.com/google/adk-python/issues/6948)
- keep the original event id when reloading a Vertex session ([864914b](https://github.com/google/adk-python/commit/864914ba9865811515080475c35a2f955e72f93f)), closes [#6530](https://github.com/google/adk-python/issues/6530)
- keep the tool filter and name prefix when cloning a skill toolset ([e4f1700](https://github.com/google/adk-python/commit/e4f1700e012ba1c0f5fbaff1de5f730423707295))
- keep the turn anchor when a long-running tool result is posted back ([b499fbe](https://github.com/google/adk-python/commit/b499fbece77309400cd96f2b73dbf4bb80b860ba))
- label the dynamic instruction so a model does not read it as a user turn and imitate it ([8cdbbb1](https://github.com/google/adk-python/commit/8cdbbb158c70d22c414bd943ad29ec080d1a52b6))
- log an error when a model returns multiple candidates ([25f5214](https://github.com/google/adk-python/commit/25f5214c83f56b2fcffd35757e886026632f3c2b))
- make SkillToolset system instruction respect tool_filter ([66d7609](https://github.com/google/adk-python/commit/66d76090baae16c2393bc7ab4a82aff2503b2303)), closes [#6448](https://github.com/google/adk-python/issues/6448)
- match a branch's run ids exactly when resolving HITL interrupts ([8db82ba](https://github.com/google/adk-python/commit/8db82ba298af92256f9566a766bbe55a4912d873))
- **mcp:** keep resolving MCP 1.x by default ([46edaa2](https://github.com/google/adk-python/commit/46edaa24a4ee1e14b542638950d3043096a56032))
- **mcp:** only attach application default credentials to Google API hosts ([f9f4a39](https://github.com/google/adk-python/commit/f9f4a3901a7a6c932b336ce0936aece66b459954))
- **mcp:** skip summarization when a tool call pauses for confirmation ([cb0eb22](https://github.com/google/adk-python/commit/cb0eb2288bfe6536bd6e98f0601d3736844062ca))
- **memory:** do not let a failing temp-file cleanup mask the upload error ([2778930](https://github.com/google/adk-python/commit/2778930080239e473ac32b2b9beb226d1d0c7087))
- microsecond-safe DatabaseSessionService on SQL Server (mssql) ([7d7bac0](https://github.com/google/adk-python/commit/7d7bac0fa97c91a53904ca1c0ae26300d4d78d82))
- **models:** stop a content-free thought signature from wedging a session ([a5d6238](https://github.com/google/adk-python/commit/a5d6238cb761db93e56deabc27d3a5f3dbcfc40c))
- name the async driver when a database URL uses a sync one ([76601c6](https://github.com/google/adk-python/commit/76601c65c22b05be3badba5cb2e49194f44a05aa))
- never empty the request contents when applying a context cache ([8e30a30](https://github.com/google/adk-python/commit/8e30a30884cb9355c711695f446fb2db6e94e2c1)), closes [#6945](https://github.com/google/adk-python/issues/6945)
- normalize session_id before duplicate check in in-memory service ([bfeb04c](https://github.com/google/adk-python/commit/bfeb04cfe11dd21264707f63af3e13589213adaa)), closes [#6887](https://github.com/google/adk-python/issues/6887)
- **openapi:** bound the REST API tool's default HTTP waits ([5d0bd5f](https://github.com/google/adk-python/commit/5d0bd5f641866352794ebbaa513c0b67f6a3e735))
- **plugins:** keep a staticmethod a staticmethod when auto-tracing wraps it ([939ff92](https://github.com/google/adk-python/commit/939ff92d2ccc90bf79b145cca66e904a3a4a3944))
- point misplaced generation kwargs at generate_content_config ([e51aadc](https://github.com/google/adk-python/commit/e51aadcfa27cdb2443dfe2deb716788043abeec3)), closes [#6836](https://github.com/google/adk-python/issues/6836)
- populate model_version on AnthropicLlm responses ([408f57d](https://github.com/google/adk-python/commit/408f57d2ed3388255e53907024ccd308107edb3a)), closes [#6847](https://github.com/google/adk-python/issues/6847)
- preserve anyOf and camelCase aliases in LiteLLM tool schemas ([0e97a8f](https://github.com/google/adk-python/commit/0e97a8f4342f74ddaba38a9c7596b064c18371ce)), closes [#6738](https://github.com/google/adk-python/issues/6738)
- preserve Gemini 3 thought signatures in interaction history ([51f21e7](https://github.com/google/adk-python/commit/51f21e724b036cb17f23514fb2e054a0bdbc7d48))
- raise a sub-agent's own error from ParallelAgent, not a group ([3ecd3d7](https://github.com/google/adk-python/commit/3ecd3d719b8bebeb5a331338365e7a7b9b8bde2e))
- raise AlreadyExistsError on concurrent create_session races ([cbccae6](https://github.com/google/adk-python/commit/cbccae64b3dc1a1e1de29aad674f2c13fba7f5bd))
- read an MCP tool's schema under either spelling in telemetry ([40c8333](https://github.com/google/adk-python/commit/40c8333460c6337fdf05f1e33964110bd8567f5a))
- rebind an agent's own callback methods when cloning ([f449bb7](https://github.com/google/adk-python/commit/f449bb70c3b87854cb84aecf6276d39c00cdc835))
- **redis:** match app_name and user_id literally when listing sessions ([4b26bba](https://github.com/google/adk-python/commit/4b26bba94dc3698478ce049a8d6a308be731262f))
- refuse a tool call whose arguments a broken stream cut short ([da22e43](https://github.com/google/adk-python/commit/da22e4307ea2de902a304e6a4aa3768560c31290)), closes [#6716](https://github.com/google/adk-python/issues/6716)
- refuse a transfer to a forbidden parent or peer agent ([b0503a0](https://github.com/google/adk-python/commit/b0503a03663368688f19881a9813152b5db3e2ca))
- reload changed agent correctly ([397ed42](https://github.com/google/adk-python/commit/397ed423550da5114aa7fcaa2d5da4f77679460a)), closes [#4956](https://github.com/google/adk-python/issues/4956)
- report a metric that never ran as not evaluated, not as failed ([9c9b81a](https://github.com/google/adk-python/commit/9c9b81a17295333e396c7826050d186c30ffadcb))
- report an unknown tool name to the model instead of raising ([f337793](https://github.com/google/adk-python/commit/f33779378c58ff0cf7bacad62c25ef194b5fa24e))
- report the real finish reason from a LiteLlm stream ([eaed0aa](https://github.com/google/adk-python/commit/eaed0aa8b25220b63890c72746f3b314686f2812))
- rerun a paused workflow node after the user answers it ([2fb877c](https://github.com/google/adk-python/commit/2fb877cd0ea5f866d2b66153b00749ebb61bdce4))
- resolve every Claude model id rather than enumerated generations ([01919b3](https://github.com/google/adk-python/commit/01919b3794f3cd8d5bbfb2b7c319e626e0edeb8f))
- resolve scheduler leakage and use node.clone() in DynamicNodeScheduler ([64b5b9c](https://github.com/google/adk-python/commit/64b5b9c04f358c01fb3a0d5efa4beffb18a1b444))
- retry once on 429 in VertexAiSessionService ([cc5985a](https://github.com/google/adk-python/commit/cc5985a1b021e5818d5c0fe0593690792d835ab8))
- return custom_metadata from VertexAiMemoryBankService.search_memory ([3a37d7a](https://github.com/google/adk-python/commit/3a37d7ac2abc7a9e73e922b87ef7116f654b3957)), closes [#6946](https://github.com/google/adk-python/issues/6946)
- route interleaved interactions function-call deltas by step index ([f73bb37](https://github.com/google/adk-python/commit/f73bb37c559dcf7cd2f50a19f329be4bc31323de)), closes [#6832](https://github.com/google/adk-python/issues/6832)
- **samples:** correct the live audio path, the live eval config and the multimodal samples ([6499a44](https://github.com/google/adk-python/commit/6499a44a7ef1262c53ce571ab08213e7d2fc6e92))
- **samples:** read the knowledge agent data store from the environment ([d5129f3](https://github.com/google/adk-python/commit/d5129f3aa05be2017078f98d7307b5727a2b6a63))
- sanitize anyOf schemas for Vertex AI function declarations ([642439c](https://github.com/google/adk-python/commit/642439cd5a8e8027947823a5d5f669daf22032fc)), closes [#6373](https://github.com/google/adk-python/issues/6373)
- show adk create --type in --help ([d0d5ade](https://github.com/google/adk-python/commit/d0d5adeffd69775ed15af90cec950d645e8caf07)), closes [#6737](https://github.com/google/adk-python/issues/6737)
- skip duplicate user event append on invocation retry ([d06a7fe](https://github.com/google/adk-python/commit/d06a7fed56dff71cbfa709edb5bb1d72989eca8e)), closes [#4506](https://github.com/google/adk-python/issues/4506)
- skip rewound invocations when resuming agent in _find_agent_to_run ([ed1306f](https://github.com/google/adk-python/commit/ed1306f58796648a58b5ee2f99f80e81e92cd7de)), closes [#4169](https://github.com/google/adk-python/issues/4169)
- skip summarization for terminal A2A task states ([aef3a9c](https://github.com/google/adk-python/commit/aef3a9c4d43c1fff961c2dd6dde920851248c69a))
- **spanner:** release the client, transports and sessions each tool call creates ([edf99a3](https://github.com/google/adk-python/commit/edf99a3ac2e2bfb22e820b73cdfcbecac2491e37))
- stop a child branch stamped on a user event moving the invocation root ([181d52e](https://github.com/google/adk-python/commit/181d52e402d8c0d921a0e3dd80d5c743a5b40589))
- stop after final preprocessing responses ([764e2cb](https://github.com/google/adk-python/commit/764e2cbdac854e8fe7b31af98222b6bcf4238d80)), closes [#4472](https://github.com/google/adk-python/issues/4472)
- stop caching a remote agent card that failed validation ([2685acd](https://github.com/google/adk-python/commit/2685acd3705bc19988611e33aa644268993d4095))
- stop CompletionsHTTPClient leaking its httpx client via atexit ([3fcda36](https://github.com/google/adk-python/commit/3fcda36d852ceeaf7e78e52aa48d71aa22c2808e))
- stop ContainerCodeExecutor leaking via atexit ([04f8df1](https://github.com/google/adk-python/commit/04f8df11e0fce6b78958aaa1780c1c689bce3e6e))
- stop declaring dict value types to Google AI ([73803f4](https://github.com/google/adk-python/commit/73803f46f0699823629c4d9cc64914621d96bd6b))
- stop offering run_skill_script when no code executor is configured ([66315da](https://github.com/google/adk-python/commit/66315daea81f1ea181ae7b89d33cfa4ed8204359))
- stop sending the OAuth client secret to the client ([393b3b0](https://github.com/google/adk-python/commit/393b3b0d50acdd94a2cccfa812b8e85aec001d2d))
- stop silently dropping sampling settings on interactions API ([cd0dddc](https://github.com/google/adk-python/commit/cd0dddce9c56ca23adcc2a3cfeb065c0a1d6444a))
- support multi-turn nested HITL pause and resumption across workflows and agent tools ([6d14518](https://github.com/google/adk-python/commit/6d145180611956b2065704189517fd6a0ff1a063))
- **telemetry:** end the inference span at the finish reason, not at the first chunk ([6364060](https://github.com/google/adk-python/commit/6364060916d8e757b370c8ddf18ba390e94f402b))
- **telemetry:** keep thought signatures out of span attributes ([5d965c3](https://github.com/google/adk-python/commit/5d965c33deaca4369c5cf2f669260e5d0ba5874e))
- **telemetry:** remove helper methods for type-safe hallucination checking and update function signatures ([e1e4331](https://github.com/google/adk-python/commit/e1e4331ac20cbdc534b1112ebd89334451583486))
- **tools:** import the two annotation names that are referenced but unbound ([13376d4](https://github.com/google/adk-python/commit/13376d4ad4c67e8f3ab0f560ee4f473c64bf2c79))
- **tools:** support zero-argument nodes in NodeTool ([8128b84](https://github.com/google/adk-python/commit/8128b84e39e463dc19aa8b4a049677861e6beb11))
- **tools:** treat an empty openapi security requirement as optional auth ([3c6a5b7](https://github.com/google/adk-python/commit/3c6a5b7fa20d9424eab35f5a30e99a1b77e39658))
- treat a max_iterations of zero as zero loop passes ([afbcaff](https://github.com/google/adk-python/commit/afbcaff7b8744edbd2992c5ea6bf03ecb5e78787))
- treat an error event without function calls as a final response ([75ae2db](https://github.com/google/adk-python/commit/75ae2dbf948ac3911f3f4d6026f7c092d9950a9d))
- update max_llm_calls validation to reject values greater than or equal to sys.maxsize ([44e0b2a](https://github.com/google/adk-python/commit/44e0b2a8b1215aa98f057c4a781ddc24bae220da))
- **utils:** adapt callback keyword arguments to positional parameters ([a213e76](https://github.com/google/adk-python/commit/a213e76d4356de923068ead7118cd67304deae8e))
- **utils:** include agent name in instruction context variable missing error ([86b2e5b](https://github.com/google/adk-python/commit/86b2e5baaa487558b10fc9f2b48fe0d4ceefb755))
- **utils:** report an unknown session id in the cache performance analyzer ([f7c0c01](https://github.com/google/adk-python/commit/f7c0c010126b371115bf406f631c25c1162d3dd8))
- validate app_name before interpolating into deploy Dockerfile ([6eb1d35](https://github.com/google/adk-python/commit/6eb1d35d84a9cb28445249119d951b13f604c823))
- validate function call author before resuming auth-gated tool calls ([328ecb9](https://github.com/google/adk-python/commit/328ecb938d0db97738de92dd6e7c92d57f76e39b))
- **vmaas:** cache the sandbox access token on the computer instance ([21c2fbd](https://github.com/google/adk-python/commit/21c2fbd2cd0ad4590261e4c5f58f1a4657e28d88))
- warn once per experimental surface instead of on every use ([391fdc6](https://github.com/google/adk-python/commit/391fdc6ccca767ece55a8242b626d10cb4d40890))
- **workflow:** drop resume inputs from the resumable node checkpoint ([790cb7c](https://github.com/google/adk-python/commit/790cb7c4c7af3f2a0812ba86f50a2b0154f769ae))
- **workflow:** omit the oauth client secret from the credential request event ([fdfa4b1](https://github.com/google/adk-python/commit/fdfa4b11473069d4107c986802fb1705c86a3818))
- **workflow:** retry subclasses of a configured retry exception ([f6fe8d2](https://github.com/google/adk-python/commit/f6fe8d265bff283aa28cdeec9780e789a8847435))
Performance Improvements
- defer imports in code executors ([d9648b0](https://github.com/google/adk-python/commit/d9648b01237aeef4cd829a13c0b40de17fd151fa))
- extend the workflow replay index instead of rebuilding it per event ([f8fdfed](https://github.com/google/adk-python/commit/f8fdfed281186489dc915e767e7f9f4a18081ae2))
- stop rescanning the session for every user response event ([4295bd0](https://github.com/google/adk-python/commit/4295bd0238f1b1244ac8325cc4a0c14fac56a739))
Documentation
- **a2a:** explain the human-input resume tests in their own terms ([909ace1](https://github.com/google/adk-python/commit/909ace11669dc569310ca58b5cbe7c42f3dad438))
- add node as tool developer unit guide and sample docs ([9fcd97e](https://github.com/google/adk-python/commit/9fcd97e1a1c66d892983f712de8a5b7548473fef))
- add unit guides for A2A, skills and the execution backends ([b89037d](https://github.com/google/adk-python/commit/b89037d95a71799eb3403ae5ec3a8b6044f878cd))
- add unit guides for evaluation, serving and observability ([eb532ca](https://github.com/google/adk-python/commit/eb532caf4814bdfaba94d4998b4de82d9efdd813))
- **agents:** state the lazy-import rule the comment only pointed at ([ac96686](https://github.com/google/adk-python/commit/ac96686c3aa5079ef14c15b171400c1180e88133))
- align callback contracts with runtime behavior ([6a811d2](https://github.com/google/adk-python/commit/6a811d2bfcea004d1edad685fb7ca3eeb4f5f716))
- **antigravity:** add the AntigravityAgent unit guide ([86b50c4](https://github.com/google/adk-python/commit/86b50c40485be91a1e0193e23001b01c1a5f1687))
- **antigravity:** describe the scenario a compaction-turn test covers ([ef714fe](https://github.com/google/adk-python/commit/ef714fe07d4f76bfcf30e21989080a8d31a32802))
- **antigravity:** name the Antigravity SDK in full and disambiguate "agent" ([b71a59c](https://github.com/google/adk-python/commit/b71a59cb4aab1cd8e0f1e66d816064d08ef41dc1))
- correct the heading in the llms-full.txt pointer ([2880fbf](https://github.com/google/adk-python/commit/2880fbf2a39e6a262b4ac2442b8e2dc784d1a936))
- document Live streaming in adk-agent-builder and adk-architecture ([a80d264](https://github.com/google/adk-python/commit/a80d2640ba2b291dd9996e0404c41f8870381aab))
- document replacing a failed tools listing via get_tools ([c7ef8cf](https://github.com/google/adk-python/commit/c7ef8cfa8269738033180f49338f160254b8b137)), closes [#6748](https://github.com/google/adk-python/issues/6748)
- **features:** use a real feature name in the is_feature_enabled example ([93cd316](https://github.com/google/adk-python/commit/93cd316a9fc757a9025d5ab0f90d5b358ec8e5ca))
- **flows:** drop the incorrect move instruction from three compatibility shims ([d637d1b](https://github.com/google/adk-python/commit/d637d1b449aa4382045f71ee84d3f674403d41d5))
- give the unit guide skill a voice section ([10333f2](https://github.com/google/adk-python/commit/10333f26f1042497c9004b1a40c831e0855d2a60))
- **live:** move LiveRequestQueue developer guide to docs/guides/live ([d563bde](https://github.com/google/adk-python/commit/d563bdea44d093b2d25be246727357a5842e27ae))
- **memory:** describe ttl as the revision_ttl alias it actually is ([c3f785c](https://github.com/google/adk-python/commit/c3f785c43074550e0a230e1cff9eed0b4125f38f))
- **openai:** drop the third-party gateway from the OPENAI_BASE_URL tip ([8d624bd](https://github.com/google/adk-python/commit/8d624bdc52afc3f1bf0b39598ab3d626c9e0124f))
- **plugins:** say what the reflect-and-retry failure counter's lock guarantees ([6762652](https://github.com/google/adk-python/commit/6762652ac1a7077888568b7f88f5233d36ef6ab1))
- scope the gVisor claim to the mode that provides it ([bd4c6d7](https://github.com/google/adk-python/commit/bd4c6d77d06c90412d46cef59f21a5b8efbd8fa4))
- state what a parallel branch isolates and what it shares ([a28c66b](https://github.com/google/adk-python/commit/a28c66b39e62402a82d574097bfec0cd07dc22c3))
- **tests:** remove the internal notebook link from the hello world fixtures ([7988f4c](https://github.com/google/adk-python/commit/7988f4c48582bac17d48984fe39b1c0f31cbae81))
- **tools:** scope the Spanner capabilities setting to the toolset that reads it ([c4a7ee2](https://github.com/google/adk-python/commit/c4a7ee2920d30eca9f604836457aa5e435b2f91c))
Miscellaneous Chores
- release as 2.9.0 ([187a693](https://github.com/google/adk-python/commit/187a693904c5a708595cad0b72d5ef5c5febb44e))
Bug Fixes
- **a2a:** Port event action allowlist, agent card description source and resume flattening to v1 ([#6801](https://github.com/google/adk-python/issues/6801)) ([1f898a6](https://github.com/google/adk-python/commit/1f898a6f3ac6baad482e32d8c7c09e293e129c68))
- **artifacts:** Port app-scoped file artifact storage and layout-derived payload paths to v1 ([#6795](https://github.com/google/adk-python/issues/6795)) ([0ae2bff](https://github.com/google/adk-python/commit/0ae2bffdd2628af6c8643bc4fd40c2f49f0c6bd4))
- **artifacts:** Port artifact reference scoping and path-segment validation to v1 ([#6794](https://github.com/google/adk-python/issues/6794)) ([efc5bb8](https://github.com/google/adk-python/commit/efc5bb858ec4bb94192e37ee28d006493709cec1))
- **cli:** check the Host header on every local API server request (v1) ([#6789](https://github.com/google/adk-python/issues/6789)) ([15bf230](https://github.com/google/adk-python/commit/15bf2308ed6eba64b9bff959ce2076509b3d57bf))
- **cli:** Port deploy ignore-file handling to v1 ([#6793](https://github.com/google/adk-python/issues/6793)) ([8467bf0](https://github.com/google/adk-python/commit/8467bf04c204a8f1cb3bb87be42815e278d7d368))
- close the residual gaps from the v1 backport review ([#6890](https://github.com/google/adk-python/issues/6890)) ([218061e](https://github.com/google/adk-python/commit/218061e0715929808ae123c9d3c6766fb9b8aa56))
- **integrations:** send api registry credentials only to google api endpoints (v1) ([#6889](https://github.com/google/adk-python/issues/6889)) ([1e9e117](https://github.com/google/adk-python/commit/1e9e117303ed871a38bc70889190f476e3ddd7ac))
- **mcp:** Port config stdio opt-in and reserved tool name checks to v1 ([#6796](https://github.com/google/adk-python/issues/6796)) ([28b32b4](https://github.com/google/adk-python/commit/28b32b476585299f8995d593ae89e55e74693db5))
- **models:** Port Gemini context cache fingerprint scoping to v1 ([#6804](https://github.com/google/adk-python/issues/6804)) ([f2f8456](https://github.com/google/adk-python/commit/f2f8456497743e9f02a395f1cf558bf62de46207))
- **plugins:** sanitize BigQuery analytics rows and build GCS paths per call (v1) ([#6808](https://github.com/google/adk-python/issues/6808)) ([80e56de](https://github.com/google/adk-python/commit/80e56de2db860ce9fb02f93a8dfc5acc6ad3d85d))
- Port A2A agent card RPC target origin validation to v1 ([#6800](https://github.com/google/adk-python/issues/6800)) ([ccb4812](https://github.com/google/adk-python/commit/ccb481226bfe0bddac118828630b5308f4a6d2b0))
- Port agent loader and file path resolution fixes to v1 ([#6788](https://github.com/google/adk-python/issues/6788)) ([8bc927f](https://github.com/google/adk-python/commit/8bc927fabb439bcb6b697d4883fed0bf69f6fd76))
- Port agent-config code-reference and config_path validation to v1 ([#6790](https://github.com/google/adk-python/issues/6790)) ([15ae713](https://github.com/google/adk-python/commit/15ae7131cd63c05c66bed0a526722905f18c5af9))
- Port branch-scoped auth responses and OAuth2 nonce forwarding to v1 ([#6803](https://github.com/google/adk-python/issues/6803)) ([5817d30](https://github.com/google/adk-python/commit/5817d307b52d55e1fef5ab3065594520f5f8ebc1))
- Port code executor container and pod isolation defaults to v1 ([#6807](https://github.com/google/adk-python/issues/6807)) ([1b4da44](https://github.com/google/adk-python/commit/1b4da44e73a944a7e685d8cac7a3aaa23511628d))
- Port credential and inline-data field exclusions in logs, reprs and spans to v1 ([#6797](https://github.com/google/adk-python/issues/6797)) ([7c2075c](https://github.com/google/adk-python/commit/7c2075c2e0c50be069fadd848b2fba0c0a0b273d))
- Port eval identifier validation and persona template rendering to v1 ([#6806](https://github.com/google/adk-python/issues/6806)) ([0a4a5c6](https://github.com/google/adk-python/commit/0a4a5c6ce25817369327893fc7fd9c0613f1d63f))
- Port migration unpickle allowlist and database URL redaction to v1 ([#6791](https://github.com/google/adk-python/issues/6791)) ([6deda28](https://github.com/google/adk-python/commit/6deda284793cf894c8033e6a187abbce16c38344))
- Port session id validation, thread id scoping and Vertex RAG cleanup fixes to v1 ([#6809](https://github.com/google/adk-python/issues/6809)) ([3fec8c5](https://github.com/google/adk-python/commit/3fec8c56a7c442584af49ad2ba1a73b283ec6829))
- Port skill resource path and skill name validation fixes to v1 ([#6805](https://github.com/google/adk-python/issues/6805)) ([1353e8d](https://github.com/google/adk-python/commit/1353e8d733fce0180b75a6c875e193d01dc8a5e4))
- Port URL validation, client timeout and credential scoping fixes to v1 ([#6802](https://github.com/google/adk-python/issues/6802)) ([7b6547f](https://github.com/google/adk-python/commit/7b6547f10a6f4cbef0a06a62156813222049c492))
- Route thread-pool and live-mode tool dispatch through run_async (v1) ([#6799](https://github.com/google/adk-python/issues/6799)) ([48c56c3](https://github.com/google/adk-python/commit/48c56c388911fbc806a339ae6f265932781e34fe))
- Scope custom eval metrics per registry and resolve their function path from the eval config (v1) ([#6792](https://github.com/google/adk-python/issues/6792)) ([9886410](https://github.com/google/adk-python/commit/9886410d85ddb38d219c24e6d9e1cd1934e17634))
- **sessions:** accept a full session resource name again on v1 ([#6888](https://github.com/google/adk-python/issues/6888)) ([ef4f1e0](https://github.com/google/adk-python/commit/ef4f1e02c23af46ee0a06d56adda8b60a2e82e63))
- Validate user message parts and agent transfer targets (v1) ([#6798](https://github.com/google/adk-python/issues/6798)) ([d830355](https://github.com/google/adk-python/commit/d830355c49f1be5d822d29b92951f8ac42a89c35))
Features
- **a2a:** add native task mode support to RemoteA2aAgent ([72f3ff5](https://github.com/google/adk-python/commit/72f3ff5cfb11fdf7432c6c2faa01befcc350ad7e))
- add ADK_MAX_LLM_CALLS environment variable to configure max LLM calls limit ([75679db](https://github.com/google/adk-python/commit/75679db3fa42521a9316d1f8325225e51f5e9090))
- add create_data_agent tool to data_agent toolset ([5cd38a0](https://github.com/google/adk-python/commit/5cd38a0b3d944eb3e5ac252140f0dc01ab6d5fd0))
- add delete_data_agent tool to data_agent toolset ([9b451fc](https://github.com/google/adk-python/commit/9b451fca3b4b81ed5c3bba64594caeb64ac1d214))
- add location parameter to list_accessible_data_agents in data_agent toolset ([393ec08](https://github.com/google/adk-python/commit/393ec0858baa61c5ebb8b733cd29e1ff673ead19))
- add Model Armor guardrail plugin ([11efc3f](https://github.com/google/adk-python/commit/11efc3f8e9bcc00660740ad4807e406d97dd5dd3))
- add nvidia nim integration sample ([c6bba8d](https://github.com/google/adk-python/commit/c6bba8dcc8cee4b78a36a751416dbbff284a146f))
- add sample for skill state injection via adk_inject_state ([9384127](https://github.com/google/adk-python/commit/93841270bc479028bbe0209f3291d82e84276698))
- add spreadsheet mime types to load_artifact_tool ([370027a](https://github.com/google/adk-python/commit/370027a770b413ab7991afa3395dbf8be1eb89e5))
- add update_data_agent tool to data_agent toolset ([92d00aa](https://github.com/google/adk-python/commit/92d00aa937a50bdd35a24df856dbdc513b9bed4f))
- allow configuring Vertex AI API version ([ede87c2](https://github.com/google/adk-python/commit/ede87c26edc716069eb760bbe0fdb046048084fd)), closes [#3246](https://github.com/google/adk-python/issues/3246)
- allow streaming tools to set response scheduling per yield ([bf2efd7](https://github.com/google/adk-python/commit/bf2efd71d6f9433673b8e7465a9dcc7f045a3dc4))
- **antigravity:** capture client-side tool outcomes for a function_response ([4599a52](https://github.com/google/adk-python/commit/4599a52659f9c3655263b3aabd39a189c692c0d2))
- **cli:** Support Cloud Build worker pools for Agent Engine deploy ([e577c30](https://github.com/google/adk-python/commit/e577c301d5f4a50b2a3c827631c53463268bb5fc))
- **eval:** support custom metrics in AgentEvaluator ([babb11c](https://github.com/google/adk-python/commit/babb11c83c4b4c21c7d7af8b8e3ecf50c20b34a9))
- guard against SQL injection vulnerabilities in BigQuery tools ([d6290a0](https://github.com/google/adk-python/commit/d6290a0b2e344a92b8879acfeab02e4252d1b47c))
- **live:** Add VIDEO to the allowed modalities in the ADK API server ([dd998a7](https://github.com/google/adk-python/commit/dd998a7d5352225b944806abfe0fc7f463abbf38))
- **live:** let a live streaming tool send messages to the user directly ([98896eb](https://github.com/google/adk-python/commit/98896eb2aaafb57577c02fc00b62db4367cb003c))
- **live:** run before and after model callbacks in live mode ([ef2d680](https://github.com/google/adk-python/commit/ef2d68080a05f2fc3e00634c4f6c4d3d43c2a7f1))
- **live:** surface live `interaction_status` on LlmResponse and Event ([b858904](https://github.com/google/adk-python/commit/b8589042c50986fb5cb446952f0b1bd8631ffa96))
- **live:** use RunConfig.session_resumption.handle when opening a live session ([eac32c3](https://github.com/google/adk-python/commit/eac32c3ccc64a1ee4df80d6e4ffe9f1d33033c18))
- **mcp:** report MCP HTTP exchanges as OpenTelemetry log records ([85a6fa1](https://github.com/google/adk-python/commit/85a6fa1e44f4d66a0e3a2be754355aa8be9b7af4))
- parallelize LLM-as-judge evaluation using asyncio.gather() ([0dbb88c](https://github.com/google/adk-python/commit/0dbb88c7c43c004a00d71458e30e54c7d5a9a6b4))
- preserve field descriptions in set_model_response schema ([a30858b](https://github.com/google/adk-python/commit/a30858b11ce87b51be49c67021b892af16a2a311)), closes [#6707](https://github.com/google/adk-python/issues/6707)
- record context cache state on the LLM call span ([c0614d6](https://github.com/google/adk-python/commit/c0614d65806be5e7525b72e662e0987378996b53))
- resolve auth for RemoteA2aAgent in AgentRegistry ([d695494](https://github.com/google/adk-python/commit/d6954946df8b156ab27554ca02d2d6234c8595a1))
- support auth_scheme and auth_credential in RemoteA2aAgent ([d42c634](https://github.com/google/adk-python/commit/d42c634bd6ef4041440d833327d63969a39315be))
- support injecting custom LLM clients into Gemini and AnthropicLlm ([a01d516](https://github.com/google/adk-python/commit/a01d516a6bcf93f12d26a083af587455d0bb2592)), closes [#5027](https://github.com/google/adk-python/issues/5027)
- support memory_id and allowed_topics in Vertex Memory Bank ([bf73360](https://github.com/google/adk-python/commit/bf733602b61f2542add406235706fc9b1b7bfed2))
- support opt-in session retention in MultimodalToolResultsPlugin ([775c1bd](https://github.com/google/adk-python/commit/775c1bd36e205eec65e207ad29fdc4cf2184e47e)), closes [#6695](https://github.com/google/adk-python/issues/6695)
- support sub-agent escalation event in ParallelAgent ([0fd681e](https://github.com/google/adk-python/commit/0fd681e7d203d2bc7b86c72e4b539de6c735c889)), closes [#5104](https://github.com/google/adk-python/issues/5104)
Telemetry
- **telemetry:** add per-invocation token spend metrics for invoke_agent ([dc00db5](https://github.com/google/adk-python/commit/dc00db51bc5dc195a21633b295aa9eac33732ccf))
- **telemetry:** add per-workflow inference and tool call counts ([6e6c4a5](https://github.com/google/adk-python/commit/6e6c4a505e29bb0ba632c92add3a0e1be1bbaf00))
- **telemetry:** add per-workflow token spend metrics ([dd8797e](https://github.com/google/adk-python/commit/dd8797e77f7e7dbac6fd5bfffc945ae20d3cd611))
- **telemetry:** Expand telemetry for `load_skill_resource` span ([6e0facf](https://github.com/google/adk-python/commit/6e0facf9370261c788149a5330bb5632985e3531))
- **telemetry:** honor RunConfig.telemetry at the runner's invocation span ([00fc6eb](https://github.com/google/adk-python/commit/00fc6ebd1990bd53b8615cdbd309702d50e51e62))
Bug Fixes
- **a2a:** keep file payloads out of the debug log line ([ef158d3](https://github.com/google/adk-python/commit/ef158d32e974e5e794aca3daf89bc60e55663edf))
- **agents:** report which toolset an agent lost when one fails to load ([66930e6](https://github.com/google/adk-python/commit/66930e65265e6bbf7f669575bb3c02dd8180ac35))
- **artifacts:** Publish file artifact versions atomically ([94475c9](https://github.com/google/adk-python/commit/94475c9a76c7c71246d6f5e4b083b3c3ee6869c0))
- **auth:** take the auth scheme from the request, not the client's response ([8989aea](https://github.com/google/adk-python/commit/8989aeadced4eda437f3435653fd60f11109c0e0))
- avoid O(n^2) deep event comparison during rehydration ([b8dd086](https://github.com/google/adk-python/commit/b8dd08604c997b1e91e038f96eacb01eea878872)), closes [#6657](https://github.com/google/adk-python/issues/6657)
- block yaml and ruamel deserialization in agent-config code references ([924d802](https://github.com/google/adk-python/commit/924d802f5bb232a294df8e5a5c036d000077e19a))
- cache read write token counts in LiteLLM and Anthropic models ([d0b33a0](https://github.com/google/adk-python/commit/d0b33a0569c940be0364cd4e0d4317a99bf52330)), closes [#5835](https://github.com/google/adk-python/issues/5835)
- check every function response, not just the first, when inferring which invocation to resume ([5449314](https://github.com/google/adk-python/commit/54493140a6697af5b82e03b9d7ecb77c15df4eb6))
- **cli:** clean up pytest subprocesses on test-client disconnect ([a84a4b5](https://github.com/google/adk-python/commit/a84a4b52aa90eeed5bb6819e8c4d69542b8b52db))
- **cli:** Preserve non-ASCII text in `adk test --rebuild`, Web UI test saving, and CLI JSONL ([dc735bd](https://github.com/google/adk-python/commit/dc735bd9534ff30c98db47743223815954d55e9f))
- **cli:** report env var names instead of values when overriding env_vars ([b0c599f](https://github.com/google/adk-python/commit/b0c599f21fab3ca1bf1d4984e2b0298b8bbc027d))
- count tool call and response chars in compaction ([66908e4](https://github.com/google/adk-python/commit/66908e4c613ff3686e85374696640e84c4d0f20f))
- declare a2a-sdk[http-server] so the a2a extra can serve ([65234e7](https://github.com/google/adk-python/commit/65234e761bc055a45425e8950b614efc4e2a1954))
- deduplicate events in InMemorySessionService.append_event ([4d74774](https://github.com/google/adk-python/commit/4d747747ee0313d7b30db1eed1b723ff329279d3)), closes [#5723](https://github.com/google/adk-python/issues/5723)
- deliver parallel sub-agent failures to the caller ([ece924c](https://github.com/google/adk-python/commit/ece924c2dd6bd5124a70e5bbc4164bf886ceb852)), closes [#5455](https://github.com/google/adk-python/issues/5455)
- detect MCP tool errors under either field spelling ([d18df2f](https://github.com/google/adk-python/commit/d18df2fa1c9cd8ceaad7e54c79a5acbcff95b812))
- disable Windows glob expansion for CLI args ([2638155](https://github.com/google/adk-python/commit/26381552c0a00bf4d5bbb0e0c9dbd5d6384f93a1)), closes [#6248](https://github.com/google/adk-python/issues/6248)
- emit Anthropic prompt cache breakpoints for ContextCacheConfig ([811d379](https://github.com/google/adk-python/commit/811d379fdf5b302861a237bfbae34e5f4ddfbf47)), closes [#5395](https://github.com/google/adk-python/issues/5395)
- fence relayed agent output so it cannot pose as instructions ([9ffe8be](https://github.com/google/adk-python/commit/9ffe8be6f92fae76541cc948c38c5ef5dc3755b9))
- filter thought parts from A2A client user-facing response ([8963a04](https://github.com/google/adk-python/commit/8963a0484662d27548fcdbe4dcf31a3c60a11542)), closes [#4676](https://github.com/google/adk-python/issues/4676)
- Fix built-in search tools in agent hierarchy when transfer_to_agent is present ([f3250bd](https://github.com/google/adk-python/commit/f3250bd9650a3654e3699c1e615b14e7b134fae0))
- Fix crashes and cross-invocation leaks from copying RunConfig.http_options ([67ca98c](https://github.com/google/adk-python/commit/67ca98c2c0b467ed397357eef2b2941c92dac40c))
- **flows:** pair a function response with the call it answers ([deee6d2](https://github.com/google/adk-python/commit/deee6d2c474ccb9710e0b25a0b290bb76cc54c45)), closes [#6761](https://github.com/google/adk-python/issues/6761)
- **flows:** sort function_call.args when rendering cross-agent context ([735402d](https://github.com/google/adk-python/commit/735402d01aaacf64eaf5034bf0517981c4886ce7))
- Guard `invocation_context.branch` assignment against mock `SessionService` instances ([9917922](https://github.com/google/adk-python/commit/99179223d01e7c86ca1fcb245b232eb00cb9b813))
- guard against Content with no parts in _content_to_message_param ([1ed8d48](https://github.com/google/adk-python/commit/1ed8d486203e240767251f2ca6d270cb8e5e9de3))
- handle read-only .git files in deploy cleanup on Windows ([c93fcc0](https://github.com/google/adk-python/commit/c93fcc09304209a11fe2d5647a7b0cb5cb727353))
- honor before_run_callback early-exit for Workflow runs ([dac1869](https://github.com/google/adk-python/commit/dac18699b9ce423f7e98d1cb245cfdde20b18147)), closes [#6013](https://github.com/google/adk-python/issues/6013)
- honor ContextCacheConfig on the LiteLLM path ([b1c984b](https://github.com/google/adk-python/commit/b1c984baa236887bb53eace6fa4d9cb483baff09))
- improve clarity and actionable context in error messages ([7c2af5f](https://github.com/google/adk-python/commit/7c2af5f9c1774474b316948b70b8215db230255f))
- include grounding metadata in rubric judge prompt ([b0cdecf](https://github.com/google/adk-python/commit/b0cdecfc3f846e8124f0a964e64174c12a696a2e)), closes [#5831](https://github.com/google/adk-python/issues/5831)
- **integrations:** send api registry credentials only to google api endpoints ([cc275f0](https://github.com/google/adk-python/commit/cc275f0c75bc4d84a5fc315dd6f6bd8a82cb1155))
- keep non-text static_instruction as a stable request prefix ([deda5b3](https://github.com/google/adk-python/commit/deda5b30e8ff40cb2f6dcb8d4d2b19bc97c5ea57)), closes [#6652](https://github.com/google/adk-python/issues/6652)
- keep session identity across single-turn node contexts ([c602065](https://github.com/google/adk-python/commit/c6020659a09a7d823f59205bde12f948342a3413)), closes [#6691](https://github.com/google/adk-python/issues/6691)
- keep tool calls at most once ([5bcf5cd](https://github.com/google/adk-python/commit/5bcf5cdd18127bb53156c5e7902d998a91fe261b))
- **live:** stop background tool tasks when a live agent run ends ([0088abb](https://github.com/google/adk-python/commit/0088abbe6651da6a6c644cace087a79d6a674821))
- **live:** stop live runs from writing back into the caller's RunConfig ([0b39e72](https://github.com/google/adk-python/commit/0b39e7280a14dd61d0faa3efef9c95206363f60c))
- make SqliteSessionService state merges use dict.update() semantics ([e4ba704](https://github.com/google/adk-python/commit/e4ba7040fb12f9a3ea468052567ec174dc31d443)), closes [#6728](https://github.com/google/adk-python/issues/6728)
- **mcp:** evict idle sessions from the MCP session pool ([69a3ca5](https://github.com/google/adk-python/commit/69a3ca5e119a821bc375246f0bfa2e9e2cfefc79))
- only attach default credentials to https endpoints ([5d3d152](https://github.com/google/adk-python/commit/5d3d1524debbff4158274f28e2798435bde13b0d))
- only emit --gemini_enterprise_app_name for adk_version >= 2.2.0 ([00932e6](https://github.com/google/adk-python/commit/00932e617e3772381f16dbc9b9ddd06b50b2a5cb))
- pass file metadata tuple to Azure for PDF uploads ([ff4567d](https://github.com/google/adk-python/commit/ff4567df38d0cc5f1cd4f9423e416910cbe6ff2c)), closes [#6539](https://github.com/google/adk-python/issues/6539)
- percent-encode path parameter values in RestApiTool ([25f53bd](https://github.com/google/adk-python/commit/25f53bdc81f2e350285c91679885e8d8ba740f72))
- point to Gemini Enterprise registration docs after agent_engine deploy ([1d2d1ed](https://github.com/google/adk-python/commit/1d2d1eda3c9b795cd90ad643390f4da5a8cd27bf)), closes [#6633](https://github.com/google/adk-python/issues/6633)
- populate developer_instructions when invocation_events is empty ([69c9090](https://github.com/google/adk-python/commit/69c909000f73e47272fcab508e96f184c5cd81b3)), closes [#5593](https://github.com/google/adk-python/issues/5593)
- prefer the function response's own invocation over a caller-supplied id on the node path ([4d0d63c](https://github.com/google/adk-python/commit/4d0d63c74cf161f90ef33c7b310b6fd6641d3249))
- prevent contextvars leak across async generators ([bb86bdd](https://github.com/google/adk-python/commit/bb86bdd737c1792d40e05c1d388d9ad4020aa702)), closes [#5722](https://github.com/google/adk-python/issues/5722)
- prevent duplicate function execution when support_cfc is enabled ([c986ff0](https://github.com/google/adk-python/commit/c986ff0fceedef2107485cf136dc3b70acec32d8))
- prevent duplicate OAuth prompts and fix tool resumption ([eaad2f8](https://github.com/google/adk-python/commit/eaad2f83b93d7e0c678336923ca5be7a3b9d1260))
- prevent duplicate synthetic user event on single-turn agent resumption ([e753651](https://github.com/google/adk-python/commit/e753651b7df26febe00bde2cb043225e644cd207))
- prevent prompt injection via GitHub event data in workflows ([4f558f1](https://github.com/google/adk-python/commit/4f558f19d4dc0916437269dade3b03554e9ab0f4))
- rank and bound the results of InMemoryMemoryService.search_memory ([f3fae72](https://github.com/google/adk-python/commit/f3fae72e6a52f33c4fca4a7b90d37270c64990be))
- re-raise agent errors from the synchronous Runner.run() ([b55000d](https://github.com/google/adk-python/commit/b55000d9dce8960eeca8834dec7921597c532e0c))
- read long-running function name from data, not metadata ([029c17b](https://github.com/google/adk-python/commit/029c17b3384f4ad584c4b4f6f83335be98a04f02)), closes [#6295](https://github.com/google/adk-python/issues/6295)
- redact credentials from DebugLoggingPlugin output file ([a86bd25](https://github.com/google/adk-python/commit/a86bd2525042e806e422c8b0c3e78dba9d3e6547))
- redact credentials from generate_content_config.http_options in debug logs ([1cd6f46](https://github.com/google/adk-python/commit/1cd6f464e5b8ececa957928ca67d65145be558ab))
- reject negative recent-event limits ([26110c7](https://github.com/google/adk-python/commit/26110c75596cb7743e0614eebb8267221003303a))
- reject tool confirmations arriving over A2A ([9e9eaa6](https://github.com/google/adk-python/commit/9e9eaa69bdcc16f004af9c63f40f1dae6404c29b)), closes [#6461](https://github.com/google/adk-python/issues/6461)
- report root_agent type mismatch instead of 'No root_agent found' ([4f07c93](https://github.com/google/adk-python/commit/4f07c93b6ef760626906a2851b8f151500d13982)), closes [#6606](https://github.com/google/adk-python/issues/6606)
- resolve Claude 5 model names in the LLM registry ([42a4a5f](https://github.com/google/adk-python/commit/42a4a5f0e723ce71d0a1f34ae9c55c85a419ab67))
- resolve NameError in legacy create-eval-set route ([023f45c](https://github.com/google/adk-python/commit/023f45c3e5846c3e72525b53f16ef018b5ecdaa6))
- resolve nested provider behind litellm_proxy prefix ([602e58d](https://github.com/google/adk-python/commit/602e58db7171a49086d0c5b2b3e0fd8a8bd6d681)), closes [#6538](https://github.com/google/adk-python/issues/6538)
- resolve server disconnect logs ([3f2d399](https://github.com/google/adk-python/commit/3f2d399cd9e3945e4015b78ade8ecf3a6c2603e3))
- resolve systemic parts[0] indexing bugs ([2109ea9](https://github.com/google/adk-python/commit/2109ea96e1c7431225e57fb6db6c4c116e632867)), closes [#6616](https://github.com/google/adk-python/issues/6616)
- Restore `invocation_context.branch` from session history when executing a non-root agent node or resuming a sub-agent in `Runner` ([676d1e7](https://github.com/google/adk-python/commit/676d1e76457db9dd49ca23d49770136e5aef10a1))
- restrict unpickling of legacy v0 session event actions ([97c2af0](https://github.com/google/adk-python/commit/97c2af0bc294aa77744ddf5fb0c207f60ebf19fc)), closes [#5634](https://github.com/google/adk-python/issues/5634)
- resume an invocation whose user message leads with a non-text part ([6d8c588](https://github.com/google/adk-python/commit/6d8c588e12870ddeacc884bb3ee992d6464301d3))
- revert the A2A guard that broke every HITL tool confirmation ([9a32eba](https://github.com/google/adk-python/commit/9a32eba1e271981fd079bdee489b9159c6ecc72a))
- route workflow IDs and retry jitter through platform seams ([8f85107](https://github.com/google/adk-python/commit/8f85107cca7fa9d88eea5ca60e32b85173b4ec7c))
- **samples:** widen numeric tool parameters to match their docstrings ([0c67410](https://github.com/google/adk-python/commit/0c67410a66275aa989f3c10d4d083bff5f8d6139))
- sanitize state deltas before writing them to JSON state columns ([3f9e6be](https://github.com/google/adk-python/commit/3f9e6bec37cd66315d619a2dbb339f545c86e09a))
- send the required list on a CrewAI or LangChain function declaration ([186d9f7](https://github.com/google/adk-python/commit/186d9f739d1dc3655d88bffd96c943db05a87d7d))
- **sessions:** dedupe InMemorySessionService events by equality not id ([c9323d5](https://github.com/google/adk-python/commit/c9323d586153eab8cae31bc33f1114c8849cdd80))
- **sessions:** load legacy v0 event actions with the restricted unpickler ([fb15710](https://github.com/google/adk-python/commit/fb15710548e36a25605f0d0e3b346123e7c88356))
- **sessions:** stop dropping event actions on v0 PostgreSQL migration ([e3ae4ac](https://github.com/google/adk-python/commit/e3ae4ac2b431c589887e9bf2d70b452e8360f0c5))
- **skills:** skip search results that fail frontmatter validation ([3c977bc](https://github.com/google/adk-python/commit/3c977bc2ef31cf0fd7d94592f660cec5fc68b722)), closes [#6838](https://github.com/google/adk-python/issues/6838)
- skip non-agent directories in AgentLoader.list_agents() ([caac070](https://github.com/google/adk-python/commit/caac070837e9001367fd90846e896577cba3a92e))
- skip non-numeric response keys in generate_return_doc ([920bc3e](https://github.com/google/adk-python/commit/920bc3e14b5e2b3ee61d3809c42d8c8f7d972bfb)), closes [#6174](https://github.com/google/adk-python/issues/6174)
- stop re-sending thought summaries as conversation history ([e4f5900](https://github.com/google/adk-python/commit/e4f59004f74c4151d2ba5c6f02872634637de77c))
- stop re-sending thought summaries as conversation history ([3c1b1bc](https://github.com/google/adk-python/commit/3c1b1bc236122a81fc5a70e30d5d6b48d1b2c029))
- stop RemoteA2aAgent forwarding credential requests to the remote peer ([2aea859](https://github.com/google/adk-python/commit/2aea8595fb1c5e0fddef7893a1985dc96dc82692))
- stop the session liveness probe from crashing when the SDK moves its streams ([d9f4d3d](https://github.com/google/adk-python/commit/d9f4d3d288257593471fc708a9ab851779005ca5))
- strip internal planning tags from PlanReActPlanner output ([ac8dad2](https://github.com/google/adk-python/commit/ac8dad258065ff58e91a1ca44afc72368250d241)), closes [#3378](https://github.com/google/adk-python/issues/3378)
- **telemetry:** End the inference span when the inference ends ([ecc730c](https://github.com/google/adk-python/commit/ecc730ceac33c2f71fdecdb55b6c095241888914))
- **telemetry:** record call_llm span attributes when a plugin short-circuits the model call ([0321136](https://github.com/google/adk-python/commit/0321136775fac560142dc1135bec34f00e88a69a))
- **tools:** report no match instead of raising on empty retrieval ([99660d9](https://github.com/google/adk-python/commit/99660d90308f37d377efcbb08318dbac1ec1fba9))
- **tools:** run AgentTool nested agent in unary mode ([0d5752b](https://github.com/google/adk-python/commit/0d5752bb5d7d33b94462082a00157b60213286a9))
- **tools:** run an agent tool under the caller's RunConfig ([983c280](https://github.com/google/adk-python/commit/983c28056f664b6229a541bcbd442cd20c1b6345))
- trigger Gemini 3.x Live response after sending conversation history ([7616c78](https://github.com/google/adk-python/commit/7616c78a1e94a8ff6751617ea5176a05e94e3939))
- update unit guide skill to exclude internal implementation details ([0c0296c](https://github.com/google/adk-python/commit/0c0296cfcf60bbc87ff75b19e46550269ab8a1da))
- use OAuth2 client-credentials scheme for OpenAPI SA helpers ([9897217](https://github.com/google/adk-python/commit/989721746aba65e90f644e51606375699175f709)), closes [#6656](https://github.com/google/adk-python/issues/6656)
- use Unicode-aware keyword extraction in InMemoryMemoryService ([b8ea1e8](https://github.com/google/adk-python/commit/b8ea1e8eba45c191776529392d808ab3485c6b6f)), closes [#5501](https://github.com/google/adk-python/issues/5501)
- validate session initialization events ([3fa71b6](https://github.com/google/adk-python/commit/3fa71b6349dbabb47dff5a3e9dea689cae6904e9)), closes [#5290](https://github.com/google/adk-python/issues/5290)
- validate SQL identifiers in Spanner search tool ([8d2f277](https://github.com/google/adk-python/commit/8d2f2779e6143aaa75460ca698476b4114759d5b)), closes [#5913](https://github.com/google/adk-python/issues/5913)
- **workflow:** cancel parallel worker items when the worker is cancelled ([dec729f](https://github.com/google/adk-python/commit/dec729f15721bcc78aac75f133aa6e153e9e4af0))
- **workflow:** declare abc.ABC on BaseNode so abstract subclasses type-check ([f3b59fd](https://github.com/google/adk-python/commit/f3b59fd62e51cb684d853995b5b3b42b4b11041f))
- **workflow:** do not act on function calls in partial events ([816ada5](https://github.com/google/adk-python/commit/816ada531870e36c57e3f100e96c63bbf94ad222)), closes [#6583](https://github.com/google/adk-python/issues/6583)
- **workflow:** honor START as a satisfied JoinNode predecessor ([d8df6fd](https://github.com/google/adk-python/commit/d8df6fd1fe8fa52ed9d6c275f4c5deb8464079a4))
- **workflow:** resume node auth from the node's own auth config ([5b59139](https://github.com/google/adk-python/commit/5b59139e0ec944a8618d4a1df4182db464337566))
Performance Improvements
- buffer streamed function call arguments instead of concatenating ([f604de2](https://github.com/google/adk-python/commit/f604de2b960513ab0f1eff7f6bad9088d6210497))
- key the Pub/Sub publisher cache on its options' value ([51231cd](https://github.com/google/adk-python/commit/51231cd4acd8c5a28fc6db1960c4fa83e242a4d6))
- remove redundant event scans in prompt assembly ([d7adc1c](https://github.com/google/adk-python/commit/d7adc1ce3e9dab246e5baacd8b4579b23ebecd54))
- remove redundant event scans in prompt assembly ([e66fdd2](https://github.com/google/adk-python/commit/e66fdd2b2be25ddc740a988042c1dd91e6ac6662))
- resolve the optional id-pairing providers once, not per request ([203461c](https://github.com/google/adk-python/commit/203461cdc407eb6f7864847529dfc3ae7c3d72d4))
- run local code execution in a plain child interpreter ([c244a9c](https://github.com/google/adk-python/commit/c244a9c8330589d93046823ea21da80ae33a1406))
- run the Google credential refresh off the event loop ([2aa2b46](https://github.com/google/adk-python/commit/2aa2b469b062cf94718edd6b2ebdfb52cfcad076))
Documentation
- add audio_stream_end documentation for realtime input ([17cb265](https://github.com/google/adk-python/commit/17cb2657cef9503b94598348e13cebdcbc1a2d3a))
- correct node schema docstrings about which variants validate ([e649a38](https://github.com/google/adk-python/commit/e649a382aae18ba0a495b837e009ca20ec6a6570))
- correct the documented contract of the invocation-subtree event filter ([be8fcf4](https://github.com/google/adk-python/commit/be8fcf4dd692d8098f4954ceee9f2ea2f3409b44))
- fix typos and grammar in README ([ffe518a](https://github.com/google/adk-python/commit/ffe518aff062932671ee78adabb4a5f55aca23c6))
- **guides:** add developer unit guide for BaseCodeExecutor ([b370fc0](https://github.com/google/adk-python/commit/b370fc00d1a54f4629b73b74ce70fae13ac75304))
- **guides:** add developer unit guide for BasePlanner ([ea23a89](https://github.com/google/adk-python/commit/ea23a89d734eead60f69c0b7f0fb6b13c9624c7a))
- **guides:** add developer unit guide for Runner and Runner Live Streaming ([1d89e0f](https://github.com/google/adk-python/commit/1d89e0ff8dd00ce499e194089903ca183495ed44))
- repair the workflow guides and document BaseNode ([7c7d2ba](https://github.com/google/adk-python/commit/7c7d2baec4316b5689a16d2b19c51d1c5a0d4298))
- tell sample creator skill not to prefix dirs with `$category` or suffix with `_agent` ([50c3edf](https://github.com/google/adk-python/commit/50c3edf1f6487ee0e7b649f63cf993a4fc1255aa))
Bug Fixes
- **deps:** restore the OpenTelemetry 1.42.1 ceiling ([8e6f361](https://github.com/google/adk-python/commit/8e6f3613acb6ec07568a75461b964b311f404132))
- validate session initialization events ([e2b8ace](https://github.com/google/adk-python/commit/e2b8acefa2580b566b6fd9863dda203534294536)), closes [#5290](https://github.com/google/adk-python/issues/5290)
Features
- **live:** use RunConfig.session_resumption.handle when opening a live session ([#6770](https://github.com/google/adk-python/issues/6770)) ([090869b](https://github.com/google/adk-python/commit/090869b9ba2953a29530ece68714fa973e80a151))
- support audio_stream_end for realtime input ([#6699](https://github.com/google/adk-python/issues/6699)) ([5e3b997](https://github.com/google/adk-python/commit/5e3b997f931292ef8b1c36e75bedb576f86645e1))
Bug Fixes
- **live:** stop background tool tasks when a live agent run ends ([#6769](https://github.com/google/adk-python/issues/6769)) ([5fb5ff1](https://github.com/google/adk-python/commit/5fb5ff11ce6c727595c6f426ebbea676af0fe095))
- validate session initialization events (v1) ([#6771](https://github.com/google/adk-python/issues/6771)) ([e7dba7a](https://github.com/google/adk-python/commit/e7dba7a4641b7b97c6b35c9fdc99e4b2d065cdef))
Highlights
- **Models declare their own capabilities**: an agent pairs an output schema with tools when the model actually supports it, instead of ADK inferring support from the model id. ([2aff82c](https://github.com/google/adk-python/commit/2aff82c30923e5f7df5ce4101db52bce82740329), [dc5dbfa](https://github.com/google/adk-python/commit/dc5dbfa2e475f2461177e80f7fa28c96a2bc3592))
- **Tools can return media**: a tool's function response carries images and other media straight back to the model, on Gemini and on Anthropic, LiteLLM, Apigee and OCI alike. ([df9d6de](https://github.com/google/adk-python/commit/df9d6dec58f4cb22a1010b72e9fd8d347ce8145a), [703cf43](https://github.com/google/adk-python/commit/703cf43f6b03550ec2b02def526f3f4ba98f7abd))
- **Conversation history keeps what Gemini needs**: thought signatures, server-side tool call parts, and every result of a parallel function call survive the round trip. ([d4ed347](https://github.com/google/adk-python/commit/d4ed3475397d16f9eb8d851f8945a6ed8121b6a8), [e908137](https://github.com/google/adk-python/commit/e908137125f9e14b3061f45f34f5379b48693313), [93dff41](https://github.com/google/adk-python/commit/93dff41417e81bad6150bd91acf1d73dedc298dc))
- **Jinja2 instruction templates**: pass `use_jinja2=True` to `inject_session_state` and an instruction can use conditionals and loops over session state, with artifacts loaded through a `{{ artifact("name") }}` helper. Jinja2 stays an optional dependency and the regex engine remains the default. ([4a00a34](https://github.com/google/adk-python/commit/4a00a344cfa03062f74e71dac0a5580514d9cea4))
- **Faster startup and hot paths**: `import google.adk` does less work, and the request path avoids Pydantic round-trips and quadratic streaming accumulation in the LiteLLM adapter. ([8806dc2](https://github.com/google/adk-python/commit/8806dc2bd8fb37004dee9ca50d9e774481f89afb), [9e1adde](https://github.com/google/adk-python/commit/9e1addedfff7e35e95a2ad120c8b30fe543af04c), [36fd2c8](https://github.com/google/adk-python/commit/36fd2c8e0cf9dddec66bb0c109518cdc2fbdb3b6))
- **`pyarrow` left the `gcp` extra**: it lives in the new `bigquery-analytics` extra, which takes roughly 50 MB off `pip install google-adk[gcp]`. If you use `BigQueryAgentAnalyticsPlugin`, install `google-adk[bigquery-analytics]`. ([ac71709](https://github.com/google/adk-python/commit/ac717091f6644f348c6f7e65a43cc0475a28fe45))
⚠ BREAKING CHANGES
- **deps:** move pyarrow out of the gcp extra
Features
- accept a pre-configured client on the labs OpenAI model ([461205c](https://github.com/google/adk-python/commit/461205c8bac7f8679dc38a818c7839f18e855e95)), closes [#4180](https://github.com/google/adk-python/issues/4180)
- add express mode telemetry logging for ADK CLI onboarding ([4ccc6be](https://github.com/google/adk-python/commit/4ccc6be6d4229adea8f7738b1444b1683673d145))
- add gen_ai.agent.name attribute to execute_tool spans ([1a80962](https://github.com/google/adk-python/commit/1a80962124d54dbbb052327c00c7ba9f215fb39b))
- add Jinja2 templating with use_jinja2 flag ([4a00a34](https://github.com/google/adk-python/commit/4a00a344cfa03062f74e71dac0a5580514d9cea4)), closes [#2942](https://github.com/google/adk-python/issues/2942)
- add option to save eval results to CSV ([3bbc8ed](https://github.com/google/adk-python/commit/3bbc8ed2cf8c719f163b9a6d9de5833ec05a1675)), closes [#2652](https://github.com/google/adk-python/issues/2652)
- add parent terminal grouping and TTL pruning to ADK CLI telemetry ([2c6a7ff](https://github.com/google/adk-python/commit/2c6a7ffb4a8f46e2bf94359290476a2664ddf8b6))
- **agent:** add native task mode support to root LlmAgent ([dd0de52](https://github.com/google/adk-python/commit/dd0de5229fb21ff93c07da5124a9a0aee82b3eea))
- Allow clients using the load_artifacts_tool to customize how attachment data is fed to the LLM ([b66cba2](https://github.com/google/adk-python/commit/b66cba28097e5922786571bc46224030a9c08d57))
- capture TTY connectivity in CLI environment telemetry ([c12a025](https://github.com/google/adk-python/commit/c12a025184cec7859d829d8ce7178ddbe3e2e302))
- **cli:** auto-discover test_config.json for single eval file in adk eval ([0477e57](https://github.com/google/adk-python/commit/0477e5743bdf5e0cce5a698951c7b70a07baa80a)), closes [#4410](https://github.com/google/adk-python/issues/4410)
- enforce unit guide requirement for new Python files ([942b38d](https://github.com/google/adk-python/commit/942b38df34a3963618f92ced9499b863de5a082d))
- **environment:** Add support for executing skill scripts within an Environment ([fa31b6c](https://github.com/google/adk-python/commit/fa31b6ca9886eb48b9ac9c0dfe4f70c4443e1488))
- **evaluation:** add optional eval set result persistence to AgentEvaluator ([76027dd](https://github.com/google/adk-python/commit/76027ddb2f1f932d45dc0611c07c08b6025c2774))
- **eventarc:** Support Context callables and correct OMIT behavior ([a3bd111](https://github.com/google/adk-python/commit/a3bd11152db6562054db1c509ec44509436d99e7))
- Extend HTTP trace debugging to MCP Toolset operations ([6d8045c](https://github.com/google/adk-python/commit/6d8045c23fe0b6624d2dd928a2a21e1c07ad8957))
- honor model-declared capabilities when pairing an output schema with tools ([dc5dbfa](https://github.com/google/adk-python/commit/dc5dbfa2e475f2461177e80f7fa28c96a2bc3592))
- honor return_direct on Langchain tools wrapped by LangchainTool ([c2249f3](https://github.com/google/adk-python/commit/c2249f390e3d67a6c4eb6aa4dffc7b2aca8c3f13)), closes [#2157](https://github.com/google/adk-python/issues/2157)
- Introduce a capability reporting system for LLM models ([2aff82c](https://github.com/google/adk-python/commit/2aff82c30923e5f7df5ce4101db52bce82740329))
- **labs/antigravity:** allow mode='single_turn' AntigravityAgents to be sub-agents ([6ed484d](https://github.com/google/adk-python/commit/6ed484dc8762efe42cdaf6286c20fbab177ba5e8))
- let McpToolset reuse the MCP server's tool list ([9cd5975](https://github.com/google/adk-python/commit/9cd5975380ad977d7e38f926a1d993eb295c9457))
- let tools return media in the function response ([df9d6de](https://github.com/google/adk-python/commit/df9d6dec58f4cb22a1010b72e9fd8d347ce8145a))
- **live:** forward safety_settings from generate_content_config to the Live API ([0a6d05d](https://github.com/google/adk-python/commit/0a6d05da3b6ce912fa6f53eef1d97f638522817c))
- **plugins:** add BigQuery Agent Analytics delivery and termination observability ([04b8b72](https://github.com/google/adk-python/commit/04b8b72709f6d17b503cf674c8ac1b89798f655e))
- Promote Data Agent tools to stable ([fd33158](https://github.com/google/adk-python/commit/fd33158f3db2cbb2faf9aab9f82836949fa274fd))
- record implicit vs explicit context cache type in analytics ([5072828](https://github.com/google/adk-python/commit/5072828f70ca3c1c9bb98650fb4b596ce3895ba6))
- **skills:** support non-blocking skill loading in async runtimes ([61ddc5f](https://github.com/google/adk-python/commit/61ddc5fa8e850ac9082fc260d26cd10e3388d6e4)), closes [#6057](https://github.com/google/adk-python/issues/6057)
- Stop using the obsolete Gemini 1.x / Gemini 2+ model-id check in ADK ([745de0a](https://github.com/google/adk-python/commit/745de0ac13c4f2d5b3b158cf8431feb3156ea4fa))
- Stop using the obsolete Gemini 1.x / Gemini 2+ model-id check in ADK url context tool ([eaab262](https://github.com/google/adk-python/commit/eaab26219ad4b14c3b4ae1f3d06571e072a830cc))
- support audio_stream_end for realtime input ([0f738a5](https://github.com/google/adk-python/commit/0f738a549413713a059fd24b12e7f34580f6613a))
- Support elicitation_callback in McpToolset ([4824619](https://github.com/google/adk-python/commit/48246195ac55f7cf57c7dbe74c511bf43a787e20))
- **telemetry:** add feature gate for experimental telemetry ([75fb254](https://github.com/google/adk-python/commit/75fb2544e1d4b9e8753f1a30dc4dc3ad4097a7b9))
- **telemetry:** Expand load_skill telemetry ([bddbb3d](https://github.com/google/adk-python/commit/bddbb3dd8cedb3a2e49449573d87ff51f846df40))
- update skill model to include its origin ([08bd589](https://github.com/google/adk-python/commit/08bd5890552d33ed17ae3640c61992cec9065d25))
- warn when agent transfer runs without a context cache config ([0cf10a5](https://github.com/google/adk-python/commit/0cf10a543ec9aef582f83fe216eaa2b7e28d26eb))
Bug Fixes
- **a2a:** adopt a directly supplied agent card's description ([4f58306](https://github.com/google/adk-python/commit/4f583064778bcacd7ea7baa1fbe16fdd0aa2e630))
- **a2a:** flatten human-input responses on resume to avoid mixing them with text ([aec7aa3](https://github.com/google/adk-python/commit/aec7aa33c8c6b16a15dcfb79bd3dd7689c206924))
- add .adk/ to the .gitignore generated by adk create ([374aab3](https://github.com/google/adk-python/commit/374aab372a0359226f52ec921b98741fecf8704d)), closes [#6647](https://github.com/google/adk-python/issues/6647)
- add 20MB file size validation to SaveFilesAsArtifactsPlugin ([9827790](https://github.com/google/adk-python/commit/98277905ba1b3445474dc3334427aad31617573c)), closes [#3751](https://github.com/google/adk-python/issues/3751)
- Add regional and MREP endpoint routing for DataAgentToolset ([20842eb](https://github.com/google/adk-python/commit/20842eb8e035a6e128b7585ca81f4625e00147c2))
- **adk:** share a single component-owner map between the triaging agents ([1ad0543](https://github.com/google/adk-python/commit/1ad05439e0381ca863c182e8051affb4db7fadd1))
- allow injecting credentials into VertexAiMemoryBankService ([18903ca](https://github.com/google/adk-python/commit/18903cadb5968b427220933d5ad1b42ea90dbc2c))
- **artifacts:** list artifacts nested under another artifact from disk ([a5864a0](https://github.com/google/adk-python/commit/a5864a0ed6050c5d3498ceae856f8783746e419b))
- **artifacts:** reject rooted, drive-qualified and traversing artifact paths ([2716ad5](https://github.com/google/adk-python/commit/2716ad55b8e9eb0c4f719f65bdc0b3f2a26cc551))
- **artifacts:** sort and guard GCS artifact version listing ([1f354b8](https://github.com/google/adk-python/commit/1f354b8937c16efbfd689b16ca2d56e77cbe93e8))
- **artifacts:** stop conflating an artifact with the artifacts nested under it ([08d21cc](https://github.com/google/adk-python/commit/08d21cc35569939d033fdac296e349be7c5d2268))
- attribute a compaction summary to the agent reading it ([c20ccef](https://github.com/google/adk-python/commit/c20ccefe5ef5e21f974923b8a8c9c3817e79787b))
- **auth:** set a request timeout on OAuth2 token exchange and refresh ([3f3c8f5](https://github.com/google/adk-python/commit/3f3c8f527d23702ea6e077ead63d32438a85b0bd))
- block the whole standard library in agent-config code references ([a16f6da](https://github.com/google/adk-python/commit/a16f6da3314b8dcd9925884cd6fc7fc9ffdd570d))
- bound Apigee completions HTTP client timeout and redirects ([f57a67d](https://github.com/google/adk-python/commit/f57a67d638a71899404dba2d4899ff42459e9f09))
- bound the entries and bytes read from a skill zip archive ([fa136c4](https://github.com/google/adk-python/commit/fa136c432a416706b12f667110e3742e422c0311))
- **bqaa:** skip synchronous log flush to prevent blocking responses ([6fd7eaf](https://github.com/google/adk-python/commit/6fd7eaf92a59ffb13806281d51628136e812cc6d))
- call build_planning_instruction on custom planners ([2bdf4de](https://github.com/google/adk-python/commit/2bdf4debd0f657a4666471ec0c6dcaadd9c8c51f))
- **ci:** run the update-constraints hook in check mode ([74e7167](https://github.com/google/adk-python/commit/74e7167d13a75b8eaab6e30a7af39e8c55315fc0))
- **ci:** stop CI resolving against half-published PyPI releases ([f4b432d](https://github.com/google/adk-python/commit/f4b432db114e58aa8f406017bf5e1b871d31e1bf))
- **cli:** implement early telemetry recording for long-running web servers and log successful exit code upon routine teardown ([77726c5](https://github.com/google/adk-python/commit/77726c55b33d6da1688a3d6893fe5e474d79116b))
- **cli:** normalize trigger user ids for sessions ([e03dbab](https://github.com/google/adk-python/commit/e03dbab2d480d85f2ae3f61e66e1ace5344d1727))
- **cli:** stream_reasoning_engine raises StopIteration RuntimeError on sync generators ([aa9c187](https://github.com/google/adk-python/commit/aa9c187f46e7ce06cdab28f0dcd51ba7c1497ee7))
- **cli:** track full server duration and log routine Ctrl+C termination as success ([0fcfe99](https://github.com/google/adk-python/commit/0fcfe99a50e75795407af7cd281a4b45580fef44))
- **cli:** update gcloud command to use beta flag ([9630559](https://github.com/google/adk-python/commit/9630559830da28a187ba75ef1c26c64780dd7987))
- coerce non-string enum values to strings on string-typed Gemini schemas ([30f32e3](https://github.com/google/adk-python/commit/30f32e3a9599ee165a323a8c72bfae2bb308cb95)), closes [#3401](https://github.com/google/adk-python/issues/3401)
- collect eval state from workflow nodes ([568b4f6](https://github.com/google/adk-python/commit/568b4f6b54d63dd8f5be16a6b704ecec8816bab3))
- constrain the RPC targets of a network-fetched A2A agent card ([16cbb7d](https://github.com/google/adk-python/commit/16cbb7d1c6020ec9a2d26ef97b6041410f0d256c))
- **core:** stop the Cloud Run sandbox executor waiting forever ([a39e71a](https://github.com/google/adk-python/commit/a39e71aace8490772b9fb554713ba964f7225adf))
- declare the redis extra that RedisSessionService asks for ([957dc2b](https://github.com/google/adk-python/commit/957dc2bd9fae932ee56aa8d4bffeb6331c10607f))
- **deps:** exclude LangGraph releases with unsafe checkpoint loading ([1b12ee3](https://github.com/google/adk-python/commit/1b12ee39ab07897d2290bcce2551625ed422e060))
- **deps:** exclude nltk 3.10.1, which breaks venvs living inside the working directory ([1a0c3bd](https://github.com/google/adk-python/commit/1a0c3bd49f512dc3b01e3e83185a6315ae3e954b))
- **deps:** stop the published constraints from pinning google-adk itself ([c44c543](https://github.com/google/adk-python/commit/c44c543e938d259c4ce145b66c62873bd9d330ec))
- disable dev endpoints for production deployment both AE and Cloud Run ([b795a9b](https://github.com/google/adk-python/commit/b795a9ba8680f70ca4e705a80e4d0951ad0a0e60))
- emit additional_properties with value type schema in dict branch ([93f57f4](https://github.com/google/adk-python/commit/93f57f472796bc8ccdf922fcc085169e1585768a)), closes [#4868](https://github.com/google/adk-python/issues/4868)
- **eval:** fail the eval when an agent crashes before any metric runs ([efeec70](https://github.com/google/adk-python/commit/efeec703dad61357ad1d79860a4696d4801ce487))
- **eval:** grade judge metrics against the criterion's threshold ([bcce415](https://github.com/google/adk-python/commit/bcce415ee80fa008dee796d8a6f24ebb77d6f6f8))
- **eval:** grade rouge metric against its criterion threshold ([83f7912](https://github.com/google/adk-python/commit/83f79123aae4d2473f1fe374a696250cca60de5d))
- **evaluation:** validate path segments in GCS eval set/result managers ([a56f6e1](https://github.com/google/adk-python/commit/a56f6e13ae38296b608808c7a3b37efe4b8c862e))
- fix inconsistencies in sample paper content and naming ([423434a](https://github.com/google/adk-python/commit/423434aa9dbe04837dec84fac9223f3b331f3c25)), closes [#6651](https://github.com/google/adk-python/issues/6651)
- Fix permissions for release cherry pick workflow ([07a37da](https://github.com/google/adk-python/commit/07a37da11bfd96d73d1a78cd9fb0ac1fb4d786b8))
- **flows:** count compositional function calling against max_llm_calls ([bb9709d](https://github.com/google/adk-python/commit/bb9709d74b0ce7c316de162531cb9f7dad28042a))
- **flows:** inject transfer_to_agent tool for HITL confirmation resume ([0897bee](https://github.com/google/adk-python/commit/0897bee6a01928cc89a2ba229d42834f77b33e85)), closes [#5633](https://github.com/google/adk-python/issues/5633)
- gate --sandbox-launcher behind gcloud beta run deploy ([547f1eb](https://github.com/google/adk-python/commit/547f1ebaf42ed5dbc81755bf9dd0919190778ee6)), closes [#6511](https://github.com/google/adk-python/issues/6511)
- guard reads in the local API server against DNS rebinding ([2cf4fd1](https://github.com/google/adk-python/commit/2cf4fd1ddcceea93d60df8eb6c0a7e775e867230))
- handle non-numeric OpenAPI response keys in return-doc generation ([b5be64c](https://github.com/google/adk-python/commit/b5be64c075ae3068d96bc3e0bf6930e4526fce55))
- handle optional and union pydantic models with string annotations ([94d08cd](https://github.com/google/adk-python/commit/94d08cd69ff97d8c59ac9af4d26e40316bbb3102))
- honor Apigee request timeouts ([2547db6](https://github.com/google/adk-python/commit/2547db61dd4599d5e0ac2f77cd0b45f5ded6b498))
- honor num_recent_events=0 in VertexAiSessionService.get_session ([923dee7](https://github.com/google/adk-python/commit/923dee79707049d93e94d081a90f7aa70e0896f2))
- ignore unsafe A2A peer-supplied event actions metadata ([0ba7d3c](https://github.com/google/adk-python/commit/0ba7d3cba7004c0fcc0a05f1f4cfb6ea78e38f91))
- import jinja2 lazily so it is not a required dependency ([f828667](https://github.com/google/adk-python/commit/f828667ee07f620e4680dd7acd460ee324302163))
- install every optional runtime dependency with the all extra ([f5c09dc](https://github.com/google/adk-python/commit/f5c09dce1120bdc14f12026dd5fb6a3ee401b8dc))
- isolate per-toolset failures in additional-tools resolution ([cdf895f](https://github.com/google/adk-python/commit/cdf895fe2c5f621fa522b2f938bde7ee7ffe16ea))
- keep agent instructions out of the published A2A agent card ([efdecf4](https://github.com/google/adk-python/commit/efdecf4c457639fb8bee793dc2c7b54e59140a94))
- keep preloaded context turn-scoped ([be103fb](https://github.com/google/adk-python/commit/be103fbd2f2ef4804afd691e37de53def2b4f934))
- keep regular-tool FRs on mixed task turns ([4cab3ac](https://github.com/google/adk-python/commit/4cab3ac1bfb7ad2be264cf2adae32685fe695338)), closes [#6581](https://github.com/google/adk-python/issues/6581)
- keep server-side tool call parts in conversation history ([e908137](https://github.com/google/adk-python/commit/e908137125f9e14b3061f45f34f5379b48693313))
- keep subpackages reachable as attributes of a lazy package ([ae5118d](https://github.com/google/adk-python/commit/ae5118d5b20d031def0d60f2439b6748428656c8))
- keep thought signature parts in conversation history ([d4ed347](https://github.com/google/adk-python/commit/d4ed3475397d16f9eb8d851f8945a6ed8121b6a8))
- keep thought signatures when merging streamed text ([fae470f](https://github.com/google/adk-python/commit/fae470f7bd8fd96341e78af6f069f5410d65f3d8))
- Key directory-loaded skill resources with forward slashes ([bc2c97c](https://github.com/google/adk-python/commit/bc2c97cbdf086c08aca345225a63e69992d28341))
- key in-memory memory store by app_name and user_id tuple ([fd8f7eb](https://github.com/google/adk-python/commit/fd8f7eb2a31e62c892751943b941e141d2e87f59))
- kill runaway code on timeout in container and local executors ([27548e3](https://github.com/google/adk-python/commit/27548e392f8a8503609a6abce0fb8081e8fb24f5))
- **labs/antigravity:** report node input and output from AntigravityAgent ([fd7df0e](https://github.com/google/adk-python/commit/fd7df0e75bd0c768f8669c51d9e5261705b4ab76))
- lift file references and nested parts out of tool results ([22f5546](https://github.com/google/adk-python/commit/22f55462fdbf629eee386a27f1159de15c2edbdd)), closes [#2577](https://github.com/google/adk-python/issues/2577)
- **litellm:** convert http_options.timeout from milliseconds to seconds ([e74917e](https://github.com/google/adk-python/commit/e74917e71905bb9d341302ce059c46245b7b727f))
- **live:** end the Live agent when `task_completed` is called in parallel ([cebfd74](https://github.com/google/adk-python/commit/cebfd74afc786a573fbf425a52aefe3873d38e68))
- **live:** transfer to the target agent regardless of function response order ([c198695](https://github.com/google/adk-python/commit/c1986951236b96db4726afd5e920ad7e9783fef2))
- lower oneOf to anyOf so a union schema reaches Gemini intact ([4da8dd7](https://github.com/google/adk-python/commit/4da8dd7f8bff9a9ff84a23cb707ac5696512cb60))
- make advertised tool names match the names tools are registered under ([b26d4f6](https://github.com/google/adk-python/commit/b26d4f67cb99046be5819c7da163cc79a7c2acbc))
- make parallel worker failure propagation test deterministic ([308c818](https://github.com/google/adk-python/commit/308c818867ecefdf68b13eca73a11e5b618b6746))
- mark the session type decorators as safe for statement caching ([e182146](https://github.com/google/adk-python/commit/e182146f9532474f8d2224368b07ba058223fffa))
- **mcp:** bound the wait for an MCP session to become ready ([de200b5](https://github.com/google/adk-python/commit/de200b50bc6e7d37ad6665e2a2a852221e4d18f6))
- **mcp:** reject stdio MCP servers declared in agent configs by default ([a61d8ec](https://github.com/google/adk-python/commit/a61d8ecf294515016a42080cc833fd8f73915695))
- **memory:** scope Vertex RAG retrieval to the requesting app and user ([fbeab00](https://github.com/google/adk-python/commit/fbeab000103fb67440b2ccbbc566a1b44723e643))
- **models:** honor an LLM registered after that name was resolved ([03f44c8](https://github.com/google/adk-python/commit/03f44c8e108e43f13c1de5acb53a88940f9e77f1))
- **models:** keep streamed usage metadata when a later chunk reports none ([aebb2a1](https://github.com/google/adk-python/commit/aebb2a13b35159723286caf00e736811dfa415c7))
- **models:** report a missing Anthropic credential when the client is built ([42f220a](https://github.com/google/adk-python/commit/42f220a61bb620e3c08d4e4d08098ea5857c436e))
- **models:** report Anthropic thinking tokens without double counting output ([a95b008](https://github.com/google/adk-python/commit/a95b008f91d82f1acd8c686e5a0d861aed707c20))
- **models:** use the reported total token count for interactions usage ([955325d](https://github.com/google/adk-python/commit/955325ddbbe7163d19bd32f3ac822eb3c498f6ee))
- **models:** wrap Anthropic rate limit errors ([cde301b](https://github.com/google/adk-python/commit/cde301ba68dc2970465b1b847fa805aad6f1f2ed))
- narrow broad except in OAuth2 credential refresher ([7d16478](https://github.com/google/adk-python/commit/7d164786f4cc97df7bfb53c2793a55963a481260))
- omit HTTP options from Gemini debug logs ([d63a255](https://github.com/google/adk-python/commit/d63a255880115d98bcc1f7260b461d2d338bd270))
- order database sessions deterministically ([8455cf8](https://github.com/google/adk-python/commit/8455cf8afcbbda23f4ebdddcaa83cdbea3124562)), closes [#6272](https://github.com/google/adk-python/issues/6272)
- order list_sessions results by last update time ([53e1afb](https://github.com/google/adk-python/commit/53e1afbcb5b211ad097985594a038bab49e2f509)), closes [#6272](https://github.com/google/adk-python/issues/6272) [#6431](https://github.com/google/adk-python/issues/6431)
- prefer application/json for OpenAPI return type docs ([9b4b2c5](https://github.com/google/adk-python/commit/9b4b2c51c64c8066b770ed6e2e7287ec32703697))
- preserve all tool results for parallel function calls ([93dff41](https://github.com/google/adk-python/commit/93dff41417e81bad6150bd91acf1d73dedc298dc)), closes [#6589](https://github.com/google/adk-python/issues/6589)
- preserve function-tool preflight in thread pool ([0156bc5](https://github.com/google/adk-python/commit/0156bc5a91845930e233ec04f5c725f9bf0be3ed))
- preserve per-part media fields across A2A conversion ([1a9d003](https://github.com/google/adk-python/commit/1a9d003a6ac30bac8ed3b64ddd9ab0425d48021b))
- preserve required body properties ([9b31268](https://github.com/google/adk-python/commit/9b31268d17d9dc000914ee515d458963ea0dca53)), closes [#6503](https://github.com/google/adk-python/issues/6503)
- preserve turns when stale compaction loses ([40ccbee](https://github.com/google/adk-python/commit/40ccbeec6f23939cd676ecc43ab1b99dc2774616))
- prevent update_constraints.sh from rewriting files when dependencies are unchanged ([470d59e](https://github.com/google/adk-python/commit/470d59e4a3a0edc7d906dfa02228ddde5c8dad7d))
- propagate context cache config to the AgentTool sub-runner ([5835f5a](https://github.com/google/adk-python/commit/5835f5a4e5cf8334573e8bac6a76a69187cfa2c9))
- propagate context cache config to the AgentTool sub-runner ([9488408](https://github.com/google/adk-python/commit/948840820095b9bb7d1e5a5b906b46201d5c11bd))
- prune orphaned function responses instead of failing the request ([73e8625](https://github.com/google/adk-python/commit/73e862546c077e4416667bc422131efa6b0f1477))
- read and write eval data files as utf-8 ([2e878ed](https://github.com/google/adk-python/commit/2e878ed4120b1009080ec4bd189cf8b436d03ccf))
- redact credential values from auto-tracing span attributes ([fd44a63](https://github.com/google/adk-python/commit/fd44a633d63af0ea23edfc8c7e20f01e2ffd702b))
- redact database password from session service errors and logs ([4ad3ecc](https://github.com/google/adk-python/commit/4ad3ecccec39d43f7256a1f8fa4e764716012d51))
- redact secret credentials from AuthCredential repr and error messages ([beb66ee](https://github.com/google/adk-python/commit/beb66ee15de58f5b773efce8bd63b94c3e5f0532))
- refuse MCP tools that take a reserved ADK tool name ([77d4647](https://github.com/google/adk-python/commit/77d4647c8ec771600bb822bd33d57929d046317c))
- Reject reserved ADK tool names in McpTool initialization ([2785aa9](https://github.com/google/adk-python/commit/2785aa9a5d2a3f71d85a1c05ae246c1cd2ad1697))
- remove invalid event from 10_burgers sample test trace ([6930be4](https://github.com/google/adk-python/commit/6930be4305238660ad5cae7f50f44f400dee2c31))
- resolve Claude 5 model names to the Claude LLM class ([e300ae7](https://github.com/google/adk-python/commit/e300ae7aa6a50ec0f71c01dc3b7291f4111a3f90))
- resolve GitHub Actions CI collection and flakiness issues ([4e65350](https://github.com/google/adk-python/commit/4e65350eeee3c9fd075986464dffcffe68ea4dbd))
- resolve shared-state concurrency contention in GCP auth provider using thread-local REST client caching ([b1c6f44](https://github.com/google/adk-python/commit/b1c6f44da559bba167d0013de3ea82e5ca466444))
- resolve zizmor security findings in GitHub Actions workflows ([0075954](https://github.com/google/adk-python/commit/00759548aa8978257e31daf9681ba6ef3092c5f4))
- restrict builder YAML code references to the app being edited ([8995005](https://github.com/google/adk-python/commit/899500510d6820734d2c83857aea9f958dea8ed5)), closes [#5292](https://github.com/google/adk-python/issues/5292)
- return schema validation feedback to models ([b5b27cb](https://github.com/google/adk-python/commit/b5b27cb074d00f2e6889098514d8f716bc1cdfad))
- revert runtime behavior changed by the strict-typing pass ([3eae315](https://github.com/google/adk-python/commit/3eae315d367e1679fb712f78312a6170c36ea62b))
- rollback reject reserved ADK tool names in McpTool initialization ([53b8a4d](https://github.com/google/adk-python/commit/53b8a4d6daf1df9595e80790bcb1f1ecf8b9c2b4))
- route apigee, o-series and unlisted LiteLLM provider models ([d58caa6](https://github.com/google/adk-python/commit/d58caa6c7804e613609e0d1a66cc0194a17cac3b))
- run synchronous OAuth2 token calls off the event loop ([b0f52f0](https://github.com/google/adk-python/commit/b0f52f0d970e16877d748284b6a68664385fb97f))
- **samples:** fail the maintenance run when issue discovery dies mid-page ([cf42e86](https://github.com/google/adk-python/commit/cf42e866cd755505e6571a9b830d1ee1d7df4631))
- **samples:** make the human-in-the-loop sample respect the human's decision ([d92bb42](https://github.com/google/adk-python/commit/d92bb42ccfeac7255ad367974d79629ef368db32))
- **samples:** make the MCP auth sample actually enforce auth, move MCP samples off the deprecated toolset name, and correct code execution claims ([c840dbe](https://github.com/google/adk-python/commit/c840dbe991dfb77c0ba2b61317913e64f0bab159))
- **samples:** repair integrations samples that no longer run against the current API ([64dddf2](https://github.com/google/adk-python/commit/64dddf2bf3cb98db7a504bde681642aa729d6cf9))
- **samples:** repair the adk_team samples against the current API ([41ec592](https://github.com/google/adk-python/commit/41ec5926ab4eb57f9dfd1aa92498bb882abf53be))
- **samples:** repair the core, tools, plugins and skills samples ([c620a73](https://github.com/google/adk-python/commit/c620a7347c30bd2ee04d9612518b185ce69d728a))
- **samples:** repair the session database migration recipe ([161f2b3](https://github.com/google/adk-python/commit/161f2b32b45bf47e765570584c7e7467cb55bbdd))
- **samples:** repair the workflow samples that produce the wrong output ([a308848](https://github.com/google/adk-python/commit/a3088489696f90f82fbb44f46c766d3cfcb469b5))
- **samples:** report failed stale agent audits and exit non-zero ([5418b73](https://github.com/google/adk-python/commit/5418b731564743aa7b981fd77741fb1cb5242faa)), closes [#6520](https://github.com/google/adk-python/issues/6520)
- **samples:** separate skipped from failed issues in the monitoring agent ([d8d8a6e](https://github.com/google/adk-python/commit/d8d8a6ef16eebf925e7ef8229a883f833d47bc4d))
- scope custom metrics per registry and trust only the config path ([5d2aca0](https://github.com/google/adk-python/commit/5d2aca08eb47e78d5915cd27c41db1541d9b18f8))
- scope file artifact reads and deletes to the requesting app ([c27d868](https://github.com/google/adk-python/commit/c27d8688ed9ea619587ad96cbfd641c34dd7340c))
- scope LangGraph checkpointer thread id to app and user ([19e2a72](https://github.com/google/adk-python/commit/19e2a7283f1de16e206f84ade687f9f16f0274cb))
- scope skip_summarization text-append to AgentTool ([84c7711](https://github.com/google/adk-python/commit/84c771105294e1c3dd7620c5f775e4ce0c1b3992)), closes [#6230](https://github.com/google/adk-python/issues/6230)
- Secure and harden FileArtifactService against tampered metadata and partial writes ([c567203](https://github.com/google/adk-python/commit/c5672030b7b9c76967a18665120c8ac36e5c7fef))
- select the mTLS endpoint only when a client certificate exists ([f324d1b](https://github.com/google/adk-python/commit/f324d1beed830c35d00727ddb973a46cb644007f))
- send media attached to a tool response to non-Gemini models ([703cf43](https://github.com/google/adk-python/commit/703cf43f6b03550ec2b02def526f3f4ba98f7abd))
- serialize merged tool calls instead of recording a placeholder ([6ec23cc](https://github.com/google/adk-python/commit/6ec23ccbb8e7c5e07f06493f49559382bfb103bc))
- **sessions:** make event reads deterministic and timezone-correct ([4ca975e](https://github.com/google/adk-python/commit/4ca975eb9acd30a64b2c8615a93d31dada63052c))
- **sessions:** store and filter event timestamps in UTC ([1b8ed3d](https://github.com/google/adk-python/commit/1b8ed3d9c0b125852df1902dd32b65bcab63ce1d))
- **skills:** load binary references and assets as bytes instead of skipping them ([3f21e89](https://github.com/google/adk-python/commit/3f21e891d74a8dc20b8af525d5b848dfe0ab14b3))
- stop live tool execution from bypassing run_async ([8b9d222](https://github.com/google/adk-python/commit/8b9d22228c3503376e121bfe6720c0bf38ba076f))
- stop LlmAgent resume path from ending parent on pause ([3bb1011](https://github.com/google/adk-python/commit/3bb10115d3ae69cfc42bebcdfa4a935031c8e1a1)), closes [#6017](https://github.com/google/adk-python/issues/6017)
- stop logging the full live LlmRequest in base_llm_flow ([6fb5e04](https://github.com/google/adk-python/commit/6fb5e04fcd68de404e1714a4fcdb7f3d17914c8c))
- stop marking defaulted output_schema fields as required ([d4ec2fc](https://github.com/google/adk-python/commit/d4ec2fc382db84362d6116d424a5eb56ebd14403))
- stop per-run HTTP options and labels leaking onto the agent ([8160d47](https://github.com/google/adk-python/commit/8160d47805a8ae16befd29ac847f280b7b5a40a8))
- Stop re-validating already-consumed tool confirmations ([76d5723](https://github.com/google/adk-python/commit/76d5723f74217750d874118fda2bd31befd9f8b6))
- stop request assembly writing into the agent's own config ([0730d73](https://github.com/google/adk-python/commit/0730d73cb183403dd1afe92393b9fbf513a9073d))
- strip markdown and typographic decoration from rubric text ([bf8388a](https://github.com/google/adk-python/commit/bf8388aaed968c11552977799899b242df1fdab2)), closes [#6072](https://github.com/google/adk-python/issues/6072)
- support fallback OAuth token and prefixless credential lookups ([f4e7233](https://github.com/google/adk-python/commit/f4e7233469e3595336dfb0d84c281b2f6245ce4c)), closes [#4712](https://github.com/google/adk-python/issues/4712)
- Support multi-content responses from agents within AgentTool ([e805872](https://github.com/google/adk-python/commit/e8058726c8735bc3f58c43f5ebf215d83a76e8cd))
- Support multi-content responses from agents within AgentTool ([544831c](https://github.com/google/adk-python/commit/544831c042640cf68a596c73551ed66e7e5c91fd))
- **telemetry:** mark failed tool spans as errors and fix provider naming ([6396ce6](https://github.com/google/adk-python/commit/6396ce60f9e3f6d6b20aaa3d108ed8094d9094dc))
- **telemetry:** summarize inline binary data instead of writing it to a span ([fbf5bd5](https://github.com/google/adk-python/commit/fbf5bd5fad4621bf4187c231846baedc90ea6d40))
- **test:** tolerate both click exit codes when a group is invoked without a subcommand ([bb9465b](https://github.com/google/adk-python/commit/bb9465bc486abf963f2d282016e860104d38b154))
- **tools:** recognize Context | None as the context parameter ([c457556](https://github.com/google/adk-python/commit/c4575560e6e58415a854e31ffbbcc2e36ac46f14))
- **tools:** stop gcs clients being shared across credentials ([3d29750](https://github.com/google/adk-python/commit/3d2975025bfecd5fe63f1669cf3336c7340f02ac))
- Update CI workflow to use uv and adjust codespell configuration ([566fca3](https://github.com/google/adk-python/commit/566fca3fa9ac35c812a3b9a1804a130d9b726ed4))
- use _GCLOUD_CMD for gcloud calls in GKE deploy on Windows ([f0b3ca6](https://github.com/google/adk-python/commit/f0b3ca601adee824d400ed555868155188e41535))
- Use official SDK for credential finalization in GCP auth sample ([6ccb837](https://github.com/google/adk-python/commit/6ccb83734ed22e79737406a54a9a205f3feed0ab))
- use typing.Optional in cleanup_unused_files to fix parse error ([cbedafd](https://github.com/google/adk-python/commit/cbedafd9e4c18d462dc571e1bb079177a496ef51))
- validate audio sample rates ([d24c84c](https://github.com/google/adk-python/commit/d24c84cdd90d8b2cc78f4162c42d14b53b8f37d6))
- validate skill name before building Agent Registry skill URL ([11101ac](https://github.com/google/adk-python/commit/11101acc681022d5b06e9ddcb99ca86f0e5c35e8))
- validate urls before computer use navigate opens them ([b0fff3f](https://github.com/google/adk-python/commit/b0fff3f02d0a4f573c3ef17d6afef4a483c1efdd))
- wire App plugins through eval paths ([73ecb5b](https://github.com/google/adk-python/commit/73ecb5b535a7fde3e604eeb1148442f9cc5699c4)), closes [#5503](https://github.com/google/adk-python/issues/5503)
- **workflow:** keep jittered retry delay within max_delay ([b333c85](https://github.com/google/adk-python/commit/b333c859084f9ca036887e42269a5543ade8c7e3))
Performance Improvements
- avoid Pydantic deep-copy / dump-validate round-trips and precompile regex ([9e1adde](https://github.com/google/adk-python/commit/9e1addedfff7e35e95a2ad120c8b30fe543af04c))
- avoid quadratic streaming accumulation in the LiteLLM adapter ([36fd2c8](https://github.com/google/adk-python/commit/36fd2c8e0cf9dddec66bb0c109518cdc2fbdb3b6))
- drop use_attribute_docstrings from LlmCapabilities ([d42e222](https://github.com/google/adk-python/commit/d42e222c4f32763dcd2eaa4193a97b37d43abda1))
- improve adk import loading ([8806dc2](https://github.com/google/adk-python/commit/8806dc2bd8fb37004dee9ca50d9e774481f89afb))
- memoize the model adapter resolved from LlmAgent.model ([490946b](https://github.com/google/adk-python/commit/490946ba3234ce68a8ec33bf4093fd9597d1abdf))
- reuse one execute_sql function object across BigQuery toolsets ([bfe33b1](https://github.com/google/adk-python/commit/bfe33b1c4a4e6e2d6e393a60515d778a15cf1577))
Documentation
- add a test-file placement rule to the testing style guide ([d64f1af](https://github.com/google/adk-python/commit/d64f1afb6284e3d26b8272f16d19a99be307a33c))
- add App unit guide ([d24ec83](https://github.com/google/adk-python/commit/d24ec83ccdc22cb79f635e86613ae35be622975d))
- add artifact service unit guide ([b8c099d](https://github.com/google/adk-python/commit/b8c099d37fdd938886f2b90a70316936a68d8ba7))
- add memory service unit guide ([aac410a](https://github.com/google/adk-python/commit/aac410a66f9282c3d6b2bc1bc85995cbd74fa4ab))
- add model registry unit guide ([2353dde](https://github.com/google/adk-python/commit/2353dde8e9081439d8d9f8358469ddf44ce997fc))
- add session State unit guide ([5a2a59b](https://github.com/google/adk-python/commit/5a2a59b74fe22dfafe8133a50858610da3997e03))
- add Session unit guide ([3df5a65](https://github.com/google/adk-python/commit/3df5a6519a626368aea4f7fd3e26fd5a56ba5477))
- add tool authentication unit guide ([78a4ee2](https://github.com/google/adk-python/commit/78a4ee2c69cadc025bf2aa7c7e98f90e6da31923))
- correct the list of built-in agent skills ([4cad8cc](https://github.com/google/adk-python/commit/4cad8cc958963ab2818d8f18de0643a3a04697fd))
- fix broken README links and publish the constraints files ([06111f1](https://github.com/google/adk-python/commit/06111f127bf01ba24bad468e4c7ccb2a82ede4bf))
- fix mcp sample link ([5647699](https://github.com/google/adk-python/commit/56476999931f2b32f8e112b4665cda32dac31b71)), closes [#6490](https://github.com/google/adk-python/issues/6490)
- note the adk web/api servers are unauthenticated and local-only ([76c64ef](https://github.com/google/adk-python/commit/76c64efd003f142e5374965d695e4792d1bcba7b))
Miscellaneous Chores
- **deps:** move pyarrow out of the gcp extra ([ac71709](https://github.com/google/adk-python/commit/ac717091f6644f348c6f7e65a43cc0475a28fe45))
- release this candidate as 2.7.0 ([e22b75a](https://github.com/google/adk-python/commit/e22b75aac1b86c9d264cb3def4965df218acf471))
Bug Fixes
- gate --sandbox-launcher behind gcloud beta run deploy ([8120292](https://github.com/google/adk-python/commit/8120292dd108704f5ed071b30dab2e8f019078ff)), closes [#6511](https://github.com/google/adk-python/issues/6511)
Features
- **live:** forward safety_settings from generate_content_config to the Live API ([#6641](https://github.com/google/adk-python/issues/6641)) ([99c1aa3](https://github.com/google/adk-python/commit/99c1aa325e448f2ff7a4ffd037f98fd5b20fb4c5))
Bug Fixes
- avoid shell execution in ReadFileTool ranged reads and keep local environment file access in workspace ([#6597](https://github.com/google/adk-python/issues/6597)) ([c680728](https://github.com/google/adk-python/commit/c68072840131199e93ba6cff76b20ca758ef1161))
- **deps:** exclude nltk 3.10.1, which breaks venvs living inside the working directory (v1) ([#6607](https://github.com/google/adk-python/issues/6607)) ([f25bb90](https://github.com/google/adk-python/commit/f25bb900557587657e90d9293c09a2e3e172a3fd))
- **eval:** handle failed inference results without invocations (cherry-pick) ([#6565](https://github.com/google/adk-python/issues/6565)) ([4555273](https://github.com/google/adk-python/commit/4555273b5b4e7d510db1c9edba02980386f58c7b))
- **live:** transfer to the target agent regardless of function response order ([#6608](https://github.com/google/adk-python/issues/6608)) ([302885b](https://github.com/google/adk-python/commit/302885bda3b85fe65a0980530723adb635407bbb))
- Port tool confirmation security and re-validation fixes to v1 ([#6575](https://github.com/google/adk-python/issues/6575)) ([4783364](https://github.com/google/adk-python/commit/47833640c7be84f238d6a046f3bd3e2aa9ce3ef3))
What this changed for a real deployment
Version boundary for Agent Engine telemetry. 2.1.0 and earlier deploy via the AdkApp template, which silently ignores OTEL_EXPORTER_OTLP_* entirely — nothing errors, spans just never arrive. 2.6.2 switched Agent Engine to a Dockerfile running `adk api_server`, which honours those env vars. If traces from Agent Engine aren't reaching Cloud Trace or TraptureIQ, this is the first thing to check.
Bug Fixes
- **cli:** update gcloud command to use beta flag ([9630559](https://github.com/google/adk-python/commit/9630559830da28a187ba75ef1c26c64780dd7987))
Features
- add parent terminal grouping and TTL pruning to ADK CLI telemetry ([99bbd83](https://github.com/google/adk-python/commit/99bbd83ddac5f1ade93cdde1be98a1e3164e1da7))
- capture TTY connectivity in CLI environment telemetry ([c12a025](https://github.com/google/adk-python/commit/c12a025184cec7859d829d8ce7178ddbe3e2e302))
Bug Fixes
- **cli:** implement early telemetry recording for long-running web servers and log successful exit code upon routine teardown ([77726c5](https://github.com/google/adk-python/commit/77726c55b33d6da1688a3d6893fe5e474d79116b))
- Stop re-validating already-consumed tool confirmations ([2b1204d](https://github.com/google/adk-python/commit/2b1204d0a0dd0d97f1e23f1188ea7366bfcb61e1))
Features
- **a2a:** support per-invocation auth headers when fetching agent cards ([3dd1156](https://github.com/google/adk-python/commit/3dd1156c33fe9e4857c467fbd16f209fb0ac5b4b))
- add --extra_packages option to `adk deploy agent_engine` ([93db97d](https://github.com/google/adk-python/commit/93db97db338fa72cf5b4fef8125552f30e614b57)), closes [#3936](https://github.com/google/adk-python/issues/3936)
- Add ADK evaluation samples: shared home-automation agent ([6ba41ef](https://github.com/google/adk-python/commit/6ba41ef35ea5fb83653d38b10ab67d2042805a61))
- add agent identity auth manager finalize endpoint for 3 legged OAuth flow with auth manager ([8d2ded3](https://github.com/google/adk-python/commit/8d2ded3bec122845d06eb7b6ad6ab99723ab8160))
- Add basic_criteria ADK eval sample ([fdebd9d](https://github.com/google/adk-python/commit/fdebd9d5635abd4e7aa607ac42292252128f0db3))
- Add bigquery-graph skill to ADK BigQuery tools ([f1a0a14](https://github.com/google/adk-python/commit/f1a0a1480bbcd3d6a23fbe75630303c9f8a9720d))
- add capability to log commands run in CLI ([a58220c](https://github.com/google/adk-python/commit/a58220cd05a671082b913fd4955613f806b2bd49))
- Add custom_metric ADK eval sample ([f71d9df](https://github.com/google/adk-python/commit/f71d9df9179a4d37a54051ffceb6dda5c821e4c4))
- Add llm_judge_match ADK eval sample ([0f0fa6b](https://github.com/google/adk-python/commit/0f0fa6bb4a6af4e16f88cd7283daab4451c03714))
- add metadata extraction symmetry to A2A converters ([3127f36](https://github.com/google/adk-python/commit/3127f368915eb6450dfd551914628ded0e58c610))
- add opt-in final_response_tool_names to BigQueryAgentAnalyticsPlugin ([07455ee](https://github.com/google/adk-python/commit/07455ee62cbd5c11625aed8c75380b88eba55e6d))
- Add ReflectAndRetryModelPlugin for self-healing model errors ([322f455](https://github.com/google/adk-python/commit/322f45591c61da6a15f404ba2e7d0fb520f16356))
- Add rubric_criteria ADK eval sample ([852a66a](https://github.com/google/adk-python/commit/852a66ad62a051beb2284517369fdd1d9e8dd4f0))
- add state_delta support to LiveRequest for live mode ([8219774](https://github.com/google/adk-python/commit/82197740a603e146ee35e0f18d2761a5c8f155d6)), closes [#4220](https://github.com/google/adk-python/issues/4220)
- add telemetry consent check, status commands, and interrupt safety to CLI ([6bab08f](https://github.com/google/adk-python/commit/6bab08fc803d26853417c4d6e71704b1a72e035e))
- Add telemetry consent configuration endpoints and local writing utility ([26f3d45](https://github.com/google/adk-python/commit/26f3d454c7c3346d4b0be406b24561940436b4a5))
- add telemetry metrics collection for ADK CLI execution ([2280f1c](https://github.com/google/adk-python/commit/2280f1cc5b7cc3c6ecf657273d92ea5fb4f5b439))
- Add test_file_vs_evalset ADK eval sample ([57a34ba](https://github.com/google/adk-python/commit/57a34ba77a1e98587d477fae5828bfcf7c0f7bf9))
- Add user_simulation ADK eval sample ([481fe21](https://github.com/google/adk-python/commit/481fe21cff0502f3e9c14861bd5f885b7f5969f9))
- **agents:** add instruction field to ManagedAgent ([720af3d](https://github.com/google/adk-python/commit/720af3d5c94708cb80294f2eafe9734cf92582ab))
- **agents:** forward ManagedAgent instruction as system_instruction ([49fdc26](https://github.com/google/adk-python/commit/49fdc26e40018a268da43803d555151dafe988b8))
- **eval:** Make live and audio evals reachable via public entrypoints ([5091f0a](https://github.com/google/adk-python/commit/5091f0a65acb963e0dd3f1db152c2a8d413dc9e4))
- **eventarc:** add Eventarc Advanced toolset for ADK ([217a90a](https://github.com/google/adk-python/commit/217a90a2e6c9725aeaac3dffedca8d63c25037fd))
- **eventarc:** add Eventarc Advanced toolset for ADK ([d4f157d](https://github.com/google/adk-python/commit/d4f157d2ed6fad21a6aa4c6e29e6133e3fe5db76))
- forward the OAuth2 nonce to the authorization request ([79cc1f2](https://github.com/google/adk-python/commit/79cc1f2970faeae7889a0f8b75bb2f5415cbe4eb)), closes [#2067](https://github.com/google/adk-python/issues/2067)
- **integrations:** add OCI Generative AI provider ([625ef1a](https://github.com/google/adk-python/commit/625ef1aa693ebb1980620be39c02d3ddd5154672)), closes [#5069](https://github.com/google/adk-python/issues/5069)
- make agent evaluation compatible with pre-loaded artifacts ([02e32a4](https://github.com/google/adk-python/commit/02e32a4d53e7e477453785818843ba8f085a318b)), closes [#2075](https://github.com/google/adk-python/issues/2075)
- make EventsCompactionConfig sliding-window fields optional ([ec42cfa](https://github.com/google/adk-python/commit/ec42cfa237bc2613f62759962454aed6dea43130)), closes [#6398](https://github.com/google/adk-python/issues/6398)
- Publish companion constraints-3.11.txt and constraints-3.12.txt file for transitive dependency protection (4 day buffer to protect from supply chain attack) ([75c773e](https://github.com/google/adk-python/commit/75c773ed9d2a369e69fb1ce387cf31983bf9450b))
- refresh expired OAuth2 tokens in OpenAPI credential exchanger ([b3c9783](https://github.com/google/adk-python/commit/b3c9783427b2d6cfad945bdb841396fb0a63c82f))
- **samples:** add ManagedAgent create-and-use custom-agent sample ([d86ae20](https://github.com/google/adk-python/commit/d86ae20c6a1d6a0ebddcf35f3ebd64eabbb4a56b))
- support audio generation user simulator ([327afeb](https://github.com/google/adk-python/commit/327afeb427fba2152814744a639d86e6561b2199))
- support serving a to_a2a agent under a path prefix ([1ae292f](https://github.com/google/adk-python/commit/1ae292fc9627f5991795c2a792f29b59c5559f57)), closes [#4448](https://github.com/google/adk-python/issues/4448)
- support user labels in RunConfig ([13bef9c](https://github.com/google/adk-python/commit/13bef9cf93e4b5a7e97362bc8514c9684cd2eb03))
- **telemetry:** add request-driven metric export for Agent Engine ([8930d9b](https://github.com/google/adk-python/commit/8930d9b19338873d091215a1e56f99ce6fd2060b))
- **telemetry:** derive gen_ai error.type from provider status code ([b956d15](https://github.com/google/adk-python/commit/b956d15ce5c58f1237154002f1755c33b4ed31ce))
- Update agent_registry to handle mTLS endpoints internally ([66cf08d](https://github.com/google/adk-python/commit/66cf08d1876b49168cf5ea67853a319e3d9eee56))
Bug Fixes
- **a2a:** honor task cancellation instead of raising NotImplementedError ([fb55d4a](https://github.com/google/adk-python/commit/fb55d4a669e35fd9da69bbb951945d1a19792f9f))
- **agents:** await cancelled tasks in pre-3.11 ParallelAgent merge ([bc55099](https://github.com/google/adk-python/commit/bc550991b97e586c4bcca86facf3ad9dba049940)), closes [#5297](https://github.com/google/adk-python/issues/5297)
- **agents:** skip output_key processing on intermediate conversational text in task-mode LlmAgent ([54344ed](https://github.com/google/adk-python/commit/54344edfb95febc31ba2b80f5578205208f1efa1))
- allow http_options.extra_body in generate_content_config ([4c6f22e](https://github.com/google/adk-python/commit/4c6f22e8e6daa8d55cadf3999f010bcb4303f8bf))
- allow invocation-level rubrics ([67ab27f](https://github.com/google/adk-python/commit/67ab27f2547db48f7248b1689aab4c18502aee17))
- **artifacts:** namespace file artifacts by app ([f72f0db](https://github.com/google/adk-python/commit/f72f0db58c5c1f4e8b8d4f04b8c592c9e49cbe9e))
- assemble only the current turn ([c328cec](https://github.com/google/adk-python/commit/c328cec9462ac6a5459f19e6fb548c5b2e40cd39))
- bound integration HTTP waits ([bf4143a](https://github.com/google/adk-python/commit/bf4143ac2269d3a23c4abc680c3a39f727db21bd))
- bypass Protobuf Gencode/Runtime version check in antigravity integration ([91038f2](https://github.com/google/adk-python/commit/91038f2ba4b48b8916f58ab56a695b516222044c))
- **caching:** prevent prompt cache invalidation when using dynamic tools ([509be09](https://github.com/google/adk-python/commit/509be09d342decab5abca29345aec3a187956c41)), closes [#3227](https://github.com/google/adk-python/issues/3227)
- Call mtls.should_use_mtls_endpoint with client_cert_available argument ([b315b00](https://github.com/google/adk-python/commit/b315b0024a903b91f7c8fa971eb4621133c47845))
- canonicalize context cache fingerprint for stable hashing ([425dda1](https://github.com/google/adk-python/commit/425dda190457bffb159a1373e30ea396eba5f536))
- **ci:** mark imported PRs as merged even if already closed ([2eca8b1](https://github.com/google/adk-python/commit/2eca8b11ceb890614370c64a2ad56a0164059c97))
- **cli:** treat agent folder with subfolders as single agent in adk web ([40cf97b](https://github.com/google/adk-python/commit/40cf97bf2ce11b581e7b0409af299910b52773ea))
- close A2A response stream when the caller stops consuming ([31392ba](https://github.com/google/adk-python/commit/31392bad27b911d78a3de124f03a372227777878))
- close AsyncDaytona client in DaytonaEnvironment.close ([ecf6d13](https://github.com/google/adk-python/commit/ecf6d13f64d6df4b0860c1b32643d12cc1c0d381))
- collect all tools so native tools aren't dropped ([c429d75](https://github.com/google/adk-python/commit/c429d7549d3780227630bac764c42f1627b981ae)), closes [#6091](https://github.com/google/adk-python/issues/6091)
- derive an SDK-conforming Antigravity conversation id ([64b758a](https://github.com/google/adk-python/commit/64b758ae8e2e325e830a2a112c18f3c1cc87635c))
- do not mount a cluster credential into the GKE code sandbox ([8207880](https://github.com/google/adk-python/commit/8207880101292bdf1037cb3bfdf90d3a3691ce0c))
- emit only new artifact parts on streaming artifact updates ([088be86](https://github.com/google/adk-python/commit/088be86040bd486cf42eae561e77b3b0ad979688)), closes [#6343](https://github.com/google/adk-python/issues/6343)
- emit resumability checkpoints from workflow graph nodes ([cecc1f9](https://github.com/google/adk-python/commit/cecc1f98d5837de3157a606e7a6409fece5deefc))
- **eval:** support `get_agent_async` in `adk eval` ([ebaef9f](https://github.com/google/adk-python/commit/ebaef9f63291cb77b3ea54918cbb8a5b7926862a))
- **evaluation:** support non-English responses in ROUGE-1 matching ([8200fae](https://github.com/google/adk-python/commit/8200faec6d42c10e5c3cf5f9613bcb6bd5d51240))
- guard multimodal tool results plugin against empty contents ([5a248de](https://github.com/google/adk-python/commit/5a248de58f80c4b6574e5d0bd10838964f478218))
- handle Windows paths in `adk eval` ([6f6106f](https://github.com/google/adk-python/commit/6f6106f672d26596f909bd555e954825ba4044b4)), closes [#6415](https://github.com/google/adk-python/issues/6415)
- harden A2A metadata serialization and parser type validation ([eee700a](https://github.com/google/adk-python/commit/eee700a01696cabb42583611766806de2d8574be))
- include credential failure details ([13c7272](https://github.com/google/adk-python/commit/13c727291098947d8f44c532cd9b76a588a016cd))
- isolate delegated task branches ([95feafa](https://github.com/google/adk-python/commit/95feafa3b23dbcce19c287cf749a2076fb9c5db9)), closes [#6457](https://github.com/google/adk-python/issues/6457)
- let httpx set the multipart boundary Content-Type ([3367b5b](https://github.com/google/adk-python/commit/3367b5bf72e2117c7e766c27ef4e35a33172affb))
- make InvocationEvent.content optional so the Web UI can save eval cases ([b549ab4](https://github.com/google/adk-python/commit/b549ab41c906a1746e316788c2bd9366efb1cc0d)), closes [#6336](https://github.com/google/adk-python/issues/6336)
- make ParallelWorker concurrent failure exceptions deterministic ([d31b5e7](https://github.com/google/adk-python/commit/d31b5e7dcec3b1c8da8c35ad9a1d14d046f56cc3))
- match rubric verdicts by echoed id so paraphrased rubrics are not dropped ([0b7355b](https://github.com/google/adk-python/commit/0b7355baa385270cf0be59e601dc7c1e898980c4)), closes [#6171](https://github.com/google/adk-python/issues/6171)
- **memory:** honor Vertex RAG top-k configuration ([d4d2f6e](https://github.com/google/adk-python/commit/d4d2f6e600590e80b4880313dbeb7ea5bacafdc1))
- **memory:** make Vertex RAG uploads async-safe ([80a05b7](https://github.com/google/adk-python/commit/80a05b7f639216c8bf60a870598f0d44efcba339))
- migrate v0 event timestamps as local time, not UTC ([6f1efe7](https://github.com/google/adk-python/commit/6f1efe7b2a70cef00ef89de6ea3690f0914b692f))
- **models:** capture Anthropic thinking-block signatures during streaming ([bb56aa5](https://github.com/google/adk-python/commit/bb56aa56f79da843d50e0c01637f97e7f26435a2))
- **models:** guard Gemini.client_kwargs against missing-field AttributeError ([df02689](https://github.com/google/adk-python/commit/df0268921cb8662fd4984e6ca40577b0953a083a))
- **models:** populate finish_reason on AnthropicLlm responses ([716be89](https://github.com/google/adk-python/commit/716be893d201c25859c44cc0cab5b060c2977021))
- narrow broad except in agent identity credential providers ([0598c9b](https://github.com/google/adk-python/commit/0598c9ba26e543b0a090b0e869eac3badea81c1e))
- percent-encode context id fields so ids with separators round-trip ([fab5347](https://github.com/google/adk-python/commit/fab5347f56413d8b28b0d023fc56274e9bf9701c))
- pin third-party github actions to commit shas ([4e16855](https://github.com/google/adk-python/commit/4e16855e0d6038d0e0011e3c1855deff314e5fef))
- **plugins:** complete BigQuery Agent Analytics privacy and shutdown hardening ([9adf011](https://github.com/google/adk-python/commit/9adf0113ea7adb14044f010cbe1366f6eab53565))
- **plugins:** correct lazy import path for ReflectAndRetryModelPlugin ([c59fd0e](https://github.com/google/adk-python/commit/c59fd0ed4f603305f3401ca0b9068b8274748925))
- **plugins:** harden BigQuery agent analytics against fail-open privacy, GCS concurrency, and startup-loss gaps ([2919bf5](https://github.com/google/adk-python/commit/2919bf5b8d426f9a74bd5bd4e4a8a7927b3170bd))
- **plugins:** restore failure counter properties on retry tool plugin ([66a7233](https://github.com/google/adk-python/commit/66a72337b3c8b366636cfbf09655569edc4122c0))
- populate finish_reason on Anthropic LLM responses ([802a079](https://github.com/google/adk-python/commit/802a0793f0b1233d4b02c8037db3ebe927ab8b66))
- populate function name in FunctionResponse parts ([540cfdf](https://github.com/google/adk-python/commit/540cfdf737fd878f87b57b00894fbfc58b97feaa))
- present client certificate and use mTLS endpoint for API Hub calls ([2cf5433](https://github.com/google/adk-python/commit/2cf543322b397c865701b432ed6fd9867db187b0))
- preserve ADK behavior on Windows ([6e9895c](https://github.com/google/adk-python/commit/6e9895c55cdc5b3b39a336c6c999bc1731273cdc))
- preserve explicit false and zero OpenAPI query parameters ([b3abcb2](https://github.com/google/adk-python/commit/b3abcb2b28ccda194fd0499c9f32a6a783b6fde4)), closes [#6287](https://github.com/google/adk-python/issues/6287)
- preserve metadata in A2A artifact updates ([2316b83](https://github.com/google/adk-python/commit/2316b83468b6fa99405d8ee5c2fba4174846c466))
- Prevent `adk deploy` from uploading `.adk/session.db` file ([dab351b](https://github.com/google/adk-python/commit/dab351beca00ef4e735f5bca0b72dd10be5bf69f))
- Prevent continuation forgery in tool confirmation ([4b002c4](https://github.com/google/adk-python/commit/4b002c4b56e0b5fa83a0d989ef7663fbedf23211))
- prevent transfer_to_agent loop on resumable invocation replay ([19df9b9](https://github.com/google/adk-python/commit/19df9b9b9b9153a2e1fcf3c96bb15f86a22835d7))
- propagate custom metadata from RunConfig to InvocationContext ([79ba5af](https://github.com/google/adk-python/commit/79ba5aff17cf1203b6d4b0948e493802847dfae8))
- raise SessionNotFoundError when appending to a missing session ([0a70337](https://github.com/google/adk-python/commit/0a70337f29fd76dba18da6b82e072621d60f9117))
- register custom metrics from eval config in LocalEvalSampler ([79a879f](https://github.com/google/adk-python/commit/79a879f5833a223d3d3f0e78abc2fc6c5da8c1fa)), closes [#6177](https://github.com/google/adk-python/issues/6177)
- reject base_url and extra_body in generate_content_config ([472e463](https://github.com/google/adk-python/commit/472e4635fb4014f7ed2c77db7c2b97f17bbd45bf))
- reject incomplete evaluation inputs ([8ca9128](https://github.com/google/adk-python/commit/8ca9128a6397389c171625fb6ac0475c516ccfae))
- require patched async LangGraph runtime ([551372b](https://github.com/google/adk-python/commit/551372bcd88b21f38c2b68b4a9b9738484a9d0fd))
- resolve tool confirmation resumption failure in production ([c427020](https://github.com/google/adk-python/commit/c4270203c657d4abb14188b90ed692465f1f36c9))
- respect A2A Message.role in inbound event conversion ([968845f](https://github.com/google/adk-python/commit/968845fd5c9a8c60535f0d32cf14ea4db9c56c5e)), closes [#5186](https://github.com/google/adk-python/issues/5186)
- return empty list from _get_required_fields when no properties ([1890557](https://github.com/google/adk-python/commit/1890557584f58ec5094344a501e5041ef041694d)), closes [#5920](https://github.com/google/adk-python/issues/5920)
- scope replay sequence to the current invocation ([455853b](https://github.com/google/adk-python/commit/455853b5bca2dad68923a9100f9ba945845ad6d0)), closes [#6497](https://github.com/google/adk-python/issues/6497)
- scope the tool thread pool to its event loop ([a1792a7](https://github.com/google/adk-python/commit/a1792a712ae6b90dee4fecdee79cf0ddff1b5609))
- send the bare input_schema payload from AgentTool again ([ba17367](https://github.com/google/adk-python/commit/ba1736783baee0c5340856cf0640d4f85f4a6026))
- serialize eval criteria as their concrete subclass ([623da49](https://github.com/google/adk-python/commit/623da4930a43cbaa5386a096c5a54266bae02522))
- serialize raw bytes as base64 in A2A converters ([e6604e1](https://github.com/google/adk-python/commit/e6604e1d2109261bb548975b0897b76dd3fcc8b2))
- **sessions:** apply after_timestamp and num_recent_events together in VertexAiSessionService ([021f6f6](https://github.com/google/adk-python/commit/021f6f6c1e6b55f71e2144ec5857820cd010b6e4))
- share one event id across the partial chunks of a streaming response ([8f98bcd](https://github.com/google/adk-python/commit/8f98bcd513df19aa67b0ac6ba2607f2bb1cb4695)), closes [#1006](https://github.com/google/adk-python/issues/1006)
- single-flight Discovery Engine mode detection ([3a9a88c](https://github.com/google/adk-python/commit/3a9a88c975117a8cfde1ef9d920a978eb4ffe701)), closes [#6101](https://github.com/google/adk-python/issues/6101)
- stop automatic function calling from failing on Vertex AI return types ([268815d](https://github.com/google/adk-python/commit/268815df6427b7cb0dc08f18dc8c51ab96ce0c1b)), closes [#3543](https://github.com/google/adk-python/issues/3543)
- stop tracing credentials passed via config.http_options ([761f1ac](https://github.com/google/adk-python/commit/761f1ac75d0479e21d9f3386189d0b54990d05b4))
- strip markdown code fences before validating output_schema JSON ([28c649a](https://github.com/google/adk-python/commit/28c649a466c660635ab1ed8de163b5d294c3be00))
- support nested agent paths in dot_adk_folder resolution ([d33ca5f](https://github.com/google/adk-python/commit/d33ca5fa7cd92d330d48e9e4b0ea1c3d280c557b))
- surface sub-agent RPC errors from AgentTool ([e737f22](https://github.com/google/adk-python/commit/e737f22957b671000c60a690ebfaee68d3ca6f34))
- tolerate a malformed traceparent header in the span processor ([de2e66e](https://github.com/google/adk-python/commit/de2e66e9836512aabe0431ee0c1c8169e0fc271a))
- **tools:** bind JSONDecodeError in ToolConnectionAnalyzer.analyze ([a60d5b9](https://github.com/google/adk-python/commit/a60d5b95227bb63198e247acee880ea8b4f4cbd1))
- treat GitHub content as untrusted in the adk_team sample agents ([f4979b5](https://github.com/google/adk-python/commit/f4979b5c78be9d709a29a7aa4175b31864fba7e6))
- wait for in-flight BigQuery writes ([6e43800](https://github.com/google/adk-python/commit/6e43800fcb9263c9debdb570dab837bce6f51f31))
- **workflow:** fix task agent resumption in nested workflows ([fd006db](https://github.com/google/adk-python/commit/fd006db9153fe6c51f281f36e35b40d243e5fca0))
- wrap input_schema payload in ReAct prompt and propagate tool_choice to LiteLLM ([550189c](https://github.com/google/adk-python/commit/550189ce4f3cc1e69a108b1f38ba6c31f2f40e65))
Performance Improvements
- avoid quadratic text/audio accumulation in streaming ([7fd8760](https://github.com/google/adk-python/commit/7fd876027049f86a4a580a56c45373c8e2908e24))
- cache the FunctionTool declaration across LLM calls ([57f3af2](https://github.com/google/adk-python/commit/57f3af24a00de46096089bd3279791a6a98b5c48))
- **import:** lazy-load heavy dependencies ([88b388e](https://github.com/google/adk-python/commit/88b388ecde41950d9bd9ac886df23a17a366ca2a))
- **tools:** avoid double Schema serialization in Optional/Union dedup ([6264576](https://github.com/google/adk-python/commit/6264576784dd2e265b2092c759989db60162e34e))
Documentation
- Add developer unit guide for ReflectAndRetryToolPlugin ([94832a5](https://github.com/google/adk-python/commit/94832a515161b97689a940e95f9f1119b3dd637c))
- **agents:** add system-instruction sample and guide section ([597fac3](https://github.com/google/adk-python/commit/597fac3a4fa370a41df377cef023e571edac30c3))
- document creating and using a custom managed agent ([52c3e9e](https://github.com/google/adk-python/commit/52c3e9eb60f9f087f01e97de52cddcd031f4b93a))
- document workflow resumability model and direction ([d4804e2](https://github.com/google/adk-python/commit/d4804e20843f831c19a1f02afc4d2796138c36f4))
- explain how an accepted pull request lands ([b6c2575](https://github.com/google/adk-python/commit/b6c257572bedfbe6e48902b351b23b48f6fb1779))
- fix broken relative links in documentation ([096ecfc](https://github.com/google/adk-python/commit/096ecfcf56ad47a9a63da1d76a062f56d7586692))
Features
- **live:** Support asynchronous non-blocking tools ([#6522](https://github.com/google/adk-python/issues/6522)) ([c299420](https://github.com/google/adk-python/commit/c299420531158e2b851f87d1bf927a147c8c259e))
Bug Fixes
- Update custom gemini llm connection logic to be used for all 3_x models, not just 3.1 ([#6438](https://github.com/google/adk-python/issues/6438)) ([4ef72fe](https://github.com/google/adk-python/commit/4ef72fef0e607d61285f1a12da6edd55b21a1c1d))
Breaking Changes
- Update GCP Skill Registry to use agentregistry/skill endpoint ([fa884e3](https://github.com/google/adk-python/commit/fa884e3d028e2809526dc732592a6b5b944a8c17)): Existing users of GCP Skill Registry should note that the underlying endpoint is now AgentRegistry, so users will need to migrate their data and enable the Agent Registry API if not yet enabled.
Features
- add Cloud Run sandbox option in code executors ([5b1088a](https://github.com/google/adk-python/commit/5b1088acbefb7eb55488ed9ebf90683f24bfe54a))
- Add search agents and search MCP severs to agent registry ([ed579c1](https://github.com/google/adk-python/commit/ed579c1304cf7ad4c16868323632e6350f462548))
- add skill to verify markdown code snippets ([c0fa51b](https://github.com/google/adk-python/commit/c0fa51b33f3e32812f307caa2ac3c5c2425c5224))
- Add strict input schema validation for LlmAgent workflow nodes ([6f66814](https://github.com/google/adk-python/commit/6f66814e194994a9ab38cf3959a1d8f53cae3d89))
- add to_mcp_server to serve an ADK agent over MCP ([50ff37f](https://github.com/google/adk-python/commit/50ff37f8b027f5147f0baf5906414e7ac6163b9e))
- **agents:** add single_turn mode field to ManagedAgent ([da50578](https://github.com/google/adk-python/commit/da50578bc5833c76eb96bc8f005fc9e5e5c154e7))
- **agents:** bridge node_input to user_content for ManagedAgent nodes ([a680cea](https://github.com/google/adk-python/commit/a680cea874fcf0496df9697be5962dbedde70d42))
- **agents:** support remote MCP servers for ManagedAgent with runtime header callbacks ([2e2ec09](https://github.com/google/adk-python/commit/2e2ec09a760b5cb956082526296450842da28487))
- **agents:** wrap single_turn non-LlmAgent sub-agents as inline tools ([fc98549](https://github.com/google/adk-python/commit/fc985492447a133cbbd7d90bf34cb849b445a26b))
- **bigquery:** log tool descriptions and parameter schemas in LLM_REQUEST ([ecef5f8](https://github.com/google/adk-python/commit/ecef5f859f050c206efab93a9a200cad6d75d62d))
- enable a2a-sdk 1.x by widening the dependency constraint ([b46dd13](https://github.com/google/adk-python/commit/b46dd136aafe0f1ed5b269b7e3c92055726a5125))
- **live:** allow Voice activity detection (VAD) events to be returned ([820a910](https://github.com/google/adk-python/commit/820a910ef860c42b519b7c3519c5b1065a172a52))
- **live:** Run non-blocking tools in a background task ([5620d8f](https://github.com/google/adk-python/commit/5620d8f4f16864a68d04187f31ac0a0d532a3efa))
- **plugins:** add on_agent_error_callback and on_run_error_callback ([7d0ae63](https://github.com/google/adk-python/commit/7d0ae63ab13ad68dc1558a3a2c40c18baa531386))
- Support HITL resumption for standalone nodes and NodeTool ([00760f8](https://github.com/google/adk-python/commit/00760f84556cacef6fb24fc12a24075fd617f558))
- Support LoadArtifacts parsing for binary text documents (e.g., DOCX) ([ccbedd8](https://github.com/google/adk-python/commit/ccbedd80c2b8c55f4d80b4324f8bb23ea48d6996))
- Validate that no old orchestrators are used inside Workflow graphs ([7e245c4](https://github.com/google/adk-python/commit/7e245c48c278e96d6064b0475c7b0b4fe01d033b))
- Validate that no old orchestrators are used inside Workflow graphs ([eaffb0e](https://github.com/google/adk-python/commit/eaffb0ec64ed0d73013ffe0aa2ebf08682559a26))
- **workflow:** Support state-based resumption for task-mode agent workflow nodes ([9d306f5](https://github.com/google/adk-python/commit/9d306f5d322eccbc5022ac72407fa8a994f64cf6))
Bug Fixes
- Add mTLS support for for API registry ([41693dc](https://github.com/google/adk-python/commit/41693dce67f5e8c39802db2fff75e7c6d8c876f0))
- Add mtls support for gcp_utils ([3fa993b](https://github.com/google/adk-python/commit/3fa993bf82b7dd9f8334d84ea492adad5a477bfe))
- Add support for list_artifact_versions and get_artifact_version to ForwardingArtifactService ([61ba59a](https://github.com/google/adk-python/commit/61ba59a23f06d78bbd5ed49bac918787e2739066))
- avoid crash on first turn with empty user content ([c9bacd4](https://github.com/google/adk-python/commit/c9bacd40ee4f8ad9951d543b240ce3f2f59ebb42))
- Avoid shell execution in ReadFileTool ranged reads ([1ac6875](https://github.com/google/adk-python/commit/1ac68752ad30563e17d3cbf40e667df3c8df850a))
- block posix, nt, _posixsubprocess, and _socket modules in agent config validation ([faa1744](https://github.com/google/adk-python/commit/faa174425453b7adc1243c5217a2a40e13b4f031))
- **cli:** Block special internal agents in ApiServer mode ([3f6eb1f](https://github.com/google/adk-python/commit/3f6eb1f0a1884a9c04cc34c0c57c7b9d8665bf2f))
- confine docs-agent file tools to the managed repos directory ([f00fc5a](https://github.com/google/adk-python/commit/f00fc5a329f2ff58c34ded1f27a0a1daa89ce0d4))
- decode shell skill output as UTF-8 ([b7ad76a](https://github.com/google/adk-python/commit/b7ad76a28dfbdc3bcab71e9e81aaa546ebd287be))
- **environment:** add integer validation in ReadFileTool ([3c0fb65](https://github.com/google/adk-python/commit/3c0fb65caa989b6d48ba78cb55ec3a15f476c6f8))
- exclude LiteLlm llm_client from JSON serialization ([ecbefd9](https://github.com/google/adk-python/commit/ecbefd9547839752ab8d28146a51bad7dd6833f1)), closes [#6164](https://github.com/google/adk-python/issues/6164)
- exclude rewound invocations from event compaction ([0d4d378](https://github.com/google/adk-python/commit/0d4d3783f7825a620c95a7b9dca919db790b879f))
- explicitly preserve language and tools during event compaction ([b44d2c9](https://github.com/google/adk-python/commit/b44d2c9d6c381e44a9a24727fe973fc94d572854)), closes [#6273](https://github.com/google/adk-python/issues/6273)
- Fix InputTokensDetails validation in OpenAI responses test and formatting in a2a_agent_executor ([99ea228](https://github.com/google/adk-python/commit/99ea228f0068de94a2a540929b83b3e16fa17897))
- Fix sub-branch event routing for nested sub-agents and tools in InvocationContext ([3cdc102](https://github.com/google/adk-python/commit/3cdc102204696e2dd9c92ece66daee4c5b1010ca))
- GitHub CI for the verify-snippets skill ([ccc8ab4](https://github.com/google/adk-python/commit/ccc8ab4efb86d03cf4cb7a5b63c0ca67e1406618))
- grow eligible Gemini cache prefixes ([98fc036](https://github.com/google/adk-python/commit/98fc03690b5fb611b11072a354061dd10a886c50))
- guard decode_model against non-dict session values ([8c60d99](https://github.com/google/adk-python/commit/8c60d99a5267eca02d01365982837bc16f4d292c)), closes [#6348](https://github.com/google/adk-python/issues/6348)
- handle sqlite float timestamps in PreciseTimestamp ([2da09e6](https://github.com/google/adk-python/commit/2da09e60d7d03d27bf9aa721db37cf0475157c21)), closes [#6352](https://github.com/google/adk-python/issues/6352)
- honor server-reported Gemini cache expiry ([4fdc94c](https://github.com/google/adk-python/commit/4fdc94c79185f13db9f8c20870add6b611a235c3))
- **litellm:** preserve reasoning replay and optionally share agent thoughts ([6290aec](https://github.com/google/adk-python/commit/6290aec5cefea5ebc362eb74b5a73897e9b73d41))
- **litellm:** preserve signature-only blocks for Anthropic streaming thinking aggregation ([78d1957](https://github.com/google/adk-python/commit/78d1957a0d877ab976d44599cafd304632adc043))
- make agent and run error callbacks best-effort so they never mask the original error ([2f48ad3](https://github.com/google/adk-python/commit/2f48ad3f0e4721e25d31641d564415c1d0f51e29))
- make discussion answering model configurable ([de4ac2d](https://github.com/google/adk-python/commit/de4ac2d93f4bde068e7b68fa5e01cd552f14a33d))
- match HF-style gemma-4 model names for tool_responses role ([4930155](https://github.com/google/adk-python/commit/49301558dcdc767b3844eec928d5c3457645301a)), closes [#6334](https://github.com/google/adk-python/issues/6334)
- **models:** Allow context caches with empty content prefixes ([ee7174d](https://github.com/google/adk-python/commit/ee7174da1fc1101f16b1b4f067d9beb2bc0a1de7))
- **models:** forward request headers on google_llm interactions path ([b5a3e34](https://github.com/google/adk-python/commit/b5a3e34f2dd973736b3197c0024c62cfb901452e))
- preserve non-ASCII characters in agent input ([7006e33](https://github.com/google/adk-python/commit/7006e33e98f8e5b84414a6588d911c2280fb287b)), closes [#6279](https://github.com/google/adk-python/issues/6279) [#6282](https://github.com/google/adk-python/issues/6282)
- preserve non-image file MIME type in LiteLlm content conversion ([065234e](https://github.com/google/adk-python/commit/065234e27973d4af0084cbac1db3d21561ba6e66)), closes [#4174](https://github.com/google/adk-python/issues/4174)
- Prevent continuation forgery in tool confirmation ([c03f333](https://github.com/google/adk-python/commit/c03f333769feaeaa9fe8910fbe95cb9f2d513f54))
- prevent model bypass in resumable mode by rejecting user-authored function calls ([283e92e](https://github.com/google/adk-python/commit/283e92efc2297246ff6f70ceb220b9b299aa2d67))
- prevent synchronous code executors from blocking the event loop ([585809c](https://github.com/google/adk-python/commit/585809cf98838fb64b076400fe5bfbe92f8543ad)), closes [#6353](https://github.com/google/adk-python/issues/6353)
- recover a compacted sibling's latest response, not its placeholder ([0bd7ea0](https://github.com/google/adk-python/commit/0bd7ea05d6d8459f9648b201afbf34ee6b39d903))
- recover compacted function calls during prompt assembly ([0c517e7](https://github.com/google/adk-python/commit/0c517e767efc8661f6d1667db4a4a565ef2cc1d7)), closes [#5602](https://github.com/google/adk-python/issues/5602)
- remove OpenTelemetry event logger setup since the Events API/SDK has been deprecated and is soon being removed entirely ([bb3b2a4](https://github.com/google/adk-python/commit/bb3b2a47f887bd3ae0b2f363cb38c27a9f012fe5))
- repair two broken contributing samples ([ee3a381](https://github.com/google/adk-python/commit/ee3a3815a16795402242c5c620bb83c6e49b27bd))
- require starlette>=1.3.1 to clear known CVEs ([221bad9](https://github.com/google/adk-python/commit/221bad92b8ed659fc0d34c610d5b3bc469e0bac5)), closes [#6038](https://github.com/google/adk-python/issues/6038)
- Resolve scheduler leakage and make scheduler instantiation explicit ([ce2e4ca](https://github.com/google/adk-python/commit/ce2e4caf147ebcc8e6a7bb9997e6e961f626807b))
- Resolve scheduler leakage and make scheduler instantiation explicit ([d4f0772](https://github.com/google/adk-python/commit/d4f0772f5d94e5887fe465c98e0c5b1730b633d8))
- Retain user input across transfer_to_agent when include_contents='none' ([ad5445a](https://github.com/google/adk-python/commit/ad5445a1bdf6a2b9e79ebdb706b0410490feef90)), closes [#3535](https://github.com/google/adk-python/issues/3535)
- Return 404 instead of 500 when app_name does not match any agent ([f4decf6](https://github.com/google/adk-python/commit/f4decf61d134a782482c184ca2a5c2f864aaf5a1)), closes [#5374](https://github.com/google/adk-python/issues/5374)
- return MCP tools in stable sorted order for cache stability ([2aba05c](https://github.com/google/adk-python/commit/2aba05cff814e664d7ed3520000f453fcc810473))
- reuse current-step tool resolution ([3164504](https://github.com/google/adk-python/commit/3164504f649168e3ff87de9657260fcc8e88dee6))
- reuse fetched session and honor get_session_config on chat path ([81306bb](https://github.com/google/adk-python/commit/81306bbbd442d4b09dc7afb26a7dcf98e01a2168))
- rollback of path segment validation in InMemoryArtifactService and GcsArtifactService ([961f3e8](https://github.com/google/adk-python/commit/961f3e885c68385d67823885897f1c5690ff5b4c))
- **samples:** Fix monitor_video_stream in live bidi streaming sample ([7c11f58](https://github.com/google/adk-python/commit/7c11f5861fabc1f963d99ec213118c1460c374b3))
- scope Gemini cache identity ([8de4237](https://github.com/google/adk-python/commit/8de4237e18bc7a6a8bed3f252bca7d1b15ddbec9))
- **sessions:** prevent PydanticSerializationError when session state contains non-serializable objects ([757ef22](https://github.com/google/adk-python/commit/757ef22435970df8816222f8091046948af2c4d3))
- shield toolset cleanup from cancellation ([a69ba4f](https://github.com/google/adk-python/commit/a69ba4fa74e87f3dc742f3cfaece6cff1cc86eee))
- snapshot events under lock in InMemoryMemoryService.search_memory ([aeccd3b](https://github.com/google/adk-python/commit/aeccd3bb2cf76058cf9be82bc33927d2d70c8fbc)), closes [#6167](https://github.com/google/adk-python/issues/6167)
- Support passing credentials to GCPSkillRegistry ([c441ab2](https://github.com/google/adk-python/commit/c441ab2763b871db5e66048944d179bdf76bc56e))
- support unencrypted workload certificates for mTLS in GoogleApiToolset ([d831ee6](https://github.com/google/adk-python/commit/d831ee6e76d390a2a32d1733afee428ae3cba450))
- **telemetry:** add 0 bucket boundary to per-invocation call count histograms ([c291821](https://github.com/google/adk-python/commit/c2918211f82a84f91f8ee852e1b90a225f17f0b2))
- **test:** correct polling timeout unit test in IAM Connector credentials provider ([4448117](https://github.com/google/adk-python/commit/4448117076c97a164f5aad5037236a7c6f02fadc))
- Update VertexAiRagMemoryService methods to use latest RAG module ([96d2914](https://github.com/google/adk-python/commit/96d2914339ade4409b2366b80a0668ca8001aedb))
- Validate path segments in GcsArtifactService and InMemoryArtifactService to prevent cross-user artifact access ([45a77dc](https://github.com/google/adk-python/commit/45a77dc514f1e151c08e32f7c9a94b0a222eea36))
- Validate path segments in GcsArtifactService and InMemoryArtifactService to prevent cross-user artifact access ([8718aef](https://github.com/google/adk-python/commit/8718aefff01d3ad37a4f9de73ca6abfdb3bb452e)), closes [#6115](https://github.com/google/adk-python/issues/6115) [#6116](https://github.com/google/adk-python/issues/6116)
- **workflow:** Process all completed tasks in batch before exiting on error ([8db2ace](https://github.com/google/adk-python/commit/8db2ace37308c15d59d40d1b8c3b8dc30eb64cfd))
- **workflow:** treat RetryConfig(max_attempts=0) as no retries ([3b3f127](https://github.com/google/adk-python/commit/3b3f127d8fdd3189c2527edc128e64375b5f5f88))
Performance Improvements
- lazy-load ManagedAgent to keep the interactions API off startup ([995628c](https://github.com/google/adk-python/commit/995628c9e2b2449b37d4a146e9d014d073932023))
- **litellm:** track brace depth incrementally for streaming tool-call args ([e5fdb51](https://github.com/google/adk-python/commit/e5fdb51e7ca8ac964e75c0458567f88a37c0b7be))
- Optimize workflow rehydration performance with indexing ([64a7448](https://github.com/google/adk-python/commit/64a7448fc6e05f37e6dedadd6c0e65bc19264057))
- skip disabled request-log formatting ([cba2827](https://github.com/google/adk-python/commit/cba28271b4bd0de3201b468578f3cb3da6113a5f))
- skip non-recording LLM trace work ([0c63a89](https://github.com/google/adk-python/commit/0c63a892e2d4bdae4cdf33a5bde21e4266e03371)), closes [#4233](https://github.com/google/adk-python/issues/4233)
Documentation
- add to_mcp_server unit guide ([534e8d5](https://github.com/google/adk-python/commit/534e8d50cc275e717b21b8a950df5439e251dc76))
- Fix token exceeded error on ADK release analyzer's final summary agent ([989af4d](https://github.com/google/adk-python/commit/989af4d81eea05befb33348deb0b604bc483ee75))
- **guides:** Add ManagedAgent unit guide ([ab839d5](https://github.com/google/adk-python/commit/ab839d51d338e8231a79e0e65aec5d9a3fd896b4))
- **guides:** note single_turn works for non-LlmAgent agents ([26ed6fe](https://github.com/google/adk-python/commit/26ed6fe382881fe6c8e9caaf31f9b0a6c655389b))
- **samples:** add ManagedAgent remote MCP (Maps Grounding Lite) sample ([cc444b6](https://github.com/google/adk-python/commit/cc444b6cbf0e60f2c2b5d4f1f7ae5d6fda03fc0e))
- **samples:** Add ManagedAgent single-turn sub-agent sample ([57e1ba6](https://github.com/google/adk-python/commit/57e1ba66ee5f762e22cf5aa727f10fea3485a572))
- **samples:** Link ManagedAgent sample READMEs to the guide ([3834c0b](https://github.com/google/adk-python/commit/3834c0bdb65476661ad2b2c939ed19cba2a3fcd6))
- **samples:** Remove NOT WORKING YET comments from workflow samples ([f3f602f](https://github.com/google/adk-python/commit/f3f602f1fa7ee4d6822b68e798ae09b145d898c5))
- simplify sample graph guidance in adk-sample-creator skill ([27edb1a](https://github.com/google/adk-python/commit/27edb1afdca5b32d050915f5c45b8a812045994f))
- **skills:** Add coding conventions and state lifecycle rules to style and architecture guides ([367ab9a](https://github.com/google/adk-python/commit/367ab9aeaeb1ef869e5d7d18d96c1452420447e5))
- **tools:** encourage using mode='single_turn' in AgentTool and document manual artifacts configuration ([a9b4276](https://github.com/google/adk-python/commit/a9b4276447453a85bffc2cdd35561f2e44779d06))
- **tools:** recommend mode='single_turn' in AgentTool docstring ([f4072a4](https://github.com/google/adk-python/commit/f4072a4d38fd3dcbdcb694b3276ff672e8ce3653))
- Update models owner for ADK PR triaging agent ([b8a1dab](https://github.com/google/adk-python/commit/b8a1dabf9ed3ab8119249403a507fa49202c4a4c))
Features
- Add mTLS support for DiscoveryEngineSearchTool ([8ba0e6a](https://github.com/google/adk-python/commit/8ba0e6aa657107f4e959051cd56e71fff16b9eaa))
- Add mTLS support to Google API tools ([3466586](https://github.com/google/adk-python/commit/3466586bab018fcb275ed125888803ba971b4520))
- add OpenAI Responses API support in labs ([6b831d5](https://github.com/google/adk-python/commit/6b831d5aa0e39b75f69df87746f073bfd66a60a0)), closes [#3209](https://github.com/google/adk-python/issues/3209)
- Add support for reusing an existing SQLAlchemy AsyncEngine in DatabaseSessionService ([f4c7e4c](https://github.com/google/adk-python/commit/f4c7e4cac30954ebe703be21d0219c38b729689a))
- add support for session TTL and expiration in Vertex AI session service ([49d4441](https://github.com/google/adk-python/commit/49d4441ebd4b715919c52ea15319df0abdff9609))
- **adk:** add Anthropic `effort` config handling, thinking parameter propagation, and conflict mitigation ([4c862b9](https://github.com/google/adk-python/commit/4c862b9660679caa1a24bb05f7f91500bcf8af58))
- **agents:** add ManagedAgent backed by the Managed Agents API ([cf91b84](https://github.com/google/adk-python/commit/cf91b8443fffca4561668a424f80e9c3feee2a78))
- **bigquery:** expose thinking and tool-use token columns in analytics views ([c14258d](https://github.com/google/adk-python/commit/c14258dffc77804f638f5abbeb434d979ec3149b))
- **bigtable:** Support parameterized views with secure parameter inj… ([14a24f2](https://github.com/google/adk-python/commit/14a24f2beeb8583d98c5b1b1933e82652751e0aa))
- HTTP traces for MCP server requests/errors ([4c4f77a](https://github.com/google/adk-python/commit/4c4f77ae39f7c98591b9469e70a145d08a170151))
- Implement Workflow as Tool core feature ([1263ed6](https://github.com/google/adk-python/commit/1263ed64e30805464fff3391554f65ebbf72746b))
- **integrations:** Add DaytonaEnvironment for remote sandbox workspaces ([df6baf4](https://github.com/google/adk-python/commit/df6baf4acf5f91a2c038834a0881608d02b1abff))
- **interactions:** stream thought, media, code-exec and function-result deltas ([b2dda6e](https://github.com/google/adk-python/commit/b2dda6eb6cf9b0ef38824787f542d6f2bc0ed444))
- **interactions:** surface streamed grounding and final usage metadata ([6a50b8d](https://github.com/google/adk-python/commit/6a50b8d17f618e1241b94eab58d38e10e16a9d81))
- **memory:** add Vertex AI load_profiles tool ([fb2b3af](https://github.com/google/adk-python/commit/fb2b3afea11fc2b1c0d22bb2cfca28370ccf8122))
- **models:** Add configuration options to Gemini class ([037ec12](https://github.com/google/adk-python/commit/037ec127e4adfce70dfe8772e10921209439c061)), closes [#3813](https://github.com/google/adk-python/issues/3813)
- **models:** surface and recover environment_id from interactions ([81f9f2e](https://github.com/google/adk-python/commit/81f9f2ecaa2272a5461ead62e7b5ef2b7a222f04))
- **plugins:** add otel correlation, custom_metadata allowlist, and column projection to BigQuery analytics ([38d715c](https://github.com/google/adk-python/commit/38d715cbae2ab160ea1833baa3eebd8c3c93120f))
- **scripts:** add check for private-by-default new Python files ([63561ce](https://github.com/google/adk-python/commit/63561ce7192faa77cc0abb45b29f07f512cfbb9c))
- support file_data URI references in GcsArtifactService ([43115b2](https://github.com/google/adk-python/commit/43115b222b2a9d7a58bab9fe3d0fe54aa5a1a583))
- support mTLS and GOOGLE_API_USE_MTLS_ENDPOINT for GDA client ([e85a7b2](https://github.com/google/adk-python/commit/e85a7b28df66c4e47cdf32cf8c981d3918d68bcc))
- Support passing dynamic custom headers to LiteLLM via RunConfig ([000d74d](https://github.com/google/adk-python/commit/000d74da704f4185a9de4e33423f3b46e8a4df67))
- Support provider-prefixed Gemini model IDs ([816a87f](https://github.com/google/adk-python/commit/816a87f35615edecc3a52335ab539d4ae8d62848))
- **tools:** add response_scheduling to control Live function response behavior ([7443bfa](https://github.com/google/adk-python/commit/7443bfaed1356b22adce7e741a94490667b7374d))
- **tools:** exposed configurable parameter as property in McpToolset ([cca8c56](https://github.com/google/adk-python/commit/cca8c5678d1066221f881debe7751ae08b84ab02))
- **tools:** resolve built-in tools for managed-agent requests ([f11d19d](https://github.com/google/adk-python/commit/f11d19d25b8a706dd9741e47da5fb80a146aad14))
- **tools:** Support tuple tool parameters ([a57c3e4](https://github.com/google/adk-python/commit/a57c3e4bfb8d21ace1337476b700b811f3c57cde))
- **utils:** Add support for nested state access in template injection ([94c43a2](https://github.com/google/adk-python/commit/94c43a269dcf6691556d38aef46360f04f736584))
- **workflow:** Allow ToolNode to accept JSON string or Content inputs ([4e44632](https://github.com/google/adk-python/commit/4e4463248b170664759d801f49131110e1b6c980))
Bug Fixes
- adapt interactions conversion to google-genai 2.9 SDK changes ([9f3aeef](https://github.com/google/adk-python/commit/9f3aeef55dd5c300618dd1be11393644fd672630))
- Add credential_key to ApplicationIntegrationToolset and IntegrationConnectorTool ([c6a94b8](https://github.com/google/adk-python/commit/c6a94b8b2bec9d7089bcd102c5911df0ed980c41)), closes [#4553](https://github.com/google/adk-python/issues/4553)
- Add debug level logging to mcp sse agent sample ([3962d0b](https://github.com/google/adk-python/commit/3962d0bca88c056c1165db8c469f341107f2aeab))
- add DNS-rebinding protection to _OriginCheckMiddleware ([9a4f479](https://github.com/google/adk-python/commit/9a4f479d9fdce9d1d7830a9df40ba59fe01088ea))
- add module blocklist for YAML agent config code references ([6a5be34](https://github.com/google/adk-python/commit/6a5be34bed12614f549f1a0d948b4bd281b775a6))
- add parameter validation for sync tools in ADK functions.py ([9b9d27d](https://github.com/google/adk-python/commit/9b9d27dae37cf2cb131c0308604444540a7d85cc))
- add trailing newline to check_new_py_files.sh ([21512ea](https://github.com/google/adk-python/commit/21512ea13cbe988404ad0a10b1ae6919faa10928))
- Address mypy failures in google_api_tool/ ([5301ffa](https://github.com/google/adk-python/commit/5301ffa2c71833b2cbf93a023e4ceaf9a748f320))
- **agents:** persist `output_key` when `before_agent_callback` short-circuits LlmAgent ([0e263f1](https://github.com/google/adk-python/commit/0e263f1b5effa374fae5e3609359f1db6c5a960e))
- **agents:** preserve text streamed before tool calls in output_key ([5a0b4af](https://github.com/google/adk-python/commit/5a0b4af5c459fe4b740465e889536a5b080ce80f))
- **agents:** prevent path traversal in AgentTool config_path resolution ([171ae9e](https://github.com/google/adk-python/commit/171ae9e7bef6cee5a39121a9ecd2a3e2298d9c9d))
- **ApplicationIntegrationTool:** implement dynamic mTLS endpoint resolution ([37ca6fb](https://github.com/google/adk-python/commit/37ca6fbeee6b8f206dc206178ed7a5b60ecfc1be))
- apply run_config custom_metadata to user event in node runtime ([066fbce](https://github.com/google/adk-python/commit/066fbce224a8e8166018d719143ec1f45c163b1b))
- **artifacts:** Preserve .text on GcsArtifactService load ([ba51ff2](https://github.com/google/adk-python/commit/ba51ff2e0ee1918c0fd235a8b90708609b901d1b)), closes [#3157](https://github.com/google/adk-python/issues/3157)
- **auth:** allow configuring OAuth prompt parameter ([ac99770](https://github.com/google/adk-python/commit/ac99770646a7112c6f53797ddf5d7f14dadf223b))
- **auth:** strip redirect_uri from credential_key ([ffa1843](https://github.com/google/adk-python/commit/ffa184395136c366bf498324191d43d7afb86df5))
- avoid mutating event validation input ([6b385e4](https://github.com/google/adk-python/commit/6b385e47ffebcd694078d2856fda7a2b8e69e2ce))
- Avoid overwriting existing isolation scope in stamp_event_branch_context ([798207a](https://github.com/google/adk-python/commit/798207aeacaf4f9348c76c35f538b7541b07f849))
- avoid yielding a None function-response event in live mode ([4d88a52](https://github.com/google/adk-python/commit/4d88a5227f7624a2a07bebd7fe23ad86b1d57c10))
- catch RecursionError in safe JSON serialization helpers ([5515800](https://github.com/google/adk-python/commit/551580058dd492c1bcca47c7698da90fea599ccc)), closes [#5411](https://github.com/google/adk-python/issues/5411)
- check if transfer target is a sibling agent ([fa18d26](https://github.com/google/adk-python/commit/fa18d26ae58f9f1309ef7c6a21c2f16feed63172))
- **ci:** Restrict GitHub Actions to main/v1 branches and main repository ([8c4173e](https://github.com/google/adk-python/commit/8c4173ee5c4ddf453b35987aebf0ed2d39a2fc05))
- **cli:** detailed error message on sse stream specifying stacktrack (error type on client side as well) ([56b84e1](https://github.com/google/adk-python/commit/56b84e1e3ee8328b53f059b2ff17a7785c47b455))
- **cli:** enable interspersed option parsing for cloud_run command ([7b049b9](https://github.com/google/adk-python/commit/7b049b9e534d3a2de7237d518ecda07f39f71412))
- **cli:** Ensure ADK compatibility in agent engine requirements ([ea772b9](https://github.com/google/adk-python/commit/ea772b93b9db5b613699bfd03d230749f43332f3)), closes [#5966](https://github.com/google/adk-python/issues/5966)
- **cli:** respect ignore files in adk deploy commands ([ee79e71](https://github.com/google/adk-python/commit/ee79e7129cb9b6295a24405525e929dcf2d98f90))
- **cli:** support flat-module agents in _determine_agent_language ([7a553b7](https://github.com/google/adk-python/commit/7a553b79541739c2911274b486827ae758163e57))
- concatenate list values in deep_merge_dicts during parallel tool call merge ([fda2347](https://github.com/google/adk-python/commit/fda23474bc6803d0a07652f137467e203da44b47)), closes [#5190](https://github.com/google/adk-python/issues/5190)
- concatenate list values in deep_merge_dicts during parallel tool call merge ([1ff84eb](https://github.com/google/adk-python/commit/1ff84ebb83245079dcf9c5f979ccd4f18e8c03f5)), closes [#5190](https://github.com/google/adk-python/issues/5190)
- Constrain artifact references to the caller scope ([f863150](https://github.com/google/adk-python/commit/f8631500c7e46b3ce417fdc47a483cfcf4032c7a)), closes [#6124](https://github.com/google/adk-python/issues/6124) [#6125](https://github.com/google/adk-python/issues/6125)
- correct misleading workflow-agent deprecation messages ([53a8ab1](https://github.com/google/adk-python/commit/53a8ab167fb2eb3fdd0507f08a81498b328a8411))
- Derive sandbox reasoning engine from template or snapshot name ([5afa9db](https://github.com/google/adk-python/commit/5afa9db61d1a989b484fd49441af493b5957d9af))
- drop nonexistent log_query tool from session_state_agent sample ([ade8577](https://github.com/google/adk-python/commit/ade8577745bda23588bc0ac71f93a9d3343ec80a))
- emit standard OTel cloud.resource_id for Agent Engine telemetry ([8fc25f1](https://github.com/google/adk-python/commit/8fc25f1eecb0d1c51f02d5cb621638d2641b2a8d)), closes [#6247](https://github.com/google/adk-python/issues/6247)
- Enable history_config on Vertex AI now that it is supported ([2920145](https://github.com/google/adk-python/commit/292014516b9896ccd0624b4f937ebe246f205652))
- enforce agent-config args denylist when loaded under adk web ([e506fa6](https://github.com/google/adk-python/commit/e506fa6ba03b83f894e2771e6172087e02efad73))
- ensure AgentTool text output when skip_summarization is True ([b983fcf](https://github.com/google/adk-python/commit/b983fcf9033b385e3120bc6e03b6106b332f700d)), closes [#3881](https://github.com/google/adk-python/issues/3881)
- exclude live HTTP clients from trace serialization ([59868ea](https://github.com/google/adk-python/commit/59868ea8e76ba2007655a79e3d2d6060ade63590))
- exclude scripts/ from pre-commit compliance checks ([c91fc75](https://github.com/google/adk-python/commit/c91fc752a5fa2680d41064461f3fb3a5675372da))
- exit connection cleanly on expected GoAway signal in bidi streaming ([4d165ef](https://github.com/google/adk-python/commit/4d165efbfffac2006a58c26aba35e9544a6ed9f5))
- fingerprint cacheable context prefix ([7c7f1e7](https://github.com/google/adk-python/commit/7c7f1e706ab04474c3c992473f21939404c9720a))
- **firestore:** preserve update timestamps in list_sessions ([99ba8ce](https://github.com/google/adk-python/commit/99ba8ce2d976ef93864aa956a6eb0e1ec407cb03))
- Fix branch parsing and unify branch stamping ([9e3b43f](https://github.com/google/adk-python/commit/9e3b43fc9245dbfc927271cb6252b15db6efa3db))
- Fix Code Generation Template Injection via Filenames ([e042b8d](https://github.com/google/adk-python/commit/e042b8df227335cbb8b3b65016779cf4e636df29))
- Fix error swallowing in MCP session context ([ccb8138](https://github.com/google/adk-python/commit/ccb8138eca5ca5776b4a1310207f23838d20989b))
- Fix event loop closed and thread leak errors in unit tests ([2f2e03b](https://github.com/google/adk-python/commit/2f2e03b4acf573ecf25fcd5a906cbe78225bf450))
- Fix instructions_utils matching invalid nested paths ([20ba01c](https://github.com/google/adk-python/commit/20ba01c2caf8e29140d790fa988c3605f309c798))
- Fix MCP debug client factory compatibility with keyword-only factories ([1ad8864](https://github.com/google/adk-python/commit/1ad88641b931656b368f1263aed301cc5609f13b))
- fix polling loop in IAM Connector Credentials Provider when consent is pending ([a614507](https://github.com/google/adk-python/commit/a614507b8eae2786195809ca6fdf357cd3c657b1))
- Fix regression in instructions_utils placeholder matching ([9ecbaed](https://github.com/google/adk-python/commit/9ecbaed5d61513d698fb5a10e04ab2e92bd577e7))
- Fix Vertex AI Live API session replay on reconnect / modality switch ([c007a87](https://github.com/google/adk-python/commit/c007a87468ba3db805d60a2b56460b56870402b0))
- guard against None converter results in RemoteA2aAgent ([23ff66e](https://github.com/google/adk-python/commit/23ff66e213e38226169911237fc6a775ef31af76))
- guard against None converter results in RemoteA2aAgent handlers ([2e3d717](https://github.com/google/adk-python/commit/2e3d717c5d418df0b5de902d69635dc6e3dcaf6f))
- guard user_content assignment against None in EvaluationGenerator ([6bc9c9f](https://github.com/google/adk-python/commit/6bc9c9fb78ae0edeecde02fe24e2879f9a96c676))
- Handle empty message in LiteLLM response ([d3e793f](https://github.com/google/adk-python/commit/d3e793ff924e07e6b4379607a3c7ce1f3d304fb0))
- handle Pydantic models in safe_json_serialize for tool tracing ([25d666a](https://github.com/google/adk-python/commit/25d666a7eb8844d1105f41ba844afe108130a427)), closes [#4629](https://github.com/google/adk-python/issues/4629)
- harden ContainerCodeExecutor sandbox by default ([0a9ce0f](https://github.com/google/adk-python/commit/0a9ce0f691d2ac3960359962453259a5e2ec9f60))
- implement dynamic mtls endpoint resolution for parameter manager ([62b9700](https://github.com/google/adk-python/commit/62b97007378c4da749a1615d0881aba443a32325))
- implement dynamic mtls endpoint resolution for secret manager ([5d4a13f](https://github.com/google/adk-python/commit/5d4a13f1ce4395ed6ee9c1bad39558c5661fddaf))
- import App lazily in _resolve_app to fix legacy Runner NameError ([7481d07](https://github.com/google/adk-python/commit/7481d07e84d1efd5ef757f619fbf4dccad4b6f7f))
- in mcp mtls logic, check for authorization header case insensitively ([3870032](https://github.com/google/adk-python/commit/38700324134f8d392a577f0cda78e4c4400e69d2))
- LiteLLM Claude thinking blocks with display: "omitted" were lost ([7461863](https://github.com/google/adk-python/commit/7461863ee142a6e9b03e212ae4dd7281bd4c52bf))
- Litellm preserve streamed reasoning deltas in LiteLLM adapter ([b9625bf](https://github.com/google/adk-python/commit/b9625bfd709282b96c259f3c8136beb4c79955eb))
- **litellm:** parse DeepSeek-V3 proprietary inline tool-call tokens ([c5b2caa](https://github.com/google/adk-python/commit/c5b2caad2d866ea03093f3303b3e96f569d88cba))
- **LiteLlm:** recognize assistant- prefix as valid OpenAI file ID ([ea325c7](https://github.com/google/adk-python/commit/ea325c7b3c4503a62e4f2d6d44e4f6984e522e6d)), closes [#5664](https://github.com/google/adk-python/issues/5664)
- **LiteLlm:** recognize assistant- prefix as valid OpenAI file ID ([796964a](https://github.com/google/adk-python/commit/796964ac49047838e47dc923852d99cf682f162c))
- **live:** fix the return type hint of handle_function_calls_live ([9865e2b](https://github.com/google/adk-python/commit/9865e2bc9ec6f6356435d50a8658fa347d100186))
- **live:** forward thinking config ([71d8c84](https://github.com/google/adk-python/commit/71d8c8422afee21f25684baf595661eefb7d65f8))
- **live:** keep streaming tool yields from completing turns ([07aa1e0](https://github.com/google/adk-python/commit/07aa1e09e2c2b3aebd9c3457f30e57b9f9b167b7))
- Make EUC request args JSON-serializable ([a181a39](https://github.com/google/adk-python/commit/a181a395f24fbf24366724ea4d3b8d3f5ab11509))
- map A2A Message.role to correct GenAI content role ([fe08a9f](https://github.com/google/adk-python/commit/fe08a9fb5a4dca38d5c7ed606cbce1d6731ce0ac))
- **mcp:** await async MCP header providers ([c01e538](https://github.com/google/adk-python/commit/c01e5380206b55428d4a20ea16a1fa7cfbc8e5db)), closes [#6090](https://github.com/google/adk-python/issues/6090)
- **mcp:** propagate trace context in default streamable HTTP client ([431e3c2](https://github.com/google/adk-python/commit/431e3c2e2033b72950570b023eb45fd08e761cec)), closes [#4768](https://github.com/google/adk-python/issues/4768)
- migrate AgentRegistry base URLs from v1alpha to v1 ([82432a3](https://github.com/google/adk-python/commit/82432a317ac56dea597a6e81b756b70f122f504d))
- **models:** gate Gemini cache creation on cacheable prefix tokens ([1070036](https://github.com/google/adk-python/commit/10700363978c739005690b5055bbdb036f0e3d6e))
- N sized sliding window ([d00ad67](https://github.com/google/adk-python/commit/d00ad67e4055d2747ce0729853ade29279075139))
- preserve Anthropic thinking blocks and signatures in LiteLLM round-trip ([febb250](https://github.com/google/adk-python/commit/febb250bf240dad9b791a0c9ed8f8971e96b30ab))
- preserve JSON-native types in A2A _serialize_value() ([139c700](https://github.com/google/adk-python/commit/139c700de6c79b3764cd578efafe9f3b618ccfb0)), closes [#5183](https://github.com/google/adk-python/issues/5183)
- prevent crash when parsing default values for typing.Any parameters ([e360241](https://github.com/google/adk-python/commit/e360241b8beaaf7112593aa2fe0cf35e2d3a4bfe))
- prevent empty responses after load_skill ([7c79230](https://github.com/google/adk-python/commit/7c79230980cdc941cb222b2c2d7246f5ea1fe0be))
- prevent VertexAiRagRetrieval from blocking the event loop ([5898f37](https://github.com/google/adk-python/commit/5898f37a90a78338a87f3d895d815b12c1c32ef2)), closes [#5033](https://github.com/google/adk-python/issues/5033)
- prevent warning logs when cancelling MCP session runner task ([4aa0fd8](https://github.com/google/adk-python/commit/4aa0fd8df4d93f6b2ab8c79373cde08f2cf3a9f7))
- propagate Gemini grounding metadata from ModelResponse ([c303c62](https://github.com/google/adk-python/commit/c303c623ba5608887ee766baf6bb5e6ad373feac))
- raise ValueError for unsupported MIME types in file_data URI path ([42eceb3](https://github.com/google/adk-python/commit/42eceb3a59628a6beadd53fa6eff217fc383c9d9))
- reconnect on live connection 1011 error ([f36d257](https://github.com/google/adk-python/commit/f36d2573195c172be1062ffb4c079a7cea597a92)), closes [#5525](https://github.com/google/adk-python/issues/5525)
- recurse into JSON-native containers in A2A _serialize_value() ([c08debc](https://github.com/google/adk-python/commit/c08debc93fa540a1c181918da9d19825470d02a3))
- refactor `_redact_file_uri_for_log` to dynamically extract file ID prefixes (`file-`, `assistant-`). This ensures compatibility with both current prefixes and future OpenAI/Azure file ID types. ([ea325c7](https://github.com/google/adk-python/commit/ea325c7b3c4503a62e4f2d6d44e4f6984e522e6d))
- remove unit test with wrong assumption about claude thinking parts ([94fcdbb](https://github.com/google/adk-python/commit/94fcdbb8573940e1a9acec60b4cac9beab51b334))
- remove unused userinfo_endpoint from GoogleApiToolset OIDC config ([1509dcf](https://github.com/google/adk-python/commit/1509dcf3f4b9d8383fe3f596984623ddfb51b2cb))
- restore auth_token initialization for secret and parameter manager clients ([46a2181](https://github.com/google/adk-python/commit/46a2181761ece50ca23ee95509574bf5acd9a6c0))
- Rollback instruction util refactoring as its breaking internal customers ([59fe9b3](https://github.com/google/adk-python/commit/59fe9b3bb83277f23f39ed0e71e392b4306ebe83))
- sandbox nested persona template rendering in evaluation prompts ([30493ba](https://github.com/google/adk-python/commit/30493bae56f62dddb8adde249e9cd0654882bd05))
- scope single-turn node inputs to workflow branch ([8d389e2](https://github.com/google/adk-python/commit/8d389e233b747de9c09192b07f158caa7f9fb908))
- **security:** enable Jinja2 autoescape to prevent XSS in gepa sample ([a721c1e](https://github.com/google/adk-python/commit/a721c1eb3433bd2764bed68733b4f475ff7b7c67))
- send correct field names for sandbox input files ([2b7e08a](https://github.com/google/adk-python/commit/2b7e08a5e190eebc1b82e224eac3632cf5dfe063))
- **sessions:** drop unsupported part_metadata before Vertex appendEvent ([40a0279](https://github.com/google/adk-python/commit/40a02795707d131487c24e2f5321e43505b0a273)), closes [#6014](https://github.com/google/adk-python/issues/6014)
- **sessions:** strip tzinfo for MariaDB in DatabaseSessionService ([2f799d5](https://github.com/google/adk-python/commit/2f799d5196ad04c322f51f5dc084400558f29b41))
- Set persist-credentials to false in release-update-adk-web workflow ([79b8923](https://github.com/google/adk-python/commit/79b8923679524516b15295865636cd469a854dd9))
- strip tzinfo from datetime for MySQL in create_session ([a012bb7](https://github.com/google/adk-python/commit/a012bb7542d481538ad9162993c63ad73259b357))
- surface error for empty STOP model turn in non-streaming mode ([932a9b5](https://github.com/google/adk-python/commit/932a9b5615055672bedc482fbeb1e7f05acc9a9c)), closes [#5631](https://github.com/google/adk-python/issues/5631)
- **telemetry:** always export Agent Engine logs to stdout ([e6df097](https://github.com/google/adk-python/commit/e6df0979da56f1c344d7c213d9522b4c9cca56eb))
- **telemetry:** emit gen_ai.workflow.nested for nested workflows ([20197de](https://github.com/google/adk-python/commit/20197de92931dafa53726c8aef042ba893537826))
- terminate infinite retry loop in RunSkillScriptTool on SCRIPT_NOT_FOUND ([89d9bda](https://github.com/google/adk-python/commit/89d9bda72e412f04730e6836726282c54180a756)), closes [#5684](https://github.com/google/adk-python/issues/5684)
- **tools:** accept dict output_schema in SetModelResponseTool ([#5469](https://github.com/google/adk-python/issues/5469)) ([d69dedd](https://github.com/google/adk-python/commit/d69deddb1302775f812ed044ac6ba8a4a0685b14))
- **tools:** handle tuple schemas in function parsing fallback ([4fa7741](https://github.com/google/adk-python/commit/4fa774192ad0971074d95577368304f0f0ddb655))
- Truncate MCP http debug logs if greater than 1000 chars ([3ebef82](https://github.com/google/adk-python/commit/3ebef82a52f2b650d1ee1f94dbdeeb31fbd0ae10))
- Update custom gemini llm connection logic to be used for all 3_x models, not just 3.1 ([8aff514](https://github.com/google/adk-python/commit/8aff5141e3b22f273d685e2967f57ffa5a5197d1))
- update litellm dependency constraint to >=1.84.0 ([a912306](https://github.com/google/adk-python/commit/a912306ad79fb100646a8b81082bcf9fe21d2e58))
- update mtls_utils import in secret_client.py ([0b79f8d](https://github.com/google/adk-python/commit/0b79f8da4ca7ee06405cfc7ccfec8925b8210e96))
- use branch-scoped events for auth responses ([f706a1e](https://github.com/google/adk-python/commit/f706a1ec7d11baad1620cf819a75f606d2a3c97a))
- use exchanged OAuth credential in ApplicationIntegrationToolset ([e76df3d](https://github.com/google/adk-python/commit/e76df3d4d1991836b78c1666a8f1218683c5d6c2))
- use Modality enum for RunConfig.response_modalities ([5c8c55a](https://github.com/google/adk-python/commit/5c8c55a7632f2388fea7af37cddba54714f84eb1))
- use mTLS endpoint for Google OAuth2 token requests ([ffe41f0](https://github.com/google/adk-python/commit/ffe41f050c147d5bff91b065b61df14c471b3bd6))
- Use RELEASE_PAT for checkout in release-update-adk-web workflow ([28b7721](https://github.com/google/adk-python/commit/28b77212588a018ffd081b995f92776ba1556509))
- validate local eval path segments ([7b87f91](https://github.com/google/adk-python/commit/7b87f910cd69b22d8a7d6ea2a0ec5fcd403fb000))
- Wrap math formulas in `math` blocks in retry config guide ([a40f199](https://github.com/google/adk-python/commit/a40f19930f90cd144a282dc1f5af6b425876bcb3))
Performance Improvements
- avoid deepcopy of session contents when building LLM requests ([400f512](https://github.com/google/adk-python/commit/400f512d812a0c92ebee5d13b5e7448516a55eae))
- create SQLite session schema once per service instance ([10a2cc5](https://github.com/google/adk-python/commit/10a2cc5d78609c59102c718ca3f162d3e64418d8))
- remove state injection when instruction has no placeholders ([59970b6](https://github.com/google/adk-python/commit/59970b610962ccc9869d1256339163664d526bd1))
- skip event query in DB get_session when num_recent_events is 0 ([7e8191a](https://github.com/google/adk-python/commit/7e8191aec68d4e0512d7d05e2bbe0559111c2832))
Documentation
- Add manual batch mode trigger for ADK Pull Request Triaging workflow ([dbd4bb0](https://github.com/google/adk-python/commit/dbd4bb07d0cd396f74c1558b6e9459f6e87a4ce9))
- clarify is_final_response() is a public helper ([978be4b](https://github.com/google/adk-python/commit/978be4b13359fc38e8385dcf3bac0cc8156750f2)), closes [#4016](https://github.com/google/adk-python/issues/4016)
- fix typo in per-turn user simulator quality prompt ([9a79fa1](https://github.com/google/adk-python/commit/9a79fa1e3117c6392ad0aa3a33ac57ac3e127c62))
- index missing reference guides in adk-agent-builder SKILL.md ([c922b08](https://github.com/google/adk-python/commit/c922b08212b58e3b67e26cc15aea2e9d1ba2b46d))
- remove trailing whitespace in dynamic_nodes guide ([a7377b4](https://github.com/google/adk-python/commit/a7377b446abc6879f75d27fbd3e9c5293f6a8d06))
- **samples:** Add ManagedAgent code-execution sample ([527e3c1](https://github.com/google/adk-python/commit/527e3c1089ab13ad6f8ef2aee9f05cb823d726e7))
- **samples:** Add ManagedAgent sample using server-side google_search ([969909f](https://github.com/google/adk-python/commit/969909f2ba30c3483feae18f6d585e24e03b2610))
- Sort PRs by update time in list_untriaged_pull_requests ([8679aa8](https://github.com/google/adk-python/commit/8679aa8e955afec20312493357ca3cd379f358dc))
- Streamline open_source_workspace/AGENTS.md ([ea2ea73](https://github.com/google/adk-python/commit/ea2ea7390504970a710743295c09ee45525c0317))
- Update ADK Pull Request Triaging Agent workflow to run periodically ([b3f278a](https://github.com/google/adk-python/commit/b3f278a692b51a0d138d355607bbd6c11ba1fae0))
- update GoogleSearchTool docstring to refer to Gemini models ([8b011f9](https://github.com/google/adk-python/commit/8b011f9ec93d115580f98e48cca2f0f9b7db6b88)), closes [#12345](https://github.com/google/adk-python/issues/12345)
- Update sample-creator skill with agent topology graph rule ([7423101](https://github.com/google/adk-python/commit/7423101f64b82f3d838231898751702ec2e18f9c))
- **workflow:** Add and update workflow developer guides ([e5c7d20](https://github.com/google/adk-python/commit/e5c7d20d5d93fc495d95f162f393c00e0357f8c9))
Bug Fixes
- exit connection cleanly on expected GoAway signal in bidi streaming (v1) ([#6264](https://github.com/google/adk-python/issues/6264)) ([de2abdf](https://github.com/google/adk-python/commit/de2abdf333b7d4150529a3ed1f22bcfa55df66e0))
- Fix Vertex AI Live API session replay on reconnect / modality switch ([#6218](https://github.com/google/adk-python/issues/6218)) ([4caf782](https://github.com/google/adk-python/commit/4caf782af7e02e619c73c545d7f92b0c3445018c))
Features
- **interactions:** support for GenAI SDK upgraded to 2.9+ ([#6191](https://github.com/google/adk-python/issues/6191)) ([7a9152a](https://github.com/google/adk-python/commit/7a9152a382b05a2a733adbc9bde25dacb02893a2))
Features
- add create_http_options to ContextCacheConfig for cache creation timeout ([ffc9677](https://github.com/google/adk-python/commit/ffc9677154e37aa51ddc7ff760c3b25929b68aaa)), closes [#4703](https://github.com/google/adk-python/issues/4703)
- add GCS first party toolset to ADK integrations ([fb19e1a](https://github.com/google/adk-python/commit/fb19e1a15537083f34baa798f90a79504de6e95b))
- Add log_level option for adk run CLI ([1ac69a9](https://github.com/google/adk-python/commit/1ac69a9033d470d24a7d801dd035224dc0987cad))
- Add mTLS support in AgentRegistry client ([03671c6](https://github.com/google/adk-python/commit/03671c63f09cc7db6ae71bcfe8e93f3e2babf0f0))
- add request timeout to load_web_page ([792775f](https://github.com/google/adk-python/commit/792775f1378eaa00b02739b30ebe1a2b55481aed))
- **core:** migrate core and CLI to enterprise parameters ([68221f0](https://github.com/google/adk-python/commit/68221f05b14a9a93f8ccb83896d544f338b3e1f2))
- Create GEPARootAgentOptimizer ([654145a](https://github.com/google/adk-python/commit/654145a7e92c57c15728fe394a72e15e8c4889af))
- **eval:** expose user_simulator_config in generate_responses ([e7a673c](https://github.com/google/adk-python/commit/e7a673ccd0d01b35edb6563d109d472f91d8fc63))
- **gemma4:** support Gemma4 in Gemini ([573f043](https://github.com/google/adk-python/commit/573f04344dc943c59de9afe39c698b81de556d7a))
- **integrations:** Add E2BEnvironment for remote sandbox workspaces ([92d608f](https://github.com/google/adk-python/commit/92d608f83e68df7237796f6691de1b3e8751880b))
- **labs:** add experimental Antigravity SDK agent wrapper ([4cb27fd](https://github.com/google/adk-python/commit/4cb27fd42e5cb748d6351b4f061e5bab7c88733c))
- lazily initialize the Vertex AI client in GCPSkillRegistry, and fix the import path for `vertexai` ([65dca53](https://github.com/google/adk-python/commit/65dca53a088d601043d7caa0810e9d1a836ce0b1))
- **live:** Handle input transcription differently for Gemini Live 3.1 models ([048deea](https://github.com/google/adk-python/commit/048deeaeb73d002f75dcaf8c37716542daa4eca1))
- **live:** support Live API translation config in RunConfig ([463040f](https://github.com/google/adk-python/commit/463040fdca4ca9cfe8883f591134ace6e1827eb5))
- Migrate McpToolset to AsyncAuthorizedSession for mTLS support ([fe497a4](https://github.com/google/adk-python/commit/fe497a4f5d3c2176f0b9418e0cc3e658d1a8fd29))
- **plugins:** ADK 2.0 minimum producer cut for the BigQuery Agent Analytics plugin ([e2676fc](https://github.com/google/adk-python/commit/e2676fcbe67c730468e7c2905ca50dd29bf442a4))
- report cached token counts for Anthropic and OpenAI models ([b15c8a0](https://github.com/google/adk-python/commit/b15c8a0fe19ae937d832bb0410a8639da2d86cdf))
- **telemetry:** support per-request OpenTelemetry configuration ([abcaa08](https://github.com/google/adk-python/commit/abcaa08bd69412f2ac9e7a43597947ef71c24e0d))
- Update gcp_auth client UI to support Remote Agents ([57bdecf](https://github.com/google/adk-python/commit/57bdecfcb10df92a738f0652ea5782e5d4e984c7))
- **utils:** add GOOGLE_GENAI_USE_ENTERPRISE env var with deprecation fallback ([4e85e9c](https://github.com/google/adk-python/commit/4e85e9c33511a89b850ca9dea89ca7a8cc929dde))
Bug Fixes
- **a2a:** Preserve execution metadata in final events ([e90b119](https://github.com/google/adk-python/commit/e90b11958d9ec6eeb1ba58e75646984a99beec12))
- **a2a:** render HITL interrupt when prompt is in a data part ([b9e7fca](https://github.com/google/adk-python/commit/b9e7fcade13ef3f2774ff8bde135e3aa107cf58d))
- **a2a:** set final=True for error TaskStatusUpdateEvent in event_converter ([5efe53d](https://github.com/google/adk-python/commit/5efe53dff40e82e7d2b6eeaa2ba61b36fe98152c))
- **a2a:** suppress part_metadata in Vertex AI mode ([065f4ae](https://github.com/google/adk-python/commit/065f4aed46e65152ee0487f76a60668d855ff3d5))
- add a2a as a required dependency for agent_engine deployment ([d2ebacb](https://github.com/google/adk-python/commit/d2ebacb9d7e0f8597bdcbde845e6f5c536c352b7))
- **adk:** propagate exceptions from run_node in standalone mode ([63841c3](https://github.com/google/adk-python/commit/63841c33331267fb5d38aef52a9e40723d3802be))
- **adk:** propagate isolation_scope to prevent history filtering loops ([f39d75b](https://github.com/google/adk-python/commit/f39d75b99e83a539c29ac4ef81a61ec33c188858))
- **agents:** await cancelled tasks in _merge_agent_run_pre_3_11 to prevent aclose() RuntimeError ([9310ba7](https://github.com/google/adk-python/commit/9310ba75c6cc9660ce0b0c53d6448a52077dedc6))
- api-registry to fetch all services ([81b8067](https://github.com/google/adk-python/commit/81b806715542aaf41e6f254a7798b0b0baef281d)), closes [#5478](https://github.com/google/adk-python/issues/5478)
- **artifacts:** Support nested API names ([b99546b](https://github.com/google/adk-python/commit/b99546bfa359acf800b8f6dab34fe475a924373d))
- **auth:** handle missing client-credentials scopes safely ([a546bcf](https://github.com/google/adk-python/commit/a546bcf743ab8ccd10fbbb893e54bb4d27d2c917)), closes [#5345](https://github.com/google/adk-python/issues/5345)
- avoid UserWarning in _build_response_log when response has funct… ([f022307](https://github.com/google/adk-python/commit/f022307db3e93185063978cd1cecb28a7d4c96fd))
- call to sanitize schema for complex union types ([9808451](https://github.com/google/adk-python/commit/980845103a3e457cf7b76a1b91a6fdfa573f8bb8))
- **ci:** add repository check to prevent workflows from running on forks ([90bd38f](https://github.com/google/adk-python/commit/90bd38fb13476e8111ccf63cff4a2de7cb9ac1e9))
- **ci:** Resolve missing sqlalchemy error in adk_release_analyzer ([107dc38](https://github.com/google/adk-python/commit/107dc384bf017f43fbd3c9a285b717678663a353))
- **cli:** Serialize LiteLlm graph models safely ([c1e852f](https://github.com/google/adk-python/commit/c1e852fd2df3b476d298193a489da27e9271f6ec))
- **conformance:** normalize tool declarations in replay verification ([dd97e76](https://github.com/google/adk-python/commit/dd97e76cb2b54a41d6c6724d0b9bab9b0a6045cf))
- Default subagents to chat mode in build_node ([ad560ce](https://github.com/google/adk-python/commit/ad560ce08f6377738adf92f7058437caa985a63e))
- **deps:** Require otel google-genai instrumentor >=0.7b1 for genai 2.x ([2b8c80c](https://github.com/google/adk-python/commit/2b8c80c1e350edefc76b7d6f2c642e75fe817956))
- **eval:** handle failed inference results without invocations ([9a6cf60](https://github.com/google/adk-python/commit/9a6cf60fa8d54523e95943ebdb49d4f35341aed0))
- **eval:** handle unevaluated final response v2 results ([5cfef01](https://github.com/google/adk-python/commit/5cfef0173d359ee907bc09099fafdde61098299b))
- **eval:** include function-call events in invocation_events when skip_summarization is set ([5b16a86](https://github.com/google/adk-python/commit/5b16a867d06c222e6eacbddfe03894336d5a0bc5))
- **eval:** preserve custom eval metadata ([780b0ab](https://github.com/google/adk-python/commit/780b0ab1595c0c74025aea2b4bd8084bc6c1d19a))
- Extract grounding_metadata from Live API server_content ([8a294af](https://github.com/google/adk-python/commit/8a294af52d3c2884368a059f59ea854090f3b0e5))
- Fix silent dead end when conditional routes are unmatched ([6af4562](https://github.com/google/adk-python/commit/6af456203088d23100a03b8854c6286fb2c39103))
- Fix typing for create_client in mcp_session_manager ([c6546a7](https://github.com/google/adk-python/commit/c6546a75dff7de3556c8364e407feeebfd7fece0))
- fix vertex_ai_session_service crashing when Agent Engine passes full resource names instead of short session IDs ([60c55ad](https://github.com/google/adk-python/commit/60c55ad74570ae73d2ae6aec696a225fdd34519a))
- **flows:** terminate invocation at tool-level EUC ([883ff98](https://github.com/google/adk-python/commit/883ff98aef505e9901218e2c98ce671c068355f3))
- Format files to fix pre-commit failures ([395848a](https://github.com/google/adk-python/commit/395848af51d5b7d1db81ea9bc5ef02c0d3d47dca))
- Format the files ([9670ce2](https://github.com/google/adk-python/commit/9670ce2644f422892997c65940e7330f1a26f799))
- gate pr-triage secrets on same-repository pull_request_target ([0d20b7c](https://github.com/google/adk-python/commit/0d20b7c0a6060c0cd490e33b89ffae44c49722f6))
- handle missing agent name in readonly context ([a890399](https://github.com/google/adk-python/commit/a890399fecb82aab72ff8370f8002f8892a075fa))
- improve error message when beautifulsoup4/lxml not installed for load_web_page ([d9f189c](https://github.com/google/adk-python/commit/d9f189c7a32ff154bae069b6c5649a2cf6268490)), closes [#4852](https://github.com/google/adk-python/issues/4852)
- **live:** history_config rejection on Vertex/Enterprise Live sessions ([8f85260](https://github.com/google/adk-python/commit/8f852603a4cbd2739f7faed73fe153ac9436cf68))
- **live:** propagate output token count in live API usage metadata ([7e8965d](https://github.com/google/adk-python/commit/7e8965d33182f43433a3ab5596e625a3cb824f62))
- log diagnostics for empty or unparseable rubric auto-rater output ([fe56f31](https://github.com/google/adk-python/commit/fe56f31951fe34f4f1d74d0258dc0ebf64a630f1)), closes [#5732](https://github.com/google/adk-python/issues/5732)
- make DatabaseSessionService visible in API docs ([69ecf07](https://github.com/google/adk-python/commit/69ecf079b361b258203cbb1d92db1f3861d8eab8)), closes [#4331](https://github.com/google/adk-python/issues/4331)
- Mock google.auth.default in test_fast_api.py ([a7ceb3f](https://github.com/google/adk-python/commit/a7ceb3fb79dfdeefd787d8f7ee756cd6f4c7d2ed))
- **models:** pass NOT_GIVEN to Anthropic when no system_instruction ([3f505d2](https://github.com/google/adk-python/commit/3f505d2973d83d4a8a3f5897be5b14796d178c3e)), closes [#5318](https://github.com/google/adk-python/issues/5318)
- **models:** surface error when model returns STOP with empty content ([ff95d2f](https://github.com/google/adk-python/commit/ff95d2f712b03617872b04a21e91b0063249f8e3))
- **models:** surface error when model returns STOP with empty content ([423cd28](https://github.com/google/adk-python/commit/423cd28c929738618b8d814f043e83d342e26f8c))
- Move google-cloud-parametermanager to optional dependencies ([0856093](https://github.com/google/adk-python/commit/0856093a4727816ea510be5e44bc707b3ba8a64e))
- Only send grounding_metadata for 3.1 live at the end of each turn ([1f2e59b](https://github.com/google/adk-python/commit/1f2e59b0452209e8fd39513ac23d4da0fe253475))
- **otel:** Handle empty contents in experimental semconv ([d611f11](https://github.com/google/adk-python/commit/d611f1172643c0c85314dea43f08d47a7a39abe8))
- **planners:** allow BuiltInPlanner subclasses to override process_planning_response ([f8e9195](https://github.com/google/adk-python/commit/f8e9195d3d2f71d7d0078e8ffecdc020bbc2e6b7))
- **planners:** keep all leading parallel function calls ([054da5d](https://github.com/google/adk-python/commit/054da5d00e4f2e4e363ec691e568f1f71f4eb29d))
- **plugins:** write BigQuery analytics rows when invocation agent is None ([bc08f46](https://github.com/google/adk-python/commit/bc08f46a8c408c16ed3bbb737158a3294bdcec9a))
- preserve empty GCS text artifacts ([8e2b06d](https://github.com/google/adk-python/commit/8e2b06dd640d004a202b3d79da0d0b0cd24d7a08))
- Preserve event details when output is delegated ([a5a3f2e](https://github.com/google/adk-python/commit/a5a3f2e87863ad1ebef42421f3aa53db4b2645d4))
- preserve function call ids for litellm models ([1ad348d](https://github.com/google/adk-python/commit/1ad348d6f77e77455c3cdcacce9a578073e6ba52)), closes [#2621](https://github.com/google/adk-python/issues/2621)
- prevent compaction from orphaning function responses ([71b936b](https://github.com/google/adk-python/commit/71b936bf48de2c1e66f6a032d132ca9cd70f6726))
- prevent ReDoS in code block extraction ([910e1c1](https://github.com/google/adk-python/commit/910e1c13219f6da03c3553ea3039cbfef790ea49))
- propagate model_version and other metadata in streaming responses ([342b59d](https://github.com/google/adk-python/commit/342b59d55c9b409bd86eb28f78b92901f82ae3b0))
- remove developer notes from transfer_to_agent docstring ([2a0b4e7](https://github.com/google/adk-python/commit/2a0b4e75d4ed88b16200937a04cc5b3bc28435c3))
- remove live event buffering in runner ([4340208](https://github.com/google/adk-python/commit/4340208b172ee90769720a9380c51a61aa66e5b5))
- remove the issue/PR analyze and fix agent workflows ([9127feb](https://github.com/google/adk-python/commit/9127febfd5cb78f6f7e0fec447b4f91e0606dd92))
- remove the issue/PR triage and fix agent workflows ([66730e9](https://github.com/google/adk-python/commit/66730e9d87915a9371b10ecf3ae9a0c37c4aba04))
- Reset retry attempt counter on successful connection ([ca8baf1](https://github.com/google/adk-python/commit/ca8baf193634bb81661ec6f5cd2c171c5b70ff5b))
- restore GitHub-only changes dropped during v2 bring-over ([cb48d01](https://github.com/google/adk-python/commit/cb48d015d8441f78d81d590c1186786617c3063d))
- **sessions:** Further fixes for DatabaseSessionService ([f0ec997](https://github.com/google/adk-python/commit/f0ec997bc01268adbd68c1a4ca824f156548e601))
- **sessions:** honor zero recent events in database service ([d9a672e](https://github.com/google/adk-python/commit/d9a672eccf73b611ca954c0cd5cf56931d33d1bf))
- **sessions:** Prevent MissingGreenlet after append_event with asyncpg ([06959b9](https://github.com/google/adk-python/commit/06959b95ed2c1dfe3fe910b73e9232789b5e6d38))
- Set role='model' for request_input event Content ([0c6974c](https://github.com/google/adk-python/commit/0c6974cbc4752eeab75b067e2bdb368e8a72dd15))
- **skills:** enforce utf-8 encoding when materializing skill files on Windows ([0cb4c81](https://github.com/google/adk-python/commit/0cb4c814928f579bfbac9b9e1f95669e4304e089))
- skip crewai test on ImportError for pytest 9.1 compatibility ([4aaf494](https://github.com/google/adk-python/commit/4aaf4947605b71481e3f2676dbca29742749c0d5))
- Stop interpolating release analyzer workflow inputs into shell commands ([5a129a4](https://github.com/google/adk-python/commit/5a129a450ff6a4f586d8bc887c037c5c3f5f10fe))
- support non-Latin text in InMemoryMemoryService search ([be1425b](https://github.com/google/adk-python/commit/be1425b7551310e9e8e3da8a559a6b481bd1ebee))
- surface MALFORMED_FUNCTION_CALL so on_model_error can recover ([2fffcd9](https://github.com/google/adk-python/commit/2fffcd9a55e3af6abe833ad4f668be2a465ef0be))
- **tests:** skip bash tool tests on Windows ([9371f1b](https://github.com/google/adk-python/commit/9371f1b75522bdfc6753785db3ba4add7affb720))
- **tools:** dereference draft-07 `definitions` in MCP tool schemas ([c11ac7d](https://github.com/google/adk-python/commit/c11ac7d58aa175d3d91710077638c30bf1a68f6f))
- **tools:** handle missing 'request' key in AgentTool.run_async fallb… ([8b09c48](https://github.com/google/adk-python/commit/8b09c48f57ad02c4a47b0d732d822dcf9505c777))
- update model to gemini-3.5-flash in session_state_agent sample ([0aca7bf](https://github.com/google/adk-python/commit/0aca7bf65e77bfe67f42eeee29cfb8c33e233c5b))
- use correct 'content' key in sandbox code executor input files ([6262f94](https://github.com/google/adk-python/commit/6262f9415de48e05c895c5560d5ef4d75e18deb0))
- **utils:** Preserve decorated type for [@experimental](https://github.com/experimental) and [@working](https://github.com/working)_in_progress ([30d1910](https://github.com/google/adk-python/commit/30d1910ea08e46fc3ecf19da19d33d3ae9924503))
- **utils:** Preserve decorated type for [@experimental](https://github.com/experimental) and [@working](https://github.com/working)_in_progress ([1ff0158](https://github.com/google/adk-python/commit/1ff015848ceb7b9d86113e7a33620d5ec55342ff))
- **workflow:** Preserve explicit single-turn contents ([59f7bdf](https://github.com/google/adk-python/commit/59f7bdf8ed1667f950c655bb82c0b36ffa3b3ecf))
- **workflow:** Prevent replay divergence hang in sequence barrier ([d88192c](https://github.com/google/adk-python/commit/d88192c1f1bbc6ccb7987b0d4b39d00cbaeda6c2))
- **workflow:** Prevent Shared InvocationContext branch mutation ([5c46937](https://github.com/google/adk-python/commit/5c4693756724ac49e617828c3ca142a3b16536ad))
- **workflow:** Prevent silent drain of routed nodes in wait_for_output ([ef8a5de](https://github.com/google/adk-python/commit/ef8a5deb125fb0d5fa38e5c0ed2d150de47ad1d0))
Performance Improvements
- **flows:** skip async-rearrange when no function_responses ([70b314b](https://github.com/google/adk-python/commit/70b314b87c078f639937edcbe9d963a543673a72))
- **test:** Speed up unit test suite via parallelism and dedup ([4e4bf84](https://github.com/google/adk-python/commit/4e4bf84b8794b894136511da11edd94fc49c93b2))
Code Refactoring
- Add diversion logic based on the auth provider resource name ([d4ba521](https://github.com/google/adk-python/commit/d4ba521327c46eac08afb05ed67a9856574023cf))
- Implement the auth provider using Agent Identity Credentials service ([dc6fbd8](https://github.com/google/adk-python/commit/dc6fbd8faece3157b03f4dbf47047de6bed6f1b2))
- Move the IamConnectorCredential service depedency to a seperate file ([c423fcd](https://github.com/google/adk-python/commit/c423fcd987beb3a6c7a9345528171a8a3a4150eb))
- **otel:** Add pure functions for constructing stable and experimental semconv logs ([23c0826](https://github.com/google/adk-python/commit/23c0826f4a97df53c50fe99b249afc3cf9b6ddac))
- Remove unused imports across src ([b79096a](https://github.com/google/adk-python/commit/b79096ac8694b9c46a1f8c5f53dd22948b48849c))
- Separate PR analysis from triage for automation ([10e5f07](https://github.com/google/adk-python/commit/10e5f07ab649398c7ed724b0c3b251ade9833375))
- **telemetry:** change agent and tool execution duration metrics from milliseconds to seconds ([623c9bd](https://github.com/google/adk-python/commit/623c9bd0da3d4c17a0b6988035a7c8fc032c5b20))
Documentation
- add beginner explanation for single agent example ([225fafc](https://github.com/google/adk-python/commit/225fafc6d5b3eb3cbbc57a03bdf6d576c4ac1684))
- add PyPI, Python version, downloads, and docs badges to README ([04d278a](https://github.com/google/adk-python/commit/04d278a6c5d455b51a2d2c1f7582321ee4c1444b))
- add unit guides for event.py, request_input.py and update adk-unit-guide skill ([7d74a0a](https://github.com/google/adk-python/commit/7d74a0a0e2ac0d0a0e0a382964f7327d02e2f9d8))
- add unit guides for task mode ([f84a5b5](https://github.com/google/adk-python/commit/f84a5b5e20689be8f3dc63c1c3d72f9279c4e66f))
- Align Python version to 3.10+ and update README badges ([d3c21d7](https://github.com/google/adk-python/commit/d3c21d716ed4b8dea92f273528226885d2c997a8))
- clarify context cache min_tokens gating and 4096-token minimum ([8c92cde](https://github.com/google/adk-python/commit/8c92cdef5013fb5cd81ac09c9c874e2705aec34d))
- Fix ADK release analyzer session db saving error ([991431f](https://github.com/google/adk-python/commit/991431fe2324cf72dc265ab11ed668eaedd00d76))
- fix formatting in multi-agent sample READMEs ([fa82929](https://github.com/google/adk-python/commit/fa829296c0dca38a416360857919d1a951a690be))
- fix triaging agent sample typo ([ef395c7](https://github.com/google/adk-python/commit/ef395c70507e86a2627e36b164d7a185899f52a2))
- **openapi:** improve docs for session model ([7a11b50](https://github.com/google/adk-python/commit/7a11b50cb39e06779ed209ae3e2f4259072cda9f))
- remove stale -b v2 flag from clone command in CONTRIBUTING.md ([2e28e5d](https://github.com/google/adk-python/commit/2e28e5d1e1501c82a390b4ad9b1321f29e1ea05b))
- **skills:** fix broken refs in adk-workflow skill ([24a1b26](https://github.com/google/adk-python/commit/24a1b26a7869b0087b8760fb01f2a88f5962f986))
- update llms.txt and remove build script ([c66dc1d](https://github.com/google/adk-python/commit/c66dc1dec44010811b073067136831bdbfee394a))
- Upgrade ADK release analyzer agent to use gemini-3.1-pro-preview model ([d72bb7d](https://github.com/google/adk-python/commit/d72bb7d90d0b5949eef7d5233313bc71b6beb7a8))
- Add async and concurrency guidelines to ADK Style Guide ([66e00db](https://github.com/google/adk-python/commit/66e00db095edcc9ac9045d2c88a7a62d8b4537be))
Bug Fixes
- remove live event buffering in runner ([#6151](https://github.com/google/adk-python/issues/6151)) ([afe4083](https://github.com/google/adk-python/commit/afe408376a9c12fc3b206df234a1655f565c826c))
Bug Fixes
- Only send grounding_metadata for 3.1 live at the end of each turn ([#6129](https://github.com/google/adk-python/issues/6129)) ([847a259](https://github.com/google/adk-python/commit/847a259cd89a7b720582ae46f6856d6a8c8000b7))
- **streaming:** Ensure final partial=False frame is always yielded ([#6096](https://github.com/google/adk-python/issues/6096)) ([6e59c61](https://github.com/google/adk-python/commit/6e59c61104718d12b1265958c9c2992eee65abbf))
Features
- **live:** Handle input transcription differently for Gemini Live 3.1 models ([#6045](https://github.com/google/adk-python/issues/6045)) ([ecfdaf5](https://github.com/google/adk-python/commit/ecfdaf5f5e7accfbb4294cb8cc56c910dad2b1a8))
Bug Fixes
- add missing Gemini imports in base_llm_flow ([#5943](https://github.com/google/adk-python/issues/5943)) ([6d027b4](https://github.com/google/adk-python/commit/6d027b4ce8bc1c5d288b02e1e3819917117038ec))
- **flows:** Reset reconnect attempts on connection success ([#6042](https://github.com/google/adk-python/issues/6042)) ([87abf23](https://github.com/google/adk-python/commit/87abf230dbc21b49fa5606e18627c7f62df0d37b))
- **models:** Default grounding metadata for Gemini 3.1 live ([#6018](https://github.com/google/adk-python/issues/6018)) ([fafafb3](https://github.com/google/adk-python/commit/fafafb38e1027a5cfe185357f6b8a107bbd3779e))
- Support generalized history config injection for Gemini 3.1 Live on Vertex AI ([#5999](https://github.com/google/adk-python/issues/5999)) ([aafd97f](https://github.com/google/adk-python/commit/aafd97f6f0ae114b0ca772b4f5176602e3677e79))
⚠ BREAKING CHANGES
- **agents:** `LlmAgent` default model changed from `gemini-2.5-flash` to `gemini-3-flash-preview` (a preview model), ahead of the 2026-10-16 `gemini-2.5-flash` shutdown. Agents without an explicit `model=` now run on the new preview default; set `model="gemini-2.5-flash"` to retain prior behavior. `DEFAULT_LIVE_MODEL` is unchanged. ([ad8b6c7](https://github.com/google/adk-python/commit/ad8b6c769d65c293ca58a078ae447fe499209d15))
- **interactions:** GenAI SDK v2.0.0 support renames the turn-based helpers in `interactions_utils.py` (e.g. `convert_contents_to_turns` → `convert_contents_to_steps`) and moves from "turns" to "steps" terminology. Update any direct callers. ([da1d8f1](https://github.com/google/adk-python/commit/da1d8f15529bf6c741bb32a86c380d5cb3633ed1))
Features
- Add `--trigger_sources` and ADK service options to `cli_deploy_agent_engine` ([ffa057c](https://github.com/google/adk-python/commit/ffa057c11212c0110992ac5525b7b8909de610ed))
- add AutoTracingPlugin for OpenTelemetry auto-instrumentation ([bc3a4fa](https://github.com/google/adk-python/commit/bc3a4fab8096a8086bae7d39d289929b0cd98a20))
- add RubricBasedMultiTurnTrajectoryEvaluator ([cae2337](https://github.com/google/adk-python/commit/cae23371a1cfb0b74de18e8583be9504864bf1aa))
- **agents:** restore 1.x agent config wiring for backward compatibility ([44cd116](https://github.com/google/adk-python/commit/44cd11675e9c3dc2deb5607d20083c10031fa708))
- **api_server:** Abort runs on client drops to avoid leaks ([6a53357](https://github.com/google/adk-python/commit/6a533573dbeee3256a192e73b78eccf237ddafff))
- BigQuery Agent Analytics reliability fixes ([a5fa3da](https://github.com/google/adk-python/commit/a5fa3da0214e0bd027b6fea88e447c78baa1c6d8))
- distinguish input-required vs auth-required in A2A conversion ([9d139ea](https://github.com/google/adk-python/commit/9d139ea2e8fe03d50328192225782b0d0efaf1ec))
- emit OTel gen_ai.client.* metrics natively ([0bb329b](https://github.com/google/adk-python/commit/0bb329ba53ad356a70e73377fff4f429ffa99961))
- forward custom_metadata from run requests into the run config ([460cb8c](https://github.com/google/adk-python/commit/460cb8c7c7dfc12d181e1998a7bcc7ef5de5ca70))
- include thoughts and tool calls in compaction summaries ([bdb5582](https://github.com/google/adk-python/commit/bdb558262489fd3c723166d407981b14ec45a273))
- **interactions:** update ADK to support Google GenAI SDK v2.0.0 ([da1d8f1](https://github.com/google/adk-python/commit/da1d8f15529bf6c741bb32a86c380d5cb3633ed1))
- **models:** Support turn_complete_reason in Live responses to capture safety info ([9126acb](https://github.com/google/adk-python/commit/9126acbace9c6b323041c21aff860916f618a139))
- preserve A2A message metadata field in ADK event ([d4d955d](https://github.com/google/adk-python/commit/d4d955d1503c8950ff2fdf17286f8c3f6bc0ad5a))
- raise explicit error for unsupported LiteLlm file attachments ([8847f23](https://github.com/google/adk-python/commit/8847f2384ab3ed17ae080e5e99b5a3c435b3e29f)), closes [#5546](https://github.com/google/adk-python/issues/5546)
- **sessions:** add get_user_state(app_name, user_id) to BaseSessionService ([d029bce](https://github.com/google/adk-python/commit/d029bce53ecf9e8861e7fa547f2814524f38a544))
- Support additional scopes and custom discovery doc in Google API Tools ([dc6e293](https://github.com/google/adk-python/commit/dc6e293503d3d34e6d215e4fb017fa094392bebb))
- **tools:** expose httpx_client_factory on RestApiTool and OpenAPIToolset ([7eb9b3d](https://github.com/google/adk-python/commit/7eb9b3de8aa239608370a50bcb313315dcd9ca1d))
- **tools:** Standardize request_input tool for proactive LLM clarification ([afb0a64](https://github.com/google/adk-python/commit/afb0a64f9647c03c32132e184f40e108dc2a4482))
Bug Fixes
- **a2a:** Support to_a2a(Workflow) and reject non-agent root nodes ([0478b02](https://github.com/google/adk-python/commit/0478b0262de8334c516e34cc4be8cbfbaa7e8cd2))
- accept Azure assistant file ids ([b73679e](https://github.com/google/adk-python/commit/b73679e58fd4f296d8abc299be55c96829260046)), closes [#5664](https://github.com/google/adk-python/issues/5664)
- add artifacts in each agent's .adk folder ([bae5b1a](https://github.com/google/adk-python/commit/bae5b1a1a40d9b4da1dd0c8d9903825e0ef3ab36))
- add future annotations import and prefix task models logger ([2874874](https://github.com/google/adk-python/commit/2874874af497dcbc432e624e94a592d610003688))
- add missing crop helper to data file helper lib ([b5181cf](https://github.com/google/adk-python/commit/b5181cf1351d16e1133196c6da9396e40ed6e97c)), closes [#4011](https://github.com/google/adk-python/issues/4011)
- add PEP 604 union syntax in function tool parameters ([551445e](https://github.com/google/adk-python/commit/551445e797a7f55670aac2610c33a675c65e5a1d))
- add telemetry metric assertions to the test's own agent ([b7766ce](https://github.com/google/adk-python/commit/b7766ceb2c7f36fd8c98c4f1248c40e61462f8c2))
- **agents:** restore abc.ABC base for BaseAgent and LlmAgent ([020386a](https://github.com/google/adk-python/commit/020386a06cd9a461abbc71d8c4e59a4d83917b42))
- allow internal builder assistant app name ([f6e26cc](https://github.com/google/adk-python/commit/f6e26ccc4f8327e634ed2416f30d1a4c9565c800))
- append trailing newline to runtime-config.json in ADK Web Server ([4baccf6](https://github.com/google/adk-python/commit/4baccf61795d70c26f2557ed21a30a7c2c4aa8c9))
- **auth:** omit scope from OAuth2 token requests ([6ce4b87](https://github.com/google/adk-python/commit/6ce4b87858b1fca8d5f0609bb92f198678555c4a))
- block path traversal in Agent Builder file tools ([1fa7cda](https://github.com/google/adk-python/commit/1fa7cda96a41d8bcadefb7cb7346d4795560d9f6))
- **dependencies:** clarify missing Vertex AI extra ([fde6a2b](https://github.com/google/adk-python/commit/fde6a2b854b1194fa618c4ece22c3dac1e58c085))
- **deps:** bump starlette and fastapi to address CVE-2026-48710 ([81add39](https://github.com/google/adk-python/commit/81add3987ada11c862c24143218d434a6504a57a))
- **eval:** Support include_intermediate_responses_in_final in final_response_match_v2 ([8519602](https://github.com/google/adk-python/commit/8519602116d2217ed4347aed1e3ca546b81d8948)), closes [#5695](https://github.com/google/adk-python/issues/5695)
- Event.message honors subclass field ([5bebfd4](https://github.com/google/adk-python/commit/5bebfd4881332f6619e064b450c8fc7bbd38c9f8))
- exclude temp: state keys from Firestore session writes ([a5db346](https://github.com/google/adk-python/commit/a5db3467c8d556f60150bbf913770df36c38fe89))
- Fix path traversal in GCS skill extraction (Zip Slip) ([2f15c6c](https://github.com/google/adk-python/commit/2f15c6cb507c10a8ad93d1f12346e0fbcc2f94f4))
- **flows:** preserve transparent config on live session reconnect ([5ad1942](https://github.com/google/adk-python/commit/5ad1942cb98c211d64b1cedd74f24492fa662e8f)), closes [#5675](https://github.com/google/adk-python/issues/5675)
- Format the files to fix pre-commit failures ([af8bfe0](https://github.com/google/adk-python/commit/af8bfe08acbcbba6796b0e113197536b599724e0))
- guard peer agent mode access in agent transfer ([bb16958](https://github.com/google/adk-python/commit/bb16958bf8682ce7c7f5fc57201b41e17f365c59)), closes [#5863](https://github.com/google/adk-python/issues/5863)
- **live:** Resolve 1007 error and support Gemini 3.1 Flash Live protocol ([e5af12c](https://github.com/google/adk-python/commit/e5af12c29ccaa07abc4fec118971a9fd44b8384c))
- **mcp:** Prevent initialization hangs and task group leaks ([334ef81](https://github.com/google/adk-python/commit/334ef81568675282956c36a54779f09ca643e2c0)), closes [#5886](https://github.com/google/adk-python/issues/5886)
- **migration:** restrict unpickling of v0 actions blobs ([9db48ce](https://github.com/google/adk-python/commit/9db48ce92e77651e888159b4e9a79904dc3c9cd3))
- **models:** Prevent grounding metadata loss in Gemini 3.1 ([e896c62](https://github.com/google/adk-python/commit/e896c620f6d913f0da2497b077941c8c4a3fdd38))
- parse noncanonical litellm tool call arguments ([31cc5a1](https://github.com/google/adk-python/commit/31cc5a17cc7d3fc04902e9b3de4ddaaa20ff5a28))
- populate user_content in resumed invocations ([660bbd4](https://github.com/google/adk-python/commit/660bbd465212feb6433c2789381798d6f72f0707))
- preserve media blocks in ollama content flattening ([47ceeba](https://github.com/google/adk-python/commit/47ceebac92b89be517cb10ea2b5018cde5def49b)), closes [#4975](https://github.com/google/adk-python/issues/4975)
- **runners:** fall back to root agent when a resumed call author is not in the tree ([a86efa6](https://github.com/google/adk-python/commit/a86efa65f5f7880435c3433a941a7d772dd5b89c))
- **runners:** Preserve state_delta in NodeRunner path ([c56bec8](https://github.com/google/adk-python/commit/c56bec8d6d6d9823744a6032e18a640d4c71cae0))
- **sessions:** guard None event.actions before reading state_delta ([03ef3f6](https://github.com/google/adk-python/commit/03ef3f612b4c136028d16fa9b34e1605c8ecbb4b))
- Support generalized history config injection for Gemini 3.1 Live on Vertex AI ([61a3933](https://github.com/google/adk-python/commit/61a39330dfafbd365e71e0c11cc0128bbaf2fe89))
- terminate infinite retry loop in LoadSkillResourceTool on RESOURCE_NOT_FOUND ([bc45ee6](https://github.com/google/adk-python/commit/bc45ee67cd34182e75023405320e47f1155f6881))
- tolerate context-likes without user_content or session in record_agent_invocation ([0775da5](https://github.com/google/adk-python/commit/0775da5ae406b6db04d401b779b3ab72e9a0fc9f))
- **tools:** add skill script dir to sys.path ([9296198](https://github.com/google/adk-python/commit/9296198b21a80b211b75f0e9263f618fbe9e8744))
- **tools:** don't close parent's plugins from AgentTool's sub-Runner ([2a68c4e](https://github.com/google/adk-python/commit/2a68c4e7463881397be0e9036e509ce59fa5bf3c))
- **tools:** Prevent broken skill tool references when prefix is set and support tool_filter ([4366cca](https://github.com/google/adk-python/commit/4366ccaf1224ea556da25e506aa99fc4ecd91378))
- **tools:** Shell escape path and range in ReadFileTool command ([e16629b](https://github.com/google/adk-python/commit/e16629b38814ec31ed55dc6412dcc7ec33774749))
- validate session_id and enforce ownership in delete_session ([b2916c7](https://github.com/google/adk-python/commit/b2916c71523f3acecbbde782fe8a799ef83b74d5))
- **workflow:** Prevent incorrect chat agent wiring in graphs ([d7aa7b5](https://github.com/google/adk-python/commit/d7aa7b5720ed6b28104c84009680b3e5a61b5e01)), closes [#5868](https://github.com/google/adk-python/issues/5868)
- **workflow:** Resolve raw Content output crash on rehydration ([4f992b0](https://github.com/google/adk-python/commit/4f992b0c6455fb23f0e25ac78687aa2099af421e))
Performance Improvements
- **flows:** Resolve agent tool unions in parallel ([ae95a97](https://github.com/google/adk-python/commit/ae95a972280cbf0fcd6a989e19590cad68f3d847))
Code Refactoring
- **agents:** default model to gemini-3-flash-preview ([ad8b6c7](https://github.com/google/adk-python/commit/ad8b6c769d65c293ca58a078ae447fe499209d15))
- **tests:** Consolidate event tests into test_event.py ([77aeadf](https://github.com/google/adk-python/commit/77aeadf131b00133963e5c56a3d510a326cabae7))
- **tools:** Split environment tools into single-class _tool files ([1cc298e](https://github.com/google/adk-python/commit/1cc298edb801f9a4538aa532f3fa1c4d4187dc96))
- update tool and agent retrieval functions to support asynchronous execution ([e623b3b](https://github.com/google/adk-python/commit/e623b3b4db9109d2f53915a7c3e8140db71ca336))
Documentation
- **skills:** Use default model in sample agent templates ([2d465aa](https://github.com/google/adk-python/commit/2d465aa2e1569b27d2a348529f3cb5860a5a9783))
Maintenance (repo tooling, not library changes)
- **skills:** Add adk-issue skill to analyze and triage GitHub issues ([be03166](https://github.com/google/adk-python/commit/be03166f533a2c1a14ba0e4268a20323d21064d6))
- **skills:** Add adk-review skill for rigorous change quality control ([cc6f78c](https://github.com/google/adk-python/commit/cc6f78c3dca5b5e70fd5035da09392a457c7f0c6))
- **skills:** Automate PR triage and CLA verification ([ce9011c](https://github.com/google/adk-python/commit/ce9011c10389685b76890f902a31893d5269a193))
- **skills:** Enforce PR assignment gates and stream metadata via stdout ([4006fe4](https://github.com/google/adk-python/commit/4006fe408c583bffd95c23455f00184baa4fad6d))
- **skills:** Split adk-issue skill to separate issue analysis from implementation ([51b18eb](https://github.com/google/adk-python/commit/51b18ebbbc22b6c6310b9e1ca393663805763a7e))
- **agents:** Improve git hygiene in adk-pr-triage skill ([62bcdd3](https://github.com/google/adk-python/commit/62bcdd343c5ea12583f98fa479c265f3b108a50e))
- **agents:** Add issue closing support to PR triage skill ([2748c1b](https://github.com/google/adk-python/commit/2748c1bbbd1f56f16cd61f266a82bcd0ecf21e68))
- **skills:** Add rule to specify GitHub issues in commit messages ([8f2c1e3](https://github.com/google/adk-python/commit/8f2c1e38cbdc1d9c7c91fa942f6287e4801c454c))
Bug Fixes
- Fix bug where grounding metadata in Gemini 3.1 live was being silently discarded ([9b6b9e9](https://github.com/google/adk-python/commit/9b6b9e976300ab223c77075554d6cd66ce1179ff))
- fix input and output transcription finished events for Gemini v3.1 ([13763d7](https://github.com/google/adk-python/commit/13763d71f883b215dae08feb3f042869b9cd5d18))
- **tools:** Prevent session drop on MCP tool error ([1fd406b](https://github.com/google/adk-python/commit/1fd406b90ae00c59d84093c33bc04530825bc760))
What this changed for a real deployment
The last Agent Engine release on the AdkApp template path — OTEL_EXPORTER_OTLP_* is not honoured here regardless of what is set. See the v2.6.2 note for where that changed.
Features
- Add chart generation and artifact loading to data agent ([db06416](https://github.com/google/adk-python/commit/db064160bf634b1c7e644012076f077cde6cfcef))
- Add support for creating sandboxes from templates and snapshots ([cbd14eb](https://github.com/google/adk-python/commit/cbd14ebf99bbff22ed28273f095f1fc05793bed2))
- Add user.id to gen_ai.user.message log records for telemetry ([eb379be](https://github.com/google/adk-python/commit/eb379bea5b87579d5a649698c3fdd7473ac5e5a2))
- Fix error message telemetry for tool calls ([e56c021](https://github.com/google/adk-python/commit/e56c021ef73193b24023494d853ac4fdab9115bb))
- Preserve transcription event order in conversation trajectory ([b3d0759](https://github.com/google/adk-python/commit/b3d0759e42d0def400160e4196a874171579a101))
Bug Fixes
- **ci:** Add python-dateutil dependency to stale-bot workflow ([84fa984](https://github.com/google/adk-python/commit/84fa984ae087c10b59355f915077d1119969c3f2))
- **ci:** Prevent workflow failures in relocated adk_team samples ([55cbc8c](https://github.com/google/adk-python/commit/55cbc8c9e8b649c48a79c26fb112dbc005386338))
- **ci:** Use absolute path for PYTHONPATH in upload docs workflow ([85223e6](https://github.com/google/adk-python/commit/85223e629e160cad7dd9877483e04faacc151bc2))
- **cli:** Fix --reload_agents for web ([1307f8e](https://github.com/google/adk-python/commit/1307f8eeba4252f43dad057438ba68686e3b7e41))
- **cli:** Inform user to install optional dependency on missing google.cloud ([57d677c](https://github.com/google/adk-python/commit/57d677c5cde6a87a24574042013c0c5382a0a2d3))
- convert Union[Pydantic, Pydantic] tool args at runtime ([104edc8](https://github.com/google/adk-python/commit/104edc83170a5871075285b336d19ac9515c1a90)), closes [#5799](https://github.com/google/adk-python/issues/5799)
- Fix bug where grounding metadata in Gemini 3.1 live was being silently discarded ([b9751eb](https://github.com/google/adk-python/commit/b9751eb9df7868223551b4ce33f2ff360f7d3f3e))
- fix input and output transcription finished events for Gemini v3.1 ([d17a2a3](https://github.com/google/adk-python/commit/d17a2a322156c4d4c617e8d4cbac14f24652e617))
- lazy-import GCS evaluation managers in evals utility ([5f91a9d](https://github.com/google/adk-python/commit/5f91a9db032bb9ffd0b59ba24aad04b680481c98))
- Make google-cloud-storage import lazy in skill utils ([416775d](https://github.com/google/adk-python/commit/416775dcceae8f57badf0cd55c44148f6426b6db))
- resolve circular import caused by llm_request ([7e38fc8](https://github.com/google/adk-python/commit/7e38fc811ed58235aa5c120c48c419e0f10a8de2))
- Resolve circular import in base_tool ([92cf192](https://github.com/google/adk-python/commit/92cf19255e21a6edc08a5cf09a1cfbe936b5690e))
- **tests:** Append trailing newline to JSON test outputs ([3329ced](https://github.com/google/adk-python/commit/3329ced0b9ddb2e681a849d62416f14f837e40dd))
- **tools:** Prevent session drop on MCP tool error ([933653c](https://github.com/google/adk-python/commit/933653c61c5498fa0febe1a984d92b82a899e446))
- update EditFileTool to handle cross-platform line breaks and escape regex characters ([1f24553](https://github.com/google/adk-python/commit/1f245535ff1107b428f4fb0837db985457ddf024))
Bug Fixes
- Fix bug where grounding metadata in Gemini 3.1 live was being silently discarded ([9b6b9e9](https://github.com/google/adk-python/commit/9b6b9e976300ab223c77075554d6cd66ce1179ff))
- fix input and output transcription finished events for Gemini v3.1 ([13763d7](https://github.com/google/adk-python/commit/13763d71f883b215dae08feb3f042869b9cd5d18))
- **tools:** Prevent session drop on MCP tool error ([1fd406b](https://github.com/google/adk-python/commit/1fd406b90ae00c59d84093c33bc04530825bc760))
ADK 2.0 General Availability
Core Architecture Highlights
- **Flexible Execution Graphs:** Establishes a model-agnostic engine for orchestrating non-linear, conditional, and cyclical agent execution patterns.
- **Intelligent Task Delegation:** Introduces modular workflow abstractions enabling parallel sub-agent workers, nested hierarchical team structures, and resilient dynamic scheduling across complex task execution steps.
- **Native Inter-Agent Routing:** Provides seamless orchestration for inter-agent messaging, control state handoffs, and context variable propagation across collaborative multi-agent flows.
Features
- **a2a:** add support for persistent task stores ([cd78d87](https://github.com/google/adk-python/commit/cd78d87b967111d40d429bcf9552a962b7e9614f))
- add general support for Gemini Live API in ADK evaluate ([790c9be](https://github.com/google/adk-python/commit/790c9bef9a336ea000d0cf68e63b025dfead5227))
- Add mTLS support to Google Cloud Telemetry exporter ([cfe8d2c](https://github.com/google/adk-python/commit/cfe8d2cc2b29e392886f997be4d77d4cced9959e))
- add support for A2aAgentExecutor factory in to_a2a() function ([115124c](https://github.com/google/adk-python/commit/115124cdf413859c7f634ce995113e4de6cf5ff7))
- add support for non-ADK produced input-required events ([6e53472](https://github.com/google/adk-python/commit/6e534723dd6be938e6fb1b6f55b06de8ac4d27d8))
- Added config option to include tool calls/responses in conversation history passed to user simulator ([baf7efb](https://github.com/google/adk-python/commit/baf7efbaa92ce9d71152ea9ba7f5d0706277b171))
- **ci:** add Gemini auto review and invoke workflows ([fd8b492](https://github.com/google/adk-python/commit/fd8b49295d628075cf70acabb2c52eedf62dd5bd))
- Implement GCPSkillRegistry in ADK ([88ebd42](https://github.com/google/adk-python/commit/88ebd426beaec9564bec1fe98ad0096bba519e3d))
- Implement Skill Registry in ADK ([380d261](https://github.com/google/adk-python/commit/380d261e59b1955af735bf66e47aba2150f04d9f))
- Make Agent Skill description validation more informative ([9f38973](https://github.com/google/adk-python/commit/9f38973081aacf1999f707dac9778b72b5ce75fd))
- Simplify data retrieved handling of ask_data_agent tool and ask_data_insights tool ([48f1b30](https://github.com/google/adk-python/commit/48f1b302510c3520643db739494ff8ea318b7b8f))
- Support OAuth PKCE in McpToolset ([e7316dc](https://github.com/google/adk-python/commit/e7316dc077d676b4349a8d7779ad4ad73f6b0d24))
Bug Fixes
- **agents:** fix visibility of output_key state delta in callbacks ([0524797](https://github.com/google/adk-python/commit/0524797ac75ddd13b1c01cac91e507ba2c42cef0))
- **anthropic:** map negative thinking_budget to adaptive thinking ([03b915b](https://github.com/google/adk-python/commit/03b915b1bdf5dcab14ae51d8b8cadf37d649acca))
- **auth:** persist refreshed OAuth2 credentials to store ([218ea76](https://github.com/google/adk-python/commit/218ea76e30ced48898a46ca48a014f7dffd266a7)), closes [#5329](https://github.com/google/adk-python/issues/5329)
- **auth:** remove unneeded OAuth flows ([c35a579](https://github.com/google/adk-python/commit/c35a57969d70cb98356297beb36fdf79ab7c00f6))
- avoid pre-serializing dict values in Interactions API to prevent double-escaping ([85f397d](https://github.com/google/adk-python/commit/85f397d20f8b32cdfd074463ff505a06c8535ddf))
- **cache:** enforce CacheMetadata active-state invariant ([76b9f0b](https://github.com/google/adk-python/commit/76b9f0baa0bcc4e715ee996b4dc894ffc9264583))
- **cache:** handle fingerprint-only metadata in performance analyzer ([9c5de58](https://github.com/google/adk-python/commit/9c5de58cfa55fc2b4aade2018456214c95140c16))
- Catch OSError when importing AnthropicLlm ([91cb5c6](https://github.com/google/adk-python/commit/91cb5c6071cc73da8b97e789557dfbc32026a3e8))
- **evaluation:** handle none config in per_turn_user_simulator_quality ([eed9bd3](https://github.com/google/adk-python/commit/eed9bd319ffc398fae14c2362c93f986ffe25f67)), closes [#5677](https://github.com/google/adk-python/issues/5677)
- fallback to project id if crendetials don't contain quota project ([e377cb5](https://github.com/google/adk-python/commit/e377cb5ec057ed4176f2714f368c45e730053eb0))
- Fix missing dynamically loaded tools in SkillToolset during the same invocation ([f9097cb](https://github.com/google/adk-python/commit/f9097cbf7b64b78da894e482480fc22a9603e429))
- **live:** ensure sub live agent doesn't inherit session resumption handle from parent live agent to avoid interrupting the conversation ([8dd9147](https://github.com/google/adk-python/commit/8dd9147443b1dc4121756ad186090f1f267e83b0))
- **models:** preserve string content in Anthropic tool_result blocks ([9a1e75f](https://github.com/google/adk-python/commit/9a1e75f24256cfe54766c69691247df90dc5558f)), closes [#5358](https://github.com/google/adk-python/issues/5358)
- **models:** preserve tool_use IDs for Anthropic models on session resume ([327c45f](https://github.com/google/adk-python/commit/327c45f9f4c98f7b32feeb8555c166b814ee6684)), closes [#5074](https://github.com/google/adk-python/issues/5074)
- **models:** treat empty GenerateContentResponse without prompt feedback as successful ([0cb9ae9](https://github.com/google/adk-python/commit/0cb9ae94b30ac2cff120b2c4ccab77e6b85cbf45))
- only serialize llm_response to json if it will be included in the trace ([1284493](https://github.com/google/adk-python/commit/12844939f1a89b2a06c592a52bbd3c293860e808))
- Preserve live_session_id in function call handling ([07a9a01](https://github.com/google/adk-python/commit/07a9a01b3c1fb2866cc8bdcd8d8ab0906aa88682))
- Prevent compaction of events involved in Human-in-the-Loop interactions ([bb2efb6](https://github.com/google/adk-python/commit/bb2efb6bd234e3235c47b3245676581f6022b458))
- raise eagerly on importing AgentRegistry if a2a-sdk is missing ([33cf6cb](https://github.com/google/adk-python/commit/33cf6cb61016bdd227749a7eff113045f848b203))
- **small:** Convert events to the A2A format while respecting user vs agent role ([59f7347](https://github.com/google/adk-python/commit/59f7347a635bc56fa8abdd3c7c771ae11bebf9ab))
- **tools:** preserve code_execution_result and executable_code in AgentTool ([7e61b51](https://github.com/google/adk-python/commit/7e61b517027a23c640b7b636a87e04a0a02c392c)), closes [#5481](https://github.com/google/adk-python/issues/5481)
- **tools:** Prevent AnyIO CancelScope task boundary violations during MCP session creation failure ([4309159](https://github.com/google/adk-python/commit/430915970062a4ff926a65e5884cc5bc2912c48c))
- Update model name in hello_world agent ([192f19d](https://github.com/google/adk-python/commit/192f19d82495eb560ee701eb751ce14b90e4b5c7))
- Update model to gemini-3-flash-preview in hello word agent sample ([6d89d21](https://github.com/google/adk-python/commit/6d89d2194a21220801c602248b27b81b9188050c))
- Update model to gemini-3-flash-preview in session state agent sample ([2d423e8](https://github.com/google/adk-python/commit/2d423e835569e0e8e67772a09bf1a76f1bb5324e))
- use tool_responses role for gemma4 models in LiteLLM integration ([3d07960](https://github.com/google/adk-python/commit/3d07960a70031fb7786485f58a964a98dbdb932d)), closes [#5650](https://github.com/google/adk-python/issues/5650)
Performance Improvements
- lazy-load service registries and split apps.app to cut cold start ~8% ([bd062ec](https://github.com/google/adk-python/commit/bd062ec9eb4b48cc6d4ec45aaf0a1f8f847b6d7b))
- **models:** guard debug log evaluation with isEnabledFor ([57d8fc7](https://github.com/google/adk-python/commit/57d8fc7d818dc3ba2cec56fa8199a11cde30a4c6))
- **utils:** cache find_context_parameter introspection ([ec54bd4](https://github.com/google/adk-python/commit/ec54bd439e31c99a32d773ace04b73cb3a275675))
Code Refactoring
- Make the "a2a_metadata" string a constant that can be depended on by extension developers ([0821f2d](https://github.com/google/adk-python/commit/0821f2d4dd7cf7aafd369fabf8d78697eedf9d1c))
Features
- add BufferableSessionService ([0bc767e](https://github.com/google/adk-python/commit/0bc767e6892742d6290d3445d028f95925187aed))
- **apigee:** allow injecting credentials into ApigeeLlm ([ce578ff](https://github.com/google/adk-python/commit/ce578fffa0dc02b0033f7f5e705b9422cbd6c252))
- Make ADK environment tools truncation limit configurable ([83ae405](https://github.com/google/adk-python/commit/83ae40525aa734f4a3b365614cce43831612a1ec))
- **models:** add get_function_calls and get_function_responses to LlmResponse ([22fae7e](https://github.com/google/adk-python/commit/22fae7e9a09c581f433f3c51ea9a0ab26e689b92))
Bug Fixes
- catch genai.ClientError when sandbox is missing ([69fa777](https://github.com/google/adk-python/commit/69fa777881b3cb161e5b3dcb005def9a2ad86904)), closes [#5480](https://github.com/google/adk-python/issues/5480)
- double append bug ([f8b4c59](https://github.com/google/adk-python/commit/f8b4c59350fea3319c9e53e29968c56c93c57c99))
- Filter out video events with inline data from being stored in session ([88421f8](https://github.com/google/adk-python/commit/88421f80a0b008e90f18401abca4ceec3548f6cd))
- fix fork detection, correct offload limits, and add response logging in BigQuery plugin ([9d1bb4b](https://github.com/google/adk-python/commit/9d1bb4b4870233e574f5c06ddd2b62a48272398f))
- hot reload agents for adk web ([740557c](https://github.com/google/adk-python/commit/740557c8965305abc75752082bc3ee63d924742f))
- Only append skills to system instruction if ListSkillsTool isn't available ([01f1fc9](https://github.com/google/adk-python/commit/01f1fc9c912a97ff27bb1332a28324f991eae77d))
- prevent state_delta overwrite on function_response-only events ([fc27203](https://github.com/google/adk-python/commit/fc2720378e8997269d30f5439051f5e43d5fa028), [211e2ce](https://github.com/google/adk-python/commit/211e2ceb70ac6b61400559761d1d6548d906a79b)), closes [#3178](https://github.com/google/adk-python/issues/3178)
- Raise a clear actionable error when CustomAuthScheme lacks a registered AuthProvider ([83f9817](https://github.com/google/adk-python/commit/83f981761b963ca51a286cbd004c043567517a3c))
- should use app_name instead of req.app_name ([8286066](https://github.com/google/adk-python/commit/8286066e71e5c07b5b28979b8327d4b330187ddd))
- **simulation:** Add error message when LlmBackedUserSimulator returns empty response ([fb92aad](https://github.com/google/adk-python/commit/fb92aad9c53bb9f6706fb27751d71fcda2419500))
- Update expressmode api call to include default api key param ([e833995](https://github.com/google/adk-python/commit/e8339953911a8b580cfc2d88c7008234a43beece))
- use asyncio.sleep to avoid blocking event loop ([3a1eadc](https://github.com/google/adk-python/commit/3a1eadce66804db08f6520cc11f9c60e81bb9e30))
- Use project and location instead of API key when deploying to agent engine ([398f28f](https://github.com/google/adk-python/commit/398f28feb47d87ec9c4c03dd3e0e7b87a1699e6e))
Code Refactoring
- adjust computation of workflow.steps metric and add new unit tests ([03d6208](https://github.com/google/adk-python/commit/03d6208aacac8c19adec45ce0dd837f9e3a7f66f))
- remove input.type and output.type attributes from adk metrics ([9559968](https://github.com/google/adk-python/commit/95599683230dd13e5792133f30ade3fe19358d52))
Features
- Add an option to prevent the SaveFilesAsArtifactsPlugin from attaching reference file parts to the message ([987c809](https://github.com/google/adk-python/commit/987c809bfc816a9804c905bd5c02397e396e72d3))
- add credentials parameter to BigQueryAgentAnalyticsPlugin ([34713fb](https://github.com/google/adk-python/commit/34713fb4cccae9fe066587459862f8d4c4aa166f))
- Add express mode onboarding support to adk deploy cli ([2b04996](https://github.com/google/adk-python/commit/2b04996f7ac342c9e7600e4bb596a666108f8b65))
- add native OpenTelemetry agentic metrics ([6942aac](https://github.com/google/adk-python/commit/6942aac5d7b1f465c20febe2a48bac90da32c4eb))
- Add OpenTelemetry tracing for event compaction ([c65dd55](https://github.com/google/adk-python/commit/c65dd5580f42ed330bf4c57cd040f22748ba1444))
- Add sample agent demonstrating 2LO, 3LO, and API Key auth via GcpAuthProvider ([909a8c2](https://github.com/google/adk-python/commit/909a8c2ad4d06ad485173f40f278c503cd66a063))
- Add support for Anthropic's thinking blocks ([16952bd](https://github.com/google/adk-python/commit/16952bd397f871df3e5a1b035261ded3b7c226a5))
- Add support for excluding predefined functions in ComputerUseToolset ([d760037](https://github.com/google/adk-python/commit/d760037f9500a9187bf835ce62eebf21e818f322))
- Add support for refusal messages in ApigeeLlm ([d6594a1](https://github.com/google/adk-python/commit/d6594a1a2c11fe3f5ac94fd37a9ae4b327fa1a0c))
- Added indication of user message in history event list ([662354a](https://github.com/google/adk-python/commit/662354ae55c244d79955935f2243ba3deba272e9))
- Allow user to define credential_key for McpToolset ([282db87](https://github.com/google/adk-python/commit/282db876fdf8e2f0133cfc386b4b4dd1dc9bdd09)), closes [#5103](https://github.com/google/adk-python/issues/5103)
- **analytics:** add support for logging LLM cache metadata to BigQuery ([02deeb9](https://github.com/google/adk-python/commit/02deeb98a08611733949fa2912f433f2ed55681a))
- **eval:** add evaluate_full_response option to rubric-based evaluation ([#5316](https://github.com/google/adk-python/issues/5316)) ([7623ff1](https://github.com/google/adk-python/commit/7623ff1a27c412ff9b758bb76701e2daff570741))
- **live:** Add save_live_blob query parameter to /run_live endpoint ([36ab8f1](https://github.com/google/adk-python/commit/36ab8f128c0281e44c2120a17de91e081f2232b1))
- **mcp:** gracefully handle tool execution errors and transport crashes ([7744cfe](https://github.com/google/adk-python/commit/7744cfe0f36a74f50abb53ec0d42566c439257b3))
Bug Fixes
- accumulate list values when merging parallel tool call state_delta ([b0b8b31](https://github.com/google/adk-python/commit/b0b8b310af5cb1184ef3ef57f1bb551e2a9add9a)), closes [#5190](https://github.com/google/adk-python/issues/5190)
- Add support for overriding the API version in GoogleLLM ([1cdd1e7](https://github.com/google/adk-python/commit/1cdd1e74ba3e59e5ef5ebb654184630c1462454e))
- **auth:** isolate resolved credentials in context to prevent race conditions and data leakage ([5578772](https://github.com/google/adk-python/commit/55787721541fe0a9b5df15b980be87623e57eba8))
- avoid double-execution of sync FunctionTools returning None ([78a8851](https://github.com/google/adk-python/commit/78a8851809f2be7b9e20158beee8c39cdd3fe2f8)), closes [#5284](https://github.com/google/adk-python/issues/5284)
- block RCE vulnerability via nested YAML configurations in ADK ([74f235b](https://github.com/google/adk-python/commit/74f235b1195805f2316f90533d4d297038448f0a))
- bump Vertex SDK version ([6380f6a](https://github.com/google/adk-python/commit/6380f6ac767a6e13faf15b7e8ac3bc48acbd5f1b))
- cancel siblings in parallel function calling on failure ([49985c9](https://github.com/google/adk-python/commit/49985c91ca08e36801e72164cb6314aa9190d144))
- Capture and include LLM usage metadata in summarized events ([5ce33b9](https://github.com/google/adk-python/commit/5ce33b9c1e7606cb9b84ab925fff47ee0347943)), closes [#4014](https://github.com/google/adk-python/issues/4014)
- catch ValueError in safe-JSON serializers for circular refs ([70a7add](https://github.com/google/adk-python/commit/70a7add2bd8ddca12b5fdd63e2052f291817d5be)), closes [#5412](https://github.com/google/adk-python/issues/5412)
- **deps:** bump litellm cap to >=1.83.7 to admit CVE patches ([6d2ada8](https://github.com/google/adk-python/commit/6d2ada8bbc5a08bee3ca76d3e44628b194562212))
- Disable bound token for mcp_tool ([4c0c6db](https://github.com/google/adk-python/commit/4c0c6db87cd531d932c135a27e69682ed08c6f75))
- fix dataset location handling in BigQueryAgentAnalyticsPlugin ([c263426](https://github.com/google/adk-python/commit/c263426fe1a8620ebebef4b7efaed1eb5b99c03f))
- Fix exception handling and argument order in ReflectRetryToolPlugin ([1deab6d](https://github.com/google/adk-python/commit/1deab6d0bf32a0344ab033a1ae61cc7cddf706fd))
- Fix GcpAuthProvider to return capitalized Bearer scheme ([ad937fe](https://github.com/google/adk-python/commit/ad937fe1b827309787a177a99c42df2679f9286e))
- fix lifecycle issues with credentials in BigQuery Agent Analytics Plugin ([a69f861](https://github.com/google/adk-python/commit/a69f8612fa4b69273b1bb7c90c4efa53b04440e6))
- Fix malformated skill.md ([9a0d2f7](https://github.com/google/adk-python/commit/9a0d2f70ba957b8fc2cae8ed3f4aa1f4885a689c))
- Fix misplaced pytest decorator on helper dataclass in 2LO integration tests ([2343973](https://github.com/google/adk-python/commit/234397353189005b5641df832f8ed45018021ef7))
- Fix RecursionError in ADK framework by adding circular reference detection to schema resolution ([7de5bc5](https://github.com/google/adk-python/commit/7de5bc54e11986f70a48a9dd83ea39be58ebce40))
- fix rewind to preserve initial session state ([af1b00a](https://github.com/google/adk-python/commit/af1b00a12b8dd6eee844cc28df7bcd4838e22c1a)), closes [#4933](https://github.com/google/adk-python/issues/4933)
- Fix SSRF and local-file access in load_web_page ([0447e93](https://github.com/google/adk-python/commit/0447e939483c1c6bc8d6df7f96b372d5f8bee7bb))
- handle None state values in skill_toolset after session rewind ([a977aa3](https://github.com/google/adk-python/commit/a977aa307d56ed1efa89a3ffe4b3d96650a984d6))
- **litellm:** emit input_audio for audio inline_data parts ([4073238](https://github.com/google/adk-python/commit/4073238151ee35488b50a321482db500b705234b)), closes [#5406](https://github.com/google/adk-python/issues/5406)
- **live:** mark all agents' Event as from other agents ([48b7a64](https://github.com/google/adk-python/commit/48b7a64bcf5ff402d10187d269f41e6bd4b8d74a))
- **live:** treat input transcription as user message ([ae1f2e6](https://github.com/google/adk-python/commit/ae1f2e6094935c972af3f6682e5c2f79a5ac70d5))
- **optimization:** handle None metric scores in LocalEvalSampler ([#5415](https://github.com/google/adk-python/issues/5415)) ([684a6e7](https://github.com/google/adk-python/commit/684a6e781adf7e769c8f7f572382ceb61f26a038))
- **otel:** change `gen_ai.tool_definitions` to `gen_ai.tool.definitions` ([029b87d](https://github.com/google/adk-python/commit/029b87d582bdde98be3532f26adb6e1d851c44d6))
- preserve cache fingerprint stability on creation failure ([4d5438c](https://github.com/google/adk-python/commit/4d5438cfc89d69d88ba4c324c292fc23e3047f3d))
- preserve empty-string text parts in A2A converter ([2d61cb6](https://github.com/google/adk-python/commit/2d61cb69704f063f66b5d83b716674f6f94b5903))
- preserve function call IDs for Anthropic models ([f0c787f](https://github.com/google/adk-python/commit/f0c787fbc9c4a66b0d0eccddc6d6d03b844cfd0b))
- Prevent LoopAgent from resetting sub-agent state on pause ([8846be5](https://github.com/google/adk-python/commit/8846be585dd3ac585a75aed03d9c6623a5eaa41b))
- Quote user_id literals in VertexAiSessionService list filters ([bdece00](https://github.com/google/adk-python/commit/bdece003b82959d7d7649cc5c94e26306019299f))
- read_file/write_file path type mismatch in BaseEnvironment and LocalEnvironment ([782796f](https://github.com/google/adk-python/commit/782796f97eb10d09d8dccb51b93868e1c07b475e))
- relax EventActions.state_delta value type to Any ([dbec8e9](https://github.com/google/adk-python/commit/dbec8e937adeb608b01f43409033c1de70a86b92))
- remove exclude_unset=True to correctly serialize pydantic types ([f95ac48](https://github.com/google/adk-python/commit/f95ac48e07daa0934a784c1701a124add0513297))
- **samples:** Upgrade google-adk to 1.28.1 to fix vulnerability ([b848390](https://github.com/google/adk-python/commit/b8483909049d4a9bad94f6cb44cf6a26fd9faa9d))
- Sanitize user_id derived from PubSub subscription and Eventarc source ([0c4f157](https://github.com/google/adk-python/commit/0c4f1570388c8361ce6ab072f5ef19a3d92dbdc2)), closes [#5324](https://github.com/google/adk-python/issues/5324)
- Scope Vertex RAG memory display names ([784350d](https://github.com/google/adk-python/commit/784350dba60245ce02ad96994e7ced2b567a4dec))
- Use correct camelCase functionCallId ([c87ee1e](https://github.com/google/adk-python/commit/c87ee1ee9697b4f5f2b88e45a08eeeabf9a0ad13))
- web oauth flow and trace view ([87cd310](https://github.com/google/adk-python/commit/87cd310bccb33d7faae7d505a4629a2e1d77fadb))
- yield tool_call_parts immediately in live mode to unblock Gemini 3.1 tool calls ([f57b05d](https://github.com/google/adk-python/commit/f57b05dac147eb72f54c9053a4a0ba7023ee55dc))
Performance Improvements
- lazy-load optional providers and auth chain to cut cold start ~25% ([66bfedc](https://github.com/google/adk-python/commit/66bfedcf8ddc7c5c518c8c7d7a967e1c488e9852))
Code Refactoring
- move exception handling from metric emission into instrumentation handlers ([62d7ee0](https://github.com/google/adk-python/commit/62d7ee024aa1e50197722d2c5914192a7f322d60))
- **tests:** Refactor tests to explicitly handle JSON_SCHEMA_FOR_FUNC_DECL feature flag ([b580891](https://github.com/google/adk-python/commit/b580891adcc2c7afe110dbef394ffd7b3de67629))
- Use artifact_service.load_artifact during rewind ([c3d50db](https://github.com/google/adk-python/commit/c3d50db9387f7cd76a955299e40a23925dedbc22)), closes [#4932](https://github.com/google/adk-python/issues/4932)
Documentation
- **gemini:** show subclass pattern for custom Client config ([34c7505](https://github.com/google/adk-python/commit/34c7505cc437578567008c0c8b160de083eae0d1)), closes [#3628](https://github.com/google/adk-python/issues/3628)
- update `output_schema` docstring to reflect support for `tools` and `output_schema` together ([e1e652d](https://github.com/google/adk-python/commit/e1e652d73a3d41f42c517189164f740cb907896d))
- Update README with instructions for installing ADK extensions ([f2a1179](https://github.com/google/adk-python/commit/f2a117972e40dd3d4299f3ff437b4382600d224e))
- use sphinx-click to generate docs for google.adk.cli ([f455974](https://github.com/google/adk-python/commit/f4559743febfa91fdde6e5e2e41acf54e20396fe))
Highlights
- **Transition to Beta**: Updated documentation to reflect the project's move to Beta phase ([84e792fd](https://github.com/google/adk-python/commit/84e792fd1ef1b946e5bcacbaf54834cb91f557a0)).
- **Security Fix**: Resolved a potential RCE vulnerability related to nested YAML configurations ([2b54c4ac](https://github.com/google/adk-python/commit/2b54c4ac37c3ec8bdbb23f4ed6d7523d7700d95f)).
- **Documentation & Style**: Modularized the ADK style guide and added new topics ([9bb21795](https://github.com/google/adk-python/commit/9bb217955a176422c8678eae56af23b531340aa8)).
- **Workflow Orchestration Core**:
- Added the full `Workflow(BaseNode)` graph orchestration implementation ([c25d86f1](https://github.com/google/adk-python/commit/c25d86f1adf6b32e5cc780880acf3d2e15e0b984)).
- Introduced `NodeRunner` for per-node execution isolation ([0b3e7043](https://github.com/google/adk-python/commit/0b3e7043c47228f0ba1d89d6c86a0cf6a67ebd31)).
- Added `DefaultNodeScheduler` for standalone node resume via `ctx.run_node()` ([a68e70d5](https://github.com/google/adk-python/commit/a68e70d5da23eaafc5db5611205d34976cb98e5a)).
- **Agent Execution Models**:
- Added explicit `ReAct` loop nodes to replace legacy single agent flows ([94453619](https://github.com/google/adk-python/commit/944536191ea16b050ba0a38ad5783108dd0b79bc)).
- Supported `BaseNode` as the root in both the Runner and the CLI ([91b56b9a](https://github.com/google/adk-python/commit/91b56b9ab07eca1e9b7b590e2ad6eee52898c0bc), [1c2a81bb](https://github.com/google/adk-python/commit/1c2a81bb675f98ba06ffcd5423f2c5aedce94bee)).
- **State & Resumption**:
- Added Human-in-the-loop (HITL) resume via event reconstruction ([ca327329](https://github.com/google/adk-python/commit/ca32732991c89a3a0ab88a43874182af3e937a13)).
- Added lazy scan deduplication and resume for dynamic nodes ([d600b195](https://github.com/google/adk-python/commit/d600b195bd5831cb6bc460e704178b739880576f)).
- Supported flushing state/artifact deltas onto yielded events ([00153088](https://github.com/google/adk-python/commit/0015308820a86e076581547ae585ade853f82707)).
- **Performance**:
- Optimized execution by bypassing the Mesh for leaf single-turn `LlmAgent` instances ([d864917f](https://github.com/google/adk-python/commit/d864917fb6e8c82c4a67941cc8e8d11f9f7540d1)).
Bug Fixes
- block RCE vulnerability via nested YAML configurations in ADK ([e283ea0](https://github.com/google/adk-python/commit/e283ea04b2056f58632e07276b212274a0fba1e8))
- bump Vertex SDK version ([21ebe29](https://github.com/google/adk-python/commit/21ebe29c9d930940235cbac50524ffd92d314fa7))
- Disable bound token for mcp_tool ([d0afddd](https://github.com/google/adk-python/commit/d0afddda4ce78cebcb915132482eccd4424596e4))
- web oauth flow and trace view ([c3dafdb](https://github.com/google/adk-python/commit/c3dafdbb46e38ff423f3e1380e5754d089f66986))
Features
- New Live UI: Redesigned the real-time chat and testing interface for a cleaner, more responsive user experience.
- Session Display Names: Added the ability to name and organize debug sessions for easier tracking.
- New Events and Trace View: Overhauled the execution log into a structured trace for better visibility into agent logic.
- New Graph View: Introduced a visual canvas to map out and manage agent architectures and node relationships.
- Event Filtering: Added granular controls to filter the event stream by message type, tools, or errors.
- New Computer Use View: Implemented a dedicated UI for visualizing screenshots and logs during computer-use tasks.
- Add "google-adk" user agent to Parameter Manager and Secret Manager clients ([b8e8f6b](https://github.com/google/adk-python/commit/b8e8f6b90290e48e134f48bbe7e2b800276e7269))
- Add support for memories.ingest_events in VertexAiMemoryBankService ([d69477f](https://github.com/google/adk-python/commit/d69477f6ff348311e1d53e3f2c389dcf037fb049))
- Add Vertex AI Agent Engine Sandbox integration for computer use ([7686848](https://github.com/google/adk-python/commit/76868485519090c5fa2a0287bccca040e438d94e))
- Firestore support ([1a9df8f](https://github.com/google/adk-python/commit/1a9df8f77410a08a85d04744f199d25f20d55ebd))
- **live:** Add live_session_id to LlmResponse ([bf84e2c](https://github.com/google/adk-python/commit/bf84e2cee84f04c886914eb72318875f3c29ea13))
Bug Fixes
- Bump minimum mcp version from 1.23.0 to 1.24.0 ([494c360](https://github.com/google/adk-python/commit/494c360b2a82af5130f153ff615f84e4c2604a73))
- **cli:** correct console URL path after adk deploy agent_engine ([64ed1a6](https://github.com/google/adk-python/commit/64ed1a68c98e32d61aff43857fa4e756b129b13f)), closes [#5336](https://github.com/google/adk-python/issues/5336)
- execute on_event_callback before append_event to persist plugin modifications ([454188d](https://github.com/google/adk-python/commit/454188de5de0ef44adb7716230eacddcb060dab2)), closes [#3990](https://github.com/google/adk-python/issues/3990)
- make `_EvalMetricResultWithInvocation.expected_invocation` `Optional` for conversation_scenario support ([#5215](https://github.com/google/adk-python/issues/5215)) ([a4c9387](https://github.com/google/adk-python/commit/a4c938775764794f42e00a89e3cb33da5119c38b))
- Pass in auth headers with header provider instead of connection params ([e12b0af](https://github.com/google/adk-python/commit/e12b0af20d9a025e3d75f309de836b139b6d3e88))
- populate required fields in FunctionDeclaration json_schema fallback ([9b9faa4](https://github.com/google/adk-python/commit/9b9faa4ba21d566252e4c25bd55ab9db2658051e))
- Resolve BigQuery plugin issues with A2A transfers, spans, and metadata ([9ca8c38](https://github.com/google/adk-python/commit/9ca8c384324e07e945146359f21010b438eb1bc6))
- upgrade google-genai lower bound ([8bc5728](https://github.com/google/adk-python/commit/8bc57283f3c584a5a6d6d774a316fe63342ed481))
Code Refactoring
- **live:** Use `send_client_content` to send conversation history ([67dc2eb](https://github.com/google/adk-python/commit/67dc2ebfd42f175f2dd6ea58df51a03c575062c6))
- **live:** Use `send_tool_response` for function responses ([70c5fc8](https://github.com/google/adk-python/commit/70c5fc83a62d1e81d20986223f5c275b086f9822))
Documentation
- update MCP Toolbox branding, binary version, and asset references ([47fa7b7](https://github.com/google/adk-python/commit/47fa7b743c37e3aa8302e78be552876c2784e6ff))
Features
- Add Auth Provider support to agent registry ([f2c68eb](https://github.com/google/adk-python/commit/f2c68eb1536f1c0018c2cf7ee3f4417ca442080c))
- Add Parameter Manager integration to ADK ([b0715d7](https://github.com/google/adk-python/commit/b0715d77a2a433bb2ed07a2475cc4d1f2d662b6c))
- Add support for Gemma 4 models in ADK ([9d4ecbe](https://github.com/google/adk-python/commit/9d4ecbe9fd1141693e4682cbfe4d542cc62b76ac)), closes [#5156](https://github.com/google/adk-python/issues/5156)
- allow users to include artifacts from artifact_service in A2A events using provided interceptor ([e63d991](https://github.com/google/adk-python/commit/e63d991be84e373fd31be29d4b6b0e32fdbde557))
- emit a `TaskStatusUpdateEvent` for ADK events with no output parts but with event.actions ([dcc485b](https://github.com/google/adk-python/commit/dcc485b23e3509e2e386636d841033b91c9a401c))
- Live avatar support in ADK ([a64a8e4](https://github.com/google/adk-python/commit/a64a8e46480753439b91b9cfd41fd190b4dad493))
- **live:** expose live_session_resumption_update as Event in BaseLlmFlow ([2626ad7](https://github.com/google/adk-python/commit/2626ad7c69fb64a88372225d5583085fc08b1fcd)), closes [#4357](https://github.com/google/adk-python/issues/4357)
- Promote BigQuery tools to Stable ([abcf14c](https://github.com/google/adk-python/commit/abcf14c166baf4f8cc6e919b1eb4c063bf3a92af))
- **samples:** add sample for skill activation via environment tools ([2cbb523](https://github.com/google/adk-python/commit/2cbb52306910fac994fe1d29bdfcfacb258703b4))
Bug Fixes
- Add "gcloud config unset project" command to express mode flow ([e7d8160](https://github.com/google/adk-python/commit/e7d81604126cbdb4d9ee4624e1d1410b06585750))
- avoid load all agents in adk web server ([cb4dd42](https://github.com/google/adk-python/commit/cb4dd42eff2df6d20c5e53211718ecb023f127fc))
- Change express mode user flow so it's more clear that an express mode project is being created ([0fedb3b](https://github.com/google/adk-python/commit/0fedb3b5eb2074999d8ccdb839e054ea80da486f))
- Custom pickling in McpToolset to exclude unpicklable objects like errlog ([d62558c](https://github.com/google/adk-python/commit/d62558cc2d7d6c0372e43c9f009c8c7a6863ff0a))
- Fix credential leakage vulnerability in Agent Registry ([e3567a6](https://github.com/google/adk-python/commit/e3567a65196bb453cdac4a5ae42f7f079476d748))
- Include a link to the deployed agent ([547766a](https://github.com/google/adk-python/commit/547766a47779915a8a47745237a46882a02dae9a))
- preserve interaction ids for interactions SSE tool calls ([9a19304](https://github.com/google/adk-python/commit/9a1930407a4eff67093ea9f14292f1931631a661)), closes [#5169](https://github.com/google/adk-python/issues/5169)
- validate user_id and session_id against path traversal ([cbcb5e6](https://github.com/google/adk-python/commit/cbcb5e6002b5bae89de5309caf7b9bb02d563cfc)), closes [#5110](https://github.com/google/adk-python/issues/5110)
Features
- **Workflow Orchestration:** Added Workflow(BaseNode) graph orchestration implementation, support for lazy scan deduplication and resume for dynamic nodes, partial resume for nested workflows, and state/artifact delta bundling onto yielded events.
- **CLI and Web UI:** Added support for Workflow graph visualization in web UI, improved graph readability with distinct icons and shapes, and active node rendering in event graph.
- **Documentation:** Added reference documentation for development (skills like adk-style, adk-git, and observability architecture).
Features
- Add auth scheme/credential support to MCP toolsets in Agent Registry ([7913a3b](https://github.com/google/adk-python/commit/7913a3b76432caf16953ea7b2a2cf4872baad417))
- add ability to block shell metacharacters in BashTool ([23bd95b](https://github.com/google/adk-python/commit/23bd95bcf23367a8df3342ca4bb9d17f0b3b0d8f))
- add configurable resource limits for subprocesses in BashTool ([1b05842](https://github.com/google/adk-python/commit/1b0584241f6418fd5fe9bd05fa666d03c310b8ae))
- Add configurable view_prefix to BigQueryLoggerConfig ([37973da](https://github.com/google/adk-python/commit/37973daff47d3c67e928a240acd188d4e318f52b))
- Add custom session id functionality to vertex ai session service ([e1913a6](https://github.com/google/adk-python/commit/e1913a6b411aec9e8774ca92ea39531b085c43f0))
- Add Description column to SKILL.md and update terminology ([435f7c7](https://github.com/google/adk-python/commit/435f7c7a9fdf8b1214f4439c6d953b6426d90da1))
- Add Easy GCP support to ADK CLI ([8850916](https://github.com/google/adk-python/commit/8850916e1908ace19a058102f0392eee08349d60))
- Add regional endpoint support to `SecretManagerClient` ([19ac679](https://github.com/google/adk-python/commit/19ac679aeacc045ed78cb9fd48bb295440843288))
- Add support for model endpoints in Agent Registry ([eb4674b](https://github.com/google/adk-python/commit/eb4674b49f017f3947506c55be4075b1ea0369d6))
- **auth:** Add public api to register custom auth provider with credential manager ([a220910](https://github.com/google/adk-python/commit/a22091058dd2ea6e1e0655b5946ce6ed7e72d25e))
- **auth:** Pass consent_nonce to Agent Frontend ([9fec503](https://github.com/google/adk-python/commit/9fec503061846b9903c18921f7848b358a041331))
- **auth:** Support additional HTTP headers in MCP tools ([b3e9962](https://github.com/google/adk-python/commit/b3e99628ee1b87b61badf56e67f8ddee15e6fe54))
- **bigquery:** Add ADK 1P Skills for ADK BQ Toolset ([4030c0d](https://github.com/google/adk-python/commit/4030c0d0167b348cf2e4c941c8610aa6ede28275))
- **environment:** Add EnvironmentToolset for file I/O and command execution ([9082b9e](https://github.com/google/adk-python/commit/9082b9e38eeb3465c399b41633e6441e339c47c3))
- **environment:** Add LocalEnvironment for executing commands and file I/O locally ([f973673](https://github.com/google/adk-python/commit/f97367381e820c75ad16d4ce7ee27c0f9929c81d))
- Implement robust process group management and timeouts in BashTool ([f641b1a](https://github.com/google/adk-python/commit/f641b1a219b041659e6d429c47974bc9e5cfe1af))
- **live:** Added in 1.28.1, support live for `gemini-3.1-flash-live-preview` model ([8082893](https://github.com/google/adk-python/commit/8082893619bb85d4ee0dc53fd2133d12b9434d07))
- Option to use shallow-copy for session in InMemorySessionService ([16a1a18](https://github.com/google/adk-python/commit/16a1a185ab77a904fd01712779fa1bc6417dc628))
- Propagate context to thread pools ([83393ab](https://github.com/google/adk-python/commit/83393ab839d5733568699195683408fccbd1cb6e))
- refresh credentials if token is missing in the common code and samples ([1445ad5](https://github.com/google/adk-python/commit/1445ad5069841e446328e0856553f69a6699f0f4))
- Remove use of raw_event field in vertex ai session service ([642d337](https://github.com/google/adk-python/commit/642d337a9069fae334192d045c9f85922cbcef53))
- **skill:** Standardize skill tools and make script arguments flexible ([9e73ab8](https://github.com/google/adk-python/commit/9e73ab846672065f1fbe1c2642419e8a008efd43))
- Support AgentRegistry association ([6754760](https://github.com/google/adk-python/commit/675476088b9f3c0a488ce48f652b7f3f7ea47230))
- Support loading agents from Visual Builder with BigQuery-powered logging ([2074889](https://github.com/google/adk-python/commit/20748894cdaa5a95d0c4ccb0daf87a34496639dd))
- Support propagating grounding metadata from AgentTool ([d689a04](https://github.com/google/adk-python/commit/d689a04f16846c2aa483dd45dcc65e2decdb419c))
- Support short options and positional arguments in RunSkillScriptTool ([2b49163](https://github.com/google/adk-python/commit/2b49163b399135f0d96b73a99eb4ace764ce87db))
- Use raw_event field in vertex ai session service for append and list events ([6ee0362](https://github.com/google/adk-python/commit/6ee036292e9eefabb032e8ebec3580a2243f3a96))
- Use raw_event to store event data in vertex ai session service ([9da9dee](https://github.com/google/adk-python/commit/9da9dee140a3c8971d2dc267eab7d8d17a22a089))
Bug Fixes
- Add A2ATransport.http_json to the default supported transports list ([7dd9359](https://github.com/google/adk-python/commit/7dd9359fa1c419f82db84b844195e1b77d8070e7))
- add httpx_client_factory support to SseConnectionParams ([815ebb4](https://github.com/google/adk-python/commit/815ebb441579724e5aa22830b2e6f7c22f94fde6))
- **adk:** redact credentials in BigQuery analytics plugin ([a27ce47](https://github.com/google/adk-python/commit/a27ce4771ff271947a0d94762231da842095836e))
- api client initialization logic to be mutually exclusive between ExpressMode and GCP projects ([4ffe8fb](https://github.com/google/adk-python/commit/4ffe8fb4a6befc9e9d0e838427b7bf4890df4ba3))
- avoid load all agents in adk web server ([ede8a56](https://github.com/google/adk-python/commit/ede8a56a3cd18311ce82e761f0f3da6228fbc0d6))
- Cache BaseToolset.get_tools() for calls within the same invocation ([92cad99](https://github.com/google/adk-python/commit/92cad99724d333760e4ebc6116951d78a9b1cb7a))
- **cli:** fail Agent Engine deploy when config file path is invalid ([bbad9ec](https://github.com/google/adk-python/commit/bbad9ec64ce1617bc45148de97e6246752845b98))
- Disable tool caching for skill toolset ([064f0d2](https://github.com/google/adk-python/commit/064f0d278e55e1e9fd6db1b6ccf3d1cb95cba47b))
- Disallow args on /builder and Add warning about Web UI usage to CLI help ([dcee290](https://github.com/google/adk-python/commit/dcee2902729e178b41086c4039a3828917bbb9f3))
- empty events_iterator assignment ([898c4e5](https://github.com/google/adk-python/commit/898c4e5f78b60c4c4732c7cd19ff2da9a64964a1))
- **environment:** fix package references ([add8e86](https://github.com/google/adk-python/commit/add8e8664bd2ae9257c8b37a5e602d0c7aae7625))
- Fix RemoteA2AAgent deepcopy errors ([6f29775](https://github.com/google/adk-python/commit/6f29775f4bf7172b1378b17856534f95b9d4eeb6))
- Fixes for initializing RemoteA2aAgent - passing in preferred transport, protocol version, and auth headers ([0f3850f](https://github.com/google/adk-python/commit/0f3850f56c857dfb86c7ad8de372bcc7fe495968))
- Generate IDs for FunctionCalls when processing streaming LLM responses ([fe41817](https://github.com/google/adk-python/commit/fe4181718d104843b974417c59203ed8a7b15255)), closes [#4609](https://github.com/google/adk-python/issues/4609)
- Handle merging lists in deep_merge_dicts ([cdb3ff4](https://github.com/google/adk-python/commit/cdb3ff4e1f155c357f8cf720132d09bbc1446075))
- In memory session service to evaluate dictionary keys and value into an isolated snapshot sequence before starting loop ([f75de59](https://github.com/google/adk-python/commit/f75de59362e07c0cce0ead723ceea3102081af4d))
- include intermediate subagent final response events in evaluation intermediate data ([f8a6bd7](https://github.com/google/adk-python/commit/f8a6bd7fc0ca4b37cac4dc93c725c8973a1c9027))
- **live:** Handle live session resumption and GoAway signal ([6b1600f](https://github.com/google/adk-python/commit/6b1600fbf53bcf634c5fe4793f02921bc0b75125)), closes [#4996](https://github.com/google/adk-python/issues/4996)
- move BigQueryAgentAnalyticsPlugin import inside get_runner_async ([6fd0f85](https://github.com/google/adk-python/commit/6fd0f85191dea17b7c6b033473bd39764250265b))
- Safer fix for UI widget merging in ADK ([0e71985](https://github.com/google/adk-python/commit/0e71985501c00682eff0f0c5328a3d429f2bdc68))
- Small fixes for express mode ([3a374ce](https://github.com/google/adk-python/commit/3a374ce0aae73c138cd51d754220d0d7a64677b3))
- sync callbacks with call_llm span ([b2daf83](https://github.com/google/adk-python/commit/b2daf83db406f8844f9db75abc7fee17362433b3))
- **tools:** handle toolset errors gracefully in canonical_tools ([5df03f1](https://github.com/google/adk-python/commit/5df03f1f412e3ab55a5a6ceac892ba6b985a8036)), closes [#3341](https://github.com/google/adk-python/issues/3341)
- truncate error_message in v0 schema to prevent VARCHAR overflow ([62daf4f](https://github.com/google/adk-python/commit/62daf4f61b14aee7bca9d8dec479bfd940bbb955)), closes [#4993](https://github.com/google/adk-python/issues/4993)
- update toolbox-adk and toolbox server versions ([1486925](https://github.com/google/adk-python/commit/14869253d072e901d530fd3b7ee8ef67fbe5ddbc))
Code Refactoring
- Move SecretManagerClient to google.adk.integrations.secret_manager package ([1104523](https://github.com/google/adk-python/commit/110452375c6ccaa16e4ade7d7fe3438d185d4355))
- Remove the session events dependency from A2aAgentExecutor ([aaa03ac](https://github.com/google/adk-python/commit/aaa03ac30841b2e12e3ddf4bb02fbcbf08ae13e8))
Documentation
- **adk:** clean up remote triggers README to remove internal references ([ccac461](https://github.com/google/adk-python/commit/ccac461b2ab6291ecd09577ca0553833eaff71b9))
- Update the MCP Toolbox docsite with the new URL ([a60baca](https://github.com/google/adk-python/commit/a60baca3ddfe2541159b32d67b738a836d2395e7))
Features
- **live:** support live for `gemini-3.1-flash-live-preview` model ([ee69661](https://github.com/google/adk-python/commit/ee69661a616056fa89e0ec2188aaa59bd714d8c9))
Bug Fixes
- Disallow args on /builder and Add warning about Web UI usage to CLI help ([f037f68](https://github.com/google/adk-python/commit/f037f68d67ae1bd16b00df0c7523fb67cbd1e911))
- **live:** Buffer tool calls and emit them together upon turn completion ([081adbd](https://github.com/google/adk-python/commit/081adbdfa41490e4868b028a1cdabceb811a7505))
Bug Fixes
- add agent name validation to prevent arbitrary module imports ([be094f7](https://github.com/google/adk-python/commit/be094f7e50e3976cb69468c7a8d17f3385132c41))
- add protection for arbitrary module imports ([0019801](https://github.com/google/adk-python/commit/0019801f6080a371a71b09cbd8291f2e79a49336)), closes [#4947](https://github.com/google/adk-python/issues/4947)
- Default to ClusterIP so GKE deployment isn't publicly exposed by default ([27aed23](https://github.com/google/adk-python/commit/27aed23edddcc8c69c4c4563198c8570aa40743e))
- enforce allowed file extensions for GET requests in the builder API ([68ece4e](https://github.com/google/adk-python/commit/68ece4e04fb3829e61847dae123cf4bc79a0a4c2))
- Exclude compromised LiteLLM versions from dependencies pin to 1.82.6 ([79ed953](https://github.com/google/adk-python/commit/79ed95383dd0bc13984b6499913babef232d4dab))
- gate builder endpoints behind web flag ([584283e](https://github.com/google/adk-python/commit/584283e2d8209af9db719fdeae506892d4a44ca2))
- Update eval extras to Vertex SDK package version with constrained LiteLLM upperbound ([a86d0aa](https://github.com/google/adk-python/commit/a86d0aa7d70d1c70346eceef591d255ed96711c8))
Features
- **a2a:** add lifespan parameter to to_a2a() ([0f4c807](https://github.com/google/adk-python/commit/0f4c8073e5a180a220f88928d67ee8d521486f03)), closes [#4701](https://github.com/google/adk-python/issues/4701)
- Add a new extension for the new version of ADK-A2A integration ([6f0dcb3](https://github.com/google/adk-python/commit/6f0dcb3e26dd82fed1a8564c17a47eec03b04617))
- Add ability to run individual unit tests to unittests.sh ([b3fcd8a](https://github.com/google/adk-python/commit/b3fcd8a21fe64063cdd8d07121ee4da3adb44c30))
- Add database_role property to SpannerToolSettings and use it in execute_sql to support fine grained access controls ([360e0f7](https://github.com/google/adk-python/commit/360e0f7ebaba7a682f7230c259b474ace7ff6d13))
- Add index to events table and update dependencies ([3153e6d](https://github.com/google/adk-python/commit/3153e6d74f401f39e363a36f6fa0664f245013db)), closes [#4827](https://github.com/google/adk-python/issues/4827)
- Add MultiTurn Task success metric ([9a75c06](https://github.com/google/adk-python/commit/9a75c06873b79fbd206b3712231c0280fb2f87ca))
- Add MultiTurn Task trajectory and tool trajectory metrics ([38bfb44](https://github.com/google/adk-python/commit/38bfb4475406d63af3111775950d9c25acf17ed2))
- Add slack integration to ADK ([6909a16](https://github.com/google/adk-python/commit/6909a167c8d030111bf7118b9d5e78255a299684))
- Add Spanner Admin Toolset ([28618a8](https://github.com/google/adk-python/commit/28618a8dcbee9c4faeec6653a5d978d0330f39bb))
- Add SSE streaming support to conformance tests ([c910961](https://github.com/google/adk-python/commit/c910961501ef559814f54c22aca1609fd3227b80))
- Add support for Anthropic's thinking_blocks format in LiteLLM integration ([fc45fa6](https://github.com/google/adk-python/commit/fc45fa68d75fbf5276bf5951929026285a8bb4af)), closes [#4801](https://github.com/google/adk-python/issues/4801)
- Add support for timeout to UnsafeLocalCodeExecutor ([71d26ef](https://github.com/google/adk-python/commit/71d26ef7b90fe25a5093e4ccdf74b103e64fac67))
- **auth:** Integrate GCP IAM Connectors (Noop implementation) ([78e5a90](https://github.com/google/adk-python/commit/78e5a908dcb4b1a93e156c6f1b282f59ec6b69d4))
- **bigquery:** Migrate 1P BQ Toolset ([08be442](https://github.com/google/adk-python/commit/08be44295de614f30e686113897af7fe9c228751)) ([7aa1f52](https://github.com/google/adk-python/commit/7aa1f5252c15caaf40fde73ac4283fa0a48d8a96)) ([d112131](https://github.com/google/adk-python/commit/d1121317ef4e1ac559f4ae13855ac1af28eef8f6)) ([166ff99](https://github.com/google/adk-python/commit/166ff99b9266cd3bb0e86070c58a67d937216297))
- enable suppressing A2A experimental warnings ([fdc2b43](https://github.com/google/adk-python/commit/fdc2b4355b5a73b8f32d3fa32a092339d963ce67))
- Enhance AgentEngineSandboxCodeExecutor sample to automatically provision an Agent Engine if neither agent_engine_resource_name nor sandbox_resource_name is provided ([6c34694](https://github.com/google/adk-python/commit/6c34694da64968bc766a7e5e860c0ed9acbc69c2))
- Extract and merge EventActions from A2A metadata ([4b677e7](https://github.com/google/adk-python/commit/4b677e73b939f5a13269abd9ba9fe65e4b78d7f6)), closes [#3968](https://github.com/google/adk-python/issues/3968)
- **mcp:** add sampling callback support for MCP sessions ([8f82697](https://github.com/google/adk-python/commit/8f826972cc06ef250c1f020e34b9d1cdbd0788c4))
- Optional GCP project and credential for GCS access ([2f90c1a](https://github.com/google/adk-python/commit/2f90c1ac09638517b08cd96a17d595f0968f0bf6))
- Support new embedding model in files retrieval ([faafac9](https://github.com/google/adk-python/commit/faafac9bb33b45174f04746055fc655b12d3e7f7))
Bug Fixes
- add agent name validation to prevent arbitrary module imports ([116f75d](https://github.com/google/adk-python/commit/116f75d))
- add protection for arbitrary module imports ([995cd1c](https://github.com/google/adk-python/commit/995cd1c)), closes [#4947](https://github.com/google/adk-python/issues/4947)
- Add read-only session support in DatabaseSessionService ([f6ea58b](https://github.com/google/adk-python/commit/f6ea58b5939b33afad5a2d2f8fb395150120ae07)), closes [#4771](https://github.com/google/adk-python/issues/4771)
- Allow snake case for skill name ([b157276](https://github.com/google/adk-python/commit/b157276cbb3c4f7f7b97e338e9d9df63d9c949cd))
- **bigquery:** use valid dataplex OAuth scope ([4010716](https://github.com/google/adk-python/commit/4010716470fc83918dc367c5971342ff551401c8))
- Default to ClusterIP so GKE deployment isn't publicly exposed by default ([f7359e3](https://github.com/google/adk-python/commit/f7359e3fd40eae3b8ef50c7bc88f1075ffb9b7de))
- **deps:** bump google-genai minimum to >=1.64.0 for gemini-embedding-2-preview ([f8270c8](https://github.com/google/adk-python/commit/f8270c826bc807da99b4126e98ee1c505f4ed7c3))
- enforce allowed file extensions for GET requests in the builder API ([96e845e](https://github.com/google/adk-python/commit/96e845ef8cf66b288d937e293a88cdb28b09417c))
- error when event does not contain long_running_tool_ids ([1f9f0fe](https://github.com/google/adk-python/commit/1f9f0fe9d349c06f48063b856242c67654786dbc))
- Exclude compromised LiteLLM versions from dependencies pin to 1.82.6 ([77f1c41](https://github.com/google/adk-python/commit/77f1c41be61eed017b008d7ab311923e30b46643))
- Fix IDE hangs by moving test venv and cache to /tmp ([6f6fd95](https://github.com/google/adk-python/commit/6f6fd955f6dab50c98859294328a98f32181dc27))
- Fix imports for environment simulation files ([dcccfca](https://github.com/google/adk-python/commit/dcccfca1d1dd1b3b9c273278e9f9c883f0148eba))
- gate builder endpoints behind web flag ([6c24ccc](https://github.com/google/adk-python/commit/6c24ccc9ec7d0f942e1dd436a823f48ae1a0c695))
- Handle concurrent creation of app/user state rows in DatabaseSessionService ([d78422a](https://github.com/google/adk-python/commit/d78422a4051bba383202f3f13325e65b8be3ccd3)), closes [#4954](https://github.com/google/adk-python/issues/4954)
- **live:** convert response_modalities to Modality enum before assigning to LiveConnectConfig ([47aaf66](https://github.com/google/adk-python/commit/47aaf66efb3e3825f06fd44578d592924fb7542b)), closes [#4869](https://github.com/google/adk-python/issues/4869)
- **models:** handle arbitrary dict responses in part_to_message_block ([c26d359](https://github.com/google/adk-python/commit/c26d35916e1b6cd12a412516381c6fcbf867bcee))
- **models:** update 429 docs link for Gemini ([a231c72](https://github.com/google/adk-python/commit/a231c729e6526a2035b4630796f3dc8a658bb203))
- populate `required` for Pydantic `BaseModel` parameters in `FunctionTool` ([c5d809e](https://github.com/google/adk-python/commit/c5d809e10eeaadfcbd12874d0976b5259f327adf)), closes [#4777](https://github.com/google/adk-python/issues/4777)
- Prevent compaction of events with pending function calls ([991c411](https://github.com/google/adk-python/commit/991c4111e31ffe97acc73c2ddf5cacea0955d39f)), closes [#4740](https://github.com/google/adk-python/issues/4740)
- Prevent uv.lock modifications in unittests.sh ([e6476c9](https://github.com/google/adk-python/commit/e6476c9790eaa8f3a6ae8165351f8fe38bf9bd1e))
- Refactor blocking subprocess call to use asyncio in bash_tool ([58c4536](https://github.com/google/adk-python/commit/58c453688fea921707a07c21d0669174ea1a3b5f))
- Refactor LiteLlm check to avoid ImportError ([7b94a76](https://github.com/google/adk-python/commit/7b94a767337e0d642e808734608f07a70e077c62))
- Reject appends to stale sessions in DatabaseSessionService ([b8e7647](https://github.com/google/adk-python/commit/b8e764715cb1cc7c8bc1de9aa94ca5f5271bb627)), closes [#4751](https://github.com/google/adk-python/issues/4751)
- Remove redundant client_id from fetch_token call ([50d6f35](https://github.com/google/adk-python/commit/50d6f35139b56aa5b9fb06ee53b911269c222ffe)), closes [#4782](https://github.com/google/adk-python/issues/4782)
- returns '<No stdout/stderr captured>' instead of empty strings for clearer agent feedback and correct typing ([3e00e95](https://github.com/google/adk-python/commit/3e00e955519730503e73155723f27b2bc8d5779b))
- Store and retrieve usage_metadata in Vertex AI custom_metadata ([b318eee](https://github.com/google/adk-python/commit/b318eee979b1625d3d23ad98825c88f54016a12f))
- Support resolving string annotations for `find_context_parameter` ([22fc332](https://github.com/google/adk-python/commit/22fc332c95b7deca95240b33406513bcc95c6e03))
- **telemetry:** Rolling back change to fix issue affecting LlmAgent creation due to missing version field ([0e18f81](https://github.com/google/adk-python/commit/0e18f81a5cd0d0392ded653b1a63a236449a2685))
- **tools:** disable default httpx 5s timeout in OpenAPI tool _request ([4c9c01f](https://github.com/google/adk-python/commit/4c9c01fd4b1c716950700fd56a1a8789795cb7b1)), closes [#4431](https://github.com/google/adk-python/issues/4431)
- **tools:** support regional Discovery Engine endpoints ([30b904e](https://github.com/google/adk-python/commit/30b904e596b0bcea8498a9b47d669585a6c481d3))
- **tools:** support structured datastores in DiscoveryEngineSearchTool ([f35c3a6](https://github.com/google/adk-python/commit/f35c3a66da7c66967d06d0f5f058f9417abf1f8d)), closes [#3406](https://github.com/google/adk-python/issues/3406)
- Update Agent Registry to use the full agent card if available ([031f581](https://github.com/google/adk-python/commit/031f581ac6e0fb06cc1175217a26bdd0c7382da8))
- Update eval extras to Vertex SDK package version with constrained LiteLLM upperbound ([27cc98d](https://github.com/google/adk-python/commit/27cc98db5fbc15de27713a5814d5c68e9c835d0f))
- Update import and version for k8s-agent-sandbox ([1ee0623](https://github.com/google/adk-python/commit/1ee062312813e9564fdff693f883f57987e18c6a)), closes [#4883](https://github.com/google/adk-python/issues/4883)
- Update list_agents to only list directories, not validate agent definitions ([5020954](https://github.com/google/adk-python/commit/50209549206256abe5d1c5d84ab2b14dfdf80d66))
Code Refactoring
- rename agent simulator to environment simulation. Also add tracing into environment simulation ([99a31bf](https://github.com/google/adk-python/commit/99a31bf77ea6fb2c53c313094734611dcb87b1e2))
Documentation
- Feat/Issue Monitoring Agent ([780093f](https://github.com/google/adk-python/commit/780093f389bfbffce965c89ca888d49f992219c1))
- Use a dedicated API key for docs agents ([51c19cb](https://github.com/google/adk-python/commit/51c19cbc13c422dffd764ed0d7c664deed9e58b3))
Bug Fixes
- Update eval extras to Vertex SDK package version with constrained LiteLLM upperbound ([77928a8](https://github.com/google/adk-python/commit/77928a81c39a955c2559b80d3ce137d6503b5264))
Bug Fixes
- Exclude compromised LiteLLM versions from dependencies pin to 1.82.6 ([fa5e707](https://github.com/google/adk-python/commit/fa5e707c11ad748e7db2f653b526d9bdc4b7d405))
- gate builder endpoints behind web flag ([44b3f72](https://github.com/google/adk-python/commit/44b3f72d8f4ee09461d0acd8816149e801260b84))
Bug Fixes
- add protection for arbitrary module imports ([276adfb](https://github.com/google/adk-python/commit/276adfb7ad552213c0201a3c95efbc9876bf3b66))
No categorized notes parsed for this release — see it on GitHub.
Bug Fixes
- Use valid dataplex OAuth scope for BigQueryToolset ([4010716](https://github.com/google/adk-python/commit/4010716470fc83918dc367c5971342ff551401c8))
- Store and retrieve usage_metadata in Vertex AI custom_metadata ([b318eee](https://github.com/google/adk-python/commit/b318eee979b1625d3d23ad98825c88f54016a12f))
Bug Fixes
- Rolling back change to fix issue affecting LlmAgent creation due to missing version field ([0e18f81](https://github.com/google/adk-python/commit/0e18f81a5cd0d0392ded653b1a63a236449a2685))
Features
- **[Core]**
- Introduce A2A request interceptors in RemoteA2aAgent ([6f772d2](https://github.com/google/adk-python/commit/6f772d2b0841446bc168ccf405b59eb17c1d671a))
- Add UiWidget to EventActions for supporting new experimental UI Widgets feature ([530ff06](https://github.com/google/adk-python/commit/530ff06ece61a93855a53235e85af18b46b2a6a0))
- **auth:** Add pluggable support for auth integrations using AuthProviderRegistry within CredentialManager ([d004074](https://github.com/google/adk-python/commit/d004074c90525442a69cebe226440bb318abad29))
- Support all `types.SchemaUnion` as output_schema in LLM Agent ([63f450e](https://github.com/google/adk-python/commit/63f450e0231f237ee1af37f17420d37b15426d48))
- durable runtime support ([07fdd23](https://github.com/google/adk-python/commit/07fdd23c9c3f5046aa668fb480840f67f13bf271))
- **runners:** pass GetSessionConfig through Runner to session service ([eff724a](https://github.com/google/adk-python/commit/eff724ac9aef2a203607f772c473703f21c09a72))
- **[Models]**
- Add support for PDF documents in Anthropic LLM ([4c8ba74](https://github.com/google/adk-python/commit/4c8ba74fcb07014db187ef8db8246ff966379aa9))
- Add streaming support for Anthropic models ([5770cd3](https://github.com/google/adk-python/commit/5770cd3776c8805086ece34d747e589e36916a34)), closes [#3250](https://github.com/google/adk-python/issues/3250)
- Enable output schema with tools for LiteLlm models ([89df5fc](https://github.com/google/adk-python/commit/89df5fcf883b599cf7bfe40bde35b8d86ab0146b)), closes [#3969](https://github.com/google/adk-python/issues/3969)
- Preserve thought_signature in LiteLLM tool calls ([ae565be](https://github.com/google/adk-python/commit/ae565be30e64249b2913ad647911061a8b170e21)), closes [#4650](https://github.com/google/adk-python/issues/4650)
- **[Web]**
- Updated human in the loop: developers now can respond to long running functions directly in chat
- Render artifacts when resuming
- Fix some light mode styles
- Fix token level streaming not working properly ([22799c0](https://github.com/google/adk-python/commit/22799c0833569753021078f7bd8dcd11ece562fe))
- **[Observability]**
- **telemetry:** add new gen_ai.agent.version span attribute ([ffe97ec](https://github.com/google/adk-python/commit/ffe97ec5ad7229c0b4ba573f33eb0edb8bb2877a))
- **otel:** add `gen_ai.tool.definitions` to experimental semconv ([4dd4d5e](https://github.com/google/adk-python/commit/4dd4d5ecb6a1dadbc41389dac208616f6d21bc6e))
- **otel:** add experimental semantic convention and emit `gen_ai.client.inference.operation.details` event ([19718e9](https://github.com/google/adk-python/commit/19718e9c174af7b1287b627e6b23a609db1ee5e2))
- add missing token usage span attributes during model usage ([77bf325](https://github.com/google/adk-python/commit/77bf325d2bf556621c3276f74ee2816fce2a7085))
- capture tool execution error code in OpenTelemetry spans ([e0a6c6d](https://github.com/google/adk-python/commit/e0a6c6db6f8e2db161f8b86b9f11030f0cec807a))
- **[Tools]**
- Warn when accessing DEFAULT_SKILL_SYSTEM_INSTRUCTION ([35366f4](https://github.com/google/adk-python/commit/35366f4e2a0575090fe12cd85f51e8116a1cd0d3))
- add preserve_property_names option to OpenAPIToolset ([078b516](https://github.com/google/adk-python/commit/078b5163ff47acec69b1c8e105f62eb7b74f5548))
- Add gcs filesystem support for Skills. It supports skills in text and pdf format, also has some sample agents ([6edcb97](https://github.com/google/adk-python/commit/6edcb975827dbd543a40ae3a402d2389327df603))
- Add list_skills_in_dir to skills utils ([327b3af](https://github.com/google/adk-python/commit/327b3affd2d0a192f5a072b90fdb4aae7575be90))
- Add support for MCP App UI widgets in MCPTool ([86db35c](https://github.com/google/adk-python/commit/86db35c338adaafb41e156311465e71e17edf35e))
- add Dataplex Catalog search tool to BigQuery ADK ([82c2eef](https://github.com/google/adk-python/commit/82c2eefb27313c5b11b9e9382f626f543c53a29e))
- Add RunSkillScriptTool to SkillToolset ([636f68f](https://github.com/google/adk-python/commit/636f68fbee700aa47f01e2cfd746859353b3333d))
- Add support for ADK tools in SkillToolset ([44a5e6b](https://github.com/google/adk-python/commit/44a5e6bdb8e8f02891e72b65ef883f108c506f6a))
- limit number of user-provided BigQuery job labels and reserve internal prefixes ([8c4ff74](https://github.com/google/adk-python/commit/8c4ff74e7d70cf940f54f6d7735f001495ce75d5))
- Add param support to Bigtable execute_sql ([5702a4b](https://github.com/google/adk-python/commit/5702a4b1f59b17fd8b290fc125c349240b0953d7))
- **bigtable:** add Bigtable cluster metadata tools ([34c560e](https://github.com/google/adk-python/commit/34c560e66e7ad379f586bbcd45a9460dc059bee2))
- execute-type param addition in GkeCodeExecutor ([9c45166](https://github.com/google/adk-python/commit/9c451662819a6c7de71be71d12ea715b2fe74135))
- **skill:** Add BashTool ([8a31612](https://github.com/google/adk-python/commit/8a3161202e4bac0bb8e8801b100f4403c1c75646))
- Add support for toolsets to additional_tools field of SkillToolset ([066fcec](https://github.com/google/adk-python/commit/066fcec3e8e669d1c5360e1556afce3f7e068072))
- **[Optimization]**
- Add `adk optimize` command ([b18d7a1](https://github.com/google/adk-python/commit/b18d7a140f8e18e03255b07e6d89948427790095))
- Add interface between optimization infra and LocalEvalService ([7b7ddda](https://github.com/google/adk-python/commit/7b7ddda46ca701952f002b2807b89dbef5322414))
- Add GEPA root agent prompt optimizer ([4e3e2cb](https://github.com/google/adk-python/commit/4e3e2cb58858e08a79bc6119ad49b6c049dbc0d0))
- **[Integrations]**
- Enhance BigQuery plugin schema upgrades and error reporting ([bcf38fa](https://github.com/google/adk-python/commit/bcf38fa2bac2f0d1ab74e07e01eb5160bad1d6dc))
- Enhance BQ plugin with fork safety, auto views, and trace continuity ([80c5a24](https://github.com/google/adk-python/commit/80c5a245557cd75870e72bff0ecfaafbd37fdbc7))
- Handle Conflict Errors in BigQuery Agent Analytics Plugin ([372c76b](https://github.com/google/adk-python/commit/372c76b857daa1102e76d755c0758f1515d6f180))
- Added tracking headers for ADK CLI command to Agent Engine ([3117446](https://github.com/google/adk-python/commit/3117446293d30039c2f21f3d17a64a456c42c47d))
- **[A2A]**
- New implementation of A2aAgentExecutor and A2A-ADK conversion ([87ffc55](https://github.com/google/adk-python/commit/87ffc55640dea1185cf67e6f9b78f70b30867bcc))
- New implementation of RemoteA2aAgent and A2A-ADK conversion ([6770e41](https://github.com/google/adk-python/commit/6770e419f5e200f4c7ad26587e1f769693ef4da0))
Bug Fixes
- Allow artifact services to accept dictionary representations of types.Part ([b004da5](https://github.com/google/adk-python/commit/b004da50270475adc9e1d7afe4064ca1d10c560a)), closes [#2886](https://github.com/google/adk-python/issues/2886)
- Decode image data from ComputerUse tool response into image blobs ([d7cfd8f](https://github.com/google/adk-python/commit/d7cfd8fe4def2198c113ff1993ef39cd519908a1))
- Expand LiteLLM reasoning extraction to include 'reasoning' field ([9468487](https://github.com/google/adk-python/commit/94684874e436c2959cfc90ec346010a6f4fddc49)), closes [#3694](https://github.com/google/adk-python/issues/3694)
- Filter non-agent directories from list_agents() ([3b5937f](https://github.com/google/adk-python/commit/3b5937f022adf9286dc41e01e3618071a23eb992))
- Fix Type Error by initializing user_content as a Content object ([2addf6b](https://github.com/google/adk-python/commit/2addf6b9dacfe87344aeec0101df98d99c23bdb1))
- Handle length finish reason in LiteLLM responses ([4c6096b](https://github.com/google/adk-python/commit/4c6096baa1b0bed8533397287a5c11a0c4cb9101)), closes [#4482](https://github.com/google/adk-python/issues/4482)
- In SaveFilesAsArtifactsPlugin, write the artifact delta to state then event actions so that the plugin works with ADK Web UI's artifacts panel ([d6f31be](https://github.com/google/adk-python/commit/d6f31be554d9b7ee15fd9c95ae655b2265fb1f32))
- Make invocation_context optional in convert_event_to_a2a_message ([8e79a12](https://github.com/google/adk-python/commit/8e79a12d6bcde43cc33247b7ee6cc9e929fa6288))
- Optimize row-level locking in append_event ([d61846f](https://github.com/google/adk-python/commit/d61846f6c6dd5e357abb0e30eaf61fe27896ae6a)), closes [#4655](https://github.com/google/adk-python/issues/4655)
- Preserve thought_signature in FunctionCall conversions between GenAI and A2A ([f9c104f](https://github.com/google/adk-python/commit/f9c104faf73e2a002bb3092b50fb88f4eed78163))
- Prevent splitting of SSE events with artifactDelta for function resume requests ([6a929af](https://github.com/google/adk-python/commit/6a929af718fa77199d1eecc62b16c54beb1c8d84)), closes [#4487](https://github.com/google/adk-python/issues/4487)
- Propagate file names during A2A to/from Genai Part conversion ([f324fa2](https://github.com/google/adk-python/commit/f324fa2d62442301ebb2e7974eb97ea870471410))
- Propagate thought from A2A TextPart metadata to GenAI Part ([e59929e](https://github.com/google/adk-python/commit/e59929e11a56aaee7bb0c45cd4c9d9fef689548c))
- Re-export DEFAULT_SKILL_SYSTEM_INSTRUCTION to skills and skill/prompt.py to avoid breaking current users ([de4dee8](https://github.com/google/adk-python/commit/de4dee899cd777a01ba15906f8496a72e717ea98))
- Refactor type string update in Anthropic tool param conversion ([ab4b736](https://github.com/google/adk-python/commit/ab4b736807dabee65659486a68135d9f1530834c))
- **simulation:** handle NoneType generated_content ([9d15517](https://github.com/google/adk-python/commit/9d155177b956f690d4c99560f582e3e90e111f71))
- Store and retrieve EventCompaction via custom_metadata in Vertex AISessionService ([2e434ca](https://github.com/google/adk-python/commit/2e434ca7be765d45426fde9d52b131921bd9fa30)), closes [#3465](https://github.com/google/adk-python/issues/3465)
- Support before_tool_callback and after_tool_callback in Live mode ([c36a708](https://github.com/google/adk-python/commit/c36a708058163ade061cd3d2f9957231a505a62d)), closes [#4704](https://github.com/google/adk-python/issues/4704)
- temp-scoped state now visible to subsequent agents in same invocation ([2780ae2](https://github.com/google/adk-python/commit/2780ae2892adfbebc7580c843d2eaad29f86c335))
- **tools:** Handle JSON Schema boolean schemas in Gemini schema conversion ([3256a67](https://github.com/google/adk-python/commit/3256a679da3e0fb6f18b26057e87f5284680cb58))
- typo in A2A EXPERIMENTAL warning ([eb55eb7](https://github.com/google/adk-python/commit/eb55eb7e7f0fa647d762205225c333dcd8a08dd0))
- Update agent_engine_sandbox_code_executor in ADK ([dff4c44](https://github.com/google/adk-python/commit/dff4c4404051b711c8be437ba0ae26ca2763df7d))
- update Bigtable query tools to async functions ([72f3e7e](https://github.com/google/adk-python/commit/72f3e7e1e00d93c632883027bf6d31a9095cd6c2))
- Update expected UsageMetadataChunk in LiteLLM tests ([dd0851a](https://github.com/google/adk-python/commit/dd0851ac74d358bc030def5adf242d875ab18265)), closes [#4680](https://github.com/google/adk-python/issues/4680)
- update toolbox server and SDK package versions ([2e370ea](https://github.com/google/adk-python/commit/2e370ea688033f0663501171d0babfb0d74de4b2))
- Validate session before streaming instead of eagerly advancing the runner generator ([ebbc114](https://github.com/google/adk-python/commit/ebbc1147863956e85931f8d46abb0632e3d1cf67))
Code Refactoring
- extract reusable functions from hitl and auth preprocessor ([c59afc2](https://github.com/google/adk-python/commit/c59afc21cbed27d1328872cdc2b0e182ab2ca6c8))
- Rename base classes and TypeVars in optimization data types ([9154ef5](https://github.com/google/adk-python/commit/9154ef59d29eb37538914e9967c4392cc2a24237))
Features
- **[Core]**
- Add intra-invocation compaction and token compaction pre-request ([485fcb8](https://github.com/google/adk-python/commit/485fcb84e3ca351f83416c012edcafcec479c1db))
- Use `--memory_service_uri` in ADK CLI run command ([a7b5097](https://github.com/google/adk-python/commit/a7b509763c1732f0363e90952bb4c2672572d542))
- **[Models]**
- Add `/chat/completions` integration to `ApigeeLlm` ([9c4c445](https://github.com/google/adk-python/commit/9c4c44536904f5cf3301a5abb910a5666344a8c5))
- Add `/chat/completions` streaming support to Apigee LLM ([121d277](https://github.com/google/adk-python/commit/121d27741684685c564e484704ae949c5f0807b1))
- Expand LiteLlm supported models and add registry tests ([d5332f4](https://github.com/google/adk-python/commit/d5332f44347f44d60360e14205a2342a0c990d66))
- **[Tools]**
- Add `load_skill_from_dir()` method ([9f7d5b3](https://github.com/google/adk-python/commit/9f7d5b3f1476234e552b783415527cc4bac55b39))
- Agent Skills spec compliance — validation, aliases, scripts, and auto-injection ([223d9a7](https://github.com/google/adk-python/commit/223d9a7ff52d8da702f1f436bd22e94ad78bd5da))
- BigQuery ADK support for search catalog tool ([bef3f11](https://github.com/google/adk-python/commit/bef3f117b4842ce62760328304484cd26a1ec30a))
- Make skill instruction optimizable and can adapt to user tasks ([21be6ad](https://github.com/google/adk-python/commit/21be6adcb86722a585b26f600c45c85e593b4ee0))
- Pass trace context in MCP tool call's `_meta` field with OpenTelemetry propagator ([bcbfeba](https://github.com/google/adk-python/commit/bcbfeba953d46fca731b11542a00103cef374e57))
- **[Evals]**
- Introduce User Personas to the ADK evaluation framework ([6a808c6](https://github.com/google/adk-python/commit/6a808c60b38ad7140ddeb222887c6accc63edce9))
- **[Services]**
- Add generate/create modes for Vertex AI Memory Bank writes ([811e50a](https://github.com/google/adk-python/commit/811e50a0cbb181d502b9837711431ef78fca3f34))
- Add support for memory consolidation via Vertex AI Memory Bank ([4a88804](https://github.com/google/adk-python/commit/4a88804ec7d17fb4031b238c362f27d240df0a13))
- **[A2A]**
- Add interceptor framework to `A2aAgentExecutor` ([87fcd77](https://github.com/google/adk-python/commit/87fcd77caa9672f219c12e5a0e2ff65cbbaaf6f3))
- **[Auth]**
- Add native support for `id_token` in OAuth2 credentials ([33f7d11](https://github.com/google/adk-python/commit/33f7d118b377b60f998c92944d2673679fddbc6e))
- Support ID token exchange in `ServiceAccountCredentialExchanger` ([7be90db](https://github.com/google/adk-python/commit/7be90db24b41f1830e39ca3d7e15bf4dbfa5a304)), closes [#4458](https://github.com/google/adk-python/issues/4458)
- **[Integrations]**
- Agent Registry in ADK ([abaa929](https://github.com/google/adk-python/commit/abaa92944c4cd43d206e2986d405d4ee07d45afe))
- Add schema auto-upgrade, tool provenance, HITL tracing, and span hierarchy fix to BigQuery Agent Analytics plugin ([4260ef0](https://github.com/google/adk-python/commit/4260ef0c7c37ecdfea295fb0e1a933bb0df78bea))
- Change default BigQuery table ID and update docstring ([7557a92](https://github.com/google/adk-python/commit/7557a929398ec2a1f946500d906cef5a4f86b5d1))
- Update Agent Registry to create AgentCard from info in get agents endpoint ([c33d614](https://github.com/google/adk-python/commit/c33d614004a47d1a74951dd13628fd2300aeb9ef))
- **[Web]**
- Enable dependency injection for agent loader in FastAPI app gen ([34da2d5](https://github.com/google/adk-python/commit/34da2d5b26e82f96f1951334fe974a0444843720))
Bug Fixes
- Add OpenAI strict JSON schema enforcement in LiteLLM ([2dbd1f2](https://github.com/google/adk-python/commit/2dbd1f25bdb1d88a6873d824b81b3dd5243332a4)), closes [#4573](https://github.com/google/adk-python/issues/4573)
- Add push notification config store to agent_to_a2a ([4ca904f](https://github.com/google/adk-python/commit/4ca904f11113c4faa3e17bb4a9662dca1f936e2e)), closes [#4126](https://github.com/google/adk-python/issues/4126)
- Add support for injecting a custom google.genai.Client into Gemini models ([48105b4](https://github.com/google/adk-python/commit/48105b49c5ab8e4719a66e7219f731b2cd293b00)), closes [#2560](https://github.com/google/adk-python/issues/2560)
- Add support for injecting a custom google.genai.Client into Gemini models ([c615757](https://github.com/google/adk-python/commit/c615757ba12093ba4a2ba19bee3f498fef91584c)), closes [#2560](https://github.com/google/adk-python/issues/2560)
- Check both `input_stream` parameter name and its annotation to decide whether it's a streaming tool that accept input stream ([d56cb41](https://github.com/google/adk-python/commit/d56cb4142c5040b6e7d13beb09123b8a59341384))
- **deps:** Increase pydantic lower version to 2.7.0 ([dbd6420](https://github.com/google/adk-python/commit/dbd64207aebea8c5af19830a9a02d4c05d1d9469))
- edit copybara and BUILD config for new adk/integrations folder (added with Agent Registry) ([37d52b4](https://github.com/google/adk-python/commit/37d52b4caf6738437e62fe804103efe4bde363a1))
- Expand add_memory to accept MemoryEntry ([f27a9cf](https://github.com/google/adk-python/commit/f27a9cfb87caecb8d52967c50637ed5ad541cd07))
- Fix pickling lock errors in McpSessionManager ([4e2d615](https://github.com/google/adk-python/commit/4e2d6159ae3552954aaae295fef3e09118502898))
- fix typo in PlanReActPlanner instruction ([6d53d80](https://github.com/google/adk-python/commit/6d53d800d5f6dc5d4a3a75300e34d5a9b0f006f5))
- handle UnicodeDecodeError when loading skills in ADK ([3fbc27f](https://github.com/google/adk-python/commit/3fbc27fa4ddb58b2b69ee1bea1e3a7b2514bd725))
- Improve BigQuery Agent Analytics plugin reliability and code quality ([ea03487](https://github.com/google/adk-python/commit/ea034877ec15eef1be8f9a4be9fcd95446a3dc21))
- Include list of skills in every message and remove list_skills tool from system instruction ([4285f85](https://github.com/google/adk-python/commit/4285f852d54670390b19302ed38306bccc0a7cee))
- Invoke on_tool_error_callback for missing tools in live mode ([e6b601a](https://github.com/google/adk-python/commit/e6b601a2ab71b7e2df0240fd55550dca1eba8397))
- Keep query params embedded in OpenAPI paths when using httpx ([ffbcc0a](https://github.com/google/adk-python/commit/ffbcc0a626deb24fe38eab402b3d6ace484115df)), closes [#4555](https://github.com/google/adk-python/issues/4555)
- Only relay the LiveRequest after tools is invoked ([b53bc55](https://github.com/google/adk-python/commit/b53bc555cceaa11dc53b42c9ca1d650592fb4365))
- Parallelize tool resolution in LlmAgent.canonical_tools() ([7478bda](https://github.com/google/adk-python/commit/7478bdaa9817b0285b4119e8c739d7520373f719))
- race condition in table creation for `DatabaseSessionService` ([fbe9ecc](https://github.com/google/adk-python/commit/fbe9eccd05e628daa67059ba2e6a0d03966b240d))
- Re-export DEFAULT_SKILL_SYSTEM_INSTRUCTION to skills and skill/prompt.py to avoid breaking current users ([40ec134](https://github.com/google/adk-python/commit/40ec1343c2708e1cf0d39cd8b8a96f3729f843de))
- Refactor LiteLLM streaming response parsing for compatibility with LiteLLM 1.81+ ([e8019b1](https://github.com/google/adk-python/commit/e8019b1b1b0b43dcc5fa23075942b31db502ffdd)), closes [#4225](https://github.com/google/adk-python/issues/4225)
- remove duplicate session GET when using API server, unbreak auto_session_create when using API server ([445dc18](https://github.com/google/adk-python/commit/445dc189e915ce5198e822ad7fadd6bb0880a95e))
- Remove experimental decorators from user persona data models ([eccdf6d](https://github.com/google/adk-python/commit/eccdf6d01e70c37a1e5aa47c40d74469580365d2))
- Replace the global DEFAULT_USER_PERSONA_REGISTRY with a function call to get_default_persona_registry ([2703613](https://github.com/google/adk-python/commit/2703613572a38bf4f9e25569be2ee678dc91b5b5))
- **skill:** coloate default skill SI with skilltoolset ([fc1f1db](https://github.com/google/adk-python/commit/fc1f1db00562a79cd6c742cfd00f6267295c29a8))
- Update agent_engine_sandbox_code_executor in ADK ([ee8d956](https://github.com/google/adk-python/commit/ee8d956413473d1bbbb025a470ad882c1487d8b8))
- Update agent_engine_sandbox_code_executor in ADK ([dab80e4](https://github.com/google/adk-python/commit/dab80e4a8f3c5476f731335724bff5df3e6f3650))
- Update sample skills agent to use weather-skill instead of weather_skill ([8f54281](https://github.com/google/adk-python/commit/8f5428150d18ed732b66379c0acb806a9121c3cb))
- update Spanner query tools to async functions ([1dbcecc](https://github.com/google/adk-python/commit/1dbceccf36c28d693b0982b531a99877a3e75169))
- use correct msg_out/msg_err keys for Agent Engine sandbox output ([b1e33a9](https://github.com/google/adk-python/commit/b1e33a90b4ba716d717e0488b84892b8a7f42aac))
- Validate session before streaming instead of eagerly advancing the runner generator ([ab32f33](https://github.com/google/adk-python/commit/ab32f33e7418d452e65cf6f5b6cbfe1371600323))
- **web:** allow session resume without new message ([30b2ed3](https://github.com/google/adk-python/commit/30b2ed3ef8ee6d3633743c0db00533683d3342d8))
Code Refactoring
- Extract reusable function for building agent transfer instructions ([e1e0d63](https://github.com/google/adk-python/commit/e1e0d6361675e7b9a2c9b2523e3a72e2e5e7ce05))
- Extract reusable private methods ([976a238](https://github.com/google/adk-python/commit/976a238544330528b4f9f4bea6c4e75ec13b33e1))
- Extract reusable private methods ([42eeaef](https://github.com/google/adk-python/commit/42eeaef2b34c860f126c79c552435458614255ad))
- Extract reusable private methods ([706f9fe](https://github.com/google/adk-python/commit/706f9fe74db0197e19790ca542d372ce46d0ae87))
Documentation
- add `thinking_config` in `generate_content_config` in example agent ([c6b1c74](https://github.com/google/adk-python/commit/c6b1c74321faf62cc52d2518eb9ea0dcef050cde))
Bug Fixes
- Fix pickling lock errors in McpSessionManager ([4e2d615](https://github.com/google/adk-python/commit/4e2d6159ae3552954aaae295fef3e09118502898))
Features
- **[Core]**
- Add a demo for the simple prompt optimizer for the optimization interface ([0abf4cd](https://github.com/google/adk-python/commit/0abf4cd2c7103a071506c9398455a3bd66fe5da5))
- Add `--auto_create_session` flag to `adk api_server` CLI ([40c15d0](https://github.com/google/adk-python/commit/40c15d059599472b40f48272a464eb3cb7345fc6))
- Add `add_events_to_memory` facade for event-delta ([59e8897](https://github.com/google/adk-python/commit/59e88972ae4f10274444593db0607f40cfcc597e))
- Add post-invocation token-threshold compaction with event retention ([a88e864](https://github.com/google/adk-python/commit/a88e8647558a9b9d0bfdf38d2d8de058e3ba0596))
- Add report generation to `adk conformance test` command ([43c437e](https://github.com/google/adk-python/commit/43c437e38b9109b68a81de886d1901e4d8f87a01))
- **[Models]**
- Add base_url option to Gemini LLM class ([781f605](https://github.com/google/adk-python/commit/781f605a1e5de6d77b69d7e7b9835ec6fc8de4bf))
- **[Tools]**
- Enhance google credentials config to support externally passed access token ([3cf43e3](https://github.com/google/adk-python/commit/3cf43e3842d9987499ea70d6f63d6e1c4d4a07db))
- Update agent simulator by improving prompts and add environment data ([7af1858](https://github.com/google/adk-python/commit/7af1858f46b66fa4471c5ba7943385f2d23d08d3))
- Add a load MCP resource tool ([e25227d](https://github.com/google/adk-python/commit/e25227da5e91a8c1192af709f8e8bb2a471ded92))
- Add SkillToolset to adk ([8d02792](https://github.com/google/adk-python/commit/8d0279251ce4fad6f0c84bd7777eb5a74f7ba07a))
- **[Web]**
- Add `/health` and `/version` endpoints to ADK web server ([25ec2c6](https://github.com/google/adk-python/commit/25ec2c6b614cf8d185ff6dbdac5697a210be68da))
Bug Fixes
- Use async iteration for VertexAiSessionService.list_sessions pagination ([758d337](https://github.com/google/adk-python/commit/758d337c76d877e3174c35f06551cc9beb1def06))
- Fix event loop closed bug in McpSessionManager ([4aa4751](https://github.com/google/adk-python/commit/4aa475145f196fb35fe97290dd9f928548bc737f))
- Preserve thought_signature in function call conversions for interactions API integration ([2010569](https://github.com/google/adk-python/commit/20105690100d9c2f69c061ac08be5e94c50dc39c))
- Propagate grounding and citation metadata in streaming responses ([e6da417](https://github.com/google/adk-python/commit/e6da4172924ecc36ffc2535199c450a2a51c7bcc))
- Add endpoints to get/list artifact version metadata ([e0b9712](https://github.com/google/adk-python/commit/e0b9712a492bf84ac17679095b333642a79b8ee6))
- Support escaped curly braces in instruction templates ([7c7d25a](https://github.com/google/adk-python/commit/7c7d25a4a6e4389e23037e70b8efdcd5341f44ea))
- Strip timezone for PostgreSQL timestamps in DatabaseSessionService ([19b6076](https://github.com/google/adk-python/commit/19b607684f15ce2b6ffd60382211ba5600705743))
- Prompt token may be None in streaming mode ([32ee07d](https://github.com/google/adk-python/commit/32ee07df01f10dbee0e98ca9d412440a7fe9163d))
- Pass invocation_id from `/run` endpoint to `Runner.run_async` ([d2dba27](https://github.com/google/adk-python/commit/d2dba27134f833e5d929fdf363ada9364cc852f9))
- Conditionally preserve function call IDs in LLM requests ([663cb75](https://github.com/google/adk-python/commit/663cb75b3288d8d0649412e1009329502b21cbbc))
- Migrate VertexAiMemoryBankService to use the async Vertex AI client ([64a44c2](https://github.com/google/adk-python/commit/64a44c28974de77cf8934f9c3d1bc03691b90e7b))
- Handle list values in Gemini schema sanitization ([fd8a9e3](https://github.com/google/adk-python/commit/fd8a9e3962cca4f422beb7316cbe732edf726d51))
- Used logger to log instead of print in MCP ([6bc70a6](https://github.com/google/adk-python/commit/6bc70a6bab79b679a4b18ad146b3450fb9014475))
Improvements
- Replace check of instance for LlmAgent with hasAttribute check ([7110336](https://github.com/google/adk-python/commit/7110336788662abb8c9bbbb0a53a50cc09130d5e))
- Log exception details before re-raising in MCP session execution ([de79bf1](https://github.com/google/adk-python/commit/de79bf12b564a4eefc7e6a2568dbe0f08bb6efeb))
Bug Fixes
- Add back deprecated eval endpoint for web until we migrate([ae993e8](https://github.com/google/adk-python/commit/ae993e884f44db276a4116ebb7a11a2fb586dbfe))
- Update eval dialog colors, and fix a2ui component types ([3686a3a](https://github.com/google/adk-python/commit/3686a3a98f46738549cd7a999f3773b7a6fd1182))
⚠ BREAKING CHANGES
- Breaking: Make credential manager accept `tool_context` instead of `callback_context` ([fe82f3c](https://github.com/google/adk-python/commit/fe82f3cde854e49be13d90b4c02d786d82f8a202))
Highlights
- **[Web]**
- **Consolidated Event View**: Replaced the Event tab with a more intuitive "click-to-expand" interaction on message rows, enabling faster debugging within the chat context
- **Enhanced Accessibility**: Added full support for arrow-key navigation for a more seamless, keyboard-centric experience
- **Rich Developer Tooling**: Introduced detailed tooltips for function calls, providing instant visibility into arguments, responses, and state changes
- **A2UI Integration**: Integrated the **A2UI v0.8** standard catalog to automatically render spec-compliant ADK parts as native UI components directly in the chat
Features
- **[Core]**
- Allow passthrough of `GOOGLE_CLOUD_LOCATION` for Agent Engine deployments ([004e15c](https://github.com/google/adk-python/commit/004e15ccb7c7f683623f8e7d2e77a9d12558c545))
- Add interface for agent optimizers ([4ee125a](https://github.com/google/adk-python/commit/4ee125a03856fdb9ed28245bf7f5917c2d9038db))
- Pass event ID as metadata when converted into a message ([85434e2](https://github.com/google/adk-python/commit/85434e293f7bd1e3711f190f84d5a36804e4462b))
- Restructure the bug report template as per the intake process ([324796b](https://github.com/google/adk-python/commit/324796b4fe05bec3379bfef67071a29552ef355a))
- **[Models]**
- Mark Vertex calls made from non-Gemini models ([7d58e0d](https://github.com/google/adk-python/commit/7d58e0d2f375bc80bdfac9cffea2926fd2344b8a))
- **[Evals]**
- Allow Vertex AI Client initialization with API Key ([43d6075](https://github.com/google/adk-python/commit/43d6075ea7aa49ddb358732f2219ca9598dd286f))
- Remove overall evaluation status calculation from `_CustomMetricEvaluator` and add threshold to custom metric function expected signature ([553e376](https://github.com/google/adk-python/commit/553e376718ceb3d7fb1403231bb720836d71f42c))
- **[Tools]**
- Make OpenAPI tool asynchronous ([9290b96](https://github.com/google/adk-python/commit/9290b966267dc02569786f95aab2a3cb78c7004f))
- Implement toolset authentication for `McpToolset`, `OpenAPIToolset`, and other toolsets ([798f65d](https://github.com/google/adk-python/commit/798f65df86b1bbe33d864e30c5b1f9e155e89810))
- Add framework support for toolset authentication before `get_tools` calls ([ee873ca](https://github.com/google/adk-python/commit/ee873cae2e2df960910d264a4340ce6c0489eb7a))
- Support dynamic configuration for `VertexAiSearchTool` ([585ebfd](https://github.com/google/adk-python/commit/585ebfdac7f1b8007b4e4a7e4258ec5de72c78b1))
- Add `get_auth_config` method to toolset to expose authentication requirements ([381d44c](https://github.com/google/adk-python/commit/381d44cab437cac027af181ae627e7b260b7561e))
- Add methods in `McpToolset` for users to access MCP resources ([8f7d965](https://github.com/google/adk-python/commit/8f7d9659cfc19034af29952fbca765d012169b38))
- Improve error message when failing to get tools from MCP ([3480b3b](https://github.com/google/adk-python/commit/3480b3b82d89de69f77637d7ad034827434df45a))
- **[Services]**
- Improve `asyncio` loop handling and test cleanup ([00aba2d](https://github.com/google/adk-python/commit/00aba2d884d24fb5244d1de84f8dba9cbc3c07e8))
- **[Live]**
- Support running tools in separate threads for live mode ([714c3ad](https://github.com/google/adk-python/commit/714c3ad0477e775fba6696a919a366a293197268))
- **[Observability]**
- Add extra attributes to spans generated with `opentelemetry-instrumentation-google-genai` ([e87a843](https://github.com/google/adk-python/commit/e87a8437fb430e0d4c42c73948e3ba1872040a15))
Bug Fixes
- Ignore `session_db_kwargs` for SQLite session services ([ce07cd8](https://github.com/google/adk-python/commit/ce07cd8144c8498434f68e61ebeb519bf329f778))
- Resolve `MutualTLSChannelError` by adding `pyopenssl` dependency ([125bc85](https://github.com/google/adk-python/commit/125bc85ac5e1400bc38f7c681f76fa82626c9911))
- Add `update_timestamp_tz` property to `StorageSession` ([666cebe](https://github.com/google/adk-python/commit/666cebe3693d2981fd5fea6e9e4c65e56dcd3f2b))
- Do not treat Function Calls and Function Responses as invisible when marked as thoughts ([853a3b0](https://github.com/google/adk-python/commit/853a3b0e143ce27516f0de51e0e0df2af6ecf465))
- Add pre-deployment validation for agent module imports (credit to @ppgranger, [2ac468e](https://github.com/google/adk-python/commit/2ac468ea7e30ef30c1324ffc86f67dbf32ab7ede))
- Fix cases where `execution_result_delimiters` have `None` type element ([a16e3cc](https://github.com/google/adk-python/commit/a16e3cc67e1cb391228ba78662547672404ae550))
- Disable `save_input_blobs_as_artifacts` deprecation warning message for users not setting it ([c34615e](https://github.com/google/adk-python/commit/c34615ecf3c7bbe0f4275f72543774f258c565b4))
- Fix agent config path handling in generated deployment script ([8012339](https://github.com/google/adk-python/commit/801233902bbd6c0cca63b6fc8c1b0b2531f3f11e))
- Add `pypika>=0.50.0` to `project.toml` to support `crewai` on Python 3.12+ ([e8f7aa3](https://github.com/google/adk-python/commit/e8f7aa3140d2585ac38ebfe31c5b650383499a20))
- Update OpenTelemetry dependency versions to relax version constraints for `opentelemetry-api` and `opentelemetry-sdk` ([706a6dd](https://github.com/google/adk-python/commit/706a6dda8144da147bd9fa42ef85bbfa58fec5d3))
- Enable `pool_pre_ping` by default for non-SQLite database engines ([da73e71](https://github.com/google/adk-python/commit/da73e718efa9557ed33e2fb579de68fcbcf4c7f0))
- Ensure database sessions are always rolled back on errors ([63a8eba](https://github.com/google/adk-python/commit/63a8eba53f2cb07625eb7cd111ff767e8e0030fa))
- Reload stale session in `DatabaseSessionService` when storage update time is later than the in-memory session object ([1063fa5](https://github.com/google/adk-python/commit/1063fa532cad59d8e9f7421ce2f523724d49d541))
- Make credential key generation stable and prevent cross-user credential leaks ([33012e6](https://github.com/google/adk-python/commit/33012e6dda9ef20c7a1dae66a84717de5d782097))
- Change MCP `read_resource` to return original contents ([ecce7e5](https://github.com/google/adk-python/commit/ecce7e54a688a915a1b9d742c39e4684186729be))
- Recognize function responses as non-empty parts in LiteLLM ([d0102ec](https://github.com/google/adk-python/commit/d0102ecea331e062190dbb7578a4ef7f4044306e))
- Handle HTTP/HTTPS URLs for media files in LiteLLM content conversion ([47221cd](https://github.com/google/adk-python/commit/47221cd5c1e778cd4b92ed8d382c639435f5728c))
- Fix Pydantic schema generation error for `ClientSession` ([131fbd3](https://github.com/google/adk-python/commit/131fbd39482980572487a30fea13236d2badd543))
- Fix Click’s Wrapping in `adk eval` help message ([3bcd8f7](https://github.com/google/adk-python/commit/3bcd8f7f7a0683f838005bc209f7d39dc93f850b))
- Stream errors as simple JSON objects in ADK web server SSE endpoint ([798d005](https://github.com/google/adk-python/commit/798d0053c832e7ed52e2e104f8a14f789ba8b17f))
- Remove print debugging artifact ([0d38a36](https://github.com/google/adk-python/commit/0d38a3683f13bc12dc5d181164b6cd5d72fc260c))
Improvements
- Check `will_continue` for streaming function calls ([2220d88](https://github.com/google/adk-python/commit/2220d885cda875144b52338b5becf6e5546f3f51))
- Update ADK web, rework events, and add A2UI capabilities ([37e6507](https://github.com/google/adk-python/commit/37e6507ce4d8750100d914eb1a62014350ef1795))
- Improve error handling for LiteLLM import in `gemma_llm.py` ([574ec43](https://github.com/google/adk-python/commit/574ec43a175e3bf3a05e73114e8db7196fae7040))
- Replace proxy methods with utils implementation ([6ff10b2](https://github.com/google/adk-python/commit/6ff10b23be01c1f7dd79d13ac8c679c079140f76), [f82ceb0](https://github.com/google/adk-python/commit/f82ceb0ce75d3efed7c046835ddac76c28210013))
- Replace print statements with logging in ADK evaluation components ([dd8cd27](https://github.com/google/adk-python/commit/dd8cd27b2ce505ecca50cdfbb1469db01c82b0af))
- Add sample agent that requires OAuth flow during MCP tool listing, and convert `MCPToolset` to `McpToolset` in unit tests ([2770012](https://github.com/google/adk-python/commit/2770012cecdfc71628a818a75b21faabe828b4e5), [4341839](https://github.com/google/adk-python/commit/43418394202c2d01b0d37f6424bd601148077e27))
- Ensure `BigQueryAgentAnalyticsPlugin` is shut down after each test ([c0c98d9](https://github.com/google/adk-python/commit/c0c98d94b3161d6bf9fff731e0abfc985b53e653))
- Add ADK logger in `RestApiTool` ([288c2c4](https://github.com/google/adk-python/commit/288c2c448d77c574dafadf7851a49e6ff59fa7f4))
- Add GitHub Action check to run `mypy` ([32f9f92](https://github.com/google/adk-python/commit/32f9f92042ab530220ac9d159045c91d311affa7))
- Add `unittests.sh` script and update `CONTRIBUTING.md` ([025b42c](https://github.com/google/adk-python/commit/025b42c8361ad2078593e3e7fc5301df88a532c7))
- Extract helper function for LLM request building and response processing ([753084f](https://github.com/google/adk-python/commit/753084fd46c9637488f33b0a05b4d270f6e03a39))
⚠ BREAKING CHANGES
- Breaking: Use OpenTelemetry for BigQuery plugin tracing, replacing custom `ContextVar` implementation ([ab89d12](https://github.com/google/adk-python/commit/ab89d1283430041afb303834749869e9ee331721))
Features
- **[Core]**
- Add support to automatically create a session if one does not exist ([8e69a58](https://github.com/google/adk-python/commit/8e69a58df4eadeccbb100b7264bb518a46b61fd7))
- Remove `@experimental` decorator from `AgentEngineSandboxCodeExecutor` ([135f763](https://github.com/google/adk-python/commit/135f7633253f6a415302142abc3579b664601d5b))
- Add `--disable_features` CLI option to override default feature enable state ([53b67ce](https://github.com/google/adk-python/commit/53b67ce6340f3f3f8c3d732f9f7811e445c76359))
- Add `otel_to_cloud` flag to `adk deploy agent_engine` command ([21f63f6](https://github.com/google/adk-python/commit/21f63f66ee424501d9a70806277463ef718ae843))
- Add `is_computer_use` field to agent information in `adk-web` server ([5923da7](https://github.com/google/adk-python/commit/5923da786eb1aaef6f0bcbc6adc906cbc8bf9b36))
- Allow `thinking_config` in `generate_content_config` ([e162bb8](https://github.com/google/adk-python/commit/e162bb8832a806e2380048e39165bf837455f88c))
- Convert A2UI messages between A2A `DataPart` metadata and ADK events ([1133ce2](https://github.com/google/adk-python/commit/1133ce219c5a7a9a85222b03e348ba6b13830c8f))
- Add `--enable_features` CLI option to override default feature enable state ([79fcddb](https://github.com/google/adk-python/commit/79fcddb39f71a4c1342e63b4d67832b3eccb2652))
- **[Tools]**
- Add flush mechanism to `BigQueryAgentAnalyticsPlugin` to ensure pending log events are written to BigQuery ([9579bea](https://github.com/google/adk-python/commit/9579bea05d946b3d8b4bfec35e510725dd371224))
- Allow Google Search tool to set a different model ([b57a3d4](https://github.com/google/adk-python/commit/b57a3d43e4656f5a3c5db53addff02b67d1fde26))
- Support authentication for MCP tool listing ([e3d542a](https://github.com/google/adk-python/commit/e3d542a5ba3d357407f8cd29cfdd722f583c8564) [19315fe](https://github.com/google/adk-python/commit/19315fe557039fa8bf446525a4830b1c9f40cba9))
- Use JSON schema for `base_retrieval_tool`, `load_artifacts_tool`, and `load_memory_tool` declarations when the feature is enabled ([69ad605](https://github.com/google/adk-python/commit/69ad605bc4bbe9a4f018127fd3625169ee70488e))
- Use JSON schema for `IntegrationConnectorTool` declaration when the feature is enabled ([2ed6865](https://github.com/google/adk-python/commit/2ed686527ac75ff64128ce7d9b1a3befc2b37c64))
- Start and close `ClientSession` in a single task in `McpSessionManager` ([cce430d](https://github.com/google/adk-python/commit/cce430da799766686e65f6cae02ba64e916d5c8a))
- Use JSON schema for `RestApiTool` declaration when the feature is enabled ([a5f0d33](https://github.com/google/adk-python/commit/a5f0d333d7f26f2966ed511d5d9def7a1933f0c2))
- **[Evals]**
- Update `adk eval` CLI to consume custom metrics by adding `CustomMetricEvaluator` ([ea0934b](https://github.com/google/adk-python/commit/ea0934b9934c1fefd129a1026d6af369f126870e))
- Update `EvalConfig` and `EvalMetric` data models to support custom metrics ([6d2f33a](https://github.com/google/adk-python/commit/6d2f33a59cfba358dd758378290125fc2701c411))
- **[Observability]**
- Add minimal `generate_content {model.name}` spans and logs for non-Gemini inference and when `opentelemetry-inference-google-genai` dependency is missing ([935c279](https://github.com/google/adk-python/commit/935c279f8281bde99224f03d936b8abe51cbabfc))
- **[Integrations]**
- Enhance `TraceManager` asynchronous safety, enrich BigQuery plugin logging, and fix serialization ([a4116a6](https://github.com/google/adk-python/commit/a4116a6cbfadc161982af5dabd55a711d79348b7))
- **[Live]**
- Persist user input content to session in live mode ([a04828d](https://github.com/google/adk-python/commit/a04828dd8a848482acbd48acc7da432d0d2cb0aa))
Bug Fixes
- Recursively extract input/output schema for AgentTool ([bf2b56d](https://github.com/google/adk-python/commit/bf2b56de6d0052e40b6d871b2d22c56e9225e145))
- Yield buffered `function_call` and `function_response` events during live streaming ([7b25b8f](https://github.com/google/adk-python/commit/7b25b8fb1daf54d7694bf405d545d46d2c012d2b))
- Update `authlib` and `mcp` dependency versions ([7955177](https://github.com/google/adk-python/commit/7955177fb28b8e5dc19aae8be94015a7b5d9882a))
- Set `LITELLM_MODE` to `PRODUCTION` before importing LiteLLM to prevent implicit `.env` file loading ([215c2f5](https://github.com/google/adk-python/commit/215c2f506e21a3d8c39551b80f6356943ecae320))
- Redact sensitive information from URIs in logs ([5257869](https://github.com/google/adk-python/commit/5257869d91a77ebd1381538a85e7fdc3a600da90))
- Handle asynchronous driver URLs in the migration tool ([4b29d15](https://github.com/google/adk-python/commit/4b29d15b3e5df65f3503daffa6bc7af85159507b))
- Remove custom metadata from A2A response events ([81eaeb5](https://github.com/google/adk-python/commit/81eaeb5eba6d40cde0cf6147d96921ed1bf7bb31))
- Handle `None` inferences in eval results ([7d4326c](https://github.com/google/adk-python/commit/7d4326c3606a7ff2ba3c0fdef08d4f6af52ee71e))
- Mark all parts of a thought event as thought ([f92d4e3](https://github.com/google/adk-python/commit/f92d4e397f37445fe9032a95ce26646a3a69300b))
- Use `json.dumps` for error messages in SSE events ([6ad18cc](https://github.com/google/adk-python/commit/6ad18cc2fc3a3315a0fc240cb51b3283b53116b4))
- Use the correct path for config-based agents when deploying to AgentEngine ([83d7bb6](https://github.com/google/adk-python/commit/83d7bb6ef0d952ad04c5d9a61aaf202672c7e17d))
- Support Generator and Async Generator tool declarations in JSON schema ([19555e7](https://github.com/google/adk-python/commit/19555e7dce6d60c3b960ca0bc2f928c138ac3cc0) [7c28297](https://github.com/google/adk-python/commit/7c282973ea193841fee79f90b8a91c5e02627ccc))
- Prevent stopping event processing on events with `None` content ([ed2c3eb](https://github.com/google/adk-python/commit/ed2c3ebde9cafbb5e2bf375f44db1e77cee9fb24))
- Fix `'NoneType'` object is not iterable error ([7db3ce9](https://github.com/google/adk-python/commit/7db3ce9613b1c2c97e6ca3cd8115736516dc1556))
- Use canonical tools to find streaming tools and register them by `tool.name` ([ec6abf4](https://github.com/google/adk-python/commit/ec6abf401019c39e8e1a8d1b2c7d5cf5e8c7ac56))
- Initialize `self._auth_config` inside `BaseAuthenticatedTool` to access authentication headers in `McpTool` ([d4da1bb](https://github.com/google/adk-python/commit/d4da1bb7330cdb87c1dcbe0b9023148357a6bd07))
- Only filter out audio content when sending history ([712b5a3](https://github.com/google/adk-python/commit/712b5a393d44e7b5ce35fc459da98361bae4bb16))
- Add finish reason mapping and remove custom file URI handling in LiteLLM ([89bed43](https://github.com/google/adk-python/commit/89bed43f5e0c5ad12dd31c716d372145b7e33e78))
- Convert unsupported inline artifact MIME types to text in `LoadArtifactsTool` ([fdc98d5](https://github.com/google/adk-python/commit/fdc98d5c927bfef021e87cf72103892e4c2ac12a))
- Pass `log_level` to `uvicorn` in `web` and `api_server` commands ([38d52b2](https://github.com/google/adk-python/commit/38d52b247600fb45a2beeb041c4698e90c00d705))
- Use the agent name as the author of the audio event ([ab62b1b](https://github.com/google/adk-python/commit/ab62b1bffd7ad2df5809d430ad1823872b8bd67a))
- Handle `NOT_FOUND` error when fetching Vertex AI sessions ([75231a3](https://github.com/google/adk-python/commit/75231a30f1857d930804769caf88bcc20839dd08))
- Fix `httpx` client closure during event pagination ([b725045](https://github.com/google/adk-python/commit/b725045e5a1192bc9fd5190cbd2758ab6ff02590))
Improvements
- Add new conversational analytics API toolset ([82fa10b](https://github.com/google/adk-python/commit/82fa10b71e037b565cb407c82e9e908432dab0ff))
- Filter out `adk_request_input` event from content list ([295b345](https://github.com/google/adk-python/commit/295b34558774d1f64022009980e3edd8eb79527b))
- Always skip executing partial function calls ([d62f9c8](https://github.com/google/adk-python/commit/d62f9c896c301aba3a781e868735e16f946a8862))
- Update comments of request confirmation preprocessor ([1699b09](https://github.com/google/adk-python/commit/1699b090edc9e5b13c34f461c8e664187157c5c0))
- Fix various typos ([a8f2ddd](https://github.com/google/adk-python/commit/a8f2ddd943301bbf53f49b3a23300ece45803cc0))
- Update sample live streaming tools agent to use latest live models ([3dd7e3f](https://github.com/google/adk-python/commit/3dd7e3f1b9be05c28adb061864d84c4202a2d922))
- Make the regex to catch CLI reference strict by adding word boundary anchor ([c222a45](https://github.com/google/adk-python/commit/c222a45ef74f7b55c48dc151ba98cd8c30a15c57))
- Migrate `ToolboxToolset` to use `toolbox-adk` and align validation ([7dc6adf](https://github.com/google/adk-python/commit/7dc6adf4e563330a09e4cf28d2b1994c24b007d1) [277084e](https://github.com/google/adk-python/commit/277084e31368302e6338b69d456affd35d5fedfe))
- Always log API backend when connecting to live model ([7b035aa](https://github.com/google/adk-python/commit/7b035aa9fc43a43489aeffea8f877cd7eaa09f35))
- Add a sample BigQuery agent using BigQuery MCP tools ([672b57f](https://github.com/google/adk-python/commit/672b57f1b76580023d1f348de76227291a9c1012))
- Add a `DebugLoggingPlugin` to record human-readable debugging logs ([8973618](https://github.com/google/adk-python/commit/8973618b0b0e90c513873e22af272c147efb4904))
- Upgrade the sample BigQuery agent model version to `gemini-2.5-flash` ([fd2c0f5](https://github.com/google/adk-python/commit/fd2c0f556b786417a9f6add744827b07e7a06b7d))
- Import `migration_runner` lazily within the migrate command ([905604f](https://github.com/google/adk-python/commit/905604faac82aca8ae0935eebea288f82985e9c5))
Bug Fixes
- Add back `adk migrate session` CLI ([8fb2be2](https://github.com/google/adk-python/commit/8fb2be216f11dabe7fa361a0402e5e6316878ad8)).
- Escape database reserved keyword ([94d48fc](https://github.com/google/adk-python/commit/94d48fce32a1f07cef967d50e82f2b1975b4abd9)).
Features
- **[Core]**
- Make `LlmAgent.model` optional with a default fallback ([b287215](https://github.com/google/adk-python/commit/b28721508a41bf6bcfef52bbc042fb6193a32dfa)).
- Support regex for allowed origins ([2ea6e51](https://github.com/google/adk-python/commit/2ea6e513cff61d3f330274725c66f82fce4ba259)).
- Enable PROGRESSIVE_SSE_STREAMING feature by default ([0b1cff2](https://github.com/google/adk-python/commit/0b1cff2976d1c04acf3863f76107b05d1cec448f)).
- **[Evals]**
- Add custom instructions support to LlmBackedUserSimulator ([a364388](https://github.com/google/adk-python/commit/a364388d9744969760fd87ed24d60793146c162a)).
- Introduce a post-hoc, per-turn evaluator for user simulations ([e515e0f](https://github.com/google/adk-python/commit/e515e0f321a259016c5e5f6b388ecf02ae343ba7)).
- **[Tools]**
- Expose mcps streamable http custom httpx factory parameter ([bfed19c](https://github.com/google/adk-python/commit/bfed19cd78298fc9f896da8ed82a756004e92094)).
- Add a handwritten tool for Cloud Pub/Sub ([b6f6dcb](https://github.com/google/adk-python/commit/b6f6dcbeb465a775b9c38ace7a324ee2155d366f)).
- Add `token_endpoint_auth_method` support to OAuth2 credentials ([8782a69](https://github.com/google/adk-python/commit/8782a695036aa0c1528027673868159143f925f0)).
- **[Services]**
- Introduce new JSON-based database schema for DatabaseSessionService, which will be used for newly-created databases. A migration command and script are provided.([7e6ef71](https://github.com/google/adk-python/commit/7e6ef71eec8be2e804286cc4140d0cbdf84f1206) [ba91fea](https://github.com/google/adk-python/commit/ba91fea54136ab60f37c10b899c3648d0b0fa721) [ce64787](https://github.com/google/adk-python/commit/ce64787c3e1130d1678e408aa31011fc88590e15)).
- Set log level when deploying to Agent Engine ([1f546df](https://github.com/google/adk-python/commit/1f546df35a1c18aeb3d2fc7a2ac66edf386027c5)).
- **[A2A]**
- Update event_converter used in A2ARemote agent to use a2a_task.status.message only if parts are non-empty ([e4ee9d7](https://github.com/google/adk-python/commit/e4ee9d7c46b57eed8493539d8f539c042bdfae60)).
Bug Fixes
- Add checks for event content and parts before accessing ([5912835](https://github.com/google/adk-python/commit/5912835c975673c8fc2fb315150f5ec29d685eac)).
- Validate app name in `adk create` command ([742c926](https://github.com/google/adk-python/commit/742c9265a260a9c598a1f65e0996d926b4b9c022)).
- Prevent .env files from overriding existing environment variables ([0827d12](https://github.com/google/adk-python/commit/0827d12ccd74feb24758f64f2884c9493001b4ca)).
- Prevent ContextFilterPlugin from creating orphaned function responses ([e32f017](https://github.com/google/adk-python/commit/e32f017979e26a94b998311cafcde753fd29e44e)).
- Update empty event check to include executable code and execution results ([688f48f](https://github.com/google/adk-python/commit/688f48fffb9df6ef18a692cd2ccaa7628f4c82a7)).
- Make the BigQuery analytics plugin work with agents that don't have instructions such as the LoopAgent ([8bed01c](https://github.com/google/adk-python/commit/8bed01cbdc5961c0d219fd6389f492f1a4235de5)).
- Label response as thought if task is immediately returned as working ([4f3b733](https://github.com/google/adk-python/commit/4f3b733074c867e68ca5d38720ccb1f3e0b0d960)).
- Move and enhance the deprecation warning for the plugins argument in "_validate_runner_params" to the beginning of the function ([43270bc](https://github.com/google/adk-python/commit/43270bcb6197526ba5765f83d7e4fb88f213b8d3)).
- Oauth refresh not triggered on token expiry ([69997cd](https://github.com/google/adk-python/commit/69997cd5ef44ee881a974bb36dc100e17ed6de2e)).
- Fix double JSON encoding when saving eval set results ([fc4e3d6](https://github.com/google/adk-python/commit/fc4e3d6f607032259e68e91bcb1ad0815a03164e)).
- Allow string values for ToolTrajectoryCriterion.match_type ([93d6e4c](https://github.com/google/adk-python/commit/93d6e4c888d5a2181e3c22da049d8be0d6ead70c)).
- Fix inconsistent method signatures for evaluate_invocations ([0918b64](https://github.com/google/adk-python/commit/0918b647df6f88b95974d486a3161121a6514901)).
- Honor the modalities parameter in adk api server for live API ([19de45b](https://github.com/google/adk-python/commit/19de45b3250d09b9ec16c45788e7d472b3e588c2)).
- Filter out thought parts in lite_llm._get_content ([1ace8fc](https://github.com/google/adk-python/commit/1ace8fc6780bc25e2ef4222c73bc2558082b0a00)).
- Rehydration of EventActions in StorageEvent.to_event ([838530e](https://github.com/google/adk-python/commit/838530ebe053e5193d4329c5a203ca3d096ff7be)).
- Heal missing tool results before LiteLLM requests ([6b7386b](https://github.com/google/adk-python/commit/6b7386b7620bbc51cda8c1c6d9914549536640e6)).
- Refine Ollama content flattening and provider checks ([c6f389d](https://github.com/google/adk-python/commit/c6f389d4bc4d2b91795003a3bd87ed1f1b854493)).
- Add MIME type inference and default for file URIs in LiteLLM ([5c4bae7](https://github.com/google/adk-python/commit/5c4bae7ff2085c05b7f002f5fa368e9b48a752b1)).
- Use mode='json' in model_dump to serialize bytes correctly when using telemetry ([96c5db5](https://github.com/google/adk-python/commit/96c5db5a07f7f851751ccd68f176dad1634885cb)).
- Avoid local .adk storage in Cloud Run/GKE ([b30c2f4](https://github.com/google/adk-python/commit/b30c2f4e139e0d4410c5f8dd61acee2056ad06ea)).
- Remove fallback to cached exchanged credential in _load_existing_credential ([1ae0e16](https://github.com/google/adk-python/commit/1ae0e16b2c1a3139b9c2b1c4a3e725833a6240be)).
- Handle overriding of requirements when deploying to agent engine ([38a30a4](https://github.com/google/adk-python/commit/38a30a44d222fade8616f9d63410b1c2b6f84e1b)).
- Built-in agents (names starting with "__") now use in-memory session storage instead of creating .adk folders in the agents directory ([e3bac1a](https://github.com/google/adk-python/commit/e3bac1ab8c724454fb433cc7e78416b61efe33ee)).
- Change error_message column type to TEXT in DatabaseSessionService ([8335f35](https://github.com/google/adk-python/commit/8335f35015c7d4349bc4ac47dedbe99663b78e62)).
- Add schema type sanitization to OpenAPI spec parser ([6dce7f8](https://github.com/google/adk-python/commit/6dce7f8a8f28de275b1119fc03219f1468bb883b)).
- Prevent retry_on_errors from retrying asyncio.CancelledError ([30d3411](https://github.com/google/adk-python/commit/30d3411d603f12ca5bcdd2d71773d087f3191dba)).
- Include back-ticks around the BQ asset names in the tools examples ([8789ad8](https://github.com/google/adk-python/commit/8789ad8f16dfa250fab607946250a2857a25d5ef)).
- Fix issue with MCP tools throwing an error ([26e77e1](https://github.com/google/adk-python/commit/26e77e16947aed1abcfdd7f526532a708f1f073b)).
- Exclude thought parts when merging agent output ([07bb164](https://github.com/google/adk-python/commit/07bb1647588a781e701257c4c379736537029ea0)).
- Prepend "https://" to the MCP server url only if it doesn't already have a scheme ([71b3289](https://github.com/google/adk-python/commit/71b32890f5ab279e2bed1fd28c0f4693cba3f45e)).
- Split SSE events with both content and artifactDelta in ADK Web Server ([084fcfa](https://github.com/google/adk-python/commit/084fcfaba52c4a6075397221dbe7aba2f2acd2d7)).
- Propagate RunConfig custom metadata to all events ([e3db2d0](https://github.com/google/adk-python/commit/e3db2d0d8301748c63bad826f24692448dbd1c2c)).
- Harden YAML builder tmp save/cleanup([6f259f0](https://github.com/google/adk-python/commit/6f259f08b3c45ad6050b8a93c9bd85913451ece6)).
- Ignore adk-bot administrative actions in stale agent ([3ec7ae3](https://github.com/google/adk-python/commit/3ec7ae3b8d532ed4b60786201a78e980dfc56cf3)).
- Only prepend "https://" to the MCP server url if it doesn't already have a scheme ([71b3289](https://github.com/google/adk-python/commit/71b32890f5ab279e2bed1fd28c0f4693cba3f45e)).
- Check all content parts for emptiness in _contains_empty_content ([f35d129](https://github.com/google/adk-python/commit/f35d129b4c59d381e95418725d6eaa072ca7720a)).
Improvements
- Remove unnecessary event loop creation in LiveRequstQueue constructor ([ecc9f18](https://github.com/google/adk-python/commit/ecc9f182e3bd25ee8eda8920d665e967517ca59a)).
- Close database engines to avoid aiosqlite pytest hangs ([4ddb2cb](https://github.com/google/adk-python/commit/4ddb2cb2a8d1d026a43418b2dd698e6ea199594e)).
- Add `override_feature_enabled` to override the default feature enable states ([a088506](https://github.com/google/adk-python/commit/a0885064b0cbef3b25484025da0748dc64320d4a)).
- Move SQLite migration script to migration/ folder ([e8ab7da](https://github.com/google/adk-python/commit/e8ab7dafa96d5890a4fff919b9fa180993ef5830)).
- Update latest Live Model names for sample agent ([f1eb1c0](https://github.com/google/adk-python/commit/f1eb1c0254802ef3aa64c76512e3104376291ec0)).
- Update google-genai and google-cloud-aiplatform versions ([d58ea58](https://github.com/google/adk-python/commit/d58ea589ade822894f1482fd505a33d842755d9c)).
- Introduce MetricInfoProvider interface, and refactor metric evaluators to use this interface to provide MetricInfo ([5b7c8c0](https://github.com/google/adk-python/commit/5b7c8c04d6e4a688c76fa517922488e3d96353a3)).
- Update _flatten_ollama_content return type and add tests ([fcea86f](https://github.com/google/adk-python/commit/fcea86f58c95894bc9c1fb7ed12e36ddedaaa88a)).
- Add disambiguation message to enterprise_search_tool ([8329fec](https://github.com/google/adk-python/commit/8329fec0fc6b6130ffd1f53a8a2e2ccc6e8f43ed)).
- Add x-goog-user-project header to http calls in API Registry ([0088b0f](https://github.com/google/adk-python/commit/0088b0f3adb963dded692929c314d94709dcc211)).
- Set the default response modality to AUDIO only ([a4b914b](https://github.com/google/adk-python/commit/a4b914b09fbab76834050a8c8f0eb335b12cfc34)).
Features
- **[Interactions API Support]**
- The newly released Gemini [Interactions API](https://ai.google.dev/gemini-api/docs/interactions) is supported in ADK Now. To use it:
- **[Services]**
- Add `add_session_to_memory` to `CallbackContext` and `ToolContext` to explicitly save the current session to memory ([7b356dd](https://github.com/google/adk-python/commit/7b356ddc1b1694d2c8a9eee538f3a41cf5518e42))
- **[Plugins]**
- Add location for table in agent events in plugin BigQueryAgentAnalytics ([507424a](https://github.com/google/adk-python/commit/507424acb9aabc697fc64ef2e9a57875f25f0a21))
- Upgrade BigQueryAgentAnalyticsPlugin to v2.0 with improved performance, multimodal support, and reliability ([7b2fe14](https://github.com/google/adk-python/commit/7b2fe14dab96440ee25b66dae9e66eadba629a56))
- **[A2A]**
- Adds ADK EventActions to A2A response ([32e87f6](https://github.com/google/adk-python/commit/32e87f6381ff8905a06a9a43a0207d758a74299d))
- **[Tools]**
- Add `header_provider` to `OpenAPIToolset` and `RestApiTool` ([e1a7593](https://github.com/google/adk-python/commit/e1a7593ae8455d51cdde46f5165410217400d3c9))
- Allow overriding connection template ([cde7f7c](https://github.com/google/adk-python/commit/cde7f7c243a7cdc8c7b886f68be55fd59b1f6d5a))
- Add SSL certificate verification configuration to OpenAPI tools using the `verify` parameter ([9d2388a](https://github.com/google/adk-python/commit/9d2388a46f7a481ea1ec522f33641a06c64394ed))
- Use json schema for function tool declaration when feature enabled ([cb3244b](https://github.com/google/adk-python/commit/cb3244bb58904ab508f77069b436f85b442d3299))
- **[Models]**
- Add Gemma3Ollama model integration and a sample ([e9182e5](https://github.com/google/adk-python/commit/e9182e5eb4a37fb5219fc607cd8f06d7e6982e83))
Bug Fixes
- Install dependencies for py 3.10 ([9cccab4](https://github.com/google/adk-python/commit/9cccab453706138826f313c47118812133e099c4))
- Refactor LiteLLM response schema formatting for different models ([894d8c6](https://github.com/google/adk-python/commit/894d8c6c2652492324c428e8dae68a8646b17485))
- Resolve project and credentials before creating Spanner client ([99f893a](https://github.com/google/adk-python/commit/99f893ae282a04c67cce5f80e87d3bfadd3943e6))
- Avoid false positive "App name mismatch" warnings in Runner ([6388ba3](https://github.com/google/adk-python/commit/6388ba3b2054e60d218eae6ec8abc621ed0a1139))
- Update the code to work with either 1 event or more than 1 events ([4f54660](https://github.com/google/adk-python/commit/4f54660d6de54ddde0fec6e09fdd68890ce657ca))
- OpenAPI schema generation by skipping JSON schema for judge_model_config ([56775af](https://github.com/google/adk-python/commit/56775afc48ee54e9cbea441a6e0fa6c8a12891b9))
- Add tool_name_prefix support to OpenAPIToolset ([82e6623](https://github.com/google/adk-python/commit/82e6623fa97fb9cbc6893b44e228f4da098498da))
- Pass context to client interceptors ([143ad44](https://github.com/google/adk-python/commit/143ad44f8c5d1c56fc92dd691589aaa0b788e485))
- Yield event with error code when agent run raised A2AClientHTTPError ([b7ce5e1](https://github.com/google/adk-python/commit/b7ce5e17b6653074c5b41d08b2027b5e9970a671))
- Handle string function responses in LiteLLM conversion ([2b64715](https://github.com/google/adk-python/commit/2b6471550591ee7fc5f70f79e66a6e4080df442b))
- ApigeeLLM support for Built-in tools like GoogleSearch, BuiltInCodeExecutor when calling Gemini models through Apigee ([a9b853f](https://github.com/google/adk-python/commit/a9b853fe364d08703b37914a89cf02293b5c553b))
- Extract and propagate task_id in RemoteA2aAgent ([82bd4f3](https://github.com/google/adk-python/commit/82bd4f380bd8b4822191ea16e6140fe2613023ad))
- Update FastAPI and Starlette to fix CVE-2025-62727 (ReDoS vulnerability) ([c557b0a](https://github.com/google/adk-python/commit/c557b0a1f2aac9f0ef7f1e0f65e3884007407e30))
- Add client id to token exchange ([f273517](https://github.com/google/adk-python/commit/f2735177f195b8d7745dba6360688ddfebfed31a))
Improvements
- Normalize multipart content for LiteLLM's ollama_chat provider ([055dfc7](https://github.com/google/adk-python/commit/055dfc79747aa365db8441908d4994f795e94a68))
- Update adk web, fixes image not rendering, state not updating, update drop down box width and trace icons ([df86847](https://github.com/google/adk-python/commit/df8684734bbfd5a8afe3b4362574fe93dcb43048))
- Add sample agent for interaction api integration ([68d7048](https://github.com/google/adk-python/commit/68d70488b9340251a9d37e8ae3a9166870f26aa1))
- Update genAI SDK version ([f0bdcab](https://github.com/google/adk-python/commit/f0bdcaba449f21bd8c27cde7dbedc03bf5ec5349))
- Introduce `build_function_declaration_with_json_schema` to use pydantic to generate json schema for FunctionTool ([51a638b](https://github.com/google/adk-python/commit/51a638b6b85943d4aaec4ee37c95a55386ebac90))
- Update component definition for triaging agent ([ee743bd](https://github.com/google/adk-python/commit/ee743bd19a8134129111fc4769ec24e40a611982))
- Migrate Google tools to use the new feature decorator ([bab5729](https://github.com/google/adk-python/commit/bab57296d553cb211106ece9ee2c226c64a60c57))
- Migrate computer to use the new feature decorator ([1ae944b](https://github.com/google/adk-python/commit/1ae944b39d9cf263e15b36c76480975fe4291d22))
- Add Spanner execute sql query result mode using list of dictionaries ([f22bac0](https://github.com/google/adk-python/commit/f22bac0b202cd8f273bf2dee9fff57be1b40730d))
- Improve error message for missing `invocation_id` and `new_message` in `run_async` ([de841a4](https://github.com/google/adk-python/commit/de841a4a0982d98ade4478f10481c817a923faa2))
Features
- **[Core]**
- Add enum constraint to `agent_name` for `transfer_to_agent` ([4a42d0d](https://github.com/google/adk-python/commit/4a42d0d9d81b7aab98371427f70a7707dbfb8bc4))
- Add validation for unique sub-agent names ([#3557](https://github.com/google/adk-python/issues/3557)) ([2247a45](https://github.com/google/adk-python/commit/2247a45922afdf0a733239b619f45601d9b325ec))
- Support streaming function call arguments in progressive SSE streaming feature ([786aaed](https://github.com/google/adk-python/commit/786aaed335e1ce64b7e92dff2f4af8316b2ef593))
- **[Models]**
- Enable multi-provider support for Claude and LiteLLM ([d29261a](https://github.com/google/adk-python/commit/d29261a3dc9c5a603feef27ea657c4a03bb8a089))
- **[Tools]**
- Create APIRegistryToolset to add tools from Cloud API registry to agent ([ec4ccd7](https://github.com/google/adk-python/commit/ec4ccd718feeadeb6b2b59fcc0e9ff29a4fd0bac))
- Add an option to disallow propagating runner plugins to AgentTool runner ([777dba3](https://github.com/google/adk-python/commit/777dba3033a9a14667fb009ba017f648177be41d))
- **[Web]**
- Added an endpoint to list apps with details ([b57fe5f](https://github.com/google/adk-python/commit/b57fe5f4598925ec7592917bb32c7f0d6eca287a))
Bug Fixes
- Allow image parts in user messages for Anthropic Claude ([5453b5b](https://github.com/google/adk-python/commit/5453b5bfdedc91d9d668c9eac39e3bb009a7bbbf))
- Mark the Content as non-empty if its first part contains text or inline_data or file_data or func call/response ([631b583](https://github.com/google/adk-python/commit/631b58336d36bfd93e190582be34069613d38559))
- Fixes double response processing issue in `base_llm_flow.py` where, in Bidi-streaming (live) mode, the multi-agent structure causes duplicated responses after tool calling. ([cf21ca3](https://github.com/google/adk-python/commit/cf21ca358478919207049695ba6b31dc6e0b2673))
- Fix out of bounds error in _run_async_impl ([8fc6128](https://github.com/google/adk-python/commit/8fc6128b62ba576480d196d4a2597564fd0a7006))
- Fix paths for public docs ([cd54f48](https://github.com/google/adk-python/commit/cd54f48fed0c87b54fb19743c9c75e790c5d9135))
- Ensure request bodies without explicit names are named 'body' ([084c2de](https://github.com/google/adk-python/commit/084c2de0dac84697906e2b4beebf008bbd9ae8e1)), closes [#2213](https://github.com/google/adk-python/issues/2213)
- Optimize Stale Agent with GraphQL and Search API to resolve 429 Quota errors ([cb19d07](https://github.com/google/adk-python/commit/cb19d0714c90cd578551753680f39d8d6076c79b))
- Update AgentTool to use Agent's description when input_schema is provided in FunctionDeclaration ([52674e7](https://github.com/google/adk-python/commit/52674e7fac6b7689f0e3871d41c4523e13471a7e))
- Update LiteLLM system instruction role from "developer" to "system" ([2e1f730](https://github.com/google/adk-python/commit/2e1f730c3bc0eb454b76d7f36b7b9f1da7304cfe)), closes [#3657](https://github.com/google/adk-python/issues/3657)
- Update session last update time when appending events ([a3e4ad3](https://github.com/google/adk-python/commit/a3e4ad3cd130714affcaa880f696aeb498cd93af)), closes [#2721](https://github.com/google/adk-python/issues/2721)
- Update the retry_on_closed_resource decorator to retry on all errors ([a3aa077](https://github.com/google/adk-python/commit/a3aa07722a7de3e08807e86fd10f28938f0b267d))
- Windows Path Handling and Normalize Cross-Platform Path Resolution in AgentLoader ([a1c09b7](https://github.com/google/adk-python/commit/a1c09b724bb37513eaabaff9643eeaa68014f14d))
Documentation
- Add Code Wiki badge to README ([caf23ac](https://github.com/google/adk-python/commit/caf23ac49fe08bc7f625c61eed4635c26852c3ba))
Highlights
- **Breaking**! Raise minimum Python version to 3.10
- Add a File based Artifact Service
- Reduce ADK API server startup latency by lazy loading
- ADK web light mode support
- BigQuery Agent Analytics Plugin
Features
- **[Core]**
- Add `id` and `custom_metadata` fields to `MemoryEntry` ([4dd28a3](https://github.com/google/adk-python/commit/4dd28a3970d0f76c571caf80b3e1bea1b79e9dde))
- Add progressive SSE streaming feature ([a5ac1d5](https://github.com/google/adk-python/commit/a5ac1d5e14f5ce7cd875d81a494a773710669dc1))
- Add a2a_request_meta_provider to RemoteAgent init ([d12468e](https://github.com/google/adk-python/commit/d12468ee5a2b906b6699ccdb94c6a5a4c2822465))
- Add feature decorator for the feature registry system ([871da73](https://github.com/google/adk-python/commit/871da731f1c09c6a62d51b137d9d2e7c9fb3897a))
- Breaking: Raise minimum Python version to 3_10 ([8402832](https://github.com/google/adk-python/commit/840283228ee77fb3dbd737cfe7eb8736d9be5ec8))
- Refactor and rename BigQuery agent analytics plugin ([6b14f88](https://github.com/google/adk-python/commit/6b14f887262722ccb85dcd6cef9c0e9b103cfa6e))
- Pass custom_metadata through forwarding artifact service ([c642f13](https://github.com/google/adk-python/commit/c642f13f216fb64bc93ac46c1c57702c8a2add8c))
- Update save_files_as_artifacts_plugin to never keep inline data ([857de04](https://github.com/google/adk-python/commit/857de04debdeba421075c2283c9bd8518d586624))
- **[Evals]**
- Add support for InOrder and AnyOrder match in ToolTrajectoryAvgScore Metric ([e2d3b2d](https://github.com/google/adk-python/commit/e2d3b2d862f7fc93807d16089307d4df25367a24))
- **[Integrations]**
- Enhance BQ Plugin Schema, Error Handling, and Logging ([5ac5129](https://github.com/google/adk-python/commit/5ac5129fb01913516d6f5348a825ca83d024d33a))
- Schema Enhancements with Descriptions, Partitioning, and Truncation Indicator ([7c993b0](https://github.com/google/adk-python/commit/7c993b01d1b9d582b4e2348f73c0591d47bf2f3a))
- **[Services]**
- Add file-backed artifact service ([99ca6aa](https://github.com/google/adk-python/commit/99ca6aa6e6b4027f37d091d9c93da6486def20d7))
- Add service factory for configurable session and artifact backends ([a12ae81](https://github.com/google/adk-python/commit/a12ae812d367d2d00ab246f85a73ed679dd3828a))
- Add SqliteSessionService and a migration script to migrate existing DB using DatabaseSessionService to SqliteSessionService ([e218254](https://github.com/google/adk-python/commit/e2182544952c0174d1a8307fbba319456dca748b))
- Add transcription fields to session events ([3ad30a5](https://github.com/google/adk-python/commit/3ad30a58f95b8729f369d00db799546069d7b23a))
- Full async implementation of DatabaseSessionService ([7495941](https://github.com/google/adk-python/commit/74959414d8ded733d584875a49fb4638a12d3ce5))
- **[Models]**
- Add experimental feature to use `parameters_json_schema` and `response_json_schema` for McpTool ([1dd97f5](https://github.com/google/adk-python/commit/1dd97f5b45226c25e4c51455c78ebf3ff56ab46a))
- Add support for parsing inline JSON tool calls in LiteLLM responses ([22eb7e5](https://github.com/google/adk-python/commit/22eb7e5b06c9e048da5bb34fe7ae9135d00acb4e))
- Expose artifact URLs to the model when available ([e3caf79](https://github.com/google/adk-python/commit/e3caf791395ce3cc0b10410a852be6e7b0d8d3b1))
- **[Tools]**
- Add BigQuery related label handling ([ffbab4c](https://github.com/google/adk-python/commit/ffbab4cf4ed6ceb313241c345751214d3c0e11ce))
- Allow setting max_billed_bytes in BigQuery tools config ([ffbb0b3](https://github.com/google/adk-python/commit/ffbb0b37e128de50ebf57d76cba8b743a8b970d5))
- Propagate `application_name` set for the BigQuery Tools as BigQuery job labels ([f13a11e](https://github.com/google/adk-python/commit/f13a11e1dc27c5aa46345154fbe0eecfe1690cbb))
- Set per-tool user agent in BQ calls and tool label in BQ jobs ([c0be1df](https://github.com/google/adk-python/commit/c0be1df0521cfd4b84585f404d4385b80d08ba59))
- **[Observability]**
- Migrate BigQuery logging to Storage Write API ([a2ce34a](https://github.com/google/adk-python/commit/a2ce34a0b9a8403f830ff637d0e2094e82dee8e7))
Bug Fixes
- Add `jsonschema` dependency for Agent Builder config validation ([0fa7e46](https://github.com/google/adk-python/commit/0fa7e4619d589dc834f7508a18bc2a3b93ec7fd9))
- Add None check for `event` in `remote_a2a_agent.py` ([744f94f](https://github.com/google/adk-python/commit/744f94f0c8736087724205bbbad501640b365270))
- Add vertexai initialization for code being deployed to AgentEngine ([b8e4aed](https://github.com/google/adk-python/commit/b8e4aedfbf0eb55b34599ee24e163b41072a699c))
- Change LiteLLM content and tool parameter handling ([a19be12](https://github.com/google/adk-python/commit/a19be12c1f04bb62a8387da686499857c24b45c0))
- Change name for builder agent ([131d39c](https://github.com/google/adk-python/commit/131d39c3db1ae25e3911fa7f72afbe05e24a1c37))
- Ensure event compaction completes by awaiting task ([b5f5df9](https://github.com/google/adk-python/commit/b5f5df9fa8f616b855c186fcef45bade00653c77))
- Fix deploy to cloud run on Windows ([29fea7e](https://github.com/google/adk-python/commit/29fea7ec1fb27989f07c90494b2d6acbe76c03d8))
- Fix error handling when MCP server is unreachable ([ee8106b](https://github.com/google/adk-python/commit/ee8106be77f253e3687e72ae0e236687d254965c))
- Fix error when query job destination is None ([0ccc43c](https://github.com/google/adk-python/commit/0ccc43cf49dc0882dc896455d6603a602d8a28e7))
- Fix Improve logic for checking if a MCP session is disconnected ([a754c96](https://github.com/google/adk-python/commit/a754c96d3c4fd00f9c2cd924fc428b68cc5115fb))
- Fix McpToolset crashing with anyio.BrokenResourceError ([8e0648d](https://github.com/google/adk-python/commit/8e0648df23d0694afd3e245ec4a3c41aa935120a))
- Fix Safely handle `FunctionDeclaration` without a `required` attribute ([93aad61](https://github.com/google/adk-python/commit/93aad611983dc1daf415d3a73105db45bbdd1988))
- Fix status code in error message in RestApiTool ([9b75456](https://github.com/google/adk-python/commit/9b754564b3cc5a06ad0c6ae2cd2d83082f9f5943))
- Fix Use `async for` to loop through event iterator to get all events in vertex_ai_session_service ([9211f4c](https://github.com/google/adk-python/commit/9211f4ce8cc6d918df314d6a2ff13da2e0ef35fa))
- Fix: Fixes DeprecationWarning when using send method ([2882995](https://github.com/google/adk-python/commit/28829952890c39dbdb4463b2b67ff241d0e9ef6d))
- Improve logic for checking if a MCP session is disconnected ([a48a1a9](https://github.com/google/adk-python/commit/a48a1a9e889d4126e6f30b56c93718dfbacef624))
- Improve handling of partial and complete transcriptions in live calls ([1819ecb](https://github.com/google/adk-python/commit/1819ecb4b8c009d02581c2d060fae49cd7fdf653))
- Keep vertex session event after the session update time ([0ec0195](https://github.com/google/adk-python/commit/0ec01956e86df6ae8e6553c70e410f1f8238ba88))
- Let part converters also return multiple parts so they can support more usecases ([824ab07](https://github.com/google/adk-python/commit/824ab072124e037cc373c493f43de38f8b61b534))
- Load agent/app before creating session ([236f562](https://github.com/google/adk-python/commit/236f562cd275f84837be46f7dfb0065f85425169))
- Remove app name from FileArtifactService directory structure ([12db84f](https://github.com/google/adk-python/commit/12db84f5cd6d8b6e06142f6f6411f6b78ff3f177))
- Remove hardcoded `google-cloud-aiplatform` version in agent engine requirements ([e15e19d](https://github.com/google/adk-python/commit/e15e19da05ee1b763228467e83f6f73e0eced4b5))
- Stop updating write mode in the global settings during tool execution ([5adbf95](https://github.com/google/adk-python/commit/5adbf95a0ab0657dd7df5c4a6bac109d424d436e))
- Update description for `load_artifacts` tool ([c485889](https://github.com/google/adk-python/commit/c4858896ff085bedcfbc42b2010af8bd78febdd0))
Improvements
- Add BigQuery related label handling ([ffbab4c](https://github.com/google/adk-python/commit/ffbab4cf4ed6ceb313241c345751214d3c0e11ce))
- Add demo for rewind ([8eb1bdb](https://github.com/google/adk-python/commit/8eb1bdbc58dc709006988f5b6eec5fda25bd0c89))
- Add debug logging for live connection ([5d5708b](https://github.com/google/adk-python/commit/5d5708b2ab26cb714556311c490b4d6f0a1f9666))
- Add debug logging for missing function call events ([f3d6fcf](https://github.com/google/adk-python/commit/f3d6fcf44411d07169c14ae12189543f44f96c27))
- Add default retry options as fall back to llm_request that are made during evals ([696852a](https://github.com/google/adk-python/commit/696852a28095a024cbe76413ee7617356e19a9e3))
- Add plugin for returning GenAI Parts from tools into the model request ([116b26c](https://github.com/google/adk-python/commit/116b26c33e166bf1a22964e2b67013907fbfcb80))
- Add support for abstract types in AFC ([2efc184](https://github.com/google/adk-python/commit/2efc184a46173529bdfc622db0d6f3866e7ee778))
- Add support for structured output schemas in LiteLLM models ([7ea4aed](https://github.com/google/adk-python/commit/7ea4aed35ba70ec5a38dc1b3b0a9808183c2bab1))
- Add tests for `max_query_result_rows` in BigQuery tool config ([fd33610](https://github.com/google/adk-python/commit/fd33610e967ad814bc02422f5d14dae046bee833))
- Add type hints in `cleanup_unused_files.py` ([2dea573](https://github.com/google/adk-python/commit/2dea5733b759a7a07d74f36a4d6da7b081afc732))
- Add util to build our llms.txt and llms-full.txt files
- ADK changes ([f1f4467](https://github.com/google/adk-python/commit/f1f44675e4a86b75e72cfd838efd8a0399f23e24))
- Defer import of `google.cloud.storage` in `GCSArtifactService` ([999af55](https://github.com/google/adk-python/commit/999af5588005e7b29451bdbf9252265187ca992d))
- Defer import of `live`, `Client` and `_transformers` in `google.genai` ([22c6dbe](https://github.com/google/adk-python/commit/22c6dbe83cd1a8900d0ac6fd23d2092f095189fa))
- Enhance the messaging with possible fixes for RESOURCE_EXHAUSTED errors from Gemini ([b2c45f8](https://github.com/google/adk-python/commit/b2c45f8d910eb7bca4805c567279e65aff72b58a))
- Improve gepa tau-bench colab for external use ([e02f177](https://github.com/google/adk-python/commit/e02f177790d9772dd253c9102b80df1a9418aa7f))
- Improve gepa voter agent demo colab ([d118479](https://github.com/google/adk-python/commit/d118479ccf3a970ce9b24ac834b4b6764edb5de4))
- Lazy import DatabaseSessionService in the adk/sessions/ module ([5f05749](https://github.com/google/adk-python/commit/5f057498a274d3b3db0be0866f04d5225334f54a))
- Move adk_agent_builder_assistant to built_in_agents ([b2b7f2d](https://github.com/google/adk-python/commit/b2b7f2d6aa5b919a00a92abaf2543993746e939e))
- Plumb memory service from LocalEvalService to EvaluationGenerator ([dc3f60c](https://github.com/google/adk-python/commit/dc3f60cc939335da49399a69c0b4abc0e7f25ea4))
- Removes the unrealistic todo comment of visibility management ([e511eb1](https://github.com/google/adk-python/commit/e511eb1f70f2a3fccc9464ddaf54d0165db22feb))
- Returns agent state regardless if ctx.is_resumable ([d6b928b](https://github.com/google/adk-python/commit/d6b928bdf7cdbf8f1925d4c5227c7d580093348e))
- Stop logging the full content of LLM blobs ([0826755](https://github.com/google/adk-python/commit/082675546f501a70f4bc8969b9431a2e4808bd13))
- Update ADK web to match main branch ([14e3802](https://github.com/google/adk-python/commit/14e3802643a2d8ce436d030734fafd163080a1ad))
- Update agent instructions and retry limit in `plugin_reflect_tool_retry` sample ([01bac62](https://github.com/google/adk-python/commit/01bac62f0c14cce5d454a389b64a9f44a03a3673))
- Update conformance test CLI to handle long-running tool calls ([dd706bd](https://github.com/google/adk-python/commit/dd706bdc4563a2a815459482237190a63994cb6f))
- Update Gemini Live model names in live bidi streaming sample ([aa77834](https://github.com/google/adk-python/commit/aa77834e2ecd4b77dfb4e689ef37549b3ebd6134))
Questions people actually ask
Where does this data come from?
Directly from GitHub's release API for google/adk-python, refreshed every few hours. Nothing is hand-transcribed except the notes explicitly marked as TraptureIQ's own.
Does this track google/adk-docs too?
Not yet. adk-docs has no GitHub Releases to track, only continuous commits to the documentation itself — a different kind of signal. This page covers adk-python, which is where version-to-version behavioural changes actually happen.
Why do version numbers look out of order, like v1.38.0 published after v2.6.3?
adk-python runs two active release trains at once: a 2.x line and a 1.x line still receiving backported fixes. They are not one sequence — check the release-train badge on each entry, not just the version number.
What makes a release "annotated"?
Only releases where TraptureIQ has verified, hands-on, that something changed operationally — like a telemetry environment variable suddenly being honoured. It is not a summary of every release, only the ones worth stopping for.