Skip to content

feat(tui): UX hardening for approvals, thinking, tool steps, and errors - #27

Merged
jkyberneees merged 1 commit into
mainfrom
feat/tui-ux-hardening
Aug 9, 2026
Merged

feat(tui): UX hardening for approvals, thinking, tool steps, and errors#27
jkyberneees merged 1 commit into
mainfrom
feat/tui-ux-hardening

Conversation

@jkyberneees

@jkyberneeesjkyberneees commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Implements the top 5 findings from a holistic UI/UX review of the TUI. One cohesive commit; every change has regression tests.

  • Approval flow: bare letters no longer decide — the panel is now an ↑↓-select + -confirm option list, so typing mid-prompt can't fire a decision. tab expands the full untruncated command (previously ellipsized to one line), esc is an explicit labelled deny, and transcript scrolling works while the panel is open.
  • Thinking: ^T posts a note and shows a persistent ✳ think header badge; full reasoning is stored and ^E unfolds it on finalized turns (was permanently capped at 240 runes); the collapsed excerpt shows the head of the thought instead of the tail.
  • Tool steps: expanded output preserves whitespace (diffs/JSON/code keep alignment); mouse toggling only fires on the step header row instead of any line below it; ^E shows a persistent ▼ details indicator; running steps get a chevron affordance.
  • Feedback: send failures finalize the turn with an inline **Error:** (no more phantom empty turns); disconnect mid-turn finalizes with an **Interrupted:** marker (idempotent, resume-safe); /cancel reports idle/success/queue outcomes; the r retry hint only renders when it actually works; the disconnected-submit warning is sticky with correct advice.
  • Narrow terminals: banner falls back to a one-line ⬡ bodek wordmark below the art width; model name truncates with ellipsis and the header is hard-clamped to its 2-row budget (viewport/mouse math can't drift); step-arg truncation floors lowered for tiny widths.

Test plan

  • make fmt / make vet clean
  • make lint — 0 issues
  • make test — full -race suite green, all packages
  • make cover — 98.9% internal coverage; all functions touched here at 100%
  • New regression tests: approval key model, thinking expansion/badge, whitespace fidelity, click hit-testing, send-failure/disconnect finalization, cancel notes, retry hint, banner fallback, header clamp, tiny-width rendering

Five improvements from a holistic UI/UX review:
- Approval flow: replace bare-letter instant decisions with an
arrow-select + Enter option list (typing mid-prompt can no longer
fire a decision); tab expands the full untruncated command; esc is
an explicit labelled deny; transcript scrolling works while pending.
- Thinking: ^T posts a note and shows a persistent "✳ think" header
badge; full reasoning is stored and ^E unfolds it on finalized
turns; the collapsed excerpt shows the head of the thought.
- Tool steps: expanded output preserves whitespace (diffs/code keep
alignment); mouse toggling only fires on the step header row; ^E
shows a persistent "▼ details" footer indicator; running steps get
a chevron affordance.
- Feedback: send failures finalize the turn with an inline error;
disconnect mid-turn finalizes with an "interrupted" marker
(idempotent, resume-safe); /cancel reports idle/success/queue
outcomes; the "r retry" hint only shows when it works; the
disconnected-submit warning is sticky with correct advice.
- Narrow terminals: banner falls back to a one-line wordmark below
the art width; model name truncates and the header is clamped to
its 2-row budget; step-arg truncation floors lowered for tiny
widths.
Regression tests for every fix; coverage stays at 98.9%.
@jkyberneees
jkyberneees merged commit 8c1e7c2 into mainAug 9, 2026
5 checks passed
Sign up for freeto 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

@jkyberneees