Files
agent-workbench/assets/dashboard/README.md
T

68 lines
3.5 KiB
Markdown

# 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:
```sh
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.