Skip to content

feat(react): runs page — list, filters, timeline, detail drawer#8

Draft
aryasaatvik wants to merge 1 commit intofeat/api-executions-list-endpointsfrom
feat/react-runs-page
Draft

feat(react): runs page — list, filters, timeline, detail drawer#8
aryasaatvik wants to merge 1 commit intofeat/api-executions-list-endpointsfrom
feat/react-runs-page

Conversation

@aryasaatvik
Copy link
Copy Markdown
Owner

Stacked review copy of upstream RhysSullivan#402 · stacked on RhysSullivan#401.

Prev: feat/api-executions-list-endpoints
Top of the execution-history stack.


See upstream PR #402 for full description.

… mode

Lands the full \`/runs\` observability UI on top of the \`/executions\`
HTTP API shipped in RhysSullivan#401. Route wired in both \`apps/cloud\` and
\`apps/local\`; sidebar gets a "Runs" entry.

React package:
- \`api/executions.tsx\` — client hitting \`GET /executions\`,
  \`GET /executions/:id\`, \`GET /executions/:id/tool-calls\`.
  Flattens the server's nested \`{ execution, pendingInteraction }\`
  into a single row type so components can read \`row.id\` /
  \`row.createdAt\` directly. Wire types are kept as epoch-ms numbers
  (server serializes \`Date\` at the edge) so the UI never has to
  know about Schema-decoded Dates.
- \`pages/runs.tsx\` — infinite-scrolling list, filter rail, timeline
  chart, detail drawer, keyboard-driven navigation (\`j\` live, \`r\`
  refresh, \`/\` filter command, \`?\` help, \`↑/↓\` row nav, \`b\`
  collapse rail). URL params carry the filter state so runs links
  are shareable.
- \`components/runs/*\` — 16 components covering the shell, rows,
  drawer, facet rail, CLI-style filter command + parser, timeline
  chart with drag-to-zoom, live-mode controls, and the keyboard-help
  overlay.
- \`hooks/use-live-mode.ts\` — captures the cutoff timestamp at
  activation so new rows are rendered above a divider without the
  list jumping. \`useEffectEvent\` isolates live-toggle from stale
  closures.
- \`hooks/use-local-storage.ts\` — SSR-safe persistence helper,
  used for field visibility preferences.
- \`api/provider.tsx\` — wraps \`RegistryProvider\` in a shared
  \`QueryClientProvider\` (React Query for the list + detail fetches).
- Deps added: \`@tanstack/react-query\`, \`date-fns\`, \`@date-fns/utc\`,
  \`react-hotkeys-hook\`.
- \`styles/globals.css\` — \`--color-success|warning|error|info\`
  tokens used by the status dots.

Apps:
- \`routes/runs.tsx\` (cloud + local) — file route bound to
  \`<RunsPage search={Route.useSearch()} />\` with Effect-Schema
  validation on each query param.
- \`routeTree.gen.ts\` (cloud + local) — regenerated to register
  \`/runs\`. The tanstack-router vite plugin will overwrite on next
  dev start; kept manual for now so \`bun x tsc --noEmit\` passes in
  CI.
- \`web/shell.tsx\` (cloud + local) — sidebar NavItem for "Runs".

## Test plan

- [x] \`bun x tsc --noEmit\` in \`@executor/react\`, \`apps/local\`,
  \`apps/cloud\` — all clean.
- [x] No new runtime tests (the list/detail flow goes through the
  API layer which the SDK's executions.test.ts exercises end-to-end
  via the in-memory adapter).
- [ ] Dev-server smoke: start the daemon, visit \`/runs\`, exercise
  filters + live mode — to be verified by reviewer or in CI once
  the full stack is merged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant