Catches up strands's shared-state-read-write and subagents demos (added in
#4359, post smalls batch 1) to parity with langgraph-python.
- shared-state-read-write: nested use-agent/use-agent-read and
set-state/use-agent-write on page.tsx; notes-card-render and
preferences-card-render on the card components (8 regions total)
- subagents: delegation-log-frontend on the log component;
subagent-setup + supervisor-delegation-tools on src/agents/agent.py
wrapping the _SUBAGENT_SYSTEM_PROMPTS dict and the @tool delegation
wrappers (3 regions total — strands keeps everything in one god-file
but both regions still have clean wrappable boundaries)
Catches up ms-agent-python's shared-state-read-write and subagents demos
(added in #4359, post batch 2) to parity with langgraph-python.
- shared-state-read-write: nested use-agent/use-agent-read and
set-state/use-agent-write on page.tsx; notes-card-render and
preferences-card-render on the card components (6 regions total)
- subagents: delegation-log-frontend on the log component;
subagent-setup + supervisor-delegation-tools on
src/agents/subagents_agent.py wrapping the sub-agent instruction
constants and the @tool-decorated delegation entry points (3 regions
total — MS Agent Framework's @tool + Agent(...) idiom maps cleanly)
Catches up ms-agent-dotnet's shared-state-read-write and subagents demos
(added in #4359, post batch 2) to parity with langgraph-python.
- shared-state-read-write: nested use-agent/use-agent-read and
set-state/use-agent-write on page.tsx; notes-card-render and
preferences-card-render on the card components (7 regions total)
- subagents: delegation-log-frontend on the log component;
subagent-setup + supervisor-delegation-tools on agent/SubagentsAgent.cs
wrapping the system-prompt constants and AIFunctionFactory.Create tool
definitions (4 regions total — C# uses the same // @region[name] /
// @endregion[name] syntax)
No manifest changes needed — existing highlight: entries already cover
the .cs files.
Catches up langgraph-fastapi's shared-state-read-write and subagents demos
(added in #4359) to parity with langgraph-python.
- shared-state-read-write: nested use-agent/use-agent-read and
set-state/use-agent-write on page.tsx; notes-card-render and
preferences-card-render on the card components (6 regions total)
- subagents: delegation-log-frontend on the log component;
subagent-setup + supervisor-delegation-tools on
src/agents/src/subagents.py wrapping the @tool-decorated functions
(3 regions total)
Closes a gap from PR #4384 (PDX-77) — crewai-crews's shared-state-read-write
and subagents demos (added in #4359) weren't in scope at that time.
- shared-state-read-write: nested use-agent/use-agent-read and
set-state/use-agent-write on page.tsx; notes-card-render and
preferences-card-render on the card components (6 regions total)
- subagents: delegation-log-frontend on the log component;
subagent-setup + supervisor-delegation-tools on src/agents/subagents.py
wrapping the litellm OpenAI tool schemas (3 regions total)
Manifest changes: added highlight: blocks to both demos so the bundler
picks up backend files outside the demo folder
(src/agents/subagents.py, src/agents/shared_state_read_write.py).
Catches up claude-sdk-typescript's shared-state-read-write and subagents
demos to parity with langgraph-python.
- shared-state-read-write: nested use-agent/use-agent-read and
set-state/use-agent-write on page.tsx; notes-card-render and
preferences-card-render on the card components (6 regions total)
- subagents: delegation-log-frontend on the log component;
subagent-setup + supervisor-delegation-tools on
src/agent/subagents-prompts.ts wrapping the system-prompt constants and
Anthropic tool schemas (3 regions total)
Deferred wider backend regions in src/agent/agent_server.ts — that file
mixes env-var precedence, error scrubbing, and lifecycle-guarantee logic
with the delegation flow; wrapping it would teach a noisy version of the
pattern. The framework idiom is already represented by subagent-setup +
supervisor-delegation-tools.
Catches up ag2's shared-state-read-write and subagents demos (added in
PR #4359, post smalls batch 1) to parity with langgraph-python.
- shared-state-read-write: nested use-agent/use-agent-read and
set-state/use-agent-write on page.tsx; notes-card-render and
preferences-card-render on the card components (6 regions total)
- subagents: delegation-log-frontend on the log component;
subagent-setup + supervisor-delegation-tools on src/agents/subagents.py
wrapping AG2/AutoGen ConversableAgent definitions and the
@tool-decorated supervisor delegation functions (3 regions total)
Restores @region[provider-setup] + @region[configure-suggestions] on
agentic-chat/page.tsx and @region[frontend-tool-registration] +
@region[frontend-tool-handler] on frontend-tools/page.tsx that were
inadvertently dropped during the shared-tools symlink refactor.
## Summary
- Previous 94%/6% color-mix was invisible (white vs near-white). Changed
to 50/50 mix between `--bg-surface` and `--bg-muted` for actually
visible alternating rows.
## Test plan
- Alternating rows should have a subtle but visible tint difference.
- configurable.mdx: restore the runAgent useEffect warning paragraph
added in PR #3868 (shell-docs-only). Upstream docs/ never got it,
so the docs-sync overrode it.
- server-tools.mdx, deep-agents.mdx: re-apply the formatting cleanups
from PR #4276 (maxSteps comma + comment style, trailing whitespace,
final newline) that upstream docs/ still has uncorrected.
## Summary
- Adds subtle alternating row backgrounds to the feature matrix using
`color-mix(in srgb, var(--bg-surface) 94%, var(--bg-muted))` on odd
rows. Sticky feature-name column matches the stripe. Theme-aware via CSS
variables.
## Test plan
- Visual: alternating rows should have a barely-noticeable tint
difference.
- Sticky column background should match the row stripe when scrolling
horizontally.
## Summary
The showcase shell's demo **Docs** tab was rendering "No documentation
available" for 25 of 31 `langgraph-python` demos.
`showcase/scripts/bundle-demo-content.ts` pulls each demo's Docs content
from a `README.md` at the demo folder root, but only 6 of 31 demo
folders had one.
This PR:
- Adds 24 new `README.md` files — one per manifest-listed
`langgraph-python` demo that was missing one. All follow the existing
3-section template used by the 6 pre-existing READMEs (`agentic-chat`,
`frontend-tools`, `gen-ui-agent`, `gen-ui-tool-based`, `tool-rendering`,
`shared-state-read`):
- `## What This Demo Shows`
- `## How to Interact`
- `## Technical Details`
- Deletes an orphan `shared-state-read/README.md` whose demo folder
isn't in `manifest.yaml` (the route is `shared-state-read-write` /
`shared-state-streaming` — both now have proper READMEs).
- Regenerates `demo-content.json` for all three shells (`shell`,
`shell-docs`, `shell-dojo`) so the Docs tab picks up the new content
without waiting for a build.
- Extends the `check-binaries` pre-commit hook allowlist to cover the
`shell-docs` and `shell-dojo` copies of `demo-content.json`. The bundler
emits the same content to all three shells, but only the `shell/` path
was previously allowlisted, so any bundle regen that crossed 1MB got
rejected.
## Incidental cleanup
Running the bundler also drops stale entries for
`langgraph-python::open-gen-ui` and
`langgraph-python::open-gen-ui-advanced` from `demo-content.json`. Those
demo folders still exist in source but aren't listed in `manifest.yaml`,
so the bundler correctly omits them. The shell never rendered them (they
weren't in the manifest), so this is silent cleanup — not a regression.
## Test plan
- [x] Ran `showcase/scripts/bundle-demo-content.ts` — all 29
`langgraph-python` demos in the manifest now have `readme` populated in
`demo-content.json` (was 6/29).
- [x] Spot-checked 10+ of the generated READMEs against their `page.tsx`
and agent `.py` source — APIs referenced (`useFrontendTool`,
`useHumanInTheLoop`, `useRenderTool`, `useAgent`, `useInterrupt`,
`StateStreamingMiddleware`, `a2ui.catalog`, `MCPAppsActivityRenderer`,
etc.) are all real and actually used by each demo.
- [x] Pre-commit hooks (`check-binaries`, `test-and-check-packages`,
`lint-fix`, `commitlint`) all pass.
## Follow-ups (out of scope for this PR)
- The filesystem has two more `langgraph-python` demo folders
(`open-gen-ui`, `open-gen-ui-advanced`) that aren't in `manifest.yaml`.
Decide whether to re-list them or delete the folders.
- Other integrations (~100 total missing READMEs across the showcase)
still need the same treatment — easy to repeat this workflow per
integration.
## Summary
- Makes the fixed legend footer collapsible via a toggle button. Default
is open. On mobile the legend was taking up most of the screen, making
the table unusable.
## Test plan
- Click the "Legend" toggle — content collapses to a thin bar. Click
again to expand.
- Verify on mobile viewport — collapsed state leaves room for the table.
Per user preference, restore the 🚫 emoji as the unsupported marker in
both DepthChip and feature-grid. Keeps a slate-colored pill (vs the
dashed-gray unshipped chip and the red ✗ no-demo marker) so the three
states remain visually distinct.
The matrix view's links/depth overlays are rendered by feature-grid.tsx,
which had its own no-demo branch that displayed a hard ✗ in danger color
when integration.demos didn't contain an entry for the feature.
That branch fired even when the feature was architecturally unsupported
(in not_supported_features), because unsupported integrations don't add
the feature to their demos[] list. Result: 29 unsupported cells rendered
as a red ✗ titled 'No demo' — visually identical to the unshipped marker
the user is trying to distinguish from.
Now feature-grid checks integration.not_supported_features first; if the
feature is listed there, the cell renders the same slate N/A pill we use
in DepthChip (consistent with the unsupported branch added there in the
prior commit). The hard ✗ remains for genuine no-demo cases.
Also adds not_supported_features to the Integration TypeScript interface
in registry.ts (the field was already present in registry.json data;
the type just didn't expose it).
The 🚫 emoji falls back to a tofu/X-shaped glyph on systems without
color emoji support (notably Windows Chrome with default fonts), which
viewers misread as the unshipped X marker — making 29 unsupported cells
look indistinguishable from unshipped.
Switched to a slate-colored N/A pill with a distinct border so the
unsupported state reads clearly across all platforms regardless of emoji
font availability.
- claude-sdk-typescript manifest: G3's headless-complete and a2ui-fixed-schema entries pointed at -agent.ts paths but the actual files are -prompt.ts. Bundle-demo-content blew up on the missing files.
- generate-catalog test: update reference and crewai-crews wired-count assertions for the post-blitz state. Multiple integrations now tie at 39 wired; auto-detection picks the alphabetical winner (langgraph-fastapi) over langgraph-python. crewai wired count moved to 37.
agno's package.json adds @copilotkit/shared, @copilotkit/voice, and openai for the new voice/multimodal/byoc demos using the same 'next' / '^5.9.0' pins langgraph-python uses (those identical pins are already in the baseline). Bumping the baseline per the validator's explicit suggestion.
- generate-registry: cross-validate not_supported_features against features list
- catalog-types: widen manifestation union to include 'starter'
- claude-sdk-python: drop invalid 'declarative-schema' from generative_ui enum
- crewai-crews: remove duplicate animated_preview_url key in mcp-apps demo
- built-in-agent + pydantic-ai: REASONING_MODEL env-var fallback so deployers can swap if gpt-5.2/gpt-5 isn't available
Wave-3 fill for the Claude Agent SDK (TypeScript) showcase.
- hitl-in-chat / hitl-in-chat-booking: frontend-tool useHumanInTheLoop
flow with an inline TimePickerCard. Pass-through agent — Claude sees
the book_call tool definition forwarded via AG-UI and calls it; the
frontend renders the picker and returns the user's selection.
- a2ui-fixed-schema: dedicated /a2ui-fixed-schema endpoint on the
Express agent ships flight_schema.json and a display_flight tool that
emits an a2ui_operations container. New runtime route
copilotkit-a2ui-fixed-schema runs the A2UI middleware with
injectA2UITool: false because the backend owns the rendering tool.
- headless-complete: dedicated /headless-complete endpoint exposes
get_weather + get_stock_price backend tools, frontend ports the
fully-headless useAgent surface and per-tool renderers from
claude-sdk-python (highlight_note remains a frontend-only useComponent
tool). New runtime route copilotkit-headless-complete proxies to it.
Adds a dedicated A2UI dynamic-schema cell for the Agno integration:
new `a2ui_dynamic_agent.py` owns its own `generate_a2ui` tool that
reads the runtime-injected client catalog from
`run_context.session_state["copilotkit"]["context"]` and feeds it
to a secondary OpenAI client bound to `render_a2ui`. Result is an
`a2ui_operations` container the runtime A2UI middleware forwards
to the registered frontend catalog renderer.
Unlike the main agent's existing `generate_a2ui` (hardcoded
internal catalog), this dedicated agent stays in sync with whatever
catalog the frontend registers via `<CopilotKit a2ui={{ catalog }}>`.
Frontend ports `page.tsx` + Zod definitions / renderers / catalog
from the langgraph-python reference. Dedicated runtime route at
`/api/copilotkit-declarative-gen-ui` runs with
`injectA2UITool: false` so the agent owns the tool itself.
Adds a dedicated A2UI fixed-schema cell for the Agno integration:
backend `a2ui_fixed_agent.py` ships `flight_schema.json` +
`booked_schema.json` and a single `display_flight` tool that emits
an `a2ui_operations` container directly (no secondary LLM).
Frontend ports `page.tsx` + Zod definitions / renderers / catalog
from the langgraph-python reference. Dedicated runtime route at
`/api/copilotkit-a2ui-fixed-schema` runs the A2UI middleware with
`injectA2UITool: false` so the agent owns its rendering tool.
Port the A2UI dynamic-schema demo to the built-in-agent showcase. The
in-process tanstack agent owns a generate_a2ui tool that fires a
secondary LLM call (forced JSON output) to design the surface tree from
the registered client catalog. The dedicated runtime route runs the
A2UI middleware with injectA2UITool: false so the runtime does not
duplicate the tool slot; the middleware still serialises the catalog
into input.context and detects the a2ui_operations container in tool
results.
Manifest: register both new demos under features and demos.
Port the A2UI fixed-schema flight-card demo to built-in-agent. The
in-process tanstack agent owns a display_flight tool that emits an
a2ui_operations container directly; the dedicated runtime route runs the
A2UI middleware with injectA2UITool: false so the runtime does not
duplicate the slot.
Ports the langgraph-python hitl-in-chat demo to PydanticAI using the frontend-tool pattern: a Zod-typed book_call tool defined via useHumanInTheLoop renders a TimePickerCard inline in chat. Backend agent is a chat-only PydanticAI Agent with no tools — the AG-UI bridge surfaces the frontend-registered tool to the model on each run. Adds hitl-in-chat-booking as a manifest alias pointing at the same route.