agentgui 1.0.851 β†’ 1.0.853

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.codeinsight ADDED
@@ -0,0 +1,102 @@
1
+ ## 🎯 agentgui v1.0.811 β€” Multi-agent ACP client with real-time communication
2
+
3
+ **Runtime:** node (pnpm)
4
+
5
+ ## πŸš€ Quick Start
6
+
7
+ `node server.js --watch`
8
+
9
+ # 103f 27.9kL 1343fn 31cls cx2.6
10
+ *Legend: f=files L=lines fn=functions cls=classes cx=avg-complexity | file:line:name(NL)=location Np=params | ↑N=imports-from ↓N=imported-by (N)=occurrences (+N)=more | πŸ”„circular 🏝️isolated πŸ”₯complex πŸ“‹duplicated πŸ“large*
11
+
12
+ **Langs:** JS:99% JSON:0%
13
+
14
+ ## πŸ› οΈ Tech Stack
15
+
16
+ **Stack:** Express, Zod
17
+ **Patterns:** Date.now(335), sendJSON(225), prep(185), this.escapeHtml(157), document.createElement(142), broadcastSync(140)
18
+ **Top IDs:** type(839), data(811), error(724), conversationId(624), message(572), req(563)
19
+
20
+ ## ⚑ Code Patterns
21
+
22
+ **Async:** async(622), await(270), Promise(15)
23
+ **Errors:** try/catch(457), throw(120)
24
+ **Internal calls:** Date.now(335), sendJSON(225), prep(185), this.escapeHtml(157), document.createElement(142), broadcastSync(140), document.getElementById(138), assign(106)
25
+
26
+ ## πŸ”— I/O & Integration
27
+
28
+ **Env vars:** AGENTGUI_BASE_URL, BASE_URL, BUN_BE_BUN, BUN_INSTALL, CODEX_HOME, DEBUG, GITHUB_USER, GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET, HOME, HOT_RELOAD, NPM_CACHE, PASSWORD, PORT, PORTABLE_DATA_DIR, PORTABLE_EXE_DIR, RATE_LIMIT_MAX, SHELL, STARTUP_CWD, _, npm_config_cache, npm_execpath
29
+ **HTTP:** fetch(29)
30
+ **Storage:** SQL(204), files(240), JSON(175)
31
+ **Events:** emit(48), listen(289)
32
+
33
+ ## πŸ“Š Code Organization
34
+
35
+ **Large files:** js/client.js:3479L, server.js:3407L, js/streaming-renderer.js:2422L, lib/db-queries.js:1412L, lib/claude-runner.js:1266L, static/app.js:968L (+17)
36
+ **Long funcs:** lib/db-queries.js:3:createQueries(1410L), server.js:1838:processMessageWithStreaming(539L), js/client.js:2798:loadConversationMessages(284L), lib/ws-handlers-conv.js:19:register(264L), lib/claude-runner.js:276:_runACPOnce(261L), js/client.js:439:setupUI(233L) (+71)
37
+ **Many params:** lib/db-queries.js:3:createQueries(101p), lib/ws-handlers-run.js:4:register(31p), lib/routes-tools.js:3:register(27p), acp-queries.js:8:createACPQueries(24p), lib/ws-handlers-conv.js:19:register(21p), lib/ws-handlers-util.js:9:register(20p) (+31)
38
+ **Classes:** lib/pm2-manager.js:0:PM2Manager, lib/plugin-loader.js:0:PluginLoader, lib/claude-runner.js:0:AgentRunner, lib/claude-runner.js:0:AgentRegistry, lib/checkpoint-manager.js:0:CheckpointManager, lib/ws-protocol.js:0:WsRouter, js/syntax-highlighter.js:0:SyntaxHighlighter, js/image-loader.js:0:ImageLoader (+16)
39
+
40
+ ## πŸ”„ Architecture
41
+
42
+ **L0 [pure exports]:** tool-install-machine(7↓), execution-machine(5↓), tool-version(4↓), agent-discovery(4↓), oauth-common(4↓), speech(3↓), codec(3↓), acp-server-machine(3↓) (+15)
43
+ **L3 [pure imports]:** server(43↑), agent-registry-configs(1↑)
44
+ **Cross-module:** server.js→lib, server.js→database.js, database.js→lib
45
+ **Hubs:** server(43↑0↓), tool-install-machine(0↑7↓), tool-manager(4↑1↓), routes-oauth(4↑1↓), execution-machine(0↑5↓)
46
+ **External:** xstate, module, bun:sqlite, zod, ws, lru-cache
47
+
48
+ ## πŸ”Œ API Surface
49
+
50
+ **Exported fns:** claude-runner.js:1196:runClaudeWithStreaming(1p), speech.js:9:ttsCacheKey(1p), speech.js:13:ttsCacheGet(1p), speech.js:17:ttsCacheSet(1p), ws-handlers-run.js:4:register(31p)
51
+ **Classes:** PM2Manager, PluginLoader, AgentRunner, AgentRegistry, CheckpointManager, WsRouter (+18)
52
+ **Entry files:** ws-handlers-run, routes-threads, tool-install-machine, claude-runner, agent-descriptors (+18)
53
+
54
+ ## 🚨 Issues
55
+
56
+ - πŸ”₯ Complex funcs: db-queries.js:3:createQueries(1410L), server.js:1838:processMessageWithStreaming(539L), client.js:2798:loadConversationMessages(284L), ws-handlers-conv.js:19:register(264L) (+24)
57
+ - πŸ“ Large files: lib/db-queries.js:1412L, lib/claude-runner.js:1266L, server.js:3407L (+7)
58
+ - πŸ“‹ 80 duplicated groups
59
+ - πŸ” hardcoded secrets in server.js:1760
60
+ - πŸ” SQL injection in acp-queries.js:142, acp-queries.js:143, acp-queries.js:176, acp-queries.js:177, db-queries.js:479, db-queries.js:480 (+2)
61
+
62
+ ## 🧹 Dead Code & Tests
63
+
64
+ **Orphaned:** git-plugin.js, state-barrier.js, copy-vendor.js, dialogs.js, recording-machine.js, pm2-monitor.js (+46)
65
+ **Tests:** 0/103 (0%)
66
+
67
+ ## πŸ“¦ Modules
68
+
69
+ - lib: 58f, 111cx, 34↑77↓
70
+ - static: 35f, 0cx, 0↑0↓
71
+ - bin: 1f, 0cx, 0↑0↓
72
+ - electron: 1f, 0cx, 0↑0↓
73
+ - scripts: 3f, 0cx, 0↑0↓
74
+
75
+ ## πŸ“„ File Index
76
+
77
+ **acp-queries.js** 182L fn: createACPQueries, createThread, getThread, patchThread (+17)
78
+ **bin/gmgui.cjs** 79L fn: gmgui
79
+ **database.js** 650L fn: getDataDir, initSchema, migrateFromJson, migrateToACP (+2)
80
+ **ecosystem.config.cjs** 22L exports: [script], [interpreter], [watch], [env], [apps]
81
+ **electron/main.js** 83L fn: startServer, pollReady, attempt, createWindow
82
+ **lib/acp-protocol.js** 91L fn: normalizeContentBlock, extractToolResultContent, handleSessionUpdate, createACPProtocolHandler
83
+ **lib/acp-sdk-manager.js** 199L fn: log, resolveCommand, resetIdleTimer, clearIdleTimer (+14)
84
+ **lib/acp-server-machine.js** 166L fn: calcBackoff, purgeOldRestarts, getOrCreate, get (+6)
85
+ **lib/agent-descriptors.js** 47L fn: buildDescriptor, initializeDescriptors, getAgentDescriptor, getAllDescriptors
86
+ **lib/agent-discovery.js** 168L fn: findCommand, queryACPServerAgents, discoverAgents, discoverExternalACPServers (+1)
87
+ **lib/agent-registry-configs.js** 125L fn: parseClaudeOutput, registerAllAgents, buildArgs, buildArgs
88
+ **lib/checkpoint-manager.js** 182L exports: [CheckpointManager] fn: constructor, loadCheckpoint, injectCheckpointEvents, copyCheckpointChunks (+5)
89
+ **lib/claude-runner.js** 1266L exports: [runClaudeWithStreaming] fn: getSpawnOptions, resolveCommand, constructor, defaultBuildArgs (+23)
90
+ **lib/codec.js** 4L fn: encode, decode
91
+ **lib/db-queries.js** 1412L fn: createQueries, createConversation, getConversation, getAllConversations (+90)
92
+ **lib/execution-machine.js** 182L fn: notifyListeners, getOrCreate, get, remove (+8)
93
+ **lib/gm-agent-configs.js** 77L fn: log, runInstaller, installGMAgentConfigs, forceReinstallGMAgentConfigs
94
+ **lib/jsonl-watcher.js** 253L fn: constructor, start, stop, removeConversation (+13)
95
+ **lib/model-download-machine.js** 107L fn: getActor, send, snapshot, isDownloading (+4)
96
+ **lib/oauth-codex.js** 164L exports: [CODEX_AUTH_FILE], [CODEX_HOME] fn: generatePkce, parseJwtEmail, saveCodexCredentials, getCodexOAuthStatus (+5)
97
+ *+83 more files*
98
+
99
+ Git: branch: main, 1 uncommitted
100
+ Hot: package.json(50), server.js(18), client.js(10), index.html(6), db-queries.js(6), main.css(5)
101
+ Tooling: GitHub Actions (build-platforms.yml, docker-publish.yml, gh-pages.yml, publish-release.yml), Docker
102
+ Conv[JS]: 4-space, single quotes, semicolons, named exports, relative imports, kebab-case files
package/CLAUDE.md CHANGED
@@ -464,6 +464,25 @@ CSS custom properties for code/thinking blocks live in `static/css/main.css`:
464
464
 
465
465
  `parseAndRenderMarkdown()` in `streaming-renderer.js` handles: `##`/`###` headers, `-`/`*` ul lists, `1.` ol lists, `>` blockquotes, `---` hr, inline bold/italic/code/links via `_mdInline()`. Thinking block content is rendered through this function.
466
466
 
467
+ ## README.md Documentation
468
+
469
+ **GitHub Badges and Metrics:**
470
+
471
+ The README.md uses shields.io badges with a consistent pattern:
472
+ - **Header badges** (lines 7-9): Star count, last commit, latest release β€” each links to corresponding GitHub page
473
+ - **GitHub Stats table** (lines 54-62): Detailed metrics (stars, forks, watchers, issues, activity) β€” each badge links to its resource page
474
+ - **All badges use:** `style=flat-square`, `color=blue`, dynamic data (no hardcoded values)
475
+
476
+ **Debug API section** (lines 174-192):
477
+ - Documents `DEBUG=1` environment variable for state inspection
478
+ - Lists `/api/debug/*` endpoints: machines, state, ws-stats
479
+ - Lists browser console `window.__debug` properties with purpose
480
+ - Links to CLAUDE.md for complete architecture documentation
481
+
482
+ **Approach validated:** Header badges are compact (visual prominence); stats table is detailed (discoverability). Non-redundant, no duplicate metrics, complementary visibility.
483
+
484
+ **For future observability improvements:** Use shields.io with the established pattern (flat-square, color=blue, dynamic endpoints). Link badges to corresponding GitHub resource pages. Document in README alongside the badge.
485
+
467
486
  ## Known Gotchas
468
487
 
469
488
  - **`agent-browser --version`** prints help, not version. Use `-V` flag.
package/README.md CHANGED
@@ -4,6 +4,9 @@
4
4
  [![npm downloads](https://img.shields.io/npm/dw/agentgui?color=brightgreen)](https://www.npmjs.com/package/agentgui)
5
5
  [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
6
6
  [![GitHub Pages](https://img.shields.io/badge/docs-live-blue)](https://anentrypoint.github.io/agentgui/)
7
+ [![GitHub stars](https://img.shields.io/github/stars/AnEntrypoint/agentgui?color=blue&style=flat-square)](https://github.com/AnEntrypoint/agentgui/stargazers)
8
+ [![GitHub last-commit](https://img.shields.io/github/last-commit/AnEntrypoint/agentgui?style=flat-square)](https://github.com/AnEntrypoint/agentgui/commits)
9
+ [![GitHub release](https://img.shields.io/github/v/release/AnEntrypoint/agentgui?style=flat-square)](https://github.com/AnEntrypoint/agentgui/releases)
7
10
 
8
11
  Multi-agent GUI client for AI coding agents with real-time streaming, WebSocket sync, and SQLite persistence.
9
12
 
@@ -48,6 +51,16 @@ Modern AI coding requires juggling multiple agents, each in their own terminal.
48
51
  - πŸ“ **File Browser** - Drag-and-drop uploads, direct file editing, and context-aware operations
49
52
  - πŸ”Œ **Developer Friendly** - Hot reload, REST API, WebSocket endpoints, and extensible plugin system
50
53
 
54
+ ## GitHub Stats
55
+
56
+ | Metric | Badge |
57
+ |--------|-------|
58
+ | **Stars** | [![GitHub stars](https://img.shields.io/github/stars/AnEntrypoint/agentgui?color=blue&style=flat-square)](https://github.com/AnEntrypoint/agentgui/stargazers) |
59
+ | **Forks** | [![GitHub forks](https://img.shields.io/github/forks/AnEntrypoint/agentgui?color=blue&style=flat-square)](https://github.com/AnEntrypoint/agentgui/network/members) |
60
+ | **Watchers** | [![GitHub watchers](https://img.shields.io/github/watchers/AnEntrypoint/agentgui?color=blue&style=flat-square)](https://github.com/AnEntrypoint/agentgui/watchers) |
61
+ | **Open Issues** | [![GitHub issues](https://img.shields.io/github/issues/AnEntrypoint/agentgui?color=blue&style=flat-square)](https://github.com/AnEntrypoint/agentgui/issues) |
62
+ | **Activity** | [![GitHub last-commit](https://img.shields.io/github/last-commit/AnEntrypoint/agentgui?style=flat-square)](https://github.com/AnEntrypoint/agentgui/commits) |
63
+
51
64
  ### Screenshots
52
65
 
53
66
  | Light Mode | Dark Mode |
@@ -156,6 +169,27 @@ All routes prefixed with `/gm`:
156
169
  - `BASE_URL` - URL prefix (default: /gm)
157
170
  - `STARTUP_CWD` - Working directory passed to agents
158
171
  - `HOT_RELOAD` - Enable watch mode (default: true)
172
+ - `DEBUG` - Enable internal state inspection endpoints (set to `1`)
173
+
174
+ ## Debug API
175
+
176
+ When `DEBUG=1` is set, internal state inspection endpoints become available:
177
+
178
+ **Endpoints:**
179
+ - `GET /api/debug/machines` - Inspect all XState v5 machine snapshots (execution, acp-server, tool-install states)
180
+ - `GET /api/debug/state` - Full server state dump (connections, queues, active sessions)
181
+ - `GET /api/debug/ws-stats` - WebSocket connection metrics and lag distribution
182
+
183
+ **Browser Console** (`window.__debug`):
184
+ - `window.__debug.convMachineStates` - Per-conversation UI state machines
185
+ - `window.__debug.toolInstallMachineStates` - Tool installation state
186
+ - `window.__debug.voiceMachineState` - TTS playback state
187
+ - `window.__debug.convListMachineState` - Conversation list machine
188
+ - `window.__debug.promptMachineState` - Prompt area state
189
+ - `window.__debug.wsConnectionState` - WebSocket connection status
190
+ - `window.__debug.getSyncState()` - Full snapshot of all machines at once
191
+
192
+ See [CLAUDE.md](CLAUDE.md) for complete XState v5 machine documentation and internal architecture details.
159
193
 
160
194
  ## Troubleshooting
161
195
 
@@ -0,0 +1,28 @@
1
+ Stack trace:
2
+ Frame Function Args
3
+ 0007FFFFAE00 00021005FEBA (000210285F48, 00021026AB6E, 000000000000, 0007FFFF9D00) msys-2.0.dll+0x1FEBA
4
+ 0007FFFFAE00 0002100467F9 (000000000000, 000000000000, 000000000000, 0007FFFFB0D8) msys-2.0.dll+0x67F9
5
+ 0007FFFFAE00 000210046832 (000210285FF9, 0007FFFFACB8, 000000000000, 000000000000) msys-2.0.dll+0x6832
6
+ 0007FFFFAE00 000210068F86 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x28F86
7
+ 0007FFFFAE00 0002100690B4 (0007FFFFAE10, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x290B4
8
+ 0007FFFFB0E0 00021006A49D (0007FFFFAE10, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x2A49D
9
+ End of stack trace
10
+ Loaded modules:
11
+ 000100400000 bash.exe
12
+ 7FFD0A9A0000 ntdll.dll
13
+ 7FFD088E0000 KERNEL32.DLL
14
+ 7FFD08270000 KERNELBASE.dll
15
+ 7FFD0A520000 USER32.dll
16
+ 000210040000 msys-2.0.dll
17
+ 7FFD08670000 win32u.dll
18
+ 7FFD09E60000 GDI32.dll
19
+ 7FFD07270000 gdi32full.dll
20
+ 7FFD07D80000 msvcp_win.dll
21
+ 7FFD07E30000 ucrtbase.dll
22
+ 7FFD09050000 advapi32.dll
23
+ 7FFD089B0000 msvcrt.dll
24
+ 7FFD0A460000 sechost.dll
25
+ 7FFD08740000 RPCRT4.dll
26
+ 7FFD06870000 CRYPTBASE.DLL
27
+ 7FFD07C10000 bcryptPrimitives.dll
28
+ 7FFD09530000 IMM32.DLL
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.851",
3
+ "version": "1.0.853",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "electron/main.js",
package/.gm/prd.yml DELETED
@@ -1,784 +0,0 @@
1
- # AgentGUI UI Redesign - Research & Implementation Plan
2
-
3
- ## Research Phase Complete
4
- - Analyzed current design: sidebar-based chat with basic styling
5
- - Researched competitors: ChatGPT, Claude.ai, GitHub Copilot, Cursor, Continue.dev
6
- - Identified modern patterns and best practices
7
- - Ready for implementation
8
-
9
- ## Design Goals
10
- 1. **Visual Polish**: Modern, professional appearance matching tier-1 AI tools
11
- 2. **Usability**: Clearer information hierarchy, better discoverability
12
- 3. **Performance**: Improved responsive design, smooth animations
13
- 4. **Accessibility**: Enhanced keyboard navigation and screen reader support
14
- 5. **Semantic Design**: Color and typography reflecting functionality
15
-
16
- ---
17
-
18
- ## UI Redesign Items
19
-
20
- - id: header-redesign
21
- subject: Redesign main header with better visual hierarchy
22
- status: pending
23
- description: |
24
- Current header is minimal. Redesign to include:
25
- - Large, bold title with app icon/logo
26
- - Agent/model selector dropdown in header
27
- - Connection status indicator (green dot, animated pulse when connecting)
28
- - Theme toggle button (sun/moon icon)
29
- - Settings/help buttons in top-right
30
- - Breadcrumb navigation for conversations
31
- Currently at line 100-115 of index.html
32
- effort: medium
33
- category: feature
34
- blocking: []
35
- blockedBy: []
36
- acceptance:
37
- - Header includes all 6 elements
38
- - Status indicator animates on reconnect
39
- - Mobile responsive (collapses to hamburger)
40
- edge_cases:
41
- - Long conversation titles truncate with ellipsis
42
- - Status indicator visible in both light/dark modes
43
-
44
- - id: sidebar-redesign
45
- subject: Modernize sidebar with better visual separation and interactions
46
- status: pending
47
- description: |
48
- Current sidebar is functional but dated. Redesign to:
49
- - Add conversation avatars (colored circles with initials or emoji)
50
- - Show preview text of last message in each conversation
51
- - Add timestamp (e.g., "2 hours ago")
52
- - Better visual hover states (subtle background change)
53
- - Conversation metadata badges (unread count, favorite star)
54
- - Improved search with fuzzy matching and recent filtering
55
- - Floating action buttons instead of text buttons
56
- Currently at lines 49-85 of index.html
57
- effort: large
58
- category: feature
59
- blocking: []
60
- blockedBy: []
61
- acceptance:
62
- - Each conversation shows avatar, title, preview, timestamp
63
- - Hover states provide clear feedback
64
- - Search filters by title and preview text
65
- - Mobile sidebar can be swiped away
66
- edge_cases:
67
- - New conversations show placeholder states
68
- - Search results update in real-time
69
- - Avatar generation consistent for same agent
70
-
71
- - id: message-bubbles-upgrade
72
- subject: Redesign message rendering with distinct visual styling
73
- status: pending
74
- description: |
75
- Current messages are plain text. Redesign to:
76
- - User messages: Right-aligned, blue bubble, rounded corners
77
- - Agent messages: Left-aligned, gray bubble, rounded corners
78
- - Add small agent avatar before agent messages
79
- - Add timestamp and sender name above messages
80
- - Better code block styling with language badges
81
- - Streaming animation (blinking cursor, progressive reveal)
82
- - Message actions (copy, regenerate, delete) on hover
83
- - Thinking blocks styled with purple accent color
84
- Currently in js/streaming-renderer.js and css/main.css
85
- effort: large
86
- category: feature
87
- blocking: []
88
- blockedBy: []
89
- acceptance:
90
- - User/agent messages visually distinct
91
- - Avatars render with agent color
92
- - Code blocks include language badge and copy button
93
- - Thinking blocks clearly marked with purple
94
- - Streaming text shows cursor animation
95
- edge_cases:
96
- - Very long messages have proper text wrapping
97
- - Code blocks with large content have scrollable container
98
- - Multiple images in message render as grid
99
-
100
- - id: chat-input-redesign
101
- subject: Upgrade chat input area with better controls
102
- status: pending
103
- description: |
104
- Current input is basic textarea. Redesign to:
105
- - Larger input area that grows with text (auto-resize)
106
- - Placeholder text with tips (e.g., "Shift+Enter for new line")
107
- - Send button with visual feedback (hover, active states)
108
- - Formatting buttons (bold, italic, code, link)
109
- - Emoji picker button
110
- - Attachment/file upload button with drag-drop preview
111
- - Quick actions (regenerate, steer, edit) buttons
112
- - Character count indicator when approaching limit
113
- - Voice input button with animated recording indicator
114
- effort: large
115
- category: feature
116
- blocking: []
117
- blockedBy: []
118
- acceptance:
119
- - Input auto-resizes up to max-height
120
- - All buttons visible and responsive
121
- - Drag-drop file preview shown before upload
122
- - Voice recording shows animated waves
123
- - Keyboard shortcuts work (Cmd+Enter to send)
124
- edge_cases:
125
- - Very long pastes handled smoothly
126
- - Voice input fails gracefully with error message
127
- - File uploads show progress indicator
128
-
129
- - id: streaming-visual-feedback
130
- subject: Add visual feedback during agent streaming
131
- status: pending
132
- description: |
133
- Current streaming has minimal visual indicators. Add:
134
- - Animated loading skeleton (shimmer effect) for new messages
135
- - Pulsing dot indicator showing active streaming
136
- - Token count / generation progress
137
- - ETA estimation when available
138
- - "Thinking..." indicator during planning phases
139
- - Subtle background animation during streaming
140
- - Stop generation button (prominent and red)
141
- - Completion notification with sound option
142
- effort: medium
143
- category: feature
144
- blocking: []
145
- blockedBy: []
146
- acceptance:
147
- - Skeleton loading appears for new agent response
148
- - Pulsing indicator shows streaming is active
149
- - Token count updates in real-time
150
- - Stop button cancels current generation
151
- - Thinking phase clearly labeled
152
- edge_cases:
153
- - Long responses show multiple skeleton blocks
154
- - Network errors interrupt gracefully
155
- - Rapid re-streaming shows smooth transition
156
-
157
- - id: code-block-enhancements
158
- subject: Enhance code block rendering and interactions
159
- status: pending
160
- description: |
161
- Current code blocks are functional but basic. Enhance with:
162
- - Full language detection and syntax highlighting
163
- - Copy button that changes to checkmark on success
164
- - "Run in terminal" button for executable code
165
- - Line numbers toggle
166
- - Dark/light theme-aware colors
167
- - Code diff visualization (red/green lines for changes)
168
- - Filename/path display above code block
169
- - Download code as file button
170
- - Expand/collapse for long blocks
171
- Currently in js/streaming-renderer.js
172
- effort: medium
173
- category: feature
174
- blocking: []
175
- blockedBy: []
176
- acceptance:
177
- - All code blocks have language badge
178
- - Copy button shows success state
179
- - Diffs show red/green highlighting
180
- - Long blocks (>30 lines) expandable
181
- - Dark mode colors contrast properly
182
- edge_cases:
183
- - Unknown language defaults to plaintext
184
- - Very large files truncate with expand link
185
- - Copy works in all browsers
186
-
187
- - id: color-palette-modernization
188
- subject: Update color palette to modern, professional design system
189
- status: pending
190
- description: |
191
- Current palette is basic blue + gray. Modernize to:
192
- - Primary: Modern blue (#0066cc or #0080ff)
193
- - Secondary: Vibrant accent (purple, green, or orange)
194
- - Success: Emerald green (#10b981 β†’ #059669)
195
- - Error: Modern red (#ef4444 β†’ #dc2626)
196
- - Warning: Amber (#f59e0b β†’ #d97706)
197
- - Neutral: Better grayscale (5-7 shades for depth)
198
- - Background: Subtle gradient or texture option
199
- - Code blocks: Dark theme by default, matching VS Code
200
- Dark mode: Ensure sufficient contrast (WCAG AA minimum)
201
- Currently in static/css/main.css lines 3-36
202
- effort: small
203
- category: refactor
204
- blocking: []
205
- blockedBy: []
206
- acceptance:
207
- - All 8 colors defined in CSS vars
208
- - Dark mode has separate palette
209
- - Contrast ratios meet WCAG AA standard
210
- - Code block colors match VS Code Dark+
211
- edge_cases:
212
- - Ensure colorblind-friendly palette (no red/green only)
213
- - Animations don't cause motion sickness
214
- - Print stylesheet still readable
215
-
216
- - id: typography-hierarchy
217
- subject: Improve typography system with better hierarchy
218
- status: pending
219
- description: |
220
- Current typography is basic system fonts. Improve with:
221
- - Consider font pairing (e.g., Inter + JetBrains Mono)
222
- - Define explicit size scale (8px, 10px, 12px, 14px, 16px, 18px, 20px, 24px, 32px)
223
- - Improve line-height for readability (1.5-1.6 for body, 1.2 for headers)
224
- - Better letter-spacing for headers (0.5px to 1px)
225
- - Font weight scale (400 regular, 500 medium, 600 semibold, 700 bold)
226
- - Message headers (sender name + timestamp): 12px gray
227
- - Message body: 14px primary, line-height 1.6
228
- - Code: JetBrains Mono 12px, line-height 1.5
229
- - Improved link styling with underlines on hover
230
- Currently in static/css/main.css and index.html
231
- effort: small
232
- category: refactor
233
- blocking: []
234
- blockedBy: []
235
- acceptance:
236
- - 9-point size scale applied
237
- - Headers use font-weight 600-700
238
- - Body text uses line-height 1.6
239
- - Code uses monospace, 12px
240
- - All text readable at 16px zoom
241
- edge_cases:
242
- - Very long words don't break layout
243
- - Ligatures work in code
244
- - CJK text renders properly
245
-
246
- - id: responsive-mobile-design
247
- subject: Optimize responsive design for mobile and tablet
248
- status: pending
249
- description: |
250
- Current responsive is basic. Enhance with:
251
- - Mobile-first breakpoints (320px, 640px, 1024px, 1280px)
252
- - Hamburger menu for sidebar on mobile
253
- - Full-width chat input on mobile
254
- - Bottom navigation bar for quick actions on mobile
255
- - Gesture support (swipe for sidebar, pinch for zoom)
256
- - Keyboard support for virtual keyboard display
257
- - Better touch targets (min 44x44px for buttons)
258
- - Optimize layouts for portrait/landscape orientation
259
- Test on: iPhone, iPad, Android devices, iPad Pro
260
- effort: medium
261
- category: feature
262
- blocking: []
263
- blockedBy: []
264
- acceptance:
265
- - Mobile view has hamburger menu
266
- - Chat input full-width on mobile
267
- - All buttons at least 44x44px
268
- - Bottom nav visible on mobile
269
- - Swipe left opens/closes sidebar
270
- - Tested on 3+ device sizes
271
- edge_cases:
272
- - Notch and safe area handling (iPhone)
273
- - Landscape mode optimized
274
- - Virtual keyboard doesn't break layout
275
-
276
- - id: animations-transitions
277
- subject: Add smooth animations and transitions throughout UI
278
- status: pending
279
- description: |
280
- Current design has minimal animations. Add:
281
- - Page transitions: Subtle fade or slide
282
- - Button interactions: Scale on click, color fade on hover
283
- - Message entry: Slide-in from bottom with fade
284
- - Sidebar toggle: Smooth width transition
285
- - Skeleton loading: Shimmer animation
286
- - Streaming cursor: Blinking animation
287
- - Modal dialogs: Fade-in with slide
288
- - Hover states: All interactive elements have smooth color/scale transitions
289
- - Use 200-300ms for most transitions, 500ms for longer animations
290
- - GPU-accelerated (use transform, opacity, not width/height)
291
- effort: small
292
- category: feature
293
- blocking: []
294
- blockedBy: []
295
- acceptance:
296
- - All major interactions have smooth transitions
297
- - Animations use GPU acceleration (transform/opacity)
298
- - No janky scrolling or animation stutter
299
- - Animations complete in 200-500ms
300
- - Reduced-motion respects user preference
301
- edge_cases:
302
- - Low-end devices don't stutter
303
- - Animations don't interfere with scrolling
304
- - Prefers-reduced-motion disables animations
305
-
306
- - id: accessibility-improvements
307
- subject: Enhance accessibility for keyboard and screen reader users
308
- status: pending
309
- description: |
310
- Current accessibility is basic. Enhance with:
311
- - Keyboard navigation for all interactive elements
312
- - Tab order is logical and visible (focus ring clearly visible)
313
- - Skip link to jump to main content
314
- - ARIA labels for all buttons and form inputs
315
- - Role attributes for custom components
316
- - Alt text for all images and avatars
317
- - Announce streaming/loading state to screen readers
318
- - Focus management for modals (trap focus, restore on close)
319
- - Test with NVDA/JAWS screen readers
320
- - Color contrast minimum WCAG AA (4.5:1 for text, 3:1 for UI)
321
- - Readable font sizes (minimum 14px for body, 16px on mobile)
322
- effort: medium
323
- category: feature
324
- blocking: []
325
- blockedBy: []
326
- acceptance:
327
- - All buttons keyboard-accessible with visible focus
328
- - Screen reader announces message sources
329
- - Tab order is logical and documented
330
- - Color contrast meets WCAG AA standard
331
- - Focus ring clearly visible on all elements
332
- - Tested with screen reader (NVDA/JAWS)
333
- edge_cases:
334
- - Dynamic content announced to screen readers
335
- - Focus restored after modal closes
336
- - Skip links don't cause layout issues
337
-
338
- - id: dark-mode-refinement
339
- subject: Improve dark mode design and theme switching
340
- status: pending
341
- description: |
342
- Current dark mode is basic CSS var swap. Refine to:
343
- - Add system dark mode detection (prefers-color-scheme)
344
- - Add manual theme toggle button
345
- - Persist theme preference in localStorage
346
- - Add intermediate "system" option
347
- - Refine dark color palette for better contrast
348
- - Code blocks in dark mode use better theme (VS Code Dark+)
349
- - Add optional "high contrast" mode for accessibility
350
- - Add subtle background texture/noise in dark mode
351
- - Test for eye strain and readability
352
- effort: small
353
- category: feature
354
- blocking: []
355
- blockedBy: []
356
- acceptance:
357
- - Theme toggle button in header
358
- - Preference saved and restored
359
- - Dark mode has good contrast
360
- - Code blocks use proper dark syntax highlighting
361
- - System preference detected on first load
362
- - No flickering on page reload
363
- edge_cases:
364
- - Very bright code on dark background readable
365
- - Images rendered with appropriate borders/backgrounds
366
- - Links still visible in dark mode
367
-
368
- - id: settings-panel
369
- subject: Create comprehensive settings panel
370
- status: pending
371
- description: |
372
- No current settings UI. Create panel with:
373
- - Theme selection (light/dark/system)
374
- - Font size adjustment (10px-20px range)
375
- - Message density (compact/normal/spacious)
376
- - Code block language auto-detection on/off
377
- - Sound effects on/off
378
- - Notification preferences
379
- - Export conversation as JSON/markdown
380
- - Dangerous actions: clear cache, reset all, export data
381
- - Keyboard shortcuts reference
382
- - About/version information
383
- - Link to GitHub/documentation
384
- effort: medium
385
- category: feature
386
- blocking: []
387
- blockedBy: []
388
- acceptance:
389
- - Settings accessible from header menu
390
- - All preferences persisted in localStorage
391
- - Theme changes apply immediately
392
- - Font size changes apply to all text
393
- - Message density adjusts spacing
394
- edge_cases:
395
- - Settings panel works on mobile (full-screen modal)
396
- - Reset confirmation prevents accidental deletion
397
- - Export includes full conversation with metadata
398
-
399
- - id: search-enhancement
400
- subject: Improve conversation search with advanced filters
401
- status: pending
402
- description: |
403
- Current search is basic text match. Enhance with:
404
- - Fuzzy matching for typo tolerance
405
- - Filter by agent/model used
406
- - Filter by date range
407
- - Filter by conversation status (completed/ongoing)
408
- - Search in message content (not just titles)
409
- - Show search result preview with highlighting
410
- - Remember recent searches
411
- - Search result count display
412
- - Keyboard shortcut (Cmd+K or Cmd+F) for search
413
- - Clear search button with visual feedback
414
- effort: medium
415
- category: feature
416
- blocking: []
417
- blockedBy: []
418
- acceptance:
419
- - Search works across all conversation data
420
- - Fuzzy matching tolerates typos
421
- - Filters work in combination
422
- - Keyboard shortcut opens search
423
- - Results show within 100ms
424
- edge_cases:
425
- - Search with special characters works
426
- - Very large conversation lists search quickly
427
- - Search in different languages supported
428
-
429
- - id: visual-error-handling
430
- subject: Improve error states and visual feedback
431
- status: pending
432
- description: |
433
- Current error handling is basic. Improve with:
434
- - Prominent error banners (red background, white text)
435
- - Error icons/symbols (⚠️, ❌)
436
- - Suggested actions (retry, contact support, etc.)
437
- - Toast notifications for temporary issues
438
- - Detailed error messages (not just "error")
439
- - Connection error specific feedback
440
- - Network retry with exponential backoff UI
441
- - Rate limit warnings with countdown timer
442
- - Clear error recovery path
443
- - Error logging for debugging (show in devtools)
444
- effort: small
445
- category: feature
446
- blocking: []
447
- blockedBy: []
448
- acceptance:
449
- - Errors display in prominent red banner
450
- - Error messages are specific and helpful
451
- - Retry buttons work and show progress
452
- - Toast notifications disappear after 5 seconds
453
- - Connection status shown in header
454
- edge_cases:
455
- - Multiple errors queue properly
456
- - Rate limit shows time remaining
457
- - Network errors resolve automatically when online
458
-
459
- - id: conversation-threading
460
- subject: Add visual conversation threading and organization
461
- status: pending
462
- description: |
463
- Current conversations are linear. Add threading features:
464
- - Show message count in conversation header
465
- - Add breadcrumb showing conversation context
466
- - Option to view conversation tree/structure
467
- - Expand/collapse sub-conversations
468
- - Thread tagging system (research, bug-fix, feature, etc.)
469
- - Pin important messages or threads
470
- - Add message reactions (thumbs up/down)
471
- - Quote/reply to specific messages
472
- - Edit sent messages
473
- - Message deletion with confirmation
474
- effort: large
475
- category: feature
476
- blocking: []
477
- blockedBy: []
478
- acceptance:
479
- - Message count displays in header
480
- - Quote replies show as indented with border
481
- - Pinned messages visible at top of conversation
482
- - Edit timestamp shows "(edited)" label
483
- - Delete requires confirmation
484
- edge_cases:
485
- - Quoted message deleted shows "message removed"
486
- - Thread expansion loads historical data
487
- - Very long threads lazy-load older messages
488
-
489
- - id: visual-performance-metrics
490
- subject: Display performance metrics and model information
491
- status: pending
492
- description: |
493
- Add real-time metrics display:
494
- - Token count (input + output)
495
- - Generation time for last message
496
- - Cost estimation (if available)
497
- - Model name and version
498
- - Temperature and top-p settings used
499
- - Stop reason (max_tokens, end_turn, etc.)
500
- - Can be toggled on/off in settings
501
- - Small, unobtrusive display (top-right corner or expandable)
502
- - Helpful tooltips explaining each metric
503
- effort: small
504
- category: feature
505
- blocking: []
506
- blockedBy: []
507
- acceptance:
508
- - Token count displayed for each message
509
- - Generation time shown (e.g., "3.2s")
510
- - Model name visible in header
511
- - Metrics can be hidden via toggle
512
- - Tooltips explain each metric
513
- edge_cases:
514
- - Streaming responses show running token count
515
- - Partial tokens displayed as estimate
516
- - Cost display only if configured
517
-
518
- - id: quick-actions-toolbar
519
- subject: Add toolbar with common actions
520
- status: pending
521
- description: |
522
- Add floating toolbar below chat input with quick actions:
523
- - Copy entire conversation
524
- - Export as markdown/JSON
525
- - Share conversation (create shareable link)
526
- - Start new conversation based on this thread
527
- - Archive conversation
528
- - Change model/agent for same conversation
529
- - View conversation metadata (created date, duration, etc.)
530
- - Collapse/expand toolbar with chevron icon
531
- effort: medium
532
- category: feature
533
- blocking: []
534
- blockedBy: []
535
- acceptance:
536
- - Toolbar visible below input area
537
- - All actions have icons and tooltips
538
- - Toolbar collapses to single chevron icon
539
- - Keyboard shortcuts work for common actions
540
- - Copy shows success toast
541
- edge_cases:
542
- - Toolbar doesn't cover input on mobile
543
- - Share generates unique URL correctly
544
- - Export includes all messages with formatting
545
-
546
- - id: visual-loading-states
547
- subject: Add skeleton loading and progressive disclosure
548
- status: pending
549
- description: |
550
- Improve loading state visuals:
551
- - Skeleton loading screens for initial page load
552
- - Skeleton message blocks while streaming
553
- - Progressive image loading (blur-up effect)
554
- - Loading spinner animations (custom SVG, not just "Loading...")
555
- - Loading state for conversation list
556
- - Empty state illustrations (rather than just text)
557
- - Placeholder content that feels intentional
558
- - Shimmer animation on skeleton screens
559
- - Loading bar/progress for large operations
560
- effort: small
561
- category: feature
562
- blocking: []
563
- blockedBy: []
564
- acceptance:
565
- - Skeleton screens appear while loading
566
- - Shimmer animation runs smoothly
567
- - Empty states show helpful illustrations
568
- - Loading spinner visible and animated
569
- - Progressive image loading blur-up works
570
- edge_cases:
571
- - Skeleton screens match final layout exactly
572
- - Loading states never feel stuck
573
- - Animations work on low-end devices
574
-
575
- - id: agent-model-selector
576
- subject: Create prominent agent and model selector UI
577
- status: pending
578
- description: |
579
- Current model selection is buried. Create prominent selector:
580
- - Dropdown in header or sidebar
581
- - Shows current agent/model with icon
582
- - Lists available agents (Claude, OpenCode, Gemini, Kilo, etc.)
583
- - For each agent, shows available models
584
- - Quick preview of model capabilities/stats
585
- - Change model mid-conversation
586
- - Show model context window size
587
- - Show estimated cost per query (if available)
588
- - Favorite/star frequently used models
589
- - Search models by name
590
- effort: medium
591
- category: feature
592
- blocking: []
593
- blockedBy: []
594
- acceptance:
595
- - Selector visible in header
596
- - Agent/model change is instant
597
- - Lists all available models
598
- - Shows model context window
599
- - Change mid-conversation works
600
- edge_cases:
601
- - Model list updates on startup
602
- - Unsupported models show as disabled
603
- - Model change shows confirmation toast
604
-
605
- - id: conversation-metadata-display
606
- subject: Show conversation metadata and history info
607
- status: pending
608
- description: |
609
- Add visible metadata display:
610
- - Created date/time
611
- - Last updated timestamp
612
- - Total messages count
613
- - Total tokens used
614
- - Duration of conversation
615
- - List of agents/models used
616
- - Summary/description of conversation
617
- - Can be viewed in modal or sidebar info panel
618
- - Shows editing capability
619
- effort: small
620
- category: feature
621
- blocking: []
622
- blockedBy: []
623
- acceptance:
624
- - Metadata viewable in modal or sidebar
625
- - All fields display correctly
626
- - Editable description field
627
- - Timestamps human-readable
628
- edge_cases:
629
- - Very old conversations show proper date format
630
- - Very long conversations show total duration
631
- - Multiple agents show all used
632
-
633
- - id: visual-focus-states
634
- subject: Improve keyboard focus indicators and tab order
635
- status: pending
636
- description: |
637
- Current focus states are subtle. Improve with:
638
- - High-contrast focus ring (2px, matches primary color)
639
- - Focus ring on all interactive elements
640
- - Visible tab order (1-2-3 indicators optional)
641
- - Logical tab order documented
642
- - Focus state also affects hover state for consistency
643
- - Focus shadow (subtle box-shadow alongside ring)
644
- - Focus visible only on keyboard, not mouse
645
- - Clear visual feedback for radio/checkbox focus
646
- effort: small
647
- category: refactor
648
- blocking: []
649
- blockedBy: []
650
- acceptance:
651
- - Focus ring visible on all buttons
652
- - Focus ring 2px width
653
- - Tab order is logical
654
- - Focus works with keyboard only
655
- - Contrast meets WCAG AAA (7:1) if possible
656
- edge_cases:
657
- - Focus visible in dark mode
658
- - Focus ring doesn't cover content
659
- - Custom focus styles don't break accessibility
660
-
661
- - id: create-design-tokens
662
- subject: Create design tokens system (spacing, sizing, shadows)
663
- status: pending
664
- description: |
665
- Formalize design system with tokens:
666
- - Spacing scale: 4px, 8px, 12px, 16px, 24px, 32px, 48px, 64px
667
- - Border radius: 2px, 4px, 8px, 12px, 16px
668
- - Shadow scale: small (subtle), medium (cards), large (modals)
669
- - Z-index scale: base(0), dropdown(1000), modal(2000), tooltip(3000)
670
- - Breakpoints: mobile(320px), tablet(640px), desktop(1024px), wide(1280px)
671
- - Transition durations: fast(100ms), normal(200ms), slow(500ms)
672
- - Define in root CSS vars for consistency
673
- - Document in style guide
674
- - Use consistently throughout UI
675
- effort: small
676
- category: refactor
677
- blocking: []
678
- blockedBy: []
679
- acceptance:
680
- - All spacing uses token scale
681
- - All shadows use shadow scale
682
- - All transitions use duration scale
683
- - Z-index documented and consistent
684
- - Tokens applied to all components
685
- edge_cases:
686
- - No magic numbers in CSS
687
- - Tokens work in light and dark modes
688
-
689
- ---
690
-
691
- ## Non-UI Items (Infrastructure)
692
-
693
- - id: performance-audit
694
- subject: Conduct performance audit and optimize rendering
695
- status: pending
696
- description: |
697
- Audit and improve performance:
698
- - Measure First Contentful Paint (FCP), Largest Contentful Paint (LCP)
699
- - Check Core Web Vitals (CLS, FID, TTFB)
700
- - Profile JS execution on slow device (throttle to 4x slowdown)
701
- - Optimize image sizes and formats (WebP)
702
- - Lazy-load below-fold content
703
- - Code-split large chunks
704
- - Use Web Workers for heavy computations
705
- - Optimize CSS (remove unused, minify)
706
- - Monitor memory usage (check for leaks)
707
- effort: large
708
- category: infra
709
- blocking: []
710
- blockedBy: []
711
- acceptance:
712
- - FCP < 1.5s, LCP < 2.5s
713
- - No CLS (Cumulative Layout Shift)
714
- - Lighthouse score > 90 for performance
715
- - Memory stable under 100MB
716
- edge_cases:
717
- - Slow network (3G) still responsive
718
- - Large conversations don't cause memory leaks
719
- - Mobile performance optimized
720
-
721
- - id: test-coverage-expansion
722
- subject: Expand test coverage for UI components
723
- status: pending
724
- description: |
725
- Expand tests to cover new features:
726
- - Component render tests
727
- - User interaction tests
728
- - Message streaming tests
729
- - Search functionality tests
730
- - Theme switching tests
731
- - Mobile responsiveness tests
732
- - Error handling tests
733
- - Performance regression tests
734
- effort: large
735
- category: infra
736
- blocking: []
737
- blockedBy: []
738
- acceptance:
739
- - >90% code coverage
740
- - All major user flows tested
741
- - Mobile responsive tests pass
742
- - Performance benchmarks pass
743
- edge_cases:
744
- - Streaming responses tested
745
- - Error scenarios covered
746
- - WebSocket reconnection tested
747
-
748
- ---
749
-
750
- ## Summary
751
-
752
- **Total Items**: 28 items (24 features, 4 infrastructure)
753
- **Large Effort**: 7 items (20 hours estimated)
754
- **Medium Effort**: 11 items (15 hours estimated)
755
- **Small Effort**: 10 items (10 hours estimated)
756
- **Total Estimated**: ~45 hours
757
-
758
- ## Implementation Priority
759
-
760
- Phase 1 (Critical Path - Week 1):
761
- 1. Color palette modernization
762
- 2. Header redesign
763
- 3. Message bubble redesign
764
- 4. Chat input redesign
765
- 5. Sidebar redesign
766
- 6. Typography improvements
767
-
768
- Phase 2 (High Value - Week 2):
769
- 7. Animations and transitions
770
- 8. Code block enhancements
771
- 9. Streaming visual feedback
772
- 10. Dark mode refinement
773
- 11. Responsive mobile design
774
-
775
- Phase 3 (Polish & Features - Week 3):
776
- 12. Settings panel
777
- 13. Agent/model selector
778
- 14. Accessibility improvements
779
- 15. Error handling
780
- 16. Quick actions toolbar
781
- 17. Visual loading states
782
-
783
- Phase 4 (Nice-to-Have - Week 4):
784
- 18-28. Remaining features and infrastructure items