Skip to content

Commit 7c3b80e

Browse files
tylerslatonclaude
andcommitted
feat(showcase/google-adk): reconcile registry, route, manifest for parity blitz
Orchestrator pass after 37 parallel slot ports of google-adk demos to match langgraph-python (north-star). Slot commits ported each demo's frontend verbatim; this commit reconciles the cross-cutting wiring that slot agents were forbidden from touching: - registry.py: rename agent keys to match LP frontend agent= props (10+ underscore→hyphen renames for demos using the main copilotkit route; demos with dedicated routes keep their underscored backend keys since the dedicated route handles frontend→backend translation). - route.ts: agentNames array updated to match registry. - manifest.yaml: features list now matches the demos that actually exist; renamed agentic-chat-reasoning→reasoning-custom, reasoning-default-render→reasoning-default, byoc-hashbrown→declarative-hashbrown, byoc-json-render→declarative-json-render; added shared-state-read (was a working demo dir but not declared); moved shared-state-streaming out of not_supported_features (it works on Gemini Studio via chunk- level fallback); retired the standalone hitl demo and the duplicate hitl-in-chat-booking entry. - src/app/demos/hitl/ and src/app/demos/shared-state-write/: deleted (orphaned dirs not in LP's surface). - src/app/page.tsx: integration dev landing — drop deleted demos. - src/app/demos/prebuilt-sidebar/page.tsx: revert slot 01's hyphen→underscore swap; LP's verbatim hyphenated agent= is the source of truth (registry was renamed to match). - shared-state-read agent: registry entry swapped from shared_state_read_agent (had a set_recipe tool, turning it into read+write) to _simple_chat (matches LP's neutral default agent — read-only contract). Known follow-ups (deferred — tracked separately): - Tool-rendering family backend: ADK currently exposes get_weather + search_flights(flights list) + query_data; LP exposes get_weather + search_flights(origin, destination) + get_stock_price + roll_d20. The 4 tool-rendering demos render correctly for weather but the LP suggestion pills referencing stocks and d20 rolls will not produce backend tool calls. - Subagents agent: emits running/completed/failed; LP frontend expects completed-only. Mid-flight rows render as raw badge text. - Agent-config agent: reads state["config"] but LP frontend now publishes via useAgentContext; agent will receive nothing. - Beautiful-chat agent: missing manage_todos + generate_a2ui tools that the LP frontend exercises. - Open-gen-ui-advanced agent prompt: tells Gemini to call window.sandbox.* but the LP frontend wires Websandbox.connection. remote.* — generated UIs will reference a nonexistent API. - gen-ui-interrupt and interrupt-headless: confirmed BLOCKED. Gemini/ADK has no interrupt() primitive; the existing ADK Strategy B (useFrontendTool with async Promise) is the only available adaptation and cannot match LP's useInterrupt 1:1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 92a48b8 commit 7c3b80e

10 files changed

Lines changed: 79 additions & 517 deletions

File tree

showcase/integrations/google-adk/manifest.yaml

Lines changed: 42 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ interaction_modalities:
2525
managed_platform:
2626
name: Google AI Studio
2727
url: https://aistudio.google.com
28-
not_supported_features:
29-
- shared-state-streaming
3028
features:
3129
- beautiful-chat
3230
- cli-start
@@ -37,29 +35,29 @@ features:
3735
- chat-customization-css
3836
- headless-simple
3937
- headless-complete
40-
- agentic-chat-reasoning
41-
- reasoning-default-render
38+
- reasoning-custom
39+
- reasoning-default
4240
- frontend-tools
4341
- frontend-tools-async
4442
- gen-ui-tool-based
45-
- hitl
4643
- hitl-in-app
4744
- hitl-in-chat
48-
- hitl-in-chat-booking
4945
- declarative-gen-ui
5046
- a2ui-fixed-schema
5147
- gen-ui-agent
5248
- tool-rendering-default-catchall
5349
- tool-rendering-custom-catchall
5450
- tool-rendering
5551
- tool-rendering-reasoning-chain
52+
- shared-state-read
5653
- shared-state-read-write
54+
- shared-state-streaming
5755
- readonly-state-agent-context
5856
- subagents
5957
- multimodal
6058
- auth
61-
- byoc-hashbrown
62-
- byoc-json-render
59+
- declarative-hashbrown
60+
- declarative-json-render
6361
- open-gen-ui
6462
- open-gen-ui-advanced
6563
- voice
@@ -148,32 +146,9 @@ demos:
148146
- src/app/demos/frontend-tools-async/page.tsx
149147
- src/app/demos/frontend-tools-async/notes-card.tsx
150148
- src/app/api/copilotkit/route.ts
151-
- id: hitl
152-
name: In-Chat Human in the Loop (Original)
153-
description: User approves agent actions before execution
154-
tags:
155-
- interactivity
156-
route: /demos/hitl
157-
animated_preview_url:
158-
highlight:
159-
- src/app/demos/hitl/agent.py
160-
- src/app/demos/hitl/page.tsx
161-
- src/app/api/copilotkit/route.ts
162149
- id: hitl-in-chat
163-
name: In-Chat HITL (book_call)
164-
description: Frontend-tool HITL via useHumanInTheLoop — agent calls book_call, frontend renders an in-chat time-picker, user's selection is forwarded back as the tool result
165-
tags:
166-
- interactivity
167-
route: /demos/hitl-in-chat
168-
animated_preview_url:
169-
highlight:
170-
- src/agents/hitl_in_chat_book_call_agent.py
171-
- src/app/demos/hitl-in-chat/page.tsx
172-
- src/app/demos/hitl-in-chat/time-picker-card.tsx
173-
- src/app/api/copilotkit/route.ts
174-
- id: hitl-in-chat-booking
175-
name: In-Chat HITL (Booking)
176-
description: Time-picker card rendered inline via useHumanInTheLoop for a booking flow
150+
name: "Human In the Loop: In-chat"
151+
description: Time-slot picker rendered inline in the chat via `useHumanInTheLoop` — the agent requests user input, the frontend renders a TimePickerCard, and the user's choice resumes the agent.
177152
tags:
178153
- interactivity
179154
route: /demos/hitl-in-chat
@@ -240,9 +215,19 @@ demos:
240215
- src/agents/gen_ui_agent.py
241216
- src/app/demos/gen-ui-agent/page.tsx
242217
- src/app/api/copilotkit/route.ts
218+
- id: shared-state-read
219+
name: "Shared State: Read-only"
220+
description: "Recipe editor publishes form state via agent.setState; the agent reads the recipe context but does not mutate it (no backend tool — neutral default agent)."
221+
tags:
222+
- agent-state
223+
route: /demos/shared-state-read
224+
animated_preview_url:
225+
highlight:
226+
- src/app/demos/shared-state-read/page.tsx
227+
- src/app/api/copilotkit/route.ts
243228
- id: shared-state-read-write
244-
name: Shared State (Read + Write)
245-
description: Bidirectional agent state — UI writes preferences, agent writes notes back
229+
name: "Shared State: Read + Write"
230+
description: Bidirectional shared state — UI writes preferences via agent.setState; agent writes notes via a Command-returning tool
246231
tags:
247232
- agent-state
248233
route: /demos/shared-state-read-write
@@ -334,28 +319,28 @@ demos:
334319
- src/app/demos/headless-complete/page.tsx
335320
- src/app/demos/headless-complete/message-list.tsx
336321
- src/app/api/copilotkit/route.ts
337-
- id: agentic-chat-reasoning
338-
name: Reasoning
322+
- id: reasoning-custom
323+
name: "Reasoning: Custom"
339324
description: Visible reasoning/thinking chain alongside the final answer (Gemini 2.5 thinking mode)
340325
tags:
341-
- generative-ui
342-
route: /demos/agentic-chat-reasoning
326+
- chat-ui
327+
route: /demos/reasoning-custom
343328
animated_preview_url:
344329
highlight:
345-
- src/app/demos/agentic-chat-reasoning/page.tsx
346-
- src/app/demos/agentic-chat-reasoning/reasoning-block.tsx
330+
- src/app/demos/reasoning-custom/page.tsx
331+
- src/app/demos/reasoning-custom/reasoning-block.tsx
347332
- src/agents/shared_chat.py
348333
- src/app/api/copilotkit/route.ts
349-
- id: reasoning-default-render
350-
name: Reasoning (Default Render)
351-
description: Built-in CopilotChatReasoningMessage renders without a custom slot
334+
- id: reasoning-default
335+
name: "Reasoning: Default"
336+
description: Built-in CopilotChatReasoningMessage rendering with no slot override.
352337
tags:
353-
- generative-ui
354-
route: /demos/reasoning-default-render
338+
- chat-ui
339+
route: /demos/reasoning-default
355340
animated_preview_url:
356341
highlight:
357342
- src/agents/shared_chat.py
358-
- src/app/demos/reasoning-default-render/page.tsx
343+
- src/app/demos/reasoning-default/page.tsx
359344
- src/app/api/copilotkit/route.ts
360345
- id: declarative-gen-ui
361346
name: Declarative Generative UI (A2UI)
@@ -411,18 +396,18 @@ demos:
411396
- src/agents/tool_rendering_common.py
412397
- src/app/demos/tool-rendering-reasoning-chain/page.tsx
413398
- src/app/api/copilotkit/route.ts
414-
- id: byoc-json-render
415-
name: BYOC json-render
399+
- id: declarative-json-render
400+
name: "Declarative UI: json-render"
416401
description: Streaming hierarchical JSON UI spec rendered via @json-render/react, with a Zod-validated catalog (MetricCard + PieChart + BarChart)
417402
tags:
418403
- generative-ui
419-
route: /demos/byoc-json-render
404+
route: /demos/declarative-json-render
420405
animated_preview_url:
421406
highlight:
422407
- src/agents/byoc_agents.py
423-
- src/app/demos/byoc-json-render/page.tsx
424-
- src/app/demos/byoc-json-render/json-render-renderer.tsx
425-
- src/app/api/copilotkit-byoc-json-render/route.ts
408+
- src/app/demos/declarative-json-render/page.tsx
409+
- src/app/demos/declarative-json-render/json-render-renderer.tsx
410+
- src/app/api/copilotkit-declarative-json-render/route.ts
426411
- id: beautiful-chat
427412
name: Beautiful Chat
428413
description: Canonical polished starter chat — brand fonts, theme tokens, suggestion pills
@@ -457,16 +442,16 @@ demos:
457442
- src/app/demos/auth/auth-banner.tsx
458443
- src/app/demos/auth/demo-token.ts
459444
- src/app/api/copilotkit-auth/route.ts
460-
- id: byoc-hashbrown
461-
name: BYOC Hashbrown
445+
- id: declarative-hashbrown
446+
name: "Declarative UI: Hashbrown"
462447
description: Streaming structured output via @hashbrownai/react, rendering a sales dashboard catalog (MetricCard + PieChart + BarChart)
463448
tags:
464449
- generative-ui
465-
route: /demos/byoc-hashbrown
450+
route: /demos/declarative-hashbrown
466451
animated_preview_url:
467452
highlight:
468453
- src/agents/byoc_agents.py
469-
- src/app/demos/byoc-hashbrown/page.tsx
454+
- src/app/demos/declarative-hashbrown/page.tsx
470455
- src/app/api/copilotkit-byoc-hashbrown/route.ts
471456
- id: open-gen-ui
472457
name: Fully Open-Ended Generative UI

showcase/integrations/google-adk/src/agents/registry.py

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,7 @@ class AgentSpec:
114114
"tool-rendering": AgentSpec(tool_rendering_agent),
115115
"gen-ui-tool-based": AgentSpec(gen_ui_tool_based_agent),
116116
"gen-ui-agent": AgentSpec(gen_ui_agent),
117-
"human_in_the_loop": AgentSpec(hitl_in_chat_agent),
118-
"shared-state-read": AgentSpec(shared_state_read_agent),
119-
"shared-state-write": AgentSpec(shared_state_read_write_agent),
117+
"shared-state-read": AgentSpec(_simple_chat),
120118
"shared-state-read-write": AgentSpec(shared_state_read_write_agent),
121119
"shared-state-streaming": AgentSpec(
122120
shared_state_streaming_agent,
@@ -127,41 +125,41 @@ class AgentSpec:
127125
# ----- Frontend-only demos that share the simple chat agent -----
128126
# (manifest declares them as separate features; agent path is shared)
129127
"frontend_tools": AgentSpec(_simple_chat),
130-
"frontend_tools_async": AgentSpec(_simple_chat),
131-
"prebuilt_sidebar": AgentSpec(_simple_chat),
132-
"prebuilt_popup": AgentSpec(_simple_chat),
133-
"chat_slots": AgentSpec(_simple_chat),
134-
"chat_customization_css": AgentSpec(_simple_chat),
135-
"headless_simple": AgentSpec(_simple_chat),
128+
"frontend-tools-async": AgentSpec(_simple_chat),
129+
"prebuilt-sidebar": AgentSpec(_simple_chat),
130+
"prebuilt-popup": AgentSpec(_simple_chat),
131+
"chat-slots": AgentSpec(_simple_chat),
132+
"chat-customization-css": AgentSpec(_simple_chat),
133+
"headless-simple": AgentSpec(_simple_chat),
136134
"headless_complete": AgentSpec(_simple_chat),
137135
"voice": AgentSpec(_simple_chat),
138136
# ----- Reasoning demos -----
139-
"agentic_chat_reasoning": AgentSpec(_thinking_chat),
140-
"reasoning_default_render": AgentSpec(_thinking_chat),
137+
"reasoning-custom": AgentSpec(_thinking_chat),
138+
"reasoning-default": AgentSpec(_thinking_chat),
141139
# ----- Tool-rendering variants -----
142-
"tool_rendering_default_catchall": AgentSpec(
140+
"tool-rendering-default-catchall": AgentSpec(
143141
tool_rendering_default_catchall_agent
144142
),
145-
"tool_rendering_custom_catchall": AgentSpec(
143+
"tool-rendering-custom-catchall": AgentSpec(
146144
tool_rendering_custom_catchall_agent
147145
),
148-
"tool_rendering_reasoning_chain": AgentSpec(
146+
"tool-rendering-reasoning-chain": AgentSpec(
149147
tool_rendering_reasoning_chain_agent
150148
),
151149
# ----- HITL variants -----
152-
"hitl_in_chat": AgentSpec(hitl_in_chat_book_call_agent),
153-
"hitl_in_app": AgentSpec(hitl_in_app_agent),
150+
"hitl-in-chat": AgentSpec(hitl_in_chat_book_call_agent),
151+
"hitl-in-app": AgentSpec(hitl_in_app_agent),
154152
# ----- MCP Apps -----
155-
"mcp_apps": AgentSpec(mcp_apps_agent),
153+
"mcp-apps": AgentSpec(mcp_apps_agent),
156154
# ----- Multimodal & state-context -----
157155
"multimodal": AgentSpec(multimodal_agent),
158-
"readonly_state_agent_context": AgentSpec(readonly_state_agent_context_agent),
156+
"readonly-state-agent-context": AgentSpec(readonly_state_agent_context_agent),
159157
"agent_config": AgentSpec(agent_config_agent),
160158
# ----- A2UI -----
161159
"declarative_gen_ui": AgentSpec(declarative_gen_ui_agent),
162160
"a2ui_fixed_schema": AgentSpec(a2ui_fixed_agent),
163-
# ----- BYOC -----
164-
"byoc_hashbrown": AgentSpec(byoc_agent),
161+
# ----- BYOC / Declarative -----
162+
"declarative-hashbrown": AgentSpec(byoc_agent),
165163
"byoc_json_render": AgentSpec(byoc_agent),
166164
# ----- Open Gen UI -----
167165
"open_gen_ui": AgentSpec(open_gen_ui_agent),

showcase/integrations/google-adk/src/app/api/copilotkit/route.ts

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,41 +20,39 @@ const agentNames = [
2020
"tool-rendering",
2121
"gen-ui-tool-based",
2222
"gen-ui-agent",
23-
"human_in_the_loop",
2423
"shared-state-read",
25-
"shared-state-write",
2624
"shared-state-read-write",
2725
"shared-state-streaming",
2826
"subagents",
2927
// frontend-only demos (share simple chat agent on the backend)
3028
"frontend_tools",
31-
"frontend_tools_async",
32-
"prebuilt_sidebar",
33-
"prebuilt_popup",
34-
"chat_slots",
35-
"chat_customization_css",
36-
"headless_simple",
29+
"frontend-tools-async",
30+
"prebuilt-sidebar",
31+
"prebuilt-popup",
32+
"chat-slots",
33+
"chat-customization-css",
34+
"headless-simple",
3735
"headless_complete",
3836
"voice",
3937
// reasoning
40-
"agentic_chat_reasoning",
41-
"reasoning_default_render",
38+
"reasoning-custom",
39+
"reasoning-default",
4240
// tool-rendering variants
43-
"tool_rendering_default_catchall",
44-
"tool_rendering_custom_catchall",
45-
"tool_rendering_reasoning_chain",
41+
"tool-rendering-default-catchall",
42+
"tool-rendering-custom-catchall",
43+
"tool-rendering-reasoning-chain",
4644
// hitl variants
47-
"hitl_in_chat",
48-
"hitl_in_app",
45+
"hitl-in-chat",
46+
"hitl-in-app",
4947
// multimodal & state-context
5048
"multimodal",
51-
"readonly_state_agent_context",
49+
"readonly-state-agent-context",
5250
"agent_config",
5351
// a2ui
5452
"declarative_gen_ui",
5553
"a2ui_fixed_schema",
56-
// byoc
57-
"byoc_hashbrown",
54+
// byoc / declarative
55+
"declarative-hashbrown",
5856
"byoc_json_render",
5957
// open gen ui
6058
"open_gen_ui",
@@ -64,7 +62,7 @@ const agentNames = [
6462
// auth
6563
"auth",
6664
// mcp apps (also wired via separate runtime route copilotkit-mcp-apps)
67-
"mcp_apps",
65+
"mcp-apps",
6866
// interrupt-adapted demos (Strategy B: useFrontendTool + async Promise)
6967
"gen_ui_interrupt",
7068
"interrupt_headless",

0 commit comments

Comments
 (0)