diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 984e5f0f9a5..7a5647237a8 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.7.1" + ".": "2.8.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index ba1a8e9c8e6..b447efd84b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,174 @@ # Changelog +## [2.8.0](https://github.com/google/adk-python/compare/v2.7.1...v2.8.0) (2026-08-25) + + +### 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:** 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)) + ## [2.7.1](https://github.com/google/adk-python/compare/v2.7.0...v2.7.1) (2026-08-17) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 4e8136e9a1b..4f43df2be24 100644 --- a/src/google/adk/version.py +++ b/src/google/adk/version.py @@ -13,4 +13,4 @@ # limitations under the License. # version: major.minor.patch -__version__ = "2.7.1" +__version__ = "2.8.0"