Skip to content

assembly live: richer, better-spaced tool-call lines#258

Merged
alexkroman merged 6 commits into
mainfrom
worktree-live-tool-call-impl
Jun 22, 2026
Merged

assembly live: richer, better-spaced tool-call lines#258
alexkroman merged 6 commits into
mainfrom
worktree-live-tool-call-impl

Conversation

@alexkroman

Copy link
Copy Markdown
Collaborator

What & why

Improves the tool-call UX in assembly live (the agent-cascade voice TUI), per the screenshot feedback that the tool lines were cramped and detail-free.

Before: Searching the web… / Using read_file… — bare verbs, packed flush against the prompt and each other.

After: the call's identifying argument is shown, and the block gets a blank line above it (consecutive calls stay tight):

» Yeah, the AI house story.

Searching the web · ai house Seattle…
Using read_file · notes.md…
Searching the web · AI2 incubator…

AI House is the new name for Seattle's…

How

  • Detail (agent_cascade/brain.py): a new _tool_affordance(name, args) composes the friendly label with the one identifying arg via the existing code_agent.summarize.describe_args helper (the same one assembly code uses). The Renderer.tool_call(label) protocol is unchanged — only the string gets richer, so the non-TUI AgentRenderer benefits for free. The trailing is still added by the renderers.
  • Spacing (code_agent/messages.py + agent_cascade/tui.py): a dedicated dim ToolAffordance transcript widget (alongside the sibling widgets, reusing _DIM/Text). show_tool_call mounts it with a top margin for the first call of a turn and a -tight class (margin 0) when the previous line was already a tool call.
  • Snapshot: re-blessed the live tool-call visual golden to pin the new detail + spacing.
  • Test split: moved the run_agent_cascade wiring tests into tests/test_live_tui_launch.py so both files stay under the 500-line file-length gate.

Out of scope (deliberately light touch): no tool results, spinners, or completion states; _tool_label/_TOOL_LABELS and the Renderer protocol are untouched.

Testing

Full ./scripts/check.sh green: 3561 tests pass, 99.65% coverage, Textual surfaces (tui.py, messages.py) at 100%, 100% patch coverage on changed lines, mutation gate clean, no new escape hatches, build + twine PASSED. Design/plan docs included under docs/superpowers/.

🤖 Generated with Claude Code

alexkroman-assembly and others added 6 commits June 22, 2026 09:35
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…widget

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Keeps both files under the 500-line file-length gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@alexkroman alexkroman added this pull request to the merge queue Jun 22, 2026
Merged via the queue into main with commit d01f630 Jun 22, 2026
20 checks passed
@alexkroman alexkroman deleted the worktree-live-tool-call-impl branch June 22, 2026 22:35
alexkroman pushed a commit that referenced this pull request Jun 23, 2026
… 500-line gate

The filler + planning-discard work and the #258 merge pushed engine.py and two test
files over the 500-line file-length gate. Extract the Renderer/Player protocols and
CascadeDeps into agent_cascade/_io.py (re-exported from engine), and consolidate the
spoken-filler + planning-discard tests into test_agent_cascade_filler.py. Also drop the
stale test_live_tui_launch.py (duplicate of this branch's test_live_tui_wiring.py) and
retarget CascadeDeps.real patches at _io.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

2 participants