Files
Codewalkers/docs/wireframes/v2/agents.md
Lukas May 478a7f18e9 docs: Add v2 wireframes and theme specification
14 files in docs/wireframes/v2/ addressing 13 UX gaps from v1:
- Theme spec with indigo brand, status tokens, terminal/diff tokens,
  dark mode, Geist typography, 6px radius, layered shadows
- Wireframes for all pages with loading/error/empty states
- Shared component specs (SaveIndicator, EmptyState, ErrorState,
  CommandPalette, ThemeToggle)
2026-03-02 18:13:17 +09:00

290 lines
13 KiB
Markdown

# Agents Page (v2)
### Route: `/agents`
### Source: `packages/web/src/routes/agents.tsx`
---
## v1 -> v2 Changes
| Aspect | v1 | v2 |
|--------|----|----|
| Provider filter | None | Dropdown: All / Claude / Codex / Gemini / etc. |
| Mode filter | None | Dropdown: All / discuss / plan / detail / execute / verify / etc. |
| Search | None | Text input filtering agent name |
| Agent card context | Name + status + provider + mode + time only | Added context row: "Task: ..." or "Initiative: ..." with link |
| Loading state | 5 skeleton cards (basic) | 5 skeleton cards with shimmer animation |
| Error state | AlertCircle + retry (exists) | Same (unchanged) |
| Empty (filtered) | "No agents match this filter" | "No matching agents" + `[Clear filters]` link |
| Empty (zero agents) | None | Centered empty state with description |
---
## Default State (with agents)
```
+=============================================================================+
| [CW] Initiatives [*Agents*] *3 Inbox (2) Settings [cmd-k] [sun] * |
+=============================================================================+
| |
| Agents (7) [ Refresh ] |
| [search___________] [All providers v] [All modes v] |
| |
| Agent List 320px | Agent Output |
| -------------------------+-------------------------------------------------|
| +----------------------+ | |
| | * blue-fox-7 [...] | | Session 1 |
| | claude . execute | | > Analyzing codebase structure... |
| | Task: PKCE flow | | > Found 12 files matching pattern |
| | 2m ago | | > Creating src/auth/pkce.ts |
| +----------------------+ | > Writing test file... |
| | |
| +----------------------+ | |
| | - red-elk-3 [...] | | |
| | claude . plan | | |
| | Init: Auth Overhaul | | |
| | 1h ago | | |
| +----------------------+ | |
| | |
| +----------------------+ | |
| | ? green-bear-1 [...] | | |
| | codex . detail | | |
| | Task: DB schema | | |
| | 5m ago | | |
| +----------------------+ | |
+=============================================================================+
```
---
## Search + Filter Controls
```
[search___________] [All providers v] [All modes v]
```
### Search input
- Placeholder: "Search agents..."
- Client-side filter on `agent.name` (case-insensitive substring match)
- Debounced 150ms
- Clear button `[x]` appears when non-empty
### Provider filter dropdown `[All providers v]`
```
[All providers v]
+-----------------+
| All |
| claude |
| codex |
| gemini |
| ... |
+-----------------+
```
Populated dynamically from `listProviderNames` tRPC query. Only shows providers
that have at least one registered account.
### Mode filter dropdown `[All modes v]`
```
[All modes v]
+-----------------+
| All |
| discuss |
| plan |
| detail |
| execute |
| verify |
| refine |
| research |
| merge |
| review |
+-----------------+
```
Static list of all task category values.
---
## Agent Card Anatomy (v2)
### Running agent with task context
```
+------------------------------+
| * blue-fox-7 [...] |
| claude . execute |
| Task: PKCE flow | <-- clickable link to task/initiative
| 2m ago |
+------------------------------+
```
### Running agent with initiative context (no specific task)
```
+------------------------------+
| * blue-fox-7 [...] |
| claude . plan |
| Init: Auth Overhaul | <-- clickable link to initiative
| 2m ago |
+------------------------------+
```
### Waiting for input
```
+------------------------------+
| ? green-bear-1 [...] |
| codex . detail |
| Task: DB schema |
| 5m ago |
| Answer questions -> | <-- link to /inbox
+------------------------------+
```
### Exited
```
+------------------------------+
| - red-elk-3 [...] |
| claude . plan |
| Init: Auth Overhaul |
| 1h ago |
+------------------------------+
```
### Context row rules
- If agent has a `taskId`: show "Task: <task name>" linking to the initiative detail (Execution tab)
- Else if agent has an `initiativeId`: show "Init: <initiative name>" linking to the initiative detail
- Else: omit the context row entirely
- Context text: `text-xs text-muted-foreground`, clickable portion gets `hover:underline cursor-pointer`
### Status dot legend
- `*` green/active = `running`
- `?` orange/waiting = `waiting_for_input`
- `-` grey/exited = `stopped`, `crashed`, `idle`, `completed`
---
## Loading State (5 skeleton cards with shimmer)
```
+=============================================================================+
| |
| Agents [ Refresh ] |
| [search___________] [All providers v] [All modes v] |
| |
| Agent List 320px | Agent Output |
| -------------------------+-------------------------------------------------|
| +----------------------+ | |
| | [.] ░░░░░░░░░░░░ | | |
| | ░░░░░ . ░░░░░░ | | |
| | ░░░░░░░░░░░░░ | | |
| +----------------------+ | Select an agent |
| +----------------------+ | to view output |
| | [.] ░░░░░░░░░░░░ | | |
| | ░░░░░ . ░░░░░░ | | |
| | ░░░░░░░░░░░░░ | | |
| +----------------------+ | |
| +----------------------+ | |
| | [.] ░░░░░░░░░░░░ | | |
| | ░░░░░ . ░░░░░░ | | |
| | ░░░░░░░░░░░░░ | | |
| +----------------------+ | |
| +----------------------+ | |
| | [.] ░░░░░░░░░░░░ | | |
| | ░░░░░ . ░░░░░░ | | |
| | ░░░░░░░░░░░░░ | | |
| +----------------------+ | |
| +----------------------+ | |
| | [.] ░░░░░░░░░░░░ | | |
| | ░░░░░ . ░░░░░░ | | |
| | ░░░░░░░░░░░░░ | | |
| +----------------------+ | |
+=============================================================================+
```
Skeleton cards mirror card anatomy: status dot placeholder, name line, provider/mode line,
context line. Shimmer animation sweeps left-to-right on a 1.5s loop.
---
## Error State
```
+=============================================================================+
| |
| Agents [ Refresh ] |
| |
| |
| [AlertCircle] |
| Failed to load agents |
| |
| [ Retry ] |
| |
+=============================================================================+
```
- `[AlertCircle]` icon: `h-8 w-8 text-destructive`
- Error message: `text-sm text-destructive`
- `[ Retry ]` button: `variant="outline" size="sm"`, calls `agentsQuery.refetch()`
---
## Empty State -- No Agents
```
+=============================================================================+
| |
| Agents [ Refresh ] |
| [search___________] [All providers v] [All modes v] |
| |
| +-----------------------------------------------------------------------+ |
| | | |
| | [bot] | |
| | No agents yet | |
| | Agents appear here when dispatched from initiatives. | |
| | | |
| +-----------------------------------------------------------------------+ |
| |
+=============================================================================+
```
- `[bot]` icon: `Bot` from Lucide, `h-8 w-8 text-muted-foreground`
- Shown when the `listAgents` query returns an empty array and no filters are active
---
## Empty State -- Filters Active, No Match
```
+=============================================================================+
| |
| Agents [ Refresh ] |
| [codex_____________] [claude v] [execute v] |
| |
| +-----------------------------------------------------------------------+ |
| | | |
| | No matching agents | |
| | Try a different search or filter. | |
| | | |
| | [Clear filters] | |
| | | |
| +-----------------------------------------------------------------------+ |
| |
+=============================================================================+
```
- "Clear filters" is a text link (`text-primary hover:underline cursor-pointer`)
- Resets search input to empty, provider filter to "All", mode filter to "All"
---
## Source
- `packages/web/src/routes/agents.tsx`
- `packages/web/src/components/AgentOutputViewer.tsx`
- `packages/web/src/components/AgentActions.tsx`
- `packages/web/src/components/StatusDot.tsx`