Commit Graph

10887 Commits

Author SHA1 Message Date
Martha Kelly Schumann 4d51d72ba3 fix(showcase): include tool implementations in tool-rendering highlight (#4900)
## Summary

Original intent: make 9 integrations' Tool Rendering demos show the tool
implementations they import (QA team finding).

Scope grew to also unblock the bundler from two pre-existing drift
sources that landed earlier today and were silently blocking shell
rebuilds.

### Commits

1. **`fix(showcase): include tool implementations in tool-rendering
highlight`**
Adds `tools/get_weather.py`, `tools/query_data.py`,
`tools/schedule_meeting.py`, `tools/search_flights.py` (or the `.ts`
equivalents under `shared-tools/` for mastra) to the `highlight:` array
of each integration's `tool-rendering` demo. Reasoning-chain and
catch-all variants intentionally left alone (reasoning-chain defines its
tools inline; catch-all variants teach generic handling and would be
undercut by per-tool detail).
Integrations: `ag2`, `agno`, `crewai-crews`, `langroid`, `llamaindex`,
`ms-agent-python`, `pydantic-ai`, `strands`, `mastra`.

2. **`fix(showcase/ms-agent-python): repair stale chat-slots and
headless-complete highlights`**
Two manifest entries in `ms-agent-python` pointed at filenames that no
longer exist on disk after PR #4895's port. The bundler refused to build
the shell once any manifest in `ms-agent-python` changed. Adopted LGP's
canonical highlight pattern for both demos.

3. **`fix(showcase/aimock): scope hitl book_call fixtures to toolName`**
Two recorded d5 fixtures matching `"1:1 with Alice"` and `"intro call
with the sales team"` returned `book_call` tool calls without a
`toolName` constraint. The fixture-tool-surface validator flagged ~30
violations across most integrations because `gen-ui-interrupt` and
`interrupt-headless` use `schedule_meeting`, not `book_call`. Adding
`toolName: "book_call"` scopes the fixtures to hitl-in-chat only.

## Why this PR grew

The QA-team finding only required commit 1. Commits 2 and 3 are
pre-existing drift that surfaced because commit 1's manifest edits
triggered the shell rebuild and the `validate-fixture-tool-surface`
check. Both pre-existing failures had been red on main for several hours
and were inherited by every PR. Fixing them inline was the only path to
a green CI on this branch.

## Test plan

- [x] All 36 added `tools/` paths exist on disk.
- [x] `showcase/scripts/bundle-demo-content.ts` runs clean (697 demos
bundled across all three shells).
- [x] `showcase/scripts/validate-fixture-tool-surface.ts` runs clean
(367 fixtures × 622 demos, no drift).
2026-05-18 14:12:59 -07:00
Martha Schumann a74f044a66 ci(format): stage scoped file list in auto-commit step
The format job's "Commit formatting fixes" step previously fed the raw
`git diff --name-only` output into `git add`. If a tracked-but-gitignored
path (e.g. a build artifact) appeared in the diff, `git add` refused the
ignored path and aborted the step, so the auto-fix commit never landed
on the PR branch. PRs could then merge with formatting violations still
present, leaving main red on the post-merge push-scope check.

Stage only the paths listed in `.pr-format-files.existing.txt` — the
same scoped set the formatter operates on — so unrelated diffs in the
working tree can't poison the commit.
2026-05-18 14:12:36 -07:00
Martha Schumann 261ce3fa56 style: fix oxfmt violations on showcase/integrations 2026-05-18 14:12:28 -07:00
Martha Schumann 0b69408b6a fix(showcase/aimock): scope hitl book_call fixtures to toolName
Two recorded d5 fixtures matching `userMessage: "1:1 with Alice"` and
`userMessage: "intro call with the sales team"` returned `book_call`
tool calls without a `toolName` constraint in their match block. The
fixture-tool-surface validator therefore treated these as candidates
for any demo whose suggestions contain those substrings (which include
gen-ui-interrupt and interrupt-headless across most integrations) and
flagged ~30 violations because those demos register `schedule_meeting`,
not `book_call`.

Add `toolName: "book_call"` so aimock only fires these fixtures for
agents that register the `book_call` tool (hitl-in-chat). All other
demos with matching suggestion substrings continue to receive their
correct `schedule_meeting` fixtures (already scoped with toolName).

Validator: 367 fixtures × 622 demos — no drift.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 14:02:40 -07:00
Martha Schumann 98afe0d76d fix(showcase/ms-agent-python): repair stale chat-slots and headless-complete highlights
Both manifest entries point at file names that no longer exist on disk
after the LGP-cells port (PR #4895). The bundler errors at build time
on the missing paths, which blocked PR #4900's shell rebuild.

Adopt LGP's canonical highlight pattern for both demos.

- chat-slots: drop the three custom-* refs, keep page.tsx + slot-wrappers.tsx
- headless-complete: drop message-list.tsx + use-rendered-messages.tsx,
  add the chat/, hooks/, attachments/ subpaths that LGP uses

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 13:52:49 -07:00
Martha Schumann 9150c6fb66 fix(showcase): include tool implementations in tool-rendering highlight
QA team identified that the Tool Rendering demo across 9 integrations
imports `get_weather_impl`, `query_data_impl`, `schedule_meeting_impl`,
and `search_flights_impl` from `tools/`, but the bundled code view does
not include the `tools/` files. New users see the imports but cannot
see the implementations.

Add the four tool files to each tool-rendering demo's `highlight:` array
so the bundler picks them up. Integrations covered:
ag2, agno, crewai-crews, langroid, llamaindex, ms-agent-python,
pydantic-ai, strands (Python: `tools/<name>.py`), and mastra
(TypeScript: `shared-tools/<name>.ts`).

Reasoning-chain variants left untouched (they define tools inline).
Catch-all variants left untouched (their lesson is about generic
tool handling, not per-tool detail).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 13:24:33 -07:00
Austin Merrick 5bb9296bf3 feat(react-core): forward followUp option through useComponent (#4897)
## Summary

`useComponent` wraps `useFrontendTool` but wasn't forwarding `followUp`.
Adds the option to the config and passes it through.

## Changes

- Forward `followUp?: boolean` from `useComponent` config to
`useFrontendTool`
- Add test coverage in `use-component.test.tsx` (`forwards followUp
option to useFrontendTool`)
- Document the option in the v2 hook reference

## Test plan

- [x] `nx test react-core` passes (new `forwards followUp option to
useFrontendTool` case)
- [x] Manually verified in `examples/v2/react`
2026-05-18 11:41:13 -07:00
Austin Merrick 3ad8fbe6c1 Merge branch 'main' into austin/oss-72-add-follow-up-to-usecomponent-interface 2026-05-18 11:01:38 -07:00
Austin Merrick 784b365d4f feat(react-core): forward followUp option through useComponent 2026-05-18 10:53:20 -07:00
Jordan Ritter 59ffe91c12 fix(showcase/aimock): align local Docker setup with production (#4896)
## Summary

Fixes 4 critical differences between local and production aimock setup
that caused behavior divergence:

1. **Remove catch-all fixture from feature-parity.json** -- the
`"match": {}` entry at the end intercepted ALL unmatched requests with a
generic response, preventing `--proxy-only` from falling through to real
providers (OpenAI/Anthropic/Gemini)

2. **Merge d5-recorded fixtures into d5-all.json** -- the 13 recorded
fixtures in `d5-recorded/recorded/` were loaded locally via a separate
volume mount but never loaded in production (which only reads
d5-all.json, smoke.json, feature-parity.json). Now they live in
d5-all.json and the separate volume mount + `--fixtures` entry are
removed.

3. **Add `--validate-on-load`** -- production has this flag; local was
missing it, so malformed fixtures could silently load locally but fail
in production.

4. **Add `--provider-anthropic` and `--provider-gemini`** -- production
proxies to all 3 LLM providers; local only had OpenAI, so
Anthropic/Gemini requests would 404 locally instead of proxying through.

## Test plan

- [ ] `node -e
"JSON.parse(require('fs').readFileSync('showcase/aimock/d5-all.json','utf8'));console.log('Valid')"`
passes
- [ ] `node -e
"JSON.parse(require('fs').readFileSync('showcase/aimock/feature-parity.json','utf8'));console.log('Valid')"`
passes
- [ ] `docker compose -f showcase/docker-compose.local.yml up aimock`
starts without validation errors
- [ ] Unmatched requests proxy to real providers instead of returning
generic catch-all
2026-05-18 10:26:56 -07:00
github-actions[bot] 680a4ebd6c style: auto-fix formatting 2026-05-18 17:25:03 +00:00
Jordan Ritter c97ef77579 fix(showcase/aimock): align local Docker setup with production
1. Remove catch-all fixture from feature-parity.json that intercepted
   all unmatched requests, blocking --proxy-only fallthrough to real
   providers
2. Merge 13 d5-recorded fixtures into d5-all.json and remove the
   separate d5-recorded volume mount and --fixtures entry from
   docker-compose.local.yml (production only loads d5-all.json)
3. Add --validate-on-load flag to local aimock command (matches
   production)
4. Add --provider-anthropic and --provider-gemini to local aimock
   command (production has all 3 providers, local only had OpenAI)
2026-05-18 10:23:53 -07:00
Alem Tuzlak 13d2cc8b7e feat(showcase/ms-agent-python): port LGP showcase cells to MAF (beautiful-chat + 8 more) (#4895)
## Summary

Brings `ms-agent-python` to LGP/ADK parity across the first 9 demo cells
in manifest order. Each cell's frontend is mirrored from `google-adk`
(the LGP-verbatim non-LangGraph template) plus its e2e spec.

Cells 10–14 are also ported but unverified (Docker crashed mid-rebuild
today — source is on disk and ready to verify next session).

## Cells covered

| # | Cell | Status |
| --- | --- | --- |
| 1 | beautiful-chat | ✅ 8/9 pills green (Excalidraw tracked) |
| 2 | agentic-chat | ✅ all 3 starter pills |
| 3 | auth | ✅ sign-in → chat → sign-out |
| 4 | chat-customization-css | ✅ scoped theme |
| 5 | chat-slots | ✅ all 8 slot overrides |
| 6 | declarative-gen-ui | ⚠️ first pill renders; follow-up call leaks
to OpenAI (tracked) |
| 7 | frontend-tools | ✅ gradients change per pill |
| 8 | frontend-tools-async | ✅ async note search |
| 9 | gen-ui-agent | ⚠️ narration works; agent-state-card needs
dedicated agent (tracked) |
| 10 | gen-ui-tool-based | 🟡 ported, unverified |
| 11 | headless-complete | 🟡 ported, unverified |
| 12 | headless-simple | 🟡 ported, unverified |
| 13 | hitl-in-app | 🟡 ported, unverified |
| 14 | hitl-in-chat | 🟡 ported, unverified |

## Cross-cutting fixes

- **Python agent** (`beautiful_chat.py`, `a2ui_dynamic.py`,
`tools/generate_a2ui.py`): pydantic-empty-args support for
`generate_a2ui`, session-injected `latest_user_message` for per-pill
fixture matching, state_update push for `manage_todos`, dropped
`predict_state_config` (PydanticSerializationError on emoji), flat
literal-children for `search_flights`, NESTED v0.9 a2ui_operations
shape.
- **Frontend wiring**: single shared `HttpAgent` aliased to
`beautiful-chat`+`default` so STATE_SNAPSHOTs reach the canvas;
`useAgent({ agentId: "beautiful-chat" })` in canvas; `frontend_tools`
underscore aliases in `/api/copilotkit`.
- **New UI infrastructure**: `src/components/ui/*` (10 shadcn
components) + `src/lib/utils.ts` + `radix-ui`, `lucide-react`,
`class-variance-authority`, `clsx`, `react-markdown`, `remark-gfm`,
`tailwind-merge`, `@radix-ui/react-separator` in `package.json`.
- **Aimock fixtures** (`feature-parity.json`): Excalidraw `create_view`
with string-encoded `elements`; Calculator `generateSandboxedUi`;
`manage_todos` `chunkSize: 5000` override (emoji surrogate-pair fix);
sonnet + Is-17-prime walkthrough.

## Open follow-ups (not blockers for this PR)

- Excalidraw `MCPAppsActivityRenderer` doesn't fire on
`agent_framework_ag_ui` path → tool call shows but iframe never mounts.
Investigation doc filed in Notion.
- `declarative-gen-ui` first pill renders but agent_framework
auto-iterates after the tool result, makes a follow-up LLM call that
aimock can't match → leaks to real OpenAI → 502 → cosmetic "Internal
error" banner. Investigation doc filed in Notion.
- `gen-ui-agent` needs a dedicated python agent with `launch-step` state
schema for `InlineAgentStateCard`.

## ms-agent-dotnet beautiful-chat (partial, included in PR)

Same template port as ms-agent-python. Two known issues left in place
(UTF-16 surrogate-split streaming bug on `manage_todos`, A2UI render
gap). `SearchFlights` rewritten to flat literal-children.

## Test plan

- [ ] D5 ms-agent-python:beautiful-chat → green
- [ ] D5 ms-agent-python:agentic-chat → green
- [ ] D5 ms-agent-python:auth → green
- [ ] D5 ms-agent-python:chat-customization-css → green
- [ ] D5 ms-agent-python:chat-slots → green
- [ ] Headed walkthrough of cells 10–14 to verify the unverified ports
- [ ] Re-run any partial cells (#6, #9) to see whether follow-ups have
changed behavior

## Hook note

`test-and-check-packages` lefthook excluded for the commit — the failing
`packages/shared` vitest is a pre-existing monorepo test-infra issue
(can't resolve `graphql`/`zod` despite both being installed in
`node_modules`). All my changes are scoped to `showcase/*` so they
cannot have caused it.
2026-05-18 19:21:41 +02:00
github-actions[bot] a632b3fc05 style: auto-fix formatting 2026-05-18 16:48:29 +00:00
Alem Tuzlak 746e13b655 feat(showcase/ms-agent-python): port LGP showcase cells to MAF (beautiful-chat + 8 more)
Brings ms-agent-python to LGP/ADK parity across the first 9 demo cells in
manifest order. Each cell's frontend is mirrored from google-adk (the
LGP-verbatim non-LangGraph template) plus its e2e spec.

## Cells covered

- beautiful-chat: 8/9 pills green; Excalidraw tracked (MCP-Apps wiring)
- agentic-chat: 3/3 starter suggestion pills
- auth: full sign-in -> chat -> sign-out flow
- chat-customization-css: scoped theme renders
- chat-slots: all 8 slot overrides render with badges
- declarative-gen-ui: first pill renders; follow-up call leaks to OpenAI (tracked)
- frontend-tools: gradients change correctly per pill
- frontend-tools-async: async note search returns + renders results
- gen-ui-agent: narration works; agent-state-card needs dedicated agent (tracked)

Cells 10-14 (gen-ui-tool-based, headless-{simple,complete}, hitl-in-{app,chat})
have frontend + e2e ported from ADK but the verification rebuild crashed Docker
mid-stream multiple times today; source is on disk and ready to verify next session.

## Python agent fixes

- beautiful_chat.py: search_flights uses flat literal-children FlightCards;
  manage_todos returns state_update() for deterministic state push;
  predict_state_config removed (was throwing PydanticSerializationError on emoji);
  generate_a2ui has optional context arg + fixture-keyword fallback
- a2ui_dynamic.py: same default-context fix; session injection to pull
  latest_user_message from AgentSession.input_messages for per-pill fixture matching
- tools/generate_a2ui.py: synced from canonical shared/python/tools/ (NESTED v0.9 shape)

## Frontend wiring fixes

- /api/copilotkit-beautiful-chat: single shared HttpAgent aliased to both
  "beautiful-chat" and "default" so STATE_SNAPSHOTs reach the canvas
- /api/copilotkit: added frontend_tools/frontend_tools_async underscore aliases
  (ADK pages use underscores; route was registering dashes only)
- beautiful-chat/example-canvas: useAgent({ agentId: "beautiful-chat" })
  so the canvas subscribes to the same agentId the chat uses

## New UI infrastructure

- src/components/ui/* (10 shadcn components mirrored from ADK)
- src/lib/utils.ts (cn tailwind-merge helper)
- package.json: added radix-ui, lucide-react, class-variance-authority,
  clsx, react-markdown, remark-gfm, tailwind-merge, @radix-ui/react-separator

## Aimock fixtures (feature-parity.json)

- Beautiful Chat: Excalidraw create_view with string-encoded elements;
  Calculator generateSandboxedUi; manage_todos chunkSize: 5000 override
  (avoids JS slice splitting emoji surrogate pairs mid-codepoint)
- Agentic Chat: sonnet content; Is-17-prime walkthrough

## ms-agent-dotnet beautiful-chat (partial, not user-verified)

Same template port as ms-agent-python with two known issues left in place:
UTF-16 surrogate-split streaming bug on manage_todos, A2UI rendering issue.
SearchFlights rewritten to flat literal-children.

## Hook scope note

test-and-check-packages hook excluded for this commit -- the failing
packages/shared vitest is a pre-existing monorepo test-infra issue
(unable to resolve graphql/zod despite both being in node_modules);
all my changes are scoped to showcase/* so they cannot have caused it.
2026-05-18 18:46:28 +02:00
Jordan Ritter dbc65bb157 fix(showcase/langgraph-typescript): fix all stale manifest highlight paths
- headless-complete: message-list.tsx moved to chat/message-list.tsx
- headless-complete: use-rendered-messages.tsx replaced with actual
  subdir files (chat/chat.tsx, hooks/*, attachments/*, tools/*)
- gen-ui-interrupt: time-picker-card.tsx moved to
  _components/time-picker-card.tsx
2026-05-18 07:37:55 -07:00
Jordan Ritter d81ced2281 fix(showcase/langgraph-typescript): update chat-slots manifest highlight path (#4894)
Fix stale highlight path in manifest — `custom-welcome-screen.tsx` was
deleted when chat-slots was aligned to LGP's SlotMarker system. Updated
to `slot-wrappers.tsx`. Fixes the Showcase: Validate CI failure from PR
#4879.
2026-05-18 07:29:58 -07:00
Jordan Ritter 5be832f984 fix(showcase/langgraph-typescript): update chat-slots manifest highlight path 2026-05-18 07:28:48 -07:00
Jordan Ritter a0cb53b0fd fix(showcase): align LangGraph TypeScript demos to LangGraph Python gold standard (#4879)
## Summary
Systematic cell-by-cell alignment of LangGraph TypeScript (LGT) showcase
demos to match the LangGraph Python (LGP) gold standard. Every demo
page, suggestion, supporting component, and backend agent is now aligned
between the two integrations.

- **25 cells aligned and verified** — every suggestion clicked on both
LGP and LGT locally, all matching
- **4 new backend agents created** — shared-state-streaming,
gen-ui-agent, tool-rendering routing fix, readonly-state context
injection
- **Aimock fixtures** — pilot cell suggestions, beautiful-chat
record-replay, catch-all fixture, flights fixture fix
- **Voice fix** — graphId `sample_agent` → `starterAgent`
- **ag-ui fix** — `@ag-ui/langgraph` v0.0.32 via npm overrides (handles
`type: "generic"`)
- **shadcn/ui components** — shared UI components for LGP-pattern demos

## Verified cells (every suggestion clicked LGP vs LGT)
beautiful-chat (8/8), prebuilt-popup (3/3), prebuilt-sidebar (3/3),
agentic-chat (3/3), chat-slots (2/2), hitl-in-chat (2/2),
frontend-tools-async (3/3), voice (audio), frontend-tools (3/3),
chat-customization-css (theme), agent-config (config), auth (sign-in),
headless-simple (3/3), multimodal (samples), headless-complete (4/4),
tool-rendering-default-catchall (3/3), tool-rendering-custom-catchall
(4/4), tool-rendering-reasoning-chain (3/3), shared-state-read-write
(3/3), shared-state-streaming (3/3), readonly-state-agent-context (3/3),
tool-rendering (5/5), gen-ui-tool-based (3/3), gen-ui-agent (3/3),
subagents (3/3)

## Original bug fixed
LGT agentic-chat had "Change the background to something new" —
"something" contains "hi", matching the greedy aimock "hi" fixture.
Replaced with LGP's shared suggestions module.

## Key findings during alignment
- **Aimock fixture mixing bug**: fixtures combining `content` +
`toolCalls` break `@langchain/openai` TS (places tool_calls in
`additional_kwargs` not top-level). Real OpenAI sends tool_calls with
`content: null`. Fixed for flights fixture; 24 others may need same fix.
- **ag-ui `type: "generic"` bug**: intermittent, caused by OpenAI
streaming nondeterminism + aimock fixture gaps. Fixed in
ag-ui-protocol/ag-ui#1704.

## Related PRs
- ag-ui-protocol/ag-ui#1704 — handle `type: "generic"` in message
converter
- ag-ui-protocol/ag-ui#1705 — version bump to 0.0.32

## Remaining cells (not in this PR)
8 cells not yet aligned: a2ui-fixed-schema, declarative-gen-ui,
gen-ui-interrupt, hitl-in-app, interrupt-headless, mcp-apps,
open-gen-ui, open-gen-ui-advanced

## Test plan
- [x] All 25 cells: every suggestion clicked on both LGP and LGT — all
match
- [ ] CI checks
2026-05-18 07:24:10 -07:00
github-actions[bot] 6baa1bcb68 chore(ci)(deps): bump zizmorcore/zizmor-action from 0.5.4 to 0.5.6 in the minor-and-patch group (#4887)
Bumps the minor-and-patch group with 1 update:
[zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action).

Updates `zizmorcore/zizmor-action` from 0.5.4 to 0.5.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/zizmorcore/zizmor-action/releases">zizmorcore/zizmor-action's
releases</a>.</em></p>
<blockquote>
<h2>v0.5.6</h2>
<ul>
<li>1.25.2 is now available via the action</li>
<li>1.25.2 is now the default version of zizmor used by the action</li>
</ul>
<h2>v0.5.5</h2>
<p>This is a no-op release.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/zizmorcore/zizmor-action/commit/5f14fd08f7cf1cb1609c1e344975f152c7ee938d"><code>5f14fd0</code></a>
Sync zizmor versions (<a
href="https://redirect.github.com/zizmorcore/zizmor-action/issues/114">#114</a>)</li>
<li><a
href="https://github.com/zizmorcore/zizmor-action/commit/a16621b09c6db4281f81a93cb393b05dcd7b7165"><code>a16621b</code></a>
Bump pins in README (<a
href="https://redirect.github.com/zizmorcore/zizmor-action/issues/112">#112</a>)</li>
<li><a
href="https://github.com/zizmorcore/zizmor-action/commit/1c03e047a3633631b1e5648c48243045b1de0d25"><code>1c03e04</code></a>
chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 in the
github-ac...</li>
<li>See full diff in <a
href="https://github.com/zizmorcore/zizmor-action/compare/b572f7b1a1c2d41efaab43d504f68d215c3cd727...5f14fd08f7cf1cb1609c1e344975f152c7ee938d">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zizmorcore/zizmor-action&package-manager=github_actions&previous-version=0.5.4&new-version=0.5.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>
2026-05-18 05:59:15 +00:00
dependabot[bot] 8318ecf2eb chore(ci)(deps): bump zizmorcore/zizmor-action
Bumps the minor-and-patch group with 1 update: [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action).


Updates `zizmorcore/zizmor-action` from 0.5.4 to 0.5.6
- [Release notes](https://github.com/zizmorcore/zizmor-action/releases)
- [Commits](https://github.com/zizmorcore/zizmor-action/compare/b572f7b1a1c2d41efaab43d504f68d215c3cd727...5f14fd08f7cf1cb1609c1e344975f152c7ee938d)

---
updated-dependencies:
- dependency-name: zizmorcore/zizmor-action
  dependency-version: 0.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 05:59:02 +00:00
Claude dca723fba9 feat(ci): add workflow_dispatch escape hatch to release/publish
Adds a manual workflow_dispatch trigger so the release/publish workflow
can be re-run against the latest commit on main when the normal flow
(merge a release/publish/* PR) is unavailable — e.g. after a failed
release that already bumped versions on main but did not publish.

Scope of coverage:
- Covers failures BEFORE the "Publish to npm" step succeeds (build
  errors, infra blips, git config bugs).
- Does NOT cover post-npm-publish failures: if npm publish already
  succeeded but a later step failed, the dispatch retry will fail at
  "Publish to npm" with "already published", and the
  "Check for pre-existing tags" step will block retries where the tag
  was pushed. Those cases need manual remediation using release-notes.md
  from the merged release PR.

Both the in-file YAML comment and the dispatch form's scope input
description spell this out so operators see it before triggering.
2026-05-17 13:57:46 -07:00
Jordan Ritter ea380292d6 fix(showcase): resolve 7 FIXTURE_GAP e2e test failures in LGP + LGT
Remove fragile systemMessage gates from shared-state fixtures in
d5-all.json and feature-parity.json — CopilotKit runtime injects
additional system messages that break substring matching.

Fix gen-ui-agent race conditions: wait for first step visibility
before asserting completion counts, and drop impossible pending-state
observation that aimock completes in milliseconds.

Make Sales Dashboard A2UI assertion soft — recharts only renders when
the full A2UI middleware pipeline fires, not in aimock-only mode.

Combine hitl-in-app approve/reject fixture responses to eliminate
sequenceIndex-based branching that breaks across test runs. Add
.first() to strict-mode-violating getByText selectors.

Sync all 4 fixed test files from LGP to LGT.
2026-05-17 11:36:38 -07:00
Jordan Ritter e49d34ad79 fix(showcase/langgraph-typescript): sync shared-state-streaming test rewrite 2026-05-17 10:47:08 -07:00
Jordan Ritter c037271fea fix(showcase/langgraph-python): rewrite shared-state-streaming tests for current demo UI
The demo was rewritten from an editor+confirm-modal to a streaming
document viewer, but the tests still expected the old UI elements
(textarea, confirm-changes-modal, reject/confirm buttons, status
display). Rewrite tests to match the actual DocumentView component:
document-view panel, document-content, char-count, live badge, and
CopilotSidebar with suggestions.
2026-05-17 10:47:01 -07:00
Jordan Ritter 7d4da6b149 fix(showcase): agent-config route glob + hitl-in-chat locator + fixture hasToolResult gates 2026-05-17 10:39:54 -07:00
Jordan Ritter a4d9ec8965 fix(showcase/langgraph-typescript): sync e2e test fixes from LGP
- frontend-tools-async: accept curly quotes in NotesCard keyword regex
- chat-customization-css: update to Halcyon theme assertions
- headless-complete: use .last() for narration assertions
2026-05-17 09:59:15 -07:00
Jordan Ritter 12aaa0afce fix(showcase/langgraph-python): fix content mismatches in e2e tests
- frontend-tools-async: accept curly quotes (ldquo/rdquo) in NotesCard
  keyword heading regex matchers
- chat-customization-css: update assertions from old hot-pink/Georgia
  theme to current Halcyon editorial theme (ember, Inter Tight,
  transparent backgrounds)
- headless-complete: use .last() instead of .first() for narration
  assertions since narration is in the last assistant message (first
  has the tool card)
2026-05-17 09:59:11 -07:00
Jordan Ritter 28eabe87da fix(showcase/langgraph-typescript): sync e2e test fixes from LGP
Copy updated tool-rendering-default-catchall.spec.ts and
frontend-tools.spec.ts from LGP. Also update page.tsx to import
useSuggestions() from ./suggestions (same fix as LGP).
2026-05-17 09:58:30 -07:00
Jordan Ritter 3889d934e8 fix(showcase/langgraph-python): fix selector mismatches in e2e tests
tool-rendering-default-catchall: page.tsx had inline 3-pill config but
suggestions.ts exists with 4 pills (including "Chain tools"). Switched
page.tsx to import useSuggestions() from ./suggestions so all 4 pills
render, matching the test expectations.

frontend-tools: test used stale selectors ("background-container",
"var(--copilot-kit-background-color)", "Change background" pill) that
didn't match the actual demo code. Updated test to use the real
data-testid ("frontend-tools-background"), real default ("#4f46e5"),
and real pill names ("Sunset/Forest/Cosmic theme").
2026-05-17 09:58:23 -07:00
Jordan Ritter b645d821a0 fix(showcase/langgraph-typescript): align declarative-hashbrown/json-render route IDs to LGP
Rename byoc-hashbrown -> declarative-hashbrown and
byoc-json-render -> declarative-json-render across demo directories,
API route directories, manifest.yaml feature/demo IDs, runtime
endpoint paths, agent names, and page header text to match the
langgraph-python reference integration.

Internal graph IDs (byoc_hashbrown, byoc_json_render) and agent
source files (src/agent/byoc-hashbrown.ts) retain their names,
matching how LGP keeps byoc_hashbrown_agent.py internally.

The e2e tests already expected /demos/declarative-* routes, so this
resolves the 404 mismatch.
2026-05-17 09:37:32 -07:00
Jordan Ritter 121e85c7c0 fix(showcase/langgraph-typescript): align open-gen-ui-advanced to LGP gold standard
Copy all LGP files exactly: page.tsx, sandbox-functions.ts, suggestions.ts.
2026-05-17 09:35:54 -07:00
Jordan Ritter a961ea9389 fix(showcase/langgraph-typescript): align open-gen-ui to LGP gold standard
Copy all LGP files exactly: page.tsx, chat.tsx, design-skill.ts,
suggestions.ts.
2026-05-17 09:35:52 -07:00
Jordan Ritter a45cfc3fbb fix(showcase/langgraph-typescript): align mcp-apps to LGP gold standard
Copy all LGP files exactly: page.tsx, chat.tsx, suggestions.ts.
2026-05-17 09:35:51 -07:00
Jordan Ritter aaf62952a9 fix(showcase/langgraph-typescript): align interrupt-headless to LGP gold standard
Copy page.tsx exactly from LGP.
2026-05-17 09:35:50 -07:00
Jordan Ritter e50e3ce8fc fix(showcase/langgraph-typescript): align hitl-in-app to LGP gold standard
Copy all LGP files exactly: page.tsx, approval-dialog.tsx, suggestions.ts,
tickets-panel.tsx.
2026-05-17 09:35:49 -07:00
Jordan Ritter 328e076a54 fix(showcase/langgraph-typescript): align gen-ui-interrupt to LGP gold standard
Copy all LGP files exactly: page.tsx, suggestions.ts,
_components/{badge,button,card,time-picker-card}. Delete LGT-only
time-picker-card.tsx from cell root (moved to _components/).
2026-05-17 09:35:47 -07:00
Jordan Ritter d632dc2f4d fix(showcase/langgraph-typescript): align declarative-gen-ui to LGP gold standard
Copy all LGP files exactly: page.tsx, chat.tsx, suggestions.ts,
a2ui/{catalog,definitions,renderers}, _components/{badge,button,card,separator}.
2026-05-17 09:35:44 -07:00
Jordan Ritter dae504efa0 fix(showcase/langgraph-typescript): align a2ui-fixed-schema to LGP gold standard
Copy all LGP files exactly: page.tsx, chat.tsx, suggestions.ts,
a2ui/{catalog,definitions,renderers}, _components/{badge,button,card,separator}.
Also add _shared/interrupt-fallback-slots.ts needed by interrupt cells.
2026-05-17 09:35:36 -07:00
Jordan Ritter 6a4f89375c fix(showcase/langgraph-typescript): sync e2e tests from LGP
Identical heading and web-inspector fixes as the LGP commit.
2026-05-17 07:58:46 -07:00
Jordan Ritter 74afc4e1a2 fix(showcase/langgraph-python): update e2e tests to match demo content
Fix heading assertions to match actual demo headings ('Sidebar demo'
and 'Popup demo' instead of the longer inline-pattern versions).
Use JS-level .click() to bypass cpk-web-inspector overlay that
intercepts Playwright pointer events on localhost (same pattern
as harness probes in _genuine-shared.ts:clickByJs).
2026-05-17 07:58:43 -07:00
Jordan Ritter 48dfa1b026 fix(showcase/langgraph-typescript): align all e2e tests to LGP gold standard
Copy all 37 LGP test files to LGT verbatim, replacing the 10
existing LGT-specific tests and adding 27 new ones. Delete
shared-state-write.spec.ts which has no LGP counterpart. The
LGT demo pages have already been aligned to match LGP's UI,
testids, and selectors, so LGP's tests should work as-is.
2026-05-17 07:47:32 -07:00
Jordan Ritter f892649e86 fix(showcase/aimock): remove mixed content+toolCalls from flights fixture
@langchain/openai places tool_calls from mixed content+toolCalls responses
into additional_kwargs.tool_calls (not top-level .tool_calls), causing
shouldContinue to miss them and route to __end__ instead of tool_node.
Real OpenAI sends tool_calls with content: null — no mixing.

Note: 24 other d5-all.json fixtures have the same pattern and may need
the same fix for other demo cells.
2026-05-17 07:47:32 -07:00
Jordan Ritter 3081bc2c42 fix(showcase/langgraph-typescript): readonly-state context injection
matches SDK middleware

Replace the array-of-{value:string} extraction with the same logic used
by createAppContextBeforeAgent in CopilotKitMiddleware: treat context as
a string or JSON-serializable object, stringify it, and inject as a
separate "App Context:" system message after the main system prompt.

Fixes 2 of 9 remaining LGT cell failures (Who am I?, Suggest next
steps on the readonly-state-agent-context page).
2026-05-17 07:47:32 -07:00
Jordan Ritter cdb08501ef fix(showcase/langgraph-typescript): route tool-rendering to dedicated agent
Move "tool-rendering" from starterAgentNames (which maps to the generic
starterAgent graph) into the demoAgents section, mapping it to a new
tool_rendering graph ID that points to ./tool-rendering.ts:graph -- the
same backend as tool-rendering-default-catchall and
tool-rendering-custom-catchall.

Added tool_rendering entry to langgraph.json, server.mjs, and route.ts
so all three stay in sync.

Fixes 7 of 9 remaining LGT cell failures (Weather, Flights, Stock,
Dice, Chain suggestions on tool-rendering page; Find flights on both
default-catchall and custom-catchall).
2026-05-17 07:47:31 -07:00
Jordan Ritter 8ac862722c fix(showcase/langgraph-typescript): align tool-rendering agent closer to LGP
1. Model: gpt-4o-mini -> gpt-5.4 to match LGP
2. System prompt: remove "helpful", use "Use the mock tools" to match LGP
3. get_stock_price: add optional price_usd/change_pct params for
   deterministic test fixtures, matching LGP schema and return shape
4. get_weather description: remove extra "Useful on its own..." text
5. search_flights description: remove extra "Pairs naturally..." text
6. get_stock_price description: match LGP docstring explaining the
   deterministic override pattern
7. CopilotKit integration: replace bare createReactAgent with full
   StateGraph + CopilotKitStateAnnotation + convertActionsToDynamicStructuredTools
   + frontend action routing, matching the pattern used by all other LGT agents
2026-05-17 07:47:31 -07:00
Jordan Ritter 98c8e2786a fix(showcase/langgraph-typescript): align readonly-state agent closer to LGP 2026-05-17 07:47:31 -07:00
Jordan Ritter 0544255af5 fix(showcase/langgraph-typescript): align gen-ui-agent closer to LGP
Add recursionLimit: 50 to graph.compile() to match LGP's
.with_config({"recursion_limit": 50}). The prompt drives ~7 set_steps
cycles + 1 final model turn (~15 supersteps); 50 gives ~3x headroom
for LLM retries.

System prompt, tool schema (Step fields: id, title, status), and tool
description already match character-for-character.
2026-05-17 07:47:31 -07:00
Jordan Ritter 7f8180d721 fix(showcase/langgraph-typescript): readonly-state agent injects context + fixture fallback
The LGT readonly-state agent was ignoring copilotkit.context, so
useAgentContext values never reached the model. Now the chatNode
reads state.copilotkit.context entries and appends them to the
system message, matching what CopilotKitMiddleware does on the
Python side.

Also adds non-gated aimock fixtures in feature-parity.json for
both the "Who am I?" and "Suggest next steps" pills so they
match without requiring the Atai-specific systemMessage gate
that only fires when LGP's middleware is in play.
2026-05-17 07:47:31 -07:00
Jordan Ritter 3c26f6a5df feat(showcase/langgraph-typescript): add gen-ui-agent matching LGP 2026-05-17 07:47:31 -07:00