Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
603 commits
Select commit Hold shift + click to select a range
ee0f4bc
refactor: batch eval set results saving so they are grouped under the…
boyangsvl Apr 7, 2026
9fc741a
chore: Bump version to 2.0.0a3
Jacksunwei Apr 8, 2026
a21c8c7
feat(runners): Bring back the old find_agent_to_run logic for when Ll…
Jacksunwei Apr 8, 2026
6e11f8f
fix(workflow): Align nested workflow tests with V2 event protocols
DeanChensj Apr 8, 2026
ed5f10f
added unit tests fixes
GWeale Apr 8, 2026
545b380
added fixes for google tool and base cred
GWeale Apr 8, 2026
d883a6d
feat(otel): Instrument NodeRunner control flow
RKest Apr 2, 2026
f4a4813
feat(otel): Add functional tests for workflow telemetry
RKest Apr 7, 2026
a925cdb
fix(environment): fix package references
wuliang229 Mar 30, 2026
9ce0cf2
test: prevent test_resource_limits_set from hanging in GitHub Actions
wuliang229 Apr 7, 2026
1cafbe4
docs: Auto-Assignment GitHub Action for Issues
llalitkumarrr Apr 7, 2026
33b3cfe
feat: Propagate context to thread pools
google-genai-bot Apr 7, 2026
9c09716
fix: Small fixes for express mode
wukath Apr 7, 2026
56d29f5
fix: Fixes for initializing RemoteA2aAgent - passing in preferred tra…
wukath Apr 7, 2026
feea8ca
fix: truncate error_message in v0 schema to prevent VARCHAR overflow
GWeale Apr 7, 2026
57ae0b8
docs: Update the MCP Toolbox docsite with the new URL
google-genai-bot Apr 7, 2026
78b0769
feat: add ADK trigger endpoints to ADK Web Server
google-genai-bot Apr 7, 2026
82a44ed
docs(adk): clean up remote triggers README to remove internal references
google-genai-bot Apr 7, 2026
df24de7
feat: Add blacklist for shell metacharacters in BashTool
shukladivyansh Apr 8, 2026
c3d7f7f
fix(tools): handle toolset errors gracefully in canonical_tools
GWeale Apr 8, 2026
7bc6616
chore: Update actions/checkout to v6 in GitHub workflows
wuliang229 Mar 12, 2026
51e07b3
fix: Update v2 release workflow to be dispatched from v2 branch
GWeale Mar 27, 2026
256c961
fix: add missing import and fix variable name typo
GWeale Apr 8, 2026
c5f8be2
test(workflow): Refactor NodeRunner tests to remove MagicMock and use…
DeanChensj Apr 8, 2026
be10951
Make /dev/build_graph_image/ endpoint supports non workflow agents
wyf7107 Apr 8, 2026
bdfdb33
fix(tools): Acknowledge safety decisions to prevent API errors
boyangsvl Apr 8, 2026
5bc4ecb
test(workflow): Deduplicate node timeout tests and fix retry test
DeanChensj Apr 8, 2026
71ee29c
test(workflow): Stabilize HITL tests for non-resumable mode
DeanChensj Apr 8, 2026
e516e26
fix(workflow): Fix agent transfer failures and routing in non-resumab…
xuanyang15 Apr 8, 2026
5ffc999
update adk web
wyf7107 Apr 8, 2026
5f51958
fix(workflow): Content→str in BaseNode input validation
GWeale Apr 8, 2026
6f5d47c
refactor(workflow): Standardize retry mechanics with attempt_count
DeanChensj Apr 8, 2026
cc87917
test(workflow): Move nested, schema, and bytes tests to separate files
DeanChensj Apr 8, 2026
c7f3c62
test(cli): Prevent random pollution in replay tests via JSON config
xuanyang15 Apr 8, 2026
b867b4f
test(workflow): Remove xfail from test_run_async_with_agent_nodes
DeanChensj Apr 8, 2026
61a8b5b
fix(tests): Align retry sample test with 1-based attempt count
xuanyang15 Apr 8, 2026
d7de2f7
feat(workflow): Support parsing input schema from Content text
DeanChensj Apr 8, 2026
bf5a97b
test(agents): mark unsupported nested agent tests as xfail
DeanChensj Apr 9, 2026
a5392c7
unit test fix
GWeale Apr 9, 2026
3efeee5
feat(workflow): Support JSON string parsing in schema validation
DeanChensj Apr 9, 2026
0b5f4bf
refactor: group evaluation results by set ID to support multi-set pro…
boyangsvl Apr 9, 2026
ca83818
test(runners): Mark legacy nested agent tests as xfail
DeanChensj Apr 9, 2026
70b533f
test(workflow): Verify workflow pause and resume with tool confirmation
DeanChensj Apr 9, 2026
6580f41
test(workflow): Add unit test for FunctionNode auth pause-and-resume
DeanChensj Apr 9, 2026
7127b61
fix(workflow): Restore run_counter during rehydration to ensure uniqu…
DeanChensj Apr 9, 2026
4476854
feat(events): make run_id calculated and remove from JSON dump
boyangsvl Apr 9, 2026
39b16a9
test(workflow): Remove node_name from simplified events to reduce red…
boyangsvl Apr 9, 2026
d0f04cc
refactor(workflow): Remove unused node_name_map parameter from simpli…
boyangsvl Apr 9, 2026
2be5027
refactor(workflow): Simplify node runner metadata handling
boyangsvl Apr 9, 2026
2368fb8
refactor(workflow): Remove run ID handling in tests
boyangsvl Apr 9, 2026
243720f
test(workflow): Ensure unique paths and state persistence in loop tests
DeanChensj Apr 9, 2026
a1a1dbf
chore(skills): Unify skill names and improve guidelines for ADK devel…
Jacksunwei Apr 9, 2026
7c7a0d7
tests: restore replay file now the node path issue is fixed.
boyangsvl Apr 9, 2026
c43953f
docs(workflow): add comment to NodeState and fix formatting in _workf…
boyangsvl Apr 9, 2026
349ed4f
docs(skills): Document LLM context orchestration and update skill index
Jacksunwei Apr 9, 2026
7e2b81f
refactor: deprecate and remove legacy LLM agent node and workflow imp…
boyangsvl Apr 9, 2026
7e46be5
refactor: remove legacy workflow files and clean up unused workflow …
boyangsvl Apr 9, 2026
9630ad5
refactor: rename _V1LlmAgentWrapper to _LlmAgentWrapper and remove de…
boyangsvl Apr 9, 2026
0b51e15
fix(agents): Enable resume in child branches by allowing access to de…
DeanChensj Apr 9, 2026
1cf64db
feat: Support loading agents from Visual Builder with BigQuery-powere…
google-genai-bot Apr 8, 2026
057ce39
fix: move BigQueryAgentAnalyticsPlugin import inside get_runner_async
google-genai-bot Apr 8, 2026
2144038
fix(live): Handle live session resumption and GoAway signal
wuliang229 Apr 8, 2026
4f75931
fix: Custom pickling in McpToolset to exclude unpicklable objects lik…
wukath Apr 8, 2026
f1f8e01
fix: Change express mode user flow so it's more clear that an express…
wukath Apr 9, 2026
09468a5
feat: Add Parameter Manager integration to ADK
google-genai-bot Apr 9, 2026
1108e64
feat: emit a `TaskStatusUpdateEvent` for ADK events with no output pa…
google-genai-bot Apr 9, 2026
cc71eb2
feat: allow users to include artifacts from artifact_service in A2A e…
google-genai-bot Apr 9, 2026
2386847
feat(skill): Standardize skill tools and make script arguments flexible
Apr 8, 2026
8a2a076
fix(eval): map ADK field names to Vertex SDK field names in ScenarioG…
GWeale Apr 9, 2026
9bb2179
docs(adk-style): Modularize style guide and add new topics
Jacksunwei Apr 9, 2026
d2b97fb
refactor(agents): Simplify execution by making BaseAgent extend BaseNode
boyangsvl Apr 9, 2026
d7dc796
refactor: remove LLM agent implementation and associated tests
boyangsvl Apr 9, 2026
7d90a20
refactor(agents): Remove unused transfer_targets from Context
boyangsvl Apr 10, 2026
533d3e8
refactor(agents): Remove unused schedule_dynamic_node to clean up Con…
boyangsvl Apr 10, 2026
23a4b76
feat(flows): Skip identity instructions for single-turn agents
boyangsvl Apr 10, 2026
d1555e8
refactor(agents): Consolidate duplicate LLM helpers into llm_flows to…
boyangsvl Apr 10, 2026
c7e87d8
fix(workflow): Allow retrying dynamic nodes after timeout cancellation
DeanChensj Apr 10, 2026
2b1d05e
docs: Update skills and references based on latest code conventions
DeanChensj Apr 10, 2026
79851d4
fix(eval): use correct Vertex SDK field names in ScenarioGenerator
GWeale Apr 10, 2026
4f72605
refactor(samples): Clean up and fix style issues in workflow and agen…
DeanChensj Apr 10, 2026
6893efa
fix(cli): Prevent tool nodes from connecting to END in agent graph
boyangsvl Apr 10, 2026
7041c41
feat(samples): add dynamic fan-out/fan-in workflow sample
DeanChensj Apr 10, 2026
c97d399
feat(workflow): Refine branch propagation for parallelism
boyangsvl Apr 10, 2026
eaf13dc
fix: avoid load all agents in adk web server
google-genai-bot Apr 9, 2026
ed8add2
test(cli): Make JSON test files deterministic and sequential
boyangsvl Apr 10, 2026
7ff410b
test(samples): Update agent_in_workflow tests to cover approval, decl…
boyangsvl Apr 10, 2026
a8ba5d1
refactor(workflow): Remove dead sub_branch in favor of is_parallel
boyangsvl Apr 10, 2026
7c9efb5
refactor: remove source_node_name field from dynamic node tracking in…
boyangsvl Apr 9, 2026
2cc100a
fix: improve branch prefix handling and add unit tests for JoinNode l…
boyangsvl Apr 10, 2026
c1bdd9b
refactor: format dyanmic fan out fan in sample better.
boyangsvl Apr 10, 2026
cb6fb51
feat(otel): Add `gcp.vertex.agent.associated_event_ids` attribute.
RKest Apr 9, 2026
01f9b5e
feat(otel): Add tests for wrappig async generators in aclosing.
RKest Apr 7, 2026
b8ca9cd
feat(workflow): Support route recovery on resume
DeanChensj Apr 10, 2026
28dd820
refactor(workflow): Extract _infer_node_state with detailed comments
DeanChensj Apr 10, 2026
e97a37d
docs(workflow): Warn about deadlocks in wait_for_output to prevent us…
DeanChensj Apr 10, 2026
fe5ba4d
fix(runners): Fix NameError by replacing missed Aclosing with aclosing
DeanChensj Apr 10, 2026
4c9cb3f
fix(workflow): Skip stale downstream triggers for re-triggered nodes …
GWeale Apr 10, 2026
800dd6e
refactor(agents): Support ADK 2.0 workflow execution in SequentialAgent
xuanyang15 Apr 10, 2026
5bb0aa9
fix(workflow): Fail fast when wait_for_output node with rerun_on_resu…
DeanChensj Apr 10, 2026
dbe96fc
refactor(events): Make message_as_output private for internal use
DeanChensj Apr 11, 2026
ee92b92
feat(cli): Support saving live blobs in web server endpoint
boyangsvl Apr 11, 2026
b678529
refactor(agents): remove local_events and SessionProxy from Context
boyangsvl Apr 11, 2026
e373680
chore(workflow): Remove unused _event_utils and _node_run_result
DeanChensj Apr 11, 2026
e74b1bc
feat: update Gemini LLM connection to aggregate and distinguish thoug…
boyangsvl Apr 11, 2026
b4afdfc
fix(workflow): Fix resumption for dynamic nodes
DeanChensj Apr 11, 2026
3ad1448
fix(agents): Fix missing branch field for events in standalone agents
boyangsvl Apr 11, 2026
5de4cc3
test(cli): Avoid AdkEvent construction during event comparison
boyangsvl Apr 11, 2026
2197152
fix: pass correct callback_context to plugin after_model_callback
GWeale Apr 10, 2026
d035f60
refactor(workflow): Unify event scanning for session rehydration
DeanChensj Apr 11, 2026
2435884
fix(workflow): Unwrap single resume input in DynamicNodeScheduler
DeanChensj Apr 11, 2026
b4eff6b
fix(workflow): Add branch field to _ChildScanState to fix resume failure
boyangsvl Apr 12, 2026
2b0550c
feat(workflow): Prevent schema mismatches at graph construction
DeanChensj Apr 12, 2026
095c335
fix(agents): replace getattr with direct attribute access for type sa…
GWeale Apr 10, 2026
9e54831
refactor(workflow): Improve API intuition and test coverage in utilities
DeanChensj Apr 11, 2026
67d8796
feat(samples): add sample for skill activation via environment tools
Jacksunwei Apr 9, 2026
2d0d976
fix: Fix credential leakage vulnerability in Agent Registry
wukath Apr 9, 2026
fe9cc3d
feat(live): expose live_session_resumption_update as Event in BaseLlm…
wuliang229 Apr 9, 2026
3e6a3d8
fix: preserve interaction ids for interactions SSE tool calls
GWeale Apr 9, 2026
651b9bf
feat: Add support for Gemma 4 models in ADK
GWeale Apr 10, 2026
5980d3c
fix: Add "gcloud config unset project" command to express mode flow
wukath Apr 10, 2026
85fcfe5
feat: Promote BigQuery tools to Stable
google-genai-bot Apr 10, 2026
4f4ba6c
chore: Update dependencies and release configuration for the Agent Id…
google-genai-bot Apr 13, 2026
7112505
feat(workflow): Validate dynamic node inputs at runtime
DeanChensj Apr 12, 2026
7355113
fix(workflow): strengthen type safety across workflow module
GWeale Apr 10, 2026
ef13288
feat(workflow): Introduce _NodePath to replace string manipulation
DeanChensj Apr 14, 2026
da8d41f
refactor(workflow): Use _NodePath in node path utilities
DeanChensj Apr 14, 2026
7e0ea42
refactor(workflow): Replace string path manipulation with _NodePathBu…
DeanChensj Apr 14, 2026
fec17ec
refactor(workflow): Remove legacy _node_path_utils.py
DeanChensj Apr 14, 2026
1567e87
refactor(workflow): Use NodePathBuilder in dynamic scheduler for safe…
DeanChensj Apr 14, 2026
9b1e08b
fix(workflow): restore node_input and triggered_by for PENDING nodes …
GWeale Apr 11, 2026
4ed8301
Fix empty agent graph not rendering
wyf7107 Apr 10, 2026
b16c3cf
fix(workflow): Strengthen type safety and fix latent bugs found via mypy
GWeale Apr 14, 2026
1c5de79
perf(workflow): Cache type hints to speed up node initialization
DeanChensj Apr 11, 2026
9bcb388
refactor(workflow): enforce keyword-only args and modernize type hints
GWeale Apr 7, 2026
f137e06
ADK changes
google-genai-bot Mar 19, 2026
1946626
fix: Include a link to the deployed agent
wukath Apr 13, 2026
e03fc8e
feat: Add Auth Provider support to agent registry
wukath Apr 13, 2026
df92e64
fix: validate user_id and session_id against path traversal
GWeale Apr 13, 2026
aea5ba5
feat: Live avatar support in ADK
google-genai-bot Apr 13, 2026
9d31bba
chore(session): refine raw_event storage with safety fixes and fallba…
DeanChensj Apr 13, 2026
eb0fcb4
fix: populate required fields in FunctionDeclaration json_schema fall…
giulio-leone Apr 13, 2026
eccb814
chore: merge release v1.30.0 to main
Jacksunwei Apr 13, 2026
7106c3a
feat: Firestore support
ScottMansfield Apr 14, 2026
378a7dd
fix: upgrade google-genai lower bound
sasha-gitg Apr 14, 2026
0aeef96
fix(auth): remove references to deleted GcpIamConnectorAuth feature
GWeale Apr 14, 2026
4ffaa4c
fix(workflow): Prevent static node re-run on resume by isolating inst…
DeanChensj Apr 15, 2026
4c0a74b
refactor(workflow): remove empty _workflow.py and rename _workflow_cl…
DeanChensj Apr 15, 2026
74190a5
refactor(workflow): centralize graph DSL type definitions
DeanChensj Apr 15, 2026
a962b55
fix(workflow): use DFS reachability check from START in graph validation
GWeale Apr 15, 2026
f1f1a74
docs(skills): Expand typing and Pydantic style guides with codebase-v…
GWeale Apr 15, 2026
c92763b
refactor(workflow): Consolidate rehydration logic for better maintain…
DeanChensj Apr 15, 2026
c9a5b44
refactor(workflow): Clarify dynamic node fallback by renaming variables
DeanChensj Apr 15, 2026
17caa61
refactor(live): Use `send_tool_response` for function responses
wuliang229 Apr 14, 2026
3ada5cd
fix: Bump minimum mcp version from 1.23.0 to 1.24.0
wukath Apr 14, 2026
f21a8fe
refactor(workflow): decompose from_edge_items DSL parser
DeanChensj Apr 15, 2026
76a0b44
fix: make `_EvalMetricResultWithInvocation.expected_invocation` `Opti…
ASRagab Apr 14, 2026
8995fde
refactor(live): Use `send_client_content` to send conversation history
wuliang229 Apr 14, 2026
654bcd0
fix: execute on_event_callback before append_event to persist plugin …
GWeale Apr 15, 2026
f075fc0
chore: Update Live sample agents' models
wuliang229 Apr 15, 2026
be2bf68
docs: update MCP Toolbox branding, binary version, and asset references
google-genai-bot Apr 15, 2026
bb6a4b6
refactor(agents): Revert "Support ADK 2.0 workflow execution in Seque…
xuanyang15 Apr 15, 2026
dd69ec4
fix: Resolve BigQuery plugin issues with A2A transfers, spans, and me…
haiyuan-eng-google Apr 15, 2026
7969548
feat: Add Vertex AI Agent Engine Sandbox integration for computer use
seanzhougoogle Apr 15, 2026
bf95471
fix(cli): correct console URL path after adk deploy agent_engine
anmolg1997 Apr 15, 2026
f535aa8
refactor(workflow): decompose validate_graph method
DeanChensj Apr 15, 2026
4ec57f4
fix(runners): apply plugin event merging to node-runtime path
GWeale Apr 15, 2026
1532941
fix(workflow): persist ctx.route across interrupt/resume for rerun_on…
GWeale Apr 15, 2026
45560d9
refactor(workflow): Move get_next_pending_nodes to WorkflowGraph and …
DeanChensj Apr 15, 2026
435cb25
refactor(workflow): Remove dead code to slim down context and workflow
DeanChensj Apr 15, 2026
9c07e2c
test(streaming): Enable streaming tests by removing conftest skip hook
DeanChensj Apr 15, 2026
bbfdbef
refactor(workflow): Rename _scan_node_events to _reconstruct_node_states
DeanChensj Apr 15, 2026
2d05804
feat(workflow): enforce isidentifier on BaseNode names and fix tests
DeanChensj Apr 16, 2026
21f9420
refactor(events): Move _NodePathBuilder to events for clean layering
DeanChensj Apr 16, 2026
5b51439
refactor(cli): Unify yielded type in test file discovery to simplify …
Jacksunwei Apr 16, 2026
56a6e81
feat(workflow): Propagate override_branch via `ctx.run_node`.
Jacksunwei Apr 16, 2026
dd64293
chore(workflow): Remove non-functional shared_sub_agent sample
DeanChensj Apr 16, 2026
2127220
refactor(workflow): Rename _node_runner_class to _node_runner for con…
DeanChensj Apr 16, 2026
4af9c03
chore: Add sandbox computer use sample agent
seanzhougoogle Apr 15, 2026
98a443a
feat(live): Add live_session_id to LlmResponse
wuliang229 Apr 15, 2026
546ca73
feat: Add "google-adk" user agent to Parameter Manager and Secret Man…
google-genai-bot Apr 16, 2026
cc3ba8a
refactor(workflow): Make JoinNode stateless by moving join logic to o…
boyangsvl Apr 11, 2026
990e56f
refactor(workflow): Remove triggered_by from workflow and context
boyangsvl Apr 11, 2026
1d09bb2
perf(workflow): Isolate invocations during rehydration to improve per…
DeanChensj Apr 16, 2026
887bb6c
feat(agent_samples): Update intake agent instruction and add wrong_na…
boyangsvl Apr 12, 2026
b5ff5d7
refactor(workflow): Centralize context derivation to simplify NodeRunner
boyangsvl Apr 16, 2026
44f4485
docs: convert docstring to proper triple-quoted block in context deri…
boyangsvl Apr 16, 2026
81a226e
refactor: rename is_parallel to use_sub_branch throughout workflow ex…
boyangsvl Apr 16, 2026
6f46c65
feat(agents): Allow custom live model overrides for streaming sessions
boyangsvl Apr 10, 2026
579c4ff
refactor(agents): Clean up Context __init__ and docstring
DeanChensj Apr 16, 2026
2433dd1
refactor(agents): Make error and error_node_path read-only properties
DeanChensj Apr 16, 2026
af0e116
feat(tools): Add _TaskAgentTool for task delegation in chat mode
Jacksunwei Apr 16, 2026
4ff2722
feat(agents): Enforce request_task and suppress transfer for task agents
Jacksunwei Apr 16, 2026
7b8401a
feat(workflow): Support request_task delegation and parent agent resu…
Jacksunwei Apr 16, 2026
aedfe8e
docs(workflow): Clarify dynamic node lifecycle and state recovery
Jacksunwei Apr 17, 2026
549c937
fix: Prevent LoopAgent from resetting sub-agent state on pause
xuanyang15 Apr 17, 2026
5c00b45
fix(flows): Prevent invalid transfers to task or single-turn agents
Jacksunwei Apr 17, 2026
515ccdc
fix(workflow): Restore parent agent in build_node to enable resumption
Jacksunwei Apr 17, 2026
8414f1f
fix(test): Prevent function ID mismatch in multi-agent test replay
boyangsvl Apr 17, 2026
745d861
fix(tools): Resolve string annotations in FunctionTool to fix type co…
boyangsvl Apr 17, 2026
6331076
feat(agents): Deprecate legacy orchestration agents to guide migratio…
xuanyang15 Apr 17, 2026
556eedc
fix(samples): update burgers test case in task sub agent
DeanChensj Apr 17, 2026
b030739
refactor(workflow): Decouple Context from scheduler to avoid circular…
DeanChensj Apr 17, 2026
421f99e
add v2 flag for installing v2 dependecy when dpeloy to AE
wyf7107 Apr 14, 2026
9f84d3d
update adk web to latest
wyf7107 Apr 17, 2026
87d3bf5
test(workflow): Add test for nested workflow timeout
DeanChensj Apr 17, 2026
e5197ac
refactor(workflow): Downgrade lifecycle logs to DEBUG to reduce noise
DeanChensj Apr 17, 2026
d3d0bda
fix: Pass in auth headers with header provider instead of connection …
wukath Apr 16, 2026
68620ab
chore: Remove `adk_additional_tools` and GetTimezone tool
wuliang229 Apr 16, 2026
1237e01
feat: Add support for memories.ingest_events in VertexAiMemoryBankSer…
GWeale Apr 16, 2026
9a962c9
fix: handle None state values in skill_toolset after session rewind
enjoykumawat Apr 16, 2026
17f3a8a
chore: Replace old model gemini-2.0 references by 2.5
morganroux Apr 16, 2026
59c92cb
fix(live): treat input transcription as user message
wuliang229 Apr 17, 2026
c0d6dbd
fix(live): mark all agents' Event as from other agents
wuliang229 Apr 17, 2026
af2c30f
chore: merge release v1.31.0 to main
Jacksunwei Apr 17, 2026
1b89fc0
test: adds missing unit tests for example_util (Issue #4623)
BowedMars2 Apr 17, 2026
8ad2d8e
feat: Add an option to prevent the SaveFilesAsArtifactsPlugin from at…
mimisun Apr 17, 2026
529af89
feat: add native OpenTelemetry agentic metrics
google-genai-bot Apr 17, 2026
fe1055f
chore: Update telemetry owner
jawoszek Apr 17, 2026
db51038
chore: Add readable message on import errors
google-genai-bot Apr 17, 2026
15c4ab7
feat(live): Add save_live_blob query parameter to /run_live endpoint
wuliang229 Apr 17, 2026
ea0bf27
refactor(tests): Refactor tests to explicitly handle JSON_SCHEMA_FOR_…
xuanyang15 Apr 17, 2026
497f3dd
fix: resolve test failures from main cherry-picks on v2 branch
GWeale Apr 17, 2026
809d7e5
Add hitl plus multi-trigger scenario
swapydapy Apr 17, 2026
71b96c1
fix(workflow): resolve mypy type errors across workflow package
GWeale Apr 17, 2026
2af93fd
use @node decorator to cleanup dynamic node tests
swapydapy Apr 17, 2026
b525328
fix(workflow): replace broad except Exception with specific exception…
GWeale Apr 17, 2026
61d0ffd
chore(workflow): Remove stale TODO about cascading cancellation
DeanChensj Apr 17, 2026
3cdb5f1
fix(workflow): enforce output_schema validation in BaseNode.run()
GWeale Apr 17, 2026
72de38b
fix(telemetry): fix workflow tracing context propagation and exporter
Jacksunwei Apr 19, 2026
a33bb09
Fix adk web trace view
wyf7107 Apr 19, 2026
47deb94
fix: enable Python 3.10 support for workflow engine
GWeale Apr 17, 2026
3ca6071
chore(version): Update version to 2.0.0b1 for beta release
Jacksunwei Apr 20, 2026
0b3d7c4
fix(events): Support camelCase in RequestInput
xuanyang15 Apr 20, 2026
520333d
docs: Simplify AGENTS.md by delegating to adk-style skill
Jacksunwei Apr 20, 2026
2be47e1
test(events): Prevent accidental introduction of snake_case keys in E…
xuanyang15 Apr 20, 2026
ba1ed3a
refactor(skills): Split adk-style skill for better AI triggering
Jacksunwei Apr 20, 2026
365fdda
refactor(cli): Convert absolute imports to relative imports
Jacksunwei Apr 20, 2026
c560c84
feat(samples): Add GitHub OAuth sample to demonstrate token requests
boyangsvl Apr 20, 2026
09119c4
fix(deps): Declare packaging dep and align ValidationError import
GWeale Apr 20, 2026
e1e12cd
fix: bump Vertex SDK version
sasha-gitg Apr 20, 2026
2b54c4a
fix: block RCE vulnerability via nested YAML configurations in ADK
sasha-gitg Apr 21, 2026
1e857ee
fix: Disable bound token for mcp_tool
google-genai-bot Apr 17, 2026
1db4a6f
chore(release): align manifest with released v2.0.0a2
sasha-gitg Apr 9, 2026
f3c07f6
chore(release/v2-candidate): release 2.0.0-alpha.3 (#5233)
Jacksunwei Apr 9, 2026
8275f00
chore: update last-release-sha for next v2 release
Jacksunwei Apr 9, 2026
84e792f
docs(readme): Update documentation to reflect transition to beta
Jacksunwei Apr 21, 2026
f5c4118
fix(tests): update model to gemini-3.1-pro-preview and handle empty s…
sasha-gitg Apr 21, 2026
02ffd98
chore: update release manifest to 2.0.0-beta.0
sasha-gitg Apr 21, 2026
6d3ed9f
docs(skills): fix broken refs in adk-workflow skill
freddypatota Jun 10, 2026
4a61d38
docs(skills): add observability caveat to LlmAgent output types
freddypatota Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
25 changes: 25 additions & 0 deletions .agents/skills/adk-architecture/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
name: adk-architecture
description: ADK architectural knowledge — graph orchestration, resumption, execution flow, node contracts, observability, and LLM context orchestration. Use this skill whenever you need to understand the architecture, event flow, or state management of the ADK system, or when designing or modifying core components. Triggers on "how does X work", "design of", "architecture of", "event flow", "resumption state", "checkpoint", "BaseNode", "NodeRunner".
---

# ADK Architecture Guide

## Core Interfaces (references/interfaces/)
- [BaseNode](references/interfaces/base-node.md) — node contract, output/streaming, state/routing, HITL, configuration
- [Workflow](references/interfaces/workflow.md) — graph orchestration, dynamic nodes (tracking/dedup/resume), transitive dynamic nodes, interrupt propagation, design rules for node authors
- [Runner](references/interfaces/runner.md) — The public interface for executing workflows and agents. Documents entrance methods `run` and `run_async`.
- [Agent](references/interfaces/agent.md) — Blueprint defining identity, instructions, and tools. Documents that `run` is the preferred entrance method.
- [BaseAgent](references/interfaces/base-agent.md) — Base class for all agents. Defines the contract for subclassing with `_run_impl` as the primary override point.
- [Event](references/interfaces/event.md) — Core data structure for state reconstruction and communication. Represents a conversation turn or action.

## Key Principles (references/principles/)
- [API Principles](references/principles/api-principles.md) — stability, backward compatibility, and self-containment. Use when making design choices that affect the public API surface.

## Runtime Knowledge (references/architecture/)
- [Context](references/architecture/context.md) — 1:1 node-context mapping, InvocationContext singleton, property reference
- [NodeRunner](references/architecture/node-runner.md) — two communication channels, execution flow, output delegation. Internal runtime details.
- [Runner Roles](references/architecture/runner-roles.md) — Runner vs NodeRunner vs Workflow separation. Explains why they are separate to avoid deadlocks.
- [Checkpoint and Resume](references/architecture/checkpoint-resume.md) — HITL lifecycle, `rerun_on_resume`, `run_id`
- [Observability](references/architecture/observability.md) — span-on-Context design, NodeRunner integration, correlated logs, metrics
- [LLM Context Orchestration](references/architecture/llm-context-orchestration.md) — relationship between events and LLM context, task delegation translation, branch isolation. Use when modifying event processing, context preparation for LLMs, or debugging context pollution issues.
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Checkpoint and Resume Lifecycle

HITL (Human-in-the-Loop) follows this pattern:

1. **Interrupt**: Node yields an event with `long_running_tool_ids`.
Each ancestor propagates the interrupt upward via `ctx.interrupt_ids`.
2. **Persist**: Only the leaf node's interrupt event is persisted to
session. Workflow sets `ctx._interrupt_ids` directly (no internal
event needed).
3. **Resume**: User sends a `FunctionResponse` message. The Runner
scans session events to find the matching `invocation_id`, then
reconstructs node state from persisted events.
4. **Continue**: The interrupted node receives the FR and continues
execution. Downstream nodes receive the resumed node's output.

## run_id on resume

Resumed nodes reuse the same `run_id` from the original
execution. From the node's perspective, the execution never paused
— events before and after the resume share the same run_id.

Fresh dispatches (first run, loop re-trigger) get a new run_id.

## Resume behavior by `rerun_on_resume`

A node with multiple interrupt IDs may receive partial FRs (only
some resolved). The behavior depends on `rerun_on_resume`:

**`rerun_on_resume=True`** (Workflow, orchestration nodes):

| FRs received | Status | Behavior |
|---|---|---|
| Partial | PENDING | Re-execute immediately with partial `resume_inputs`. Node handles remaining interrupts internally (e.g., Workflow dispatches resolved children, keeps unresolved as WAITING). |
| All | PENDING | Re-execute with all `resume_inputs`. |

This is critical for Workflow — when one child's FR arrives, it
re-runs immediately to dispatch that resolved child. It doesn't
wait for all children's FRs.

**`rerun_on_resume=False`** (leaf nodes, simple HITL):

| FRs received | Status | Behavior |
|---|---|---|
| Partial | WAITING | Stay waiting. Need all FRs. |
| All | COMPLETED | Auto-complete. Output = aggregated `resolved_responses`. No re-execution. |

## Resume with prior output and interrupts

A node can produce output AND interrupt in the same execution (e.g.,
a Workflow where child A completes with output and child B interrupts).
On resume:

- Some interrupt IDs are resolved (provided in `resume_inputs`)
- Remaining interrupt IDs carry forward via `prior_interrupt_ids`
- Prior output carries forward via `prior_output`
- NodeRunner pre-populates ctx with these values before re-executing

```python
runner = NodeRunner(
node=node, parent_ctx=ctx,
run_id=prior_run_id, # reuse
prior_output=cached_output,
prior_interrupt_ids={'fc-2'}, # still unresolved
)
child_ctx = await runner.run(
node_input=input,
resume_inputs={'fc-1': response},
)
```
104 changes: 104 additions & 0 deletions .agents/skills/adk-architecture/references/architecture/context.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Context

## Architecture

The runtime uses two scoping objects:

- **InvocationContext** — singleton per invocation. Holds shared
state (session, services, event queue) accessible by all nodes.
Pydantic model at `agents/invocation_context.py`.
- **Context** — one per node execution. Holds per-node results
(output, route, interrupt_ids) and provides the API surface for
node code. At `agents/context.py`.

Every Context holds a reference to the same InvocationContext
(`_invocation_context`). Service access (artifacts, memory, auth)
is delegated through it.

```
Root Context ← created by Runner from IC
└── Context [runner.node] ← the root node (e.g., Workflow)
├── Context [child_a] ← child node A
└── Context [child_b] ← child node B
└── Context [grandchild] ← nested child
```

The Runner creates `root_ctx = Context(ic)` as the tree root and
passes it as `parent_ctx` to `NodeRunner(node=self.node)`. The
root Context has no node_path or run_id — it exists solely
as the parent for the Runner's root node. All Contexts in the tree
share the same InvocationContext singleton.

InvocationContext contents:

- `session`, `agent`, `user_content`
- `invocation_id`, `app_name`, `user_id`
- Services: `artifact_service`, `memory_service`, `credential_service`
- `run_config`, `live_request_queue`
- `process_queue` — shared event queue consumed by the main loop

## 1:1 node-context mapping

Every node execution gets its own Context instance. The relationship
is strictly 1:1: one node, one Context. The Context tree mirrors the
node execution tree.

**NodeRunner** creates the child Context from the parent's Context
via `_create_child_context()`. The child inherits:

- `_invocation_context` — same singleton (shared session, services)
- `node_path` — parent path + node name (e.g., `wf/child_a`)
- `run_id` — unique per execution (reused on resume)
- `event_author` — inherited from parent
- `schedule_dynamic_node_internal` — inherited from parent

The child does NOT inherit output, route, or interrupt_ids — those
are per-execution results, starting fresh (unless resume carries
forward `prior_output` / `prior_interrupt_ids`).

## Node result properties

These properties on Context are the primary mechanism for
communicating results between nodes:

- **`ctx.output`** — the node's result value. Set once per
execution. Can be set via `yield value` (framework sets it) or
`ctx.output = X` directly. Second write raises `ValueError`.
- **`ctx.route`** — routing value for conditional edges. Set
independently of output. Workflow-specific.
- **`ctx.interrupt_ids`** — accumulated interrupt IDs. Read-only
for user code. Set by framework when node yields an Event with
`long_running_tool_ids`.

Output and interrupts can coexist — the orchestrator's `_finalize`
decides what to propagate. The orchestrator reads these properties
after the child node finishes.

## Class hierarchy

```
ReadonlyContext (agents/readonly_context.py)
└── Context (agents/context.py)
```

**ReadonlyContext** — read-only view used in callbacks and plugins:
- `user_content`, `invocation_id`, `agent_name`
- `state` (returns `MappingProxyType` — immutable view)
- `session`, `user_id`, `run_config`

**Context(ReadonlyContext)** — full read-write context for node
execution. Extends ReadonlyContext with mutable state, node results,
workflow metadata, and service methods. See property reference below.

## Property reference

| Category | Properties |
|---|---|
| State & actions | `state` (mutable `State`), `actions` (EventActions) |
| Node results | `output`, `route`, `interrupt_ids` (read-only) |
| Workflow | `node_path`, `run_id`, `triggered_by`, `in_nodes`, `resume_inputs`, `retry_count`, `event_author` |
| Methods | `run_node()`, `get_next_child_run_id()` |
| Artifacts | `load_artifact()`, `save_artifact()`, `list_artifacts()` |
| Memory | `search_memory()`, `add_session_to_memory()`, `add_events_to_memory()`, `add_memory()` |
| Auth | `request_credential()`, `load_credential()`, `save_credential()` |
| Tools | `request_confirmation()`, `function_call_id` |
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# LLM Context Orchestration from Events

## Core Principle

In ADK, there is a clear distinction between the **Event Stream** and the **LLM Context**:

- **Events are the Ground Truth**: They are immutable records of what has happened in a session (user messages, model responses, tool calls, results). They serve as the audit log and persistence state.
- **LLM Context is an Orchestrated View**: The context passed to an LLM is not merely a dump of the raw event log. It is a carefully orchestrated view, filtered and transformed to match the specific role, task, and branch of the agent currently executing.

## Orchestration Strategies

The framework orchestrates the translation of events into LLM context using several strategies:

### 1. Task Delegation Translation

When a coordinator agent delegates a task to a sub-agent (Task Agent) via a tool call:

- **Source Event**: Coordinator calls a tool like `request_task_<sub_agent_name>(args...)`.
- **Orchestrated Context**:
- The arguments in the `request_task_<sub_agent_name>` tool call are extracted and placed in the **System Instruction (SI)** or treated as the core instruction for the sub-agent.
- The first user message presented to the sub-agent is synthesized to represent the goal (e.g., "Finish task of [sub_agent_name] with arguments [args]").
- **Goal**: Isolate the sub-agent from the coordinator's full history and give it a crisp, clear starting point.

### 2. Branch Isolation

In complex workflows with parallel execution:

- **Source Events**: Events from all nodes and branches are stored in the same session chronologically.
- **Orchestrated Context**: The framework filters events by `branch` (e.g., `node:path.name`). An agent only sees events that belong to its own execution path.
- **Goal**: Prevent cross-node event pollution and ensure deterministic behavior in isolated tasks.

### 3. History Trimming and Compaction

To prevent context window overflow and stale instruction loops:

- **Source Events**: A long history of retries, tool calls, and interactions.
- **Orchestrated Context**: The framework may trim older events or summarize them (event compaction). In task mode, it might keep only the essential setup events, ignoring stale retry loops that would otherwise confuse the LLM.
- **Goal**: Maintain a focused and efficient context window for the LLM.

## Summary

The relationship is one of **Source vs. View**. Events are the source of truth for the session, while LLM context is a highly orchestrated view of that truth, tailored for the active agent.
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# NodeRunner

NodeRunner is the per-node executor. It drives `BaseNode.run()`,
creates the child Context, enriches events, and writes results
to ctx.

## Two communication channels

The runtime has two distinct channels for data flow:

- **Context** — parent ↔ child communication. Output, route, state,
resume_inputs, and interrupt_ids flow through ctx. The orchestrator
reads ctx after the child completes to decide what to do next.
- **Event** — persistence and streaming. Events are appended to the
session and streamed to the caller. They carry message, state
deltas, function calls, and interrupt markers.

A node writes to **ctx** to communicate with its parent. A node
yields **Events** to persist data and stream messages to the user.

## Execution flow

```
Orchestrator
├─ NodeRunner(node=child, parent_ctx=ctx)
│ │
│ ├─ _create_child_context() → child Context
│ ├─ _execute_node() → iterate node.run()
│ │ ├─ _track_event_in_context() → write to ctx
│ │ └─ _enqueue_event() → enrich + persist
│ ├─ _flush_output_and_deltas() → emit deferred output
│ └─ return child ctx
└─ reads ctx.output, ctx.route, ctx.interrupt_ids
```

1. **Create child Context** — inherits `_invocation_context` (shared
singleton), builds `node_path` from parent, assigns `run_id`.

2. **Iterate `node.run()`** — for each yielded Event:

**Track in context** — `_track_event_in_context` writes output,
route, and interrupt_ids from the event to ctx (source of truth).

**Enrich** — `_enrich_event` stamps metadata before persistence:
- `event.author` — node name (or `event_author` override)
- `event.invocation_id` — from InvocationContext
- `event.node_info.path` — full path (e.g., `wf/child_a`)
- `event.node_info.run_id` — unique per execution
- `event.node_info.output_for` — ancestor paths when
`use_as_output=True`

**Flush deltas** — for non-partial events, `_flush_deltas` moves
pending state/artifact deltas from `ctx.actions` onto the event
before enqueueing.

**Enqueue** — `ic.enqueue_event` puts the event on the shared
process queue for session persistence.

3. **Flush deferred output** — if `ctx.output` was set directly
(not via yield), `_flush_output_and_deltas` emits the output
Event after `_run_impl` returns. Bundles any remaining
state/artifact deltas onto the same Event.

4. **Return child ctx** — the orchestrator reads `ctx.output`,
`ctx.route`, and `ctx.interrupt_ids`.

## Output delegation (`use_as_output`)

When a child is scheduled with `use_as_output=True`, its output
Event also counts as the parent's output. NodeRunner:

- Sets `ctx._output_delegated = True` on the parent
- Skips emitting the parent's own output Event
- Stamps `event.node_info.output_for` with ancestor paths
Loading
Loading