editor: streaming, live work motion, inbox sidebar, approvals, context meter
Merged
SA
22d ago+8986+8986+0123456789012345678901234567890123456789-871-871-012345678901234567890123456789
π€ Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.
Summary by cubic
Adds a local flight recorder for debugging stalled UI, transport, and Forge operations, and reworks the live conversation view: shift-free streaming, an inbox sidebar with project icons, approvals that settle as soon as their receipt lands, context usage for every engine, and a catalog that no longer stalls sends on stale CLI probes.
Conversation
- Replies and work prose stream in stable segments; words, inline constructs, fences, and tables never move or reshape once painted. Fresh segments sweep in left to right at a capped pace (300β900 wpm, easing toward clearing the backlog), so transport bursts neither stall nor speed up the reveal, and prose seen while its row is on screen streams even when it lands whole.
- Live work rows animate only while a turn is live: a row's height opens so the content below glides down, its content fades in as it settles, and counters use tabular figures that rest in the columns they roll in, so ticking labels never resize horizontally. Work prose finishes once anything follows it, thinking summaries swap in only whole, and the work section folds only once the reply is clearly the answer β final, done streaming, or 40 words in β and prose shown as the reply keeps its place when it moves into the work.
- A turn that produced prose or a card reads as thinking; only one with no response at all waits.
- The sidebar reads as an inbox: unread threads show outright, running threads collapse into Working, and read idle ones fold into History (without a Last-24-hours heading), keeping its age groups inside. An open thread keeps its unread outcome until the reader leaves it, and hover pills clear when their row is hidden in a collapsed group.
- Recent threads carry cached project icons resolved from local files or Git-host artwork, never sending credentials.
- Approval cards settle allowed/denied from the engine's receipt, and an approval or question pauses a work section without splitting it.
- Thread routes show a context meter in the titlebar; the meter shows for every engine now, and an idle thread keeps its last reading. Claude reports its own context window from the result frame, and a window the engine never reports is filled from the cached catalog, never by probing.
- Engines whose CLI reports being signed out are greyed out and cannot be chosen; Grok's 1.0.4x
Available models:listing is parsed. - The titlebar wordmark now uses Test Founders Grotesk Bold, with the build badge stacked beneath it.
- A model chosen in the picker is saved as your default preference; agent and system choices never replace it.
- Catalog reads and sends no longer wait on stale CLI probes: discovery serves the cached bundle at once and refreshes in one background probe, which the Forge now starts at startup.
- Inspector sections close with full-width grid rules, and the Agents section lists only the live run's subagents, clearing once the run settles.
- Dispatch lease renewal tolerates host-time clock steps, and reading an unreachable dev Forge's credentials now reports the host as offline instead of an authentication failure.
Debugging
artisan-tracingkeeps bounded traces; a stall, failure, or slow operation saves a Chrome Trace Event JSON file, and Ctrl+Shift+F11 saves manually.- Traces go to
%TEMP%\artisan-traceson Windows and$XDG_STATE_HOME/artisan/traceson Linux so WSL restarts no longer wipe them;scripts/trace.pymerges Editor and Forge traces for Perfetto. - A repeating incident saves at most once per five minutes, and navigation gates are recorded only when they change, so storms don't rotate away distinct evidence.
- The recorder is enabled in debug builds only and disabled with
ARTISAN_TRACE=0; the newgpui-cepin adds paint-time transforms that the work motion relies on.