fix(agent-pane): show workflow progress in tray and inspector

TE
5d ago
+689-43

Takes back #28164: replaces its whole-list progress dependency in App.tsx with keyed AgentProgressStore subscriptions so usage-only updates notify the changed agent instead of rebuilding every row. Workflow counts and token usage remain visible in both the tray and inspector; compatibility snapshots and session changes retain their progress behavior.

Running workflows now show completed/started agent counts, failed and queued agents, and token usage in the default running tray and Session Info. Previously those values appeared only in the alternate transcript card. Existing action text remains, with reported progress beneath it so long names cannot crowd out the counts.

Leo, 2026-10-29: “i also want all those ui fixes/improvements in and stuff too along with more think tanks to improve stuff too after learning all those ui dev things”.

Validation at a3c95dac0576ef49f85de6f7c4c77a2b47bfc522: fleet run 41226576477 passed bun run check, 108 focused tests (533 assertions), and all 10 real Chromium tray geometry tests (414 assertions). Browser cases cover both themes, 1×/1.25× interface scales, narrow progress wrapping, short docks, and header/row alignment. The receipt's tested_sha matches this head. Regression proof 41226482614 demonstrated that reverting the phantom cleanup fails both mounted UI tests and reverting the card subscription fails the stale-progress assertion; restoring each fix passes the same tests.

Reconciliation: merged base 65a13cf67b1b092c57898a498e6c7795d0c5afa0. SW-04 is fixed: identifying the owning root late removes its progress identity and pending delta, invalidates the retained list, and keeps real workers/grandchildren intact. Mounted tray and inspector regressions cover that transition without any later agent event. The inspector hover card now subscribes to the same keyed progress as its row; a mounted regression updates both without replacing the structural agent snapshot. Header columns now match the rows. Existing localization is reused; no timer or observer is added.

Earlier review receipts are superseded by these fixes; final exact-head review is required. Attached screenshots below depict 9deda6af, not the current head; refreshed images are a nonblocking follow-up.

Design: running tray. Keep its fixed duration tracks and narrow-row controls.

Gallery: agent-pane.subagent-tray/workflow-progress

Gallery agent-pane.subagent-tray/workflow-progress, Chromium, 2x. Before is base 9e78591e (run 41135682530); after is head 9deda6af (run 41134463485). Both logs report TESTED_SHA equal to that commit.

BeforeAfter
Lightbefore lightafter light
Darkbefore darkafter dark

Before, the running workflow row showed only its action; its trailing controls read duration, then status, then chevron. After, a second line shows "37/101 agents · 2 failed · 4 queued · 1.2M tokens" under the action. The trailing controls now read status, then duration, then chevron, the row grammar the other rows use; the spinner and Stop keep their places.

Viewed after image: yes
Visual verdict: Yes, the progress line reads cleanly under the action in both themes with the row's trailing controls in standard order and nothing clipped or crowded, so Leo would accept it next to ChatGPT/Claude.
Risk: row height increases only when progress exists. Counts wrap within the text column; action, open, Stop and spinner behavior remain intact.

Agent session: agent session


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Running workflows now show completed/started agent counts, failed and queued agents, and token usage in the default running tray and the Session Info inspector; previously those values appeared only in the alternate transcript card. Progress renders beneath the action text, ellipsized so long names can't crowd out the counts, and rows grow only when progress exists.

Tray rows and the inspector hover card subscribe to a keyed per-agent store fed by direct streams and bridge snapshots, so usage-only updates notify just the changed agent row instead of rebuilding every row. Each session gets a fresh store so switching sessions repopulates progress. Status, duration, and the disclosure chevron sit as fixed sibling columns across all row families, and tray hover no longer activates over the Stop control. Reconciles row props after merging the latest feat-cmux-next base.

Compatibility snapshots without a structure version stay live off their latest agent values, and rebuilt producer sources refresh rows even when structural counters restart. When a late root identification retires a phantom agent, its progress is retired with it and the surviving workers keep their values. Both surfaces use the existing localized formatter, with tests covering absent/zero progress, successive updates, keyed bridge deltas, and phantom retirement in the tray and inspector.