v0.1.5
What's Changed
- feat: harden context handling and push notifications (445e449)
- fix(runtime): rescue provider auth failures (2b51f29)
- fix(companion): prepare manual iOS archives (d15887c)
- fix(loop): let repeated actions continue (fd36551)
- feat(companion): automate TestFlight releases (17596e5)
- fix: harden gateway compatibility and runtime lifecycle (6906694)
- fix(gateway): validate transcript window parameters (bc23c3c)
- feat: page companion transcripts and clarify shell calls (9091fb3)
- fix: streamline queued polling and session surfaces (7c6bc8b)
- test: synchronize interrupted gather child (24f5604)
- fix: harden session recovery and provider surfaces (96d7552)
- fix(ci): restore local provider presets (9ecddf6)
- fix(tui): keep navigator scroll arithmetic primitive (3089113)
- feat: harden queues, tools, and companion (5d773f2)
- fix(gateway): refresh stall watchdog on real progress (553626f)
- companion: canonical type scale, line-height in the scale, taller session header (f095e60)
- perf(search): fff owns every ignore decision (overlay), no Clojure walk left (7601970)
- fix(queue): images in queued turns render as chips, not raw paths (5c5e4c6)
- fix(companion): smaller composer text and narrower +/mic buttons on phone (dc16e66)
- fix(companion): model badge is a quiet centered caption; composer no longer hugs the screen edge (75869fb)
- perf(companion): cache /v1/router for 5 minutes and prefetch it at connect (90474b8)
- fix(companion): New session back to solid primary; Share chip primary (955a1fa)
- fix(companion): model badge spans the composer width (e6d773d)
- fix(companion): model badge centered below the composer box, smaller (043ee12)
- fix(companion): smaller Button chrome; sessions header actions share one palette (2e76aa4)
- fix(companion): shrink session header chrome; move model picker under the composer as a badge (e8bf1f0)
- fix(companion): shrink composer + chrome — 36px icon buttons, smaller input text, 12px base (c46fe10)
- style(companion): bold button labels, smaller buttons and input text (78651b5)
- fix(companion): point Capacitor ios.scheme at the real Xcode scheme (26d282c)
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- perf(search): canonical pooled-fff search path (6e71ab1)
- fix(lint): clear every eslint + clj-kondo finding (dc0af88)
- feat(tui): flatten dialog, footer, and button chrome onto terminal background (3bbf8f8)
- Show authenticated OAuth providers in Router/Models manager (776afc7)
- deps: bump svar to 0.7.77 (claude-opus-5) (54ea9c8)
- Upstream vis config (4d4e34a)
- Move network egress config under jail.network, gated by jail.enabled (20c3e35)
- Fix fold-card savings note breaking intent recording; type levels param (b3aedb4)
- Fold card always reports savings, even a no-op re-fold (b4914e5)
- chore: sync working tree (b1a3ee0)
- fix(companion): point session search client at /v1/sessions/actions/search (ecf9b20)
- fix(sandbox): align config-spec test + docs to jail.enabled rename (off by default) (1e62907)
- Session search: title-first transcript preview across TUI and Companion (7624553)
- Group GitHub Copilot tiers and filter to active variant (#47, #48) (00ef8a9)
- chore: working-tree updates (companion screens, copilot provider) (850cfb3)
- Merge remote-tracking branch 'origin/main' (ecfb8df)
- Normalize toggle values to strings; surface config-denial hint in access view (379d5d9)
- chore(tui): channel-tui dialog/test updates (69e1f77)
- chore(deps): bump tree-sitter-language-pack to 1.12.3-blockether.23 (acffb33)
- vis-companion: TS7-compatible capacitor config codegen + build:ios (9458336)
- chore(sandbox): sandbox off by default; config-spec rooted paths + deny-exec + ports; net-probe; docs + repo-wide reformat (82db9d8)
- Fix lint warning in oauth_test and stage pending workspace changes (5ca7503)
- Fixes (0b734ba)
- feat(providers): surface & route authenticated OAuth providers; bound gather pool (403e798)
- Suggest Tailscale IP when pairing a loopback-bound gateway (a60702b)
- feat(streaming): distinct native-call preview phase + svar 0.7.75 (b2488cc)
- fix(streaming): render native tool previews distinctly (b14c1ec)
- fix(tui): scope Codex verbosity to session provider (e4fa8fa)
- chore(deps): bump tree-sitter-language-pack .20 -> .21 (TSX value bindings + arities) (30396f8)
- chore(deps): bump tree-sitter-language-pack to 1.12.3-blockether.20 (1d8a6a2)
- feat(editing): struct_index range/ranges windows + resilient edit-kind resolution (929ff26)
- feat(editing): fold rg into find_files (name+content search); assorted WIP (1f798ce)
- feat(sandbox): per-session Seatbelt jail + gateway MITM egress proxy (6dad934)
- chore(deps): bump svar to 0.7.73 (health-gated connect-blip retry) (39497c6)
- chore: remove committed transcript scratch artifacts (546f44e)
- Fix ForeignObject leak in session_state transcript projection (846a29d)
- feat(transcript): canonical /export dialog with gateway md+html routes (1f090ce)
- feat(transcript): surface python stdout and attachments in transcript (#40) (5bab711)
- fix(env-python): make tool failures catchable in-block (#42) (a0353dd)
- Fix Blockether light theme tab colors and dialog margins (d8d06f7)
- fix(paramiko): drop shared MINA SSHD io-factory so every server negotiates (a4f71b9)
- Render fixes (cf9b434)
- fix(channel-tui): restore result-row copy alignment for baked output indent (88a58bf)
- fix(paramiko-shim): self-reap MINA sshd host-side on session close (3b5bbef)
- fix(gateway/bus): treat turn.cancelled as terminal in hydrate! (1e82589)
- fix(channel-tui): declare flatland/ordered dep + align queue-close test (88668e8)
- fix(prompt): gate user-pasted images on model vision + steer PIL fallback (be8cf65)
- deps: bump com.blockether/bridge 0.1.2 -> 0.2.1 (bc7ef6a)
- Fix cat tool to accept all-kwargs spec map with path key (9cfef1a)
- fix(editing): steer append_child/prepend_child used with a NAME locator (781f4bf)
- fix: preserve summary-only printed results (aff9a70)
- deps: bump svar 0.7.69 -> 0.7.70 (transient-message classifier: statusless/wrapper/gRPC transients + mid-stream code casing) (e97085c)
- fix(tui): Linux clipboard OSC 52 fallback + scroll-safe transcript copy (6803f33)
- Remove Piper TTS (speaking) from voice extension (cb60b8e)
- Fix the errors (afe6683)
- wip: in-progress vis changes (3efbfa5)
- chore(deps): bump com.blockether/svar 0.7.66 -> 0.7.67 (catalog-driven Copilot vision) (a057751)
- chore(deps): bump com.blockether/svar 0.7.65 -> 0.7.66 (6e93506)
- Optimizations (c847659)
- Render doc/apropos native cards as authored markdown (5f28638)
- refactor(lint): drop redundant coercions; suppress clj-kondo false positives (62722c4)
- style: blank line between all top-level forms (d6fd30b)
- feat(clojure-format): report which backend formatted each result (4a140c5)
- style: full-project cljfmt reformat (5f81e36)
- fix(tui-magit): make status keybindings faithful to vanilla magit (bd8c1a9)
- fix(clojure-test): relativize fault file paths in repl-mode test output (075d683)
- fix(python-cli): wire caller stdin into CLI context so -c/FILE can read sys.stdin (73d2c5e)
- fix(self-docs): vis_docs both arities return {"pages": [...]} shape (c4bd086)
- Fixes to anchored editing (c9746b6)
- fix(provider): name rejected tool schemas (8b7d869)
- fix(tools): reject nonportable schema roots (836cd50)
- fix(prompt): enforce compact actionable style (9ef8c92)
- perf(tui): drop lazy-mapcat counter atom in list->lines; StringBuilder CLI lists (1f9eb88)
- docs(extensions): prefer native agent tools (c7e167e)
- perf(render): drop per-list counter atoms for pure map-indexed (d1cf761)
- test(tui): recording proxies reconstruct pre-segmented styled runs (08c3e66)
- Performance improvements (5857ca8)
- perf(tui): single StringBuilder pass in run->sentinel-segment (5ed478b)
- Performance fixes for TUI! (cb2460d)
- perf(tui): halve styled-line paint allocation via sentinel split (64e4d6d)
- perf(tui): skip grapheme array on plain lines in paint-styled-line! (285a07a)
- Bump lanterna (cf28b89)
- deps(tui): bump com.blockether/lanterna to 3.1.5-vis.32 (ba40cc2)
- Better error signal for the compiler exceptions (4b96c7c)
- perf(tui): identity-memoize layout height-key vector (5f32d67)
- fix(clj-test): honor run_tests :dir so sibling-project tests hit their own nREPL (8cde86a)
- perf(tui): O(log n) binary-search visible-window for scroll layout (0b01e11)
- perf(tui): replace pass-1 est mapv with primitive transient loop (f64f5df)
- perf(tui): cache last-bubble tail projection; coalesce tab-switch refresh (4b2acd2)
- Performance fixes (8be5edc)
- fix(prompt): resolve guidance and error rendering regressions (9b53851)
- Fixes to rendering (8d80c62)
- feat: refine prompts, errors, and TUI caching (ae55718)
- Stage changes to prompts (72916fe)
- Prompt changes, tui optimizations (ecf8c0e)
- Fixes to highlighting (b4d1c8d)
- Test runner fixes (2b1e8f7)
- Gateway fixes (ad3ff33)
- Update language surface contract (bebfe1c)
- Fixes to prompt and python env (14a0752)
- Optimize prompt (98d2461)
- test: align failing tests with current code (6810dff)
- style: reformat with zprint (.zprint.edn) across src, extensions, test (7eecbe1)
- chore: scrub residual telegram & web-channel mentions from comments and docs (1135b69)
- refactor(gateway): resolve workspace via live-env fallback so root ops work pre-first-turn (bdb475d)
- chore(channels): remove telegram bot channel (503f829)
- fix(gateway): decouple SSE delivery from the turn thread via bounded per-connection queues (0c5fca9)
- refactor(telegram): require transcript directly, drop requiring-resolve (6fdad04)
- fix(transcript): make HTML session export work without channel-web (e472080)
- fix(locks): drop obsolete call-py monitor, bound close!/close-all! turn-lock waits (5ede59c)
- chore(channels): remove web channel and react-native companion (d73b78a)
- refactor(env-python): one session context, one shared engine — pure-JVM renderer, in-context parser (1dea108)
- chore(deps): bump tree-sitter-language-pack to 1.12.3-blockether.18 (48996c1)
- fix(outline): surface the native cause, not opaque "FFI call failed" (35711bb)
- fix(env-python): freeze-proof every GraalPy context + dict-safe ntr results (5bd507d)
- docs: add full security audit (AUDIT.md) (59e4c13)
- feat(loop): self-heal empty model replies via svar 0.7.63 same-model resend (703e764)
- Revert "fix(security): bound gateway JSON request body to 4 MiB (#6)" (dd9899f)
- fix(security): bound gateway JSON request body to 4 MiB (#6) (ada976f)
- fix(security): allowlist markdown link schemes in server render (#2) (eef3124)
- fix(editing): bound nearest-existing-dir climb to allowed roots; drop stale ls test (164ad4b)
- feat(editing): climb missing search paths to nearest existing dir + report missing_paths (b3d9bfd)
- refactor(rg): search paths as named (file OR dir), skip missing (eb0e2fc)
- fix(security): harden credential storage and token comparison (Batch A) (4c63a25)
- fix(python): seed apropos/doc for aliased extension symbols; apropos returns {name: gist} dict; clarify mcp double- vs single-underscore naming (1d55f07)
- chore(deps): update dependencies via antq (de1c707)
- chore(deps): bump com.blockether/fff to 0.10.0-2 (0a98070)
- fix(editing): rg/find resolve paths to nearest existing directory instead of erroring (0cbc9f8)
- fix(clojure): reuse one nREPL session per connection + eval-based (+ 1 1) health check in ctx (74852ac)
- refactor(repl): remove bin/dev launcher and clj_repl references (05f9eba)
- fix(clojure): fail eval fast on nREPL eval-error, interrupt the eval on timeout (2361ecb)
- feat(language-surface): aggregate lint findings by path (7b5cbbc)
- fix(channel-tui): keep the cost/token bubble footer on a cancelled turn that spent tokens (ab7560b)
- fix(loop): normalize svar 0.7 canonical token usage + append-only live tool-code fence (dc04a9a)
- test(language-clojure): cover blank snippet defaults (9e398bd)
- feat(introspection): include session modified time (e855829)
- fix(language-clojure): ignore blank snippet defaults (f9c9490)
- fix(channel-tui): expand tabs before markdown wrapping (a1cd5b0)
- feat(paramiko): support key generation in shim (86df689)
- fix(channel-tui): preserve account plan quota windows (3e3546d)
- docs(ctx-engine): clarify compact-src docstring (cdf6bfa)
- feat(channel-tui): tint diff fence add/del rows and fix scrollbar flicker (928c43b)
- refactor(foundation-search): drop Exa MCP env toggles from extension registration (6bce7d3)
- feat(channel-web): colorize language-diff fences in static export (8161249)
- fix(channel-tui): read gateway project fields by string key (aa61779)
- docs(fold): require full workspace-relative path:line anchors in gists (c158a5b)
- big refactor (be1dbaa)
- feat(python-sandbox): auto-settle deferred tool calls on subscript/len/in (a7584b3)
- fix(tui): wire Esc to clear the pending-sends queue (f147d7b)
- fix(clojure): evict wedged nrepl connection on eval timeout (47fc63e)
- feat(python-cli): forward script argv and caller env into vis python sandbox (3c0552d)
- fix(channel-tui): reserve exact inline-image box from real terminal cell size (ca7b942)
- fix(tui): stop slash/file suggestion overlay flicker during live stream (a3cf497)
- fix(tui): ellipsize bubble footer meta line on narrow terminals (cad17ab)
- fix(shim-matplotlib): resolve per-element hex color lists without float() crash (42127aa)
- fix(loop): eliminate boxed-math + recur-primitive warnings in re-entrant park/retry loop (5a6aa57)
- fix(channel-tui): gate provider-limits poll resolve to cut idle CPU (171abd2)
- fix(transcript): fence folded-gist body so it renders verbatim (b1f7baf)
- fix(clojure-test-runner): silence framework reporter, structured failure digest (bc84dd9)
- feat(self-docs): render vis_docs op-card as a table (9af4039)
- perf(providers): cache fleet enumeration for footer-frequency reads (#29) (bd82121)
- docs(readme): correct java prereq to 25+ (e8e01f2)
- chore(docs): drop Windows/PowerShell support from docs, readme, and installers (47056f6)
- fix(test-runner): pr-str result under pinned print vars to survive truncating nREPL sessions (dfa51f7)
- fix(self-docs): treat blank/absent vis_docs slug as list request (4de0642)
- fix(gateway): parse /v1/events sids as UUIDs and persist cancel stamp (fc79477)
- feat(editing): name the searched directory scope in rg & find_files op-card headlines (3e30c97)
- fix(loop): make the native-tool park re-entrant so nested run_tests keeps its budget (2aceff8)
- fix(compaction): show fold card savings as % of window, not a rising projected level (e5b2776)
- docs(channel-tui): document queue, cancel & Ctrl+C behavior (2673fbf)
- feat(compaction): project next-request % on fold cards and freeze unbounded fold selectors (a8f8351)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
Package changes
com.blockether/vis
- feat: harden context handling and push notifications (445e449)
- fix(runtime): rescue provider auth failures (2b51f29)
- fix(companion): prepare manual iOS archives (d15887c)
- fix(loop): let repeated actions continue (fd36551)
- feat(companion): automate TestFlight releases (17596e5)
- fix: harden gateway compatibility and runtime lifecycle (6906694)
- fix(gateway): validate transcript window parameters (bc23c3c)
- feat: page companion transcripts and clarify shell calls (9091fb3)
- fix: streamline queued polling and session surfaces (7c6bc8b)
- test: synchronize interrupted gather child (24f5604)
- fix: harden session recovery and provider surfaces (96d7552)
- fix(ci): restore local provider presets (9ecddf6)
- feat: harden queues, tools, and companion (5d773f2)
- fix(gateway): refresh stall watchdog on real progress (553626f)
- companion: canonical type scale, line-height in the scale, taller session header (f095e60)
- perf(search): fff owns every ignore decision (overlay), no Clojure walk left (7601970)
- fix(queue): images in queued turns render as chips, not raw paths (5c5e4c6)
- fix(companion): smaller composer text and narrower +/mic buttons on phone (dc16e66)
- fix(companion): model badge is a quiet centered caption; composer no longer hugs the screen edge (75869fb)
- perf(companion): cache /v1/router for 5 minutes and prefetch it at connect (90474b8)
- fix(companion): New session back to solid primary; Share chip primary (955a1fa)
- fix(companion): model badge spans the composer width (e6d773d)
- fix(companion): model badge centered below the composer box, smaller (043ee12)
- fix(companion): smaller Button chrome; sessions header actions share one palette (2e76aa4)
- fix(companion): shrink session header chrome; move model picker under the composer as a badge (e8bf1f0)
- fix(companion): shrink composer + chrome — 36px icon buttons, smaller input text, 12px base (c46fe10)
- style(companion): bold button labels, smaller buttons and input text (78651b5)
- fix(companion): point Capacitor ios.scheme at the real Xcode scheme (26d282c)
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- perf(search): canonical pooled-fff search path (6e71ab1)
- fix(lint): clear every eslint + clj-kondo finding (dc0af88)
- feat(tui): flatten dialog, footer, and button chrome onto terminal background (3bbf8f8)
- Show authenticated OAuth providers in Router/Models manager (776afc7)
- deps: bump svar to 0.7.77 (claude-opus-5) (54ea9c8)
- Upstream vis config (4d4e34a)
- Move network egress config under jail.network, gated by jail.enabled (20c3e35)
- Fix fold-card savings note breaking intent recording; type levels param (b3aedb4)
- Fold card always reports savings, even a no-op re-fold (b4914e5)
- chore: sync working tree (b1a3ee0)
- fix(companion): point session search client at /v1/sessions/actions/search (ecf9b20)
- fix(sandbox): align config-spec test + docs to jail.enabled rename (off by default) (1e62907)
- Session search: title-first transcript preview across TUI and Companion (7624553)
- Group GitHub Copilot tiers and filter to active variant (#47, #48) (00ef8a9)
- chore: working-tree updates (companion screens, copilot provider) (850cfb3)
- Normalize toggle values to strings; surface config-denial hint in access view (379d5d9)
- chore(deps): bump tree-sitter-language-pack to 1.12.3-blockether.23 (acffb33)
- vis-companion: TS7-compatible capacitor config codegen + build:ios (9458336)
- chore(sandbox): sandbox off by default; config-spec rooted paths + deny-exec + ports; net-probe; docs + repo-wide reformat (82db9d8)
- Fix lint warning in oauth_test and stage pending workspace changes (5ca7503)
- Fixes (0b734ba)
- feat(providers): surface & route authenticated OAuth providers; bound gather pool (403e798)
- Suggest Tailscale IP when pairing a loopback-bound gateway (a60702b)
- feat(streaming): distinct native-call preview phase + svar 0.7.75 (b2488cc)
- fix(streaming): render native tool previews distinctly (b14c1ec)
- fix(tui): scope Codex verbosity to session provider (e4fa8fa)
- chore(deps): bump tree-sitter-language-pack .20 -> .21 (TSX value bindings + arities) (30396f8)
- chore(deps): bump tree-sitter-language-pack to 1.12.3-blockether.20 (1d8a6a2)
- feat(editing): struct_index range/ranges windows + resilient edit-kind resolution (929ff26)
- feat(editing): fold rg into find_files (name+content search); assorted WIP (1f798ce)
- feat(sandbox): per-session Seatbelt jail + gateway MITM egress proxy (6dad934)
- chore(deps): bump svar to 0.7.73 (health-gated connect-blip retry) (39497c6)
- chore: remove committed transcript scratch artifacts (546f44e)
- Fix ForeignObject leak in session_state transcript projection (846a29d)
- feat(transcript): canonical /export dialog with gateway md+html routes (1f090ce)
- feat(transcript): surface python stdout and attachments in transcript (#40) (5bab711)
- fix(env-python): make tool failures catchable in-block (#42) (a0353dd)
- Fix Blockether light theme tab colors and dialog margins (d8d06f7)
- fix(paramiko): drop shared MINA SSHD io-factory so every server negotiates (a4f71b9)
- Render fixes (cf9b434)
- fix(paramiko-shim): self-reap MINA sshd host-side on session close (3b5bbef)
- fix(gateway/bus): treat turn.cancelled as terminal in hydrate! (1e82589)
- fix(channel-tui): declare flatland/ordered dep + align queue-close test (88668e8)
- fix(prompt): gate user-pasted images on model vision + steer PIL fallback (be8cf65)
- deps: bump com.blockether/bridge 0.1.2 -> 0.2.1 (bc7ef6a)
- Fix cat tool to accept all-kwargs spec map with path key (9cfef1a)
- fix(editing): steer append_child/prepend_child used with a NAME locator (781f4bf)
- fix: preserve summary-only printed results (aff9a70)
- deps: bump svar 0.7.69 -> 0.7.70 (transient-message classifier: statusless/wrapper/gRPC transients + mid-stream code casing) (e97085c)
- fix(tui): Linux clipboard OSC 52 fallback + scroll-safe transcript copy (6803f33)
- Remove Piper TTS (speaking) from voice extension (cb60b8e)
- Fix the errors (afe6683)
- wip: in-progress vis changes (3efbfa5)
- chore(deps): bump com.blockether/svar 0.7.66 -> 0.7.67 (catalog-driven Copilot vision) (a057751)
- chore(deps): bump com.blockether/svar 0.7.65 -> 0.7.66 (6e93506)
- Optimizations (c847659)
- Render doc/apropos native cards as authored markdown (5f28638)
- refactor(lint): drop redundant coercions; suppress clj-kondo false positives (62722c4)
- style: blank line between all top-level forms (d6fd30b)
- feat(clojure-format): report which backend formatted each result (4a140c5)
- style: full-project cljfmt reformat (5f81e36)
- fix(tui-magit): make status keybindings faithful to vanilla magit (bd8c1a9)
- fix(clojure-test): relativize fault file paths in repl-mode test output (075d683)
- fix(python-cli): wire caller stdin into CLI context so -c/FILE can read sys.stdin (73d2c5e)
- fix(self-docs): vis_docs both arities return {"pages": [...]} shape (c4bd086)
- Fixes to anchored editing (c9746b6)
- fix(provider): name rejected tool schemas (8b7d869)
- fix(tools): reject nonportable schema roots (836cd50)
- fix(prompt): enforce compact actionable style (9ef8c92)
- perf(tui): drop lazy-mapcat counter atom in list->lines; StringBuilder CLI lists (1f9eb88)
- docs(extensions): prefer native agent tools (c7e167e)
- perf(render): drop per-list counter atoms for pure map-indexed (d1cf761)
- Performance improvements (5857ca8)
- Performance fixes for TUI! (cb2460d)
- Bump lanterna (cf28b89)
- Better error signal for the compiler exceptions (4b96c7c)
- fix(clj-test): honor run_tests :dir so sibling-project tests hit their own nREPL (8cde86a)
- perf(tui): cache last-bubble tail projection; coalesce tab-switch refresh (4b2acd2)
- Performance fixes (8be5edc)
- fix(prompt): resolve guidance and error rendering regressions (9b53851)
- Fixes to rendering (8d80c62)
- feat: refine prompts, errors, and TUI caching (ae55718)
- Stage changes to prompts (72916fe)
- Prompt changes, tui optimizations (ecf8c0e)
- Fixes to highlighting (b4d1c8d)
- Test runner fixes (2b1e8f7)
- Gateway fixes (ad3ff33)
- Update language surface contract (bebfe1c)
- Fixes to prompt and python env (14a0752)
- Optimize prompt (98d2461)
- test: align failing tests with current code (6810dff)
- style: reformat with zprint (.zprint.edn) across src, extensions, test (7eecbe1)
- chore: scrub residual telegram & web-channel mentions from comments and docs (1135b69)
- refactor(gateway): resolve workspace via live-env fallback so root ops work pre-first-turn (bdb475d)
- chore(channels): remove telegram bot channel (503f829)
- fix(gateway): decouple SSE delivery from the turn thread via bounded per-connection queues (0c5fca9)
- fix(transcript): make HTML session export work without channel-web (e472080)
- fix(locks): drop obsolete call-py monitor, bound close!/close-all! turn-lock waits (5ede59c)
- chore(channels): remove web channel and react-native companion (d73b78a)
- refactor(env-python): one session context, one shared engine — pure-JVM renderer, in-context parser (1dea108)
- chore(deps): bump tree-sitter-language-pack to 1.12.3-blockether.18 (48996c1)
- fix(outline): surface the native cause, not opaque "FFI call failed" (35711bb)
- fix(env-python): freeze-proof every GraalPy context + dict-safe ntr results (5bd507d)
- docs: add full security audit (AUDIT.md) (59e4c13)
- feat(loop): self-heal empty model replies via svar 0.7.63 same-model resend (703e764)
- Revert "fix(security): bound gateway JSON request body to 4 MiB (#6)" (dd9899f)
- fix(security): bound gateway JSON request body to 4 MiB (#6) (ada976f)
- fix(security): allowlist markdown link schemes in server render (#2) (eef3124)
- fix(editing): bound nearest-existing-dir climb to allowed roots; drop stale ls test (164ad4b)
- feat(editing): climb missing search paths to nearest existing dir + report missing_paths (b3d9bfd)
- refactor(rg): search paths as named (file OR dir), skip missing (eb0e2fc)
- fix(security): harden credential storage and token comparison (Batch A) (4c63a25)
- fix(python): seed apropos/doc for aliased extension symbols; apropos returns {name: gist} dict; clarify mcp double- vs single-underscore naming (1d55f07)
- chore(deps): update dependencies via antq (de1c707)
- chore(deps): bump com.blockether/fff to 0.10.0-2 (0a98070)
- fix(editing): rg/find resolve paths to nearest existing directory instead of erroring (0cbc9f8)
- fix(clojure): reuse one nREPL session per connection + eval-based (+ 1 1) health check in ctx (74852ac)
- refactor(repl): remove bin/dev launcher and clj_repl references (05f9eba)
- feat(language-surface): aggregate lint findings by path (7b5cbbc)
- fix(loop): normalize svar 0.7 canonical token usage + append-only live tool-code fence (dc04a9a)
- feat(introspection): include session modified time (e855829)
- feat(paramiko): support key generation in shim (86df689)
- fix(channel-tui): preserve account plan quota windows (3e3546d)
- docs(ctx-engine): clarify compact-src docstring (cdf6bfa)
- feat(channel-tui): tint diff fence add/del rows and fix scrollbar flicker (928c43b)
- docs(fold): require full workspace-relative path:line anchors in gists (c158a5b)
- big refactor (be1dbaa)
- feat(python-sandbox): auto-settle deferred tool calls on subscript/len/in (a7584b3)
- feat(python-cli): forward script argv and caller env into vis python sandbox (3c0552d)
- fix(tui): stop slash/file suggestion overlay flicker during live stream (a3cf497)
- fix(tui): ellipsize bubble footer meta line on narrow terminals (cad17ab)
- fix(shim-matplotlib): resolve per-element hex color lists without float() crash (42127aa)
- fix(loop): eliminate boxed-math + recur-primitive warnings in re-entrant park/retry loop (5a6aa57)
- fix(transcript): fence folded-gist body so it renders verbatim (b1f7baf)
- feat(self-docs): render vis_docs op-card as a table (9af4039)
- perf(providers): cache fleet enumeration for footer-frequency reads (#29) (bd82121)
- docs(readme): correct java prereq to 25+ (e8e01f2)
- chore(docs): drop Windows/PowerShell support from docs, readme, and installers (47056f6)
- fix(self-docs): treat blank/absent vis_docs slug as list request (4de0642)
- fix(gateway): parse /v1/events sids as UUIDs and persist cancel stamp (fc79477)
- feat(editing): name the searched directory scope in rg & find_files op-card headlines (3e30c97)
- fix(loop): make the native-tool park re-entrant so nested run_tests keeps its budget (2aceff8)
- fix(compaction): show fold card savings as % of window, not a rising projected level (e5b2776)
- docs(channel-tui): document queue, cancel & Ctrl+C behavior (2673fbf)
- feat(compaction): project next-request % on fold cards and freeze unbounded fold selectors (a8f8351)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-channel-tui
- feat: harden context handling and push notifications (445e449)
- fix: harden gateway compatibility and runtime lifecycle (6906694)
- fix: harden session recovery and provider surfaces (96d7552)
- fix(tui): keep navigator scroll arithmetic primitive (3089113)
- feat: harden queues, tools, and companion (5d773f2)
- fix(queue): images in queued turns render as chips, not raw paths (5c5e4c6)
- perf(companion): cache /v1/router for 5 minutes and prefetch it at connect (90474b8)
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- feat(tui): flatten dialog, footer, and button chrome onto terminal background (3bbf8f8)
- Show authenticated OAuth providers in Router/Models manager (776afc7)
- chore: sync working tree (b1a3ee0)
- Session search: title-first transcript preview across TUI and Companion (7624553)
- Group GitHub Copilot tiers and filter to active variant (#47, #48) (00ef8a9)
- Merge remote-tracking branch 'origin/main' (ecfb8df)
- Normalize toggle values to strings; surface config-denial hint in access view (379d5d9)
- chore(tui): channel-tui dialog/test updates (69e1f77)
- chore(deps): bump tree-sitter-language-pack to 1.12.3-blockether.23 (acffb33)
- chore(sandbox): sandbox off by default; config-spec rooted paths + deny-exec + ports; net-probe; docs + repo-wide reformat (82db9d8)
- Fix lint warning in oauth_test and stage pending workspace changes (5ca7503)
- Fixes (0b734ba)
- feat(providers): surface & route authenticated OAuth providers; bound gather pool (403e798)
- feat(streaming): distinct native-call preview phase + svar 0.7.75 (b2488cc)
- fix(streaming): render native tool previews distinctly (b14c1ec)
- fix(tui): scope Codex verbosity to session provider (e4fa8fa)
- feat(editing): fold rg into find_files (name+content search); assorted WIP (1f798ce)
- feat(sandbox): per-session Seatbelt jail + gateway MITM egress proxy (6dad934)
- Fix ForeignObject leak in session_state transcript projection (846a29d)
- feat(transcript): canonical /export dialog with gateway md+html routes (1f090ce)
- feat(transcript): surface python stdout and attachments in transcript (#40) (5bab711)
- Fix Blockether light theme tab colors and dialog margins (d8d06f7)
- Render fixes (cf9b434)
- fix(channel-tui): restore result-row copy alignment for baked output indent (88a58bf)
- fix(channel-tui): declare flatland/ordered dep + align queue-close test (88668e8)
- fix(prompt): gate user-pasted images on model vision + steer PIL fallback (be8cf65)
- fix(editing): steer append_child/prepend_child used with a NAME locator (781f4bf)
- deps: bump svar 0.7.69 -> 0.7.70 (transient-message classifier: statusless/wrapper/gRPC transients + mid-stream code casing) (e97085c)
- fix(tui): Linux clipboard OSC 52 fallback + scroll-safe transcript copy (6803f33)
- Remove Piper TTS (speaking) from voice extension (cb60b8e)
- Optimizations (c847659)
- refactor(lint): drop redundant coercions; suppress clj-kondo false positives (62722c4)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- fix(tui-magit): make status keybindings faithful to vanilla magit (bd8c1a9)
- fix(clojure-test): relativize fault file paths in repl-mode test output (075d683)
- fix(python-cli): wire caller stdin into CLI context so -c/FILE can read sys.stdin (73d2c5e)
- fix(self-docs): vis_docs both arities return {"pages": [...]} shape (c4bd086)
- perf(tui): drop lazy-mapcat counter atom in list->lines; StringBuilder CLI lists (1f9eb88)
- test(tui): recording proxies reconstruct pre-segmented styled runs (08c3e66)
- Performance improvements (5857ca8)
- perf(tui): single StringBuilder pass in run->sentinel-segment (5ed478b)
- Performance fixes for TUI! (cb2460d)
- perf(tui): halve styled-line paint allocation via sentinel split (64e4d6d)
- perf(tui): skip grapheme array on plain lines in paint-styled-line! (285a07a)
- deps(tui): bump com.blockether/lanterna to 3.1.5-vis.32 (ba40cc2)
- Better error signal for the compiler exceptions (4b96c7c)
- perf(tui): identity-memoize layout height-key vector (5f32d67)
- perf(tui): O(log n) binary-search visible-window for scroll layout (0b01e11)
- perf(tui): replace pass-1 est mapv with primitive transient loop (f64f5df)
- perf(tui): cache last-bubble tail projection; coalesce tab-switch refresh (4b2acd2)
- Performance fixes (8be5edc)
- Fixes to rendering (8d80c62)
- feat: refine prompts, errors, and TUI caching (ae55718)
- Prompt changes, tui optimizations (ecf8c0e)
- Fixes to highlighting (b4d1c8d)
- Test runner fixes (2b1e8f7)
- Gateway fixes (ad3ff33)
- Update language surface contract (bebfe1c)
- Fixes to prompt and python env (14a0752)
- Optimize prompt (98d2461)
- chore: scrub residual telegram & web-channel mentions from comments and docs (1135b69)
- fix(python): seed apropos/doc for aliased extension symbols; apropos returns {name: gist} dict; clarify mcp double- vs single-underscore naming (1d55f07)
- chore(deps): update dependencies via antq (de1c707)
- fix(editing): rg/find resolve paths to nearest existing directory instead of erroring (0cbc9f8)
- fix(clojure): reuse one nREPL session per connection + eval-based (+ 1 1) health check in ctx (74852ac)
- refactor(repl): remove bin/dev launcher and clj_repl references (05f9eba)
- fix(channel-tui): keep the cost/token bubble footer on a cancelled turn that spent tokens (ab7560b)
- fix(channel-tui): expand tabs before markdown wrapping (a1cd5b0)
- fix(channel-tui): preserve account plan quota windows (3e3546d)
- feat(channel-tui): tint diff fence add/del rows and fix scrollbar flicker (928c43b)
- fix(channel-tui): read gateway project fields by string key (aa61779)
- big refactor (be1dbaa)
- fix(tui): wire Esc to clear the pending-sends queue (f147d7b)
- fix(channel-tui): reserve exact inline-image box from real terminal cell size (ca7b942)
- fix(tui): stop slash/file suggestion overlay flicker during live stream (a3cf497)
- fix(tui): ellipsize bubble footer meta line on narrow terminals (cad17ab)
- fix(channel-tui): gate provider-limits poll resolve to cut idle CPU (171abd2)
- perf(providers): cache fleet enumeration for footer-frequency reads (#29) (bd82121)
- docs(channel-tui): document queue, cancel & Ctrl+C behavior (2673fbf)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-foundation-bridge
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- Fixes (0b734ba)
- deps: bump com.blockether/bridge 0.1.2 -> 0.2.1 (bc7ef6a)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to rendering (8d80c62)
- Fixes to highlighting (b4d1c8d)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-foundation-search
- feat: harden queues, tools, and companion (5d773f2)
- feat(tui): flatten dialog, footer, and button chrome onto terminal background (3bbf8f8)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- Bump lanterna (cf28b89)
- Better error signal for the compiler exceptions (4b96c7c)
- Fixes to highlighting (b4d1c8d)
- chore: scrub residual telegram & web-channel mentions from comments and docs (1135b69)
- refactor(repl): remove bin/dev launcher and clj_repl references (05f9eba)
- refactor(foundation-search): drop Exa MCP env toggles from extension registration (6bce7d3)
- big refactor (be1dbaa)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-foundation-voice
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- feat(streaming): distinct native-call preview phase + svar 0.7.75 (b2488cc)
- Remove Piper TTS (speaking) from voice extension (cb60b8e)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- fix(prompt): resolve guidance and error rendering regressions (9b53851)
- Fixes to rendering (8d80c62)
- Fixes to highlighting (b4d1c8d)
- chore: scrub residual telegram & web-channel mentions from comments and docs (1135b69)
- chore(deps): update dependencies via antq (de1c707)
- big refactor (be1dbaa)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-language-clojure
- fix: harden session recovery and provider surfaces (96d7552)
- feat: harden queues, tools, and companion (5d773f2)
- companion: canonical type scale, line-height in the scale, taller session header (f095e60)
- feat(tui): flatten dialog, footer, and button chrome onto terminal background (3bbf8f8)
- Show authenticated OAuth providers in Router/Models manager (776afc7)
- chore(sandbox): sandbox off by default; config-spec rooted paths + deny-exec + ports; net-probe; docs + repo-wide reformat (82db9d8)
- Fixes (0b734ba)
- feat(streaming): distinct native-call preview phase + svar 0.7.75 (b2488cc)
- feat(editing): fold rg into find_files (name+content search); assorted WIP (1f798ce)
- Render fixes (cf9b434)
- fix(editing): steer append_child/prepend_child used with a NAME locator (781f4bf)
- deps: bump svar 0.7.69 -> 0.7.70 (transient-message classifier: statusless/wrapper/gRPC transients + mid-stream code casing) (e97085c)
- Optimizations (c847659)
- refactor(lint): drop redundant coercions; suppress clj-kondo false positives (62722c4)
- style: blank line between all top-level forms (d6fd30b)
- feat(clojure-format): report which backend formatted each result (4a140c5)
- style: full-project cljfmt reformat (5f81e36)
- fix(clojure-test): relativize fault file paths in repl-mode test output (075d683)
- Fixes to anchored editing (c9746b6)
- Performance fixes for TUI! (cb2460d)
- Better error signal for the compiler exceptions (4b96c7c)
- fix(clj-test): honor run_tests :dir so sibling-project tests hit their own nREPL (8cde86a)
- Performance fixes (8be5edc)
- Prompt changes, tui optimizations (ecf8c0e)
- Fixes to highlighting (b4d1c8d)
- Test runner fixes (2b1e8f7)
- Gateway fixes (ad3ff33)
- Update language surface contract (bebfe1c)
- Fixes to prompt and python env (14a0752)
- Optimize prompt (98d2461)
- chore(deps): update dependencies via antq (de1c707)
- fix(editing): rg/find resolve paths to nearest existing directory instead of erroring (0cbc9f8)
- fix(clojure): reuse one nREPL session per connection + eval-based (+ 1 1) health check in ctx (74852ac)
- refactor(repl): remove bin/dev launcher and clj_repl references (05f9eba)
- fix(clojure): fail eval fast on nREPL eval-error, interrupt the eval on timeout (2361ecb)
- test(language-clojure): cover blank snippet defaults (9e398bd)
- fix(language-clojure): ignore blank snippet defaults (f9c9490)
- big refactor (be1dbaa)
- fix(clojure): evict wedged nrepl connection on eval timeout (47fc63e)
- fix(clojure-test-runner): silence framework reporter, structured failure digest (bc84dd9)
- perf(providers): cache fleet enumeration for footer-frequency reads (#29) (bd82121)
- fix(test-runner): pr-str result under pinned print vars to survive truncating nREPL sessions (dfa51f7)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-language-python
- fix: harden session recovery and provider surfaces (96d7552)
- companion: canonical type scale, line-height in the scale, taller session header (f095e60)
- feat(tui): flatten dialog, footer, and button chrome onto terminal background (3bbf8f8)
- Show authenticated OAuth providers in Router/Models manager (776afc7)
- Fixes (0b734ba)
- feat(editing): fold rg into find_files (name+content search); assorted WIP (1f798ce)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-language-typescript-bun
- companion: canonical type scale, line-height in the scale, taller session header (f095e60)
- feat(tui): flatten dialog, footer, and button chrome onto terminal background (3bbf8f8)
- Show authenticated OAuth providers in Router/Models manager (776afc7)
- Fixes (0b734ba)
- feat(editing): fold rg into find_files (name+content search); assorted WIP (1f798ce)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-persistance-sqlite
- feat: harden context handling and push notifications (445e449)
- fix(runtime): rescue provider auth failures (2b51f29)
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- chore: sync working tree (b1a3ee0)
- Normalize toggle values to strings; surface config-denial hint in access view (379d5d9)
- chore(deps): bump tree-sitter-language-pack to 1.12.3-blockether.23 (acffb33)
- chore(sandbox): sandbox off by default; config-spec rooted paths + deny-exec + ports; net-probe; docs + repo-wide reformat (82db9d8)
- Fix lint warning in oauth_test and stage pending workspace changes (5ca7503)
- feat(editing): fold rg into find_files (name+content search); assorted WIP (1f798ce)
- feat(sandbox): per-session Seatbelt jail + gateway MITM egress proxy (6dad934)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- Gateway fixes (ad3ff33)
- Fixes to prompt and python env (14a0752)
- chore: scrub residual telegram & web-channel mentions from comments and docs (1135b69)
- fix(security): harden credential storage and token comparison (Batch A) (4c63a25)
- fix(python): seed apropos/doc for aliased extension symbols; apropos returns {name: gist} dict; clarify mcp double- vs single-underscore naming (1d55f07)
- chore(deps): update dependencies via antq (de1c707)
- big refactor (be1dbaa)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-provider-anthropic
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- Fix lint warning in oauth_test and stage pending workspace changes (5ca7503)
- Fixes (0b734ba)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- chore(deps): update dependencies via antq (de1c707)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-provider-github-copilot
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- chore: sync working tree (b1a3ee0)
- Group GitHub Copilot tiers and filter to active variant (#47, #48) (00ef8a9)
- chore: working-tree updates (companion screens, copilot provider) (850cfb3)
- Fixes (0b734ba)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- chore(deps): update dependencies via antq (de1c707)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-provider-openai-codex
- feat(providers): per-gateway providers, gateway-side auth, and session model pinning (ae734a6)
- Normalize toggle values to strings; surface config-denial hint in access view (379d5d9)
- Fix lint warning in oauth_test and stage pending workspace changes (5ca7503)
- Fixes (0b734ba)
- feat(streaming): distinct native-call preview phase + svar 0.7.75 (b2488cc)
- style: blank line between all top-level forms (d6fd30b)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- chore(deps): update dependencies via antq (de1c707)
- big refactor (be1dbaa)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-provider-standard
- fix(ci): restore local provider presets (9ecddf6)
- Fixes (0b734ba)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- Optimize prompt (98d2461)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-provider-zai
- Fixes (0b734ba)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- chore(deps): update dependencies via antq (de1c707)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
com.blockether/vis-workspace-rift
- feat(editing): fold rg into find_files (name+content search); assorted WIP (1f798ce)
- fix(tui): Linux clipboard OSC 52 fallback + scroll-safe transcript copy (6803f33)
- style: full-project cljfmt reformat (5f81e36)
- Fixes to highlighting (b4d1c8d)
- big refactor (be1dbaa)
- fix(channel-tui): let Ctrl+C quit while a cancel is already in flight (f5d09ea)
Full Changelog: v0.1.4...v0.1.5