Bump the canonical CopilotKit pin across all showcase integrations + shell
to 1.61.2 (canonical-pins.json, every package.json + package-lock.json),
which carries CopilotKit#5611: passing a catalog to the provider
(`<CopilotKit a2ui={{ catalog }}>`) now auto-enables A2UI and defaults tool
injection on, so the runtime no longer needs an explicit `a2ui` config.
Demonstrate the feature on the A2UI dynamic (declarative-gen-ui) demos by
removing the now-redundant runtime `a2ui` block (`injectA2UITool: true` +
`defaultCatalogId`) from:
- langgraph-python, langgraph-fastapi, langgraph-typescript
- strands, strands-typescript
- google-adk
The forwarded catalog supplies its own catalogId (sdk-js A2UI middleware
auto-derives `defaultCatalogId` from it), so the previous "Catalog not found"
fallback no longer applies.
Verified: validate-pins drift ratchet unchanged (38 / same hash);
langgraph-python D6 `gen-ui-declarative` green end-to-end (no Catalog-not-found).
Bump every @copilotkit/* dependency across the showcase integrations and
the shell from 1.60.2 (and stray "latest" override pins) to an exact
1.61.1 pin, and move the canonical pin source of truth to match.
Regenerate each standalone npm package-lock.json with the same
--legacy-peer-deps flag the Dockerfiles use for "npm ci".
- showcase/integrations/*/package.json + package-lock.json
- showcase/integrations/langgraph-typescript/src/agent/*
- showcase/shell/package.json + package-lock.json
- showcase/scripts/showcase-canonical-pins.json: canonical 1.60.2 to 1.61.1
aimock stays on its own version line (1.26.1). The Python copilotkit SDK
was already 0.1.94 across every requirements.txt, so no change there.
validate-pins ratchet is unchanged (FAIL=38, identical hash);
validate-parity, validate-fixture-tool-surface, and the showcase/scripts
vitest suite (2102 tests) all pass.
Aligns dependency versions across all 19 showcase integrations to current
released minor versions for the 1.60.2 release cycle.
Package families:
- @copilotkit/{a2ui-renderer, react-core, react-ui, runtime, shared, sdk-js, voice}
1.59.4 -> 1.60.2 (18 integrations already staged; ms-agent-harness-dotnet
catches up from 1.57.2)
- @ag-ui/{client, core, encoder} 0.0.55 -> 0.0.57
- @ag-ui/mastra 0.2.1-beta.2 -> 0.2.4 (stable on 0.x; 1.0.x major held back)
Includes the previously-missed ms-agent-harness-dotnet integration in the
@copilotkit/* bump, plus the @copilotkit/web-inspector override pin.
Lockfile-only reconciliation via npm install --package-lock-only
--legacy-peer-deps (cmdk@0.2.1 pre-existing react^18 peer-dep is unaffected).
Bump canonicalCopilotKitVersion 1.59.2 -> 1.59.4 and pin every
integration's @copilotkit/* to 1.59.4 (locks regenerated). Keeps the
whole showcase on one version instead of letting the langgraph A2UI
demos deviate. Existing per-slug overrides (built-in-agent pkg.pr.new,
ms-agent-harness-dotnet 1.57.2) unchanged.
The "next" dist-tag was a workaround for Docker builds that can't resolve
workspace:* — but "next" has gone stale (1.55.2-next.1) while "latest" is
at 1.56.5. Renovate doesn't cover showcase/, so these never auto-bumped.
Switch all 19 showcase package.json files to "latest".
Brings the Google ADK showcase back to parity with the langgraph-python
north-star across the 14 issues catalogued in PR #4792's TL;DR. Four
independent classes of bug fixed; all 36 demos now route, terminate, and
render correctly against real Gemini.
1. Universal Gemini infinite tool loop
ADK's LlmAgent does not naturally terminate after a tool result with
Gemini 2.5-flash — every backend or frontend tool fired forever. Lifted
the (orphaned) `simple_after_model_modifier` from agents/main.py into
shared_chat.stop_on_terminal_text without the SalesPipelineAgent
name-gate; wired it as `after_model_callback=` into every registered
LlmAgent (22 dedicated agents plus the build_simple_chat_agent /
build_thinking_chat_agent factories). simple_after_model_modifier is
kept as a thin alias so the existing test file keeps resolving.
2. Stale @ag-ui/client trapped on deprecated event names
ag_ui_adk v0.6.1 emits the canonical REASONING_* events but the
integration's package.json pinned `@ag-ui/client: ^0.0.43` which under
npm's pre-1.0 caret rule resolves to strictly 0.0.43 — a version that
only knows the deprecated THINKING_* names. Every Gemini response
tripped the runtime's Zod discriminator. Bumped to ^0.0.53 and
regenerated the lockfile.
3. Frontend agent IDs out of sync with backend mounts
page.tsx for hitl-in-chat / frontend-tools-async / prebuilt-popup
declared underscored agent IDs that didn't appear in the runtime's
agent map, so useAgent threw "Agent not found after runtime sync"
and the React tree crashed. Renamed to the dashed form that matches
the registry. MCP Apps had the same class of bug at the route level —
copilotkit-mcp-apps/route.ts pointed HttpAgent at /mcp_apps but the
FastAPI mount is /mcp-apps; fixed to dash.
4. A2UI ops in deprecated v0.8 flat shape
tools/generate_a2ui.py:build_a2ui_operations_from_tool_call,
tools/search_flights.py, and agents/a2ui_fixed_agent.py emitted
`{type: "create_surface", surfaceId, ...}` (flat). The
@ag-ui/a2ui-middleware matcher only walks the v0.9 nested keys
(`{createSurface: {surfaceId, ...}}`), so every op was grouped under
the fallback "default" surface and the renderer threw
`Catalog not found: default` or
`Component 'undefined' is missing an 'id'`. Rewrote to v0.9 nested
shape with `version: "v0.9"` and `updateDataModel` using `path` +
`value` (matching copilotkit.a2ui Python helper).
Three follow-on fixes in agents/main.py and beautiful_chat_agent.py
that surfaced once the structural fix landed:
- _AGENT_NAME_TO_CATALOG_ID table + _resolve_pinned_catalog_id helper:
Gemini hallucinated catalog IDs because the schema for catalogId
was unconstrained; the north-star hardcodes CUSTOM_CATALOG_ID per
agent file, mirrored here with a name to id table so one shared
generate_a2ui dispatches per demo.
- Tightened parametersJsonSchema for components.items to require
id + component AND explicitly declare the optional text / label /
value / children / child / data props. Gemini's structured-output
path drops fields not in the schema even with default
additionalProperties: true, which produced [{}, {}, {}].
- Hard-requirements prompt prefix with a concrete PieChart example
ported from langgraph-python's _GENERATE_A2UI_PROMPT_HEADER, plus
_sanitize_a2ui_components / _has_root_component validators and
_unstringify_json_fields to round-trip Gemini's quirk of emitting
"data": "[{...}]" as a JSON string instead of an actual array.
Windows note: the integration's tools/ symlink does not materialize on
Windows worktrees (git stores it as mode 100644). The local copies under
showcase/integrations/google-adk/tools/ are kept byte-identical to the
canonical sources under showcase/shared/python/tools/. On Linux/macOS
where the symlink works, only the shared/ copy is authoritative.
Two requested changes in one pass:
1. Pin CopilotKit package versions
- All @copilotkit/* in package.json: "next" → "1.57.1"
(a2ui-renderer, react-core, runtime, shared, voice)
- ag-ui-adk in requirements.txt: unpinned → "==0.6.1"
Verified in the running container: pip shows ag_ui_adk 0.6.1,
package.json shows the five CPK packages at 1.57.1.
2. Retire interrupt demos (Strategy B was the only available adaptation
and the user asked for them to show as X in the dashboard):
- Delete src/app/demos/gen-ui-interrupt/ and interrupt-headless/
- Delete src/agents/interrupt_agent.py (no other consumers)
- Drop the registry.py + route.ts entries
- Move both feature ids from features: into not_supported_features:
so the dashboard renders them as an explicit grey X (intentional
opt-out) rather than red ? (unshipped). Drop the corresponding
demos: entries.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Verbatim copy of the LP beautiful-chat frontend — page.tsx, home-page.tsx,
showcase.json, declarative-generative-ui/, components/ (example-layout,
example-canvas, generative-ui, ui, tool-rendering), hooks/, lib/. The demo
now uses ThemeProvider + CopilotKit with a2ui catalog + openGenerativeUI,
ExampleLayout/Canvas with todos, generative UI chart components, and the
full suggestion-pill set.
Add the dedicated ADK runtime route at /api/copilotkit-beautiful-chat
modelled after the LP route shape but adapted for ADK (HttpAgent +
AGENT_URL pattern, mirroring declarative-gen-ui and mcp-apps routes).
Combined runtime: openGenerativeUI + a2ui.injectA2UITool:false + mcpApps
to support all three flagship surfaces simultaneously, matching LP.
Add missing npm deps to package.json: @radix-ui/react-checkbox,
@radix-ui/react-separator, class-variance-authority, clsx, lucide-react,
tailwind-merge — required by the verbatim-copied shadcn primitives.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy the full headless-complete demo verbatim from langgraph-python (the
parity north-star). The demo now exposes the full headless surface
CopilotKit provides: useRenderTool / useDefaultRenderTool, useComponent,
useConfigureSuggestions, useAttachments, plus useRenderToolCall and
useRenderActivityMessage rendered inside a hand-rolled chat shell built on
useAgent + useCopilotKit.
Workspace plumbing required to make the verbatim port runnable:
- Add shadcn primitives (avatar, badge, button, card, scroll-area,
separator, textarea) and `cn` util at src/components/ui/* + src/lib/utils.ts.
- Add lucide-react, radix-ui, react-markdown, remark-gfm, clsx,
tailwind-merge, class-variance-authority to package.json.
- Extend globals.css with Tailwind v4 @theme tokens that map onto the
shadcn CSS variables (background/foreground/card/muted/border/etc.) so
utilities like `bg-background` actually generate styles.
- Register a `headless-complete` HttpAgent on the existing MCP Apps
runtime route so the LP frontend's `agent="headless-complete"` resolves
to the ADK backend path `/headless_complete` (mapped to _simple_chat in
registry.py).
The ADK `_simple_chat` agent is left unchanged — it already covers the
behaviour the demo exercises (frontend tools, MCP Apps tool calls).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add dedicated tool-free voice agents for strands, llamaindex,
ms-agent-python (aimock returns tool calls when tools are registered,
which the adapters don't loop on)
- Add sample_agent alias to langgraph-typescript langgraph.json
(was only in dev-mode config)
- Add SampleAudioButton and voice route to google-adk
- Add sample.wav to agno, ms-agent-dotnet, ms-agent-python, google-adk
The voice demo route handler imports @copilotkit/voice which was not
declared in these two package.json files. Other integrations either
had it or resolved it via hoisting, but mastra's Docker build failed.
Replace sys.path.insert hacks in Python agent files with direct
imports via symlinks to shared/{python,typescript}/tools.
Update Dockerfiles, entrypoints, and configs to support the new
symlink-based tool resolution. Add PARITY_NOTES for frameworks
that have known gaps.
The showcase framework directories better reflect their role as
integration examples rather than distributable packages.
Renames showcase/packages/ -> showcase/integrations/ and updates
the test docker-compose file reference accordingly.