Skip to content

feat(tui): sub-agents UX — card identity, live agents tab, failure follow-through - #56

Merged
jkyberneees merged 2 commits into
mainfrom
feat/subagents-ux
Aug 31, 2026
Merged

feat(tui): sub-agents UX — card identity, live agents tab, failure follow-through#56
jkyberneees merged 2 commits into
mainfrom
feat/subagents-ux

Conversation

@jkyberneees

Copy link
Copy Markdown
Contributor

Summary

Implements M1+M2 of the sub-agents UX plan (TEMP_BODEK_SUBAGENTS_UX_PLAN.md, panel-reviewed v2): the sub-agents integration goes from telemetry-rich/decision-poor to a surface where every card is identifiable, honest about its state, and actionable.

Changes

M1 — identity & honest telemetry

  • delegate_tasks args parse into a per-step task manifest; cards carry their task's goal (sanitized at ingest), unconfirmed tasks render ◌ SA# · pending (not yet reported)
  • Failure-aware rollup: 2/3 · 1 ✗ · 8.1k tok
  • Client-side elapsed timer on live cards (frame bursts leave durations stale)
  • Disconnect retires in-flight cards as × lost on disconnect — no ghost spinners

M2 — action parity & failure follow-through

  • /agents tab: 3s live poll (runs-tab pattern), c two-step stop on any registry row (cross-turn via a model-level live-task registry — fixes stop false-negatives), o jump-to-transcript, ⏎ full record
  • Terminal failures (error/timeout) stick to the notice strip until the turn ends; cancels stay transient
  • Every delegating turn closes with a swarm verdict marker: **swarm: 5 ✓ · 1 ✗ — SA4 error**

Panel polish (2-judge review: UX + adversarial engineering)

  • Verdict counts lost cards separately from live; lost revives when frames resume
  • Failed stop un-advertises stop sent; poll preserves armed stop-gate prompts
  • Footer hints teach c/o; agents tab joins mgmtPanel (esc folds detail)

Verification

  • make fmt · make vet · make lint (0 issues) · make test (race, all packages green)
  • 12 new RED-first tests (subagent_manifest_test.go, subagent_follow_test.go)
  • tui coverage net-neutral vs main (89.9%)

Per convention: merge once CI passes.

Cards now carry their task's goal, parsed from the delegate_tasks
argument at tool-call time (tasks the wire hasn't confirmed yet render
as pending), tick a client-side elapsed timer between frame bursts, and
retire as lost on a disconnect instead of spinning forever. The
collapsed rollup counts failures, terminal errors/timeout stick to the
notice strip until the turn ends, and every delegating turn closes with
a swarm verdict marker so a failure can't scroll by uncounted.

Stop resolution moves to a model-level live-task registry: a card left
running by an earlier turn stays stoppable — previously /stop and the
drawer were scoped to whatever turn happened to be current.

The /agents tab becomes a live surface: 3s poll while visible (the
runs-tab pattern), c arms the same two-step stop gate on the
highlighted row, o jumps to the delegating transcript step expanded.
From the two-judge review panel of 20da00f:

- swarm verdict counts lost cards as 'N lost' instead of 'N live' —
  an interrupted turn no longer contradicts its own cards
- a lost card revives when frames resume after a reconnect
- a failed stop un-advertises 'stop sent' from the card
- the 3s agents poll no longer wipes an armed stop-gate prompt
- agents tab joins mgmtPanel: esc folds the detail view instead of
  closing the drawer
- footer hints teach c (stop) and o (jump); /help blurb refreshed
- README: /stop stays current-turn scoped, drawer c is the cross-turn path
@jkyberneees
jkyberneees merged commit 7bfb319 into main Aug 31, 2026
7 checks passed
@jkyberneees
jkyberneees deleted the feat/subagents-ux branch August 31, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant