Repository navigation
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
fileagainst 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