Commit 1f2cb45
authored
TUI visual clarity: 60% strip density improvement + richer status bar (#26)
* autoresearch: compact idle/dead pills to 4-char names in strip
Passive (idle/dead) unselected session pills now show icon + first 4
chars of name instead of full 20-char name, saving ~16 chars per
passive pill. At 5 idle + 5 running sessions, this recovers ~80 chars
of strip space, fitting far more sessions in a typical 80-char terminal.
* autoresearch: attention-first ordering in unified strip
Sessions are now sorted by state priority before rendering:
pending-tool sessions first, then running, waiting, idle, dead.
The selected session's index is remapped after sorting so selection
tracking remains correct. This ensures urgent sessions are always
visible even when +N overflow hides items at the end.
* autoresearch: filter terminal PRs, show compact done count
When active (non-merged, non-closed) PRs exist, merged/closed PRs are
hidden from the strip and replaced with a compact "(+N done)" indicator.
This reduces PR clutter significantly — 3 merged PRs take 0 pill slots
instead of 3, replaced by a 10-char "(+3 done)" label.
* autoresearch: badge-style pending alert in status bar
Replace dim "⚡ 2 pending" text with orange background badge
"⚡ 2 PENDING" that stands out against the status line and catches
attention even when the user's focus is elsewhere.
* autoresearch: remove background from passive pills for visual hierarchy
Idle/dead unselected pills now render without background — just dim
foreground text. Active (running/waiting) pills retain their colored
dim background, creating a clear visual hierarchy: colored boxes draw
attention, plain text recedes. Also removes 2 padding chars per passive
pill (6 chars vs 8 chars).
* autoresearch: mini fleet map line above session zoom
When 3+ sessions exist, show a 1-line glyph overview above the
session zoom panel: "Sessions: [▶]▶▶⏸⏸✔●". Current session is
bracketed, pending-tool sessions appear in orange. Gives full fleet
context without leaving the zoom view.
* autoresearch: badge-style failing PR alert in status bar
Apply same badge treatment to failing PR count as pending tools:
red background "✗ N FAILING" badge for visual parity. Both urgent
alerts now use consistent badge style for instant recognition.
* autoresearch: merge readiness summary line at top of PR zoom
Add a quick-scan summary line before the checks section:
"✓ approved ✓ checks (12/12) ✓ mergeable ⎇ squash"
or "✗ changes requested ✗ checks (9/12) ✗ conflicts ⎇ unset".
Lets user assess merge readiness in under 1 second.
* autoresearch: show session index/total in fleet map line
Fleet map now reads "Session 3/10: [▶]▶▶⏸⏸✔●" — the bold N/total
position indicator tells the operator exactly where they are in the
fleet while still showing all session states.
* autoresearch: compact PR pills — title only for critical/selected state
Non-critical, non-selected PR pills now show just icon + number (e.g.
"⏳ #42" = 7 chars) instead of icon + number + truncated title (~23 chars).
Title is shown only for: checks_failing, approved (need action), or when
the PR is selected. Saves ~15 chars per non-critical PR pill.
* autoresearch: group queue tools by safety level (destructive vs safe)
In the approval queue panel, split pending tools per session into
"⚠ Destructive:" and "✓ Safe:" groups. Destructive tools listed
first so operators see what needs careful scrutiny immediately.
Labels only appear when a session has both types.
* autoresearch: show oldest-pending age next to pending badge
After the pending badge, show "Xs ago" indicating how long the
oldest pending approval has been waiting. Helps operator assess
urgency at a glance: "⚡ 2 PENDING 45s ago" vs "⚡ 1 PENDING 5m ago".
* autoresearch: done-state treatment for merged/closed PR zoom
Merged/closed PRs now show "✔ Merged — no further action required"
(or ● Closed) at the top of the body, and skip the merge readiness
summary which is irrelevant for done PRs. Reduces visual clutter.
* autoresearch: enrich overflow indicator with active-session state breakdown
Overflow indicators now show state breakdown of hidden active sessions:
"+4(▶2⏸1)" instead of just "+4" when hidden pills include running/waiting
sessions. Plain "+N" is used when only idle/dead/PR pills are hidden.
Directly solves the "+N confusion" problem — user can always see if
critical sessions are out of view.
* autoresearch: PR state breakdown in status bar (3✓ 1✗ 1⏳)
After the PR count, show compact per-state counts: passing(✓),
failing(✗), running(⏳), merged(✔) — each colored and only shown
when count > 0. Mirrors session state breakdown for full fleet
overview in the status bar.
* autoresearch: bold+tinted background for critical unselected PR pills
checks_failing PRs get bold + red dim background.
approved PRs get bold + green dim background.
Non-critical (checks_running, checks_passing) remain plain text.
Creates clear urgency gradient: plain < tinted < selected-border.
* autoresearch: agent-c findings and log (10 cycles)
* autoresearch: collapse dead sessions to compact count at 8+ session load
When 8+ sessions are present, dead sessions without pending tools or
active selection are removed from the pill list and replaced with a
compact "(●N)" count indicator. This eliminates ~6 chars per dead pill
(3 dead sessions → 18 chars replaced by 5-char "(●3)"). Saves ~13 chars
and removes truly-done sessions from the active view.
* autoresearch: visual clarity sweep complete (30 cycles, 3 agents)
Strip: 295→118 chars at 10+5 load (60% reduction)
Status bar: state breakdowns, badge alerts, fleet map
Zoom: merge readiness summary, safety grouping, dead-state treatment
* fix: remove duplicate mergeable/method from PR zoom line 2, show repo#N in compact pills
* chore: gitignore .autoresearch/, remove from tracking
* Streaming agent output with live timeline updates, cleanup, and tests
- Agent commands use --output-format stream-json --verbose for real-time output
- Parse STATUS: lines from agent text and push as ⚙ timeline events
- Prefix timeline entries with agent type (fix-CI:, review:, fix-review:)
- Write full stream log to /tmp/csm-agent-*-stream.log for debugging
- Accumulate agent cost from result events
- Remove fleet map (redundant with strip state summary)
- Remove duplicate mergeable/method from PR zoom header line 2
- Add 8 regression tests (stream-json flags, agentLabel, writeAgentLog, PR zoom dedup)
* fix: CI test failure — disable review spawn in TestPoll_MultiplePRs
The streaming agent code spawns goroutines that race with TempDir cleanup
in CI where claude binary doesn't exist. Set ReviewState="clean" to skip
agent spawning since this test is about polling, not agent execution.1 parent 947821e commit 1f2cb45
11 files changed
Lines changed: 873 additions & 61 deletions
File tree
- daemon/internal/pr
- tui/internal/tui
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
4 | 6 | | |
5 | 7 | | |
6 | 8 | | |
| |||
57 | 59 | | |
58 | 60 | | |
59 | 61 | | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
60 | 67 | | |
61 | 68 | | |
62 | 69 | | |
| |||
82 | 89 | | |
83 | 90 | | |
84 | 91 | | |
85 | | - | |
| 92 | + | |
86 | 93 | | |
87 | 94 | | |
88 | 95 | | |
| 96 | + | |
89 | 97 | | |
90 | 98 | | |
91 | 99 | | |
| |||
117 | 125 | | |
118 | 126 | | |
119 | 127 | | |
120 | | - | |
| 128 | + | |
121 | 129 | | |
122 | 130 | | |
123 | 131 | | |
| 132 | + | |
124 | 133 | | |
125 | 134 | | |
126 | 135 | | |
| |||
151 | 160 | | |
152 | 161 | | |
153 | 162 | | |
154 | | - | |
| 163 | + | |
155 | 164 | | |
156 | 165 | | |
157 | 166 | | |
| 167 | + | |
158 | 168 | | |
159 | 169 | | |
160 | 170 | | |
| |||
175 | 185 | | |
176 | 186 | | |
177 | 187 | | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
178 | 329 | | |
179 | 330 | | |
180 | 331 | | |
| |||
198 | 349 | | |
199 | 350 | | |
200 | 351 | | |
201 | | - | |
| 352 | + | |
202 | 353 | | |
203 | 354 | | |
204 | 355 | | |
| |||
222 | 373 | | |
223 | 374 | | |
224 | 375 | | |
225 | | - | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
226 | 382 | | |
227 | 383 | | |
228 | 384 | | |
| |||
246 | 402 | | |
247 | 403 | | |
248 | 404 | | |
249 | | - | |
| 405 | + | |
250 | 406 | | |
251 | 407 | | |
252 | 408 | | |
253 | 409 | | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
254 | 429 | | |
255 | 430 | | |
256 | 431 | | |
| |||
268 | 443 | | |
269 | 444 | | |
270 | 445 | | |
271 | | - | |
| 446 | + | |
| 447 | + | |
272 | 448 | | |
273 | 449 | | |
274 | 450 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
173 | 174 | | |
174 | 175 | | |
175 | 176 | | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
176 | 277 | | |
177 | 278 | | |
178 | 279 | | |
| |||
0 commit comments