Repository navigation
RTVision T3 Code 0.0.69
RTVision T3 Code 0.0.69
This release merges 163 upstream commits through 7b797f2b90918e7bae0f710dcf24018b8b0843dc and preserves RTVision's Gitea, Vim, terminal-editor, SSH runtime, disk-warning, migration-recovery, and release integrations.
Install the Node package from RTVision's registry:
npm install --global --registry=https://npm-registry.rtvision.com/ @rtvision/t3@0.0.69Desktop installers are unsigned. Linux standalone executables require glibc. Alpine installations use the Node package and build native dependencies from source; the managed updater and OpenRC preparation helper do this automatically.
Release source: 952e8b862.
Resulting changes
Agents, providers, and orchestration
- Agents can watch a pull request and wake when checks, reviews, or conflicts need attention. Watchers read paginated review replies.
- T3 MCP tools accept explicit thread and project targets, and providers share MCP tool presentation.
- Delegated review rounds stay on the task API. Subagents do not inherit their parent's pull-request links.
- Restarts preserve delegated tasks, queued threads, stop requests, and settled state. Merged threads remain settled after provider wake events.
- Working timers survive background wakes. Threads remain working while Claude starts a wake turn, and background notifications queue during active tools.
- Stop interrupts Claude commands and ends lingering Codex commands or dev servers after settlement or provider switches.
- Claude model changes preserve running background agents. Claude recovers from self-entered plan mode and from stuck background commands.
- Claude discovers commands per workspace, handles scalar skill frontmatter, and reports skill names and subagent models correctly. Codex resumes archived native sessions and avoids API-key startup warnings and undefined auth-token fields. OpenCode reasoning labels have a fallback.
- Earlier app agent transcript pages are restored. Next-turn steering retains the newest selection.
- Shared keyed locks release idle entries. SQLite transactions wait for the write lock.
Connections, environments, and runtime
- One environment can be reached over multiple routes, including discovered LAN and tailnet addresses.
- Reconnects use jittered backoff while preserving healthy sockets. Closing a busy stream preserves the connection, and relay disconnects do not become thread errors.
- T3 Connect fixes colliding prepared statements, and subagent threads stop sending relay tombstones.
- New-thread keyboard controls can select the next machine. No-project drafts can switch machines, and clients share opening a machine's No project folder.
- Slow editor discovery eventually updates the client. Outdated servers can be updated even when the client cannot connect.
- Provider installs expose one-click updates. Manual update commands match the installed CLI and proven npm prefix.
- CLI launch validation rejects accidental server starts. Saving symlinked settings preserves the link.
- Linux device hubs recover their runtime directory. Media paths support home-relative paths.
- Idle shells stop reloading every project once a minute. Background dev servers no longer falsely mark threads as waiting.
Pull requests and source control
- Hold Shift for GitHub pull-request quick actions. Close batches by dragging across rows, cancel before release with Escape, and queue actions safely.
- Concurrent GitHub routing metadata probes share active reads.
- Linked pull requests open correctly. Issue links show a useful not-found state in the pull-request viewer.
- Forgejo mergeability no longer implies a conflict without evidence. Commit-message generation preserves staged changes.
- Azure DevOps uses its correct mark.
Web and desktop interface
- Mermaid fenced blocks render as diagrams. Timeline shell commands and tool inputs receive syntax highlighting.
- Tool calls show their call above a muted result. Expanded calls expose their output, and empty calls do not expand. Work logs lose nested indentation.
- Command palette results are virtualized. DOM updates avoid restyling the whole page, and monospace fonts are validated when selected.
- Sidebar buttons can be swept to settle, un-settle, or wake threads. Draft threads gain a context menu, and unsent drafts can open the thread picker.
- Keyboard fixes restore background new-thread creation, support sending and opening a new thread, and clear stale chat action shortcuts.
- Sending to older threads preserves scroll position. New worktree threads stop flickering. Unseen shell completion remains visible.
- Working sections keep their order while agents finish or wake. Subagent cards show the provider account, match finish notifications, and show follow-ups as running.
- Thread details show the remote machine. Thinking rows after failed tools expand their tool calls.
- Composer and panel action icons morph between states. Model pickers size to their content, thread info panels lose the square shadow, and icons align correctly.
- Sidebar branding, build pills, and breadcrumbs behave better at different font sizes, zoom levels, and collapse states. Secondary hovering pointers reveal sidebar actions. Unpin hover shows the pin-off icon.
- Imported themes keep switches and focus rings visible. Thread status dots and legacy sidebar options have accessible labels.
- Workspace panels stay below dialogs and dock beside chat on narrow windows. Draft composer spacing is reduced.
- Timeline tooltips dismiss on scroll. Provider update details open from both icons, and device diagnostics appear before hub readiness.
- Browser automation clicks preserve composer focus. Project actions open previews correctly, and preview mute and Woke dismissal synchronize.
- Desktop dark-mode browser tabs render markdown visibly. The app prints its version before initialization and keeps titlebar controls inset when zoomed.
- V2 desktop imports recover stashed prompts and drafts from the V1 profile.
- Desktop preview inspector object retention is bounded, and renderer identity/history is recorded for diagnostics.
- Failed workspace preparation can be retried.
Mobile
- Back navigation from agents and finished subagents returns to their parent thread.
- iOS threads keep scroll position, and the final line of markdown replies stays visible.
- Subagent details are complete. Failed sends show their reason, and queued message removal is tappable.
- Dictation survives navigation with an edge control; its timer keeps a stable width.
- Full-screen simulator viewing exposes controls on demand.
- The beta Working section hides busy threads until they need attention. Expired Live Activities do not leave duplicate cards.
- Android usage widgets load correctly in release builds. Production OTAs cannot reach store binaries from the previous major version.
- Uniwind is upgraded and its local patch removed.
Usage reporting
- Cost is shown by token type, with speed and model details.
- Codex Fast and Ultrafast pricing matches billing. Preview model IDs fold into their underlying model.
- Model shares and ordering follow the selected metric.
- Warm scans are faster on large histories.
Development, tests, CI, and release tooling
- Documentation, development scripts, and CI are updated for orchestration V2.
- Worktree setup preserves real environment files, and bootstrap warnings go directly to stderr.
- Fake provider/process CLIs become fixture files, exit with their parent, and are cleaned up after tests. ACP tests wait for prompt settlement, and replay coverage checks reported subagent models.
- Lint rejects tests declared inside loops and CSS
:has()variants that restyle the whole page. - Nightly Discord announcements include release changelogs, and nightly clients point to the beta mobile app.
- Triage exemptions are updated, redundant thread-sort tests are removed, and a duplicate Option import that broke upstream CI is fixed.
- Dependency, patch, license, and mobile fingerprint configuration changes accompany the imported features.
Upstream changes later reverted
- Automatic compaction before resume was introduced and then removed. It is absent from the final merge.
- Automatic repair of unclosed local file links was introduced and then removed. It is absent from the final merge. Descriptive file-link label preservation remains.
Fork behavior preserved and merge adaptations
- Preserve Gitea/Forgejo integrations, inline reviews, review mentions, review progress, whitespace filters, dependency navigation, CI runs/reruns, viewed-file handling, and scoped pull-request refreshes.
- Preserve Vim navigation, its settings and shortcuts, diff search/highlighting, terminal editors including Neovim, saved editor choices, and remote editor dispatch.
- Preserve SSH runtime reuse/recovery, cancellation and remote-server lease behavior, daemon diagnostics, pinned runtime validation/reinstallation, runtime pruning, and migration trial recovery.
- Preserve low-disk warnings on web/desktop and mobile, along with RTVision package/registry configuration, versions, release workflows, and packaging.
- Adopt upstream's shared merge-setting resolver and quick-action layout. Retain Gitea's checks access without requiring a host-provided rollup, review-request labels, and Gitea browser-link fallbacks.
- Combine upstream pending slash-command discovery with the fork's atomic workspace-scan baseline/ownership capture and token-specific cleanup.
- Carry the upstream pull-request head SHA into details while retaining dynamic fork capabilities and dependency metadata.
- Fold disk-warning updates and recovery into upstream's late-editor snapshots, preventing an old warning from reappearing.
- Recognize both
t3and@rtvision/t3npm installations for ownership checks. Keep manual update commands pointed at RTVision's package and registry. - Retain both sets of desktop IPC handlers for terminal/SSH controls and legacy draft import.
- Preserve partial-list warnings alongside upstream's empty-partition handling.
- Convert the fork's rerun-state test loop to upstream's required parameterized-test syntax.
- Preserve fork installation guidance while adding upstream's explicit-directory and already-running-server guidance.
Release corrections
- Manual update commands keep npm and pnpm installations on RTVision's package and registry. Bun installations use npx because bunx ignores its registry flag.
- Update-action tests now expect RTVision's commands, and the shared npx command constant is used by the fallback.
- Server, desktop, web, and contracts package versions are 0.0.69.
- Gitea CI, activity, approval, and SSH discovery test cases use upstream's required parameterized declarations, preserving all cases and assertions.
Verification
- Claude Opus 5.5 and GPT-6 Astra independently approved
952e8b8624badd2a54998d5fe4f2ef0c672a8c0d. - CI and the release build passed on that exact commit.
- All 11 assets match GitHub SHA-256 digests and SHA256SUMS. Updater versions, SHA-512 hashes, and sizes match the installers.
- Windows and Linux CLI smoke tests passed in CI. Installer/archive layouts, native executable formats, packaged app versions, and RTVision updater settings were verified. The Windows WSL archive exactly matches the published Linux CLI archive.
- The published npm tarball matches the verified release asset byte for byte, with matching registry integrity and latest tag. Alpine installation with native dependencies built from source passes CLI version, service preflight, and a real PTY spawn. The actual OpenRC preparation and relaunch paths also pass against isolated state.
Complete imported commit list
This chronological list records all 163 commits, including changes later reverted above. The grouped notes describe the resulting merged behavior.
8bc40b4e0fix(server): idle shells stop reloading every project once a minute (pingdotgg#14893)b4d3d51acfix(server): Claude model changes no longer kill running background agents (pingdotgg#14726)bf7121d7afix(server): API-key Codex installs no longer warn on every start (pingdotgg#14903)ca7df394efix(server): steers keep the newest next-turn selection (pingdotgg#14725)a7b3ce8c0fix(settings): Pi and ACP Registry no longer show an Early Access badge (pingdotgg#14915)a8927712ffix(server): Codex auth tokens are an omitted key, never undefined (pingdotgg#14908)fd7ee2c30chore(lint): forbid declaring tests inside for loops (pingdotgg#14921)7ff2eabf5fix(desktop): markdown no longer loads invisible in new dark-mode browser tabs (pingdotgg#14727)641426885test(server): the fake Claude CLI exits with its parent (pingdotgg#14926)8ed276c24fix(mobile): production OTAs no longer reach the previous major's store binaries (pingdotgg#14944)bb7997709fix(web): thread panel shows the remote machine a thread runs on (pingdotgg#14972)43bd66773fix(web): Claude skill calls show the skill name (pingdotgg#14980)858b98b8ftest(server): the fake Claude CLI is a fixture file, not a generated string (pingdotgg#14950)4f7760e6afix(server): Claude subagents show the model their agent file picks (pingdotgg#14994)151c241cdfix(client-runtime): format subagent descriptions as display names (pingdotgg#14999)c91e93c23Update TRIAGE_EXEMPTIONS with new entries22e9d3561fix(web): outdated servers can be updated even when the client can't connect (pingdotgg#15002)3a7058da5fix(web): new worktree threads no longer flicker while starting (pingdotgg#15019)d668ffcd6fix(server): subagent threads stop publishing tombstones to the relay (pingdotgg#15016)9333509c9fix(client-runtime): reconnects back off with jitter and keep healthy sockets (pingdotgg#14897)736130c2ffix(server): working timers no longer reset on every background wake (pingdotgg#15029)ca4f84e70fix(server): threads settle as soon as an agent merges their PR (pingdotgg#15024)63f74e209fix(opencode): fill blank reasoning labels (pingdotgg#14978)798e945aafix(preview): agent browser clicks no longer steal your composer focus (pingdotgg#15008)c5a929e1afix(web): Woke dismiss syncs, preview mute is back, and subscription retries back off (pingdotgg#15034)ddcd31028chore: docs, dev scripts and CI catch up with orchestration V2 (pingdotgg#15041)8283b481afix(server): Claude V2 turns start on Windows with the default binary path (pingdotgg#15021)d1034d62bfix(web): diff panel opens on all branch changes, not just uncommitted (pingdotgg#15005)5bf19d12bfix(server): threads stay working while Claude starts a wake turn (pingdotgg#15055)5c0429b15feat(web): mod+alt+enter on an existing thread sends and opens a new thread (pingdotgg#15050)db514607ffix(chat): sending on an older thread no longer jumps to the top (pingdotgg#15059)fed41fa88chore: add bmdavis419 to triage exemptions (pingdotgg#15062)6108ef3d3fix(server): runs no longer get stuck (pingdotgg#15048)56914128cfix(usage): Codex Fast and Ultrafast now cost what they bill (pingdotgg#15101)a5b34b253fix(clients): a dev server left running no longer says the thread is waiting (pingdotgg#15114)f68e24fb4fix(web): a thread that left a shell running shows its unseen completion (pingdotgg#14910)263097a8dfix(web): mod+enter starts a new thread in the background again (pingdotgg#15060)e8545b293feat(usage): show cost by token type, speed, and model detail (pingdotgg#15108)18b21325cfeat(server): agents can watch a PR and get woken when checks, reviews, or conflicts need them (pingdotgg#15057)31a9da179fix(server): keep delegated review rounds on the task API (pingdotgg#15115)f391794a3fix(shared): classify workspace previews by literal filenames (pingdotgg#10311)1945ce82cfix(mobile): iOS threads no longer jump to the top (pingdotgg#14808)44b496501fix(web): reduce the gap above the draft composer (pingdotgg#15196)a0bf1eee4fix(mobile): a dev server left running no longer shows the waiting bolt (pingdotgg#15194)ce90eec1ffix(server): a Claude command you stop shows as interrupted (pingdotgg#14896)0080e80c0fix(server): editors appear once a slow discovery scan finishes (pingdotgg#13917)aad732901fix(server): Claude threads no longer stay stuck in plan mode Claude entered itself (pingdotgg#15224)65731f986fix(mobile): show complete subagent details (pingdotgg#15189)77823bd10fix(mobile): an expired Live Activity no longer leaves a second card (pingdotgg#15254)cfdff56f7test(web): remove redundant thread sort fallback tests (pingdotgg#15095)70e5a40c2fix(web): thinking row after a failed tool expands the run's tool calls (pingdotgg#15056)39efcd855perf(web): DOM changes no longer restyle the whole page (pingdotgg#15265)71dbaf1f9perf(usage): cut warm usage scans from seconds to milliseconds on large histories (pingdotgg#15149)fffe6e6c8perf(web): virtualize command palette results (pingdotgg#15266)0cfa113bechore(lint): flag :has() variants that restyle the whole page (pingdotgg#15274)429c625a8fix(web): workspace card docks beside chat when the window is narrow (pingdotgg#14992)5e35272fdfeat(web): render mermaid code blocks as diagrams (pingdotgg#15067)f1dcd9393feat(web): Nightly tells you to get the beta mobile app (pingdotgg#15070)a21702d0etest(server): ACP adapter tests no longer race the prompt settle (pingdotgg#15330)b05adb70bfeat(usage): fold preview model IDs into the model they belong to (pingdotgg#15333)a78760e5erefactor(server): check RPC scopes in group middleware (pingdotgg#15324)8d846660cfeat(mobile): beta Working section hides busy threads until they need you (pingdotgg#15346)00eb8f618fix(settings): symlinked settings files stay linked when saved (pingdotgg#15009)d65cd33a0fix(server): Stop ends a dev server left running before a provider switch (pingdotgg#15355)243d1e7c4fix(server): merged threads settle even after the agent wakes on its own (pingdotgg#15388)c47f4263ffix(web): no-project drafts can switch machines (pingdotgg#15356)f786ff354fix(web): highlight tool inputs and remove nested work log indentation (pingdotgg#15384)5108c978bfix(server): restarts keep delegated tasks, queued threads, and stops intact (pingdotgg#15323)a976f8c74fix(web): sending past the resume banner compacts first (pingdotgg#15290)44bd4c9cafix(codex): resume archived native sessions (pingdotgg#15389)f2cc80a7afeat(web): morph composer and panel action icons (pingdotgg#14924)d3071275dfix(web): subagents sent a follow-up show as running in Lineage (pingdotgg#15334)2d81e4c27fix(web): clear stale chat action shortcuts (pingdotgg#15394)88744f3ddfix(orchestration-v2): restore earlier app agent transcript pages (pingdotgg#14104)1b1e5b967fix(web): remove the square thread info panel shadow (pingdotgg#15069)8e3999443fix(mobile): Android usage widget no longer sticks on "Loading widget" in release builds (pingdotgg#15142)a6aebbe2efix(web): size the model picker to its content (pingdotgg#15152)2a455570etest(server): replay checks a Claude subagent's thread takes its reported model (pingdotgg#15022)dab26f582fix(web): subagent finish notifications look like subagent cards (pingdotgg#15281)4543c7368fix(web): thread status dot has an accessible name (pingdotgg#14587)c5bc98db0fix(web): legacy sidebar options button has a label (pingdotgg#14602)2b8bb0c18fix(web): imported themes keep switches and focus rings visible (pingdotgg#14498)7bc161f86fix(web): links to issues no longer strand the pull request viewer (pingdotgg#14242)237d51e6cfix(web): repo/task breadcrumb no longer bounces when the sidebar collapses (pingdotgg#15046)f90b77d80fix(web): Pull request panel entry works for linked PRs (pingdotgg#15061)95edeb753fix(web): add context menu to draft threads in the sidebar (pingdotgg#10637)9efb01690fix(web): keep sidebar branding and build pills from clipping at varying font sizes and zoom levels (pingdotgg#12141)0c8112013fix(usage): model shares and order follow the selected metric (pingdotgg#11391)1826fb55cfeat(web): sweep sidebar buttons to settle, un-settle, and wake threads (pingdotgg#14768)737993303feat: retry a failed workspace preparation (pingdotgg#15326)8fb068c49fix(server): registry test stubs no longer outlive the test run (pingdotgg#15457)60a56f11etest(server): the registry's fake Claude CLI is a fixture file, not a generated string (pingdotgg#15463)845ddd935refactor(clients): share opening a machine's No project folder (pingdotgg#14759)070127cbbtest(server): the git-ssh wrapper's fake SSH script is a fixture file, not a generated string (pingdotgg#15480)1508552a1test(server): the ACP registry's fake npm is a fixture file, not a generated string (pingdotgg#15483)f870c419ftest(server): the ACP registry's fake uv is a fixture file, not a generated string (pingdotgg#15484)c5a0c78b7feat(clients): step a new thread to the next machine from the keyboard (pingdotgg#15391)d073c261bfix(web): promoting a draft thread no longer logs a React key warning (pingdotgg#15458)ee7b49d63test(server): the text generation's fake Claude CLI is a fixture file, not a generated string (pingdotgg#15479)bf5c146befix(mobile): keep dictation running across navigation behind an edge pill (pingdotgg#15502)a92c43b80fix(client-runtime): relay disconnects no longer show as thread errors (pingdotgg#15470)daa1d0ed9fix(web): subagent cards name the provider account (pingdotgg#15493)f4f3abf71fix(server): read paginated review replies when watching PRs (pingdotgg#15427)fe93a5dbdfix(server): offer one-click provider updates for every install (pingdotgg#15416)930aec13dfix(mobile): keep the dictation timer from shifting width (pingdotgg#15504)40596072efix(relay): T3 Connect links no longer fail on colliding prepared statements (pingdotgg#15411)0fe4fa40ffix(server): sqlite transactions wait for the write lock instead of failing (pingdotgg#15488)6e0abd5a1fix(web): unpin button shows the pin-off icon on hover (pingdotgg#15425)ae010fe55fix(mobile): make queued message removal tappable (pingdotgg#15417)e19a48d22fix(web): keep workspace panels below dialogs (pingdotgg#15454)1302ccacbfix(clients): Working section keeps its order while agents finish and wake (pingdotgg#15418)d60a71ef6feat(mobile): full-screen simulator viewer with on-demand controls (pingdotgg#15551)eac52f008fix(client-runtime): closing a busy stream no longer drops the connection (pingdotgg#15563)33b7d7b3afeat(web): add shift-held pull request quick actions (pingdotgg#15549)5a96895a8fix: expanded tool calls show their output, empty ones don't expand (pingdotgg#15505)5318d054afix(web): show device diagnostics before hub readiness (pingdotgg#15435)c8d7d50a7fix(web): open thread picker for unsent drafts (pingdotgg#15436)e01e58916fix(desktop): print version before initializing the app (pingdotgg#15440)b3b6ae2cefix(server): recover claude skill scalar frontmatter (pingdotgg#15452)253dea360fix(server): keep settled threads asleep after restarts (pingdotgg#15604)f9db42d14fix(server): avoid inferring forgejo conflicts from mergeability (pingdotgg#15441)32b77f4fafix(web): dismiss hovered timeline tooltips on scroll (pingdotgg#15455)836098543fix(server): discover Claude commands in each workspace (pingdotgg#15462)2dfef8779fix(web): restore project action preview opening (pingdotgg#15490)71fbe8e01fix(desktop): keep titlebar controls inset when zoomed (pingdotgg#15496)1c6269326fix(source-control): use the Azure DevOps mark (pingdotgg#15512)c346fb679fix(web): open provider update details from both icons (pingdotgg#15501)d3bec62ecfix(web): reveal sidebar actions for secondary hovering pointers (pingdotgg#15536)1d013c7cafix(markdown): preserve descriptive file-link labels (pingdotgg#15509)df4ae529efeat(clients): tool calls show the call above a muted result, without cards (pingdotgg#15506)0ce43a4eefix(chat): repair unclosed local file links in assistant responses (pingdotgg#15520)3b0093d71fix(server): match manual update commands to installed cli (pingdotgg#15539)4ee6bfd50fix(server): preserve staging during commit message generation (pingdotgg#15532)484459f0afix(mobile): Keep the last line of iOS markdown replies visible (pingdotgg#15737)b4381985dfeat(release): include nightly changelogs in Discord announcements (pingdotgg#15754)2188bdd8brevert(web): remove automatic compaction before resume (pingdotgg#15771)efecd3cf8fix(server): Claude threads no longer get stuck after background commands (pingdotgg#15770)fe417dff4fix(cli): reject accidental server launches (pingdotgg#15795)979ca66cefeat(clients): reach one environment over several routes (pingdotgg#15467)745c225f9feat(clients): learn an environment's LAN and tailnet addresses (pingdotgg#15468)ec20db4a5fix(server): share MCP tool presentation across providers (pingdotgg#15475)801ca76edrevert(chat): remove automatic file-link repair (pingdotgg#15824)bc2748241perf(web): validate monospace fonts when selected (pingdotgg#15642)f4153a75afix(server): expand home-relative media paths (pingdotgg#15618)f729e0ebffix(server): recover Linux runtime directory for device hub (pingdotgg#12402)ad5178a31fix(web): center icons in thread details icon buttons (pingdotgg#15669)01f894e23fix(mobile): back from an agent's thread returns to its parent (pingdotgg#15068)f8a308fbcfix(dev): worktree setup never deletes a real env file (pingdotgg#15845)1e2ecbd97fix(server): drop the duplicate Option import that breaks main CI (pingdotgg#15847)de09c7566fix(dev): write bootstrap warnings directly to stderr (pingdotgg#15865)a1d9d72aefix(mobile): a message that fails to send now says why in the thread (pingdotgg#15807)1beb0355dfix(server): queue background notifications during active tools (pingdotgg#15892)37de6cbderefactor(server): share one keyed lock that releases idle keys (pingdotgg#15577)06e627448feat(server): T3 MCP tools take explicit thread and project targets (pingdotgg#15219)c40873762fix(desktop): V2 imports stashed prompts and drafts from the V1 profile (pingdotgg#15072)2a778f7a6feat(web): shell commands in the timeline are syntax highlighted (pingdotgg#15037)250e052f4fix(mobile): upgrade Uniwind and remove local patch (pingdotgg#14597)cf3e714b0fix(server): Stop ends a Codex command after its thread was settled (pingdotgg#15546)781223057fix(server): subagents no longer inherit parent pull-request links (pingdotgg#14918)7ffa2184afix(prs): queue fast actions and close batches by dragging (pingdotgg#15851)1a3f7ad50perf(prs): share concurrent github routing metadata probes (pingdotgg#15853)1604ccc9dfix(mobile): back from a finished subagent in the feed returns to its parent (pingdotgg#15844)7b797f2b9fix(desktop): bound preview inspector retention and record renderer identity (pingdotgg#16032)