Files
copilotkit__copilotkit/showcase/aimock/d6/ag2/hitl-in-app.json
Jordan Ritter c414fbad23 test(showcase): D6 per-integration aimock fixtures + shared narrowing
Refresh d6 fixtures across the rollout cohort: ag2, built-in-agent,
claude-sdk-{python,typescript}, crewai-crews, google-adk, langgraph-fastapi,
langgraph-typescript, langroid, llamaindex, mastra, ms-agent-{dotnet,python},
pydantic-ai, strands. Companion d4/{langgraph-typescript,mastra,ms-agent-dotnet}
chat.json refreshes. Add the missing ms-agent-python/gen-ui-custom.json
to bring the integration up to the standard pill set.

Also narrow aimock/shared/common.json's generic 'hello' fixture to
'hello world' so it no longer shadows D6 pills whose prompts contain
'hello' as a substring (e.g. langgraph-python headless-simple sends
'Say hello in one short sentence.'). 'hello world' is unused by any
current demo pill, so the fixture remains a manual-typing fallback
without poisoning fixture matching.

This is a mid-rollout snapshot — fixture coverage is uneven across
integrations and rides alongside the conveyance shims landed earlier
in this branch.
2026-05-29 16:16:12 -07:00

122 lines
5.3 KiB
JSON

{
"_meta": {
"description": "D6 fixtures for ag2 / hitl-in-app",
"sourceFile": "d5-all.json",
"created": "2026-05-21"
},
"fixtures": [
{
"match": {
"userMessage": "Issue a $50 refund to customer #12345",
"hasToolResult": false,
"context": "ag2"
},
"response": {
"toolCalls": [
{
"id": "call_d5_request_approval_001",
"name": "request_user_approval",
"arguments": "{\"message\":\"Issue a $50 refund to customer #12345.\",\"context\":\"Per the standard goodwill-credit policy for shipping delays.\"}"
}
]
}
},
{
"match": {
"userMessage": "Issue a $50 refund to customer #12345",
"hasToolResult": true,
"context": "ag2"
},
"response": {
"content": "Approved — processing the $50 refund to customer #12345 now."
}
},
{
"_comment": "hitl-in-app — refund pill (#12345), post-tool-result response. Content includes BOTH approve and reject key phrases so both test assertions can match (the test checks for a substring, not the full string). This avoids sequenceIndex which is fragile across aimock restarts.",
"match": {
"userMessage": "$50 refund to Jordan Rivera on ticket #12345",
"toolCallId": "call_d5_hitl_refund_12345_001",
"hasToolResult": true,
"context": "ag2"
},
"response": {
"content": "I am processing the $50 refund to Jordan Rivera on ticket #12345 now. The refund request was not approved by default — your explicit approval or rejection determines the outcome."
}
},
{
"_comment": "hitl-in-app — refund pill (#12345). 1st turn: emit request_user_approval tool call. The post-tool-result fixture above (with toolCallId + hasToolResult: true) is more specific and wins on the 2nd turn, so hasToolResult: false is NOT needed here — omitting it allows this fixture to match even in multi-pill conversations where prior tool results exist.",
"match": {
"userMessage": "$50 refund to Jordan Rivera on ticket #12345",
"turnIndex": 0,
"context": "ag2"
},
"response": {
"toolCalls": [
{
"id": "call_d5_hitl_refund_12345_001",
"name": "request_user_approval",
"arguments": "{\"message\":\"Issue a $50 refund to Jordan Rivera on ticket #12345 for the duplicate charge.\",\"context\":\"Ticket #12345 — duplicate-charge goodwill credit.\"}"
}
]
}
},
{
"_comment": "hitl-in-app — downgrade pill (#12346), 2nd turn. Same pattern as refund/escalate. Without this entry, the generic 'plan' catch-all in feature-parity.json hijacks the downgrade message.",
"match": {
"userMessage": "downgrade Priya Shah (#12346) to the Starter plan",
"toolCallId": "call_d5_hitl_downgrade_12346_001",
"hasToolResult": true,
"context": "ag2"
},
"response": {
"content": "Downgrade confirmed — Priya Shah (#12346) will move to the Starter plan effective next billing cycle."
}
},
{
"_comment": "hitl-in-app — downgrade pill (#12346). 1st turn: emit request_user_approval tool call. Specific userMessage substring takes precedence over the bare 'plan' fixture in feature-parity.json (which lives later in the load order). hasToolResult: false omitted so multi-pill conversations still match.",
"match": {
"userMessage": "downgrade Priya Shah (#12346) to the Starter plan",
"turnIndex": 0,
"context": "ag2"
},
"response": {
"toolCalls": [
{
"id": "call_d5_hitl_downgrade_12346_001",
"name": "request_user_approval",
"arguments": "{\"message\":\"Downgrade Priya Shah (#12346) to the Starter plan effective next billing cycle.\",\"context\":\"Ticket #12346 — voluntary downgrade per customer request.\"}"
}
]
}
},
{
"_comment": "hitl-in-app — escalate pill (#12347), post-tool-result response. Content includes both approve and reject key phrases.",
"match": {
"userMessage": "escalate ticket #12347 to the payments team",
"toolCallId": "call_d5_hitl_escalate_12347_001",
"hasToolResult": true,
"context": "ag2"
},
"response": {
"content": "Escalated ticket #12347 to the payments team for Morgan Lee. Not escalated by default — your explicit approval determines the outcome."
}
},
{
"_comment": "hitl-in-app — escalate pill (#12347). 1st turn: emit request_user_approval tool call. hasToolResult: false omitted so multi-pill conversations still match (the post-tool-result fixture above with toolCallId is more specific and wins on the 2nd turn).",
"match": {
"userMessage": "escalate ticket #12347 to the payments team",
"turnIndex": 0,
"context": "ag2"
},
"response": {
"toolCalls": [
{
"id": "call_d5_hitl_escalate_12347_001",
"name": "request_user_approval",
"arguments": "{\"message\":\"Escalate ticket #12347 to the payments team for Morgan Lee's stuck payment.\",\"context\":\"Ticket #12347 — payment stuck, needs payments-team triage.\"}"
}
]
}
}
]
}