Skip to content

v0.1.39

Choose a tag to compare

@github-actions github-actions released this 16 Aug 21:41
· 46 commits to main since this release

What's Changed

  • fix(shell): keep the output a pty child printed just before it exited (c162148)
  • fix(shell): stop a pty child inheriting the parent's descriptors (da26caf)
  • docs(docs): regenerate the spel skill from spel 0.9.28 (7aac609)
  • fix(ci): track the clj-kondo configs imported from dependencies (5685929)
  • chore(release): v0.1.39 (fea04e0)
  • fix(companion): read the artifact overlay after its bytes arrive (3f3288f)
  • build(ci): build the macOS asset on a hosted runner, never a self-hosted one (12775d5)
  • feat(build): let native-image size its own builder heap, and measure it (4314130)
  • fix(companion): give the image viewer one Save, in the band beside the close (6c07f93)
  • fix(companion): strip settings band sentences and close a column's last group (7c7eebf)
  • fix(ci): make the hosted macOS fallback fit the free runner (fb7927c)
  • fix(companion): raise the annotator composer above the keyboard (2141a57)
  • feat(build): ship a beta track on free runners, not the mac builder (4430c74)
  • fix(companion): reconnect a dark machine off All, in the background (1273b10)
  • feat(build): stamp every native runtime with the commit that built it (c2abf4c)
  • fix(cli): resolve sandbox PIL colours per mode and replace drawn ink (52a215b)
  • fix(sandbox): answer two bands for an 'LA' image, as Pillow does (29fb1d4)
  • docs(companion): record TestFlight build 4319 in the app changelog (3808060)
  • fix(companion): brand the launch screen and name the Android channel (8088f81)
  • fix(companion): reopen a session where the reader stopped reading (b5eb54d)
  • fix(sandbox): read a paste mask's alpha band, not its blue channel (1187947)
  • fix(companion): redraw the Android launcher and notification icons from the iOS master (a30ceb8)
  • fix(companion): ask the sessions list for one page when nothing moved (1a9f510)
  • fix(companion): tag Android alerts so the badge can clear (fe18740)
  • fix(sandbox): address a fresh attachment in the block that made it (ed87779)
  • docs(skills): regenerate the spel skill from spel 0.9.27 (13c6f6f)
  • feat(companion): badge the icon with the alerts still waiting (666fa4b)
  • fix(companion): put an opened note's Save in its header band (cd2ba07)
  • fix(companion): wear the name's step on a status dot (0ff682b)
  • fix(companion): frame the destructive confirm around its own cost (0aa7d76)
  • feat(tui): hold a spoken conversation instead of a speech toggle (3338a1d)
  • fix(companion): keep a project folded once you have folded it (581ed57)
  • fix(companion): unbox the voice bands and drop the Off route (55cb6ff)
  • docs(docs): plan making every capability an extension of one contract (6ac932d)
  • refactor(contract): make the Python host an object, not a dict (137d006)
  • fix(companion): strip the MCP band and land its verb as the list's last row (b71ab6b)
  • feat(contract): give the host contract its own package (4cdcae1)
  • fix(companion): make the providers action amber and unpin the blocked banner (41e8c3a)
  • fix(companion): make lone settings verbs full width and align status dots (db90933)
  • fix(companion): anchor the sessions list across every fleet arrival (012df17)
  • fix(companion): keep a live session following once the reader arrives (1e79fb4)
  • fix(companion): one verb in notifications, and demote nested panel bands (94024bc)
  • feat(extensions): gate the Clojure host surface with a contract (82a3220)
  • fix(companion): restore the machines verb and quiet the providers one (705a520)
  • fix(companion): strip the providers band to its title and a short verb (6f0a5c0)
  • refactor(loop): drop the native-tool leftovers from the one-tool wire (4647db9)
  • fix(companion): rule the machine panel stack and cut its band prose (4cd3594)
  • feat(run-tests): give a test run ten minutes in every pack (f01b6e9)
  • feat(sandbox): give a Python block five minutes before the backstop (04be7c8)
  • docs(python): write the package README example in the formatter's own shape (2d96a8b)
  • feat(gateway): flag a session parked on a human across the fleet (ec56d83)
  • ci(python): verify the package on the floor the engine's GraalPy sets (d85c63f)
  • fix(python): dispatch the outside shell from the contract's own vocabulary (67d8ffc)
  • feat(gateway): fold every window a fold_session key names (a9cf4de)
  • perf(companion): fill pulled-in history sixteen segments a frame, not two (19ecbe5)
  • docs(companion): record TestFlight build 4280 in the app changelog (bad2fb1)
  • fix(companion): drop the trace a command turn never wrote (ce5caf1)
  • fix(companion): disclose each machine's settings under its own row (936e3be)
  • fix(companion): keep a reader's place when the keyboard comes and goes (6b8787d)
  • fix(tui): repoint the table card test at the display's new home (dc0cc78)
  • fix(shell): confirm an exited child's silence before reporting it (20f56cc)
  • feat(gateway): reclaim the SQLite freelist once a fortnight (9e2d5c2)
  • perf(companion): paint only the turns a session is showing (e5ec156)
  • fix(gateway): drop a retired column SQLite was refusing to drop (2c4e59e)
  • feat(shell): raise the wait budget and cap to thirty minutes (04225ae)
  • perf(gateway): stop storing what a reader can re-derive (77587a1)
  • feat(python): ship the extension API as the vis-agent package (93e379f)
  • chore(repo): drop the TODO whose every item shipped (81bc8f9)
  • docs(cli): close item 1 and record the residues nothing schedules (155bb80)
  • test(bench): make the redaction test independent of the caller's environment (8b83864)
  • docs(cli): record the TODO state after the doc and ranker work (27af056)
  • chore(repo): reformat every Clojure and Python source in place (2770d1c)
  • test(ci): pin the two loaded-runner flakes without a stopwatch (65b83f9)
  • test(ci): own the espeak and pty-log preconditions the runners lack (886b34b)
  • docs(docs): regenerate the spel agent skill for 0.9.26 (0f7446c)
  • docs(cli): name the keys a test run answers with (98cda90)
  • fix(ci): make the test suite green on both runners (0403732)
  • feat(companion): give providers the machine row and its slide (21ec0d4)
  • feat(cli): give a helper's docstring a gist, a page and a search hit (851ac83)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • docs(voice): trim manifest and JNI notes, drop the finished plan (6ff7b06)
  • perf(companion): make a long live session scroll without stalling (e43f74c)
  • feat(voice): carry every Piper voice at the highest level published (6183aff)
  • docs(docs): show how a tool page renders and how apropos previews it (ebf0441)
  • docs(cli): give every code verb in the core prompt its call shape (b2a63f6)
  • fix(cli): answer the ask a model types, not the one the page assumes (84140ba)
  • fix(persistance): bound the SQLite -wal sidecar with journal_size_limit (e0aa375)
  • fix(cli): saturate the three ranked fields together, not one by one (ae1f3f4)
  • fix(voice): hand sherpa a map the shipped binary can walk (24ea302)
  • chore(docs): drop the session-id marker from the commit trailer (898dc0e)
  • fix(companion): rank a machine only where there is a fleet (f55919e)
  • fix(companion): release a pin the app itself had to break (7670b69)
  • docs(voice): say why the progress callback is a deftype (297b36c)
  • docs(cli): record what the tool pages answer today (e39420f)
  • test(cli): follow the auto-title order to the Alibaba plan (191551d)
  • fix(cli): stamp the call proto for a tool that takes no arguments (4192065)
  • chore(tui): reformat the command suggestion namespace (1029649)
  • chore(cli): reformat three namespaces the formatter had drifted from (63cac8c)
  • feat(gateway): keep the human's star on the gateway, not the device (da626a2)
  • feat(voice): recover from a failed engine without restarting Vis (736fcb8)
  • feat(cli): teach every tool page its call line and required keys (4eb4926)
  • perf(companion): stop the hidden sessions list polling the fleet (110112c)
  • fix(cli): sweep every unbounded ~/.vis directory, not just the logs (4f611f7)
  • feat(companion): swipe the image gallery instead of pressing arrows (d9956d0)
  • perf(companion): stop a keystroke re-rendering the hidden sessions list (7dfd4e9)
  • feat(companion): choose where a reply is spoken, and in which voice (13e72b9)
  • fix(cli): reclaim the sandbox's sockets, the third door onto a descriptor (ca68b23)
  • chore(lint): clear every ruff and reflection warning in the tree (f5ed3ed)
  • refactor(cli): reclaim every shim's host handles in one runtime registry (d483ce2)
  • feat(voice): render THIRD_PARTY_MODELS.md from the model manifest (12608da)
  • fix(cli): answer a bare apropos() with the listing's own shape (0e63625)
  • chore(commits): minimal conventional commits that name their session (4841cc9)
  • feat(grep): exclude globs drop files from the content sweep (9004114)
  • A dropped PIL image gives its raster back (49d20b6)
  • The ASR archive names its direction (b584a7f)
  • The voice assets are named for what they are (b1f1599)
  • A voice belongs to the machine, and the app can bring one (ee7adde)
  • Fix iOS keyboard-safe companion modals (46ed794)
  • Namespace skill slash commands (c947be7)
  • Keep the inherited trace whole when the handover lands late (ef344cc)
  • Give pocket-tts a voice: three clips we make, and any clip anyone brings (faaad44)
  • apropos: answer a row per hit, not a bare first line (5e3ad66)
  • Own the pocket-tts ONNX export: vendor the MIT layer, drop the clone (9be9db4)
  • Export pocket-tts ourselves and publish it in the assets pack (dce9af6)
  • A message keeps its ticker while its own POST is still on the wire (6d9db56)
  • A parked run's push asks the question, not which session (e5d640d)
  • A parked run's push says Action needed, and the body is the question (d05986a)
  • Rank documents on a stamped corpus instead of rebuilding it per call (d12f581)
  • The session heading keeps its row when the notch pushes it down (ba1c325)
  • Ship only what we make: assets-only pack, espeak from the system (2f9e2c1)
  • Companion: a machine row is one line, and its address is a swipe verb (957f370)
  • bm25: extract the ranker and make it fast and shareable (1d36ba9)
  • Re-judge the live-to-persisted handover on every reconcile tick (bcf95fc)
  • Probe the router fleet in parallel so the phone's Providers screen paints (7193aa3)
  • apropos: rank with BM25F instead of ANDing terms (84b53c5)
  • Ship the voice assets pack and add Ryan as the first opt-in voice (a939800)
  • Speak locally: a licence-carrying asset manifest, Piper voices, pocket-tts opt-in (19c5655)
  • Speak over HTTP: /v1/sessions/:sid/speech, its job stream and features.speech (a586424)
  • voice: one registry for both directions, keyed by transcribe or synthesize (40c9d24)
  • Primitive math in the balancer's hot loops, and no boxed math left in the tree (7c40a20)
  • Fetch only this platform's sherpa-onnx native, and plan speech into voice.clj (4442a2d)
  • balance: seat a repaired delimiter where the replaced text had it (08142bd)
  • voice: take upstream sherpa-onnx v1.13.5 and delete the ONNX Runtime pin (f99eaee)
  • providers: add the Alibaba Coding Plan and Token Plan endpoints (25f540f)
  • Settle the pocket-tts gate and the shipped voice list in PLAN.md (4e98cbd)
  • Plan speech output as an engine registry on upstream sherpa-onnx (54a0353)
  • vis-agent: run the checkout it sits in when nothing is installed (d7af0c8)
  • format: the delimiter repair is add-only there too (5edf444)
  • cli: finish the vis -> vis-agent rename in text that tells you what to run (ec7ce29)
  • Delimiter repair adds only: never delete a closer the edit wrote (28636b4)
  • Run what is installed, never the checkout the command sits in (b92a16d)
  • Re-read a swiped row's offset every frame it claims to be open (6bea3d6)
  • Remove the runtime selector: what is installed is what runs (cf3ffd7)
  • Refuse a delimiter repair that moves or retypes what the caller wrote (53ca5ef)
  • Land every TUI duration and id badge on one right edge (7a8be54)
  • Remove the dev runtime: vis-agent installs and runs under ~/.vis (b7c4b29)
  • Paint the call duration on every TUI result, not just carded ones (7ac776b)
  • Record Companion TestFlight build 4179 in the app changelog (f324ec5)
  • Repair an edit's delimiters from the file, never from the fragment (1c55f10)
  • Ask which address a machine uses on the machine's own line (258f80c)
  • Close the gap the removed duration marker left in the marker tables (f4636de)
  • The TUI tells how long each tool call took, as the companion always has (4c98c74)
  • A warm-up owns the failure of a load nobody is waiting for (3deb6f0)
  • Keep the direct push in the magit push transient (issue #144) (ec6eaaa)
  • Companion: the model picker's verbs stand in its band, and the sheet stops at its content (d6e9309)
  • Fix #145 in the app's last carrier: an answer promoted out of a content-less row (fa2a29c)
  • Fix #145: paint a settled answer exactly once, in the TUI and the companion (c70b464)
  • Every editor write is atomic, and a refused struct_patch batch is rolled back (12d2ad3)
  • A helper's return settles its tool calls, so the caller never gets a thunk (2be4b07)
  • The gateway keeps "no AI provider" typed, so the TUI opens the dialog (eefc71c)
  • release: update release notes for v0.1.38 (6b2f66d)

Package changes

com.blockether/vis

  • fix(shell): keep the output a pty child printed just before it exited (c162148)
  • fix(shell): stop a pty child inheriting the parent's descriptors (da26caf)
  • docs(docs): regenerate the spel skill from spel 0.9.28 (7aac609)
  • fix(ci): track the clj-kondo configs imported from dependencies (5685929)
  • chore(release): v0.1.39 (fea04e0)
  • fix(companion): read the artifact overlay after its bytes arrive (3f3288f)
  • build(ci): build the macOS asset on a hosted runner, never a self-hosted one (12775d5)
  • feat(build): let native-image size its own builder heap, and measure it (4314130)
  • fix(companion): give the image viewer one Save, in the band beside the close (6c07f93)
  • fix(companion): strip settings band sentences and close a column's last group (7c7eebf)
  • fix(ci): make the hosted macOS fallback fit the free runner (fb7927c)
  • fix(companion): raise the annotator composer above the keyboard (2141a57)
  • feat(build): ship a beta track on free runners, not the mac builder (4430c74)
  • fix(companion): reconnect a dark machine off All, in the background (1273b10)
  • feat(build): stamp every native runtime with the commit that built it (c2abf4c)
  • fix(cli): resolve sandbox PIL colours per mode and replace drawn ink (52a215b)
  • fix(sandbox): answer two bands for an 'LA' image, as Pillow does (29fb1d4)
  • docs(companion): record TestFlight build 4319 in the app changelog (3808060)
  • fix(companion): brand the launch screen and name the Android channel (8088f81)
  • fix(companion): reopen a session where the reader stopped reading (b5eb54d)
  • fix(sandbox): read a paste mask's alpha band, not its blue channel (1187947)
  • fix(companion): redraw the Android launcher and notification icons from the iOS master (a30ceb8)
  • fix(companion): ask the sessions list for one page when nothing moved (1a9f510)
  • fix(companion): tag Android alerts so the badge can clear (fe18740)
  • fix(sandbox): address a fresh attachment in the block that made it (ed87779)
  • docs(skills): regenerate the spel skill from spel 0.9.27 (13c6f6f)
  • feat(companion): badge the icon with the alerts still waiting (666fa4b)
  • fix(companion): put an opened note's Save in its header band (cd2ba07)
  • fix(companion): wear the name's step on a status dot (0ff682b)
  • fix(companion): frame the destructive confirm around its own cost (0aa7d76)
  • feat(tui): hold a spoken conversation instead of a speech toggle (3338a1d)
  • fix(companion): keep a project folded once you have folded it (581ed57)
  • fix(companion): unbox the voice bands and drop the Off route (55cb6ff)
  • docs(docs): plan making every capability an extension of one contract (6ac932d)
  • refactor(contract): make the Python host an object, not a dict (137d006)
  • fix(companion): strip the MCP band and land its verb as the list's last row (b71ab6b)
  • feat(contract): give the host contract its own package (4cdcae1)
  • fix(companion): make the providers action amber and unpin the blocked banner (41e8c3a)
  • fix(companion): make lone settings verbs full width and align status dots (db90933)
  • fix(companion): anchor the sessions list across every fleet arrival (012df17)
  • fix(companion): keep a live session following once the reader arrives (1e79fb4)
  • fix(companion): one verb in notifications, and demote nested panel bands (94024bc)
  • feat(extensions): gate the Clojure host surface with a contract (82a3220)
  • fix(companion): restore the machines verb and quiet the providers one (705a520)
  • fix(companion): strip the providers band to its title and a short verb (6f0a5c0)
  • refactor(loop): drop the native-tool leftovers from the one-tool wire (4647db9)
  • fix(companion): rule the machine panel stack and cut its band prose (4cd3594)
  • feat(run-tests): give a test run ten minutes in every pack (f01b6e9)
  • feat(sandbox): give a Python block five minutes before the backstop (04be7c8)
  • docs(python): write the package README example in the formatter's own shape (2d96a8b)
  • feat(gateway): flag a session parked on a human across the fleet (ec56d83)
  • ci(python): verify the package on the floor the engine's GraalPy sets (d85c63f)
  • fix(python): dispatch the outside shell from the contract's own vocabulary (67d8ffc)
  • feat(gateway): fold every window a fold_session key names (a9cf4de)
  • perf(companion): fill pulled-in history sixteen segments a frame, not two (19ecbe5)
  • docs(companion): record TestFlight build 4280 in the app changelog (bad2fb1)
  • fix(companion): drop the trace a command turn never wrote (ce5caf1)
  • fix(companion): disclose each machine's settings under its own row (936e3be)
  • fix(companion): keep a reader's place when the keyboard comes and goes (6b8787d)
  • fix(tui): repoint the table card test at the display's new home (dc0cc78)
  • fix(shell): confirm an exited child's silence before reporting it (20f56cc)
  • perf(companion): paint only the turns a session is showing (e5ec156)
  • feat(shell): raise the wait budget and cap to thirty minutes (04225ae)
  • perf(gateway): stop storing what a reader can re-derive (77587a1)
  • feat(python): ship the extension API as the vis-agent package (93e379f)
  • chore(repo): drop the TODO whose every item shipped (81bc8f9)
  • docs(cli): close item 1 and record the residues nothing schedules (155bb80)
  • test(bench): make the redaction test independent of the caller's environment (8b83864)
  • docs(cli): record the TODO state after the doc and ranker work (27af056)
  • chore(repo): reformat every Clojure and Python source in place (2770d1c)
  • test(ci): pin the two loaded-runner flakes without a stopwatch (65b83f9)
  • test(ci): own the espeak and pty-log preconditions the runners lack (886b34b)
  • docs(docs): regenerate the spel agent skill for 0.9.26 (0f7446c)
  • docs(cli): name the keys a test run answers with (98cda90)
  • fix(ci): make the test suite green on both runners (0403732)
  • feat(companion): give providers the machine row and its slide (21ec0d4)
  • feat(cli): give a helper's docstring a gist, a page and a search hit (851ac83)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • docs(voice): trim manifest and JNI notes, drop the finished plan (6ff7b06)
  • perf(companion): make a long live session scroll without stalling (e43f74c)
  • feat(voice): carry every Piper voice at the highest level published (6183aff)
  • docs(docs): show how a tool page renders and how apropos previews it (ebf0441)
  • docs(cli): give every code verb in the core prompt its call shape (b2a63f6)
  • fix(cli): answer the ask a model types, not the one the page assumes (84140ba)
  • fix(cli): saturate the three ranked fields together, not one by one (ae1f3f4)
  • fix(voice): hand sherpa a map the shipped binary can walk (24ea302)
  • chore(docs): drop the session-id marker from the commit trailer (898dc0e)
  • fix(companion): rank a machine only where there is a fleet (f55919e)
  • fix(companion): release a pin the app itself had to break (7670b69)
  • docs(voice): say why the progress callback is a deftype (297b36c)
  • docs(cli): record what the tool pages answer today (e39420f)
  • test(cli): follow the auto-title order to the Alibaba plan (191551d)
  • fix(cli): stamp the call proto for a tool that takes no arguments (4192065)
  • chore(cli): reformat three namespaces the formatter had drifted from (63cac8c)
  • feat(gateway): keep the human's star on the gateway, not the device (da626a2)
  • feat(voice): recover from a failed engine without restarting Vis (736fcb8)
  • feat(cli): teach every tool page its call line and required keys (4eb4926)
  • perf(companion): stop the hidden sessions list polling the fleet (110112c)
  • fix(cli): sweep every unbounded ~/.vis directory, not just the logs (4f611f7)
  • feat(companion): swipe the image gallery instead of pressing arrows (d9956d0)
  • perf(companion): stop a keystroke re-rendering the hidden sessions list (7dfd4e9)
  • feat(companion): choose where a reply is spoken, and in which voice (13e72b9)
  • fix(cli): reclaim the sandbox's sockets, the third door onto a descriptor (ca68b23)
  • chore(lint): clear every ruff and reflection warning in the tree (f5ed3ed)
  • refactor(cli): reclaim every shim's host handles in one runtime registry (d483ce2)
  • feat(voice): render THIRD_PARTY_MODELS.md from the model manifest (12608da)
  • fix(cli): answer a bare apropos() with the listing's own shape (0e63625)
  • chore(commits): minimal conventional commits that name their session (4841cc9)
  • feat(grep): exclude globs drop files from the content sweep (9004114)
  • A dropped PIL image gives its raster back (49d20b6)
  • The ASR archive names its direction (b584a7f)
  • The voice assets are named for what they are (b1f1599)
  • A voice belongs to the machine, and the app can bring one (ee7adde)
  • Fix iOS keyboard-safe companion modals (46ed794)
  • Namespace skill slash commands (c947be7)
  • Keep the inherited trace whole when the handover lands late (ef344cc)
  • Give pocket-tts a voice: three clips we make, and any clip anyone brings (faaad44)
  • apropos: answer a row per hit, not a bare first line (5e3ad66)
  • Own the pocket-tts ONNX export: vendor the MIT layer, drop the clone (9be9db4)
  • Export pocket-tts ourselves and publish it in the assets pack (dce9af6)
  • A message keeps its ticker while its own POST is still on the wire (6d9db56)
  • A parked run's push asks the question, not which session (e5d640d)
  • A parked run's push says Action needed, and the body is the question (d05986a)
  • Rank documents on a stamped corpus instead of rebuilding it per call (d12f581)
  • The session heading keeps its row when the notch pushes it down (ba1c325)
  • Ship only what we make: assets-only pack, espeak from the system (2f9e2c1)
  • Companion: a machine row is one line, and its address is a swipe verb (957f370)
  • bm25: extract the ranker and make it fast and shareable (1d36ba9)
  • Re-judge the live-to-persisted handover on every reconcile tick (bcf95fc)
  • Probe the router fleet in parallel so the phone's Providers screen paints (7193aa3)
  • apropos: rank with BM25F instead of ANDing terms (84b53c5)
  • Ship the voice assets pack and add Ryan as the first opt-in voice (a939800)
  • Speak locally: a licence-carrying asset manifest, Piper voices, pocket-tts opt-in (19c5655)
  • Speak over HTTP: /v1/sessions/:sid/speech, its job stream and features.speech (a586424)
  • voice: one registry for both directions, keyed by transcribe or synthesize (40c9d24)
  • Primitive math in the balancer's hot loops, and no boxed math left in the tree (7c40a20)
  • Fetch only this platform's sherpa-onnx native, and plan speech into voice.clj (4442a2d)
  • balance: seat a repaired delimiter where the replaced text had it (08142bd)
  • voice: take upstream sherpa-onnx v1.13.5 and delete the ONNX Runtime pin (f99eaee)
  • providers: add the Alibaba Coding Plan and Token Plan endpoints (25f540f)
  • Settle the pocket-tts gate and the shipped voice list in PLAN.md (4e98cbd)
  • Plan speech output as an engine registry on upstream sherpa-onnx (54a0353)
  • vis-agent: run the checkout it sits in when nothing is installed (d7af0c8)
  • format: the delimiter repair is add-only there too (5edf444)
  • cli: finish the vis -> vis-agent rename in text that tells you what to run (ec7ce29)
  • Delimiter repair adds only: never delete a closer the edit wrote (28636b4)
  • Run what is installed, never the checkout the command sits in (b92a16d)
  • Re-read a swiped row's offset every frame it claims to be open (6bea3d6)
  • Remove the runtime selector: what is installed is what runs (cf3ffd7)
  • Refuse a delimiter repair that moves or retypes what the caller wrote (53ca5ef)
  • Remove the dev runtime: vis-agent installs and runs under ~/.vis (b7c4b29)
  • Record Companion TestFlight build 4179 in the app changelog (f324ec5)
  • Repair an edit's delimiters from the file, never from the fragment (1c55f10)
  • Ask which address a machine uses on the machine's own line (258f80c)
  • A warm-up owns the failure of a load nobody is waiting for (3deb6f0)
  • Companion: the model picker's verbs stand in its band, and the sheet stops at its content (d6e9309)
  • Fix #145 in the app's last carrier: an answer promoted out of a content-less row (fa2a29c)
  • Fix #145: paint a settled answer exactly once, in the TUI and the companion (c70b464)
  • Every editor write is atomic, and a refused struct_patch batch is rolled back (12d2ad3)
  • A helper's return settles its tool calls, so the caller never gets a thunk (2be4b07)
  • The gateway keeps "no AI provider" typed, so the TUI opens the dialog (eefc71c)
  • release: update release notes for v0.1.38 (6b2f66d)

com.blockether/vis-channel-tui

  • feat(tui): hold a spoken conversation instead of a speech toggle (3338a1d)
  • feat(gateway): flag a session parked on a human across the fleet (ec56d83)
  • fix(tui): repoint the table card test at the display's new home (dc0cc78)
  • perf(gateway): stop storing what a reader can re-derive (77587a1)
  • test(ci): pin the two loaded-runner flakes without a stopwatch (65b83f9)
  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • chore(tui): reformat the command suggestion namespace (1029649)
  • Namespace skill slash commands (c947be7)
  • Primitive math in the balancer's hot loops, and no boxed math left in the tree (7c40a20)
  • cli: finish the vis -> vis-agent rename in text that tells you what to run (ec7ce29)
  • Land every TUI duration and id badge on one right edge (7a8be54)
  • Paint the call duration on every TUI result, not just carded ones (7ac776b)
  • Close the gap the removed duration marker left in the marker tables (f4636de)
  • The TUI tells how long each tool call took, as the companion always has (4c98c74)
  • Keep the direct push in the magit push transient (issue #144) (ec6eaaa)
  • Fix #145: paint a settled answer exactly once, in the TUI and the companion (c70b464)
  • The gateway keeps "no AI provider" typed, so the TUI opens the dialog (eefc71c)

com.blockether/vis-foundation-bridge

  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • feat(cli): teach every tool page its call line and required keys (4eb4926)

com.blockether/vis-foundation-search

  • refactor(loop): drop the native-tool leftovers from the one-tool wire (4647db9)
  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • feat(cli): teach every tool page its call line and required keys (4eb4926)

com.blockether/vis-foundation-voice

  • feat(tui): hold a spoken conversation instead of a speech toggle (3338a1d)
  • test(ci): own the espeak and pty-log preconditions the runners lack (886b34b)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • docs(voice): trim manifest and JNI notes, drop the finished plan (6ff7b06)
  • feat(voice): carry every Piper voice at the highest level published (6183aff)
  • fix(voice): hand sherpa a map the shipped binary can walk (24ea302)
  • feat(voice): recover from a failed engine without restarting Vis (736fcb8)
  • chore(lint): clear every ruff and reflection warning in the tree (f5ed3ed)
  • feat(voice): render THIRD_PARTY_MODELS.md from the model manifest (12608da)
  • The ASR archive names its direction (b584a7f)
  • The voice assets are named for what they are (b1f1599)
  • Give pocket-tts a voice: three clips we make, and any clip anyone brings (faaad44)
  • Own the pocket-tts ONNX export: vendor the MIT layer, drop the clone (9be9db4)
  • Export pocket-tts ourselves and publish it in the assets pack (dce9af6)
  • Ship only what we make: assets-only pack, espeak from the system (2f9e2c1)
  • Ship the voice assets pack and add Ryan as the first opt-in voice (a939800)
  • Speak locally: a licence-carrying asset manifest, Piper voices, pocket-tts opt-in (19c5655)
  • voice: one registry for both directions, keyed by transcribe or synthesize (40c9d24)
  • Fetch only this platform's sherpa-onnx native, and plan speech into voice.clj (4442a2d)
  • voice: take upstream sherpa-onnx v1.13.5 and delete the ONNX Runtime pin (f99eaee)

com.blockether/vis-language-clojure

  • refactor(loop): drop the native-tool leftovers from the one-tool wire (4647db9)
  • feat(run-tests): give a test run ten minutes in every pack (f01b6e9)
  • feat(shell): raise the wait budget and cap to thirty minutes (04225ae)
  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • balance: seat a repaired delimiter where the replaced text had it (08142bd)
  • format: the delimiter repair is add-only there too (5edf444)
  • Delimiter repair adds only: never delete a closer the edit wrote (28636b4)
  • Refuse a delimiter repair that moves or retypes what the caller wrote (53ca5ef)
  • Repair an edit's delimiters from the file, never from the fragment (1c55f10)

com.blockether/vis-language-python

  • feat(run-tests): give a test run ten minutes in every pack (f01b6e9)
  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)

com.blockether/vis-language-typescript-bun

  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)

com.blockether/vis-persistance-sqlite

  • fix(sandbox): address a fresh attachment in the block that made it (ed87779)
  • feat(gateway): reclaim the SQLite freelist once a fortnight (9e2d5c2)
  • fix(gateway): drop a retired column SQLite was refusing to drop (2c4e59e)
  • perf(gateway): stop storing what a reader can re-derive (77587a1)
  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • fix(persistance): bound the SQLite -wal sidecar with journal_size_limit (e0aa375)
  • feat(gateway): keep the human's star on the gateway, not the device (da626a2)
  • Primitive math in the balancer's hot loops, and no boxed math left in the tree (7c40a20)
  • cli: finish the vis -> vis-agent rename in text that tells you what to run (ec7ce29)

com.blockether/vis-provider-alibaba

  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • providers: add the Alibaba Coding Plan and Token Plan endpoints (25f540f)

com.blockether/vis-provider-anthropic

  • fix(ci): make the test suite green on both runners (0403732)
  • Primitive math in the balancer's hot loops, and no boxed math left in the tree (7c40a20)

com.blockether/vis-provider-github-copilot

  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • Primitive math in the balancer's hot loops, and no boxed math left in the tree (7c40a20)

com.blockether/vis-provider-openai-codex

  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)
  • Primitive math in the balancer's hot loops, and no boxed math left in the tree (7c40a20)
  • cli: finish the vis -> vis-agent rename in text that tells you what to run (ec7ce29)

com.blockether/vis-provider-opencode-go

  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)

com.blockether/vis-provider-openrouter

  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)

com.blockether/vis-provider-standard

  • fix(ci): make the test suite green on both runners (0403732)

com.blockether/vis-provider-zai

  • fix(ci): make the test suite green on both runners (0403732)
  • docs(repo): delete banner rules and labels that repeat the code (39eeb17)

Full Changelog: v0.1.38...v0.1.39