Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
229 commits
Select commit Hold shift + click to select a range
2d824e3
ci: run the unit tests that CI currently skips
GWeale Sep 2, 2026
b2c7664
fix: honor save_live_blob when caching live user audio
GWeale Sep 2, 2026
9fcd97e
docs: Add node as tool developer unit guide and sample docs
DeanChensj Sep 2, 2026
65b382d
refactor: extract live flow logic from base_llm_flow into a dedicated…
DeanChensj Sep 2, 2026
07b1173
fix: end a live session when the client closes the request queue, ins…
DeanChensj Sep 2, 2026
7d7bac0
fix: microsecond-safe DatabaseSessionService on SQL Server (mssql)
anmolg1997 Sep 2, 2026
e2a213f
feat: Add ignore_args option to tool trajectory evaluation
rohityan Sep 2, 2026
4769c88
chore: fix strict mypy errors in transfer_to_agent_tool
GWeale Sep 2, 2026
ed2fd00
ci: gate publishing on the release branch's checks
GWeale Sep 2, 2026
ac96686
docs(agents): state the lazy-import rule the comment only pointed at
GWeale Sep 2, 2026
f6a0901
refactor: move the resume decision out of BaseLlmFlow into _resume_utils
DeanChensj Sep 3, 2026
328ecb9
fix: validate function call author before resuming auth-gated tool calls
prasanna8585 Sep 3, 2026
0043044
fix(cli): sync the Agent Engine class-method catalogue with its source
GWeale Sep 3, 2026
2e5bb94
refactor: split tool call handling into prepare and execute phases
DeanChensj Sep 3, 2026
c506ddf
fix(callables): extract unified CallableSpec and resolve doc and unwr…
DeanChensj Sep 3, 2026
f73bb37
fix: route interleaved interactions function-call deltas by step index
chelsealong Sep 3, 2026
6364060
fix(telemetry): End the inference span at the finish reason, not at t…
RKest Sep 3, 2026
4cd8aa4
fix: close a task-mode delegation when the remote agent finishes
GWeale Sep 3, 2026
408f57d
fix: populate model_version on AnthropicLlm responses
omar-infinitusai Sep 3, 2026
cc5985a
fix: retry once on 429 in VertexAiSessionService
mahasarabesh Sep 3, 2026
cb0eb22
fix(mcp): skip summarization when a tool call pauses for confirmation
wukath Sep 3, 2026
cd0dddc
fix: stop silently dropping sampling settings on interactions API
GWeale Sep 3, 2026
6e59663
fix: guard malformed tool call argument JSON in LiteLlm response parsing
GWeale Sep 3, 2026
856acf2
feat(mcp): support MCP SDK 2.x alongside 1.x
wukath Sep 3, 2026
aef3a9c
fix: skip summarization for terminal A2A task states
surajksharma07 Sep 3, 2026
06be666
test(cli): drop the credential dependency from the Agent Engine catal…
GWeale Sep 3, 2026
75ae2db
fix: treat an error event without function calls as a final response
DeanChensj Sep 3, 2026
080d5e7
fix: cancel the invocation when a sync run() generator is closed early
CTWalk Sep 3, 2026
864914b
fix: keep the original event id when reloading a Vertex session
GWeale Sep 3, 2026
c8bc126
fix!: raise SessionNotFoundError when appending to an unknown session
GWeale Sep 3, 2026
9c9b81a
fix: report a metric that never ran as not evaluated, not as failed
GWeale Sep 3, 2026
89777c1
refactor: Decompose functions.py into internal modular components (_t…
DeanChensj Sep 4, 2026
e421017
fix: initialize Anthropic client off event loop
sylvesterkaczmarek Sep 4, 2026
7bffb0a
fix: handle failed inference cases gracefully in GEPA pipeline
thoang3 Sep 4, 2026
c7ffcfa
fix: invalidate import caches during agent module validation
chethanuk Sep 4, 2026
30e0a26
chore(telemetry): Refactor functional golden scenarios into multiple …
google-genai-bot Sep 4, 2026
852b575
refactor(telemetry): give every accumulating scope one shape
google-genai-bot Sep 4, 2026
44e0b2a
fix: Update max_llm_calls validation to reject values greater than or…
joefernandez Sep 4, 2026
0b75a66
fix(flows): propagate contextvars set in before_tool_callback to the …
GWeale Sep 4, 2026
c7ef8cf
docs: document replacing a failed tools listing via get_tools
a2105z Sep 5, 2026
25f5214
fix: log an error when a model returns multiple candidates
svfat Sep 5, 2026
a119dd7
fix: make state serialization fallback resilient per value
ALDRIN121 Sep 5, 2026
20780ac
fix: make state serialization fallback resilient per value
google-genai-bot Sep 6, 2026
b018062
fix: default AgentCardBuilder capabilities to streaming=True
chelsealong Sep 6, 2026
c4ca0df
Merge remote-tracking branch 'upstream/main' into vzgpt-core
lwangverizon Sep 8, 2026
c274ac3
fix!: rerun a failed node on resume instead of replaying it as complete
GWeale Sep 8, 2026
fe30ebb
fix(a2a): require https for a non-loopback agent card URL
GWeale Sep 8, 2026
13376d4
fix(tools): import the two annotation names that are referenced but u…
GWeale Sep 8, 2026
6f2ee92
fix!: confine GCS tool local file paths to a configured root
GWeale Sep 8, 2026
ae30506
fix(flows): keep code execution going instead of reporting no content
GWeale Sep 8, 2026
a5d6238
fix(models): stop a content-free thought signature from wedging a ses…
google-genai-bot Sep 8, 2026
da22e43
fix: refuse a tool call whose arguments a broken stream cut short
GWeale Sep 8, 2026
e4c8994
fix(auth): declare that AuthHandler.generate_auth_uri can return None
GWeale Sep 8, 2026
6762652
docs(plugins): say what the reflect-and-retry failure counter's lock …
GWeale Sep 8, 2026
4b26bba
fix(redis): match app_name and user_id literally when listing sessions
GWeale Sep 8, 2026
0a12027
fix(artifacts): give concurrent gcs artifact saves distinct versions
GWeale Sep 8, 2026
b89037d
docs: add unit guides for A2A, skills and the execution backends
GWeale Sep 8, 2026
668e024
fix: forward GenerateContentConfig.seed to LiteLLM
chelsealong Sep 8, 2026
65761fb
test: stop the SQLite timestamp regression test depending on the wall…
GWeale Sep 8, 2026
8fefa37
fix(flows): restrict agent transfer to the declared transfer targets
GWeale Sep 8, 2026
21c2fbd
fix(vmaas): cache the sandbox access token on the computer instance
GWeale Sep 8, 2026
939ff92
fix(plugins): keep a staticmethod a staticmethod when auto-tracing wr…
GWeale Sep 8, 2026
f277d91
feat(integrations): Add LiveKit runner for voice and telephony
allen-stephen Sep 8, 2026
73803f4
fix: stop declaring dict value types to Google AI
GWeale Sep 8, 2026
22ba480
refactor: resolve an agent's model through an async accessor
xuanyang15 Sep 8, 2026
dcdd9b8
fix!: retry a nested workflow when a node inside it fails
GWeale Sep 8, 2026
d5129f3
fix(samples): read the knowledge agent data store from the environment
GWeale Sep 8, 2026
ea8609d
feat(tools): support FunctionNode auto-inference in NodeTool
DeanChensj Sep 9, 2026
64b5b9c
fix: Resolve scheduler leakage and use node.clone() in DynamicNodeSch…
DeanChensj Sep 9, 2026
0673f05
feat: generalize docker build and run for multicloud environments
raflFaisal Sep 9, 2026
6a811d2
docs: align callback contracts with runtime behavior
jaywang172 Sep 9, 2026
bfc46fe
test: add guard tests ensuring conftest does not mock packages or vizier
google-genai-bot Sep 9, 2026
6de43b0
fix: apply state_delta when resuming without a new_message
lwangverizon Sep 9, 2026
1b28de4
feat: add a2a_state_forwarding sample
Koichi73 Sep 9, 2026
e4f1700
fix: keep the tool filter and name prefix when cloning a skill toolset
GWeale Sep 9, 2026
903f37f
fix: defer local state/event mutation until Vertex append succeeds
chelsealong Sep 9, 2026
2880fbf
docs: correct the heading in the llms-full.txt pointer
GWeale Sep 9, 2026
b65be01
fix(bigquery): lazy-load Dataplex so BigQueryToolset imports without it
wukath Sep 9, 2026
75d84b1
fix(litellm): report malformed tool-call arguments instead of raising
GWeale Sep 9, 2026
5c59a73
feat(workflow): unwrap NodeTool in build_node and bind state in _Tool…
DeanChensj Sep 9, 2026
d7370e1
fix(mcp): report an api key auth scheme that declares no key location
GWeale Sep 9, 2026
54274cd
fix(flows): prune orphaned function calls on interrupted turns
DeanChensj Sep 9, 2026
73ab76d
fix: persist sandbox session state and add warning for static sandbox…
google-genai-bot Sep 9, 2026
dfc4b58
fix: mark a workflow's span failed when one of its nodes failed
GWeale Sep 9, 2026
e29ee23
fix: report an A2A stream that ends before the remote task finishes
GWeale Sep 9, 2026
83d966c
fix: trace tool calls under the agent, not under the model call
GWeale Sep 9, 2026
58b4fab
fix(live): screen live content that does not complete the turn
GWeale Sep 9, 2026
1414fac
fix(tools): stop ExampleTool crashing a live run that opens with no m…
GWeale Sep 9, 2026
4c2bafb
fix(cli): validate the test name on every dev server test endpoint
GWeale Sep 9, 2026
60d0a9b
fix: validate the detect_anomalies target data subquery
GWeale Sep 9, 2026
b22cfc4
fix(auth): report an auth scheme that carries no OAuth2 flows
GWeale Sep 9, 2026
63e918a
fix: run on_event callbacks for before_run early exits
jaywang172 Sep 9, 2026
3e1ae9f
fix: report the event fields a session backend cannot store
GWeale Sep 9, 2026
ffb5363
fix(models): keep the keys beside "result" in a Claude tool result
GWeale Sep 9, 2026
4b819ab
fix: stop a re-emitted output echo from reordering the replay sequence
chelsealong Sep 9, 2026
d9b57bf
chore(flows): extract model response finalizer to separate module
DeanChensj Sep 9, 2026
28116b8
refactor(agents): accept native BaseNode in LlmAgent tools
DeanChensj Sep 9, 2026
a9cf81f
fix(plugins): verify BigQuery table readiness once, not on every restart
GWeale Sep 10, 2026
2284c58
refactor(agents): accept native BaseNode in LlmAgent tools
google-genai-bot Sep 10, 2026
c79f60f
fix: stop background tools before the transfer delay
ehtesham-zahoor Sep 10, 2026
f449780
feat: stream partial function-call arguments across model adapters
FrigaZzz Sep 10, 2026
4c63c04
fix(mcp): keep resolving MCP 1.x by default
GWeale Sep 10, 2026
a39ab52
fix(flows): move before_tool_callback from prepare phase into per-too…
GWeale Sep 10, 2026
d15946e
fix(gcs): judge a local path by where it lands, not by whether it is …
GWeale Sep 10, 2026
39e4538
fix(flows): keep the streaming flags when after_model_callback replac…
Bruce-Yii Sep 10, 2026
cb7c469
fix: only load artifacts listed for the current session
google-genai-bot Sep 10, 2026
b3fe92b
fix: resolve deepcopy recursion in VertexAiCodeExecutor
Sep 10, 2026
6373f23
fix(agents): allow descriptionless BaseNode in LlmAgent tools
DeanChensj Sep 10, 2026
e143cce
ci: remove the green-checks gate from the release publish workflow
GWeale Sep 10, 2026
f439001
refactor(workflow): extract dynamic node execution from context to dy…
DeanChensj Sep 10, 2026
da10185
test: verify candidate_count is allowed on generate_content_config
claxman Sep 11, 2026
3699fad
fix: stop internal Agent Config subclassing from warning on plain imp…
chelsealong Sep 11, 2026
13ecc31
fix: match a Latin word embedded in unspaced-script text
LHMQ878 Sep 11, 2026
8aafa4e
fix: instruct models to format code for non-builtin sandbox executors
JesserHamdaoui Sep 11, 2026
fe9f9a3
refactor(workflow): unify run_id generation in DynamicNodeState
DeanChensj Sep 11, 2026
1c9b3f4
chore(release): sync version metadata to 2.9.0
GWeale Sep 11, 2026
f199858
fix: match tool response by name instead of assuming first part
Harshitmishra001 Sep 11, 2026
ba89707
fix(runners): ensure after_run plugin callback executes on early gene…
DeanChensj Sep 11, 2026
7d42b78
docs(agents): add BaseAgent unit guide
DeanChensj Sep 11, 2026
dd96b81
fix(sessions): stop get_user_state aliasing stored user state
GWeale Sep 11, 2026
ae0676a
ci: set release-please state from the last release tag
GWeale Sep 11, 2026
d64dcfa
fix(mcp): widen MCP bound to admit MCP 2.x
wukath Sep 11, 2026
5ae9271
refactor: name the errors the workflow engine raises
GWeale Sep 11, 2026
0cfe43b
fix: extract URL fragment key-value pairs as query params
saiprasanth-git Sep 11, 2026
0e85233
fix: request visible thoughts for Claude adaptive thinking
GWeale Sep 12, 2026
5e29872
fix: reject reserved path segments with slashes in validate_path_segment
chelsealong Sep 12, 2026
fed0e88
fix: join streamed reasoning into one thought part per block
benclarkeio Sep 12, 2026
f2fe475
fix: support openapi basic auth
aashnakunk Sep 12, 2026
7b246e0
fix: concatenate list values in deep_merge_dicts during parallel tool…
enjoykumawat Sep 12, 2026
c03683a
docs(agents): add Context unit guide
DeanChensj Sep 12, 2026
37aa730
fix(agents): trigger after_agent_callback on cancellation
DeanChensj Sep 12, 2026
460715b
refactor: Allow duplicate edges with disjoint routes in graph validation
DeanChensj Sep 13, 2026
6ac2e78
fix: concatenate list values in deep_merge_dicts during parallel tool…
google-genai-bot Sep 14, 2026
9f8db53
fix(sessions): restrict state schema validation bypass to recognized …
DeanChensj Sep 14, 2026
4d9abb5
fix(compaction): stop backwards prompt token scan at compaction boundary
DeanChensj Sep 14, 2026
3d3c1d9
feat(skills): add SkillDiscoveryMode to control how the skill catalog…
Sep 14, 2026
b1b0adc
refactor(live): consolidate live streaming models into live package
DeanChensj Sep 14, 2026
df55309
fix: preserve empty text and bytes in memory
baba9811 Sep 14, 2026
1538efe
fix: resolve agent transfers from the caller's declared targets
GWeale Sep 14, 2026
1579927
fix(sessions): report the redacted database URL when migration cannot…
GWeale Sep 14, 2026
6f301fc
feat(bigquery): add default_project_id and default_dataset_id to BigQ…
wukath Sep 14, 2026
0961ced
feat: add MongoDB toolset with vector and hybrid search
theshanbhag Sep 14, 2026
75bf1dc
docs(agents): add LlmAgent unit guide
DeanChensj Sep 14, 2026
e10a1be
fix: allow forwarding session ID as context_id for remote A2A agents
KrshnKush Sep 14, 2026
5a018c9
fix(mcp): only attach application default credentials over https
GWeale Sep 14, 2026
509a3b3
test: skip live after callbacks when invocation ends
jaywang172 Sep 14, 2026
82687cf
fix: use full query text and own logger in PreloadMemoryTool
chelsealong Sep 14, 2026
2fb34bc
fix(workflow): do not leak descendant isolation_scope to parent in _r…
DeanChensj Sep 14, 2026
692b40a
docs(workflow): index BaseNode unit guide in documentation
DeanChensj Sep 14, 2026
2c61b84
fix: require agent authorship before resume-dispatching a function call
dmcnelis Sep 14, 2026
8f1323a
fix(telemetry): make ADK importable on OpenTelemetry 1.39
GWeale Sep 14, 2026
198139e
refactor(workflow): move agent transfer loop into DynamicNodeScheduler
DeanChensj Sep 14, 2026
2e6ec4a
ADK changes
google-genai-bot Sep 15, 2026
b8de426
fix: reject the reserved segment 'user' as a session_id
MUHAMMEDHAFEEZ Sep 15, 2026
322e3bf
feat: add optional context_builder to RemoteA2aAgent
a2105z Sep 15, 2026
24b37e1
fix: validate and coerce function tool argument types
yuvrajangadsingh Sep 15, 2026
7f6e73e
fix(tests): remove redundant blank line in BQAA
xuanyang15 Sep 15, 2026
a6a4052
refactor(a2a): relocate RemoteA2aAgent implementation and tests to a2a
DeanChensj Sep 15, 2026
4e73b7d
fix: raise clear ImportError when VertexAiSearchTool bypass needs gcp
chelsealong Sep 15, 2026
dfc96d0
fix: stop probing for mTLS credentials on every MCP session
GWeale Sep 15, 2026
b39b905
refactor(apps): type App.root_agent as BaseNode
GWeale Sep 15, 2026
e93ff5b
fix: preserve file artifact creation timestamps
baba9811 Sep 15, 2026
a00a2a9
perf(sessions): add id DESC to events composite index to eliminate fi…
DeanChensj Sep 15, 2026
094012b
fix(integrations): hold sandbox and BigQuery session bindings in process
GWeale Sep 15, 2026
557643b
fix: stop returned sessions aliasing scoped state
VedanthB Sep 15, 2026
e9e3b97
refactor(sessions): drop the unused is_sqlite and is_postgresql param…
GWeale Sep 15, 2026
092a61d
refactor(flows): relocate tool execution components into flows/llm_fl…
DeanChensj Sep 15, 2026
3cf4ce2
fix: StreamingResponseAggregator drops/duplicates function calls in s…
brucearctor Sep 15, 2026
23b4d3b
refactor(flows): relocate prompt and instruction assembly into flows/…
DeanChensj Sep 15, 2026
a4d97b7
fix: stop the multimodal tool results plugin sending media twice
GWeale Sep 16, 2026
a0f3955
feat: add programmatic skill activation APIs to SkillToolset
wukath Sep 16, 2026
ac0133a
fix: update multimodal tool results plugin import for relocated tool …
DeanChensj Sep 16, 2026
d24c21c
refactor(flows): relocate extensions into flows/llm_flows/extensions
DeanChensj Sep 16, 2026
3983fa1
test: pin EvalCase session state injection into agent instructions
sgoel2be24-cyber Sep 16, 2026
bf2bc56
chore(flows): emit DeprecationWarning in legacy live audio shims
DeanChensj Sep 16, 2026
3a06a86
fix: prevent cubic backtracking in _strip_json_code_fence
thinhnallf Sep 16, 2026
0add163
feat(telemetry): Allow per-feature enabling of experimental telemetry
google-genai-bot Sep 16, 2026
9511479
fix(openapi): handle HTTP 401 in RestApiTool and recover stale OAuth2…
google-genai-bot Sep 16, 2026
ce53a36
feat: add an opt-in unload_skill tool to SkillToolset
wukath Sep 16, 2026
a4a50a4
fix(eval): ignore UI-only InvocationEvent fields on eval case save
Anusha0501 Sep 16, 2026
9dbc2ae
fix: raise when evaluate or evaluate_eval_set evaluates zero cases
chelsealong Sep 16, 2026
768969d
fix(agents): accept the default hint in request_confirmation
GWeale Sep 16, 2026
df62e41
refactor(flows): relocate context and history processing into flows/l…
DeanChensj Sep 16, 2026
9b220e7
feat: add on_error handler to skill listing functions
Sep 16, 2026
47781d2
refactor(agents): move function call matching and branch stamping hel…
DeanChensj Sep 16, 2026
87ccdc7
fix(models): say how to reach a third-party model when a bare name mi…
GWeale Sep 17, 2026
ffdbd59
refactor(workflow): extract standalone cleanups ahead of static node …
DeanChensj Sep 17, 2026
55d47ae
fix: give each LocalEvalService its own default UserSimulatorProvider
GWeale Sep 17, 2026
fede561
feat(cli): auto-configure session and memory services on Agent Runtime
WilliamDenniss Sep 17, 2026
3f24d20
refactor(flows): introduce core subpackage and relocate fencing and f…
DeanChensj Sep 17, 2026
7ae1c9b
fix(flows): release a tool thread pool when its event loop closes
IronPan Sep 17, 2026
93f32d0
refactor(workflow): clean up obsolete mocks and duplicate workflow tests
DeanChensj Sep 17, 2026
c803f88
feat(samples): add ADK LlmAgent root with an AntigravityAgent sub-agent
haranrk Sep 17, 2026
79ac8cf
feat(samples): add AntigravityAgent root with an ADK LlmAgent sub-agent
haranrk Sep 17, 2026
5dbe1b9
feat(samples): add ADK Workflow with LlmAgent and AntigravityAgent nodes
haranrk Sep 17, 2026
2c465e5
fix(samples): approve built-in file tools in the antigravity_agent sa…
haranrk Sep 17, 2026
ea670c0
refactor: remove dead code, redundant checks, and inline imports in c…
DeanChensj Sep 17, 2026
3c5e3d0
refactor(flows): relocate instructions utils to prompt subpackage
DeanChensj Sep 17, 2026
4ff3cdc
refactor(skills): share the activated-skill write between the two loa…
wukath Sep 17, 2026
d99b23f
feat(context): add abort_signal support to InvocationContext and Context
DeanChensj Sep 17, 2026
cc912d5
feat: send the deferred service tier on interactions API requests
wyf7107 Sep 17, 2026
43b73e4
feat: add skill lifecycle modes and an active-skill cap to SkillToolset
wukath Sep 18, 2026
f8282da
refactor: deduplicate agent/runner lifecycle helpers and prevent in-p…
DeanChensj Sep 18, 2026
accb906
feat: drop an unloaded skill's instructions from later requests
wukath Sep 18, 2026
7babeb0
refactor(workflow): consolidate dynamic node execution into DynamicNo…
DeanChensj Sep 18, 2026
f33d492
refactor: unify output_schema routing and avoid duplicate validation
DeanChensj Sep 18, 2026
5bc9e8c
fix(telemetry): only drop the OTel event name on Agent Engine
RKest Sep 18, 2026
1d0daeb
fix(flows): hold a tool call that requires confirmation in the framework
GWeale Sep 18, 2026
42358b1
fix(telemetry): record only the function responses on a merged tool span
GWeale Sep 18, 2026
c7ae45a
docs(telemetry): name the real do_not_elide parameter
GWeale Sep 18, 2026
f5ef8df
perf(workflow): avoid redundant event scans in _apply_rewinds and Nod…
DeanChensj Sep 18, 2026
659e28f
fix(flows): only hold a tool call when its confirmation hook answers …
GWeale Sep 18, 2026
5791e11
fix(context): prevent deepcopy of active event loop in _AbortState
DeanChensj Sep 18, 2026
6189b2e
feat(tools): add `behavior` field to control Live non-blocking functi…
jazhang00 Sep 18, 2026
d69f995
docs: remove the 1.x breaking-changes callout from the README
GWeale Sep 18, 2026
85e0868
fix: reject num_samples=0 in JudgeModelOptions at construction time
gaurav-gandhi-2411 Sep 18, 2026
220acfd
perf(sessions): cache TypeAdapter in State and support key iteration
DeanChensj Sep 18, 2026
52b247e
fix(sessions): avoid redundant temp state processing in append_event …
DeanChensj Sep 18, 2026
86ea33d
fix(mcp): rebuild a session the server reports it no longer holds
sachiantany Sep 18, 2026
f938abd
feat: add an EPHEMERAL skill lifecycle that lasts one turn
wukath Sep 18, 2026
a2a2f66
fix(core): stop executing code found in the model's private reasoning
GWeale Sep 18, 2026
48baf49
refactor: unify output_schema routing and avoid duplicate validation
google-genai-bot Sep 18, 2026
3e3d1dc
feat: expose serving tier via `RunConfig.service_tier`
wyf7107 Sep 18, 2026
6605031
chore(workflow): remove legacy private helpers only referenced by obs…
DeanChensj Sep 18, 2026
665ec98
refactor: extract tool-resolution steps into tool_request_processors
DeanChensj Sep 18, 2026
3f4bb8f
fix(events): restore _BranchPath.parent helper property
DeanChensj Sep 19, 2026
0caecd2
fix: do not match dollar-brace or escaped patterns in instructions
zhoufengen Sep 19, 2026
d57c84f
refactor: unify BaseLlmFlow._call_llm_async onto _with_caller_context
DeanChensj Sep 19, 2026
6747f6b
chore: sync vzgpt-core with upstream skill lifecycle support
lwangverizon Sep 20, 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
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,13 @@ When `ctx.run_node()` is called, the scheduler checks three cases:
- All resolved → re-execute with `resume_inputs` from the
resolved function responses.

4. **Agent Transfer** — if the child node is an agent that requests an
agent handoff (`child_ctx.actions.transfer_to_agent`), the scheduler
drives the sequential transfer loop. It resolves the target agent and
parent context, delegates single-step execution to the target context's
owning scheduler, and preserves output delegation (`use_as_output`)
when execution returns to the invoking context.

State reconstruction is **lazy**: the scheduler scans session events
only on the first `ctx.run_node()` call for a given path, not
upfront. This avoids scanning for dynamic nodes that won't be
Expand Down
2 changes: 1 addition & 1 deletion .github/.release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "2.8.0"
".": "2.9.0"
}
2 changes: 1 addition & 1 deletion .github/release-please-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,5 +57,5 @@
]
}
},
"last-release-sha": "4d0d63c74cf161f90ef33c7b310b6fd6641d3249"
"last-release-sha": "b65be0155cd68b849809b9a13dc1eda8e43474f6"
}
75 changes: 68 additions & 7 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,19 @@

name: Continuous Integration

# Release branches are listed alongside the development branches because a
# release is cut to its own branch and published from there, so a branch left
# out here ships without its tests ever having run.
on:
push:
branches: [main, v1]
branches: [main, v1, 'release/**']
paths:
- '**.py'
- '.pre-commit-config.yaml'
- 'pyproject.toml'
- 'tests/**'
pull_request:
branches: [main, v1]
branches: [main, v1, 'release/**']
paths:
- '**.py'
- '.pre-commit-config.yaml'
Expand Down Expand Up @@ -179,10 +182,7 @@ jobs:

- name: Run unit tests with pytest
run: |
uv run pytest tests/unittests \
-n auto \
--ignore=tests/unittests/artifacts/test_artifact_service.py \
--ignore=tests/unittests/tools/google_api_tool/test_googleapi_to_openapi_converter.py
uv run pytest tests/unittests -n auto

# 3b. Dual-version A2A coverage: This job pins a2a-sdk to 0.3.x and
# runs only the A2A-related tests, so the a2a/_compat.py shim stays
Expand Down Expand Up @@ -232,5 +232,66 @@ jobs:
uv pip install --reinstall-package a2a-sdk 'a2a-sdk>=0.3.4,<0.4'
uv pip list
uv run pytest tests/unittests/a2a \
tests/unittests/agents/test_remote_a2a_agent.py \
tests/unittests/integrations/agent_registry/test_agent_registry.py

# 3c. Dual-version MCP coverage: the pin admits both SDK majors, but the lock
# resolves 1.x, so nothing else here ever exercises 2.x. This job reinstalls
# mcp 2.x and re-runs the MCP tests, keeping the dependencies seam verified
# against the major it is not resolved against by default.
# TODO: Remove this 2.x re-run once mcp 1.x support is dropped.
unit-test-mcp-v2:
name: MCP v2 Tests (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: ${{ matrix.python-version }}

- name: Install the latest version of uv
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
with:
enable-cache: true

- name: Set the dependency resolution cutoff
# PyPI uploads a release's wheels one platform at a time, so resolving
# mid-upload can select a version whose wheel for this interpreter does
# not exist yet and fail the install. Skip the last hour of releases.
run: echo "UV_EXCLUDE_NEWER=$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_ENV"

- name: Install dependencies
run: |
uv venv .venv
source .venv/bin/activate
uv sync --extra test $SKIP_PACKAGE_FLAGS

- name: List installed packages (before reinstall)
run: uv pip list

- name: Run MCP tests against mcp v2
# --no-sync, or uv re-syncs the environment to uv.lock first and puts
# the locked 1.x back, leaving this job re-testing the major the job
# above already covers. The version assert makes that failure loud
# instead of a green run that proved nothing.
run: |
uv pip install --reinstall-package mcp 'mcp>=2,<3'
uv pip list
uv run --no-sync python -c "
import importlib.metadata as m
version = m.version('mcp')
assert version.startswith('2.'), f'expected mcp 2.x, got {version}'
print('testing against mcp', version)
"
uv run --no-sync pytest tests/unittests/tools/mcp_tool \
tests/unittests/tools/test_load_mcp_resource_tool.py \
tests/unittests/telemetry/test_spans.py
56 changes: 56 additions & 0 deletions .github/workflows/release-cut.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,14 @@ jobs:
fi

# Action: CUT NEW RELEASE
# Full history and tags, so the step below can resolve the last release.
- name: Checkout base ref (Cut)
if: inputs.action == 'cut'
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: ${{ inputs.commit_sha || steps.config.outputs.base_ref }}
token: ${{ secrets.RELEASE_PAT }}
fetch-depth: 0

- name: Check for existing candidate branch (Cut)
if: inputs.action == 'cut'
Expand All @@ -93,6 +95,60 @@ jobs:
git push origin "$CANDIDATE_BRANCH"
echo "Created and pushed branch: $CANDIDATE_BRANCH"

# The base branch only learns the released version from a merge-back that
# a maintainer has to land by hand, so it can sit behind for weeks. A
# stale copy makes the next release reuse a published version and rebuild
# a changelog that already shipped, so derive both from the last tag.
- name: Set release-please state from the last release tag (Cut)
if: inputs.action == 'cut' && inputs.branch == 'main'
env:
BASE_REF: ${{ steps.config.outputs.base_ref }}
CANDIDATE_BRANCH: ${{ steps.config.outputs.candidate_branch }}
CONFIG_FILE: ${{ steps.config.outputs.config_file }}
GH_TOKEN: ${{ secrets.RELEASE_PAT }}
MANIFEST_FILE: ${{ steps.config.outputs.manifest_file }}
run: |
set -euo pipefail
git fetch --quiet --tags origin "$BASE_REF"

# The || true keeps a repo with no matching tag out of pipefail, so the
# empty case below is reachable.
LAST=$(git tag --list 'v[0-9]*' | sed 's/^v//' \
| grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort --version-sort | tail -1 || true)
HAVE_VERSION=$(jq -r '.["."]' "$MANIFEST_FILE")

# This step only ever moves the state forward; anything else it leaves
# alone, so it can correct a release but never block one.
if [ -z "$LAST" ]; then
echo "::warning::Found no release tag, so the release-please state is unchecked."
exit 0
fi
NEWER=$(printf '%s\n%s\n' "$LAST" "$HAVE_VERSION" | sort --version-sort | tail -1)
if [ "$NEWER" != "$LAST" ]; then
echo "::warning::$MANIFEST_FILE says $HAVE_VERSION, ahead of the last release tag v$LAST. Leaving it alone."
exit 0
fi

# Where the last release branched off, which is what last-release-sha means.
SHA=$(git merge-base "origin/$BASE_REF" "v$LAST^{commit}")
HAVE_SHA=$(jq -r '."last-release-sha" // ""' "$CONFIG_FILE")
if [ "$HAVE_VERSION" = "$LAST" ] && [ "$HAVE_SHA" = "$SHA" ]; then
echo "$BASE_REF is already in sync with v$LAST"
exit 0
fi

echo "::warning title=Stale release-please state on $BASE_REF::$BASE_REF says $HAVE_VERSION / ${HAVE_SHA:0:8}, but the last release is $LAST / ${SHA:0:8}. Correcting the candidate branch; $BASE_REF itself still needs its merge-back."

jq --arg v "$LAST" '.["."] = $v' "$MANIFEST_FILE" > tmp.json && mv tmp.json "$MANIFEST_FILE"
jq --arg sha "$SHA" '. + {"last-release-sha": $sha}' "$CONFIG_FILE" > tmp.json && mv tmp.json "$CONFIG_FILE"

USER_JSON=$(gh api user)
git config user.name "$(echo "$USER_JSON" | jq -r '.login')"
git config user.email "$(echo "$USER_JSON" | jq -r '.id')+$(echo "$USER_JSON" | jq -r '.login')@users.noreply.github.com"
git add "$MANIFEST_FILE" "$CONFIG_FILE"
git commit -m "chore: pin release-please state to v$LAST"
git push origin "$CANDIDATE_BRANCH"

# Action: REGENERATE EXISTING PR
- name: Checkout existing candidate branch (Regenerate)
if: inputs.action == 'regenerate'
Expand Down
Loading
Loading