diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index a549f59d00..78baf5bf9b 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.4.0" + ".": "2.5.0" } diff --git a/.github/release-please-config.json b/.github/release-please-config.json index cd7356ec01..373823b6bc 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -57,5 +57,5 @@ ] } }, - "last-release-sha": "44d747ed5eaf543b5b8d22e0088f8a7c7eeee846" + "last-release-sha": "c9bacd40ee4f8ad9951d543b240ce3f2f59ebb42" } diff --git a/CHANGELOG.md b/CHANGELOG.md index edaeda5557..577a750015 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,120 @@ # Changelog +## [2.5.0](https://github.com/google/adk-python/compare/v2.4.0...v2.5.0) (2026-07-16) + + +### 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 GCP Skill Registry to use agentregistry/skill endpoint ([fa884e3](https://github.com/google/adk-python/commit/fa884e3d028e2809526dc732592a6b5b944a8c17)) +* 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)) + ## [2.4.0](https://github.com/google/adk-python/compare/v2.3.0...v2.4.0) (2026-07-07) diff --git a/src/google/adk/version.py b/src/google/adk/version.py index 3b4abe385e..41f3d65ff0 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.4.0" +__version__ = "2.5.0"