9433 Commits

Author SHA1 Message Date
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
Jordan Ritter 2324241384 fix(showcase/langgraph-typescript): rename roll_dice to roll_d20 matching LGP 2026-05-17 07:47:31 -07:00
Jordan Ritter 04977d202f fix(showcase/langgraph-typescript): bump @ag-ui/langgraph to 0.0.32
Fixes "message type returned from LangGraph is not supported" error
for search_flights. The dependency is transitive (via @copilotkit/runtime
and @copilotkit/sdk-js), so npm overrides are used to force 0.0.32.
2026-05-17 07:47:30 -07:00
Jordan Ritter 78b35b32de fix(showcase/langgraph-typescript): align subagents to LGP gold standard 2026-05-17 07:47:30 -07:00
Jordan Ritter c328f59bfc fix(showcase/langgraph-typescript): align gen-ui-agent to LGP gold standard 2026-05-17 07:47:30 -07:00
Jordan Ritter 7e101b5ecb fix(showcase/langgraph-typescript): align gen-ui-tool-based to LGP gold standard 2026-05-17 07:47:30 -07:00
Jordan Ritter 84a8b24022 fix(showcase/langgraph-typescript): align tool-rendering to LGP gold standard 2026-05-17 07:47:30 -07:00
Jordan Ritter 7d60c3a813 fix(showcase/langgraph-typescript): align readonly-state-agent-context to LGP gold standard 2026-05-17 07:47:30 -07:00
Jordan Ritter 86244f7a48 fix(showcase/langgraph-typescript): align shared-state-streaming to LGP gold standard 2026-05-17 07:47:30 -07:00
Jordan Ritter 784c77d432 fix(showcase/langgraph-typescript): align shared-state-read-write to LGP gold standard 2026-05-17 07:47:29 -07:00
Jordan Ritter 4be79861b8 fix(showcase/langgraph-typescript): align tool-rendering-reasoning-chain to LGP gold standard 2026-05-17 07:47:29 -07:00
Jordan Ritter 04887c3022 fix(showcase/langgraph-typescript): align tool-rendering-custom-catchall to LGP gold standard 2026-05-17 07:47:29 -07:00
Jordan Ritter 931385ac8e fix(showcase/langgraph-typescript): align tool-rendering-default-catchall to LGP gold standard 2026-05-17 07:47:29 -07:00
Jordan Ritter 0413a3c849 fix(showcase/aimock): add catch-all fixture for neutral assistant demos 2026-05-17 07:47:29 -07:00
Jordan Ritter df6ae290d0 fix(showcase/langgraph-typescript): voice route uses starterAgent graph ID 2026-05-17 07:47:29 -07:00
Jordan Ritter e4d9279984 fix(showcase/langgraph-typescript): add shadcn/ui components and deps for LGP parity 2026-05-17 07:47:29 -07:00
Jordan Ritter e039f24b60 fix(showcase/langgraph-typescript): align headless-complete to LGP gold standard 2026-05-17 07:47:28 -07:00