- Add spoon-dark/spoon-light Monaco themes built from the site's design tokens
(teal --primary accent), switched by next-themes resolvedTheme
- Use Victor Mono (with ligatures + italic comments) for the editor font
- Disable Monaco's in-browser TS *semantic* diagnostics, which were false
positives (no node_modules / path aliases in the browser) e.g. 'Cannot find
module ~/server/auth'; keep real syntax-error reporting
- Gate the tree/diff/status loads (and 5s poll) on workspaceStatus being
active/idle, so we no longer hammer the 'workspace is not active' endpoint
while a worker is still picking up the job
- Show a 'Setting up your workspace…' pending state instead of surfacing
startup as a console error / stale-workspace recovery box; escalate to a
softer 'still waiting' hint after 90s if no worker picks it up
- Auto-reload the diff and file tree (debounced) whenever the agent records a
workspace change or a turn starts/ends, so diffs appear without a manual
Refresh
- The recovery box now only appears for a genuinely lost workspace (Convex
reports active but the worker can't reach it)
Replace the raw single-blob diff dump (Monaco, language=diff) and the plain
<pre> file diffs in chat with @git-diff-view/react:
- Parse the unified git diff into structured per-file entries (status,
+/- counts, binary detection) via parseDiffFiles()
- Workspace Diff tab: collapsible per-file cards with status badges, line
counts, syntax highlighting, and a Unified/Split toggle
- Agent chat: render each change's diff highlighted instead of plain text
- Theme follows next-themes resolvedTheme (light/dark)