Conversation
Engine half of a coordinated pair with trustabl/agent-reliability-rules#86, on a branch of the same name so the rules-sync job resolves the matching pack rather than main. Neither half should merge alone — check-rules-sync.sh fails if they do. Mirrors google_adk/network.yaml into testdata/rules-fixture and adds cases to policyRuleCases, as TestPolicyRules_AllRulesCovered requires. ADK-003 covers Python; the TypeScript half was missing even though the pack ships TS rules (ADK-013, ADK-015, ADK-016, ADK-109). Three cases, following OAI-016's table: the bare fetch, the AbortSignal remediation, and a fetch whose options object is present but carries no timeout. The snippets use adk-js's options-object form (new FunctionTool({ ..., execute })) rather than the Python FunctionTool(fn) wrapper shape, which does not discover in TS — worth noting since the Python form reads as the obvious analogue.
|
Thanks @bradAGI. The fixture mirror is byte-identical to the YAML in trustabl/agent-reliability-rules#86, so I walked the cases against the predicate rather than trusting the shape. The unrelated blank-line removal in |
What the pair adds
ADK-003 covers the Python side of network timeouts; the TypeScript half was missing, even though the pack ships TS rules (ADK-013, ADK-015, ADK-016, ADK-109).
The composition ADK encourages makes the stall worse rather than better: inside a
SequentialAgenta stalled tool blocks every step after it, and inside aParallelAgentthe fan-out waits on its slowest branch. And the limit people reach for doesn't apply — ADK-108'smax_iterationsbounds how many times aLoopAgentgoes round, not how long one tool call may run.What this PR does
google_adk/network.yamlintotestdata/rules-fixture/.policyRuleCases, asTestPolicyRules_AllRulesCoveredrequires.await fetch(url){ signal: AbortSignal.timeout(15000) }{ method: "POST" }— options present, no deadlineThree cases, following OAI-016's own table; the third pins that the predicate checks for a deadline, not merely for an options argument.
One note on fixture shape. The snippets use adk-js's options-object form (
new FunctionTool({ ..., execute })). My first draft used the Python-stylenew FunctionTool(fn, {...})wrapper and nothing fired — including the pre-existing TS rules. Worth flagging because the PythonFunctionTool(fn)shape reads as the obvious analogue and isn't what the TS SDK does.Verification