From ada798fa511084ef724d65fc680e182bf5b846fb Mon Sep 17 00:00:00 2001 From: devswha Date: Thu, 29 Oct 2026 17:29:42 +0900 Subject: [PATCH 1/4] chore(release): 0.4.20 Co-authored-by: sisyphus-dev-ai --- CHANGELOG.md | 632 +++++++++++++++++- changelog.d/agent-capabilities-leftovers.md | 4 - changelog.d/agent-install-catalog.md | 5 - changelog.d/attach-hold-resize-redraw.md | 5 - changelog.d/black-theme.md | 2 - changelog.d/browser-lane-empty-evidence.md | 5 - changelog.d/browser-script-deadline.md | 4 - changelog.d/build-test-followups.md | 7 - changelog.d/chat-client-followups.md | 7 - changelog.d/chat-follow-layout-shift.md | 5 - changelog.d/chat-list-number-indent.md | 4 - changelog.d/chat-run-fold-first-part.md | 3 - changelog.d/chat-send-draft.md | 4 - changelog.d/chat-sent-waiting.md | 5 - changelog.d/chat-tool-paths-unc-select-all.md | 5 - changelog.d/check-invalidated-run-reason.md | 3 - changelog.d/ci-runner-host-caches.md | 3 - changelog.d/ci-runs-tsx-tests.md | 4 - changelog.d/claude-attach-followups.md | 7 - .../claude-background-subagent-rest.md | 5 - changelog.d/claude-bash-mode.md | 4 - changelog.d/claude-branch-followups.md | 3 - changelog.d/claude-branch-transcript.md | 4 - .../claude-command-beside-diff-panel.md | 3 - changelog.d/claude-model-pill-after-model.md | 5 - changelog.d/claude-model-pill-older-record.md | 4 - .../claude-scratch-length-under-load.md | 3 - changelog.d/claude-sdk-host-tool-results.md | 5 - changelog.d/claude-sdk-senpi-notices.md | 5 - changelog.d/claude-session-switch-queued.md | 6 - changelog.d/claude-store-followups.md | 8 - changelog.d/claude-trailing-backslash.md | 4 - changelog.d/claude-ultracode-switch.md | 19 - .../claude-words-before-question-card.md | 6 - changelog.d/codex-footer-model-live-screen.md | 4 - .../codex-loaded-threads-lock-table.md | 4 - changelog.d/command-folder-links.md | 4 - .../commands-scan-off-server-thread.md | 5 - .../conversation-unavailable-diagnostics.md | 3 - changelog.d/copilot-identity-retry.md | 3 - changelog.d/copilot-refresh-retention.md | 4 - .../copilot-stable-process-identity.md | 3 - changelog.d/diff-find-tall-row.md | 3 - changelog.d/done-dot-codex-late-completion.md | 3 - changelog.d/faster-tab-switch.md | 5 - changelog.d/features-before-snapshot.md | 5 - changelog.d/file-access-threads.md | 5 - changelog.d/file-pool-test-hang.md | 4 - changelog.d/finish-index-followups.md | 3 - .../hermes-skills-server-localappdata.md | 4 - .../incremental-omo-gjc-transcripts.md | 5 - changelog.d/installer-no-global-node.md | 7 - .../integration-flake-copilot-switch-back.md | 3 - ...gration-flake-first-message-replacement.md | 4 - .../integration-flake-opencode-tab-switch.md | 4 - changelog.d/integration-followups.md | 6 - changelog.d/ios-app-hangul-composition.md | 4 - changelog.d/ios-hide-form-accessory-bar.md | 4 - changelog.d/legacy-send-unconfirmed.md | 7 - changelog.d/letta-native-chat.md | 5 - changelog.d/mac-app-1455-followups.md | 12 - changelog.d/machine-events-burst.md | 11 - changelog.d/machines-move-own-roster.md | 4 - changelog.d/omo-custom-outcome-holder.md | 4 - changelog.d/omo-pending-question-hyphen.md | 3 - changelog.d/omp-approval-composer-shapes.md | 7 - changelog.d/omp-ask-markdown.md | 5 - changelog.d/omp-blob-pictures-mac-windows.md | 4 - changelog.d/omp-prompt-followups.md | 14 - .../omp-startup-wait-extension-paths.md | 6 - changelog.d/omp-tool-approval-card.md | 4 - changelog.d/opencode-skill-resize-attach.md | 3 - changelog.d/opencode-standalone-skills.md | 4 - changelog.d/own-ovis-port-url.md | 4 - changelog.d/own-ovis-update-token-scope.md | 3 - changelog.d/pair-code-once.md | 4 - changelog.d/pi-ask-user-card.md | 6 - changelog.d/pi-branch-return-outcome.md | 3 - changelog.d/pi-receipt-earlier-same-text.md | 3 - changelog.d/pi-transcript-confirmation.md | 3 - changelog.d/plugin-lifecycle-lock.md | 5 - changelog.d/prompt-ownership-followups.md | 10 - changelog.d/push-repair-failure-reason.md | 7 - changelog.d/push-retired-endpoint-checks.md | 8 - changelog.d/reclaim-check-attach-grid.md | 5 - .../release-guard-remote-bundle-published.md | 3 - changelog.d/runner-cache-wait-test-load.md | 5 - changelog.d/saved-pc-recovery-followups.md | 3 - changelog.d/scratch-folder-open-then-check.md | 4 - changelog.d/seen-late-read-epoch.md | 3 - changelog.d/seen-old-epochs.md | 4 - changelog.d/settings-history-stale-anchor.md | 4 - changelog.d/sidebar-filter-focus-edges.md | 4 - changelog.d/sidebar-token-hidden-snapshots.md | 4 - changelog.d/sidebar-token-hide-operands.md | 5 - changelog.d/site-beta-android-wait.md | 6 - changelog.d/tab-strip-wheel-scroll.md | 3 - .../terminal-arrows-clicks-deterministic.md | 5 - changelog.d/terminal-bundled-mono.md | 4 - changelog.d/terminal-hangul-line-gap.md | 5 - changelog.d/terminal-hangul-seam.md | 3 - changelog.d/terminal-powerline-late-font.md | 4 - .../terminal-sync-output-regression.md | 4 - changelog.d/this-device-badge-one-line.md | 3 - changelog.d/timing-flakes-under-load.md | 8 - changelog.d/todo-run-focus-raw-attempts.md | 4 - changelog.d/typecheck-gc.md | 4 - changelog.d/usage-login-restart-lock.md | 4 - changelog.d/usage-sign-in-again.md | 4 - changelog.d/voice-provider-field-limit.md | 3 - changelog.d/watch-pane-commands-refused.md | 4 - changelog.d/watch-pane-files-refused.md | 4 - changelog.d/watch-worktree-list-refused.md | 5 - changelog.d/windows-app-update-followups.md | 8 - changelog.d/windows-app-update-old-server.md | 6 - .../windows-app-update-outlived-server.md | 10 - changelog.d/windows-home-lookups.md | 3 - changelog.d/windows-interactive-start.md | 10 - .../windows-stop-tree-test-pid-reuse.md | 5 - .../windows-terminal-qa-merge-checkout.md | 4 - changelog.d/windows-terminal-qa-workflow.md | 6 - changelog.d/xterm-6-whole-frames.md | 5 - changelog.d/xterm-build-cache-race.md | 4 - herdr-plugin.toml | 2 +- package.json | 2 +- release-summaries.json | 94 +++ shared/machines.ts | 2 +- 127 files changed, 728 insertions(+), 600 deletions(-) delete mode 100644 changelog.d/agent-capabilities-leftovers.md delete mode 100644 changelog.d/agent-install-catalog.md delete mode 100644 changelog.d/attach-hold-resize-redraw.md delete mode 100644 changelog.d/black-theme.md delete mode 100644 changelog.d/browser-lane-empty-evidence.md delete mode 100644 changelog.d/browser-script-deadline.md delete mode 100644 changelog.d/build-test-followups.md delete mode 100644 changelog.d/chat-client-followups.md delete mode 100644 changelog.d/chat-follow-layout-shift.md delete mode 100644 changelog.d/chat-list-number-indent.md delete mode 100644 changelog.d/chat-run-fold-first-part.md delete mode 100644 changelog.d/chat-send-draft.md delete mode 100644 changelog.d/chat-sent-waiting.md delete mode 100644 changelog.d/chat-tool-paths-unc-select-all.md delete mode 100644 changelog.d/check-invalidated-run-reason.md delete mode 100644 changelog.d/ci-runner-host-caches.md delete mode 100644 changelog.d/ci-runs-tsx-tests.md delete mode 100644 changelog.d/claude-attach-followups.md delete mode 100644 changelog.d/claude-background-subagent-rest.md delete mode 100644 changelog.d/claude-bash-mode.md delete mode 100644 changelog.d/claude-branch-followups.md delete mode 100644 changelog.d/claude-branch-transcript.md delete mode 100644 changelog.d/claude-command-beside-diff-panel.md delete mode 100644 changelog.d/claude-model-pill-after-model.md delete mode 100644 changelog.d/claude-model-pill-older-record.md delete mode 100644 changelog.d/claude-scratch-length-under-load.md delete mode 100644 changelog.d/claude-sdk-host-tool-results.md delete mode 100644 changelog.d/claude-sdk-senpi-notices.md delete mode 100644 changelog.d/claude-session-switch-queued.md delete mode 100644 changelog.d/claude-store-followups.md delete mode 100644 changelog.d/claude-trailing-backslash.md delete mode 100644 changelog.d/claude-ultracode-switch.md delete mode 100644 changelog.d/claude-words-before-question-card.md delete mode 100644 changelog.d/codex-footer-model-live-screen.md delete mode 100644 changelog.d/codex-loaded-threads-lock-table.md delete mode 100644 changelog.d/command-folder-links.md delete mode 100644 changelog.d/commands-scan-off-server-thread.md delete mode 100644 changelog.d/conversation-unavailable-diagnostics.md delete mode 100644 changelog.d/copilot-identity-retry.md delete mode 100644 changelog.d/copilot-refresh-retention.md delete mode 100644 changelog.d/copilot-stable-process-identity.md delete mode 100644 changelog.d/diff-find-tall-row.md delete mode 100644 changelog.d/done-dot-codex-late-completion.md delete mode 100644 changelog.d/faster-tab-switch.md delete mode 100644 changelog.d/features-before-snapshot.md delete mode 100644 changelog.d/file-access-threads.md delete mode 100644 changelog.d/file-pool-test-hang.md delete mode 100644 changelog.d/finish-index-followups.md delete mode 100644 changelog.d/hermes-skills-server-localappdata.md delete mode 100644 changelog.d/incremental-omo-gjc-transcripts.md delete mode 100644 changelog.d/installer-no-global-node.md delete mode 100644 changelog.d/integration-flake-copilot-switch-back.md delete mode 100644 changelog.d/integration-flake-first-message-replacement.md delete mode 100644 changelog.d/integration-flake-opencode-tab-switch.md delete mode 100644 changelog.d/integration-followups.md delete mode 100644 changelog.d/ios-app-hangul-composition.md delete mode 100644 changelog.d/ios-hide-form-accessory-bar.md delete mode 100644 changelog.d/legacy-send-unconfirmed.md delete mode 100644 changelog.d/letta-native-chat.md delete mode 100644 changelog.d/mac-app-1455-followups.md delete mode 100644 changelog.d/machine-events-burst.md delete mode 100644 changelog.d/machines-move-own-roster.md delete mode 100644 changelog.d/omo-custom-outcome-holder.md delete mode 100644 changelog.d/omo-pending-question-hyphen.md delete mode 100644 changelog.d/omp-approval-composer-shapes.md delete mode 100644 changelog.d/omp-ask-markdown.md delete mode 100644 changelog.d/omp-blob-pictures-mac-windows.md delete mode 100644 changelog.d/omp-prompt-followups.md delete mode 100644 changelog.d/omp-startup-wait-extension-paths.md delete mode 100644 changelog.d/omp-tool-approval-card.md delete mode 100644 changelog.d/opencode-skill-resize-attach.md delete mode 100644 changelog.d/opencode-standalone-skills.md delete mode 100644 changelog.d/own-ovis-port-url.md delete mode 100644 changelog.d/own-ovis-update-token-scope.md delete mode 100644 changelog.d/pair-code-once.md delete mode 100644 changelog.d/pi-ask-user-card.md delete mode 100644 changelog.d/pi-branch-return-outcome.md delete mode 100644 changelog.d/pi-receipt-earlier-same-text.md delete mode 100644 changelog.d/pi-transcript-confirmation.md delete mode 100644 changelog.d/plugin-lifecycle-lock.md delete mode 100644 changelog.d/prompt-ownership-followups.md delete mode 100644 changelog.d/push-repair-failure-reason.md delete mode 100644 changelog.d/push-retired-endpoint-checks.md delete mode 100644 changelog.d/reclaim-check-attach-grid.md delete mode 100644 changelog.d/release-guard-remote-bundle-published.md delete mode 100644 changelog.d/runner-cache-wait-test-load.md delete mode 100644 changelog.d/saved-pc-recovery-followups.md delete mode 100644 changelog.d/scratch-folder-open-then-check.md delete mode 100644 changelog.d/seen-late-read-epoch.md delete mode 100644 changelog.d/seen-old-epochs.md delete mode 100644 changelog.d/settings-history-stale-anchor.md delete mode 100644 changelog.d/sidebar-filter-focus-edges.md delete mode 100644 changelog.d/sidebar-token-hidden-snapshots.md delete mode 100644 changelog.d/sidebar-token-hide-operands.md delete mode 100644 changelog.d/site-beta-android-wait.md delete mode 100644 changelog.d/tab-strip-wheel-scroll.md delete mode 100644 changelog.d/terminal-arrows-clicks-deterministic.md delete mode 100644 changelog.d/terminal-bundled-mono.md delete mode 100644 changelog.d/terminal-hangul-line-gap.md delete mode 100644 changelog.d/terminal-hangul-seam.md delete mode 100644 changelog.d/terminal-powerline-late-font.md delete mode 100644 changelog.d/terminal-sync-output-regression.md delete mode 100644 changelog.d/this-device-badge-one-line.md delete mode 100644 changelog.d/timing-flakes-under-load.md delete mode 100644 changelog.d/todo-run-focus-raw-attempts.md delete mode 100644 changelog.d/typecheck-gc.md delete mode 100644 changelog.d/usage-login-restart-lock.md delete mode 100644 changelog.d/usage-sign-in-again.md delete mode 100644 changelog.d/voice-provider-field-limit.md delete mode 100644 changelog.d/watch-pane-commands-refused.md delete mode 100644 changelog.d/watch-pane-files-refused.md delete mode 100644 changelog.d/watch-worktree-list-refused.md delete mode 100644 changelog.d/windows-app-update-followups.md delete mode 100644 changelog.d/windows-app-update-old-server.md delete mode 100644 changelog.d/windows-app-update-outlived-server.md delete mode 100644 changelog.d/windows-home-lookups.md delete mode 100644 changelog.d/windows-interactive-start.md delete mode 100644 changelog.d/windows-stop-tree-test-pid-reuse.md delete mode 100644 changelog.d/windows-terminal-qa-merge-checkout.md delete mode 100644 changelog.d/windows-terminal-qa-workflow.md delete mode 100644 changelog.d/xterm-6-whole-frames.md delete mode 100644 changelog.d/xterm-build-cache-race.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f800fedee..9b278b4daf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,635 @@ between releases do not reach them. Remote-PC runtime bundles are versioned sepa ## [Unreleased] +## [0.4.20] - 2026-10-29 + +### Added +- The server lists every agent Ovis can install, with each vendor's own install command for the + PC's operating system and whether the agent is installed there, at which version + (`GET /api/agent-catalog`, also for remote PCs). Nothing is installed yet: the install flow + builds on it. + ([#2326](https://github.com/devswha/ovis/pull/2326)) +- Add Black, with pure black backgrounds and the Tokyo Night accent colors. + ([#1911](https://github.com/devswha/ovis/pull/1911) by @jjsteffen) +- When Chat does not send a message because Claude Code's input box already holds a draft, the + note now has a **Send it** button beside **Clear it and send**. It sends the draft as Claude + Code holds it, and your Chat message stays in the box. + ([#2301](https://github.com/devswha/ovis/pull/2301) by @jpcarranza94) +- Chat shows a Claude Code bash-mode command (`!`) as one card: the command, then what it + printed, with the output of a failed command in red. Before, Chat showed the raw + `` and `` tags in two messages. + ([#2176](https://github.com/devswha/ovis/pull/2176) by @jpcarranza94) +- New workspace and New tab have an Ultracode switch for Claude Code, on one line under Model and + Effort, so a session can start with Ultracode on at any effort level + (`--settings '{"ultracode":true}'`, which a Windows PC passes as a small settings file in + `%LOCALAPPDATA%\ovis\claude-settings`). It needs Claude Code 2.1.284 or later, a model with xhigh + and dynamic workflows on. Reported by @fivetaku, whose #2282 suggested the compact line under the + effort level. + ([#2266](https://github.com/devswha/ovis/pull/2266)) +- Claude Code's `/effort` card has a Turn Ultracode on or Turn Ultracode off row where Tab, the + default key, flips the switch: it switches Ultracode for this session and keeps the effort level. + ([#2266](https://github.com/devswha/ovis/pull/2266)) +- Chat shows a Letta Code pane's conversation, read from Letta's own transcript, when herdr's Letta + integration reports it and Letta's own record names the same conversation; otherwise the + terminal's text stays. Letta writes a turn only when it ends, so while it works or waits for you, + Chat shows the live terminal. + ([#2312](https://github.com/devswha/ovis/pull/2312)) +- The `ask_user` form of the `@eko24ive/pi-ask` pi package shows as a chat card and is answered + from the chat, one question per step, once the web UI's pi extension is installed with + `bun scripts/install-pi-integration.ts`. The answer goes to pi-ask through its own events, + never as typed keys; without the extension the form stays in Terminal (#1202). Reported by + @chobijaeyu. + ([#2218](https://github.com/devswha/ovis/pull/2218)) +- An expired Claude or Codex account in Subscription usage has a **Sign in again** button, in Settings and in the + usage popover: it opens the official sign-in in a terminal tab for that same account, replacing + its expired sign-in instead of adding a new account. + ([#2309](https://github.com/devswha/ovis/pull/2309)) + +### Changed +- A message sent from Chat shows at once as your own bubble, faded, until the agent writes it as a + turn, so the chat is never blank between Send and the agent's turn. A small clock joins it only + when the agent has not taken it after 5 seconds. A command (`/cost`, `! ls`) gets no bubble, since + it never comes back as that message, and a bubble whose turn has not come within a minute goes. + ([#2270](https://github.com/devswha/ovis/pull/2270) by @CharleoYang) +- New workspace and New tab no longer list `ultracode` among Claude Code's effort levels; the PC + still accepts `--effort ultracode` from other clients. + ([#2266](https://github.com/devswha/ovis/pull/2266)) +- Switching tabs is faster: a tab's terminal takes input about 100 ms sooner. The bridge passes an + attach's screen on as soon as herdr draws its text, instead of holding every attach 100 ms. + The hold stays for an attach that shows no text yet, one that was resized while it started, and + a pane another web bridge held, so herdr's refusal is still never shown. + ([#2255](https://github.com/devswha/ovis/pull/2255)) +- A long OMO or GJC chat refreshes faster while its agent works: each update now parses only the + records the agent added since the last one, as OMP, Claude Code and Codex chats already do, + instead of the whole running task again. Based on + [#1634](https://github.com/devswha/ovis/pull/1634) by @Yoonwoo-Ha. + ([#2291](https://github.com/devswha/ovis/pull/2291)) +- The Beta page on ovis.sh tells Android testers, in all four of its languages, to open the + opt-in link in Chrome on the phone rather than inside another app, that **You are a tester** + means they are in, to check that the Play Store app's profile is the same account, and that + Google Play takes a few hours after they join the group, so an app that is not found right + after joining is worth trying again later. + ([#2076](https://github.com/devswha/ovis/pull/2076)) +- The terminal draws its Latin text in the bundled JetBrains Mono (regular and bold) on every device, + so Ovis for Mac, Safari (the installed app) and Chrome on the same Mac show the same font, row height + and number of rows. A font chosen in Settings still takes its place. + ([#2272](https://github.com/devswha/ovis/pull/2272)) + +### Fixed +- A terminal resized while it attaches no longer shows its first screen at the old size, or takes + input before the program has the new size. The bridge now waits for herdr's redraw at the + terminal's current size, also after a resize back to the size it started at, for up to a + second. + ([#2324](https://github.com/devswha/ovis/pull/2324)) +- A folded work block no longer opens again when hidden reasoning before it joins the same run of + work (#2111). + ([#2240](https://github.com/devswha/ovis/pull/2240)) +- A chat message sent to a PC whose server cannot confirm messages and does not name its herdr + now stays in Recover unsent text after a reload, instead of being lost with the page (#2172). + ([#2240](https://github.com/devswha/ovis/pull/2240)) +- A diagonal trackpad swipe over an overflowing tab strip is left to the browser, so the strip + no longer moves against the swipe's sideways motion (#2103). + ([#2240](https://github.com/devswha/ovis/pull/2240)) +- Chat keeps following new output to the end when part of the transcript folds on its own: a turn + settling at the end, or a block above the view folding while the view still glides to the end. + Before, the list holding the rows in place read as the reader scrolling up: following stopped + mid-transcript and **New messages** showed. + ([#2117](https://github.com/devswha/ovis/pull/2117)) +- The numbers of a numbered list in the chat are no longer cut off on the left with a wide Chat font + such as a monospace one, or once a list reaches 10 or 100: the indent grows with the Chat font + and the widest number. + ([#2096](https://github.com/devswha/ovis/pull/2096)) +- A chat work block you folded no longer opens again when the words before its tools join it, as + when a later Codex record marks them commentary or a blank commentary is filled in. + ([#2098](https://github.com/devswha/ovis/pull/2098)) +- A chat copy that reaches past the chat, such as Select All, keeps a tool card's whole file paths + instead of the short labels read from the pane's folder. + ([#2195](https://github.com/devswha/ovis/pull/2195)) +- A pane on a UNC folder written with forward slashes (`//server/share/app`) shows its chat tool + card paths as written, as it already did for `\\server\share\app`. + ([#2195](https://github.com/devswha/ovis/pull/2195)) +- A message queued for a `claude attach` pane waits for the conversation of the job it opened, as it + does for any Claude Code pane, instead of going wherever the pane ends up. + ([#2119](https://github.com/devswha/ovis/pull/2119)) +- Chat follows a `claude attach ` pane whose name is followed by debug options or + `--setting-sources`, as Claude Code reads it. + ([#2119](https://github.com/devswha/ovis/pull/2119)) +- A `/resume` of a background session no longer reads that job's state without a size limit, nor + waits on a FIFO put in its place. + ([#2119](https://github.com/devswha/ovis/pull/2119)) +- A Claude Code pane whose turn has ended no longer reads as working while a background subagent it + started works on: Claude Code keeps its busy title spinner up for the subagent, which herdr reads + as work. The pane now waits on that work (BG), as it does when the subagent is quiet, so the chat + no longer shows "Working…" with a Stop button under the finished answer. (#2069) + ([#2072](https://github.com/devswha/ovis/pull/2072) by @Noobear) +- After Claude Code's `/branch`, Chat takes a transcript as the branch only from its own first message, + and keeps to the branch file it checked when another project holds a file of the same id. + ([#2126](https://github.com/devswha/ovis/pull/2126)) +- After Claude Code's `/branch`, Chat follows the branch Claude went on in and shows its replies, + also when Herdr still reports the session the branch was copied from. Reported by @Hyd3-14 in + [#2020](https://github.com/devswha/ovis/issues/2020). + ([#2099](https://github.com/devswha/ovis/pull/2099)) +- A Claude skill or command sent from Chat that asks a question while Claude's fullscreen diff + panel is shown now waits on that question in its receipt, as it does without the panel. + ([#2199](https://github.com/devswha/ovis/pull/2199)) +- After `/model` or `/effort` in a Claude Code pane, the composer's model pill shows the new model + and effort as soon as Claude Code confirms the change, not after the next answer. A model name + printed in a form that does not map back to one model id keeps the old pill until that answer. + Thanks to @jpcarranza94 for the report and the list of forms. + ([#2305](https://github.com/devswha/ovis/pull/2305)) +- In a Claude Code pane, the composer's model pill and effort no longer go back to an older model + when many records with no answer (bash-mode commands, a long tool output) follow the answer or + the `/model` / `/effort` change that set them. + ([#2319](https://github.com/devswha/ovis/pull/2319)) +- Large files opened from Claude Code's scratch folder keep their size (and download progress) + when many are fetched at once, instead of some arriving without a length. + ([#2317](https://github.com/devswha/ovis/pull/2317)) +- Chat no longer shows an OmO tool's output as a big message from you when OmO runs Claude Code + through its SDK (a `Tool result (mcp__custom-tools__eval, id=…):` bubble between work blocks). + The output now folds into the work block as that call's result, and the call no longer counts as + failed while OmO runs it. A message you sent along while the tools ran still shows as yours. + ([#2310](https://github.com/devswha/ovis/pull/2310)) +- Chat no longer shows OmO's own notices as messages from you when OmO runs Claude Code through its + SDK: reminders, monitor events, recalled memory notes, goal continuations and the history a new + session replays stay hidden, like Claude Code's own reminders. A background task that ended shows + as its task card, and a team member's message as a message from another session. + ([#2322](https://github.com/devswha/ovis/pull/2322)) +- A message queued for a Claude Code conversation is no longer typed into another one when + `/clear`, `/resume` or a `claude attach` job switches the pane's session while the message is + being sent: the session is checked again right before the paste, and once the paste is in, an + Enter is pressed only while the conversation can still be told. Otherwise the message is held + before the paste, or left marked uncertain without its Enter. + ([#2318](https://github.com/devswha/ovis/pull/2318)) +- After Claude Code's `/branch`, Chat follows the branch's continuation in the branch's own project + instead of a file of the same id in another project, and reads a transcript's records however + their keys are spelled or spaced. + ([#2241](https://github.com/devswha/ovis/pull/2241)) +- A `claude attach ` pane with a debug value given apart from its option (`-d api,hooks`, + `--debug api`) keeps its terminal: Claude Code then looks no name up. + ([#2241](https://github.com/devswha/ovis/pull/2241)) +- A message queued for a Claude Code conversation is held, not sent, once the conversation in the + pane can no longer be told (its PID record or its job's state cannot be read). + ([#2241](https://github.com/devswha/ovis/pull/2241)) +- A Chat or queued message to Claude Code that ends in a backslash is now sent. Before, Claude + Code read the backslash and the Enter after it as a new line, and the message stayed in its + input box. + ([#2278](https://github.com/devswha/ovis/pull/2278) by @jpcarranza94) +- Claude Code's `/effort` card now shows while Ultracode is on, at max where Claude Code offers no + Ultracode, and in panes narrower than 70 columns down to about 45, where the slider was left to + the terminal before. A pane of about 44 columns or fewer still leaves it there, as Claude Code + cuts the level names. + ([#2266](https://github.com/devswha/ovis/pull/2266)) +- Chat shows what Claude wrote right before a question card, read from the terminal, while the card + waits. Claude Code 2.1.311 saves those words to its session file only with the answer, so the card + lacked the context the terminal showed above the question. Words whose start is above the + terminal's screen are left to the terminal, and once Claude's own record of the turn arrives the + chat shows that instead. Reported by @Xelanor. + ([#2217](https://github.com/devswha/ovis/pull/2217)) +- The message box no longer names an older model before an agent's first message when its terminal + is scrolled up, or was cleared, above an earlier Codex or Claude frame: the model is read from the + live screen only, and none is named while the terminal is scrolled into its history. + ([#2163](https://github.com/devswha/ovis/pull/2163)) +- A Codex pane that resumed another folder's conversation through the picker is no longer bound to + it while another loaded conversation could be the one it shows: on a busy Linux PC one read of + the kernel's lock table could leave a loaded conversation out. + ([#2101](https://github.com/devswha/ovis/pull/2101)) +- Listing a pane's slash commands no longer stops the whole server while its skill and command + folders sit on a slow filesystem (a Windows folder mounted into a container, a network share): + the scan runs on the file threads, so terminals, typed input and other requests keep answering + while it reads. Thanks to @PayrollFuchs for the report and the measurements (#2254). + ([#2311](https://github.com/devswha/ovis/pull/2311)) +- Copilot Chat retries a failed process lookup once and revalidates log continuity after temporary + descriptor read errors, without restoring stale or revoked session evidence. + ([#2283](https://github.com/devswha/ovis/pull/2283) by @YuuuXie) +- Copilot Chat keeps its messages while retrying a failed transcript page read when the same + conversation is still verified, instead of briefly showing the terminal fallback. + ([#2068](https://github.com/devswha/ovis/pull/2068) by @YuuuXie) +- A failed read of the gap between Chat pages no longer discards the messages already displayed. + ([#2068](https://github.com/devswha/ovis/pull/2068) by @YuuuXie) +- Copilot conversation ownership uses the kernel's stable process birth, so clock corrections no + longer reset a verified binding or make a previously denied fallback eligible again. + ([#2293](https://github.com/devswha/ovis/pull/2293) by @YuuuXie) +- Find in a diff now brings the match itself into view on a wrapped line taller than the screen, + such as a long line on a phone, instead of the line's middle, which could leave the match below. + ([#2156](https://github.com/devswha/ovis/pull/2156)) +- A Codex pane's DONE dot now clears when you read the answer in Chat even if Codex recorded the + turn's completion after the chat first loaded the answer. Before, it stayed until the next finish. + ([#2136](https://github.com/devswha/ovis/pull/2136)) +- A message sent from Chat right after the page reconnects (after a server restart, or while the PC is + busy) no longer fails with "this PC has not said yet what it supports": the server now says what it + supports as soon as the connection opens, instead of only with the pane list, which can take seconds + to read from herdr or fail. Older servers keep the previous behaviour. + ([#2268](https://github.com/devswha/ovis/pull/2268)) +- Opening, previewing or looking up a file on a slow or stalled disk (a network share, a large + rendered page) no longer freezes every terminal and request: the file routes read the disk on a + few background threads, and answer 503 to try again when those are busy or the disk does not + answer in time. + ([#2256](https://github.com/devswha/ovis/pull/2256)) +- On Windows, Hermes skills show in the command menu again when `%LOCALAPPDATA%` is redirected: Ovis + cannot read a Windows pane's environment, and now looks in the server's `%LOCALAPPDATA%\hermes`, as + it already did for Hermes transcripts, instead of `\AppData\Local\hermes`. + ([#2316](https://github.com/devswha/ovis/pull/2316)) +- The installer no longer links the Node it installs into `~/.local/bin`, where it went before the + Node of your own projects. Once Ovis runs this release, running the installer again removes a link + it made earlier and says so: if that link was the only `node` your shells had, install your own + Node to keep using `node` outside Ovis. + Terminals that run on the Node fallback, and updates from Settings, use the right runtime even + when herdr's PATH starts with an older Node (reported by @wafe). + ([#2100](https://github.com/devswha/ovis/pull/2100)) +- Sending an `@skill` to OpenCode no longer types a second space after the skill when the pane redraws + blank while Ovis waits for Tab's result. + ([#2239](https://github.com/devswha/ovis/pull/2239)) +- On Windows, Hermes transcripts, session history and skills are found under `%LOCALAPPDATA%\hermes`, + where Hermes 0.21.5 keeps them (a store an earlier Hermes left in `%USERPROFILE%\.hermes` is still + read), and agent stores are looked up under USERPROFILE even when HOME is set for Git or Emacs. + ([#2239](https://github.com/devswha/ovis/pull/2239)) +- Korean typed in the terminal in the iOS app now reaches the pane as whole syllables (안녕). + Before, each jamo went out on its own (ㅇㅏㄴㄴㅕㅇ) because the app's web view does not say + "Safari" in its user agent. Safari and the Home Screen app already worked. + ([#2307](https://github.com/devswha/ovis/pull/2307)) +- The iOS app no longer shows WebKit's form bar (the up and down arrows and the check mark) over + the keyboard, so only Ovis's own key bar sits above it and the page keeps that row of the + screen. + ([#2109](https://github.com/devswha/ovis/pull/2109)) +- A message sent to a PC whose Ovis is too old to confirm messages is no longer treated as delivered: + the composer, Send now on a held copy and the held queue's Send now keep its text as a + "Not confirmed" row to copy or discard, instead of dropping it. + ([#2164](https://github.com/devswha/ovis/pull/2164)) +- A terminal command sent from Chat right after a pane opens now opens the terminal view even when + the terminal had not loaded the pane's command list yet, and a chat shown again draws its + "Ran in terminal" rows at once instead of as plain messages first. + ([#2164](https://github.com/devswha/ovis/pull/2164)) +- Ovis for Mac takes the installer only over HTTPS from ovis.sh or herdrweb.dev, reads the phone + address only from this Mac's own server, and draws the QR code only for Tailscale's `.ts.net` + HTTPS address. + ([#2116](https://github.com/devswha/ovis/pull/2116)) +- Ovis for Mac makes the phone address with the Ovis release that runs now, not the one first + installed, and shows Tailscale's answer when it fails. + ([#2116](https://github.com/devswha/ovis/pull/2116)) +- Remove in Ovis for Mac stops at a step that fails (herdr's plugin list included) and shows why, + and takes the phone address off Tailscale even when the server is down. + ([#2116](https://github.com/devswha/ovis/pull/2116)) +- Start in Ovis for Mac no longer adds a login item for herdr set up from a terminal; it runs herdr + for this login only. + ([#2116](https://github.com/devswha/ovis/pull/2116)) +- Ovis for Mac moves herdr's log to `herdr-server.log.1` once it passes 10 MB, when the app opens + or starts herdr, and its refresh button has a VoiceOver label. + ([#2116](https://github.com/devswha/ovis/pull/2116)) +- The sidebar no longer goes stale for about three seconds when many agents change status at + once. A burst of more than five status changes closed the browser's event stream, which then + reconnected and read the whole roster again, and a finish in between rang no sound and showed + no drop-in on the page. The stream now lets a browser fall up to 4 MiB behind, beside the one + large roster it may be reading, before ending it, and every browser's stream together holds at + most 32 MiB for those that fell behind, so stalled devices can no longer fill the server's memory. + ([#2260](https://github.com/devswha/ovis/pull/2260)) +- A PC set up at another SSH address no longer shows or saves the roster of the address it left once + it moves there. When the new address's roster waits for that server to prove it is the one + answering, the PC's card has no panes until it does, and then shows that address's own. + ([#2181](https://github.com/devswha/ovis/pull/2181)) +- A command sent to a custom OmO (one whose launcher does not name omo) keeps its row in Chat after + the turn ends: the row follows the OmO process that holds the session, as a queued message does, + instead of the bundled Claude SDK process that exits with each turn. + ([#2186](https://github.com/devswha/ovis/pull/2186)) +- A question OmO 5.1.48 asks without waiting for the answer shows in the chat as its question card + with its options again, instead of a "Waiting for input" card offering only Enter and Esc. + ([#2090](https://github.com/devswha/ovis/pull/2090)) +- omp's tool approval card now also shows when omp's composer is not the default status band: a + box (`composer.shape: box`), the Claude Code, Pi, borderless, rule, field and rail shapes, any + status-line preset, and the ascii symbols. omp's Ask card shows under the rule, field and rail + shapes too. + ([#2245](https://github.com/devswha/ovis/pull/2245)) +- An omp card no longer shows, and an answer sends no key, while omp is stopped behind its shell + (Ctrl+Z, or a suspended job): herdr still names the pane omp, but the shell holds the input. + ([#2245](https://github.com/devswha/ovis/pull/2245)) +- An omp Ask card now shows the question and its options in the agent's own Markdown (bold, code, + links, lists, a fenced block), and a question omp cuts at four rows in full. The card takes the + text from the session's open ask call only when it matches the menu on screen; otherwise it + shows the screen's text as before, and the answer keys still come from the terminal's menu. + ([#2220](https://github.com/devswha/ovis/pull/2220)) +- Chat shows omp's pictures from its blob store on macOS and Windows too, not only on Linux: the + bridge opens a blob through the store directory it holds open, so a link or a directory swapped + in above it can never stand in for the store. + ([#2114](https://github.com/devswha/ovis/pull/2114)) +- An omp started from its npm package (bunx or npx run `dist/cli.js` with bun) shows its approval + card in Chat again; the card stayed hidden and the answer had to be given in the terminal (#2280). + ([#2320](https://github.com/devswha/ovis/pull/2320)) +- An omp Ask question with a Mermaid diagram, or with options that would read alike on the card, + shows as omp draws it, so the card never shows a diagram in place of the code or two identical + rows (#2233). + ([#2320](https://github.com/devswha/ovis/pull/2320)) +- A prompt card's typed answer no longer picks one of two rows that look alike across scripts + (Cyrillic `о` beside Latin `o`), and a typed row number picks its row even when its name looks + like another row's. Commas or spaces alone on a multiple choice are the typed text, not an empty + answer (#2233). + ([#2320](https://github.com/devswha/ovis/pull/2320)) +- Chat messages sent to a starting omp now also wait for herdr's integration when omp loads it + from the project's `.omp/extensions`, an `-e`/`--extension`/`--hook` file, or the agent directory + `PI_CODING_AGENT_DIR`, `PI_PROFILE` or `PI_CONFIG_DIR` names. An omp started with + `--no-extensions` or `--trusted-extension` is sent to at once instead of after 30 seconds, and a + wait that runs out without a report is now noted in the server log. + ([#2159](https://github.com/devswha/ovis/pull/2159)) +- omp's tool approval ("Allow tool: …") shows as an approval card again, with the call as its body + and Approve and Deny sent with the keys omp names, instead of a fallback card (omp 18.10 and + later; 18.13's "approve for this session" and grant rows are offered too). Reported by @Damin-Lee. + ([#2106](https://github.com/devswha/ovis/pull/2106)) +- An OpenCode `@skill` sent from Chat is no longer reported as not attached when the terminal is + resized while it is accepted, or when a narrow terminal's status row shows only the model. + ([#2185](https://github.com/devswha/ovis/pull/2185)) +- An OpenCode 2 pane started with `--standalone` or `--server` now offers its skills as `@skill` + before its first session, even when no OpenCode background service has written its service file, + and a Chat `@skill` send to it shows a state once Chat has listed the pane's commands. + ([#2315](https://github.com/devswha/ovis/pull/2315)) +- A PC whose own Ovis asks for its access token (`OVIS_TOKEN`) now shows the port it really answers + on and its "Open that PC's Ovis" https link on its card and in the dialog, instead of the + bridge's registered port and no link, once that Ovis runs this version too. + ([#2248](https://github.com/devswha/ovis/pull/2248)) +- The token another PC's app uses to update this PC's own Ovis now opens only the update status read + and the install request, each by its own method and with no query string. + ([#2193](https://github.com/devswha/ovis/pull/2193)) +- A pairing link is tried only once per page load, including when the sign-in screen returns. + If pairing succeeds but the browser does not stay signed in, the screen asks you to check + cookies instead of reporting that the already-used code is wrong or expired. + ([#2321](https://github.com/devswha/ovis/pull/2321) by @kilhyeonjun) +- A command sent from Chat to a pi session now shows its result when the session moved to another + branch and `/tree` came back before the result was written, instead of ending as unknown. + ([#2146](https://github.com/devswha/ovis/pull/2146)) +- A message sent to Pi from Ovis Chat no longer reads as delivered when the same text, typed into + Pi's terminal before it, reaches Pi's transcript first. + ([#2323](https://github.com/devswha/ovis/pull/2323)) +- Pi sends retry a briefly incomplete conversation record before giving up transcript confirmation, + including when the writer paused before Ovis started reading the file. + ([#2231](https://github.com/devswha/ovis/pull/2231) by @philipprass-prog) +- Two plugin starts at the same moment, such as herdr's startup hook and the Start action, no + longer leave `stop` saying Ovis is not running while a server keeps going: starts and stops take + turns, one that waits says so in the plugin's log, and a start no longer opens a second server + while one an earlier start left running (herdr away, say) still runs. + ([#2166](https://github.com/devswha/ovis/pull/2166)) +- An OmO question answered from a Chat card no longer goes to another open question when the + pane is too small to show the form's title: when the form left in view fits more than one open + question, the card is refused and nothing is sent. + ([#2237](https://github.com/devswha/ovis/pull/2237)) +- A Claude command sent from Chat beside the fullscreen diff panel no longer takes the question of + the same command typed in the terminal after an earlier send's echoes were counted without the + panel. + ([#2237](https://github.com/devswha/ovis/pull/2237)) +- A command sent to an OmO pane with two OmO processes holding sessions keeps its outcome on the + OmO it was sent to, also when it waited in the queue and herdr listed the other one first by + then, and never on a later process that got the OmO's process number. + ([#2237](https://github.com/devswha/ovis/pull/2237)) +- When **Turn alerts on again** cannot make a push subscription, the alerts notice and Settings now + say why: the browser would not make one (in Brave, its push service is off until **Use Google + services for push messaging** is on), the page's service worker is not running, or the PC did not + take it. Before, the button only flickered and the notice came back unchanged. + ([#2145](https://github.com/devswha/ovis/pull/2145) by @mattmarcin) +- The alerts notice can be dismissed. It stays closed on that device for the same problem, and + shows again for a different one or after alerts work again. Settings still shows the problem. + ([#2145](https://github.com/devswha/ovis/pull/2145) by @mattmarcin) +- A push endpoint its push service retired stays refused, however long ago that was, until its + owner's device is revoked or a thousand later retirements push its mark out. Before, after 30 days + another device that knew the endpoint could register it as its own, and so could another spelling + of it (a `#fragment`, an uppercase host or `:443`) at any time. + ([#2140](https://github.com/devswha/ovis/pull/2140)) +- A subscription its push service retired is removed even when `push-retired.json` cannot be + written (a full disk, a read-only state directory). Before, the failed write left it registered + and the next alert went to the dead endpoint again. + ([#2140](https://github.com/devswha/ovis/pull/2140)) +- When a crash left the saved permission to connect to the PCs saved in herdr unreadable, Settings + now says to choose Connect on those PCs again, instead of telling you to add them again. + ([#2192](https://github.com/devswha/ovis/pull/2192)) +- A file opened from a Claude Code session's scratch folder is served, described and drawn as a page + only from the file actually opened inside that folder: a link put in its place after it was found + no longer serves a file from outside the folder. + ([#2265](https://github.com/devswha/ovis/pull/2265)) +- Read DONE dots no longer come back after herdr restarts on a PC: a late read of the old herdr run + could make the server drop the new run's read finishes and stop saving new ones. + ([#2249](https://github.com/devswha/ovis/pull/2249)) +- The server no longer keeps or hands out the read finishes of a herdr run it knows has ended, so a + browser that reconnects stops writing them back into its storage, and the next change drops them + from `seen.json`. The records of a PC this server has not heard from since it started are kept. + ([#2197](https://github.com/devswha/ovis/pull/2197)) +- On a phone, a jump of several entries back through the browser's history menu from a Settings + opened again over a preview now goes to the pane it lands on. Settings no longer keeps the mark an + earlier opening from the command palette left behind, which made the jump count as closing it. + ([#2182](https://github.com/devswha/ovis/pull/2182)) +- Closing a sidebar filter that the command palette opened no longer leaves the focus on nothing when + what opened it is gone; it goes to a workspace row. Opening or clicking a row's menu no longer closes + that empty filter, and words typed into it right after it lost the focus are no longer cleared. + ([#2141](https://github.com/devswha/ovis/pull/2141)) +- The session read, the `/ws` snapshot and a PC's relayed or proxied snapshots no longer carry the + token values herdr's sidebar rows hide, so no browser, watch-only ones included, receives them in + any snapshot. Another Ovis server reading a PC still gets them, to apply its own rows. + ([#2171](https://github.com/devswha/ovis/pull/2171)) +- The agent rows' machine events and PC roster no longer carry the literal text and numbers of the + hide rules in herdr's sidebar rows, nor the token values those rules hide, so watch-only browsers + no longer receive them there, and a hidden value no longer shows for a moment while the page + loads. + ([#2139](https://github.com/devswha/ovis/pull/2139)) +- A vertical mouse wheel over a tab strip whose tabs do not fit scrolls it sideways, so tabs past + its end can be reached with a mouse. + ([#2095](https://github.com/devswha/ovis/pull/2095)) +- Korean lines in the terminal no longer nearly touch: Hangul is widened to its two cells + instead of enlarged, so it keeps its own height, and a row is made tall enough for Hangul and a + gap below it where the Latin font's line is shorter (Menlo, Consolas), keeping every row where it + is not. + ([#2243](https://github.com/devswha/ovis/pull/2243)) +- Korean text on a background colour (Claude Code's prompt, a highlighted or inverse line) no longer + shows a thin light line after each word in the terminal, in Ovis for Mac, Safari and Chrome. + ([#2263](https://github.com/devswha/ovis/pull/2263)) +- Powerline separators in a prompt no longer make the terminal redraw every row when the icon font + arrives: they are painted as boxes, not drawn from the font. A pane that prints icons still + redraws once their font arrives, so they are sized from it. + ([#2158](https://github.com/devswha/ovis/pull/2158)) +- Settings → Phone & devices keeps the "This device" badge on one line beside a device's name on a + phone, moving it whole to the next line when the name fills the row, instead of splitting it. + ([#2187](https://github.com/devswha/ovis/pull/2187)) +- When the agent's next todo update folds the update you were on into a Plan row, the keyboard focus + stays on that update instead of dropping to the page, and an update opened inside the Plan row + now shows the input it sent and the output it got back, not only the list again. + ([#2161](https://github.com/devswha/ovis/pull/2161)) +- An Ovis restart while a Sign in again or Add account login is still open in its terminal tab no + longer lets a second login start in the same credential home: the restarted server finds the tab + still running and answers that a sign-in is already open, until that login ends. + ([#2325](https://github.com/devswha/ovis/pull/2325)) +- Voice input no longer fails in a pane with many slash commands when the transcription server + caps a request at 32 fields (codex-lb does): only as many command hints are sent as fit. + ([#2235](https://github.com/devswha/ovis/pull/2235) by @vuongnmhvn) +- A device paired to watch only can no longer read a pane's command rows (custom commands' first + lines and file paths) through `/api/pane/commands`, on this PC or another: they are refused as a + folder's commands already were, and its chat no longer keeps asking for them. + ([#2246](https://github.com/devswha/ovis/pull/2246)) +- A device paired to watch only can no longer list the file paths under a pane's folder through + `/api/pane/files`, or read a plugin action run's output through `/api/plugin/action`, on this PC + or another: they are refused as a folder listing already was. + ([#2252](https://github.com/devswha/ovis/pull/2252)) +- A device paired to watch only can no longer list a repository's checkouts (their folders and + branches, those not open in herdr too) through `/api/worktree/list`, on this PC or another: it is + refused as a folder listing already was. Its sidebar no longer asks for them and shows no branch + names. + ([#2304](https://github.com/devswha/ovis/pull/2304)) +- Ovis for Windows' Update for a server under the old id installs the newest release even when + the PC sets an older `OVIS_REF`, and when the installer or herdr's reinstall fails, the server + that ran before starts again, with or without herdr running. A running server that reports no + version and runs without the update supervisor, such as one just started whose supervisor has + not reported yet, is no longer offered Update, and the + version check waits once more for a server slow to answer and takes a token set only in the + environment. + ([#2113](https://github.com/devswha/ovis/pull/2113)) +- Ovis for Windows no longer offers Start for an Ovis server older than the app, or one installed + under the old `devswha.herdr-web-ui` id: it shows Update, which updates it in place (herdr, Bun, + settings and token stay), starts it, sets herdr to start at sign-in and ends at the phone's QR + code. It says so when it cannot read the server's version, and names a herdr that is too old. + The plugin's `status` now prints the version that runs, which can be newer than herdr's list. + ([#2091](https://github.com/devswha/ovis/pull/2091)) +- Ovis for Windows and install.ps1 now stop an Ovis server from before the rename (0.4.12 and older) + that kept running after herdr closed, so Update no longer fails with "the file is in use" and then + keeps showing the same Update screen. + ([#2275](https://github.com/devswha/ovis/pull/2275)) +- Try again after a failed Update in Ovis for Windows reads the PC again instead of running the old + server's removed files ("Module not found"). + ([#2275](https://github.com/devswha/ovis/pull/2275)) +- Ovis for Windows shows the phone QR code for a server that asks for a token, instead of telling a + PC that already has Tailscale to install it. + ([#2275](https://github.com/devswha/ovis/pull/2275)) +- The log in Ovis for Windows shows the installer's messages as plain lines, not raw PowerShell + CLIXML. + ([#2275](https://github.com/devswha/ovis/pull/2275)) +- On native Windows without `HOME`, chat transcripts and session lists find each agent's store + under `USERPROFILE` too, as skill discovery already does. + ([#2157](https://github.com/devswha/ovis/pull/2157)) +- Windows remote PCs wait for Windows sign-in before starting herdr, so Codex can use its + private-desktop sandbox. Startup options offer an explicit start without sign-in for headless + PCs, including when Task Scheduler cannot start herdr, with the error and sandbox and desktop-tool + limitations shown before that one start. Existing herdr servers are reused without restarting + their panes. Signing out of Windows ends a desktop-started herdr and its panes; lock the PC + instead. SSH disconnects and bridge updates leave them running. + ([#2087](https://github.com/devswha/ovis/pull/2087) by @JJLiebig) +- Slow Windows launchers keep their startup options through the launch deadline. Failed startup + reviews restore saved PCs' reconnection attempts; Task Scheduler failures show their own error + instead of a sign-in instruction and stop background retries until startup options are reviewed. + ([#2087](https://github.com/devswha/ovis/pull/2087) by @JJLiebig) +- The terminal no longer shows half of an agent's new screen over half of its old one while the + agent streams, which happened most often with Korean text: the browser terminal is now xterm.js + 6, which draws a frame only once it is whole (#1617). Trackpad scrolling, Option+arrow word moves + and Korean typing keep working as before. + ([#2335](https://github.com/devswha/ovis/pull/2335)) + +### Maintenance +- A stopped server also closes its OpenCode event stream and forgets the OpenCode panes it verified, as + it already did for Codex's app-server connections. The session list's Resume window and Hermes's + result readers drop their duplicate code paths. + ([#2200](https://github.com/devswha/ovis/pull/2200)) +- A local browser lane run (no `CHECK_DIR`, no CI) takes the empty evidence folder it hands each + check as none in every check: the touch-burst and terminal-autoswitch checks no longer write + their captures into the checkout, and with `BROWSER_PARALLEL=1` the question-wheel, CJK + punctuation and late-faces checks no longer fail at once creating an empty path (#1554). + ([#2196](https://github.com/devswha/ovis/pull/2196)) +- CI's parallel browser lane stops a script that runs past `BROWSER_SCRIPT_TIMEOUT_SECONDS` + (600 s by default) with every process it started, and names it with its last log lines, so a + hang fails fast instead of running into the job's timeout. + ([#2287](https://github.com/devswha/ovis/pull/2287)) +- The xterm source build compiles the exact files its cache key was made from, and the key now + covers xterm's package manifest, so a source edited mid-build or a changed typings entry can no + longer reuse an old build. A killed build's leftover staging directory is cleared by the next + build, and the published build is readable by other users of the checkout. + ([#2242](https://github.com/devswha/ovis/pull/2242)) +- The Windows-native tests wait for the desktop child's whole result file instead of parsing it + half written, and every Windows-only case has a 30 s budget for busy hosted runners. + ([#2242](https://github.com/devswha/ovis/pull/2242)) +- `bun run check` now ends a failed run with the reasons it failed, such as a source that changed + while it ran, and the report path, instead of only `ok` steps and an exit code. + ([#2135](https://github.com/devswha/ovis/pull/2135)) +- Self-hosted CI runners keep a git mirror and the default branch's Bun packages on the host, read-only + to jobs, so a job no longer downloads about 150-200 MB of checkout, tags and packages. + ([#2215](https://github.com/devswha/ovis/pull/2215)) +- The unit test run (`bun run test:unit`, CI's Fast checks) now also runs the component tests + named `*.test.tsx`, which it had never picked up, and the agent sidebar's test passes when it + runs on its own. + ([#2094](https://github.com/devswha/ovis/pull/2094)) +- Command discovery keeps following a linked command folder that points outside the project, as + Command Code's own loader does, so the menu lists the commands Command Code runs; a test now pins + it and the walker says why. + ([#2134](https://github.com/devswha/ovis/pull/2134)) +- Conversation fallbacks and recoveries now emit sanitized, rate-limited diagnostic episodes, + including the failed Copilot identity stage without logging session IDs or transcript paths. + ([#2292](https://github.com/devswha/ovis/pull/2292) by @YuuuXie) +- The file-thread test that holds a thread inside a read can no longer hang the unit run: its + stand-in thread opens the FIFO it waits on before saying it is reading, and the test releases it + with a write that never waits, so a thread ended in between no longer blocks the test forever. + ([#2297](https://github.com/devswha/ovis/pull/2297)) +- The sidebar no longer walks every stored read finish on each roster update for a PC that has + none, and code the finish index kept for no current use is gone. + ([#2183](https://github.com/devswha/ovis/pull/2183)) +- The Copilot switch-back integration test now waits for the resumed transcript itself, not for the + moment between the log's unregistering and registering lines, when a read rightly fails closed. + ([#2224](https://github.com/devswha/ovis/pull/2224)) +- The integration test that holds a first message once a same-kind agent replaces its own now starts + the replacement before the first agent ends. Before, the shell alone was in front between the two, + and a read in that gap rightly found the launched agent gone, which failed the test now and then. + ([#2222](https://github.com/devswha/ovis/pull/2222)) +- The OpenCode Tab agent-switch integration tests now start from a closed autocomplete. The test + before them left the skill row selected on screen, and a send that read that old screen could not + tell the agent before Tab, which failed the tests now and then. + ([#2223](https://github.com/devswha/ovis/pull/2223)) +- `scripts/roster-bench.ts` measures what a status burst costs the server and the browser with + 20 to 300 agent panes in an isolated herdr (#772). + ([#2260](https://github.com/devswha/ovis/pull/2260)) +- The Unicode case folding and confusables tables are generated only from source files whose SHA-256 + matches the pinned one (#2233). + ([#2320](https://github.com/devswha/ovis/pull/2320)) +- The browser check that a focused window takes its pane back no longer times out waiting for a + resize after the first attach: since a new terminal attaches once its font is set, that attach + already carries the final grid, so the check now waits for the shell to report the grid each + window last asked for, by attach or by resize. + ([#2295](https://github.com/devswha/ovis/pull/2295)) +- The Release run now refuses while the remote PC bundle it names is only tagged: it waits until + that bundle's manifest and archives can be downloaded, as remote PCs download them. + ([#2212](https://github.com/devswha/ovis/pull/2212)) +- The self-hosted runner launcher's tests of a hung first cache refresh no longer fail on a loaded + host: they wait for the refresh to hang through a FIFO the stub writes to (no polling), allow + 30 s for that and for the launcher to end instead of Bun's 5 s test timeout, and let no runner + start before the refresh has hung; only the stop on SIGTERM keeps a tight bound (4 s) (#2261). + ([#2267](https://github.com/devswha/ovis/pull/2267)) +- The terminal arrows and clicks browser check no longer fails now and then on a busy CI runner. + It reads each letter before pressing the arrow that follows it, waits for xterm to report the + mouse before clicking, and proves that nothing arrives by typing a mark instead of waiting a set + time. A new unit test checks that the server holds an arrow back after the typing before it. + ([#2219](https://github.com/devswha/ovis/pull/2219)) +- The browser lane follows synchronized output (`CSI ? 2026 h` … `l`) from a real pane to the + rendered rows: the bridge passes herdr's frames intact, herdr holds a pane's frame until it + closes, and the run counts the renders xterm 5.5 draws from half a frame (#1617). + ([#2331](https://github.com/devswha/ovis/pull/2331)) +- Three tests that failed on busy hosts with nothing wrong in the code now measure what the code + controls: the browser lane's stubbed runs get a 60 s hang guard, which ends the lane's process + tree and fails with what it printed, instead of a 5 s limit (#2110); the Codex matcher's + bounded-time cases compare the CPU time of an input with that of one as long that the code + reads in one pass, which leaves the work both share out of the ratio while each still fails the + quadratic scan it guards (#2142); and the OpenCode first-key gap is measured from the last thing that send itself + waited on (#2143). + ([#2150](https://github.com/devswha/ovis/pull/2150)) +- Native TypeScript checks use less CPU with `GOGC=400` and at most 32 Go scheduler threads, + retaining GC for concurrent CI runners. Caller `GOGC`, `GOMAXPROCS`, and `GOMEMLIMIT` + settings are preserved. + ([#2276](https://github.com/devswha/ovis/pull/2276)) +- The Windows plugin test that stops the server's process tree no longer fails now and then on + CI: it took a process whose recorded parent number Windows had handed on to a server process + for part of the tree, and waited for unrelated processes, its own test runner among them, to + exit. It now walks the tree the way `stop` does, skipping a process older than its parent. + ([#2202](https://github.com/devswha/ovis/pull/2202)) +- The native Windows terminal check now tests a pull request's merge with main, as the other CI + checks do. On a branch cut before the check's script was fixed, it ran that branch's old script + and timed out after the wheel pan, which made the check look flaky. + ([#2253](https://github.com/devswha/ovis/pull/2253)) +- The native Windows terminal check (a mirrored PowerShell pane's wheel, touch, panning and IME + input in Chromium) now runs in CI on a Windows runner, `windows-terminal-qa.yml`, for pull + requests that touch the mirror, the terminal's viewport code or the xterm patch, and weekly. It + now picks Original width for the pane first: since wide mirrors fold on a phone by default, its + panning steps could not pass. + ([#2211](https://github.com/devswha/ovis/pull/2211)) +- Builds running at once in one checkout, like the browser lane's parallel workers, no longer fail + now and then with a missing xterm export: xterm's source is built once into its own cache + directory and never rewritten while another build reads it. + ([#2138](https://github.com/devswha/ovis/pull/2138)) + ## [0.4.19] - 2026-10-28 ### Added @@ -6353,7 +6982,8 @@ First public version. - Installable PWA, a mobile key bar, web push alerts and optional token auth. - Distribution as a herdr plugin. -[Unreleased]: https://github.com/devswha/ovis/compare/v0.4.19...HEAD +[Unreleased]: https://github.com/devswha/ovis/compare/v0.4.20...HEAD +[0.4.20]: https://github.com/devswha/ovis/compare/v0.4.19...v0.4.20 [0.4.19]: https://github.com/devswha/ovis/compare/v0.4.18...v0.4.19 [0.4.18]: https://github.com/devswha/ovis/compare/v0.4.17...v0.4.18 [0.4.17]: https://github.com/devswha/ovis/compare/v0.4.16...v0.4.17 diff --git a/changelog.d/agent-capabilities-leftovers.md b/changelog.d/agent-capabilities-leftovers.md deleted file mode 100644 index 9c72a5d7a6..0000000000 --- a/changelog.d/agent-capabilities-leftovers.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- A stopped server also closes its OpenCode event stream and forgets the OpenCode panes it verified, as - it already did for Codex's app-server connections. The session list's Resume window and Hermes's - result readers drop their duplicate code paths. diff --git a/changelog.d/agent-install-catalog.md b/changelog.d/agent-install-catalog.md deleted file mode 100644 index 15cf42a230..0000000000 --- a/changelog.d/agent-install-catalog.md +++ /dev/null @@ -1,5 +0,0 @@ -### Added -- The server lists every agent Ovis can install, with each vendor's own install command for the - PC's operating system and whether the agent is installed there, at which version - (`GET /api/agent-catalog`, also for remote PCs). Nothing is installed yet: the install flow - builds on it. diff --git a/changelog.d/attach-hold-resize-redraw.md b/changelog.d/attach-hold-resize-redraw.md deleted file mode 100644 index a0bb9970db..0000000000 --- a/changelog.d/attach-hold-resize-redraw.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- A terminal resized while it attaches no longer shows its first screen at the old size, or takes - input before the program has the new size. The bridge now waits for herdr's redraw at the - terminal's current size, also after a resize back to the size it started at, for up to a - second. diff --git a/changelog.d/black-theme.md b/changelog.d/black-theme.md deleted file mode 100644 index e009e05603..0000000000 --- a/changelog.d/black-theme.md +++ /dev/null @@ -1,2 +0,0 @@ -### Added -- Add Black, with pure black backgrounds and the Tokyo Night accent colors. diff --git a/changelog.d/browser-lane-empty-evidence.md b/changelog.d/browser-lane-empty-evidence.md deleted file mode 100644 index 97b48fdd30..0000000000 --- a/changelog.d/browser-lane-empty-evidence.md +++ /dev/null @@ -1,5 +0,0 @@ -### Maintenance -- A local browser lane run (no `CHECK_DIR`, no CI) takes the empty evidence folder it hands each - check as none in every check: the touch-burst and terminal-autoswitch checks no longer write - their captures into the checkout, and with `BROWSER_PARALLEL=1` the question-wheel, CJK - punctuation and late-faces checks no longer fail at once creating an empty path (#1554). diff --git a/changelog.d/browser-script-deadline.md b/changelog.d/browser-script-deadline.md deleted file mode 100644 index 21e3de735c..0000000000 --- a/changelog.d/browser-script-deadline.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- CI's parallel browser lane stops a script that runs past `BROWSER_SCRIPT_TIMEOUT_SECONDS` - (600 s by default) with every process it started, and names it with its last log lines, so a - hang fails fast instead of running into the job's timeout. diff --git a/changelog.d/build-test-followups.md b/changelog.d/build-test-followups.md deleted file mode 100644 index 62b00c4c95..0000000000 --- a/changelog.d/build-test-followups.md +++ /dev/null @@ -1,7 +0,0 @@ -### Maintenance -- The xterm source build compiles the exact files its cache key was made from, and the key now - covers xterm's package manifest, so a source edited mid-build or a changed typings entry can no - longer reuse an old build. A killed build's leftover staging directory is cleared by the next - build, and the published build is readable by other users of the checkout. -- The Windows-native tests wait for the desktop child's whole result file instead of parsing it - half written, and every Windows-only case has a 30 s budget for busy hosted runners. diff --git a/changelog.d/chat-client-followups.md b/changelog.d/chat-client-followups.md deleted file mode 100644 index c9482ecb75..0000000000 --- a/changelog.d/chat-client-followups.md +++ /dev/null @@ -1,7 +0,0 @@ -### Fixed -- A folded work block no longer opens again when hidden reasoning before it joins the same run of - work (#2111). -- A chat message sent to a PC whose server cannot confirm messages and does not name its herdr - now stays in Recover unsent text after a reload, instead of being lost with the page (#2172). -- A diagonal trackpad swipe over an overflowing tab strip is left to the browser, so the strip - no longer moves against the swipe's sideways motion (#2103). diff --git a/changelog.d/chat-follow-layout-shift.md b/changelog.d/chat-follow-layout-shift.md deleted file mode 100644 index 3c8d9c2c3e..0000000000 --- a/changelog.d/chat-follow-layout-shift.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- Chat keeps following new output to the end when part of the transcript folds on its own: a turn - settling at the end, or a block above the view folding while the view still glides to the end. - Before, the list holding the rows in place read as the reader scrolling up: following stopped - mid-transcript and **New messages** showed. diff --git a/changelog.d/chat-list-number-indent.md b/changelog.d/chat-list-number-indent.md deleted file mode 100644 index 84a8e07151..0000000000 --- a/changelog.d/chat-list-number-indent.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- The numbers of a numbered list in the chat are no longer cut off on the left with a wide Chat font - such as a monospace one, or once a list reaches 10 or 100: the indent grows with the Chat font - and the widest number. diff --git a/changelog.d/chat-run-fold-first-part.md b/changelog.d/chat-run-fold-first-part.md deleted file mode 100644 index 731d271d1d..0000000000 --- a/changelog.d/chat-run-fold-first-part.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- A chat work block you folded no longer opens again when the words before its tools join it, as - when a later Codex record marks them commentary or a blank commentary is filled in. diff --git a/changelog.d/chat-send-draft.md b/changelog.d/chat-send-draft.md deleted file mode 100644 index 44167f53ae..0000000000 --- a/changelog.d/chat-send-draft.md +++ /dev/null @@ -1,4 +0,0 @@ -### Added -- When Chat does not send a message because Claude Code's input box already holds a draft, the - note now has a **Send it** button beside **Clear it and send**. It sends the draft as Claude - Code holds it, and your Chat message stays in the box. diff --git a/changelog.d/chat-sent-waiting.md b/changelog.d/chat-sent-waiting.md deleted file mode 100644 index a1e9e94b20..0000000000 --- a/changelog.d/chat-sent-waiting.md +++ /dev/null @@ -1,5 +0,0 @@ -### Changed -- A message sent from Chat shows at once as your own bubble, faded, until the agent writes it as a - turn, so the chat is never blank between Send and the agent's turn. A small clock joins it only - when the agent has not taken it after 5 seconds. A command (`/cost`, `! ls`) gets no bubble, since - it never comes back as that message, and a bubble whose turn has not come within a minute goes. diff --git a/changelog.d/chat-tool-paths-unc-select-all.md b/changelog.d/chat-tool-paths-unc-select-all.md deleted file mode 100644 index bc2d6455bc..0000000000 --- a/changelog.d/chat-tool-paths-unc-select-all.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- A chat copy that reaches past the chat, such as Select All, keeps a tool card's whole file paths - instead of the short labels read from the pane's folder. -- A pane on a UNC folder written with forward slashes (`//server/share/app`) shows its chat tool - card paths as written, as it already did for `\\server\share\app`. diff --git a/changelog.d/check-invalidated-run-reason.md b/changelog.d/check-invalidated-run-reason.md deleted file mode 100644 index bef2af73da..0000000000 --- a/changelog.d/check-invalidated-run-reason.md +++ /dev/null @@ -1,3 +0,0 @@ -### Maintenance -- `bun run check` now ends a failed run with the reasons it failed, such as a source that changed - while it ran, and the report path, instead of only `ok` steps and an exit code. diff --git a/changelog.d/ci-runner-host-caches.md b/changelog.d/ci-runner-host-caches.md deleted file mode 100644 index 7dbce47fbc..0000000000 --- a/changelog.d/ci-runner-host-caches.md +++ /dev/null @@ -1,3 +0,0 @@ -### Maintenance -- Self-hosted CI runners keep a git mirror and the default branch's Bun packages on the host, read-only - to jobs, so a job no longer downloads about 150-200 MB of checkout, tags and packages. diff --git a/changelog.d/ci-runs-tsx-tests.md b/changelog.d/ci-runs-tsx-tests.md deleted file mode 100644 index 6f9fb62112..0000000000 --- a/changelog.d/ci-runs-tsx-tests.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- The unit test run (`bun run test:unit`, CI's Fast checks) now also runs the component tests - named `*.test.tsx`, which it had never picked up, and the agent sidebar's test passes when it - runs on its own. diff --git a/changelog.d/claude-attach-followups.md b/changelog.d/claude-attach-followups.md deleted file mode 100644 index 8267803402..0000000000 --- a/changelog.d/claude-attach-followups.md +++ /dev/null @@ -1,7 +0,0 @@ -### Fixed -- A message queued for a `claude attach` pane waits for the conversation of the job it opened, as it - does for any Claude Code pane, instead of going wherever the pane ends up. -- Chat follows a `claude attach ` pane whose name is followed by debug options or - `--setting-sources`, as Claude Code reads it. -- A `/resume` of a background session no longer reads that job's state without a size limit, nor - waits on a FIFO put in its place. diff --git a/changelog.d/claude-background-subagent-rest.md b/changelog.d/claude-background-subagent-rest.md deleted file mode 100644 index 60d7dea48a..0000000000 --- a/changelog.d/claude-background-subagent-rest.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- A Claude Code pane whose turn has ended no longer reads as working while a background subagent it - started works on: Claude Code keeps its busy title spinner up for the subagent, which herdr reads - as work. The pane now waits on that work (BG), as it does when the subagent is quiet, so the chat - no longer shows "Working…" with a Stop button under the finished answer. (#2069) diff --git a/changelog.d/claude-bash-mode.md b/changelog.d/claude-bash-mode.md deleted file mode 100644 index ca10df6532..0000000000 --- a/changelog.d/claude-bash-mode.md +++ /dev/null @@ -1,4 +0,0 @@ -### Added -- Chat shows a Claude Code bash-mode command (`!`) as one card: the command, then what it - printed, with the output of a failed command in red. Before, Chat showed the raw - `` and `` tags in two messages. diff --git a/changelog.d/claude-branch-followups.md b/changelog.d/claude-branch-followups.md deleted file mode 100644 index bde2403183..0000000000 --- a/changelog.d/claude-branch-followups.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- After Claude Code's `/branch`, Chat takes a transcript as the branch only from its own first message, - and keeps to the branch file it checked when another project holds a file of the same id. diff --git a/changelog.d/claude-branch-transcript.md b/changelog.d/claude-branch-transcript.md deleted file mode 100644 index 38856814bc..0000000000 --- a/changelog.d/claude-branch-transcript.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- After Claude Code's `/branch`, Chat follows the branch Claude went on in and shows its replies, - also when Herdr still reports the session the branch was copied from. Reported by @Hyd3-14 in - [#2020](https://github.com/devswha/ovis/issues/2020). diff --git a/changelog.d/claude-command-beside-diff-panel.md b/changelog.d/claude-command-beside-diff-panel.md deleted file mode 100644 index 847109b4e9..0000000000 --- a/changelog.d/claude-command-beside-diff-panel.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- A Claude skill or command sent from Chat that asks a question while Claude's fullscreen diff - panel is shown now waits on that question in its receipt, as it does without the panel. diff --git a/changelog.d/claude-model-pill-after-model.md b/changelog.d/claude-model-pill-after-model.md deleted file mode 100644 index 91cc865808..0000000000 --- a/changelog.d/claude-model-pill-after-model.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- After `/model` or `/effort` in a Claude Code pane, the composer's model pill shows the new model - and effort as soon as Claude Code confirms the change, not after the next answer. A model name - printed in a form that does not map back to one model id keeps the old pill until that answer. - Thanks to @jpcarranza94 for the report and the list of forms. diff --git a/changelog.d/claude-model-pill-older-record.md b/changelog.d/claude-model-pill-older-record.md deleted file mode 100644 index 0ed9ce8487..0000000000 --- a/changelog.d/claude-model-pill-older-record.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- In a Claude Code pane, the composer's model pill and effort no longer go back to an older model - when many records with no answer (bash-mode commands, a long tool output) follow the answer or - the `/model` / `/effort` change that set them. diff --git a/changelog.d/claude-scratch-length-under-load.md b/changelog.d/claude-scratch-length-under-load.md deleted file mode 100644 index dadf1a1b45..0000000000 --- a/changelog.d/claude-scratch-length-under-load.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Large files opened from Claude Code's scratch folder keep their size (and download progress) - when many are fetched at once, instead of some arriving without a length. diff --git a/changelog.d/claude-sdk-host-tool-results.md b/changelog.d/claude-sdk-host-tool-results.md deleted file mode 100644 index 60ab8098fe..0000000000 --- a/changelog.d/claude-sdk-host-tool-results.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- Chat no longer shows an OmO tool's output as a big message from you when OmO runs Claude Code - through its SDK (a `Tool result (mcp__custom-tools__eval, id=…):` bubble between work blocks). - The output now folds into the work block as that call's result, and the call no longer counts as - failed while OmO runs it. A message you sent along while the tools ran still shows as yours. diff --git a/changelog.d/claude-sdk-senpi-notices.md b/changelog.d/claude-sdk-senpi-notices.md deleted file mode 100644 index 8302a7b0e1..0000000000 --- a/changelog.d/claude-sdk-senpi-notices.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- Chat no longer shows OmO's own notices as messages from you when OmO runs Claude Code through its - SDK: reminders, monitor events, recalled memory notes, goal continuations and the history a new - session replays stay hidden, like Claude Code's own reminders. A background task that ended shows - as its task card, and a team member's message as a message from another session. diff --git a/changelog.d/claude-session-switch-queued.md b/changelog.d/claude-session-switch-queued.md deleted file mode 100644 index dfae0f940d..0000000000 --- a/changelog.d/claude-session-switch-queued.md +++ /dev/null @@ -1,6 +0,0 @@ -### Fixed -- A message queued for a Claude Code conversation is no longer typed into another one when - `/clear`, `/resume` or a `claude attach` job switches the pane's session while the message is - being sent: the session is checked again right before the paste, and once the paste is in, an - Enter is pressed only while the conversation can still be told. Otherwise the message is held - before the paste, or left marked uncertain without its Enter. diff --git a/changelog.d/claude-store-followups.md b/changelog.d/claude-store-followups.md deleted file mode 100644 index 20259ae92c..0000000000 --- a/changelog.d/claude-store-followups.md +++ /dev/null @@ -1,8 +0,0 @@ -### Fixed -- After Claude Code's `/branch`, Chat follows the branch's continuation in the branch's own project - instead of a file of the same id in another project, and reads a transcript's records however - their keys are spelled or spaced. -- A `claude attach ` pane with a debug value given apart from its option (`-d api,hooks`, - `--debug api`) keeps its terminal: Claude Code then looks no name up. -- A message queued for a Claude Code conversation is held, not sent, once the conversation in the - pane can no longer be told (its PID record or its job's state cannot be read). diff --git a/changelog.d/claude-trailing-backslash.md b/changelog.d/claude-trailing-backslash.md deleted file mode 100644 index 13ad2f53ec..0000000000 --- a/changelog.d/claude-trailing-backslash.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A Chat or queued message to Claude Code that ends in a backslash is now sent. Before, Claude - Code read the backslash and the Enter after it as a new line, and the message stayed in its - input box. diff --git a/changelog.d/claude-ultracode-switch.md b/changelog.d/claude-ultracode-switch.md deleted file mode 100644 index 310c2c65b6..0000000000 --- a/changelog.d/claude-ultracode-switch.md +++ /dev/null @@ -1,19 +0,0 @@ -### Added -- New workspace and New tab have an Ultracode switch for Claude Code, on one line under Model and - Effort, so a session can start with Ultracode on at any effort level - (`--settings '{"ultracode":true}'`, which a Windows PC passes as a small settings file in - `%LOCALAPPDATA%\ovis\claude-settings`). It needs Claude Code 2.1.284 or later, a model with xhigh - and dynamic workflows on. Reported by @fivetaku, whose #2282 suggested the compact line under the - effort level. -- Claude Code's `/effort` card has a Turn Ultracode on or Turn Ultracode off row where Tab, the - default key, flips the switch: it switches Ultracode for this session and keeps the effort level. - -### Changed -- New workspace and New tab no longer list `ultracode` among Claude Code's effort levels; the PC - still accepts `--effort ultracode` from other clients. - -### Fixed -- Claude Code's `/effort` card now shows while Ultracode is on, at max where Claude Code offers no - Ultracode, and in panes narrower than 70 columns down to about 45, where the slider was left to - the terminal before. A pane of about 44 columns or fewer still leaves it there, as Claude Code - cuts the level names. diff --git a/changelog.d/claude-words-before-question-card.md b/changelog.d/claude-words-before-question-card.md deleted file mode 100644 index 056e7215e3..0000000000 --- a/changelog.d/claude-words-before-question-card.md +++ /dev/null @@ -1,6 +0,0 @@ -### Fixed -- Chat shows what Claude wrote right before a question card, read from the terminal, while the card - waits. Claude Code 2.1.311 saves those words to its session file only with the answer, so the card - lacked the context the terminal showed above the question. Words whose start is above the - terminal's screen are left to the terminal, and once Claude's own record of the turn arrives the - chat shows that instead. Reported by @Xelanor. diff --git a/changelog.d/codex-footer-model-live-screen.md b/changelog.d/codex-footer-model-live-screen.md deleted file mode 100644 index 1c766f3db3..0000000000 --- a/changelog.d/codex-footer-model-live-screen.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- The message box no longer names an older model before an agent's first message when its terminal - is scrolled up, or was cleared, above an earlier Codex or Claude frame: the model is read from the - live screen only, and none is named while the terminal is scrolled into its history. diff --git a/changelog.d/codex-loaded-threads-lock-table.md b/changelog.d/codex-loaded-threads-lock-table.md deleted file mode 100644 index cb8d1bce24..0000000000 --- a/changelog.d/codex-loaded-threads-lock-table.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A Codex pane that resumed another folder's conversation through the picker is no longer bound to - it while another loaded conversation could be the one it shows: on a busy Linux PC one read of - the kernel's lock table could leave a loaded conversation out. diff --git a/changelog.d/command-folder-links.md b/changelog.d/command-folder-links.md deleted file mode 100644 index 06265b61d4..0000000000 --- a/changelog.d/command-folder-links.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- Command discovery keeps following a linked command folder that points outside the project, as - Command Code's own loader does, so the menu lists the commands Command Code runs; a test now pins - it and the walker says why. diff --git a/changelog.d/commands-scan-off-server-thread.md b/changelog.d/commands-scan-off-server-thread.md deleted file mode 100644 index be24f67b7f..0000000000 --- a/changelog.d/commands-scan-off-server-thread.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- Listing a pane's slash commands no longer stops the whole server while its skill and command - folders sit on a slow filesystem (a Windows folder mounted into a container, a network share): - the scan runs on the file threads, so terminals, typed input and other requests keep answering - while it reads. Thanks to @PayrollFuchs for the report and the measurements (#2254). diff --git a/changelog.d/conversation-unavailable-diagnostics.md b/changelog.d/conversation-unavailable-diagnostics.md deleted file mode 100644 index a268bd11d0..0000000000 --- a/changelog.d/conversation-unavailable-diagnostics.md +++ /dev/null @@ -1,3 +0,0 @@ -### Maintenance -- Conversation fallbacks and recoveries now emit sanitized, rate-limited diagnostic episodes, - including the failed Copilot identity stage without logging session IDs or transcript paths. diff --git a/changelog.d/copilot-identity-retry.md b/changelog.d/copilot-identity-retry.md deleted file mode 100644 index 8f1181f667..0000000000 --- a/changelog.d/copilot-identity-retry.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Copilot Chat retries a failed process lookup once and revalidates log continuity after temporary - descriptor read errors, without restoring stale or revoked session evidence. diff --git a/changelog.d/copilot-refresh-retention.md b/changelog.d/copilot-refresh-retention.md deleted file mode 100644 index add66156e8..0000000000 --- a/changelog.d/copilot-refresh-retention.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- Copilot Chat keeps its messages while retrying a failed transcript page read when the same - conversation is still verified, instead of briefly showing the terminal fallback. -- A failed read of the gap between Chat pages no longer discards the messages already displayed. diff --git a/changelog.d/copilot-stable-process-identity.md b/changelog.d/copilot-stable-process-identity.md deleted file mode 100644 index 634ff5e825..0000000000 --- a/changelog.d/copilot-stable-process-identity.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Copilot conversation ownership uses the kernel's stable process birth, so clock corrections no - longer reset a verified binding or make a previously denied fallback eligible again. diff --git a/changelog.d/diff-find-tall-row.md b/changelog.d/diff-find-tall-row.md deleted file mode 100644 index a172431f23..0000000000 --- a/changelog.d/diff-find-tall-row.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Find in a diff now brings the match itself into view on a wrapped line taller than the screen, - such as a long line on a phone, instead of the line's middle, which could leave the match below. diff --git a/changelog.d/done-dot-codex-late-completion.md b/changelog.d/done-dot-codex-late-completion.md deleted file mode 100644 index 9048d8b0b1..0000000000 --- a/changelog.d/done-dot-codex-late-completion.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- A Codex pane's DONE dot now clears when you read the answer in Chat even if Codex recorded the - turn's completion after the chat first loaded the answer. Before, it stayed until the next finish. diff --git a/changelog.d/faster-tab-switch.md b/changelog.d/faster-tab-switch.md deleted file mode 100644 index 630a13a157..0000000000 --- a/changelog.d/faster-tab-switch.md +++ /dev/null @@ -1,5 +0,0 @@ -### Changed -- Switching tabs is faster: a tab's terminal takes input about 100 ms sooner. The bridge passes an - attach's screen on as soon as herdr draws its text, instead of holding every attach 100 ms. - The hold stays for an attach that shows no text yet, one that was resized while it started, and - a pane another web bridge held, so herdr's refusal is still never shown. diff --git a/changelog.d/features-before-snapshot.md b/changelog.d/features-before-snapshot.md deleted file mode 100644 index 816c7348f6..0000000000 --- a/changelog.d/features-before-snapshot.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- A message sent from Chat right after the page reconnects (after a server restart, or while the PC is - busy) no longer fails with "this PC has not said yet what it supports": the server now says what it - supports as soon as the connection opens, instead of only with the pane list, which can take seconds - to read from herdr or fail. Older servers keep the previous behaviour. diff --git a/changelog.d/file-access-threads.md b/changelog.d/file-access-threads.md deleted file mode 100644 index f9aad544f8..0000000000 --- a/changelog.d/file-access-threads.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- Opening, previewing or looking up a file on a slow or stalled disk (a network share, a large - rendered page) no longer freezes every terminal and request: the file routes read the disk on a - few background threads, and answer 503 to try again when those are busy or the disk does not - answer in time. diff --git a/changelog.d/file-pool-test-hang.md b/changelog.d/file-pool-test-hang.md deleted file mode 100644 index b03e4e6886..0000000000 --- a/changelog.d/file-pool-test-hang.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- The file-thread test that holds a thread inside a read can no longer hang the unit run: its - stand-in thread opens the FIFO it waits on before saying it is reading, and the test releases it - with a write that never waits, so a thread ended in between no longer blocks the test forever. diff --git a/changelog.d/finish-index-followups.md b/changelog.d/finish-index-followups.md deleted file mode 100644 index b644d40907..0000000000 --- a/changelog.d/finish-index-followups.md +++ /dev/null @@ -1,3 +0,0 @@ -### Maintenance -- The sidebar no longer walks every stored read finish on each roster update for a PC that has - none, and code the finish index kept for no current use is gone. diff --git a/changelog.d/hermes-skills-server-localappdata.md b/changelog.d/hermes-skills-server-localappdata.md deleted file mode 100644 index ed078dfcb1..0000000000 --- a/changelog.d/hermes-skills-server-localappdata.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- On Windows, Hermes skills show in the command menu again when `%LOCALAPPDATA%` is redirected: Ovis - cannot read a Windows pane's environment, and now looks in the server's `%LOCALAPPDATA%\hermes`, as - it already did for Hermes transcripts, instead of `\AppData\Local\hermes`. diff --git a/changelog.d/incremental-omo-gjc-transcripts.md b/changelog.d/incremental-omo-gjc-transcripts.md deleted file mode 100644 index bf101a9b45..0000000000 --- a/changelog.d/incremental-omo-gjc-transcripts.md +++ /dev/null @@ -1,5 +0,0 @@ -### Changed -- A long OMO or GJC chat refreshes faster while its agent works: each update now parses only the - records the agent added since the last one, as OMP, Claude Code and Codex chats already do, - instead of the whole running task again. Based on - [#1634](https://github.com/devswha/ovis/pull/1634) by @Yoonwoo-Ha. diff --git a/changelog.d/installer-no-global-node.md b/changelog.d/installer-no-global-node.md deleted file mode 100644 index a8f8d49aa0..0000000000 --- a/changelog.d/installer-no-global-node.md +++ /dev/null @@ -1,7 +0,0 @@ -### Fixed -- The installer no longer links the Node it installs into `~/.local/bin`, where it went before the - Node of your own projects. Once Ovis runs this release, running the installer again removes a link - it made earlier and says so: if that link was the only `node` your shells had, install your own - Node to keep using `node` outside Ovis. - Terminals that run on the Node fallback, and updates from Settings, use the right runtime even - when herdr's PATH starts with an older Node (reported by @wafe). diff --git a/changelog.d/integration-flake-copilot-switch-back.md b/changelog.d/integration-flake-copilot-switch-back.md deleted file mode 100644 index 99b35d24a9..0000000000 --- a/changelog.d/integration-flake-copilot-switch-back.md +++ /dev/null @@ -1,3 +0,0 @@ -### Maintenance -- The Copilot switch-back integration test now waits for the resumed transcript itself, not for the - moment between the log's unregistering and registering lines, when a read rightly fails closed. diff --git a/changelog.d/integration-flake-first-message-replacement.md b/changelog.d/integration-flake-first-message-replacement.md deleted file mode 100644 index feef1739e8..0000000000 --- a/changelog.d/integration-flake-first-message-replacement.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- The integration test that holds a first message once a same-kind agent replaces its own now starts - the replacement before the first agent ends. Before, the shell alone was in front between the two, - and a read in that gap rightly found the launched agent gone, which failed the test now and then. diff --git a/changelog.d/integration-flake-opencode-tab-switch.md b/changelog.d/integration-flake-opencode-tab-switch.md deleted file mode 100644 index d5eb19fc55..0000000000 --- a/changelog.d/integration-flake-opencode-tab-switch.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- The OpenCode Tab agent-switch integration tests now start from a closed autocomplete. The test - before them left the skill row selected on screen, and a send that read that old screen could not - tell the agent before Tab, which failed the tests now and then. diff --git a/changelog.d/integration-followups.md b/changelog.d/integration-followups.md deleted file mode 100644 index c7139dbccf..0000000000 --- a/changelog.d/integration-followups.md +++ /dev/null @@ -1,6 +0,0 @@ -### Fixed -- Sending an `@skill` to OpenCode no longer types a second space after the skill when the pane redraws - blank while Ovis waits for Tab's result. -- On Windows, Hermes transcripts, session history and skills are found under `%LOCALAPPDATA%\hermes`, - where Hermes 0.21.5 keeps them (a store an earlier Hermes left in `%USERPROFILE%\.hermes` is still - read), and agent stores are looked up under USERPROFILE even when HOME is set for Git or Emacs. diff --git a/changelog.d/ios-app-hangul-composition.md b/changelog.d/ios-app-hangul-composition.md deleted file mode 100644 index ccb130c49a..0000000000 --- a/changelog.d/ios-app-hangul-composition.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- Korean typed in the terminal in the iOS app now reaches the pane as whole syllables (안녕). - Before, each jamo went out on its own (ㅇㅏㄴㄴㅕㅇ) because the app's web view does not say - "Safari" in its user agent. Safari and the Home Screen app already worked. diff --git a/changelog.d/ios-hide-form-accessory-bar.md b/changelog.d/ios-hide-form-accessory-bar.md deleted file mode 100644 index 5d66aaebb2..0000000000 --- a/changelog.d/ios-hide-form-accessory-bar.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- The iOS app no longer shows WebKit's form bar (the up and down arrows and the check mark) over - the keyboard, so only Ovis's own key bar sits above it and the page keeps that row of the - screen. diff --git a/changelog.d/legacy-send-unconfirmed.md b/changelog.d/legacy-send-unconfirmed.md deleted file mode 100644 index 41dfdfeb37..0000000000 --- a/changelog.d/legacy-send-unconfirmed.md +++ /dev/null @@ -1,7 +0,0 @@ -### Fixed -- A message sent to a PC whose Ovis is too old to confirm messages is no longer treated as delivered: - the composer, Send now on a held copy and the held queue's Send now keep its text as a - "Not confirmed" row to copy or discard, instead of dropping it. -- A terminal command sent from Chat right after a pane opens now opens the terminal view even when - the terminal had not loaded the pane's command list yet, and a chat shown again draws its - "Ran in terminal" rows at once instead of as plain messages first. diff --git a/changelog.d/letta-native-chat.md b/changelog.d/letta-native-chat.md deleted file mode 100644 index 68fc2d1a43..0000000000 --- a/changelog.d/letta-native-chat.md +++ /dev/null @@ -1,5 +0,0 @@ -### Added -- Chat shows a Letta Code pane's conversation, read from Letta's own transcript, when herdr's Letta - integration reports it and Letta's own record names the same conversation; otherwise the - terminal's text stays. Letta writes a turn only when it ends, so while it works or waits for you, - Chat shows the live terminal. diff --git a/changelog.d/mac-app-1455-followups.md b/changelog.d/mac-app-1455-followups.md deleted file mode 100644 index 667b1d5b7e..0000000000 --- a/changelog.d/mac-app-1455-followups.md +++ /dev/null @@ -1,12 +0,0 @@ -### Fixed -- Ovis for Mac takes the installer only over HTTPS from ovis.sh or herdrweb.dev, reads the phone - address only from this Mac's own server, and draws the QR code only for Tailscale's `.ts.net` - HTTPS address. -- Ovis for Mac makes the phone address with the Ovis release that runs now, not the one first - installed, and shows Tailscale's answer when it fails. -- Remove in Ovis for Mac stops at a step that fails (herdr's plugin list included) and shows why, - and takes the phone address off Tailscale even when the server is down. -- Start in Ovis for Mac no longer adds a login item for herdr set up from a terminal; it runs herdr - for this login only. -- Ovis for Mac moves herdr's log to `herdr-server.log.1` once it passes 10 MB, when the app opens - or starts herdr, and its refresh button has a VoiceOver label. diff --git a/changelog.d/machine-events-burst.md b/changelog.d/machine-events-burst.md deleted file mode 100644 index f4602d5ed7..0000000000 --- a/changelog.d/machine-events-burst.md +++ /dev/null @@ -1,11 +0,0 @@ -### Fixed -- The sidebar no longer goes stale for about three seconds when many agents change status at - once. A burst of more than five status changes closed the browser's event stream, which then - reconnected and read the whole roster again, and a finish in between rang no sound and showed - no drop-in on the page. The stream now lets a browser fall up to 4 MiB behind, beside the one - large roster it may be reading, before ending it, and every browser's stream together holds at - most 32 MiB for those that fell behind, so stalled devices can no longer fill the server's memory. - -### Maintenance -- `scripts/roster-bench.ts` measures what a status burst costs the server and the browser with - 20 to 300 agent panes in an isolated herdr (#772). diff --git a/changelog.d/machines-move-own-roster.md b/changelog.d/machines-move-own-roster.md deleted file mode 100644 index 23dc0c15a2..0000000000 --- a/changelog.d/machines-move-own-roster.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A PC set up at another SSH address no longer shows or saves the roster of the address it left once - it moves there. When the new address's roster waits for that server to prove it is the one - answering, the PC's card has no panes until it does, and then shows that address's own. diff --git a/changelog.d/omo-custom-outcome-holder.md b/changelog.d/omo-custom-outcome-holder.md deleted file mode 100644 index e773ae8911..0000000000 --- a/changelog.d/omo-custom-outcome-holder.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A command sent to a custom OmO (one whose launcher does not name omo) keeps its row in Chat after - the turn ends: the row follows the OmO process that holds the session, as a queued message does, - instead of the bundled Claude SDK process that exits with each turn. diff --git a/changelog.d/omo-pending-question-hyphen.md b/changelog.d/omo-pending-question-hyphen.md deleted file mode 100644 index 89f16c1145..0000000000 --- a/changelog.d/omo-pending-question-hyphen.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- A question OmO 5.1.48 asks without waiting for the answer shows in the chat as its question card - with its options again, instead of a "Waiting for input" card offering only Enter and Esc. diff --git a/changelog.d/omp-approval-composer-shapes.md b/changelog.d/omp-approval-composer-shapes.md deleted file mode 100644 index 47f9384d56..0000000000 --- a/changelog.d/omp-approval-composer-shapes.md +++ /dev/null @@ -1,7 +0,0 @@ -### Fixed -- omp's tool approval card now also shows when omp's composer is not the default status band: a - box (`composer.shape: box`), the Claude Code, Pi, borderless, rule, field and rail shapes, any - status-line preset, and the ascii symbols. omp's Ask card shows under the rule, field and rail - shapes too. -- An omp card no longer shows, and an answer sends no key, while omp is stopped behind its shell - (Ctrl+Z, or a suspended job): herdr still names the pane omp, but the shell holds the input. diff --git a/changelog.d/omp-ask-markdown.md b/changelog.d/omp-ask-markdown.md deleted file mode 100644 index 90fb02c5f4..0000000000 --- a/changelog.d/omp-ask-markdown.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- An omp Ask card now shows the question and its options in the agent's own Markdown (bold, code, - links, lists, a fenced block), and a question omp cuts at four rows in full. The card takes the - text from the session's open ask call only when it matches the menu on screen; otherwise it - shows the screen's text as before, and the answer keys still come from the terminal's menu. diff --git a/changelog.d/omp-blob-pictures-mac-windows.md b/changelog.d/omp-blob-pictures-mac-windows.md deleted file mode 100644 index 80980f040f..0000000000 --- a/changelog.d/omp-blob-pictures-mac-windows.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- Chat shows omp's pictures from its blob store on macOS and Windows too, not only on Linux: the - bridge opens a blob through the store directory it holds open, so a link or a directory swapped - in above it can never stand in for the store. diff --git a/changelog.d/omp-prompt-followups.md b/changelog.d/omp-prompt-followups.md deleted file mode 100644 index 6b12d07ba2..0000000000 --- a/changelog.d/omp-prompt-followups.md +++ /dev/null @@ -1,14 +0,0 @@ -### Fixed -- An omp started from its npm package (bunx or npx run `dist/cli.js` with bun) shows its approval - card in Chat again; the card stayed hidden and the answer had to be given in the terminal (#2280). -- An omp Ask question with a Mermaid diagram, or with options that would read alike on the card, - shows as omp draws it, so the card never shows a diagram in place of the code or two identical - rows (#2233). -- A prompt card's typed answer no longer picks one of two rows that look alike across scripts - (Cyrillic `о` beside Latin `o`), and a typed row number picks its row even when its name looks - like another row's. Commas or spaces alone on a multiple choice are the typed text, not an empty - answer (#2233). - -### Maintenance -- The Unicode case folding and confusables tables are generated only from source files whose SHA-256 - matches the pinned one (#2233). diff --git a/changelog.d/omp-startup-wait-extension-paths.md b/changelog.d/omp-startup-wait-extension-paths.md deleted file mode 100644 index 0260addf35..0000000000 --- a/changelog.d/omp-startup-wait-extension-paths.md +++ /dev/null @@ -1,6 +0,0 @@ -### Fixed -- Chat messages sent to a starting omp now also wait for herdr's integration when omp loads it - from the project's `.omp/extensions`, an `-e`/`--extension`/`--hook` file, or the agent directory - `PI_CODING_AGENT_DIR`, `PI_PROFILE` or `PI_CONFIG_DIR` names. An omp started with - `--no-extensions` or `--trusted-extension` is sent to at once instead of after 30 seconds, and a - wait that runs out without a report is now noted in the server log. diff --git a/changelog.d/omp-tool-approval-card.md b/changelog.d/omp-tool-approval-card.md deleted file mode 100644 index 86c6dea9db..0000000000 --- a/changelog.d/omp-tool-approval-card.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- omp's tool approval ("Allow tool: …") shows as an approval card again, with the call as its body - and Approve and Deny sent with the keys omp names, instead of a fallback card (omp 18.10 and - later; 18.13's "approve for this session" and grant rows are offered too). Reported by @Damin-Lee. diff --git a/changelog.d/opencode-skill-resize-attach.md b/changelog.d/opencode-skill-resize-attach.md deleted file mode 100644 index 3e10d9878d..0000000000 --- a/changelog.d/opencode-skill-resize-attach.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- An OpenCode `@skill` sent from Chat is no longer reported as not attached when the terminal is - resized while it is accepted, or when a narrow terminal's status row shows only the model. diff --git a/changelog.d/opencode-standalone-skills.md b/changelog.d/opencode-standalone-skills.md deleted file mode 100644 index 6454caefe6..0000000000 --- a/changelog.d/opencode-standalone-skills.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- An OpenCode 2 pane started with `--standalone` or `--server` now offers its skills as `@skill` - before its first session, even when no OpenCode background service has written its service file, - and a Chat `@skill` send to it shows a state once Chat has listed the pane's commands. diff --git a/changelog.d/own-ovis-port-url.md b/changelog.d/own-ovis-port-url.md deleted file mode 100644 index 16ab02e26a..0000000000 --- a/changelog.d/own-ovis-port-url.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A PC whose own Ovis asks for its access token (`OVIS_TOKEN`) now shows the port it really answers - on and its "Open that PC's Ovis" https link on its card and in the dialog, instead of the - bridge's registered port and no link, once that Ovis runs this version too. diff --git a/changelog.d/own-ovis-update-token-scope.md b/changelog.d/own-ovis-update-token-scope.md deleted file mode 100644 index 6decf298ef..0000000000 --- a/changelog.d/own-ovis-update-token-scope.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- The token another PC's app uses to update this PC's own Ovis now opens only the update status read - and the install request, each by its own method and with no query string. diff --git a/changelog.d/pair-code-once.md b/changelog.d/pair-code-once.md deleted file mode 100644 index 61827de784..0000000000 --- a/changelog.d/pair-code-once.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A pairing link is tried only once per page load, including when the sign-in screen returns. - If pairing succeeds but the browser does not stay signed in, the screen asks you to check - cookies instead of reporting that the already-used code is wrong or expired. diff --git a/changelog.d/pi-ask-user-card.md b/changelog.d/pi-ask-user-card.md deleted file mode 100644 index 2a7e53d814..0000000000 --- a/changelog.d/pi-ask-user-card.md +++ /dev/null @@ -1,6 +0,0 @@ -### Added -- The `ask_user` form of the `@eko24ive/pi-ask` pi package shows as a chat card and is answered - from the chat, one question per step, once the web UI's pi extension is installed with - `bun scripts/install-pi-integration.ts`. The answer goes to pi-ask through its own events, - never as typed keys; without the extension the form stays in Terminal (#1202). Reported by - @chobijaeyu. diff --git a/changelog.d/pi-branch-return-outcome.md b/changelog.d/pi-branch-return-outcome.md deleted file mode 100644 index d3e0e0b698..0000000000 --- a/changelog.d/pi-branch-return-outcome.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- A command sent from Chat to a pi session now shows its result when the session moved to another - branch and `/tree` came back before the result was written, instead of ending as unknown. diff --git a/changelog.d/pi-receipt-earlier-same-text.md b/changelog.d/pi-receipt-earlier-same-text.md deleted file mode 100644 index 9684b3dee8..0000000000 --- a/changelog.d/pi-receipt-earlier-same-text.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- A message sent to Pi from Ovis Chat no longer reads as delivered when the same text, typed into - Pi's terminal before it, reaches Pi's transcript first. diff --git a/changelog.d/pi-transcript-confirmation.md b/changelog.d/pi-transcript-confirmation.md deleted file mode 100644 index b20fc0cd4a..0000000000 --- a/changelog.d/pi-transcript-confirmation.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Pi sends retry a briefly incomplete conversation record before giving up transcript confirmation, - including when the writer paused before Ovis started reading the file. diff --git a/changelog.d/plugin-lifecycle-lock.md b/changelog.d/plugin-lifecycle-lock.md deleted file mode 100644 index 8cc3143a2c..0000000000 --- a/changelog.d/plugin-lifecycle-lock.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- Two plugin starts at the same moment, such as herdr's startup hook and the Start action, no - longer leave `stop` saying Ovis is not running while a server keeps going: starts and stops take - turns, one that waits says so in the plugin's log, and a start no longer opens a second server - while one an earlier start left running (herdr away, say) still runs. diff --git a/changelog.d/prompt-ownership-followups.md b/changelog.d/prompt-ownership-followups.md deleted file mode 100644 index 69a2c5fe7d..0000000000 --- a/changelog.d/prompt-ownership-followups.md +++ /dev/null @@ -1,10 +0,0 @@ -### Fixed -- An OmO question answered from a Chat card no longer goes to another open question when the - pane is too small to show the form's title: when the form left in view fits more than one open - question, the card is refused and nothing is sent. -- A Claude command sent from Chat beside the fullscreen diff panel no longer takes the question of - the same command typed in the terminal after an earlier send's echoes were counted without the - panel. -- A command sent to an OmO pane with two OmO processes holding sessions keeps its outcome on the - OmO it was sent to, also when it waited in the queue and herdr listed the other one first by - then, and never on a later process that got the OmO's process number. diff --git a/changelog.d/push-repair-failure-reason.md b/changelog.d/push-repair-failure-reason.md deleted file mode 100644 index 8c1ed65d58..0000000000 --- a/changelog.d/push-repair-failure-reason.md +++ /dev/null @@ -1,7 +0,0 @@ -### Fixed -- When **Turn alerts on again** cannot make a push subscription, the alerts notice and Settings now - say why: the browser would not make one (in Brave, its push service is off until **Use Google - services for push messaging** is on), the page's service worker is not running, or the PC did not - take it. Before, the button only flickered and the notice came back unchanged. -- The alerts notice can be dismissed. It stays closed on that device for the same problem, and - shows again for a different one or after alerts work again. Settings still shows the problem. diff --git a/changelog.d/push-retired-endpoint-checks.md b/changelog.d/push-retired-endpoint-checks.md deleted file mode 100644 index 018a55cb68..0000000000 --- a/changelog.d/push-retired-endpoint-checks.md +++ /dev/null @@ -1,8 +0,0 @@ -### Fixed -- A push endpoint its push service retired stays refused, however long ago that was, until its - owner's device is revoked or a thousand later retirements push its mark out. Before, after 30 days - another device that knew the endpoint could register it as its own, and so could another spelling - of it (a `#fragment`, an uppercase host or `:443`) at any time. -- A subscription its push service retired is removed even when `push-retired.json` cannot be - written (a full disk, a read-only state directory). Before, the failed write left it registered - and the next alert went to the dead endpoint again. diff --git a/changelog.d/reclaim-check-attach-grid.md b/changelog.d/reclaim-check-attach-grid.md deleted file mode 100644 index dffaee6d6f..0000000000 --- a/changelog.d/reclaim-check-attach-grid.md +++ /dev/null @@ -1,5 +0,0 @@ -### Maintenance -- The browser check that a focused window takes its pane back no longer times out waiting for a - resize after the first attach: since a new terminal attaches once its font is set, that attach - already carries the final grid, so the check now waits for the shell to report the grid each - window last asked for, by attach or by resize. diff --git a/changelog.d/release-guard-remote-bundle-published.md b/changelog.d/release-guard-remote-bundle-published.md deleted file mode 100644 index 810ca62f29..0000000000 --- a/changelog.d/release-guard-remote-bundle-published.md +++ /dev/null @@ -1,3 +0,0 @@ -### Maintenance -- The Release run now refuses while the remote PC bundle it names is only tagged: it waits until - that bundle's manifest and archives can be downloaded, as remote PCs download them. diff --git a/changelog.d/runner-cache-wait-test-load.md b/changelog.d/runner-cache-wait-test-load.md deleted file mode 100644 index e92d7e382e..0000000000 --- a/changelog.d/runner-cache-wait-test-load.md +++ /dev/null @@ -1,5 +0,0 @@ -### Maintenance -- The self-hosted runner launcher's tests of a hung first cache refresh no longer fail on a loaded - host: they wait for the refresh to hang through a FIFO the stub writes to (no polling), allow - 30 s for that and for the launcher to end instead of Bun's 5 s test timeout, and let no runner - start before the refresh has hung; only the stop on SIGTERM keeps a tight bound (4 s) (#2261). diff --git a/changelog.d/saved-pc-recovery-followups.md b/changelog.d/saved-pc-recovery-followups.md deleted file mode 100644 index f35e3f3a97..0000000000 --- a/changelog.d/saved-pc-recovery-followups.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- When a crash left the saved permission to connect to the PCs saved in herdr unreadable, Settings - now says to choose Connect on those PCs again, instead of telling you to add them again. diff --git a/changelog.d/scratch-folder-open-then-check.md b/changelog.d/scratch-folder-open-then-check.md deleted file mode 100644 index d5389c106b..0000000000 --- a/changelog.d/scratch-folder-open-then-check.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A file opened from a Claude Code session's scratch folder is served, described and drawn as a page - only from the file actually opened inside that folder: a link put in its place after it was found - no longer serves a file from outside the folder. diff --git a/changelog.d/seen-late-read-epoch.md b/changelog.d/seen-late-read-epoch.md deleted file mode 100644 index 188a1c5d37..0000000000 --- a/changelog.d/seen-late-read-epoch.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Read DONE dots no longer come back after herdr restarts on a PC: a late read of the old herdr run - could make the server drop the new run's read finishes and stop saving new ones. diff --git a/changelog.d/seen-old-epochs.md b/changelog.d/seen-old-epochs.md deleted file mode 100644 index ad0f7b11a9..0000000000 --- a/changelog.d/seen-old-epochs.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- The server no longer keeps or hands out the read finishes of a herdr run it knows has ended, so a - browser that reconnects stops writing them back into its storage, and the next change drops them - from `seen.json`. The records of a PC this server has not heard from since it started are kept. diff --git a/changelog.d/settings-history-stale-anchor.md b/changelog.d/settings-history-stale-anchor.md deleted file mode 100644 index b4a3d72ecc..0000000000 --- a/changelog.d/settings-history-stale-anchor.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- On a phone, a jump of several entries back through the browser's history menu from a Settings - opened again over a preview now goes to the pane it lands on. Settings no longer keeps the mark an - earlier opening from the command palette left behind, which made the jump count as closing it. diff --git a/changelog.d/sidebar-filter-focus-edges.md b/changelog.d/sidebar-filter-focus-edges.md deleted file mode 100644 index be37bbc7b5..0000000000 --- a/changelog.d/sidebar-filter-focus-edges.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- Closing a sidebar filter that the command palette opened no longer leaves the focus on nothing when - what opened it is gone; it goes to a workspace row. Opening or clicking a row's menu no longer closes - that empty filter, and words typed into it right after it lost the focus are no longer cleared. diff --git a/changelog.d/sidebar-token-hidden-snapshots.md b/changelog.d/sidebar-token-hidden-snapshots.md deleted file mode 100644 index 87a2da5689..0000000000 --- a/changelog.d/sidebar-token-hidden-snapshots.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- The session read, the `/ws` snapshot and a PC's relayed or proxied snapshots no longer carry the - token values herdr's sidebar rows hide, so no browser, watch-only ones included, receives them in - any snapshot. Another Ovis server reading a PC still gets them, to apply its own rows. diff --git a/changelog.d/sidebar-token-hide-operands.md b/changelog.d/sidebar-token-hide-operands.md deleted file mode 100644 index a9df52e27c..0000000000 --- a/changelog.d/sidebar-token-hide-operands.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- The agent rows' machine events and PC roster no longer carry the literal text and numbers of the - hide rules in herdr's sidebar rows, nor the token values those rules hide, so watch-only browsers - no longer receive them there, and a hidden value no longer shows for a moment while the page - loads. diff --git a/changelog.d/site-beta-android-wait.md b/changelog.d/site-beta-android-wait.md deleted file mode 100644 index e60e44a87f..0000000000 --- a/changelog.d/site-beta-android-wait.md +++ /dev/null @@ -1,6 +0,0 @@ -### Changed -- The Beta page on ovis.sh tells Android testers, in all four of its languages, to open the - opt-in link in Chrome on the phone rather than inside another app, that **You are a tester** - means they are in, to check that the Play Store app's profile is the same account, and that - Google Play takes a few hours after they join the group, so an app that is not found right - after joining is worth trying again later. diff --git a/changelog.d/tab-strip-wheel-scroll.md b/changelog.d/tab-strip-wheel-scroll.md deleted file mode 100644 index bc86fa0a0b..0000000000 --- a/changelog.d/tab-strip-wheel-scroll.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- A vertical mouse wheel over a tab strip whose tabs do not fit scrolls it sideways, so tabs past - its end can be reached with a mouse. diff --git a/changelog.d/terminal-arrows-clicks-deterministic.md b/changelog.d/terminal-arrows-clicks-deterministic.md deleted file mode 100644 index c1cbec5999..0000000000 --- a/changelog.d/terminal-arrows-clicks-deterministic.md +++ /dev/null @@ -1,5 +0,0 @@ -### Maintenance -- The terminal arrows and clicks browser check no longer fails now and then on a busy CI runner. - It reads each letter before pressing the arrow that follows it, waits for xterm to report the - mouse before clicking, and proves that nothing arrives by typing a mark instead of waiting a set - time. A new unit test checks that the server holds an arrow back after the typing before it. diff --git a/changelog.d/terminal-bundled-mono.md b/changelog.d/terminal-bundled-mono.md deleted file mode 100644 index f3a21b90a0..0000000000 --- a/changelog.d/terminal-bundled-mono.md +++ /dev/null @@ -1,4 +0,0 @@ -### Changed -- The terminal draws its Latin text in the bundled JetBrains Mono (regular and bold) on every device, - so Ovis for Mac, Safari (the installed app) and Chrome on the same Mac show the same font, row height - and number of rows. A font chosen in Settings still takes its place. diff --git a/changelog.d/terminal-hangul-line-gap.md b/changelog.d/terminal-hangul-line-gap.md deleted file mode 100644 index 1e7d4f8743..0000000000 --- a/changelog.d/terminal-hangul-line-gap.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- Korean lines in the terminal no longer nearly touch: Hangul is widened to its two cells - instead of enlarged, so it keeps its own height, and a row is made tall enough for Hangul and a - gap below it where the Latin font's line is shorter (Menlo, Consolas), keeping every row where it - is not. diff --git a/changelog.d/terminal-hangul-seam.md b/changelog.d/terminal-hangul-seam.md deleted file mode 100644 index 8ba9e83bc7..0000000000 --- a/changelog.d/terminal-hangul-seam.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Korean text on a background colour (Claude Code's prompt, a highlighted or inverse line) no longer - shows a thin light line after each word in the terminal, in Ovis for Mac, Safari and Chrome. diff --git a/changelog.d/terminal-powerline-late-font.md b/changelog.d/terminal-powerline-late-font.md deleted file mode 100644 index 908389bf10..0000000000 --- a/changelog.d/terminal-powerline-late-font.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- Powerline separators in a prompt no longer make the terminal redraw every row when the icon font - arrives: they are painted as boxes, not drawn from the font. A pane that prints icons still - redraws once their font arrives, so they are sized from it. diff --git a/changelog.d/terminal-sync-output-regression.md b/changelog.d/terminal-sync-output-regression.md deleted file mode 100644 index ef56ab95d9..0000000000 --- a/changelog.d/terminal-sync-output-regression.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- The browser lane follows synchronized output (`CSI ? 2026 h` … `l`) from a real pane to the - rendered rows: the bridge passes herdr's frames intact, herdr holds a pane's frame until it - closes, and the run counts the renders xterm 5.5 draws from half a frame (#1617). diff --git a/changelog.d/this-device-badge-one-line.md b/changelog.d/this-device-badge-one-line.md deleted file mode 100644 index d3bf66e502..0000000000 --- a/changelog.d/this-device-badge-one-line.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Settings → Phone & devices keeps the "This device" badge on one line beside a device's name on a - phone, moving it whole to the next line when the name fills the row, instead of splitting it. diff --git a/changelog.d/timing-flakes-under-load.md b/changelog.d/timing-flakes-under-load.md deleted file mode 100644 index 515681d286..0000000000 --- a/changelog.d/timing-flakes-under-load.md +++ /dev/null @@ -1,8 +0,0 @@ -### Maintenance -- Three tests that failed on busy hosts with nothing wrong in the code now measure what the code - controls: the browser lane's stubbed runs get a 60 s hang guard, which ends the lane's process - tree and fails with what it printed, instead of a 5 s limit (#2110); the Codex matcher's - bounded-time cases compare the CPU time of an input with that of one as long that the code - reads in one pass, which leaves the work both share out of the ratio while each still fails the - quadratic scan it guards (#2142); and the OpenCode first-key gap is measured from the last thing that send itself - waited on (#2143). diff --git a/changelog.d/todo-run-focus-raw-attempts.md b/changelog.d/todo-run-focus-raw-attempts.md deleted file mode 100644 index abfe059356..0000000000 --- a/changelog.d/todo-run-focus-raw-attempts.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- When the agent's next todo update folds the update you were on into a Plan row, the keyboard focus - stays on that update instead of dropping to the page, and an update opened inside the Plan row - now shows the input it sent and the output it got back, not only the list again. diff --git a/changelog.d/typecheck-gc.md b/changelog.d/typecheck-gc.md deleted file mode 100644 index 32244053e8..0000000000 --- a/changelog.d/typecheck-gc.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- Native TypeScript checks use less CPU with `GOGC=400` and at most 32 Go scheduler threads, - retaining GC for concurrent CI runners. Caller `GOGC`, `GOMAXPROCS`, and `GOMEMLIMIT` - settings are preserved. diff --git a/changelog.d/usage-login-restart-lock.md b/changelog.d/usage-login-restart-lock.md deleted file mode 100644 index b95d7722b3..0000000000 --- a/changelog.d/usage-login-restart-lock.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- An Ovis restart while a Sign in again or Add account login is still open in its terminal tab no - longer lets a second login start in the same credential home: the restarted server finds the tab - still running and answers that a sign-in is already open, until that login ends. diff --git a/changelog.d/usage-sign-in-again.md b/changelog.d/usage-sign-in-again.md deleted file mode 100644 index 4350167106..0000000000 --- a/changelog.d/usage-sign-in-again.md +++ /dev/null @@ -1,4 +0,0 @@ -### Added -- An expired Claude or Codex account in Subscription usage has a **Sign in again** button, in Settings and in the - usage popover: it opens the official sign-in in a terminal tab for that same account, replacing - its expired sign-in instead of adding a new account. diff --git a/changelog.d/voice-provider-field-limit.md b/changelog.d/voice-provider-field-limit.md deleted file mode 100644 index 7b5b4c2141..0000000000 --- a/changelog.d/voice-provider-field-limit.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- Voice input no longer fails in a pane with many slash commands when the transcription server - caps a request at 32 fields (codex-lb does): only as many command hints are sent as fit. diff --git a/changelog.d/watch-pane-commands-refused.md b/changelog.d/watch-pane-commands-refused.md deleted file mode 100644 index 95f06a8e65..0000000000 --- a/changelog.d/watch-pane-commands-refused.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A device paired to watch only can no longer read a pane's command rows (custom commands' first - lines and file paths) through `/api/pane/commands`, on this PC or another: they are refused as a - folder's commands already were, and its chat no longer keeps asking for them. diff --git a/changelog.d/watch-pane-files-refused.md b/changelog.d/watch-pane-files-refused.md deleted file mode 100644 index b6044d2bbc..0000000000 --- a/changelog.d/watch-pane-files-refused.md +++ /dev/null @@ -1,4 +0,0 @@ -### Fixed -- A device paired to watch only can no longer list the file paths under a pane's folder through - `/api/pane/files`, or read a plugin action run's output through `/api/plugin/action`, on this PC - or another: they are refused as a folder listing already was. diff --git a/changelog.d/watch-worktree-list-refused.md b/changelog.d/watch-worktree-list-refused.md deleted file mode 100644 index 941e1e63e4..0000000000 --- a/changelog.d/watch-worktree-list-refused.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- A device paired to watch only can no longer list a repository's checkouts (their folders and - branches, those not open in herdr too) through `/api/worktree/list`, on this PC or another: it is - refused as a folder listing already was. Its sidebar no longer asks for them and shows no branch - names. diff --git a/changelog.d/windows-app-update-followups.md b/changelog.d/windows-app-update-followups.md deleted file mode 100644 index ff7fe3a8f7..0000000000 --- a/changelog.d/windows-app-update-followups.md +++ /dev/null @@ -1,8 +0,0 @@ -### Fixed -- Ovis for Windows' Update for a server under the old id installs the newest release even when - the PC sets an older `OVIS_REF`, and when the installer or herdr's reinstall fails, the server - that ran before starts again, with or without herdr running. A running server that reports no - version and runs without the update supervisor, such as one just started whose supervisor has - not reported yet, is no longer offered Update, and the - version check waits once more for a server slow to answer and takes a token set only in the - environment. diff --git a/changelog.d/windows-app-update-old-server.md b/changelog.d/windows-app-update-old-server.md deleted file mode 100644 index 71072fb8da..0000000000 --- a/changelog.d/windows-app-update-old-server.md +++ /dev/null @@ -1,6 +0,0 @@ -### Fixed -- Ovis for Windows no longer offers Start for an Ovis server older than the app, or one installed - under the old `devswha.herdr-web-ui` id: it shows Update, which updates it in place (herdr, Bun, - settings and token stay), starts it, sets herdr to start at sign-in and ends at the phone's QR - code. It says so when it cannot read the server's version, and names a herdr that is too old. - The plugin's `status` now prints the version that runs, which can be newer than herdr's list. diff --git a/changelog.d/windows-app-update-outlived-server.md b/changelog.d/windows-app-update-outlived-server.md deleted file mode 100644 index 87b98d26f9..0000000000 --- a/changelog.d/windows-app-update-outlived-server.md +++ /dev/null @@ -1,10 +0,0 @@ -### Fixed -- Ovis for Windows and install.ps1 now stop an Ovis server from before the rename (0.4.12 and older) - that kept running after herdr closed, so Update no longer fails with "the file is in use" and then - keeps showing the same Update screen. -- Try again after a failed Update in Ovis for Windows reads the PC again instead of running the old - server's removed files ("Module not found"). -- Ovis for Windows shows the phone QR code for a server that asks for a token, instead of telling a - PC that already has Tailscale to install it. -- The log in Ovis for Windows shows the installer's messages as plain lines, not raw PowerShell - CLIXML. diff --git a/changelog.d/windows-home-lookups.md b/changelog.d/windows-home-lookups.md deleted file mode 100644 index 460ae06851..0000000000 --- a/changelog.d/windows-home-lookups.md +++ /dev/null @@ -1,3 +0,0 @@ -### Fixed -- On native Windows without `HOME`, chat transcripts and session lists find each agent's store - under `USERPROFILE` too, as skill discovery already does. diff --git a/changelog.d/windows-interactive-start.md b/changelog.d/windows-interactive-start.md deleted file mode 100644 index 2c25b02b09..0000000000 --- a/changelog.d/windows-interactive-start.md +++ /dev/null @@ -1,10 +0,0 @@ -### Fixed -- Windows remote PCs wait for Windows sign-in before starting herdr, so Codex can use its - private-desktop sandbox. Startup options offer an explicit start without sign-in for headless - PCs, including when Task Scheduler cannot start herdr, with the error and sandbox and desktop-tool - limitations shown before that one start. Existing herdr servers are reused without restarting - their panes. Signing out of Windows ends a desktop-started herdr and its panes; lock the PC - instead. SSH disconnects and bridge updates leave them running. -- Slow Windows launchers keep their startup options through the launch deadline. Failed startup - reviews restore saved PCs' reconnection attempts; Task Scheduler failures show their own error - instead of a sign-in instruction and stop background retries until startup options are reviewed. diff --git a/changelog.d/windows-stop-tree-test-pid-reuse.md b/changelog.d/windows-stop-tree-test-pid-reuse.md deleted file mode 100644 index 5d11d3dc98..0000000000 --- a/changelog.d/windows-stop-tree-test-pid-reuse.md +++ /dev/null @@ -1,5 +0,0 @@ -### Maintenance -- The Windows plugin test that stops the server's process tree no longer fails now and then on - CI: it took a process whose recorded parent number Windows had handed on to a server process - for part of the tree, and waited for unrelated processes, its own test runner among them, to - exit. It now walks the tree the way `stop` does, skipping a process older than its parent. diff --git a/changelog.d/windows-terminal-qa-merge-checkout.md b/changelog.d/windows-terminal-qa-merge-checkout.md deleted file mode 100644 index f5ab22244e..0000000000 --- a/changelog.d/windows-terminal-qa-merge-checkout.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- The native Windows terminal check now tests a pull request's merge with main, as the other CI - checks do. On a branch cut before the check's script was fixed, it ran that branch's old script - and timed out after the wheel pan, which made the check look flaky. diff --git a/changelog.d/windows-terminal-qa-workflow.md b/changelog.d/windows-terminal-qa-workflow.md deleted file mode 100644 index f0f4b7c19b..0000000000 --- a/changelog.d/windows-terminal-qa-workflow.md +++ /dev/null @@ -1,6 +0,0 @@ -### Maintenance -- The native Windows terminal check (a mirrored PowerShell pane's wheel, touch, panning and IME - input in Chromium) now runs in CI on a Windows runner, `windows-terminal-qa.yml`, for pull - requests that touch the mirror, the terminal's viewport code or the xterm patch, and weekly. It - now picks Original width for the pane first: since wide mirrors fold on a phone by default, its - panning steps could not pass. diff --git a/changelog.d/xterm-6-whole-frames.md b/changelog.d/xterm-6-whole-frames.md deleted file mode 100644 index b43864c9d5..0000000000 --- a/changelog.d/xterm-6-whole-frames.md +++ /dev/null @@ -1,5 +0,0 @@ -### Fixed -- The terminal no longer shows half of an agent's new screen over half of its old one while the - agent streams, which happened most often with Korean text: the browser terminal is now xterm.js - 6, which draws a frame only once it is whole (#1617). Trackpad scrolling, Option+arrow word moves - and Korean typing keep working as before. diff --git a/changelog.d/xterm-build-cache-race.md b/changelog.d/xterm-build-cache-race.md deleted file mode 100644 index cfa6d7d405..0000000000 --- a/changelog.d/xterm-build-cache-race.md +++ /dev/null @@ -1,4 +0,0 @@ -### Maintenance -- Builds running at once in one checkout, like the browser lane's parallel workers, no longer fail - now and then with a missing xterm export: xterm's source is built once into its own cache - directory and never rewritten while another build reads it. diff --git a/herdr-plugin.toml b/herdr-plugin.toml index ea2d2de6f2..18687a097e 100644 --- a/herdr-plugin.toml +++ b/herdr-plugin.toml @@ -1,6 +1,6 @@ id = "devswha.ovis" name = "Ovis" -version = "0.4.19" +version = "0.4.20" min_herdr_version = "0.9.0" description = "Ovis, the browser and phone client for herdr: chat and live terminal for every agent pane, remote PCs over SSH, web push alerts" platforms = ["linux", "macos", "windows"] diff --git a/package.json b/package.json index 56b76d5830..20ef24c7ce 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ovis", "private": true, - "version": "0.4.19", + "version": "0.4.20", "type": "module", "description": "Ovis, the browser and phone client for herdr - live herdr workspaces, panes and agents in a web UI", "license": "MIT", diff --git a/release-summaries.json b/release-summaries.json index 65771c0ae8..88e61f5fd1 100644 --- a/release-summaries.json +++ b/release-summaries.json @@ -1,4 +1,98 @@ { + "0.4.20": { + "en": { + "new": [ + "Chat reads Letta Code conversations.", + "Start Claude Code with Ultracode on, at your chosen effort level.", + "Sign in again to an expired Claude or Codex account from usage.", + "Give Ovis a pure black background with the new Black theme.", + "Send Claude Code's existing draft without losing your Chat message." + ], + "improved": [ + "The terminal draws whole screens without mixing old and new output.", + "A sent Chat message appears at once while the agent takes it.", + "Switching tabs gets you back to typing sooner.", + "Long OMO and GJC chats refresh faster while the agent works.", + "Terminal text uses the same coding font on Mac, Safari and Chrome." + ], + "fixed": [ + "Korean typed in the iOS terminal arrives as whole syllables.", + "Chat keeps following new output when work blocks fold.", + "Claude Code Chat follows the conversation after branching.", + "Slow file previews no longer freeze every terminal.", + "Windows app updates recover from an old server left running." + ] + }, + "ko": { + "new": [ + "Letta Code 대화를 채팅에서 읽을 수 있습니다.", + "원하는 노력 수준을 고르고 Ultracode를 켠 채 Claude Code를 시작합니다.", + "사용량 화면에서 만료된 Claude나 Codex 계정에 다시 로그인합니다.", + "새 Black 테마로 Ovis의 배경을 완전한 검정으로 바꿀 수 있습니다.", + "채팅 메시지를 남겨 둔 채 Claude Code 입력창의 초안을 보낼 수 있습니다." + ], + "improved": [ + "터미널이 이전 출력과 새 출력을 섞지 않고 완성된 화면을 그립니다.", + "보낸 채팅 메시지가 에이전트에 전달되는 동안에도 바로 보입니다.", + "탭을 바꾼 뒤 더 빨리 입력을 시작할 수 있습니다.", + "긴 OMO와 GJC 채팅도 에이전트가 일하는 동안 더 빨리 갱신됩니다.", + "Mac 앱, Safari, Chrome에서 터미널 글꼴이 같아집니다." + ], + "fixed": [ + "iOS 터미널에서 입력한 한글이 자모로 나뉘지 않고 온전한 글자로 전달됩니다.", + "작업 블록이 접혀도 채팅이 새 출력을 계속 따라갑니다.", + "Claude Code에서 대화를 분기한 뒤에도 채팅이 그 대화를 따라갑니다.", + "파일 미리보기가 느려도 모든 터미널이 함께 멈추지 않습니다.", + "Windows 앱이 남아 있던 옛 서버 때문에 실패한 업데이트를 복구합니다." + ] + }, + "ja": { + "new": [ + "Letta Code の会話をチャットで読めます。", + "好みの思考レベルで Ultracode をオンにして Claude Code を起動できます。", + "使用量の画面から、期限切れの Claude や Codex アカウントに再ログインできます。", + "新しい Black テーマで Ovis の背景を真っ黒にできます。", + "チャットの入力を残したまま、Claude Code の入力欄にある下書きを送れます。" + ], + "improved": [ + "ターミナルが古い出力と新しい出力を混ぜず、完成した画面を描画します。", + "送ったチャットメッセージが、エージェントに届くまでの間もすぐに表示されます。", + "タブを切り替えた後、より早く入力を始められます。", + "長い OMO や GJC のチャットも、エージェントの作業中に素早く更新されます。", + "Mac アプリ、Safari、Chrome でターミナルのフォントがそろいます。" + ], + "fixed": [ + "iOS のターミナルで入力した韓国語が、字母に分かれず音節のまま届きます。", + "作業ブロックが折りたたまれても、チャットが新しい出力を追い続けます。", + "Claude Code で会話を分岐した後も、チャットがその会話を追います。", + "ファイルのプレビューが遅くても、すべてのターミナルが止まらなくなりました。", + "古いサーバーが残って失敗した Windows アプリの更新から復旧できます。" + ] + }, + "zh": { + "new": [ + "可以在聊天中阅读 Letta Code 对话。", + "按所选的思考强度,开启 Ultracode 启动 Claude Code。", + "可以从用量界面重新登录已过期的 Claude 或 Codex 账号。", + "新的 Black 主题可以将 Ovis 背景设为纯黑色。", + "可以保留聊天输入框中的消息,发送 Claude Code 输入框里已有的草稿。" + ], + "improved": [ + "终端会绘制完整画面,不再混杂新旧输出。", + "聊天消息发送后立即显示,无需等代理接收。", + "切换标签页后,可以更快开始输入。", + "代理工作时,较长的 OMO 和 GJC 聊天也能更快刷新。", + "Mac 应用、Safari 和 Chrome 的终端使用相同的编程字体。" + ], + "fixed": [ + "在 iOS 终端输入的韩文会以完整音节传送,不再拆成字母。", + "工作块折叠后,聊天仍会跟随新输出。", + "在 Claude Code 中分支后,聊天仍会跟随该对话。", + "文件预览缓慢时,不再导致所有终端卡住。", + "Windows 应用可以从旧服务器残留导致的更新失败中恢复。" + ] + } + }, "0.4.19": { "en": { "new": [ diff --git a/shared/machines.ts b/shared/machines.ts index ca68bfe033..aaaae40599 100644 --- a/shared/machines.ts +++ b/shared/machines.ts @@ -5,7 +5,7 @@ import type { SeenFinish } from "./seen.ts"; export const LOCAL_MACHINE = "local"; export const BRIDGE_PROTOCOL = 1; -export const REMOTE_BUNDLE_VERSION = "38"; +export const REMOTE_BUNDLE_VERSION = "39"; export interface PaneTarget { machine_id: string; pane_id: string } export type MachineState = "connecting" | "connected" | "reconnecting" | "disconnected" | "error"; export interface SshTarget { From 184dc1204a6f52c7b33f3f93e778341bba142b00 Mon Sep 17 00:00:00 2001 From: devswha Date: Thu, 29 Oct 2026 17:34:20 +0900 Subject: [PATCH 2/4] chore(release): credit external PRs without fragments Co-authored-by: sisyphus-dev-ai --- CHANGELOG.md | 11 +++++++++++ release-summaries.json | 8 ++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b278b4daf..57e06a0716 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ between releases do not reach them. Remote-PC runtime bundles are versioned sepa ## [0.4.20] - 2026-10-29 ### Added +- In New workspace and New tab, Claude Code's Ultracode switch fits on one line under Model and + Effort, with its minimum version visible on a phone too. + ([#2282](https://github.com/devswha/ovis/pull/2282) by @fivetaku) - The server lists every agent Ovis can install, with each vendor's own install command for the PC's operating system and whether the agent is installed there, at which version (`GET /api/agent-catalog`, also for remote PCs). Nothing is installed yet: the install flow @@ -82,6 +85,12 @@ between releases do not reach them. Remote-PC runtime bundles are versioned sepa ([#2272](https://github.com/devswha/ovis/pull/2272)) ### Fixed +- A message to Claude Code is sent at once when its own turn has ended and only background + agents are still working, instead of waiting for those agents to finish. + ([#2271](https://github.com/devswha/ovis/pull/2271) by @CharleoYang) +- Switching Chat tabs loads a smaller page of history and keeps more tabs' pages ready, instead + of fetching the whole page again at each switch. Settings lets you choose the history page size. + ([#2274](https://github.com/devswha/ovis/pull/2274) by @CharleoYang) - A terminal resized while it attaches no longer shows its first screen at the old size, or takes input before the program has the new size. The bridge now waits for herdr's redraw at the terminal's current size, also after a resize back to the size it started at, for up to a @@ -520,6 +529,8 @@ between releases do not reach them. Remote-PC runtime bundles are versioned sepa ([#2335](https://github.com/devswha/ovis/pull/2335)) ### Maintenance +- Diagrams use updated DOMPurify and KaTeX versions without their published security advisories. + ([#2290](https://github.com/devswha/ovis/pull/2290) by @DravenDou) - A stopped server also closes its OpenCode event stream and forgets the OpenCode panes it verified, as it already did for Codex's app-server connections. The session list's Resume window and Hermes's result readers drop their duplicate code paths. diff --git a/release-summaries.json b/release-summaries.json index 88e61f5fd1..f6d13f127d 100644 --- a/release-summaries.json +++ b/release-summaries.json @@ -11,7 +11,7 @@ "improved": [ "The terminal draws whole screens without mixing old and new output.", "A sent Chat message appears at once while the agent takes it.", - "Switching tabs gets you back to typing sooner.", + "Chat tabs reopen faster, with a choice of history page size.", "Long OMO and GJC chats refresh faster while the agent works.", "Terminal text uses the same coding font on Mac, Safari and Chrome." ], @@ -34,7 +34,7 @@ "improved": [ "터미널이 이전 출력과 새 출력을 섞지 않고 완성된 화면을 그립니다.", "보낸 채팅 메시지가 에이전트에 전달되는 동안에도 바로 보입니다.", - "탭을 바꾼 뒤 더 빨리 입력을 시작할 수 있습니다.", + "채팅 탭이 더 빨리 열리고, 한 번에 불러올 대화 기록의 양을 고를 수 있습니다.", "긴 OMO와 GJC 채팅도 에이전트가 일하는 동안 더 빨리 갱신됩니다.", "Mac 앱, Safari, Chrome에서 터미널 글꼴이 같아집니다." ], @@ -57,7 +57,7 @@ "improved": [ "ターミナルが古い出力と新しい出力を混ぜず、完成した画面を描画します。", "送ったチャットメッセージが、エージェントに届くまでの間もすぐに表示されます。", - "タブを切り替えた後、より早く入力を始められます。", + "チャットのタブが素早く開き、一度に読み込む履歴の量を選べます。", "長い OMO や GJC のチャットも、エージェントの作業中に素早く更新されます。", "Mac アプリ、Safari、Chrome でターミナルのフォントがそろいます。" ], @@ -80,7 +80,7 @@ "improved": [ "终端会绘制完整画面,不再混杂新旧输出。", "聊天消息发送后立即显示,无需等代理接收。", - "切换标签页后,可以更快开始输入。", + "聊天标签页打开更快,还可以选择每次加载的历史记录数量。", "代理工作时,较长的 OMO 和 GJC 聊天也能更快刷新。", "Mac 应用、Safari 和 Chrome 的终端使用相同的编程字体。" ], From 0ffa3d45c82af762f44dd4f17e9040f8a16f196e Mon Sep 17 00:00:00 2001 From: devswha Date: Thu, 29 Oct 2026 17:35:01 +0900 Subject: [PATCH 3/4] chore(release): prepare iOS build 3 for both targets Co-authored-by: sisyphus-dev-ai --- app/ios/App/App.xcodeproj/project.pbxproj | 4 ++-- app/store/ios.md | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/ios/App/App.xcodeproj/project.pbxproj b/app/ios/App/App.xcodeproj/project.pbxproj index 4e512a2d05..0b022ecdfe 100644 --- a/app/ios/App/App.xcodeproj/project.pbxproj +++ b/app/ios/App/App.xcodeproj/project.pbxproj @@ -386,7 +386,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -445,7 +445,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 3; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; diff --git a/app/store/ios.md b/app/store/ios.md index 43b5006095..49a974d396 100644 --- a/app/store/ios.md +++ b/app/store/ios.md @@ -13,7 +13,7 @@ Extension, a later build; see [Later builds](#later-builds)). |---|---|---| | Bundle ID | `sh.ovis.app` | `PRODUCT_BUNDLE_IDENTIFIER`, `app/ios/App/App.xcodeproj` | | Version | `1.0` | `MARKETING_VERSION`, in the project's build settings, which the app and its extension share (not a target's General tab) | -| Build | `1` | `CURRENT_PROJECT_VERSION`, in the project's build settings too; raise it by one for every upload, TestFlight included | +| Build | `3` | `CURRENT_PROJECT_VERSION`, in the project's build settings too; raise it by one for every upload, TestFlight included | | Devices | iPhone and iPad | `TARGETED_DEVICE_FAMILY = "1,2"`, so the listing needs iPad screenshots too | | Minimum iOS | 15.0 | `IPHONEOS_DEPLOYMENT_TARGET` | | Signing | Automatic, no team yet | the owner picks the team in Xcode (section 3) | @@ -38,6 +38,12 @@ Extension, a later build; see [Later builds](#later-builds)). ## 3. Build and upload (the owner, on his Mac with Xcode) +Build 3 is prepared for the next upload. The last documented upload is version 1.0 build 2, +submitted on 2026-10-24 ([docs/native-app.md](../../docs/native-app.md#phase-1-first-store-release), +recorded in commit `54fdadc1`). Check App Store Connect before uploading in case a later build +has already been uploaded. The App and OvisNotifications targets inherit the same project-level +build number in Debug and Release. + ```bash git switch main && git pull bun install && cd app && bun install && bun run sync # build:web, then cap sync ios From 7e64e7c5163b0548b1c147030eb77d29365a4d9b Mon Sep 17 00:00:00 2001 From: devswha Date: Thu, 29 Oct 2026 18:05:36 +0900 Subject: [PATCH 4/4] chore(release): clarify iOS fix delivery Co-authored-by: sisyphus-dev-ai --- CHANGELOG.md | 3 ++- release-summaries.json | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27a88ae864..45d9760f7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -261,10 +261,11 @@ between releases do not reach them. Remote-PC runtime bundles are versioned sepa - Korean typed in the terminal in the iOS app now reaches the pane as whole syllables (안녕). Before, each jamo went out on its own (ㅇㅏㄴㄴㅕㅇ) because the app's web view does not say "Safari" in its user agent. Safari and the Home Screen app already worked. + This comes with the PC update; no new iOS app build is needed. ([#2307](https://github.com/devswha/ovis/pull/2307)) - The iOS app no longer shows WebKit's form bar (the up and down arrows and the check mark) over the keyboard, so only Ovis's own key bar sits above it and the page keeps that row of the - screen. + screen. This needs the new iOS app build; updating the PC alone does not remove the bar. ([#2109](https://github.com/devswha/ovis/pull/2109)) - A message sent to a PC whose Ovis is too old to confirm messages is no longer treated as delivered: the composer, Send now on a held copy and the held queue's Send now keep its text as a diff --git a/release-summaries.json b/release-summaries.json index f6d13f127d..7e649753bf 100644 --- a/release-summaries.json +++ b/release-summaries.json @@ -16,7 +16,7 @@ "Terminal text uses the same coding font on Mac, Safari and Chrome." ], "fixed": [ - "Korean typed in the iOS terminal arrives as whole syllables.", + "Korean typing in the iOS app is fixed by the PC update, without a new app build.", "Chat keeps following new output when work blocks fold.", "Claude Code Chat follows the conversation after branching.", "Slow file previews no longer freeze every terminal.", @@ -39,7 +39,7 @@ "Mac 앱, Safari, Chrome에서 터미널 글꼴이 같아집니다." ], "fixed": [ - "iOS 터미널에서 입력한 한글이 자모로 나뉘지 않고 온전한 글자로 전달됩니다.", + "PC를 업데이트하면 새 iOS 앱을 설치하지 않아도 터미널 한글 입력이 바로잡힙니다.", "작업 블록이 접혀도 채팅이 새 출력을 계속 따라갑니다.", "Claude Code에서 대화를 분기한 뒤에도 채팅이 그 대화를 따라갑니다.", "파일 미리보기가 느려도 모든 터미널이 함께 멈추지 않습니다.", @@ -62,7 +62,7 @@ "Mac アプリ、Safari、Chrome でターミナルのフォントがそろいます。" ], "fixed": [ - "iOS のターミナルで入力した韓国語が、字母に分かれず音節のまま届きます。", + "PC を更新すると、iOS アプリを更新せずにターミナルの韓国語入力が直ります。", "作業ブロックが折りたたまれても、チャットが新しい出力を追い続けます。", "Claude Code で会話を分岐した後も、チャットがその会話を追います。", "ファイルのプレビューが遅くても、すべてのターミナルが止まらなくなりました。", @@ -85,7 +85,7 @@ "Mac 应用、Safari 和 Chrome 的终端使用相同的编程字体。" ], "fixed": [ - "在 iOS 终端输入的韩文会以完整音节传送,不再拆成字母。", + "更新电脑上的 Ovis 即可修复 iOS 终端的韩文输入,无需更新手机应用。", "工作块折叠后,聊天仍会跟随新输出。", "在 Claude Code 中分支后,聊天仍会跟随该对话。", "文件预览缓慢时,不再导致所有终端卡住。",