Skip to content

v0.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Oct 11:20
· 72 commits to main since this release
0832ca1

What's Changed

📦 Other Changes

  • release.yml: tolerate an already-bumped tree (no-op commit/tag) so a re-trigger after a manual version bump still builds+publishes binaries (0832ca1)
  • bench: refresh results (bc99a5d)
  • bench: refresh results (11d8f24)
  • abort: settle in-flight live tools as 'interrupted' — on abort a tool's result is never persisted (no tool_end), so the pair kept its 'running' look forever with an empty body. Mark the head '— interrupted' and clear liveTools so a partially-completed tool reads as interrupted, not hung (27e8fef)
  • bench: refresh results (bae19ac)
  • bench: refresh results (172078b)
  • bench: refresh results (eb6c4e0)
  • refresh: preserve the live tail (in-flight tool pair, think, subagent, ephemeral) + welcome across the store rebuild — fixes ESC-mid-turn dropping unpersisted items. Exclude ref items (settled tool bodies) from the live tail so head+body stay together (fixes toolbody-split). Suite 868 green. (0948e60)
  • steer: fix the end-of-turn late-steer path — persist-then-continue DRAINED the queue, so the re-entered loop found nothing to inject and the steer was orphaned (answered only by a later turn). Re-peek instead: continue reaches the top-of-loop drain, which injects the steer as a real step-boundary user message + emits 'steered', so it's answered in-turn (a84f63a)
  • steer: a late steer (arriving in the window between the end-of-turn peek and the turn's return) is ANSWERED in-turn, not persisted-then-stranded — persistParkedSteers returns drained, and the end-of-turn exit continues to answer it (d18317b)
  • bench: refresh results (d6a4e50)
  • clipboard: extract the platform copy/paste ladder (clipRead/clipWrite/osc52Encode + WSL/Windows-interop/OSC52 routes) to tui/clipboard.ts; app.ts 4596->4348 (755ff6f)
  • app.ts: host the extracted wizard module — remove the inline question-wizard block (startPrompt/askPrompt/promptRows/promptKey/etc), delegate to tui/wizard.ts (06e3a1d)
  • add tui/wizard.ts: the question wizard as a testable module (not yet wired into app.ts) (5d3aa5a)
  • bench: refresh results (860436d)
  • bench: refresh results (c3052c7)
  • walkGrep fallback: announce truncation at limit like the rg path (CI has no ripgrep; the silent cap made grep lie about completeness) (68e30bb)
  • fix CI: WSL detection tests are host-independent (inject /proc/version); fix WSLENV typo (1926dfe)
  • bench: refresh results (983e2d3)
  • bench: refresh results (ad306be)
  • bench: refresh results (3b5a1de)
  • bench: refresh results (7ca165e)
  • Style: add faint (SGR 2) to the Style interface + sgrOf; test its emission (da8f5db)
  • test recent-work helpers: keepTail, nodeRendersToNothing, registerPluginProviders; export keepTail (e5b52a7)
  • refresh(): extract diff-and-touch to a pure exported helper (diffTouchKeys) + unit tests (43ff8cb)
  • Fix IPv6 SSRF guard, live settings, repl full env, steer-at-end, diff-and-touch refresh; unify estimator, model-step helper, provider registration; read cap; remove tuiRich; tests hermetic (FOX_AGENT_CONFIG); C/D/F/G/missingRequired/budget fixes (016b2e0)
  • bench: refresh results (8b75c4e)
  • turn: an interrupt never waits on the tools; a capped turn keeps its steers (d5db285)
  • bench: refresh results (cdc1663)
  • tui: copy through a platform-shaped route; never truncate silently (d690266)
  • bench: refresh results (0232aa1)
  • bench: refresh results (20d83f4)
  • prompt: ## Style stands alone; Paths covers every path-taking tool (6873c42)
  • lsp: resolve file against ctx.cwd like every other path-taking tool (bf47850)
  • prompt: teach relative paths, the post-write check, and prompt junk deletion (5601e53)
  • glob/grep: a caller-chosen limit, and an announced truncation (b5cfaa6)
  • read: attach pdf for models whose catalog lists the pdf modality (cf3f516)
  • task: kill one background subagent by job id (84031d8)
  • tools: refuse arguments the schema does not declare (1c9e4e1)
  • turn: persist a steer parked at end-of-turn instead of stranding it (b132b88)
  • tui: keep typed leading spaces, and scope the caret's EOL fallback to its line (216a121)
  • Revert the directory-plugin work: 561 unreachable lines and a dead dependency (dccf8a9)
  • background work announces itself when it finishes (e12278f)
  • plugins: install dependencies with an embedded npm resolver (304b9ee)
  • plugins: manifest + dependency graph for directory plugins (467b0cd)
  • bench: refresh results (f56262b)
  • wizard: wrap long option labels instead of truncating them (55fd91e)
  • remove htmls (f81102f)
  • bench: refresh results (95e0b4b)
  • bench: refresh results (1916fc8)
  • bench: refresh results (56eda0b)
  • bench: refresh results (84a3f08)
  • highlight: more fence colors, all themeable; fix marker hit region + tool-body selection (723acf5)
  • layout: one marker gutter, shared by every consumer (412c574)
  • highlight: give fences a real code palette again (7 colors, was 4) (8a5af08)
  • highlight: swap Shiki for @speed-highlight/core — 15x lighter, ~400x faster (6fad89e)
  • bench: refresh results (1611dba)
  • bench: refresh results (322fc27)
  • bench: refresh results (53a8a18)
  • mac: installer cannot complete, and copy/paste silently lie (0ee4694)
  • share: no message caps, rebuilt page; steer survives a turn-end race; bench pss fix (841f6f2)
  • share: /share renders a session as one self-contained offline HTML file (b13b48f)
  • tui: stream an in-flight tool's output instead of hiding it (26d408b)
  • bench: refresh results (00661a2)
  • tui: an in-flight tool shows its head at tool_start again (96794a2)
  • transfer: stream the session db, and guard zip bombs by shape not size (cb70eb5)
  • bench: refresh results (881fcc7)
  • bench: refresh results (51ac005)
  • import: chmod the installed session 0600, not 0644 (1205749)
  • task: a background subagent outlives the turn, not the session (e4a691f)
  • bench: refresh results (ab1d203)
  • bench: refresh results (b46d52e)
  • tui: fix the selection regression on marked rows — two corrections (8e75d40)
  • tui: map clicks to content columns, not a flat column-1 (dcfaf30)
  • tui: fix the wizard's filter/answer box column and the stale option list (b62bd26)
  • bench: refresh results (c4e9843)
  • providers: read the format from the endpoint, not the provider name (4d16791)
  • tui: theme the Shiki palette and the dark-token substitute (04ea9c7)
  • providers: pass maxOutputTokens from the model registry (028a5d1)
  • bench: refresh results (5f92332)
  • bench: refresh results (1d40318)
  • tui: fix ReferenceError crash in the spinner tick (3971c6c)
  • tui: /todo renders as a real task list in the output panel (1994a4a)
  • tui: fix three [N] marker defects — displacement, selection hole, repeat (2bc26d4)
  • tui: stamp live agent text with its seq — [N] marker was missing on streamed messages (0487cce)
  • tui+todo: in-flight tools look normal; todo tool returns just 'updated' (51bf3a1)
  • bench: refresh results (92ec60d)
  • tui: streaming marker corrects to the assistant node's real seq (186786f)
  • tui: theme-customizable spinner + running-tool color; more color slots (231d345)
  • tui: running tools show a live spinner head, appearing at tool_start (1b2bbcf)
  • openai-compatible: race the stream against abort — ESC returns instantly (8988370)
  • bench: refresh results (b2762a1)
  • bench: refresh results (6702a8f)
  • bench: refresh results (006a5bc)
  • cli: grouped, color-coded help; subcommands read as actions, flags as options (583088b)
  • cli: a valued flag with no value is a usage error, not an empty override (fe8d9bd)
  • acp client: kill child when session/cancel is ignored (abort race) (7a6b4f9)
  • exec: reap exited-but-never-polled background jobs after 10min (7ec8212)
  • lock: retry path no longer claims a lock it does not hold (TOCTOU) (5dc16cb)
  • store: cache prepared statements per (db, sql) — stop leaking one per call (e47200d)
  • mini: busy spinner, ctrl+c abort, richer colors (b178cc9)
  • bench: refresh results (cbca85e)
  • cli: read VERSION from core/version.ts, not loop/prompt.ts (123d6a3)
  • markdown: unordered bullet is the larger • (was ·) (980b775)
  • bench: refresh results (7bf0dc7)
  • markdown: render unordered bullets as -, not a bare dash (05b84f6)
  • bench: tui_first_input must return samples, not min — fixes TypeError in CI (a4c060e)
  • bench: refresh results (e78da25)
  • bench: report min/p50/p95 per timing metric, not just best-of-N (b960bfd)
  • bench: measure render, not literal echo; settle 2s for latency (65be2ee)
  • bench: refresh results (fb07df3)
  • build(deps-dev): bump typescript from 5.9.3 to 7.0.2 (#23) (8c16d4f)
  • bench: refresh results (50ccff4)
  • highlighter: repainted cached-flat rows when a Shiki block lands (a28e243)
  • bench: refresh results (eeea0f9)
  • highlighter: delete dead regex fallback (highlightLine/KEYWORDS/REGEX_LANGS) (36adb00)
  • prompt: drop doc-file list; add runtime-header doctrine. input: fix caret after word-wrap (4a6aa70)
  • input box: word-aware wrap, matching the transcript (7d9e62c)
  • bench: refresh results (1779155)
  • bench: refresh results (9571a66)
  • token estimate: CJK-aware (ascii/4 + non-ascii*1), matching kimi-code (b315310)
  • highlighter: remove rich toggle + regex fallback; compaction: drop 131072 cap (dd2fecd)
  • bench: refresh results (0f8e993)
  • bench: refresh results (a03f1e3)
  • selection: highlight the last selected cell (a62bba9)
  • highlighter: tokenize the whole fence block, not one line at a time (9b20116)
  • marker: first-row-only click hit-test, uncolored chip gap (8096e83)
  • bench: refresh results (60c0266)
  • Highlighter: emit real Shiki token colors; marker: continuation lines align left (278cccf)
  • Transcript markers: column-0 chip, single-chip tool pairs, clickable streaming tail, wizard input save/restore (1b10222)
  • bench: refresh results (738792c)
  • bench: refresh results (e615a73)
  • Transcript [N] markers: clickable gutter chip with per-message ops (1d4e137)
  • bench: refresh results (ba3a3a9)
  • bench: refresh results (aaa9baa)
  • bench: refresh results (4b5f315)
  • bench: refresh results (4779c21)
  • bench: refresh results (fb4faa2)
  • bench: refresh results (0ba28ad)
  • tui: wrap the floating command-output panel instead of clipping it (f56b26d)
  • tui: route /reload + session-in-use notices through the cmdOut float (9d9b4f9)
  • tui: make the /reload confirmation ephemeral (0ddcd98)
  • bench: refresh results (aa425a9)
  • tui: don't paint after the alt screen is torn down on exit (0dd46a7)
  • bench: refresh results (27b62ca)
  • test: add bundled:task to the plugin roster assertion (edd7c14)
  • tools: move task/delegation behind a bundled:task plugin (189224d)
  • tui: wrap the wizard header instead of truncating it (c508bef)
  • bench: refresh results (c8ffaca)
  • bench: refresh results (d180098)
  • tools: collapse MCP to a single mcp tool routing {server, tool, arguments} (4ca8ad3)
  • markdown: keep the code-fence gutter on wrapped continuation rows (a9dcca4)
  • markdown renderer fixes: bold-italic, link labels, footnotes, ASCII task glyphs, unknown-lang code (9b5c998)
  • Add Shiki grammar highlighting; swap smol-toml for Bun.TOML (e3cf02b)
  • bench: refresh results (97a0e3d)
  • bench: refresh results (f1fea0e)
  • prompt: slim the runtime tail — drop the marker line and the verbose context figure (1d28c03)
  • context: size the window by max(report, chars/4 estimate), not the report alone (f510d26)
  • bench: refresh results (b9d49ca)
  • bench: probe text without whitespace so cooked-mode echo matches (3e43d60)
  • bench: refresh results (7c02c0a)
  • bench: refresh results (a03efc6)
  • bench: refresh results (62268a7)
  • bench workflow: fix kimi-code MISSING row (53d0405)
  • bench: refresh results (5b5e325)
  • bench: refresh results (1688e34)
  • tui: color the input arrow by mode; turn: persist steered messages on interrupt (9bbd1a4)
  • bench: live progress narration + debug flag + dead-PTY early-exit (6ebe541)
  • bench: fix 140MB bundle mismeasure, faster serial runs, new metrics (20e5d20)
  • many changes (f55dc37)
  • bench: refresh results (551385a)
  • bench: refresh results (2bcadea)
  • mcp: bounded close with SIGKILL fallback — a wedged server hung shutdown forever. (2a8b3e6)
  • bench: refresh results (441e7ad)
  • pin typescript to the 5.x classic line: typescript-language-server drives tsserver.js and the Go-native port (ts@7) ships none — its initialize fails with 'provides no tsserver.js' and diagnostics silently read clean everywhere (measured on this repo this morning). The e2e test's skip guard now checks lib/tsserver.js, not the package, so a TS7 checkout skips honestly instead of failing. (200a091)
  • context: prefix cache + incremental orphan repair for long sessions. (748d30d)
  • store: PRAGMA synchronous=NORMAL. In WAL mode NORMAL is the standard pairing and corruption-safe (worst case on OS crash: lose last commits). FULL fsynced every checkpoint and a long session pays it per append: measured 0.15ms/msg on a small db vs 2.5ms avg once the db reached 8k rows. (7341df9)
  • tui: expandMode sticks. ctrl+t used to mutate only the items on screen at press time, so fold-all was undone by every new streaming tool body (born expanded:true) and unfold-all left new think blocks collapsed (born expanded:false). New expandables now consult the mode: live + settled tool bodies/heads and new think items. expandMode resets on session switch like expandedRefs. (ed7471a)
  • lsp ships as a plain bundled plugin: drop the FOX_AGENT_ENABLE_LSP_TOOL gate — it costs nothing until a server exists for the file, and turns off like any bundled plugin (disabledPlugins = ["lsp"]) (ae78c66)
  • bench: refresh results (24fcae0)
  • session transfer: dependency-free zip (node:zlib) + export/import of a session as one .fox.zip (checkpointed db + manifest, verified on import); /export and /import slash commands, fox export|import subcommands — move a session to any device and resume (72e71fc)
  • pty lifecycle: full session id in the tmux name (12-char prefix collided same-ms sessions and spawnSession killed the other shell); stale fox-agent-* sessions swept on spawn (crash leftovers); shutdownTools joins the pty chain so a queued call cannot re-spawn after the kill (b6d5299)
  • bundled plugins: question (structured mid-run user questions over the UiBridge) and lsp (navigation tool — definition/references/hover/symbols/workspace, env-gated off; client gains request/response correlation and shared session setup) (130a10d)
  • fixes from the 2026-10-09 review: repl timeout actually bounds async evals; acp fork takes the session lock, close/delete races keyed, delete aborts in-flight turns; mcp unavailable-server warning no longer console.errors over the TUI; dead code out (screen scrollbarScrollTop dup, fetch dead branch, commands continueLatest, sdk spread-overridden fallbacks) (c8a9cf6)
  • bench: refresh results (5df15f3)
  • tests: bundled/plugins suites set FOX_AGENT_CONFIG — real global toml leaked in (03683a0)
  • cost: bundled:cost plugin — catalog-priced derived view, hardcoded tables gone (7b2191a)
  • bench: refresh results (2ed63ef)
  • bench: refresh results (e6e0bf5)
  • bench: refresh results (d087bdf)
  • bench: refresh results (0427db5)
  • mcp: image content parts become MediaParts, not stringified base64 (4f1ef74)
  • bench: one dashboard SVG replaces four charts; codebuff weighs its real binary (d8e7d9c)
  • bench: first-input probe matches across chunks; kimi-code dir on PATH (0cc7282)
  • bench: refresh results (ce71471)
  • docs: finish the [mN] -> [N] marker rename in user-visible strings (f836cc8)
  • bench: verified install-command research notes (opencode subagent, official sources) (abc4a45)
  • bench: drop opencode v1, add amp/cursor-agent/codebuff + 6 more harnesses, fix push-race deadlock (afc6a28)
  • bench: refresh results (b327696)
  • deterministic short resume selector: exit hint prints a unique id prefix, not a list index (b5f5caa)
  • bench: refresh results (85a34b7)
  • escape never clears the input draft — the ladder ends at 'stop the turn', then nothing (75dc173)
  • bench: refresh results (67a0c54)
  • /prune: modes — vacuum (default) or compact (remove hidden + renumber markers 1..n); interactive needs no 'yes' (a424c7b)
  • speed up transcript replay on large sessions: lite columns + lazy tool-call pretty-print + mmap (9a73224)
  • bench: refresh results (9b3df43)
  • exit: overlap tool teardown with TUI teardown instead of stacking after it (5bbb95c)
  • bench: refresh results (b26a29a)
  • deps: bump ai SDKs to current, @agentclientprotocol/sdk 1.5.1+, @modelcontextprotocol/sdk 1.31.0+, smol-toml 1.9.0, bun-types 1.4.2 (b87b165)
  • charWidth falls through to Bun.stringWidth — U+FEFF, combining marks past U+036F, VS17 and format chars counted 1 cell while the terminal painted 0, displacing the input cursor per char typed (0b631b0)
  • thinkKernels cleared on retheme and frame-recovery — C.think is baked into kernel segs at creation, so a /theme switch left old-colored think rows cached (024aa4d)
  • bench: refresh results (df6f076)
  • tuiScrollStep default 2 — one row per wheel detent crawled (5aa9907)
  • tuiFrameMs default 16 (60fps) — was 33 (09a977b)
  • bench: refresh results (83c341a)
  • lineCache per (item, width) — kills the two-pass scrollbar cache thrash (ea3f0e2)
  • paintNow joins the coalescing schedule — latest-wins, never serialized (da47669)
  • bench: refresh results (321090f)
  • event-driven paint: markDirty schedules an 8ms paint, interval is only a net (bc60496)
  • bench: refresh results (f0390a6)
  • mcp: child stderr no longer inherits the TUI's terminal (4ef6c79)
  • click a code block to copy it (474c783)
  • bench: refresh results (2c68b35)
  • selection is region-scoped: one live selection, dock drag-release copies (18f5435)
  • plugin regions: FoxPlugin.regions — clip-bounded planes, live-swappable (62d8286)
  • app regions stamp into planes; wipe choreography deleted (65a208b)
  • composite() resets the grid first: the grid is the planes' pure product (167f416)
  • bench: refresh results (d9fb42b)
  • screen planes: per-region cell layers composited into the grid (36d134e)
  • input selection highlight drew at inverted coordinates (55067bd)
  • bench: refresh results (48bfbb7)
  • wheel burst coalescing + queue-drain repaint (788fd8e)
  • table width budget: leave the wrap continuation column (4f5241e)
  • markdown tables shrink to the terminal width (2a5c9bf)
  • bench: refresh results (4bd6842)
  • tuiScrollStep applies to picker wheel scrolling too (2018ef8)
  • stable item keys, uncapped line cache (d059e1b)
  • bench: refresh results (96f8a3e)
  • markdown: render tables without outer pipes (164c6c7)
  • transcript renders the full log, not the model's compacted view (658ab3e)
  • bench: refresh results (34ad13f)
  • themed panel background for floating command output (c889f32)
  • self-documentation: the agent can explain fox-agent and /init the repo (e1d1c97)
  • bench: refresh results (46df8cf)
  • picker: verbs behind ctrl — plain letters always filter (1713b66)
  • bench: refresh results (0785d77)
  • think items through the rows kernel — O(delta) streaming bodies (d777d9a)
  • bench: refresh results (072e39a)
  • tui: cache each item's edge span — countRows stops rescanning rows (2236e19)
  • debug: /debug on|off|tail — verbose diagnostics switch (3fc0480)
  • statusBar: configurable segment template + plugin statusSegments (7bb9c1b)
  • status bar: drop segments one at a time from the left, keep the rightmost (e603ab4)
  • tui: dock height capped by window; status bar drops segments, never clips (8183c7b)
  • tuiScrollStep: transcript rows per wheel notch (config, default 1) (07145a4)
  • tui: a frame render error recovers instead of killing the session (be7f507)
  • endpoint /models: parse input modalities — image-capable models read as vision (7aac688)
  • tui: scrollbar column only paints when content overflows (9564a79)
  • bench: refresh results (897c167)
  • test: the adapters' cache-read surfacing, driven over real wire protocols (2a1cc48)
  • bench: refresh results (24a5a1e)
  • tui: the skipped-item cursor over-advanced by its own separator (b38a047)
  • tui: build the frame's window for the scroll offset it will actually paint (1528103)
  • tui: count and paint must agree on an item's edge rows (8198f05)
  • bench: refresh results (177a7ed)
  • bench: refresh results (7a0b847)
  • model/login: the answer box replaces the sentinel rows (6f3b632)
  • bench: refresh results (6831c65)
  • usage: carry the provider's cache-read count, and show what it bought (963423d)
  • tui: a select can offer an answer that is not in its list (6433451)
  • settings: tuiScrollbar and tuiFrameMs become settable — and tuiFrameMs actually runs (73e5348)
  • bench: refresh results (df45ac0)
  • shell: resolve the shell instead of assuming /bin/bash — and kill the tree without setsid (b4ec01b)
  • prompt: the runtime tail names the provider, the box, the zone and the clock (365e400)
  • prompt: static system prefix + a per-step runtime tail — the cache stops moving (edb7723)
  • compact: absolute trigger ceiling + a keep-budget, not fractions of an overstated window (76cb23d)
  • markers: [mN] -> [N] everywhere; echo stripper accepts both dialects (2ffd98a)
  • tui: closing hints/wizard/cmdOut restores the transcript under them (1c998c6)
  • tui: ephemeral notice renders as a SOLID box (6f40f7e)
  • tui: drop the spacer row above the dock; live tuiScrollbar switch repaints (f54aa23)
  • screen: trailing erase no longer swallows the scrollbar on sparse rows (e992c66)
  • tui: visible scrollbar track on plain rows; input-box flex redraw; stale-cache family (c67a597)
  • tui: drag-selection extends — selection anchors joined the region signatures (78d30b6)
  • tui: regions clear their previous row range — stale-cell ghosting fixed (d7da17f)
  • tui: region paint — spinner ticks re-derive the status bar alone; tuiFrameMs (6109f31)
  • tui: rows kernel wrap-reuse — stream feed no longer re-wraps the tail (5ae83dc)
  • providers: batch tool-result media into ONE deferred user message (b739113)
  • providers: media attachments actually reach the model (ff49103)
  • tui: rows kernel — incremental stream row production, golden-pinned to the old renderer (6951f7b)
  • config: tuiFrameMs — coalescing loop override (default 16ms, min 4, 0 = paint synchronously) (bee757f)
  • revert: tui rewrite — keep keys.ts decoder fixes only (fdb0e88)
  • bench: refresh results (ab01bcb)
  • layout: pass 2 skips whole items outside the window — frame cost is O(window), not O(session) (071c647)
  • layout: frame carries winOffset — the window's scroll-up margin is never painted as content (ab3882e)
  • layout: virtualized frame assembly — scroll cost independent of session length (d5fe530)
  • bench: refresh results (d6df913)
  • tools: todowrite -> todo (shorter name, one concept: the todo list) (f9f6515)
  • login: per-format custom rows — custom: carries the protocol explicitly (41f6e57)
  • bench: refresh results (0b05543)
  • login: custom endpoints are real providers — named profile, own row in /model (49531f8)
  • model/login: custom endpoints live in /login only; /model lists logged-in providers (e5f3789)
  • login/model: provider menu deduped and complete; filter echo removed; pretty names in /model (2d20393)
  • bench: refresh results (8a7394f)
  • dependabot: bun ecosystem (bun.lock, not npm); ctrl+c clears a non-empty draft before aborting the turn (ead7ff3)
  • test: relative layout.ts import + annotations (fixes CI typecheck on other machines) (d678443)
  • bench: refresh results (ca42bc7)
  • bench: refresh results (9b6d474)
  • tui: ephemeral box bg fill; queue stack height from frame; scrollbar strip never painted over by tool-row bg (49b2c67)
  • bench: refresh results (234b576)
  • tui: ephemeral notices render as a boxed block; lock notice is ephemeral (ac06196)
  • tui: dedicated scrollbar strip when enabled; seamless queue/cmdout floats; think color; distinct toolBg (c86526b)
  • sessions: /sessions and fox -c search titles/ids/cwd/model/preview (285dcea)
  • bench: refresh results (9331d54)
  • tui: read-only flag on the status bar's right; tool input expands to the verbatim JSON call (62bd4f7)
  • commands: viewers may /new and /fork (write a new session, not the locked one) (128d238)
  • tui: pure layout.ts — one computeFrame per paint, hit-tests read the painted frame (5965364)
  • tui: decode ctrl+letter uniformly (bare letter + ctrl); emoji-width ranges sans ambiguous 2600-27BF; stringWidth for segWidth (f960109)
  • core+tools: review fixes — retry accumulator reset, busy switch guard, exec log-resurrect, resize/abort listener leaks, Bun.sleep, spawnSync, defaultConfig merge (d1ab0c8)
  • bench: refresh results (1a3e642)
  • config: dedupe byte-identical direction files (AGENTS.md/CLAUDE.md pairing) (500efa1)
  • bench: refresh results (a2c6e16)
  • docs: fix typo in welcome-block comment (122b18b)
  • tui: streamRows drops its trailing blank; separator belongs to buildRows (bfbbcd8)
  • tui: scrollbar on the true last column; text wraps clear of it (8cb84df)
  • bench: refresh results (f2ec70e)
  • tui: a motion frame is not movement — fix clicks on tool calls (664bdfa)
  • bench: refresh results (01f5fd7)
  • tui: flush welcome block, tool-row background, granular wheel, flash replaces busy label (d27a52e)
  • bench: refresh results (641322b)
  • tui: uniform single-row item spacing; rich-flip invalidates row cache (2290760)
  • bench: refresh results (8d5bce3)
  • tui: reserve rows for the queued/steering stack above the dock (e84ce40)
  • bench: refresh results (648e332)
  • clipboard: OSC 52 first; add OSC 7 cwd and OSC 0 title (8d0a5b4)
  • bench: refresh results (355eed2)
  • rich: word-diff takes precedence over whole-line diff coloring (1129cd9)
  • bench: refresh results (0585a66)
  • rich mode: markdown inline upgrades + tool-output tinting (1f2c9b8)
  • bench: refresh results (a914ed5)
  • tui: drop working row; toolhead affordance only when input overflows (0b6bb6d)
  • /settings command: list, show, set, reset obscure config knobs (3616a42)
  • bench: refresh results (9011ace)
  • themes: nord, catppuccin, gruvbox, rose-pine, tokyo-day, everforest (contrast-audited) (f6e078a)
  • markdown todo lists: task-list renderer, ASCII markers (5d38b98)
  • trust prompt: no extra line after answer; themes: legible secondary colors (1378288)
  • bench: refresh results (460585f)
  • gitignore python bytecode (2fd0c87)
  • bench: jcode real bundle, TUI 1st-input column, per-command help (cd12138)
  • bench: refresh results (4ccadee)
  • per-command help, upgrade --beta parsing, GitHub token support (e55560f)

Full Changelog: v0.5.0-beta.1...v0.6.0