You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(showcase): close 2 D5 fixture gaps + filter deprecated features from gold-standard view
Three fixes that follow up on PR CopilotKit#4743 to bring LGP closer to fully-green
on the dashboard:
1. tool-rendering-reasoning-chain probe: was failing with
`expected [data-testid="reasoning-block"] to mount within 30000ms`.
Root cause: the demo's `<ReasoningBlock>` slot only mounts when a
reasoning-role message lands in the transcript, which requires
aimock to emit REASONING_MESSAGE_* events, which in turn requires
the fixture's first-leg response to carry a `reasoning` field. The
weather/Tokyo and SFO/JFK first-leg fixtures were missing it.
Mirrors the convention documented in reasoning-display.json:2.
Patched both source (harness/fixtures/d5/) and bundle (aimock/d5-all.json).
2. gen-ui-interrupt source fixture: the source fixture file was missing
the resume-leg toolCallId entries that already existed in the bundle.
Cosmetic mirror so re-bundling stays consistent. Same chip prompts +
same toolCallIds as interrupt-headless.json (both probes share the
same agent and aimock fixture set; the difference is the FRONTEND
rendering — useInterrupt inline vs useHeadlessInterrupt separate-pane).
3. Dashboard gold-standard filter: 4 deprecated/legacy features
(agentic-chat-reasoning, hitl, hitl-in-chat-booking,
reasoning-default-render) used to render as X-marked rows in the
LGP gold-standard dashboard view because LGP intentionally does
NOT implement them — they were consolidated into the modern shape
(reasoning-custom + reasoning-default; hitl-in-chat with
useHumanInTheLoop). Other 17 integrations still serve those legacy
demos, so we don't yank the features from feature-registry.json
entirely. Instead: marked them `deprecated: true` and updated
generate-registry.ts to skip emitting cells when a deprecated
feature is unshipped for an integration. LGP cells: 43 → 39 (the
4 deprecated rows disappear). Other integrations: unchanged
(audit trail preserved). Catalog total: 774 → 770.
Tests:
- 1588/1588 harness vitest passing
- 19/19 generate-catalog + generate-registry tests passing
(counts updated for the 4 dropped LGP cells + new deprecated-
feature filter test)
- validate-fixture-tool-surface clean (282 fixtures × 627 demos)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: showcase/harness/fixtures/d5/gen-ui-interrupt.json
+25-11Lines changed: 25 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,16 @@
1
1
{
2
-
"_comment": "D5 fixture for /demos/gen-ui-interrupt. Two pill prompts (sales call / 1:1 with Alice). Each triggers the `schedule_meeting` tool which raises a LangGraph interrupt; the frontend renders the time picker, the user picks, and the agent resumes with a confirmation message.",
2
+
"_comment": "D5 fixture for /demos/gen-ui-interrupt. Two pill prompts (sales call / 1:1 with Alice). Each pill is a 2-leg flow — first leg returns a `schedule_meeting` tool call (which triggers the Python agent's `interrupt(...)` suspension); second leg matches `toolCallId` after the user picks a slot and returns a confirmation narration. Both legs are SHARED with /demos/interrupt-headless.json (same agent, same chip prompts, different frontend rendering — `useInterrupt` inline vs `useHeadlessInterrupt` in a separate pane). The `call_d5_schedule_sales_001` / `_alice_001` toolCallIds match `interrupt-headless.json` and `showcase/aimock/d5-all.json` so all three sources stay in lockstep.",
3
3
"fixtures": [
4
4
{
5
-
"match": { "userMessage": "intro call with the sales team" },
5
+
"match": {
6
+
"userMessage": "intro call with the sales team",
7
+
"toolName": "schedule_meeting"
8
+
},
6
9
"response": {
7
10
"content": "Sure — let me check available times.",
8
11
"toolCalls": [
9
12
{
13
+
"id": "call_d5_schedule_sales_001",
10
14
"name": "schedule_meeting",
11
15
"arguments": {
12
16
"topic": "Sales intro call",
@@ -21,11 +25,24 @@
21
25
}
22
26
},
23
27
{
24
-
"match": { "userMessage": "1:1 with Alice" },
28
+
"match": {
29
+
"userMessage": "intro call with the sales team",
30
+
"toolCallId": "call_d5_schedule_sales_001"
31
+
},
32
+
"response": {
33
+
"content": "Booked: Sales intro call confirmed for the slot you picked."
34
+
}
35
+
},
36
+
{
37
+
"match": {
38
+
"userMessage": "1:1 with Alice",
39
+
"toolName": "schedule_meeting"
40
+
},
25
41
"response": {
26
42
"content": "Got it — pulling up next-week slots.",
27
43
"toolCalls": [
28
44
{
45
+
"id": "call_d5_schedule_alice_001",
29
46
"name": "schedule_meeting",
30
47
"arguments": {
31
48
"topic": "1:1 with Alice — Q2 goals",
@@ -40,15 +57,12 @@
40
57
}
41
58
},
42
59
{
43
-
"match": { "userMessage": "request the gen-ui interrupt" },
44
-
"response": {
45
-
"content": "Choose to continue."
46
-
}
47
-
},
48
-
{
49
-
"match": { "userMessage": "confirm the gen-ui choice" },
60
+
"match": {
61
+
"userMessage": "1:1 with Alice",
62
+
"toolCallId": "call_d5_schedule_alice_001"
63
+
},
50
64
"response": {
51
-
"content": "Gen-UI interrupt resolved."
65
+
"content": "Scheduled: 1:1 with Alice locked in for the slot you picked."
Copy file name to clipboardExpand all lines: showcase/harness/fixtures/d5/tool-rendering-reasoning-chain.json
+3-1Lines changed: 3 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,5 @@
1
1
{
2
-
"_comment": "D5 fixture for /demos/tool-rendering-reasoning-chain (LangGraph Python). The demo composes a reasoningMessage slot (<ReasoningBlock>) with per-tool renderers (WeatherCard / FlightListCard). Two chip prompts probed: 'What's the weather in Tokyo?' and 'Find flights from SFO to JFK.' — each is a 2-leg flow: first leg emits the tool call (get_weather / search_flights), second leg matches `hasToolResult: true` and emits the deterministic narration. The reasoning tokens themselves come from the agent's `init_chat_model(reasoning={effort:'low'})` — they're produced upstream of these fixtures (the LLM call returns the tool decision; reasoning lives in the same LLM payload). Mirrored verbatim into showcase/aimock/d5-all.json so re-bundling stays consistent.",
2
+
"_comment": "D5 fixture for /demos/tool-rendering-reasoning-chain (LangGraph Python). The demo composes a reasoningMessage slot (<ReasoningBlock data-testid=\"reasoning-block\">) with per-tool renderers (WeatherCard / FlightListCard). Two chip prompts probed: 'What's the weather in Tokyo?' and 'Find flights from SFO to JFK.' — each is a 2-leg flow: first leg emits the tool call (get_weather / search_flights) AND a `reasoning` field so aimock emits REASONING_MESSAGE_* events (role='reasoning'); without the reasoning field the v2 <ReasoningBlock> never mounts (mirrors the convention documented in reasoning-display.json). Second leg matches `hasToolResult: true` and emits the deterministic narration. The agent uses `init_chat_model(... use_responses_api=True, reasoning={effort:'low'})` — Responses-API mode delivers reasoning summaries alongside tool calls. Mirrored verbatim into showcase/aimock/d5-all.json so re-bundling stays consistent.",
3
3
"fixtures": [
4
4
{
5
5
"match": {
@@ -8,6 +8,7 @@
8
8
"toolName": "get_weather"
9
9
},
10
10
"response": {
11
+
"reasoning": "The user asked about Tokyo weather. I'll call get_weather with location='Tokyo' to get the current conditions.",
11
12
"toolCalls": [
12
13
{
13
14
"id": "call_d5_get_weather_001",
@@ -32,6 +33,7 @@
32
33
"hasToolResult": false
33
34
},
34
35
"response": {
36
+
"reasoning": "The user wants flights from SFO to JFK. I'll call search_flights with those airports to look up options.",
0 commit comments