Commit Graph

4085 Commits

Author SHA1 Message Date
Jordan Ritter a821e637a9 fix: address CR findings in BrowserPool — shutdown guards, acquire timeout, recycle recovery, init graceful degradation 2026-04-28 16:32:20 -07:00
github-actions[bot] 370fd854d5 style: auto-fix formatting 2026-04-28 16:32:20 -07:00
Jordan Ritter 86bf58cff4 fix: persistent browser pool to eliminate Chromium thundering herd
Pre-launch 4 Chromium instances at service boot and check out/return
BrowserContext handles instead of spawning fresh processes per probe.
Eliminates the pthread_create EAGAIN failures when multiple e2e probes
fire simultaneously by capping concurrent Chromium processes at 4.

Pool recycles browsers after 100 contexts (configurable via
BROWSER_POOL_RECYCLE_AFTER) to prevent native memory drift.

Also staggers e2e-demos cron from minute 0 to minute 5 to reduce
probe alignment overlap.
2026-04-28 16:31:59 -07:00
Jordan Ritter 3bfe757f11 fix(showcase): remove false-pass assistant-message selector from tool card cascade 2026-04-28 16:23:37 -07:00
Jordan Ritter 9ce4c6e8e8 fix(showcase): relax D5 assertions for cross-integration compatibility
Remove the "Tokyo" city label check from d5-tool-rendering's
validateProbe — some integrations render the weather card with
only temperature and condition, omitting the city name from the
card element's textContent. The card structure (selector matched,
numeric temperature, childCount >= 1) is the real D5 signal.

Reduce d5-mcp-subagents EXPECTED_REPLY_FRAGMENTS from 5 exact
phrases to 2 ("remote work", "talent pool") — some integration
runtimes truncate or rephrase the streamed text so the original
verbose fragments caused false negatives. The D5 signal is chain
completion, not exact phrase fidelity.

Tests updated to match the relaxed assertions.
2026-04-28 16:23:37 -07:00
Jordan Ritter 1406268f7f fix(showcase): add send-verification retry loop to conversation runner 2026-04-28 16:23:37 -07:00
github-actions[bot] a8c38ceb79 style: auto-fix formatting 2026-04-28 23:06:06 +00:00
Jordan Ritter c62dd66dc4 Merge remote-tracking branch 'origin/main' into blitz/showcase-harness-rename/integration
# Conflicts:
#	pnpm-lock.yaml
#	showcase/harness/config/alerts/smoke-red-tick.yml
#	showcase/harness/scripts/test-notify-harness-jq.sh
#	showcase/harness/src/probes/drivers/e2e-chat-tools.test.ts
#	showcase/harness/src/probes/drivers/e2e-chat-tools.ts
#	showcase/harness/src/probes/drivers/e2e-demos.test.ts
#	showcase/harness/src/probes/drivers/e2e-demos.ts
#	showcase/harness/src/probes/drivers/e2e-readiness.test.ts
#	showcase/harness/src/probes/drivers/e2e-readiness.ts
#	showcase/harness/src/probes/drivers/e2e-smoke.test.ts
#	showcase/harness/src/probes/drivers/e2e-smoke.ts
#	showcase/harness/src/probes/drivers/liveness.test.ts
#	showcase/harness/src/probes/drivers/liveness.ts
#	showcase/harness/src/probes/drivers/smoke.test.ts
#	showcase/harness/src/probes/drivers/smoke.ts
#	showcase/harness/src/probes/liveness.test.ts
#	showcase/harness/src/probes/liveness.ts
#	showcase/harness/src/probes/smoke.test.ts
#	showcase/harness/src/probes/smoke.ts
#	showcase/harness/test/fixtures/rules/valid/smoke-red-tick.yml
#	showcase/ops/src/probes/drivers/e2e-demos.test.ts
#	showcase/ops/src/probes/drivers/e2e-demos.ts
#	showcase/ops/src/probes/drivers/e2e-smoke.test.ts
#	showcase/ops/src/probes/drivers/e2e-smoke.ts
#	showcase/ops/src/probes/drivers/smoke.test.ts
#	showcase/ops/src/probes/drivers/smoke.ts
#	showcase/ops/src/probes/smoke.test.ts
#	showcase/ops/src/probes/smoke.ts
#	showcase/scripts/verify-railway-image-refs.ts
2026-04-28 16:04:44 -07:00
Jordan Ritter d815831a60 fix(shell-dashboard): update composed-cell test for docs dedup behavior 2026-04-28 15:48:47 -07:00
Jordan Ritter 1c7bead053 fix(shell-dashboard): center-align cell content to match X marks
The "no demo" X marks are text-center while depth chips and overlay
content were text-left, causing visual misalignment across all overlay
views. Center both the td and the ComposedCell flex column.
2026-04-28 15:45:27 -07:00
Jordan Ritter a322656e3d Merge branch 'blitz/dashboard-ux-fixes/b6' into blitz/dashboard-ux-fixes/integration 2026-04-28 15:45:08 -07:00
Jordan Ritter 9583b0b62b Merge branch 'blitz/dashboard-ux-fixes/b3' into blitz/dashboard-ux-fixes/integration 2026-04-28 15:45:05 -07:00
Jordan Ritter 6caa4a6e95 Merge branch 'blitz/dashboard-ux-fixes/b7' into blitz/dashboard-ux-fixes/integration 2026-04-28 15:45:01 -07:00
Jordan Ritter 8352ebe83d Merge branch 'blitz/dashboard-ux-fixes/b5' into blitz/dashboard-ux-fixes/integration 2026-04-28 15:44:58 -07:00
Jordan Ritter 1529b93392 Merge branch 'blitz/dashboard-ux-fixes/b4' into blitz/dashboard-ux-fixes/integration 2026-04-28 15:44:55 -07:00
github-actions[bot] 0182b193e1 style: auto-fix formatting 2026-04-28 22:39:22 +00:00
Jordan Ritter 4f41f3aef5 feat(shell-dashboard): reorder toggle bar — presets before individual overlays 2026-04-28 15:36:19 -07:00
Sam Julien ac88962a44 feat(shell-docs): replace placeholder framework logos with branded SVG icons
The framework picker (sidebar + dropdown) and docs landing integration
grid previously rendered initials-as-image fallbacks (e.g. 'LG', 'Ma',
'Py') from /logos/<slug>.svg placeholder files. Replace with inline
SVG icons that use currentColor so they tint with the surrounding
text and adapt to light/dark mode.

Covers langgraph (python/typescript/fastapi), mastra, pydantic-ai,
crewai, agno, ag2, llamaindex, strands, google-adk, microsoft (ms-
agent-python/dotnet), claude-sdk (anthropic mark), and spring-ai.
Slugs without a branded mark fall through to the existing placeholder
SVG (currently only langroid).
2026-04-28 15:35:38 -07:00
Sam Julien 6daa208cb8 feat(shell-docs): add Free Developer Access CTA to brand nav
Mirrors the upstream docs nav by adding a Free Developer Access link
to cloud.copilotkit.ai in the BrandNav, persistent across both the
CopilotKit and AG-UI tabs. Renders with cloud icon + external-link
arrow on desktop (icon-only below 1100px) and as a row in the mobile
slide-out menu.
2026-04-28 15:35:38 -07:00
Jordan Ritter 1c2c81ebae fix(shell-dashboard): deduplicate docs row when health and docs overlays both active 2026-04-28 15:32:04 -07:00
Jordan Ritter 1d5fbd3ad3 feat(shell-dashboard): restore collapsible category rows in feature grid 2026-04-28 15:31:43 -07:00
Jordan Ritter 0c8d0ef71b feat(shell-dashboard): restore cell drilldown popup on depth chip click 2026-04-28 15:30:24 -07:00
Jordan Ritter 09ed887eba feat(shell-dashboard): sticky-pin overlay toggle bar to viewport top on scroll 2026-04-28 15:26:29 -07:00
Jordan Ritter d14dc2d003 feat(shell-dashboard): sticky-pin adaptive legend footer to viewport bottom 2026-04-28 15:26:09 -07:00
Jordan Ritter 3adec0b1c9 feat(shell-dashboard): composable overlay-driven 2-tab layout (#4389)
## Summary

- Collapse 5 dashboard tabs (Coverage, Cells, Parity, Packages, Status)
into 2 (Matrix | Ops) with 5 composable overlay toggles (Links, Depth,
Health, Parity, Docs)
- Each overlay independently controls what renders in the unified
feature×integration matrix — toggle any combination for the view you
need
- URL hash persistence (`#matrix:links,depth,health`), localStorage
fallback, 3 presets (Default, Developer, Ops), legacy hash redirects
from old tab URLs
- Adaptive stats bar and legend that show/hide sections based on active
overlays

## What changed

| Commit | Area |
|--------|------|
| overlay type system, state hook, and tests | `overlay-types.ts`,
`useOverlays.ts` + 22 tests |
| overlay toggle bar with preset buttons | `overlay-toggle-bar.tsx` +
tests |
| composed cell renderer | `composed-cell.tsx` — stacks 4 overlay layers
per cell + tests |
| overlay-aware column headers and ref-depth column |
`overlay-column-header.tsx`, `ref-depth-column.tsx` |
| adaptive stats bar and legend | `adaptive-stats-bar.tsx`,
`adaptive-legend.tsx` |
| wire overlays into page and feature grid | `page.tsx`,
`feature-grid.tsx` — the integration commit |
| formatting and lint fixes | import style + oxfmt |

14 files changed, +2154 / -177 lines.

## Test plan

- [ ] 30/30 test files pass (343 tests), including 22 new useOverlays
tests and composed-cell/toggle-bar test suites
- [ ] `tsc --noEmit` clean
- [ ] `next build` succeeds (with OPS_BASE_URL)
- [ ] Verify overlay toggles compose correctly in browser — each pill
adds/removes its layer
- [ ] Verify URL hash updates on toggle and persists across reload
- [ ] Verify legacy hashes (#coverage, #cells, #parity, #packages,
#status) redirect correctly
- [ ] Verify presets (Default, Developer, Ops) apply the right overlay
combinations
- [ ] Verify minimum-one enforcement — can't deactivate the last overlay
- [ ] Verify Ops tab still shows probe status grid unchanged
2026-04-28 15:10:06 -07:00
Sam Julien 9db0edf1a6 docs(shell-docs): retire unselected/, consolidate /learn/, polish tutorials and IA (#4386)
## Summary

- Retire the `/unselected/*` content tree — 47 files
promoted/deleted/redirected to canonical homes; catch-all redirect
funnels any remaining inbound URLs through soft-default routing.
- Consolidate `/learn/*` — explanation-tier pages absorbed into
Concepts, the multi-conversation tutorial moved to `/tutorials/`, the
open-json-ui spec to `/generative-ui/`, and What's New promoted to its
own top-level section.
- New Agentic Protocols subgroup under Get Started — Overview / AG-UI /
MCP / A2A. Intelligence Platform + Threads explanation pages moved to
the Enterprise section. `generative-ui-overview` and
`three-types-of-gen-ui` merged into a single Generative UI Overview
page.
- Tutorials polish — Prev/Next on every step, Card link styling fixed
(no prose underline), info strip rewritten as `<div>` to fix
nested-`<p>` hydration error.
- 11 LFS-pointer-stub images replaced with real binaries pulled from the
production CDN at docs.copilotkit.ai.
- MDX hydration fixes: nested `<p>` in `/agentic-protocols/mcp`
Accordion, Card link underline escape via `not-prose`.

## Test plan

- [ ] `/agentic-protocols`, `/agentic-protocols/{ag-ui,mcp,a2a}` render
with no console errors and no broken images
- [ ] `/concepts/generative-ui-overview` renders with all four diagrams
(gen-ui-specs + 3 surfaces)
- [ ] `/premium/intelligence-platform` and `/premium/threads-explained`
render under the Enterprise section
- [ ] `/whats-new` and child pages render under the new top-level
section
- [ ] `/tutorials/multi-conversation-chat` and `/tutorials/ai-todo-app`
step through with Prev/Next on every step
- [ ] `/unselected`, `/unselected/quickstart`,
`/unselected/tutorials/ai-todo-app/overview`, etc. all 308 to canonical
homes
- [ ] `/learn`, `/learn/threads`, `/learn/agentic-protocols`,
`/learn/whats-new/v1-50`, etc. all 308 to canonical homes
- [ ] `/concepts/ag-ui-protocol`, `/concepts/intelligence-platform`,
`/concepts/three-types-of-gen-ui` 308 to their new homes
- [ ] Sidebar shows clean section labels with no duplicate group/page
names
2026-04-28 14:47:55 -07:00
Jordan Ritter 1d1afa3a6b fix: probe:smoke discovery + e2e-smoke built-in-agent timeout (#4391)
## Summary
- **probe:smoke discovery failure**: `timeout_ms` was 10s — too tight
for Railway enumeration of 35+ services. Increased to 30s (matching
image-drift/qa probes), fixing `discoveryFailed: true`.
- **e2e_smoke:built-in-agent timeout**: Transport auto-detect race in
`CopilotKitProvider` when using `mode: "single-route"`. Without
`useSingleEndpoint`, auto-detect creates a provisional agent that
constructs REST-pattern URLs (`/agent/:id/run`) which don't exist in
single-route mode. Added `useSingleEndpoint` to all 8 built-in-agent
demo pages.

## Test plan
- [ ] Merge and deploy; trigger probe:smoke — should discover 35/35
- [ ] Trigger e2e-smoke — built-in-agent should complete instead of
timing out
- [ ] Verify other probes unaffected (image-drift, e2e-deep already
green)
2026-04-28 14:40:51 -07:00
Jordan Ritter 3b4e8190cb fix: merge slot B2 — add useSingleEndpoint to built-in-agent demos 2026-04-28 14:34:53 -07:00
Jordan Ritter af2737cabe fix(showcase): add useSingleEndpoint to built-in-agent demo pages
The built-in-agent runtime uses mode: "single-route" which means all
requests go to a single POST endpoint (/api/copilotkit). Without
useSingleEndpoint, the CopilotKitProvider defaults to transport: "auto"
which auto-detects by trying GET /info first (404 from Next.js), then
falls back to single-endpoint POST. During this auto-detect window,
the provisional agent created by useAgent() has transport: "auto",
which constructs REST-style URLs (/api/copilotkit/agent/default/run)
that don't exist in single-route mode. If the user sends a message
before auto-detect completes, the request hits a Next.js 404 and the
run silently fails, causing the e2e-smoke probe to time out waiting
for an assistant response.

Adding useSingleEndpoint to all 8 demo pages forces transport:
"single" from initialization, so both the provisional agent and the
final agent use the correct single-endpoint POST format from the
start.
2026-04-28 14:31:37 -07:00
Jordan Ritter c789f43bbf chore(shell-dashboard): formatting and lint fixes
Split inline type imports into separate import-type statements per
oxlint consistent-type-specifier-style rule. Prefix unused connection
parameter. Apply oxfmt formatting.
2026-04-28 14:18:37 -07:00
Jordan Ritter 1332c10dec feat(shell-dashboard): wire overlays into page and feature grid
Collapse 5 tabs to 2 (Matrix | Ops). Page uses useOverlays for
composable state, passes overlays through to FeatureGrid and
ComposedCell. Grid gains overlay-aware column headers, ref-depth
column, and category separator colspan. Tab-shell gets deprecation
comment for future removal.
2026-04-28 14:18:36 -07:00
Jordan Ritter abb23516ac feat(shell-dashboard): adaptive stats bar and legend
Stats bar shows health/parity/docs summary counts that appear/hide
based on active overlays. Legend renders color-coded keys for each
active overlay layer.
2026-04-28 14:18:36 -07:00
Jordan Ritter 14974c1ada feat(shell-dashboard): overlay-aware column headers and ref-depth column
OverlayColumnHeader shows health strip, parity badge, and tally based
on active overlays. RefDepthColumn is a frozen column pinned after the
feature name that appears when the parity overlay is active.
2026-04-28 14:18:36 -07:00
Jordan Ritter ec99bbd587 feat(shell-dashboard): composed cell renderer
Stacks 4 overlay content layers (Links, Depth, Health, Docs) into a
single matrix cell. Each layer renders only when its overlay is active,
driven by the shared overlays Set from useOverlays.
2026-04-28 14:18:35 -07:00
Jordan Ritter a41d350b6e feat(shell-dashboard): overlay toggle bar with preset buttons
Pill-style toggle bar for 5 overlay layers with 3 presets (Default,
Developer, Ops). Each pill shows active state; presets apply curated
overlay combinations with one click.
2026-04-28 14:18:35 -07:00
Jordan Ritter f4ed2dd51e feat(shell-dashboard): overlay type system, state hook, and tests
Overlay model with 5 composable layers (links, depth, health, parity,
docs), URL hash persistence (#matrix:links,depth,...), localStorage
fallback, preset support, legacy tab-hash redirects, and minimum-one
enforcement. Uses replaceState to avoid polluting browser history.
2026-04-28 14:18:35 -07:00
Jordan Ritter a58bddf9e1 fix: increase smoke probe timeout_ms from 10s to 30s to fix discovery failure
The smoke probe's timeout_ms (10s) was configured when the probe used a
static target list. After migrating to discovery-driven enumeration via
railway-services, the same timeout_ms governs the Railway enumerate
call — a project-level GraphQL query plus per-service variable lookups
(bounded at concurrency 8). With 35+ services, enumerate alone can take
5-12s on a slow tick, causing persistent discoveryFailed:true.

Increasing to 30s matches image-drift and qa (both Railway-discovery
probes that work reliably at this fleet size).

Root cause: timeout_ms is shared between discovery enumerate and
per-target driver invocation. 10s was appropriate for the driver
(3 sequential HTTP GETs) but too tight for the discovery phase
that queries Railway's API for every showcase service.
2026-04-28 14:08:53 -07:00
Jordan Ritter 4244ab3a92 Merge slot B5 into blitz/starter-refs-cleanup/integration 2026-04-28 14:00:06 -07:00
Jordan Ritter e2ffe68457 Merge slot B4 into blitz/starter-refs-cleanup/integration 2026-04-28 14:00:05 -07:00
Jordan Ritter 92629e7949 Merge slot B3 into blitz/starter-refs-cleanup/integration 2026-04-28 14:00:04 -07:00
Jordan Ritter a8dc316bdc fix: remove starter shape from probe driver consumers
Remove the decommissioned "starter" shape type from 4 probe drivers
(e2e-deep, e2e-parity, e2e-readiness, qa) and their test files.
Starters no longer exist in the showcase fleet so the short-circuit
guards, type unions, and test cases are dead code.

- Narrow shape type unions from "package" | "starter" to "package"
- Remove starter short-circuit early-return blocks in all 4 drivers
- Remove starter-specific test cases from all 4 test files
- Clean up starter-referencing comments throughout
2026-04-28 13:56:43 -07:00
Jordan Ritter 36a2e87290 fix: remove starter shape references from liveness and e2e-chat-tools drivers
Showcase starters have been decommissioned. Remove all starter-specific
logic from the liveness and e2e-chat-tools probe drivers:

- Remove starter branch from deriveUrls() in liveness driver
- Remove E2eSmokeStarterSignal type and starter short-circuit from
  e2e-chat-tools driver
- Remove all starter-shape test cases from both test files
- Clean up doc comments referencing showcase-starter-* patterns

All package-shape logic and tests remain intact (60 tests passing).
2026-04-28 13:55:25 -07:00
Jordan Ritter 49de3512ff fix: remove starter shape from railway service discovery
Showcase starters have been decommissioned. Remove the "starter" shape
from ShowcaseServiceShape (now a z.literal("package") instead of
z.enum), remove the showcase-starter-* regex and classification logic
in classifyShape(), remove the isOneEditDistance typo-nudge helper,
and clean up all starter-related comments and jsdoc. Update tests to
remove all starter fixtures, assertions, and test cases while keeping
all package-shape tests passing.
2026-04-28 13:53:13 -07:00
Jordan Ritter b806358d59 chore: remove starter references from YAML configs, test fixtures, and scripts
Remove residual showcase-starter-* references now that starters are
decommissioned:

- Delete showcase/ops/config/alerts/smoke-red-tick.yml (starter-only
  alert rule with kind: starter filter)
- Delete showcase/ops/test/fixtures/rules/valid/smoke-red-tick.yml
  (test fixture mirroring the deleted alert rule)
- Update showcase/ops/config/probes/smoke.yml comments to remove
  showcase-starter-ag2 example and 34-service count
- Update showcase/ops/scripts/test-notify-ops-jq.sh to remove starter
  build job fixtures and starter service names from jq partition test
- Update showcase/scripts/verify-railway-image-refs.ts to remove
  showcase-starter-<slug> from canonical shape comment
2026-04-28 13:51:36 -07:00
Jordan Ritter 9f25dd6f5c chore(showcase): format harness test files with oxfmt 2026-04-28 13:50:55 -07:00
Jordan Ritter 83b077db87 refactor(showcase): update scripts, docs, and aimock references for harness rename
Update comment references in showcase scripts (create-integration,
redirect-decommission, validate-pins, verify-railway-image-refs),
RAILWAY.md docs, aimock/d5-all.json fixture comment, and
built-in-agent route comment.
2026-04-28 13:48:30 -07:00
Jordan Ritter d3bf61ef96 refactor(showcase): update shell-dashboard references for harness rename
Update comment references in next.config.ts, ops-api.ts,
ops-api.test.ts, live-status.ts, status-tab.tsx,
use-probes.integration.test.tsx, and Dockerfile.
2026-04-28 13:48:25 -07:00
Jordan Ritter 0522b7fa41 refactor(showcase): rename showcase/ops → showcase/harness
The monitoring/alerting service is a test harness (probes, assertions,
alerting), not an operations service. Rename the directory, package
name (@copilotkit/showcase-ops → @copilotkit/showcase-harness), all
internal references (Dockerfile, Prometheus metric prefix
showcase_ops_ → showcase_harness_, orchestrator log messages, probe
YAML nameExcludes, test fixtures), and regenerate pnpm-lock.yaml.

Wire protocol names (X-Ops-* headers) and shell-dashboard internal
API naming (OPS_BASE_URL, ops-api.ts) are intentionally unchanged —
they are stable contracts between sender and receiver.
2026-04-28 13:48:12 -07:00
Jordan Ritter 52e2313553 fix: switch built-in-agent to single-route mode for smoke compatibility (#4387)
## Summary
- Switch the built-in-agent copilotkit route from multi-route (default)
to single-route mode
- Remove the `withProbeCompat` 404-to-400 wrapper (no longer needed)

## Why
The smoke probe POSTs a v1-style JSON envelope `{method, params, body}`
to `/api/copilotkit`. In multi-route mode, the v2 runtime tries to match
URL patterns (e.g. `/agent/:agentId/run`) and returns 404 for bare
`/api/copilotkit` POSTs. The `withProbeCompat` wrapper converted 404 to
400, but the smoke probe needs the runtime to actually parse the request
and return a real response, not just a non-404 status.

Single-route mode accepts the JSON envelope format directly, so the
smoke probe's `{method: "agent/run", params: {agentId: "default"}, body:
{...}}` payload is properly parsed and dispatched to the agent handler.

## Test plan
- [ ] Verify smoke:built-in-agent turns green after deploy
- [ ] Verify the copilotkit endpoint still handles normal agent/run
requests
2026-04-28 13:43:25 -07:00
Jordan Ritter f1f3f07514 fix: resolve security vulnerabilities via dependency overrides (#3857)
## Summary

Comprehensive security vulnerability sweep via pnpm overrides and devDep
bumps. Reduces audit from **155+ to 3** unfixable vulnerabilities.

### Changes

**49 pnpm overrides** covering all resolvable transitive dependency
vulnerabilities:
- 12 initial overrides (phase 1)
- 7 upgraded to higher patched versions (phase 2)
- 30 new overrides added (phase 3)

**Direct dependency bumps:**
- storybook devDeps: ^10.1.10 → ^10.2.10 (root + react storybook
example)
- vitest in demo-agents: ^2.1.8 → ^4.1.3 (resolves vite 5.x vuln)
- next in chat-with-your-data: 15.6.0-canary.58 → 15.6.0-canary.61
- vite in react-router: ^6.0.0 → ~7.3.2

### Remaining 3 (truly unfixable)

| Package | Severity | Why |
|---------|----------|-----|
| parse-git-config | HIGH | No patch exists (patched: <0.0.0), dep of
danger |
| elliptic | LOW | No patch exists, deep in storybook crypto chain |
| next | MODERATE | Example on 15.x canary, advisory needs 16.x |

### Companion PR
ag-ui-protocol/ag-ui#1504

Part of CPK-7320
2026-04-28 13:42:41 -07:00