Commit Graph

536 Commits

Author SHA1 Message Date
github-actions[bot] 32737977f7 style: auto-fix formatting 2026-05-20 18:07:03 +00:00
Alem Tuzlak 00c9bc5c2e chore: ratchet showcase validate-pins baseline 95 → 93
Pinning `@copilotkit/*` to `1.57.2` exactly in `ms-agent-python`
(commit 1d40071d8) reduced the FAIL count from 95 to 93. CI's
validate-pins step asked us to ratchet the baseline down.

baselineDemoCount unchanged.
2026-05-20 14:27:34 +02:00
Tyler Slaton c37da7ecb5 feat(showcase): probe-shell-docs.ts URL coverage crawler
Adds a verification script under showcase/scripts/ that enumerates
every URL each visible framework should serve, fetches each against
a running dev server, and flags 404s + soft render failures via
structural signals (`<main>` + `<h1>` present in the SSR HTML).

Coverage: 17 visible frameworks = 14 registered integrations
(filtering docs_mode: hidden) + 3 docs-only frameworks (a2a /
agent-spec / deepagents — root URL only, since their route handler
explicitly notFound()s scoped subpaths). 618 URLs in the current
tree. Used by the cutover to confirm every authored framework's
ported MDX, every generated framework's data-driven layout, and
every hidden framework's 404 + switcher absence all render as
intended.

Design notes:
- Text matches against runtime/MDX error strings false-positive
  consistently in dev mode (Next.js bundles helper sources like
  MDXRemote and the not-found component into every page's
  serialized React tree, so "MDXRemote ... error" or
  "page could not be found" appear in every successful page's
  HTML). Structural signals are reliable; text patterns aren't.
- For docs-only frameworks, only the root URL is probed.
  Enumerating their MDX tree would produce false-positive 404s
  because the route handler intentionally restricts them to
  `/<slug>`.

Usage: `cd showcase/scripts && PREVIEW_URL=http://localhost:3003 \
npx tsx probe-shell-docs.ts`. CONCURRENCY defaults to 8.
2026-05-19 18:38:36 -07:00
Tyler Slaton 00af36c472 docs(showcase): worker prompt and baseline-split helper for Phase 1 blitz
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 14:08:09 -07:00
Tyler Slaton fc364337c9 feat(showcase): add v1 component mapping table + legacy shim barrel
Maps all 77 JSX components from the Phase 0 audit to either
use-existing (74 entries) or shim (5 entries: A2UI, MigrateTo1100,
MigrateTo182, MigrateToV2, SelfHosting). Creates the legacy/index.ts
barrel scaffold that Task 13 will populate with shim implementations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:59:31 -07:00
Tyler Slaton 8508073bd3 feat(showcase): add essential-content checklist and wire into verifier
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:47:10 -07:00
Tyler Slaton c63161018a fix(showcase): strip route-group segments in shell-docs verifier known-routes
Fumadocs/Next.js route groups like (other) are stripped from URL paths, so
a file at (other)/telemetry.mdx is served at /telemetry. loadKnownRoutes()
now filters those segments before registering routes, eliminating false-positive
dead-link failures for pages inside route-group directories.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:44:28 -07:00
Tyler Slaton a251e21126 feat(showcase): shell-docs verifier CLI runs all checks against real repo state
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:41:49 -07:00
Tyler Slaton c573fd0622 feat(showcase): verifier checks @/snippets and @/components import paths 2026-05-19 13:36:34 -07:00
Tyler Slaton c485ec8981 feat(showcase): verifier checks internal markdown links against known routes 2026-05-19 13:36:04 -07:00
Tyler Slaton 4a56b958dc feat(showcase): verifier checks <Snippet> regions against demo-content 2026-05-19 13:35:32 -07:00
Tyler Slaton 11a351d4b9 feat(showcase): verifier checks <InlineDemo> ids against registry 2026-05-19 13:34:56 -07:00
Tyler Slaton b0a370b41b docs(showcase): clarify REPO_ROOT derivation in shell-docs verifier 2026-05-19 13:32:58 -07:00
Tyler Slaton 52ffd2ee8a feat(showcase): scaffold shell-docs verifier with nx build check
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:31:07 -07:00
Tyler Slaton de9ecd32cc fix(showcase): make docs-porting audit resilient to unreadable MDX files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:29:18 -07:00
Tyler Slaton 245a77e768 feat(showcase): add CLI entry for docs-porting audit and run end-to-end
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:26:25 -07:00
github-actions[bot] 2843f61581 style: auto-fix formatting 2026-05-19 20:25:47 +00:00
Tyler Slaton e4b52861a5 fix(showcase): strip code blocks and dedup snippet imports in MDX reference extraction
Fenced code blocks are now stripped before extracting JSX component
references so samples inside ``` blocks don't get counted as real
component refs. snippetImports is deduplicated via a Set consistent
with how components are handled.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:24:15 -07:00
Ran Shem Tov 6389d5111b chore: refresh showcase validate-pins hash after main merge 2026-05-19 15:23:01 -05:00
Tyler Slaton 23f562afb5 feat(showcase): extract MDX component refs and snippet imports in porting audit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:21:42 -07:00
Tyler Slaton 9a74927635 fix(showcase): normalize line endings and clean up tempdirs in docs-porting audit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:19:51 -07:00
Tyler Slaton 3e4eac44d9 feat(showcase): add per-framework page diff to docs-porting audit 2026-05-19 13:16:04 -07:00
Tyler Slaton ef991db232 fix(showcase): export READY_SLUGS and drop brittle length assertion in docs-porting audit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:13:51 -07:00
Tyler Slaton aef5637aa6 feat(showcase): scaffold docs-porting audit script with unready-framework enumeration 2026-05-19 13:10:42 -07:00
github-actions[bot] a3654c3f08 style: auto-fix formatting 2026-05-19 17:04:12 +00:00
Ran Shem Tov 00ce3a9332 chore: ratchet showcase baseline to 95 + sync strands lockfile 2026-05-19 11:45:34 -05:00
Alem Tuzlak a98c591044 chore(showcase): ratchet validate-pins baseline 95 -> 105
Main has been red on Validate Showcase since #4912 landed
("bump deps to v1.57.2") -- that PR bumped Dojo's @copilotkit/*
pins to 1.55.2 which exposed 10 new showcase=next vs Dojo=1.55.2
mismatches across ms-agent-python, pydantic-ai, and strands.

The count on origin/main is also 105 (verified against run
26082332924's logs); my branch produces an identical 105 FAIL set
with matching hash. So this ratchet absorbs unrelated drift from
#4912 -- needed to unblock CI for this PR (and every other PR
that touches showcase/).

Sign-off: this is a documented baseline ratchet per the fail
threshold instructions in fail-baseline.json's _comment field.
2026-05-19 12:50:28 +02:00
Tyler Slaton b30e01ad81 feat(shell-docs): adopt Fumadocs UI + floating sidebar + Shiki code chrome
Rebuild the shell-docs chrome on top of Fumadocs UI primitives and ship the
visual polish pass that replaces the legacy custom chrome.

- Fumadocs adoption: route every docs page (home, framework-scoped, ag-ui)
  through a shared ShellDocsLayout that wraps DocsLayout / DocsPage with
  the project's nav slot, sidebar config, scroll preserver, and content
  wrapper. Swap custom tabs/code-block components for Fumadocs's Tabs,
  CodeBlock, Pre, CodeBlockTabs, DynamicCodeBlock — Snippet and DemoSource
  now share the same chrome as authored fenced blocks.
- Syntax highlighting: replace rehype-highlight + hand-rolled hljs CSS
  with Fumadocs's Shiki-based rehypeCode in all three MDX renderers and
  in mdx-registry-loader. A tiny `transformerMeta` Shiki transformer
  surfaces fence title= / language as data-attrs so MdxCodeBlock can
  render the file-path figcaption + floating copy button.
- Sidebar: floats on all four viewport edges (rounded-2xl, 0.75rem inset,
  light-gray border), framework picker pill is rounded-xl with symmetric
  padding above/below, sticky picker bg matches the panel surface.
  Section headers render in normal caps (no more uppercase shouting), with
  scroll position preserved across navigations via SidebarScrollPreserver.
- Navbar: bg flips to `--bg`, full-width inset matches the sidebar,
  search trigger drops its border and the entire right-wing pill is the
  click target.
- Code chrome: figure surface forced to plain white in light and the
  matching dark in dark, shadow stripped, figcaption divider uses
  `--border` (was `currentColor` from `text-fd-muted-foreground`). Scoped
  the `.reference-content code` chip-bg rule to `:not(pre)` so block
  code bodies no longer pick up the gray inline-chip background.
- Content area: 49px (3.0625rem) of left/right padding so the article
  column has visible breathing room from both the floating sidebar and
  the viewport edge.
- IA: meta.json restructure for /docs (Build Generative UI section,
  controlled/declarative/open-ended folders, A2UI lifted to its own
  folder with an index page, Migrate moved under Other), Concepts content
  rewrite, snippet/region cleanups.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 18:20:48 -07:00
Ben Taylor a92d9e5e9a ci(docs-sync): exclude shell-docs deliberate-deletion paths from upstream sync (#4800)
## Summary

Adds shell-docs deliberate-deletion / divergent paths to
`PATH_EXCLUSIONS` in `showcase/scripts/sync-docs-from-main.ts`, so the
docs-sync workflow doesn't keep re-proposing them as upstream-wins
conflicts.

PR #4771 surgical review surfaced two clusters worth excluding now.

## Paths added

### Cluster 1: deliberately-deleted landing pages (5 paths)

- **`(root)/index.mdx`** + **`(root)/quickstart.mdx`** — collapsed into
a single shell-docs `/` route in commit `8adbebd30` ("merge docs landing
+ /quickstart picker").
- **`(root)/prebuilt-components.mdx`** — top-level single-file version
is duplicative of the `prebuilt-components/` directory + index.
- **`integrations/langgraph/index.mdx`** +
**`integrations/microsoft-agent-framework/index.mdx`** — framework
landing files collapsed into the canonical `/<framework>/` route in
commit `d1cd9f06a` ("collapse framework landing into shell").

### Cluster 2: reference/v2/* duplicates (5 paths)

- **`reference/v2/index.mdx`** + 4 component/hook files
(`components/CopilotChat.mdx`, `components/CopilotKit.mdx`,
`hooks/useCopilotKit.mdx`, `hooks/useThreads.mdx`)

Shell-docs's canonical reference path is
`showcase/shell-docs/src/content/reference/**` (no `v2` segment, no
`docs/` prefix). The upstream `docs/content/docs/reference/v2/*` files
mirror that content under a parallel `docs/`-prefixed path that doesn't
exist in shell-docs's routing. Syncing them in creates duplicate
parallel files.

## Scope

10 paths total. Other contested DROPs from #4771 (`shared-state.mdx`,
`a2ui.mdx`, `threads.mdx`, `premium/self-hosting.mdx`) were re-evaluated
and the bot's versions were either taken into PR #4771 or held pending
follow-up work — none are permanent exclusions, so they're NOT in this
PR.

## Test plan

- [ ] Next docs-sync workflow run does not flag these 10 paths as
conflicts
- [ ] Existing exclusions still work (no regression in current behavior)
2026-05-13 12:59:03 -05:00
Sam Julien 847deedbde ci(docs-sync): also exclude reference/v2/* (duplicates of canonical reference/)
Follow-up to PR #4771 surgical sync. The upstream reference/v2/* files
mirror shell-docs's canonical reference/ tree under a parallel
docs/-prefixed path that doesn't exist in shell-docs's routing. Syncing
them in creates duplicate parallel files. Block them from future sync
runs.

Per-file follow-up captured separately: mirror any legitimate content
updates from upstream's reference/v2 into the canonical reference/ tree
as needed (notably useCopilotKit.mdx, where the upstream version had 66
more lines than the current canonical).
2026-05-13 09:59:23 -07:00
Sam Julien 7701495710 ci(docs-sync): exclude shell-docs deliberate-deletion paths from upstream sync
The docs-sync workflow propagates upstream docs/content/docs/** changes
into showcase/shell-docs/src/content/docs/**. When shell-docs has
deliberately deleted/restructured pages, the existing PATH_EXCLUSIONS
mechanism prevents re-introduction.

PR #4771 surgical review surfaced 5 deliberate-deletion paths missing
from the exclusion list:

- (root)/index.mdx + (root)/quickstart.mdx — collapsed into a single
  shell-docs '/' route in commit 8adbebd30 ('merge docs landing +
  /quickstart picker').
- (root)/prebuilt-components.mdx — top-level single-file version is
  duplicative of the prebuilt-components/ directory + index.
- integrations/{langgraph,microsoft-agent-framework}/index.mdx —
  framework landing files collapsed into the canonical /<fw>/ route in
  commit d1cd9f06a ('collapse framework landing into shell').

Adding these to PATH_EXCLUSIONS so future docs-sync runs don't re-flag
them as upstream-wins conflicts.
2026-05-13 09:35:23 -07:00
Alem Tuzlak 9df97ee23b fix(showcase): refresh validate-pins ratchet hash after ADK demo set shift
The previous commit fixed the universal ADK loop + agent renames + A2UI
shape, which changed the pin-status of ~half of the google-adk demos in
the validate-pins matrix. Total FAIL count is unchanged at 95 (no
regression elsewhere), but the SET of failing tuples drifted, which the
ratchet correctly caught.

Updates validatePinsFailHash to the new sorted-failing-set SHA from the
CI run (62e06e1e...0b04d5e0). No baseline count change — `_comment`
explicitly forbids raising the count without sign-off.
2026-05-13 17:19:28 +02:00
Tyler Slaton 546f5f31ee Merge branch 'main' into tyler/distracted-mahavira-f58182 2026-05-12 22:05:14 -07:00
Tyler Slaton 2f7df90a02 fix(showcase/google-adk): unbreak shell build + ratchet validate-pins to 95
CI surfaced two issues with PR #4792:

1. shell/shell-dojo/shell-docs build-check: the bundler walks the
   manifest's `highlight:` list when bundling demo source for the
   shell's Code tab. Three paths were stale after the parity blitz
   restructured the demos:
   - chat-slots: custom-welcome-screen.tsx → slot-wrappers.tsx (LP's
     current highlight; the old file was replaced when chat-slots was
     ported to LP's Slot Atlas pattern)
   - headless-complete: message-list.tsx → chat/chat.tsx (file moved
     into the chat/ subdir during the LP-verbatim port)
   - declarative-hashbrown: copilotkit-byoc-hashbrown/route.ts →
     copilotkit-declarative-hashbrown/route.ts (route dir was renamed
     when the slug went byoc → declarative)

2. Validate Showcase: validate-pins is a drift ratchet — pin failure
   count can only decrease. Pinning google-adk's frontend +
   ag-ui-adk dropped the count from 98 → 95. Update baseline so the
   improvement locks in.

Verified locally with a script that walks every demo's `highlight:`
list and checks each path resolves on disk.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 21:50:35 -07:00
Sam Julien 38a5f71e52 feat(showcase/scripts): emit highlightOrder for bundled demo files
Adds an optional `highlightOrder` field (0-based index into the
manifest's `highlight:` array) on each bundled DemoFile that is flagged
`highlighted: true`. Consumers like shell-docs's new <DemoSource>
component use this to render highlighted files in the manifest author's
preferred order rather than the bundler's alphabetical-with-page-first
fallback. Files not in `highlight:` carry no `highlightOrder` and keep
the existing sort behavior.

Additive field; no migration needed.
2026-05-12 10:52:55 -07:00
github-actions[bot] 6823c58832 style: auto-fix formatting 2026-05-11 15:36:12 +00:00
Alem Tuzlak 6426281b74 test(showcase): regression coverage for open-gen-ui-advanced sandbox-function round-trips
The previous fixture regression (HTML+CSS only, no jsFunctions) slipped
past CI because the e2e suite only asserted "iframe mounts with non-empty
srcdoc" — which passes whether or not the iframe is interactive. Adds
two layers of guard so the same regression cannot land silently:

1. showcase/scripts/__tests__/open-gen-ui-advanced-fixtures.test.ts
   (vitest, runs in showcase_validate on every PR): asserts each of the
   three interactive fixture entries in d5-all.json ships jsFunctions
   referencing the matching host bridge (evaluateExpression / notifyHost).
   Catches "someone removed jsFunctions" at PR-time with no
   infrastructure dependencies.

2. showcase/integrations/langgraph-python/tests/e2e/open-gen-ui-advanced.spec.ts
   (playwright, runs in test_e2e-showcase-on-demand): adds three
   round-trip tests that drive the in-iframe controls and assert the
   host-side handler ran by capturing its console.log + verifying the
   iframe output element reflects the host response. Catches "the
   renderer fails to inject jsFunctions into the sandbox" too.

The e2e tests also switch the existing smoke tests off pill-click and
onto a textarea-driven fill+Enter path, following the same precedent as
commit 15db0bbf3 (gen-ui-headless-complete) — chip mounts diverge
between EmptyState and SuggestionBar surfaces, and Playwright's pill
click races React hydration. Using [data-testid="copilot-chat-textarea"]
with an explicit click + waitForLoadState("networkidle") makes the
suite reliable end-to-end (7/7 passing locally against the aimock-driven
stack).
2026-05-11 17:34:21 +02:00
Alem Tuzlak c99bea6670 fix(showcase/mcp-apps): route "Draw a flowchart" pill to create_view
The "Draw a flowchart" suggestion pill in the mcp-apps demo sent
"Use Excalidraw to draw a simple flowchart with three steps." which
had no matching create_view fixture in d5-all.json. aimock walked
through to feature-parity.json's `{userMessage: "steps"}` substring
fixture and returned a generic "Here is my plan..." content blurb
with no MCP tool call, so the runtime never invoked create_view, the
MCP middleware never fetched the UI resource, and the sandboxed
iframe never mounted.

Add a fixture pair in d5-all.json (and its harness mirror) keyed on
"draw a simple flowchart": turn 1 emits create_view with a three-
step Start -> Process -> End flowchart, turn 2 emits the narration
after the tool result. The distinctive substring beats the generic
feature-parity catch-alls under first-match-wins.

Adds a regression test that loads the same fixture files in the same
order as docker-compose.local.yml and asserts via aimock's matchFixture
that each mcp-apps pill routes to its create_view fixture on turn 1 and
its narration fixture on turn 2.
2026-05-11 15:21:18 +02:00
Tyler Slaton 70e2fb13c8 refactor(showcase): rename byoc-* slugs to declarative-* + sort index by manifest features
User-facing renames so the showcase reads the way a cold visitor would
expect:

- `byoc-hashbrown` → `declarative-hashbrown` (and `byoc-json-render` →
  `declarative-json-render`). The display titles already said
  "Declarative UI: …"; only the URL slugs and folder paths still
  leaked the internal BYOC ("Bring Your Own Components") jargon.
  Renamed:
    /demos/byoc-hashbrown          → /demos/declarative-hashbrown
    /demos/byoc-json-render        → /demos/declarative-json-render
    /api/copilotkit-byoc-*         → /api/copilotkit-declarative-*
    src/app/demos/byoc-*           → src/app/demos/declarative-*
    qa/byoc-*.md                   → qa/declarative-*.md
    tests/e2e/byoc-*.spec.ts       → tests/e2e/declarative-*.spec.ts
  Internal Python module names + langgraph graph IDs stay legacy
  (`byoc_hashbrown_agent.py`, `byoc_hashbrown`) — those are not
  user-facing and renaming them is a separate cross-codebase pass.
- `a2ui-fixed-schema` slug intentionally unchanged.
- Tool Rendering trio parenthetical rename (Default → Catch-all →
  Custom progression reads clearly as "how much do I customize?"):
    Tool Rendering (Default)        — unchanged
    Tool Rendering (Custom default) → Tool Rendering (Catch-all)
    Tool Rendering (Specific)       → Tool Rendering (Custom)
- `tool-rendering-reasoning-chain` cell renamed from
  "Generative UI: Rendering multiple tools" to
  "Generative UI: Tool calls + reasoning" (the demo is about combining
  reasoning + tool rendering, not about quantity of tools).
- `Open Generative UI: Default` / `Open Generative UI: Custom`
  descriptions expanded so a visitor understands how Open Generative UI
  differs from Tool Rendering (agent composes UI from a registered
  library vs. attaching a renderer to a *named* backend tool).
- Showcase index now sorts demos within each tag by `manifest.features`
  order. Previously demos appeared in manifest declaration order, which
  ignored the team's curated "polished flagship → simplest start →
  variants" arc.

Cross-cutting registry / harness / dashboard updates that fall out of
the rename:

- `shared/feature-registry.json` adds the two new IDs alongside the
  legacy `byoc-*` (so the catalog stays valid; the other 17
  integrations still declare `byoc-*` in their manifests).
- `shared/constraints.yaml` adds the new IDs to the
  generative-ui-approach allow-list.
- `scripts/__tests__/generate-catalog.test.ts` updates the cell-count
  expectations (45 features × 18 integrations = 810; 792 after docs-
  only exclusion; 45 LGP cells = 38 wired + 1 stub + 6 unshipped).
- Harness probe `d5-byoc.ts` + `d5-byoc.test.ts` now route both slug
  families through `preNavigateRoute` and exercise the new branches.
- `d5-feature-mapping.ts` and `shell-dashboard/live-status.ts` mirror
  the dual-ID mapping so both legacy and renamed slugs roll up under
  the same `byoc` D5 featureType.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 15:16:02 -07:00
Tyler Slaton 80a7f9af0e feat(showcase): align demo names + add Show Deprecated toggle
Two related changes that bring the dashboard's gold-standard view in
line with the desired naming convention and surface deprecated rows
behind a toggle (instead of hiding them at catalog generation).

## Naming alignment

Applied 28 renames in feature-registry.json + 20 in LGP manifest per
the user-provided mapping. Highlights:

- "Pre-Built CopilotChat" -> "Pre-Built: CopilotChat"
- "Headless Chat (Simple/Complete)" -> "Headless UI: Simple/Complete"
- "Multi-modal / File Uploads" -> "Attachements" (intentional spelling)
- "Controlled Gen-UI (Display)" -> "Generative UI: useComponent"
- "In-Chat HITL (use*)" -> "Human In/in the Loop: In-chat / Interrupts"
- "Headless Interrupt" -> "Human in the Loop: Headless Interrupts"
- "Declarative Generative UI (A2UI - *)" -> "Declarative UI: */* A2UI"
- "Fully Open-Ended Generative UI" -> "Open Generative UI: Default"
- "Tool Rendering ..." -> "Generative UI: Tool Rendering (...)"
- "Tool Rendering + Reasoning Chain" -> "Generative UI: Rendering multiple tools"
- "Agentic Generative UI ..." -> "Generative UI: Agent State"
- "Frontend Tools (...)" -> "Frontend Tools: ..."
- "Shared State (...)" -> "Shared State: ..."
- "State Streaming" -> "Shared State: Streaming"
- "Readonly State (Agent Context)" -> "Shared State: Frontend Context"
- "BYOC Hashbrown <-> json-render" -- labels intentionally swapped per
  user instruction (demos were historically reversed; new labels
  reflect what they actually do).

LGP manifest demos[].name updated to match feature-registry names so
the dojo and dashboard surface the same human-readable label.

## Show Deprecated toggle (feature-grid.tsx)

Added a checkbox in the matrix header -- default OFF -- that filters
feature rows where `feature.deprecated === true`. Toggle ON shows all
deprecated features across all integrations (audit trail); toggle OFF
hides those rows entirely so the gold-standard view stays clean.

Reverted the catalog-side filter from PR #4744 (which dropped LGP
cells for deprecated features at catalog-generation time). Now the
catalog emits cells uniformly for all (integration x feature) pairs,
and visibility is controlled at the dashboard layer. Toggling on
shows complete cross-integration data without missing-cell artifacts.

Affects 4 features marked deprecated:true in feature-registry.json:
agentic-chat-reasoning, hitl, hitl-in-chat-booking,
reasoning-default-render.

LGP cell count: back to 43 (38 wired + 1 stub + 4 unshipped). The 4
unshipped rows are hidden by default; toggle to surface them.

Tests: 18/18 catalog tests + 1588/1588 harness vitest passing.
validate-fixture-tool-surface clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 20:06:39 -07:00
github-actions[bot] 80eb7a12ad style: auto-fix formatting 2026-05-09 02:02:47 +00:00
Tyler Slaton 1ce83b8a73 fix(showcase): close 2 D5 fixture gaps + filter deprecated features from gold-standard view
Three fixes that follow up on PR #4743 to bring LGP closer to fully-green
on the dashboard:

1. tool-rendering-reasoning-chain probe: was failing with
   `expected [data-testid="reasoning-block"] to mount within 30000ms`.
   Root cause: the demo's `<ReasoningBlock>` slot only mounts when a
   reasoning-role message lands in the transcript, which requires
   aimock to emit REASONING_MESSAGE_* events, which in turn requires
   the fixture's first-leg response to carry a `reasoning` field. The
   weather/Tokyo and SFO/JFK first-leg fixtures were missing it.
   Mirrors the convention documented in reasoning-display.json:2.
   Patched both source (harness/fixtures/d5/) and bundle (aimock/d5-all.json).

2. gen-ui-interrupt source fixture: the source fixture file was missing
   the resume-leg toolCallId entries that already existed in the bundle.
   Cosmetic mirror so re-bundling stays consistent. Same chip prompts +
   same toolCallIds as interrupt-headless.json (both probes share the
   same agent and aimock fixture set; the difference is the FRONTEND
   rendering — useInterrupt inline vs useHeadlessInterrupt separate-pane).

3. Dashboard gold-standard filter: 4 deprecated/legacy features
   (agentic-chat-reasoning, hitl, hitl-in-chat-booking,
   reasoning-default-render) used to render as X-marked rows in the
   LGP gold-standard dashboard view because LGP intentionally does
   NOT implement them — they were consolidated into the modern shape
   (reasoning-custom + reasoning-default; hitl-in-chat with
   useHumanInTheLoop). Other 17 integrations still serve those legacy
   demos, so we don't yank the features from feature-registry.json
   entirely. Instead: marked them `deprecated: true` and updated
   generate-registry.ts to skip emitting cells when a deprecated
   feature is unshipped for an integration. LGP cells: 43 → 39 (the
   4 deprecated rows disappear). Other integrations: unchanged
   (audit trail preserved). Catalog total: 774 → 770.

Tests:
  - 1588/1588 harness vitest passing
  - 19/19 generate-catalog + generate-registry tests passing
    (counts updated for the 4 dropped LGP cells + new deprecated-
    feature filter test)
  - validate-fixture-tool-surface clean (282 fixtures × 627 demos)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 19:00:58 -07:00
Tyler Slaton 59ecd828e5 test(showcase/scripts): update catalog+registry counts post LGP feature additions
Validate Showcase CI was failing on hardcoded count assertions in
generate-catalog.test.ts and generate-registry.test.ts after this PR
added 3 features to the LGP manifest (interrupt-headless,
shared-state-read, tool-rendering-reasoning-chain) and 1 feature to
feature-registry.json (shared-state-read — the others were already
declared).

- LGP feature/demo count: 36 → 39
- Total feature-registry features: 42 → 43
- Catalog integrated cells: 756 → 774 (43 × 18)
- LGP integrated cells: 42 → 43 (38 wired + 1 stub + 4 unshipped)
- Metadata total_cells (docs-only excluded): 738 → 756

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 17:51:54 -07:00
Alem Tuzlak f8c711d2bb feat(showcase): aimock record/replay infra for deterministic D5 fixtures
Adds a record/replay loop on top of the existing local Docker stack so
each langgraph-python D5 demo can capture real-LLM responses once and
replay them deterministically thereafter. One fewer source of D5 flake
per demo: no more 'tests pass with real OpenAI / fail with aimock'
because the prompts have no fixture coverage.

What lands here:

- showcase/docker-compose.record.yml — overlays aimock with --record
  + --provider-openai/anthropic and a writable mount for the recording
  dir. Drops the baseline d5-all.json/feature-parity.json/smoke.json
  loads so prompts that already match a stale fixture can still proxy
  through to the real provider.
- showcase/docker-compose.replay.yml — same writable mount, no
  --record, no provider URLs; layers the per-demo fixtures alongside
  the baseline ones for normal probe runs.
- showcase/scripts/record-d5-fixtures.mjs — orchestrator. For each
  demo (catalog feature ID), drops any prior consolidated <slug>.json,
  restarts aimock to clear in-memory recorded fixtures, snapshots
  recorded/, runs the d5 probe through pnpm exec tsx, then merges
  every per-call file written under recorded/ into a single
  showcase/aimock/d5-recorded/<slug>.json (one fixture per LLM turn,
  in chronological order).
- showcase/aimock/d5-recorded/<slug>.json × 6 — initial recordings
  for the still-red bucket-C cells: beautiful-chat (8), gen-ui-interrupt
  (2), gen-ui-tool-based (1), headless-complete (1), reasoning-custom
  (1), tool-rendering-default-catchall (2). 15 fixtures total.
- showcase/aimock/d5-recorded/.gitignore — keeps the per-call
  recorded/ scratch dir out of the tree (orchestrator deletes per-call
  files after consolidation, this just guards against re-runs).

D5 impact: replaying the recordings flips
d5:langgraph-python/gen-ui-custom (catalog gen-ui-tool-based) from red
to green deterministically. The other five demos still fail their UI
or assertion-side checks, but their LLM-side responses are now fixed,
so the remaining work is probe/UI fixes against a stable baseline
rather than flake hunting.

Aimock recorder requires a one-line patch (turnIndex + hasToolResult
on each recorded fixture's match) for multi-turn flows to record
correctly. Upstream fix proposed for @copilotkit/aimock; until it
ships, the orchestrator probes for the patch and aborts loudly with
the missing-fields message rather than silently producing single-turn
fixtures. See the script's header comment for the exact patch payload.
2026-05-08 14:57:05 +02:00
Alem Tuzlak bbe128ca65 fix(showcase): repair langgraph-python manifest highlight paths and bump test snapshots
Three highlight paths in langgraph-python's manifest pointed at files
that don't exist after the PR #4694 reorganization:
  - hitl-in-chat → src/agents/hitl_in_chat.py (actually hitl_in_chat_agent.py)
  - chat-slots → custom-welcome-screen.tsx (file doesn't exist; use slot-wrappers.tsx)
  - mcp-apps → copilotkit-mcp-apps/route.ts (actually .../[[...slug]]/route.ts)

The bundler walks every highlight at build time; one missing path aborts
the whole CI step. Fix all three.

Test snapshot counts in generate-catalog and generate-registry hardcoded
40 features / 720 cells / 702 total. With the two new feature IDs added
to the registry (reasoning-default + reasoning-custom), counts shift to
42 / 756 / 738; the LGP-specific cell distribution moved from
39 wired + 1 stub + 0 unshipped to 35 wired + 1 stub + 6 unshipped, and
the registry-side LGP feature/demo count drops to 36 (PR #4694 trimmed
4 items from the manifest's features list).
2026-05-07 14:30:45 +02:00
Alem Tuzlak 45cc89dc99 chore(showcase): ratchet validate-pins baseline 97→98
Pre-existing drift on main (mastra/ms-agent/llamaindex/pydantic-ai/strands)
that the langgraph-python Dockerfile fix is unrelated to. Bump the
baseline in this PR to unblock CI.
2026-05-07 14:03:39 +02:00
Sam Julien e5715cbee0 Exclude mcp-server-setup snippet from upstream sync (PDX-117) 2026-05-06 16:21:21 -07:00
Alem Tuzlak 30666298da chore(shell-docs): sync upstream content (AgentCore + threads + misc) (#4514)
## Summary

Cleans up shell-docs after PR #4521 reintroduced content earlier PRs
intentionally retired, adds a Deploy section with an inlined AWS
AgentCore guide using a custom command-tabs component, and hardens the
sync script against future regressions of the same shape.

## Changes

### Deploy section + AgentCore page (custom UX)
- New `<AgentCoreCommandTabs />` component — framework-aware command
tabs with hljs highlighting and copy buttons, built on shell-docs's own
`<Tabs>`/`<Tab>` primitives. Upstream's version depends on fumadocs-ui,
which shell-docs doesn't install.
- Replaces main's `<Content />` stub at `/deploy/agentcore` with the
full inlined guide.
- Wires the Deploy section into the root sidebar via `deploy/meta.json`
+ a `---Deploy---` group in `meta.json`.
- Registers the component in `mdx-registry.tsx`.

### Remove duplicates reintroduced by the upstream sync
- Delete
`learn/{index,intelligence-platform,threads,tutorials/multi-conversation-chat}.mdx`.
Canonical homes are at `/premium/intelligence-platform`,
`/premium/threads-explained`, and `/tutorials/multi-conversation-chat`.
`next.config.ts` already redirects `/learn/*` to those destinations.
- Delete root `ag-ui-middleware.mdx`. Canonical home is
`/agentic-protocols/ag-ui-middleware`. `next.config.ts` already
redirects `/ag-ui-middleware`.

### Harden sync script
Add `PATH_EXCLUSIONS` regexes so next sync runs don't bring these paths
back:
- `docs/content/docs/learn/`
- `docs/content/docs/(root)/ag-ui-middleware.mdx`
- Orphan shared-state files:
`langgraph/shared-state/workflow-execution`,
`adk/shared-state/{workflow-execution,state-inputs-outputs}`,
`llamaindex/shared-state/state-inputs-outputs`
- AgentCore upstream sources (root shell, per-framework
`deploy-agentcore.mdx`, shared snippet) — shell-docs owns the canonical
inlined version

### Optional schema migrations Step
Adds an opt-in `(Optional) Enable schema migrations` Step to
`premium/self-hosting.mdx` covering `migrations.enabled: true` in the
Helm values + the verification behavior.

## Test plan
- [ ] `/deploy/agentcore` renders the inlined guide; both
`<AgentCoreCommandTabs />` blocks show framework tabs with highlighted
bash and a working copy button
- [ ] Deploy appears as a sidebar group between Premium and What's New
- [ ] `/learn/threads`, `/learn/intelligence-platform`,
`/learn/tutorials/multi-conversation-chat`, and `/learn` all redirect to
their canonical destinations (no longer 200 with duplicate content)
- [ ] `/ag-ui-middleware` redirects to
`/agentic-protocols/ag-ui-middleware`
- [ ] The optional schema migrations Step renders in
`/premium/self-hosting` between the secrets Step and the
install-the-chart Step
- [ ] Next dry-run of `sync-docs-from-main.ts` does not flag the
newly-excluded paths
2026-05-05 12:14:21 +02:00
Sam Julien 45f5cf711c showcase/sync: detect re-introduction of previously-deleted shell-docs paths
PATH_EXCLUSIONS is the durable mechanism for keeping retired upstream
paths out of shell-docs, but it requires the person retiring a page to
also add the regex — and that step has been missed (#4521 brought back
/learn/* and root /ag-ui-middleware.mdx after earlier PRs intentionally
removed them).

Add a safety net: before writing each upstream file, check if its target
shell-docs path exists in git's deletion history and isn't currently on
disk. If so, surface it in the auto-PR's review-items.txt under a new
'Files re-introduced from shell-docs deletion history' section and
include reintroduced.length in hasReviewItems so the PR is flagged
needs-review (exit 3) instead of auto-merged.

Doesn't block the write — content is still synced, the detector is
informational. The fix loop is: human reviews, decides intent. If
unwanted, add a PATH_EXCLUSIONS regex and delete the file; next sync
the detector picks it up again until the regex is in place.

Verified locally — current dry-run flags 3 real findings (root/index,
langgraph/index, microsoft-agent-framework/index) that were deleted in
favor of meta.json folder pages.
2026-05-04 16:32:57 -07:00
Sam Julien c5d2a06e14 showcase: harden sync exclusions to prevent retired paths from re-flowing
The previous sync brought back /learn/*, root /ag-ui-middleware.mdx, the
upstream AgentCore 3-shell + shared snippet, and several orphan
shared-state files that shell-docs deliberately doesn't carry. Add
matching PATH_EXCLUSIONS so future syncs don't reintroduce them.

Not bumping .docs-sync-sha — the previous sync's sha is still accurate
and the new exclusions take effect on the next run.
2026-05-04 15:09:04 -07:00