Skip to content

v2.8.0

Latest

Choose a tag to compare

@wukath wukath released this 26 Aug 23:25

2.8.0 (2026-08-25)

Features

  • a2a: add native task mode support to RemoteA2aAgent (72f3ff5)
  • add ADK_MAX_LLM_CALLS environment variable to configure max LLM calls limit (75679db)
  • add create_data_agent tool to data_agent toolset (5cd38a0)
  • add delete_data_agent tool to data_agent toolset (9b451fc)
  • add location parameter to list_accessible_data_agents in data_agent toolset (393ec08)
  • add Model Armor guardrail plugin (11efc3f)
  • add nvidia nim integration sample (c6bba8d)
  • add sample for skill state injection via adk_inject_state (9384127)
  • add spreadsheet mime types to load_artifact_tool (370027a)
  • add update_data_agent tool to data_agent toolset (92d00aa)
  • allow configuring Vertex AI API version (ede87c2), closes #3246
  • allow streaming tools to set response scheduling per yield (bf2efd7)
  • antigravity: capture client-side tool outcomes for a function_response (4599a52)
  • cli: Support Cloud Build worker pools for Agent Engine deploy (e577c30)
  • eval: support custom metrics in AgentEvaluator (babb11c)
  • guard against SQL injection vulnerabilities in BigQuery tools (d6290a0)
  • live: Add VIDEO to the allowed modalities in the ADK API server (dd998a7)
  • live: let a live streaming tool send messages to the user directly (98896eb)
  • live: run before and after model callbacks in live mode (ef2d680)
  • live: surface live interaction_status on LlmResponse and Event (b858904)
  • live: use RunConfig.session_resumption.handle when opening a live session (eac32c3)
  • mcp: report MCP HTTP exchanges as OpenTelemetry log records (85a6fa1)
  • parallelize LLM-as-judge evaluation using asyncio.gather() (0dbb88c)
  • preserve field descriptions in set_model_response schema (a30858b), closes #6707
  • record context cache state on the LLM call span (c0614d6)
  • resolve auth for RemoteA2aAgent in AgentRegistry (d695494)
  • support auth_scheme and auth_credential in RemoteA2aAgent (d42c634)
  • support injecting custom LLM clients into Gemini and AnthropicLlm (a01d516), closes #5027
  • support memory_id and allowed_topics in Vertex Memory Bank (bf73360)
  • support opt-in session retention in MultimodalToolResultsPlugin (775c1bd), closes #6695
  • support sub-agent escalation event in ParallelAgent (0fd681e), closes #5104

Telemetry

  • telemetry: add per-invocation token spend metrics for invoke_agent (dc00db5)
  • telemetry: add per-workflow inference and tool call counts (6e6c4a5)
  • telemetry: add per-workflow token spend metrics (dd8797e)
  • telemetry: Expand telemetry for load_skill_resource span (6e0facf)
  • telemetry: honor RunConfig.telemetry at the runner's invocation span (00fc6eb)

Note: new experimental telemetry feature for token usage per agent invocation and per workflow, inference and tool call counts per workflow, and expanded load_skill attributes. Off by default, opt in with ADK_EXPERIMENTAL_TELEMETRY=true or RunConfig.telemetry.adk_experimental_telemetry_opt_in=True.

Bug Fixes

  • a2a: keep file payloads out of the debug log line (ef158d3)
  • agents: report which toolset an agent lost when one fails to load (66930e6)
  • artifacts: Publish file artifact versions atomically (94475c9)
  • auth: take the auth scheme from the request, not the client's response (8989aea)
  • avoid O(n^2) deep event comparison during rehydration (b8dd086), closes #6657
  • block yaml and ruamel deserialization in agent-config code references (924d802)
  • cache read write token counts in LiteLLM and Anthropic models (d0b33a0), closes #5835
  • check every function response, not just the first, when inferring which invocation to resume (5449314)
  • cli: clean up pytest subprocesses on test-client disconnect (a84a4b5)
  • cli: Preserve non-ASCII text in adk test --rebuild, Web UI test saving, and CLI JSONL (dc735bd)
  • cli: report env var names instead of values when overriding env_vars (b0c599f)
  • count tool call and response chars in compaction (66908e4)
  • declare a2a-sdk[http-server] so the a2a extra can serve (65234e7)
  • deduplicate events in InMemorySessionService.append_event (4d74774), closes #5723
  • deliver parallel sub-agent failures to the caller (ece924c), closes #5455
  • detect MCP tool errors under either field spelling (d18df2f)
  • disable Windows glob expansion for CLI args (2638155), closes #6248
  • emit Anthropic prompt cache breakpoints for ContextCacheConfig (811d379), closes #5395
  • fence relayed agent output so it cannot pose as instructions (9ffe8be)
  • filter thought parts from A2A client user-facing response (8963a04), closes #4676
  • Fix built-in search tools in agent hierarchy when transfer_to_agent is present (f3250bd)
  • Fix crashes and cross-invocation leaks from copying RunConfig.http_options (67ca98c)
  • flows: pair a function response with the call it answers (deee6d2), closes #6761
  • flows: sort function_call.args when rendering cross-agent context (735402d)
  • Guard invocation_context.branch assignment against mock SessionService instances (9917922)
  • guard against Content with no parts in _content_to_message_param (1ed8d48)
  • handle read-only .git files in deploy cleanup on Windows (c93fcc0)
  • honor before_run_callback early-exit for Workflow runs (dac1869), closes #6013
  • honor ContextCacheConfig on the LiteLLM path (b1c984b)
  • improve clarity and actionable context in error messages (7c2af5f)
  • include grounding metadata in rubric judge prompt (b0cdecf), closes #5831
  • integrations: send api registry credentials only to google api endpoints (cc275f0)
  • keep non-text static_instruction as a stable request prefix (deda5b3), closes #6652
  • keep session identity across single-turn node contexts (c602065), closes #6691
  • keep tool calls at most once (5bcf5cd)
  • live: stop background tool tasks when a live agent run ends (0088abb)
  • live: stop live runs from writing back into the caller's RunConfig (0b39e72)
  • make SqliteSessionService state merges use dict.update() semantics (e4ba704), closes #6728
  • mcp: evict idle sessions from the MCP session pool (69a3ca5)
  • only attach default credentials to https endpoints (5d3d152)
  • only emit --gemini_enterprise_app_name for adk_version >= 2.2.0 (00932e6)
  • pass file metadata tuple to Azure for PDF uploads (ff4567d), closes #6539
  • percent-encode path parameter values in RestApiTool (25f53bd)
  • point to Gemini Enterprise registration docs after agent_engine deploy (1d2d1ed), closes #6633
  • populate developer_instructions when invocation_events is empty (69c9090), closes #5593
  • prefer the function response's own invocation over a caller-supplied id on the node path (4d0d63c)
  • prevent contextvars leak across async generators (bb86bdd), closes #5722
  • prevent duplicate function execution when support_cfc is enabled (c986ff0)
  • prevent duplicate OAuth prompts and fix tool resumption (eaad2f8)
  • prevent duplicate synthetic user event on single-turn agent resumption (e753651)
  • prevent prompt injection via GitHub event data in workflows (4f558f1)
  • rank and bound the results of InMemoryMemoryService.search_memory (f3fae72)
  • re-raise agent errors from the synchronous Runner.run() (b55000d)
  • read long-running function name from data, not metadata (029c17b), closes #6295
  • redact credentials from DebugLoggingPlugin output file (a86bd25)
  • redact credentials from generate_content_config.http_options in debug logs (1cd6f46)
  • reject negative recent-event limits (26110c7)
  • reject tool confirmations arriving over A2A (9e9eaa6), closes #6461
  • report root_agent type mismatch instead of 'No root_agent found' (4f07c93), closes #6606
  • resolve Claude 5 model names in the LLM registry (42a4a5f)
  • resolve NameError in legacy create-eval-set route (023f45c)
  • resolve nested provider behind litellm_proxy prefix (602e58d), closes #6538
  • resolve server disconnect logs (3f2d399)
  • resolve systemic parts[0] indexing bugs (2109ea9), closes #6616
  • Restore invocation_context.branch from session history when executing a non-root agent node or resuming a sub-agent in Runner (676d1e7)
  • restrict unpickling of legacy v0 session event actions (97c2af0), closes #5634
  • resume an invocation whose user message leads with a non-text part (6d8c588)
  • revert the A2A guard that broke every HITL tool confirmation (9a32eba)
  • route workflow IDs and retry jitter through platform seams (8f85107)
  • samples: widen numeric tool parameters to match their docstrings (0c67410)
  • sanitize state deltas before writing them to JSON state columns (3f9e6be)
  • send the required list on a CrewAI or LangChain function declaration (186d9f7)
  • sessions: dedupe InMemorySessionService events by equality not id (c9323d5)
  • sessions: load legacy v0 event actions with the restricted unpickler (fb15710)
  • sessions: stop dropping event actions on v0 PostgreSQL migration (e3ae4ac)
  • skills: skip search results that fail frontmatter validation (3c977bc), closes #6838
  • skip non-agent directories in AgentLoader.list_agents() (caac070)
  • skip non-numeric response keys in generate_return_doc (920bc3e), closes #6174
  • stop re-sending thought summaries as conversation history (e4f5900)
  • stop re-sending thought summaries as conversation history (3c1b1bc)
  • stop RemoteA2aAgent forwarding credential requests to the remote peer (2aea859)
  • stop the session liveness probe from crashing when the SDK moves its streams (d9f4d3d)
  • strip internal planning tags from PlanReActPlanner output (ac8dad2), closes #3378
  • telemetry: End the inference span when the inference ends (ecc730c)
  • telemetry: record call_llm span attributes when a plugin short-circuits the model call (0321136)
  • tools: report no match instead of raising on empty retrieval (99660d9)
  • tools: run AgentTool nested agent in unary mode (0d5752b)
  • tools: run an agent tool under the caller's RunConfig (983c280)
  • trigger Gemini 3.x Live response after sending conversation history (7616c78)
  • update unit guide skill to exclude internal implementation details (0c0296c)
  • use OAuth2 client-credentials scheme for OpenAPI SA helpers (9897217), closes #6656
  • use Unicode-aware keyword extraction in InMemoryMemoryService (b8ea1e8), closes #5501
  • validate session initialization events (3fa71b6), closes #5290
  • validate SQL identifiers in Spanner search tool (8d2f277), closes #5913
  • workflow: cancel parallel worker items when the worker is cancelled (dec729f)
  • workflow: declare abc.ABC on BaseNode so abstract subclasses type-check (f3b59fd)
  • workflow: do not act on function calls in partial events (816ada5), closes #6583
  • workflow: honor START as a satisfied JoinNode predecessor (d8df6fd)
  • workflow: resume node auth from the node's own auth config (5b59139)

Performance Improvements

  • buffer streamed function call arguments instead of concatenating (f604de2)
  • key the Pub/Sub publisher cache on its options' value (51231cd)
  • remove redundant event scans in prompt assembly (d7adc1c)
  • remove redundant event scans in prompt assembly (e66fdd2)
  • resolve the optional id-pairing providers once, not per request (203461c)
  • run local code execution in a plain child interpreter (c244a9c)
  • run the Google credential refresh off the event loop (2aa2b46)

Documentation

  • add audio_stream_end documentation for realtime input (17cb265)
  • correct node schema docstrings about which variants validate (e649a38)
  • correct the documented contract of the invocation-subtree event filter (be8fcf4)
  • fix typos and grammar in README (ffe518a)
  • guides: add developer unit guide for BaseCodeExecutor (b370fc0)
  • guides: add developer unit guide for BasePlanner (ea23a89)
  • guides: add developer unit guide for Runner and Runner Live Streaming (1d89e0f)
  • repair the workflow guides and document BaseNode (7c7d2ba)
  • tell sample creator skill not to prefix dirs with $category or suffix with _agent (50c3edf)