The shared `copilotkit-overrides.css` files in langgraph-python,
langgraph-typescript, mastra, built-in-agent, and the starter template
forced `.copilotKitChat { background-color: #fff !important; }`, which
won over the demo-level `ThemeProvider` and made the beautiful-chat
demo render a white panel in dark mode. langgraph-fastapi has no
overrides file and was unaffected — same fix gets the others to parity.
Also add a warning in showcase/STYLING-GUIDE.md so the example block
isn't pasted back in by the next contributor.
Features with kind "docs-only" show only the docs row in the
dashboard -- no Dx badges, no status badges, no links or depth
layers. The row label is muted and tagged like "testing" rows.
- feature-registry.json: cli-start changed from primary to docs-only
- registry.ts: FeatureKind union extended with "docs-only"
- cell-pieces.tsx: CellStatus returns null for docs-only (hides all
badges)
- composed-cell.tsx: docs-only features render only DocsLayer, skip
links/depth/health
- feature-grid.tsx: docs-only rows use muted italic styling with a
"docs-only" tag
- Tests added for all three behavioral changes
TanStack's chat() engine runs a multi-turn agent loop: after the model
returns tool calls, it tries to execute them via processToolCalls().
Frontend-only tools (like render_pie_chart) are unknown to TanStack, so
executeToolCalls() treats them as errors and buildToolResultChunks()
re-emits TOOL_CALL_END without a preceding TOOL_CALL_START. The ag-ui
verify middleware rejects this duplicate.
Fix: track a runFinished flag in convertTanStackStream and discard all
events after the first RUN_FINISHED, which marks the boundary between
the streaming pass and TanStack's internal tool execution loop.
Also adds built-in-agent to docker-compose.local.yml and local-ports.json.
Per product call: don't ship the BYOC Hashbrown / JSON Render docs yet.
Make the pages unreachable from normal navigation while keeping the work
on disk so we can rewire later without re-authoring.
- `generative-ui/meta.json`: drop `hashbrown` + `json-render` from the
Declarative section. Pages no longer appear in the sidebar nav.
- `feature-registry.json`: drop `shell_docs_path` for `byoc-hashbrown`
and `byoc-json-render`. Dashboard cells go back to no-shell-docs-link
state for these two features (~33 cells).
Kept on disk:
- `showcase/shell-docs/src/content/docs/generative-ui/hashbrown.mdx`
- `showcase/shell-docs/src/content/docs/generative-ui/json-render.mdx`
Both pages remain reachable by direct URL but have zero inbound links
from nav or dashboard cells. To rewire later: re-add to
`generative-ui/meta.json` Declarative section + restore `shell_docs_path`
in `feature-registry.json`.
Both `byoc-hashbrown` and `byoc-json-render` are declarative generative
UI patterns (agent emits a typed schema, frontend validates against a
catalog, renders against React components). They belong in
`/generative-ui/` alongside a2ui and open-json-ui under the "Declarative"
header in the gen-ui meta nav, not at the root.
Changes:
- `/byoc-hashbrown.mdx` → `/generative-ui/hashbrown.mdx`
- `/byoc-json-render.mdx` → `/generative-ui/json-render.mdx`
- generative-ui/meta.json: add `hashbrown` and `json-render` to the
Declarative section after `open-json-ui`.
- root meta.json: drop the two now-stale root-level entries.
- feature-registry.json: update `shell_docs_path` for both features to
the new `/generative-ui/...` paths.
- Cross-references between the two BYOC pages updated to the new paths.
- Drop the "Not supported on Spring AI" section from json-render.mdx —
the framework picker + missingCell banner already handles this without
a dedicated header.
Closes the last three undocumented features. Authors three new canonical
shell-docs pages and wires `feature-registry.json` so every supported
cell on the dashboard now resolves to a real shell-docs page.
- `/voice` (121 lines): real-time speech-to-text in the chat composer.
`<CopilotChat />` renders the mic button automatically when the
runtime advertises `audioFileTranscriptionEnabled: true`. Backend
wires the V2 `CopilotRuntime` directly with a `TranscriptionService`
(the V1 wrapper drops it on the floor); demo includes a sample-audio
button that bypasses the mic for Playwright/screenshot flows. Closes
PDX-85.
- `/byoc-hashbrown` (106 lines): bring-your-own-component generative UI
via `@hashbrownai/react`. Custom `assistantMessage` renderer pipes
streaming JSON through `useJsonParser` + `useUiKit`, resolving against
a typed catalog so partial state renders progressively. Closes PDX-88.
- `/byoc-json-render` (140 lines): same scenario via `@json-render/react`.
Agent emits `{ root, elements }`, custom renderer parses (tolerating
prose preamble + code fences), validates against a Zod-typed catalog,
and feeds the spec into `<Renderer />`. Each page cross-links to its
sibling so readers can compare the two patterns. Closes PDX-89.
`feature-registry.json` updates: shell_docs_path set for all three.
og_docs_url stays null for voice and byoc-hashbrown (docs.copilotkit.ai
doesn't host them yet; per-framework overrides keep their existing OG
URLs intact). For byoc-json-render the previous canonical pointed at
`/generative-ui/your-components/display-only` — replaced with the new
dedicated `/byoc-json-render` page so the docs match what the demos
actually show.
Nav: `voice` joins "Build Chat UIs" right after `multimodal-attachments`;
both BYOC pages join "Build Generative UI" after the rest of the
generative-ui tree.
`feature-registry.json` previously had `shell_docs_path: null` and
`og_docs_url: null` for both `auth` and `agent-config`, so the dashboard's
docs-shell links resolved to nothing for every framework that didn't set
a per-framework override. With canonical `/auth` and `/agent-config`
pages landing alongside this commit, the shell-docs link can resolve via
inheritance for every framework.
`og_docs_url` stays null on both: docs.copilotkit.ai doesn't host these
canonical pages today, so the dashboard's docs-og link greys out
honestly. Per-framework OG overrides (langgraph, ag2, microsoft-agent-
framework) keep their existing `https://docs.copilotkit.ai/<fw>/auth`
URLs intact.
Adds two new manifest pattern flags (matching the existing
`interrupt_pattern` / `a2ui_pattern` convention) so the canonical
`/agent-config` and `/auth` shell-docs pages can gate their per-pattern
sections via `<WhenFrameworkHas>` and only render the implementation that
applies to the framework the user has selected.
- `agent_config_pattern: shared-state | runtime-properties | null`
- `runtime-properties` (1 fw): built-in-agent
- `shared-state` (17 fws): everything else that wires agent-config
- `auth_pattern: langgraph | ag2-context-variables | microsoft-agent-framework | runtime-onrequest | null`
- `langgraph` (3 fws): langgraph-python, langgraph-typescript, langgraph-fastapi
- `ag2-context-variables` (1 fw): ag2
- `microsoft-agent-framework` (2 fws): ms-agent-python, ms-agent-dotnet
- `runtime-onrequest` (12 fws): everything else
Also fills in the previously-missing `a2ui_pattern` flag on 6 frameworks
that have wired demos but were rendering near-empty doc pages because
none of the existing `<WhenFrameworkHas>` gates matched. Audit-driven:
ag2/agno/claude-sdk-{python,typescript}/langroid use schema-loading;
built-in-agent uses schema-inline.
Both features are sibling cells on existing canonical pages
(`/generative-ui/tool-rendering` and
`/generative-ui/your-components/display-only`). Setting
`shell_docs_path` lets every supported cell across frameworks inherit
the canonical default, fixing 31 dashboard cells that previously had
an OG link but no shell-docs link.
Adds a server component that gates MDX content on a framework's manifest
field (e.g. a2ui_pattern, interrupt_pattern). Lets a single docs page
render different code + prose per framework idiom — solves PDX-68.
<WhenFrameworkHas flag="a2ui_pattern" equals="schema-loading">
only renders for frameworks where integration[flag] === equals
</WhenFrameworkHas>
Pieces:
- when-framework-has.tsx: server component, reads framework via prop
(defaultFramework injected by docs-page-view, same pattern as Snippet)
- mdx-registry.tsx: registers WhenFrameworkHas as an MDX component
- docs-page-view.tsx: overrides the registry entry to inject the
page's defaultFramework
- registry.ts: Integration type gains a2ui_pattern + interrupt_pattern
fields (nullable enums)
- manifest.schema.json: same fields for editor validation
Adds a fourth cell status, "unsupported", to the showcase dashboard for
features whose framework cannot architecturally support them (e.g.,
no graph-interrupt API, no MCP tool runtime). This is distinct from
"unshipped" (just unbuilt).
- Manifest schema gains optional `not_supported_features: string[]`.
- generate-registry.ts: determineCellStatus checks `not_supported_features`
first; CatalogCell/CatalogMetadata gain `unsupported`; max_depth=0 for
unsupported cells; parity tier is computed against the supportable subset
of the reference (unsupported features no longer drag a framework's tier
down for gaps it legitimately cannot fill).
- depth-utils.ts: deriveDepth returns D0 with no regression for
unsupported cells.
- DepthChip: renders a dashed gray border + 🚫 glyph with
"Not supported by this framework" tooltip; data-status attribute
distinguishes unshipped vs unsupported.
- CoverageBar gains diagonal-stripe gray segment for unsupported.
- StatsBar / AdaptiveStatsBar / CellsView: separate "Unsupported" chip.
- CellMatrix gaps filter excludes unsupported cells (not work to do).
- Tests: cover unsupported in DepthChip, depth-utils, cell-matrix, and
catalog generator metadata/max_depth assertions.
Delete the pre-generated starters/ directory tree (previously
synced from packages/ by generate-starters.ts). Add
extract-starter.ts which produces a starter tarball on demand
from any integration. Move shared starter template files to
showcase/shared/starter-template/.
Code-review pass surfaced that `https://docs.copilotkit.ai/multi-agent`
is a Next.js SPA fallback (200 + `x-matched-path: /[[...slug]]` +
`<meta robots noindex>`) — the probe correctly flags it `notfound`,
but the per-package override path bypasses the probe and was
rendering green badges that 404 on click.
Replaces the URL across the 9 docs-links.json files where I introduced
it, plus the feature-registry fallback:
- Frameworks WITH an indexable framework root → use that:
ag2 → /ag2, agno → /agno, google-adk → /adk,
ms-agent-dotnet → /microsoft-agent-framework,
strands → /aws-strands.
- Frameworks without a real scoped docs page → null (honest red,
not lying-green): claude-sdk-python, claude-sdk-typescript,
spring-ai, langroid.
- Feature-registry `subagents.og_docs_url` → null. The `1 notfound`
in the prior probe summary is now `0 notfound / 19 missing` —
same total, but the registry no longer carries a known-bad URL.
Also rewrote `showcase/packages/langroid/docs-links.json` to align
with langroid's actual manifest demos: of the 8 entries the original
file declared, only 3 (`agentic-chat`, `gen-ui-agent`,
`shared-state-streaming`) matched langroid's manifest; the other 5
(`hitl-in-chat`, `tool-rendering`, `gen-ui-tool-based`,
`shared-state-read-write`, `subagents`) were dead weight (the demos
don't exist on langroid). The file is now `features: {}` with a
rationale — every langroid demo has a working feature-level entry in
the registry, so per-cell overrides aren't needed.
Updated stale "missing" rationale strings in claude-sdk-python,
claude-sdk-typescript, spring-ai, strands to match the new state.
Verification
- `pnpm -C showcase/scripts probe-docs` → `ok=61 / notfound=0 /
missing=19` across 40 features × 2 links.
- Dashboard cell simulation: still 687 docs cells green / 145 red.
No regression — the `/multi-agent` fix touched 8 dead-weight
overrides + 1 registry-fallback path that was already not
rendering.
Replaces dead `https://docs.copilotkit.ai/features/<id>` URLs in the
shared feature registry with paths that actually resolve, so the
dashboard's docs-og / docs-shell badges stop falling back to red ✗
for every cell that has no per-package override.
What changed
- `showcase/shared/feature-registry.json`:
- rename legacy `shell_docs_url` → canonical `shell_docs_path`
(silences the probe's legacy-key warning)
- point `og_docs_url` at indexable docs.copilotkit.ai pages and
`shell_docs_path` at existing `.mdx` files in
`showcase/shell-docs/src/content/docs/`
- leave fields unset for features with no real docs page yet
(`auth`, `agent-config`, `voice`, `multimodal`, `byoc-hashbrown`,
`byoc-json-render`, plus the `kind: testing` features whose docs
row is hidden by `CellStatus`)
- `showcase/packages/<framework>/docs-links.json`: fill in `null`
entries with the closest framework-specific page that exists, or
fall back to a framework-agnostic root (`/multi-agent`,
`/shared-state`, etc.) where no scoped page exists. Files touched:
ag2, agno, claude-sdk-python, claude-sdk-typescript, crewai-crews,
google-adk, langgraph-python, llamaindex, mastra, ms-agent-dotnet,
ms-agent-python, pydantic-ai, spring-ai, strands.
- New: `showcase/packages/langroid/docs-links.json` (was missing
entirely; modeled on the spring-ai/strands pattern since no
langroid-scoped pages exist on docs.copilotkit.ai).
Coverage
- Probe (`pnpm -C showcase/scripts probe-docs`) goes from
every-feature-`notfound` to `ok=61 / notfound=1 / missing=18`
across 40 features × 2 links.
- Dashboard cell simulation: 687 docs cells green, 145 red.
Remaining reds are exclusively features with no real docs target
yet (auth/voice/multimodal/agent-config/byoc-* on integrations
whose framework docs don't have those pages).
No code changes — only the JSON sources of truth. The generated
artifacts (`shell-dashboard/src/data/{registry,docs-status,catalog}.json`,
`shell-{docs,dojo}/src/data/...`) are gitignored and rebuilt by
`pnpm -C showcase/scripts {generate-registry,probe-docs}` on dev/CI.
Add manifest.yaml, docs-links.json, tsconfig.json, next.config.ts, and
postcss.config.mjs for the built-in-agent package, and insert the slug
into showcase/shared/packages.json so it appears in the shell catalog.
Registers Built-in Agent as a framework in the registry and wires up
a router + sidebar-nav pattern so its content can live at /built-in-agent/*
without needing a dedicated per-framework content tree for every topic.
Content model:
- Root MDX pages (/quickstart, /frontend-tools, /shared-state, etc.) are
the canonical home for framework-agnostic topics. Rendered at
/built-in-agent/<slug> via the existing framework-override mechanism.
- integrations/built-in-agent/*.mdx is the escape hatch for topics that
are genuinely BIA-specific (copilot-runtime, server-tools, mcp-servers,
model-selection, advanced-configuration, custom-agent). The router
falls back to these when no root equivalent exists.
- Root wins when both exist.
Changes:
- shared/manifest.schema.json: add 'built-in' to the category enum.
- shared/packages.json: register built-in-agent slug.
- packages/built-in-agent/manifest.yaml: new. deployed:false (showcase
package TBD in a follow-up), sort_order:0, category:popular so it
appears at the top of the framework dropdown.
- public/logos/built-in-agent.svg: new logo asset (extracted from the
inline CopilotKit mark in brand-nav.tsx).
- shell-docs/src/app/[framework]/[[...slug]]/page.tsx: router gains a
fallback to integrations/<framework>/<slug>.mdx when the root file
doesn't exist. Sidebar nav merges in per-framework overrides as a
labeled section positioned after 'App Control' (mirrors upstream's
integrations/built-in-agent/meta.json ordering).
- shell-docs/src/components/docs-page-view.tsx: new optional
contentSlugPath prop lets the router thread through the override
content path without changing the URL-slug used for breadcrumbs and
active-link detection.
- shell-docs/src/lib/docs-render.tsx: new buildFrameworkOverridesNav
helper that walks integrations/<framework>/* and filters out pages
that already exist at root.
Resolves conflicts:
- manifest.yaml / constraints.yaml / docs-links.json: keep both byoc-json-render
and main's re-wired open-gen-ui + open-gen-ui-advanced entries
- scripts/hooks/check-binaries.sh: keep both shell-docs and shell-dojo
demo-content exclusions (identical lines, different ordering)
- pnpm-lock.yaml (langgraph-python): regenerated via pnpm install
- shell/shell-dojo/shell-docs data JSONs: accept main's deletion (now
regenerated by nx targets), then regenerate via scripts/generate-registry.ts
and scripts/bundle-demo-content.ts
Bump generate-registry.test expected feature/demo count 32 -> 33 to account
for the new byoc-json-render demo.
Resolves textual conflicts in manifest.yaml and docs-links.json (keeps
both open-gen-ui* from main and agent-config from this branch). Accepts
main's deletion of generated shell*/src/data/*.json (now gitignored).
Bumps langgraph-python feature/demo count test from 32 to 33.
Resolved conflicts:
- showcase/packages/langgraph-python/manifest.yaml: kept auth (HEAD) +
open-gen-ui / open-gen-ui-advanced (main) in both features and demos.
- showcase/packages/langgraph-python/docs-links.json: kept auth entry
from HEAD alongside updated subagents shell_docs_path.
- showcase/shared/constraints.yaml: kept auth + open-gen-ui* entries.
- Deleted shell/shell-dojo/shell-docs generated JSONs per main (now
generated at build, no longer committed).
Bumped langgraph-python feature/demo count 32 -> 33 in generate-registry
test to reflect the added auth demo.
Wave 4a. Port the starter's hashbrown renderer into a dedicated
single-mode langgraph-python demo at /demos/byoc-hashbrown so the
byoc-hashbrown row goes green on the dashboard.
- @hashbrownai/core + @hashbrownai/react + recharts deps added.
- Dedicated /api/copilotkit-byoc-hashbrown route with byoc_hashbrown
graph (ChatOpenAI + CopilotKitMiddleware) and a catalog-aware
system prompt coaching the LLM to emit a <ui>...</ui> envelope.
- Ported MetricCard + bar-chart + pie-chart + chart-config from
showcase/starters/template/frontend with data-testid hooks on
chart roots for E2E coverage.
- Ported hashbrown renderer with local RenderMessageProps /
AssistantMessage types so @copilotkit/react-ui and @ag-ui/core
do not become direct deps of this package.
- Updated hashbrown schema calls to @0.5.0-beta.4 surface:
enumeration for SalesStage; description-first streaming.array +
object; dropped the non-existent .optional() chain.
- v2 CopilotChat uses messageView.assistantMessage slot and
useConfigureSuggestions for 3 canned prompts (sales dashboard /
revenue by category / expense trend).
- QA checklist + Playwright E2E authored (not run pre-deploy).
- Manifest / constraints / docs-links updated and derived registry +
demo-content + docs-status bundles regenerated.
- Extend scripts/hooks/check-binaries.sh whitelist to include the
shell-docs and shell-dojo demo-content bundles so the pre-commit
hook does not reject the regenerated 1.5 MB files it produced.
Wire CopilotChat AttachmentsConfig (image + PDF, inline base64) into a
dedicated /demos/multimodal cell backed by a vision-capable LangGraph
agent (gpt-4o). Scoped to its own runtime route so the vision cost
stays on this demo.
- Dedicated /api/copilotkit-multimodal route registering the new
multimodal graph under the multimodal-demo slug
- src/agents/multimodal_agent.py with an AgentMiddleware that flattens
PDF content parts to text server-side via pypdf
- Try with sample image / PDF buttons that drive CopilotChats own
hidden file input via DataTransfer + change event, so the sample and
paperclip paths exercise the same useAttachments pipeline
- public/demo-files/ placeholder — sample.png / sample.pdf binaries
are produced by the user at the end of the Wave 2b rollout
- Manifest + registry + constraints + docs-links wired; normalized
multi-modal -> multimodal in constraints to match the feature
registry id
- QA checklist + Playwright E2E spec (not run yet — pending deploy)
- aimock fixtures for sample prompts so CI runs are deterministic
- Extend the check-binaries hook allowlist to cover the shell-docs and
shell-dojo demo-content.json mirrors (same size as shell/src/data,
already allowed) so regenerated derived data can be committed
Integrates @json-render/{core,react} as an alternative BYOC generative-UI
rendering technology in langgraph-python, paired with Wave 4a's hashbrown
demo. Both demos share the same sales-dashboard catalog (MetricCard +
BarChart + PieChart) so the dashboard rows are directly comparable.
- Adds @json-render/{core,react} @ 0.18.0 pinned.
- New /demos/byoc-json-render page using CopilotChat's messageView.assistantMessage
slot to bridge CopilotKit output into @json-render/react Renderer.
- New /api/copilotkit-byoc-json-render route + byoc_json_render graph in
langgraph.json.
- Zod-validated catalog reusing @json-render/react/schema's prebuilt spec shape.
- System prompt with 3 worked examples inlined so the agent emits valid
{ root, elements } JSON deterministically.
- QA checklist + Playwright spec authored (E2E run deferred to post-deploy
stabilization).
- Adds shell-docs/shell-dojo demo-content.json to the check-binaries.sh
allowlist (same 1MB-allowed rationale as shell/demo-content.json).
Framework-native request authentication demo for the langgraph-python
showcase. Demonstrates both the unauthenticated (401) failure path and
the authenticated success path via a shared bearer token.
- New /demos/auth page with sticky AuthBanner + in-memory React auth state
- Dedicated /api/copilotkit-auth runtime route using createCopilotRuntimeHandler
from @copilotkit/runtime/v2 with an onRequest hook validating
Authorization: Bearer demo-token-123
- Shared DEMO_TOKEN constant imported by both client and server to prevent drift
- <CopilotKit headers={...}> injects Authorization reactively when authenticated
- Page-level error surface captures 401s via onError and renders a stable
data-testid=auth-demo-error for QA + E2E assertions
- QA checklist + Playwright E2E spec authored (E2E run deferred to post-deploy)
- Manifest, feature list, docs-links, constraints, and derived registry /
demo-content / constraints / docs-status data regenerated
- Allowlist shell-docs / shell-dojo demo-content.json in the binary-size
pre-commit hook (mirrors the Wave 2a voice commit; they are bundled
fixtures already over 1 MB on main)
Declare open-gen-ui and open-gen-ui-advanced in langgraph-python
manifest (code existed, was never registered). Add both to
constrained-explicit allowlist, fill shell_docs_path for 5 demos,
add hitl-in-app override, drop stale chat-customization-css fallback.
Regenerate registry.json, demo-content.json, constraints.json,
and docs-status.json across shell / shell-dojo / shell-docs.
Bump feature/demo count assertion 30→32 in generate-registry test.
Extend check-binaries.sh whitelist for sister-shell demo-content.
The scrub and #4084 touched the same surface: #4084 re-added an `open:`
generative_ui profile listing `open-gen-ui`/`open-gen-ui-advanced`, and
re-added both features to `constrained-explicit.allowed`. Extending the
branch's scrub to both re-additions keeps the semantic consistent with
the schema (which already dropped `open` from the approaches enum).
- `showcase/shared/constraints.yaml`: drop `open-gen-ui` +
`open-gen-ui-advanced` from `constrained-explicit.allowed`; drop main's
re-added `open:` profile entirely.
- `showcase/packages/langgraph-python/manifest.yaml`: drop the now-orphan
`open-gen-ui` + `open-gen-ui-advanced` feature and demo entries
(validator confirmed they had no allowed approach left).
- Regenerated `showcase/shell/src/data/registry.json` + sibling
`shell-docs`/`shell-dojo` registries and `constraints.json` via
`pnpm --dir showcase/scripts generate-registry`. All 17 integrations
validate.
`feature-registry.json` intentionally still defines both features — the
original scrub commits (2b996c54d, 27f886e59) left it untouched, so the
demo source files on disk also stay. Follow-up deletion if desired is
out of scope for this merge.
Reorders gen-ui-agent (Agentic Generative UI / In-Chat State Rendering)
to appear AFTER Reasoning (Default Render) in the Operational
Generative UI category, per user preference.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
gen-ui-interrupt and hitl-in-chat both render an interactive time-picker
inline in the chat, but via different API layers:
- gen-ui-interrupt -> useInterrupt (low-level primitive)
- hitl-in-chat -> useHumanInTheLoop (ergonomic wrapper)
Rename to make the dashboard row label reflect the API distinction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Introduces the "Frontend Tools (Async)" showcase cell — the async sibling
to the in-app-actions "Frontend Tools" cell. Demonstrates the canonical
async useFrontendTool pattern where the handler awaits a real client-side
async operation and RETURNS A RESULT the agent uses.
Concept: a simulated client-side "notes database" query. The frontend
registers a `query_notes` tool whose async handler sleeps 500ms (emulating
IndexedDB / localStorage / local-cache latency) then filters an in-browser
notes array by keyword and returns matching notes. The agent awaits the
result and summarizes matches for the user.
Files:
- src/agents/frontend_tools_async.py — helpful-assistant graph with no
backend tools; system prompt instructs the model to call `query_notes`
for note searches (schema is injected at runtime from the frontend via
CopilotKitMiddleware)
- src/app/demos/frontend-tools-async/page.tsx — CopilotKit provider +
CopilotChat, `useFrontendTool({ handler: async (...) => { await sleep;
return matches; } })` + per-tool render hook that shows a branded
NotesCard, `useConfigureSuggestions` with three prompts
- src/app/demos/frontend-tools-async/notes-card.tsx — emerald/teal
gradient card listing matched notes with tag chips
- langgraph.json — register `frontend_tools_async` graph
- manifest.yaml — features list + demos entry
- feature-registry.json — expanded description + docs URLs point to the
canonical /frontend-tools docs (shared with the sibling cell)
- constraints.yaml — added to all three generative_ui profiles
- docs-links.json — langgraph-python override pointing at /frontend-tools
Validated end-to-end: agent successfully calls `query_notes` with keywords
extracted from natural-language prompts, awaits the async handler, and
summarizes the returned notes for the user.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Clarify the positioning of the In-App Human in the Loop cell. The old
label was ambiguous with the in-chat variant; the new label surfaces
the core technical story at-a-glance: this is the async useFrontendTool
pattern where the approval UI pops up OUTSIDE the chat surface.
Also register the cell in the langgraph-python manifest (features list
+ demos entry pointing to the new files).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The advanced variant's distinguishing feature is that the agent-authored,
sandboxed UI can invoke frontend-registered sandbox functions via
Websandbox.connection.remote.<name>(args). The old label "(Advanced)"
did not convey this. Rename to "Open-Ended Gen UI (Advanced: with
frontend function calling)" in both the feature registry and the
langgraph-python manifest, and update descriptions to match. The id
stays `open-gen-ui-advanced` so URLs remain stable.
Regenerate derived bundles (registry.json, demo-content.json,
docs-status.json).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The "Declarative Generative UI (A2UI — Custom Catalog)" single-file
prototype variant was a testing-only companion to the canonical
declarative-gen-ui 3-file BYOC pattern. Drop it everywhere:
- Delete src/app/demos/declarative-gen-ui-hardcoded/ cell directory
- Delete src/agents/a2ui_dynamic_hardcoded.py
- Remove from langgraph-python manifest.yaml (features + demos) and
langgraph.json graphs
- Remove from docs-links.json, route.ts (agent entry + a2ui agents
list), shared/feature-registry.json, shared/constraints.yaml
- Drop the Callout promoting it from a2ui/dynamic-schema.mdx
- Bump expected langgraph-python count 32 → 31 in generate-registry
test; regenerate all bundles
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pre-Built: Chat was redundant with Pre-Built: CopilotChat — both rows
referred to the same CopilotChat surface with slightly different
framing. Drop prebuilt-chat everywhere:
- Delete src/app/demos/prebuilt-chat/ cell directory
- Remove from langgraph-python manifest.yaml features + demos
- Remove from shared/feature-registry.json features + chat-ui allowlist
- Remove from shared/constraints.yaml constrained-explicit
- Remove from src/app/api/copilotkit/route.ts neutral-fallthrough list
- Update expected counts in bundle-demo-content + generate-registry
tests (langgraph now exposes 32 features, down from 33)
- Fix stale src/agents/main.py test expectation to
src/agents/agentic_chat.py (main.py was split into a neutral assistant
by an earlier Phase-1 fix commit)
- Regenerate shell/src/data/{registry,constraints,demo-content,
docs-status}.json
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Add prebuilt-chat feature to the registry and constrained-explicit
allowlist so the 4085 manifest's intentional prebuilt-chat wiring
validates cleanly (4084 omits it; 4085 committed the cell earlier)
- Bump expected langgraph-python feature count in generate-registry
test from 32 to 33 to reflect the new row
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Port the 4084 internal-showcase-followups state of the shared showcase
schema to 4085 (no Docker restructure):
- feature-registry.json: new Dev Ex category, category reorder
(Dev Ex → Chat & UI → Platform → Controlled → Declarative → Open →
Operational → Interactivity → Agent State → Multi-Agent → BYOC);
+8 new features (beautiful-chat, cli-start, interrupt-headless,
reasoning-default-render, tool-rendering-reasoning-chain,
open-gen-ui-advanced, declarative-gen-ui-hardcoded,
readonly-state-agent-context); renames (shared-state-write →
shared-state-read-write, shared-state-agent-readonly →
readonly-state-agent-context); removals (shared-state-read,
state-rendering, a2ui-*, shared-state-io, shared-state, readables,
a2a-chat, deep-agents, vnext-chat, byoc-a2ui, byoc-tambo);
gen-ui-agent → kind: testing.
- constraints.yaml: allowlists updated to reference the new IDs.
- manifest.schema.json: `route` is optional; `command` field added for
informational demos (e.g. cli-start).
- All 17 column manifests: shared-state-read removed,
shared-state-write renamed to shared-state-read-write.
- langgraph-python manifest: full 4084 features list + demos entries
with 4085-appropriate highlight paths (src/agents/*.py +
src/app/demos/<cell>/* rather than backend/ + frontend/).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>