Files
copilotkit__copilotkit/showcase/aimock/d6/strands/frontend-tools.json
Ran Shem Tov 620cf00974 fix(showcase): green strands + strands-typescript D6 cells via id-invariant fixtures + real multimodal assets
Strands mints UUID tool_call_ids for tool results (confirmed via the aimock
journal), so the langgraph-python toolCallId-keyed follow-up fixtures never
matched and the agent re-emitted the tool, looping (text-unstable) across
frontend-tools, gen-ui-agent, gen-ui-open, gen-ui-open-advanced,
gen-ui-headless-complete, reasoning-chain and the weather pills. Re-key the
affected multi-leg fixtures to the id- and thread-history-invariant
sequenceIndex pattern (as built-in-agent does), for both integrations.

Also:
- Add write_document poem/email/quantum fixtures for shared-state-streaming
  (was a stale single fixture that 404d).
- Strip content from reasoning-chain tool legs (content+toolCalls in one
  fixture is undefined behavior); reasoning rides toolCalls alone.
- Narrow the over-broad d4 summarize catch-all to "Summarize the sales
  pipeline" so it stops shadowing gen-ui-agent competitor pill; matches
  langgraph-python.
- Commit the real multimodal sample.png/sample.pdf (were git-LFS pointers
  the harness could not resolve).
2026-06-23 19:46:43 -07:00

98 lines
3.6 KiB
JSON

{
"_meta": {
"description": "D6 fixtures for strands / frontend-tools",
"sourceFile": "d5-all.json",
"copiedFrom": "built-in-agent",
"created": "2026-05-21"
},
"fixtures": [
{
"_comment": "frontend-tools 'Sunset' pill — 1st leg: emit change_background tool call. The Strands SDK mints its OWN UUID tool_call_ids for client-tool results (confirmed via the aimock journal: follow-up requests carry lastToolCallId=<uuid>, never the canonical call_d5_* id), so the post-tool follow-up cannot pin on toolCallId like langgraph-python does. AND the 3-pill probe runs all pills in ONE thread, so hasToolResult is permanently true after the first pill — gating on it makes pills 2/3 match their content leg on the first turn and never call the tool. We use sequenceIndex:0 (proven on built-in-agent, same Responses-API id situation): gate the 1st-leg to the FIRST match of this pill's userMessage; once exhausted the bare-userMessage post-tool fixture below catches the 2nd-leg request. Per-pill userMessage keeps the sequence counters independent.",
"match": {
"userMessage": "Make the background a sunset gradient",
"sequenceIndex": 0,
"context": "strands"
},
"response": {
"toolCalls": [
{
"id": "call_d5_change_background_sunset",
"name": "change_background",
"arguments": {
"background": "linear-gradient(135deg, #ff7e5f 0%, #feb47b 50%, #ff6b6b 100%)"
}
}
]
}
},
{
"_comment": "frontend-tools 'Sunset' pill — 2nd leg (post-tool-result). Catches the follow-up once the sequenceIndex:0 fixture above is exhausted (sequenceIndex >= 1 → its check fails → falls through here).",
"match": {
"userMessage": "Make the background a sunset gradient",
"context": "strands"
},
"response": {
"content": "Done — sunset gradient is live."
}
},
{
"_comment": "frontend-tools 'Forest' pill — 1st leg. Same sequenceIndex pattern as Sunset.",
"match": {
"userMessage": "deep green forest gradient",
"sequenceIndex": 0,
"context": "strands"
},
"response": {
"toolCalls": [
{
"id": "call_d5_change_background_forest",
"name": "change_background",
"arguments": {
"background": "linear-gradient(135deg, #0a3d2e 0%, #166534 50%, #059669 100%)"
}
}
]
}
},
{
"_comment": "frontend-tools 'Forest' pill — 2nd leg. Catches the follow-up after 1st-leg exhausts its sequenceIndex slot.",
"match": {
"userMessage": "deep green forest gradient",
"context": "strands"
},
"response": {
"content": "Done — forest gradient is live."
}
},
{
"_comment": "frontend-tools 'Cosmic' pill — 1st leg. Same sequenceIndex pattern.",
"match": {
"userMessage": "navy → magenta cosmic gradient",
"sequenceIndex": 0,
"context": "strands"
},
"response": {
"toolCalls": [
{
"id": "call_d5_change_background_cosmic",
"name": "change_background",
"arguments": {
"background": "linear-gradient(135deg, #1e3a8a 0%, #6b21a8 50%, #9333ea 100%)"
}
}
]
}
},
{
"_comment": "frontend-tools 'Cosmic' pill — 2nd leg.",
"match": {
"userMessage": "navy → magenta cosmic gradient",
"context": "strands"
},
"response": {
"content": "Done — cosmic gradient is live."
}
}
]
}