3.5 KiB
Agent Workbench dashboard template
A reusable React + TypeScript dashboard using Vite, Tailwind CSS and official shadcn/ui components. All project data comes from the same-origin API. No production fixtures, accounts, host inventories, credentials or screenshots are included.
Build and serve
Use Node.js 22.12 or newer (validated with Node.js 24) and npm:
npm ci
npm run build
Serve dist/index.html at / and dist/assets/* with the coordination API at
/api/*. Route selection lives in the URL hash, so the static server does not
need an SPA path fallback. Do not serve source files or node_modules.
npm run preview only previews static assets; an authenticated API is still
required. npm run lint checks the source; upstream shadcn sources can emit
React development/fast-refresh warnings without affecting a production build.
The official Radix/sidebar components use inline styles for dimensions and
positioning. A compatible CSP keeps scripts and connections at 'self' while
allowing inline styles. No remote fonts, CDN scripts or external runtime assets
are required. Retain the server's authentication, Host/Origin and CSRF checks.
Pages and data
#/overview: summary, current phase, blockers, important reports and decisions.#/tasks: work packages, phase, ETA range and evidence.#/cluster: node memory/load, storage and scheduler queues; unknown is not zero.#/communication: the configured current/dedicated conversation and other sessions.#/decisions: pending task decisions and proposal/decision events.
GET /api/state provides the title from config.title (or title), falling back
to Agent Workbench. primary_session_id selects the current or dedicated session and
falls back to wp4-progress for compatibility. The UI never assumes the bound
conversation is WP4. An optional backend-provided session.thread_url matching
codex://threads/<UUID> enables the local original-session link; the client never
fabricates a URI from an unverified ID. An absent primary record disables sending; it never
silently redirects to a different session. History messages with
origin: session_history are labeled as synchronized source text.
The client reads GET /api/messages?session_id=... and writes
POST /api/messages and POST /api/session-requests. It sends a Bearer token
and X-CSRF-Token: 1. The token remains in React memory, never URL, localStorage
or sessionStorage. Refresh requires re-login while preserving route and selected
session. Polling is every three seconds, with cancellation and session scoping.
A send retry reuses its idempotency key. History synchronization and AI execution
are backend/worker responsibilities; the template never generates model replies.
Fixed design system and upstream sources
src/index.css is the only palette definition: official zinc base plus official
blue primary, with named semantic success/danger/active state colors. Pages use
semantic tokens, not randomly selected per-project palettes.
The official sidebar-07 and login-01 blocks were installed using the official
shadcn@4.22.1 CLI. Their project-specific adapters are app-sidebar.tsx,
nav-main.tsx and login-form.tsx. Underlying UI components are retained in
src/components/ui. Normal builds use the committed source snapshot and exact
npm lockfile; they do not fetch a registry or run the generator.
See THIRD_PARTY_NOTICES.md, THIRD_PARTY_LICENSES.txt and
registry-provenance.json for sources, licenses and content hashes.