feat(web): build read-only operator views

This commit is contained in:
2026-03-20 11:56:29 +08:00
parent ce9061ca54
commit f58f48f0d5
12 changed files with 1997 additions and 211 deletions
@@ -0,0 +1,70 @@
# Web Phase 2 Read-Only UI
## Status
- `completed`
## Owner
- Codex
## Started At
- `2026-03-20`
## Goal
- Implement the first real Phase 2 operator UI in `apps/web` by shipping the read-only runs list, run detail, blocked queue, and thread timeline views on top of the existing `orchd` HTTP API and Cadence UI source-owned components.
## Scope
- create an execution trace for the Phase 2 read-only UI workstream
- wire the frontend to the existing read-only API contract
- implement routed views for runs list, run detail, blocked queue, and thread timeline
- reuse Cadence UI source-owned components instead of introducing new foundational UI primitives
- validate the frontend build and keep `docs/implementation-roadmap.md` synchronized
## Checklist
- [x] create the active execution roadmap for the Phase 2 read-only UI workstream
- [x] inspect the current frontend shell and backend read contract
- [x] add the frontend data layer and route structure for the Phase 2 read-only views
- [x] implement the runs list, run detail, blocked queue, and thread timeline screens
- [x] ensure Cadence UI styles render correctly in the consumer app
- [x] validate the frontend build and fix any type or integration issues
- [x] update `docs/implementation-roadmap.md`
- [x] archive this roadmap with a completion summary if the slice is fully complete
## Files
- `docs/roadmaps/archive/web-phase2-read-only-ui.md`
- `docs/implementation-roadmap.md`
- `apps/web/package.json`
- `apps/web/src/app.tsx`
- `apps/web/src/features/operator-console.tsx`
- `apps/web/src/lib/api.ts`
- `apps/web/src/lib/format.ts`
- `apps/web/src/styles.css`
- `apps/web/src/vite-env.d.ts`
- `apps/web/vite.config.ts`
- `pnpm-lock.yaml`
## Decisions
- keep the first Phase 2 UI slice read-only and route it against the existing HTTP API instead of coupling UI delivery to new backend mutations
- prefer composition from the copied-in Cadence UI source over new hand-rolled UI primitives
## Blockers
- none
## Next Step
- build the next web slice on top of the shipped read-only screens by adding operator write actions, council views, and realtime event handling without replacing the new routed operator shell
## Completion Summary
- replaced the placeholder `apps/web` landing screen with a routed read-only operator UI that now ships runs list, run detail, blocked queue, and thread timeline pages backed by the existing `orchd` API
- added a typed frontend read layer for the current HTTP contract, including client-side blocked queue aggregation across runs and thread timeline payload/artifact rendering
- wired Tailwind v4 into the consumer app so the copied-in Cadence UI source-owned components render correctly, and used those components throughout the new pages instead of introducing new foundational UI primitives
- validated the slice with `pnpm run web:build`, seeded a local demo run/thread dataset through the existing `orch` and `inbox` CLIs, and verified the Vite dev server can proxy the runs, run detail, and thread endpoints through to `orchd`