Skip to content

feat(agent): show live progress in conversation pane#111

Merged
fcoury merged 9 commits into
masterfrom
feat/agent-pane-progress
Jul 19, 2026
Merged

feat(agent): show live progress in conversation pane#111
fcoury merged 9 commits into
masterfrom
feat/agent-pane-progress

Conversation

@fcoury

@fcoury fcoury commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

The agent conversation pane currently reduces long-running work to transient composer text. That makes it difficult to tell whether the agent is waiting, thinking, using a tool, or streaming a response, and follow-up queue counts can be overwritten by later activity events.

This change makes turn progress persistent and readable:

  • adds a dedicated text-panel status row with an animated spinner, elapsed time, streaming cursor, and stable queued-prompt count
  • renders thought and tool activity inline during a turn, then collapses completed activity into a step-count and duration summary
  • carries per-turn elapsed time from the editor into agent completion events
  • refreshes the conversation layout with clearer user accents, turn separators, a wider default pane, and a more useful empty state
  • adds coverage for panel rendering, plugin dispatch, lifecycle resets, and streaming status transitions

How to Test

  1. Open the Agent pane with Space A and submit a prompt that invokes one or more tools. Confirm the status moves through human-readable phases, the spinner and elapsed time update, tool activity appears inline, and the streamed answer shows a cursor.
  2. Let the turn finish. Confirm the activity timeline collapses to a summary with the step count and elapsed duration, and the busy status clears.
  3. Queue a follow-up while a turn is running. Confirm the queued count remains visible across phase changes and the queued prompt starts after completion.
  4. Cancel a running turn with Ctrl-C, then clear or start a new conversation. Confirm no stale spinner, streaming cursor, or activity rows remain.

Automated validation:

  • cargo clippy --all-targets --all-features -- -D warnings
  • cargo test --all-features

fcoury and others added 9 commits July 19, 2026 09:50
The agent pane previously showed progress only as transient text in the
composer status line: raw ACP enums leaked into the UI, tool activity
vanished as it happened, thought chunks were discarded, and the queue
count was clobbered by the next activity event. While waiting there was
no spinner, elapsed time, or streaming cue.

Core:
- New SetTextPanelStatus host action renders a dedicated status row with
  a core-animated spinner and elapsed time; the main loop repaints while
  any visible panel is busy. Streaming turns append a cursor to the last
  rendered line.
- New Activity text-panel block kind for muted tool/progress timelines.
- User messages render with an accent bar and a turn-separator rule
  instead of a label; composer divider hints deduplicated; markdown
  headings use a glyph distinct from the agent label.
- agent:completed now carries elapsed_ms measured from prompt dispatch.

Plugin:
- agent.hk drives one turn-state machine (waiting/thinking/tool/
  streaming/stopping) with a single status renderer, so queue depth and
  streaming state survive every event; ACP updates map to human labels.
- Tool calls build an in-conversation activity timeline updated in
  place, with thought chunks shown while they stream; on completion the
  timeline collapses to a one-line summary with step count and duration.
- Wider default panel (62) and a hint-bearing empty state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@fcoury
fcoury merged commit fbb53ce into master Jul 19, 2026
18 checks passed
@fcoury
fcoury deleted the feat/agent-pane-progress branch July 19, 2026 16:09
fcoury added a commit that referenced this pull request Jul 19, 2026
The agent conversation pane currently reduces long-running work to transient composer text. That makes it difficult to tell whether the agent is waiting, thinking, using a tool, or streaming a response, and follow-up queue counts can be overwritten by later activity events.

This change makes turn progress persistent and readable:

- adds a dedicated text-panel status row with an animated spinner, elapsed time, streaming cursor, and stable queued-prompt count
- renders thought and tool activity inline during a turn, then collapses completed activity into a step-count and duration summary
- carries per-turn elapsed time from the editor into agent completion events
- refreshes the conversation layout with clearer user accents, turn separators, a wider default pane, and a more useful empty state
- adds coverage for panel rendering, plugin dispatch, lifecycle resets, and streaming status transitions

## How to Test

1. Open the Agent pane with `Space A` and submit a prompt that invokes one or more tools. Confirm the status moves through human-readable phases, the spinner and elapsed time update, tool activity appears inline, and the streamed answer shows a cursor.
2. Let the turn finish. Confirm the activity timeline collapses to a summary with the step count and elapsed duration, and the busy status clears.
3. Queue a follow-up while a turn is running. Confirm the queued count remains visible across phase changes and the queued prompt starts after completion.
4. Cancel a running turn with `Ctrl-C`, then clear or start a new conversation. Confirm no stale spinner, streaming cursor, or activity rows remain.

Automated validation:

- `cargo clippy --all-targets --all-features -- -D warnings`
- `cargo test --all-features`
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