Skip to content

UI polish 6/12 — Streaming playback + consolidating agent-activity window - #18

Merged
mlcyclops merged 2 commits into
masterfrom
polish/streaming-playback
Jun 20, 2026
Merged

UI polish 6/12 — Streaming playback + consolidating agent-activity window#18
mlcyclops merged 2 commits into
masterfrom
polish/streaming-playback

Conversation

@mlcyclops

Copy link
Copy Markdown
Owner

Part of the Apple-level UI/UX polish batch. Independent, region-scoped slice (polish/streaming-playback) so it merges on its own.

Gate per worker: desktop tsc --noEmit + bun build desktop/renderer/app.ts --target=browser + bun test harness (green) + /code-review.

🤖 Generated with Claude Code

mlcyclops and others added 2 commits June 20, 2026 02:03
… buttery scroll

Elevate the live-answer experience (unit #6 of the UI polish batch):

- Consolidating "thoughts" window: tool calls + agent activity collapse into ONE
  compact, collapsible surface per turn (live current step + count, expandable to
  the full step list). Auto-collapses on done into a one-line summary
  ("N steps · M files · 1.4s"), re-expandable. Security .evt.block chips stay
  loud and are never folded into the collapse.
- rAF-batched stick-to-bottom scroll: many per-token calls coalesce into a single
  scrollTop write (no layout thrash); releases the instant the user scrolls up.
- HUD: cold-start "Warming up…" phase before the first token, smooth phase
  crossfade, eased streaming pulse, clean done-state check pop. Idempotent finish.
- Softer eased streaming caret with a faint glow (no hard blink).

All motion is transform/opacity (GPU-friendly) and neutralised under
prefers-reduced-motion. Zero new deps. tsc clean, bundles, 193 harness tests green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
# Conflicts:
#	desktop/renderer/styles.css
@mlcyclops
mlcyclops merged commit 25e2159 into master Jun 20, 2026
@mlcyclops
mlcyclops deleted the polish/streaming-playback branch June 20, 2026 06:25
mlcyclops added a commit that referenced this pull request Jun 22, 2026
…ile (#44 alert #18)

readEditorFile did statSync(path) then readFileSync(path) — a check-then-use race
(the path can be swapped between the stat and the read). Switched to a descriptor-
bound read: openSync once, fstatSync(fd) for isFile/size/mtime, readSync from the
same fd. The fd binds the inode we actually read, so there is no path re-resolution.

Also hardened saveEditorFile's conflict check the same way: dropped existsSync(path)
+ readFileSync(path) for a direct read where ENOENT == "new file, no conflict". This
mirrors loadExportText's TOCTOU-safe discipline (ADR-0025).

All 12 editor tests + desktop suite (258) green; conflict/overwrite behavior unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mlcyclops added a commit that referenced this pull request Jun 22, 2026
fix(editor): resolve CodeQL js/file-system-race TOCTOU in readEditorFile (alert #18)
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