Skip to content

Commit 03ce685

Browse files
committed
feat(showcase-aimock): D6 fixtures for ag2, agno, crewai-crews, langroid,
llamaindex, mastra, pydantic-ai, spring-ai, strands, built-in-agent Adds per-integration D6 fixtures across 10 additional showcase integrations, completing coverage for all 18 integrations.
1 parent 89d8440 commit 03ce685

126 files changed

Lines changed: 7805 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
{
2+
"_meta": {
3+
"description": "D6 fixtures for ag2 / agent-config",
4+
"sourceFile": "d5-agent-config.ts",
5+
"owner": "d6-blitz-2026-05-26",
6+
"notes": "Authored to match D5 script + ag2 adapter request shape. 6 fixtures (3 knob pairs). Value-A and value-B responses must differ per knob; responseLength:detailed must exceed concise by >= 80 chars."
7+
},
8+
"fixtures": [
9+
{
10+
"_comment": "tone:professional — value-A. Formal register.",
11+
"match": {
12+
"userMessage": "tone:professional — introduce yourself per your config",
13+
"turnIndex": 0,
14+
"context": "ag2"
15+
},
16+
"response": {
17+
"content": "Good afternoon. I am your CopilotKit assistant, configured to operate in a professional capacity. My responses are calibrated for clarity, precision, and workplace-appropriate tone. I am prepared to assist with any task you require — please proceed with your inquiry."
18+
}
19+
},
20+
{
21+
"_comment": "tone:casual — value-B. Informal register; must differ from value-A.",
22+
"match": {
23+
"userMessage": "tone:casual — introduce yourself per your config",
24+
"turnIndex": 0,
25+
"context": "ag2"
26+
},
27+
"response": {
28+
"content": "Hey! I'm your CopilotKit buddy, set to chill mode. Think of me as the friend who actually likes answering questions. What's up?"
29+
}
30+
},
31+
{
32+
"_comment": "expertise:beginner — value-A. Simple explanations.",
33+
"match": {
34+
"userMessage": "expertise:beginner — explain how copilotkit works per your config",
35+
"turnIndex": 0,
36+
"context": "ag2"
37+
},
38+
"response": {
39+
"content": "CopilotKit is like adding a smart helper to your app. You drop a chat box into your website, and behind the scenes it talks to an AI agent that can read your app's data and take actions for the user. Think of it as a bridge between your frontend and an AI brain."
40+
}
41+
},
42+
{
43+
"_comment": "expertise:expert — value-B. Technical depth; must differ from value-A.",
44+
"match": {
45+
"userMessage": "expertise:expert — explain how copilotkit works per your config",
46+
"turnIndex": 0,
47+
"context": "ag2"
48+
},
49+
"response": {
50+
"content": "CopilotKit exposes a React provider (<CopilotKit>) that opens an SSE channel to a CopilotRuntime instance. The runtime proxies requests to your agent backend (LangGraph, CrewAI, or a custom AG-UI endpoint). Frontend tools registered via useCopilotAction are injected into the agent's tool list at runtime, enabling bidirectional tool calling — the agent can invoke frontend-side functions that mutate React state, while the frontend can forward user context and readable state via useCopilotReadable. The protocol layer is AG-UI: typed SSE events with lifecycle semantics (RunStarted, ActionExecutionStart, TextMessageContent, etc.)."
51+
}
52+
},
53+
{
54+
"_comment": "responseLength:concise — value-A. Short answer.",
55+
"match": {
56+
"userMessage": "responseLength:concise — describe agent context per your config",
57+
"turnIndex": 0,
58+
"context": "ag2"
59+
},
60+
"response": {
61+
"content": "Agent context lets you pass frontend state to your agent so it can tailor responses to what the user sees."
62+
}
63+
},
64+
{
65+
"_comment": "responseLength:detailed — value-B. Must exceed concise by >= 80 chars (RESPONSE_LENGTH_DELTA_MIN).",
66+
"match": {
67+
"userMessage": "responseLength:detailed — describe agent context per your config",
68+
"turnIndex": 0,
69+
"context": "ag2"
70+
},
71+
"response": {
72+
"content": "Agent context is the mechanism CopilotKit uses to share frontend application state with your backend agent on every turn. When you call useAgentContext() in your React component, you can set key-value pairs — such as tone, expertise level, response length preferences, or any domain-specific metadata — that travel alongside the user's message to the agent. The agent's system prompt builder reads these values and adjusts its behavior accordingly. For example, setting tone to 'professional' might instruct the agent to avoid slang and use formal sentence structures, while setting expertise to 'expert' would tell it to skip introductory explanations and use domain terminology freely. This context is per-turn, meaning you can change it between messages without restarting the conversation."
73+
}
74+
}
75+
]
76+
}

showcase/aimock/d6/ag2/auth.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"_meta": {
3+
"description": "D6 fixtures for ag2 / auth",
4+
"sourceFile": "d5-auth.ts",
5+
"owner": "d6-blitz-2026-05-26",
6+
"notes": "Authored to match D5 script + ag2 adapter request shape. Single turn — the D5 assertion is DOM-based (sign-out click + banner/card re-mount), not transcript-based."
7+
},
8+
"fixtures": [
9+
{
10+
"_comment": "auth check turn 1 — the probe sends this single message after sign-in (idiomatic) or on the pre-mounted chat (legacy). The assertion is entirely DOM-side (sign-out button click + post-sign-out state check), so the response content just needs to land.",
11+
"match": {
12+
"userMessage": "auth check turn 1",
13+
"turnIndex": 0,
14+
"context": "ag2"
15+
},
16+
"response": {
17+
"content": "Authenticated and ready. You are signed in — the auth lifecycle is working end-to-end."
18+
}
19+
}
20+
]
21+
}

showcase/aimock/d6/ag2/byoc.json

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"_meta": {
3+
"description": "D6 fixtures for ag2 / byoc (bring-your-own-component)",
4+
"sourceFile": "d5-byoc.ts",
5+
"owner": "d6-blitz-2026-05-26",
6+
"notes": "Authored to match D5 script + ag2 adapter request shape. The probe sends the hashbrown pill prompt and asserts metric-card + chart testids render. The response must be a JSON-shaped payload the demo's custom renderer can parse."
7+
},
8+
"fixtures": [
9+
{
10+
"_comment": "byoc hashbrown pill — Sales dashboard. The demo's custom renderer parses structured JSON from the assistant response to materialize metric cards and charts. The response must contain data the renderer recognizes.",
11+
"match": {
12+
"userMessage": "Show me a Q4 sales dashboard",
13+
"hasToolResult": false,
14+
"context": "ag2"
15+
},
16+
"response": {
17+
"toolCalls": [
18+
{
19+
"id": "call_d5_byoc_render_001",
20+
"name": "render_dashboard",
21+
"arguments": "{\"metrics\":[{\"label\":\"Total Revenue\",\"value\":\"$2.4M\",\"change\":\"+12%\"},{\"label\":\"New Customers\",\"value\":\"1,847\",\"change\":\"+8%\"},{\"label\":\"Conversion Rate\",\"value\":\"3.2%\",\"change\":\"+0.4%\"}],\"charts\":[{\"type\":\"bar\",\"title\":\"Monthly Revenue\",\"data\":[{\"month\":\"Oct\",\"value\":780000},{\"month\":\"Nov\",\"value\":820000},{\"month\":\"Dec\",\"value\":800000}]},{\"type\":\"pie\",\"title\":\"Revenue by Segment\",\"data\":[{\"label\":\"Enterprise\",\"value\":1200000},{\"label\":\"Mid-Market\",\"value\":720000},{\"label\":\"SMB\",\"value\":480000}]}]}"
22+
}
23+
]
24+
}
25+
},
26+
{
27+
"_comment": "byoc hashbrown pill — follow-up after render_dashboard tool result.",
28+
"match": {
29+
"userMessage": "Show me a Q4 sales dashboard",
30+
"hasToolResult": true,
31+
"context": "ag2"
32+
},
33+
"response": {
34+
"content": "Dashboard rendered above — Q4 total revenue hit $2.4M with a 12% increase. The bar chart shows monthly revenue and the pie chart breaks down revenue by segment."
35+
}
36+
}
37+
]
38+
}
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
{
2+
"_meta": {
3+
"description": "D6 fixtures for ag2 / gen-ui-declarative",
4+
"sourceFile": "d5-gen-ui-declarative.ts",
5+
"owner": "d6-blitz-2026-05-26",
6+
"notes": "Authored to match D5 script + ag2 adapter request shape. 4 pill prompts; each emits render_a2ui tool call with component payloads that map to the declarative catalog testids. hasToolResult:false on initial tool calls to prevent re-match loops."
7+
},
8+
"fixtures": [
9+
{
10+
"_comment": "kpi-dashboard pill — first leg: emit render_a2ui with Card + Metric components. Expected testids: declarative-card, declarative-metric.",
11+
"match": {
12+
"userMessage": "Show me a quick KPI dashboard with 3-4 metrics",
13+
"hasToolResult": false,
14+
"context": "ag2"
15+
},
16+
"response": {
17+
"toolCalls": [
18+
{
19+
"id": "call_d5_declarative_kpi_001",
20+
"name": "render_a2ui",
21+
"arguments": "{\"components\":[{\"type\":\"Card\",\"props\":{\"title\":\"KPI Dashboard\"}},{\"type\":\"Metric\",\"props\":{\"label\":\"Revenue\",\"value\":\"$1.2M\",\"change\":\"+15%\"}},{\"type\":\"Metric\",\"props\":{\"label\":\"Signups\",\"value\":\"8,421\",\"change\":\"+22%\"}},{\"type\":\"Metric\",\"props\":{\"label\":\"Churn\",\"value\":\"2.1%\",\"change\":\"-0.3%\"}}]}"
22+
}
23+
]
24+
}
25+
},
26+
{
27+
"_comment": "kpi-dashboard pill — second leg: narration after render_a2ui result.",
28+
"match": {
29+
"userMessage": "Show me a quick KPI dashboard with 3-4 metrics",
30+
"hasToolResult": true,
31+
"context": "ag2"
32+
},
33+
"response": {
34+
"content": "KPI dashboard rendered above — revenue at $1.2M (+15%), signups at 8,421 (+22%), and churn down to 2.1%."
35+
}
36+
},
37+
{
38+
"_comment": "pie-chart pill — first leg: emit render_a2ui with PieChart. Expected testid: declarative-pie-chart.",
39+
"match": {
40+
"userMessage": "Show a pie chart of sales by region",
41+
"hasToolResult": false,
42+
"context": "ag2"
43+
},
44+
"response": {
45+
"toolCalls": [
46+
{
47+
"id": "call_d5_declarative_pie_001",
48+
"name": "render_a2ui",
49+
"arguments": "{\"components\":[{\"type\":\"PieChart\",\"props\":{\"title\":\"Sales by Region\",\"data\":[{\"label\":\"North America\",\"value\":42},{\"label\":\"Europe\",\"value\":28},{\"label\":\"Asia Pacific\",\"value\":20},{\"label\":\"Other\",\"value\":10}]}}]}"
50+
}
51+
]
52+
}
53+
},
54+
{
55+
"_comment": "pie-chart pill — second leg: narration.",
56+
"match": {
57+
"userMessage": "Show a pie chart of sales by region",
58+
"hasToolResult": true,
59+
"context": "ag2"
60+
},
61+
"response": {
62+
"content": "Pie chart rendered — North America leads at 42%, followed by Europe at 28%."
63+
}
64+
},
65+
{
66+
"_comment": "bar-chart pill — first leg: emit render_a2ui with BarChart. Expected testid: declarative-bar-chart.",
67+
"match": {
68+
"userMessage": "Render a bar chart of quarterly revenue",
69+
"hasToolResult": false,
70+
"context": "ag2"
71+
},
72+
"response": {
73+
"toolCalls": [
74+
{
75+
"id": "call_d5_declarative_bar_001",
76+
"name": "render_a2ui",
77+
"arguments": "{\"components\":[{\"type\":\"BarChart\",\"props\":{\"title\":\"Quarterly Revenue\",\"data\":[{\"label\":\"Q1\",\"value\":280000},{\"label\":\"Q2\",\"value\":340000},{\"label\":\"Q3\",\"value\":310000},{\"label\":\"Q4\",\"value\":420000}]}}]}"
78+
}
79+
]
80+
}
81+
},
82+
{
83+
"_comment": "bar-chart pill — second leg: narration.",
84+
"match": {
85+
"userMessage": "Render a bar chart of quarterly revenue",
86+
"hasToolResult": true,
87+
"context": "ag2"
88+
},
89+
"response": {
90+
"content": "Bar chart rendered — Q4 was the strongest quarter at $420K, up from Q3's $310K."
91+
}
92+
},
93+
{
94+
"_comment": "status-report pill — first leg: emit render_a2ui with StatusBadge. Expected testid: declarative-status-badge (the distinguishing signal — earlier pills mount Card/Metric which accumulate in DOM).",
95+
"match": {
96+
"userMessage": "Give me a status report on system health",
97+
"hasToolResult": false,
98+
"context": "ag2"
99+
},
100+
"response": {
101+
"toolCalls": [
102+
{
103+
"id": "call_d5_declarative_status_001",
104+
"name": "render_a2ui",
105+
"arguments": "{\"components\":[{\"type\":\"StatusBadge\",\"props\":{\"label\":\"API\",\"status\":\"healthy\"}},{\"type\":\"StatusBadge\",\"props\":{\"label\":\"Database\",\"status\":\"healthy\"}},{\"type\":\"StatusBadge\",\"props\":{\"label\":\"Background Workers\",\"status\":\"degraded\"}}]}"
106+
}
107+
]
108+
}
109+
},
110+
{
111+
"_comment": "status-report pill — second leg: narration.",
112+
"match": {
113+
"userMessage": "Give me a status report on system health",
114+
"hasToolResult": true,
115+
"context": "ag2"
116+
},
117+
"response": {
118+
"content": "Status report rendered — API and Database are healthy, Background Workers showing degraded performance."
119+
}
120+
}
121+
]
122+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
{
2+
"_meta": {
3+
"description": "D6 fixtures for ag2 / gen-ui-interrupt",
4+
"sourceFile": "d5-gen-ui-interrupt.ts",
5+
"copiedFrom": "langgraph-python",
6+
"owner": "d6-blitz-2026-05-26",
7+
"notes": "Mirrors langgraph-python structure with context=ag2. schedule_meeting tool call triggers interrupt(); frontend useInterrupt renders TimePickerCard. hasToolResult:false not needed \u2014 toolName/toolCallId gates handle the two-leg flow."
8+
},
9+
"fixtures": [
10+
{
11+
"_comment": "gen-ui-interrupt sales-call pill \u2014 first leg: schedule_meeting tool call triggers interrupt(). toolName gate ensures match only when schedule_meeting is in the tool list.",
12+
"match": {
13+
"userMessage": "introductory sales team call",
14+
"toolName": "schedule_meeting",
15+
"context": "ag2"
16+
},
17+
"response": {
18+
"content": "Sure \u2014 let me check available times.",
19+
"toolCalls": [
20+
{
21+
"id": "call_d5_schedule_sales_001",
22+
"name": "schedule_meeting",
23+
"arguments": {
24+
"topic": "Sales intro call",
25+
"attendee": "Sales team",
26+
"slots": [
27+
{
28+
"label": "Mon 10:00 AM",
29+
"iso": "2026-05-11T10:00:00Z"
30+
},
31+
{
32+
"label": "Tue 2:00 PM",
33+
"iso": "2026-05-12T14:00:00Z"
34+
}
35+
]
36+
}
37+
}
38+
]
39+
}
40+
},
41+
{
42+
"_comment": "gen-ui-interrupt sales-call pill \u2014 second leg: confirmation after user picks a slot and resolve fires.",
43+
"match": {
44+
"userMessage": "introductory sales team call",
45+
"toolCallId": "call_d5_schedule_sales_001",
46+
"context": "ag2"
47+
},
48+
"response": {
49+
"content": "Booked: Sales intro call confirmed for the slot you picked."
50+
}
51+
},
52+
{
53+
"_comment": "gen-ui-interrupt alice-1on1 pill \u2014 first leg: schedule_meeting tool call.",
54+
"match": {
55+
"userMessage": "one-on-one with Alice",
56+
"toolName": "schedule_meeting",
57+
"context": "ag2"
58+
},
59+
"response": {
60+
"content": "Got it \u2014 pulling up next-week slots.",
61+
"toolCalls": [
62+
{
63+
"id": "call_d5_schedule_alice_001",
64+
"name": "schedule_meeting",
65+
"arguments": {
66+
"topic": "1:1 with Alice \u2014 Q2 goals",
67+
"attendee": "Alice",
68+
"slots": [
69+
{
70+
"label": "Wed 11:00 AM",
71+
"iso": "2026-05-13T11:00:00Z"
72+
},
73+
{
74+
"label": "Thu 3:30 PM",
75+
"iso": "2026-05-14T15:30:00Z"
76+
}
77+
]
78+
}
79+
}
80+
]
81+
}
82+
},
83+
{
84+
"_comment": "gen-ui-interrupt alice-1on1 pill \u2014 second leg: confirmation after user picks a slot.",
85+
"match": {
86+
"userMessage": "one-on-one with Alice",
87+
"toolCallId": "call_d5_schedule_alice_001",
88+
"context": "ag2"
89+
},
90+
"response": {
91+
"content": "Scheduled: 1:1 with Alice locked in for the slot you picked."
92+
}
93+
}
94+
]
95+
}

0 commit comments

Comments
 (0)