Skip to content

sync: upstream 0571e45107 into swaplabs/main - #55

Closed
kiwidream wants to merge 213 commits into
swaplabs/mainfrom
main
Closed

kiwidream wants to merge 213 commits into
swaplabs/mainfrom
main

Conversation

@kiwidream

@kiwidream kiwidream commented Oct 25, 2026 •

Copy link
Copy Markdown

ELI5

Upstream Orca moved forward 213 commits since yesterday's sync (#53). This PR proposes merging them into swaplabs/main straight from the fork's mirror main.

What Changed

Upstream range 30733ac703..0571e45107, 213 commits (compare). The head is the fork's mirror main, so the PR adds no fork commit.

A read-only git merge-tree of 0571e45107 into swaplabs/main (a1c9ba1fd4) reports 11 content conflicts, so this PR is expected to be CONFLICTING; the automation then moves the merge to a sync/upstream-20261025 branch and closes this PR as superseded:

  • .gitignore
  • src/main/updater.check-preflight.test.ts
  • src/renderer/src/components/settings/RemoteServerUpdateStatus.tsx
  • src/renderer/src/components/terminal-pane/pty-connection/connect-pane-pty.ts
  • src/renderer/src/components/terminal-pane/pty-connection/session-reconcile-dispose.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json

Why

Daily upstream sync.

Linked Issue

N/A: daily upstream sync.

Visual Proof

N/A: upstream code only.

Testing

None on this head: main is the mirror and takes no commits. Validation happens on the sync branch.

AI Disclosure

Prepared by the "Orca upstream sync" automation (Claude Code, Claude Opus 5.5).

Agent skill upstream boundary

  • Not applicable: this PR merges upstream's history; it adds no agent skill.

Notes

orca-fork-ops status for swaplabs/main (a1c9ba1fd4) against upstream 0571e45107:

Upstream release tag v1.4.240 was copied to the fork.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

OrcaWin and others added 30 commits October 24, 2026 03:19
…ablyai#33121)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…server, cause, delay from measured RTT (stablyai#33095)

* fix(remote-terminal): calm, honest reconnect status with one notice per server

* fix(remote-terminal): keep the SSH sign-in wait immediate under the calm reconnect banner

* fix(remote-terminal): a surface that loses its turn drops its notice at once

* fix(remote-terminal): resolved action cards and handed-off notices leave at once

* fix(remote-terminal): only the leader at the end of an outage holds its notice
…stablyai#33129)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…age (stablyai#33133)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
… coverage (stablyai#33140)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…verage (stablyai#33144)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…pt coverage (stablyai#33146)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…r on a booting distro (stablyai#33145)

* fix(wsl): retry a git read when wsl.exe hits a transient service error on a booting distro

On a cold distro, concurrent first wsl.exe launches intermittently fail with
Wsl/Service/E_UNEXPECTED before the guest runs. The bridge's worktree listing gave
up on the first one, so a WSL project showed 0 workspaces until the user acted.
Reads now retry that one error up to three times (0.25, 0.75, 1.5 s).

* fix(wsl): bound transient-error retries per distro, honour aborts, keep the direct git path

Review follow-ups: after one read spends its retries the distro fails fast for 5 s
instead of every queued read sleeping in its admission slot; an abort or a disposed
caller ends the backoff at once; a transient service error no longer falls back to
the login shell and turns the direct read path off.

* test(wsl): drop type assertions from the transient-retry test
…ai#33151)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…yai#33153)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…tions (stablyai#33161)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…lyai#33163)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…tablyai#33171)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…tablyai#33173)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…t cause of stablyai#33145) (stablyai#33175)

* fix(wsl): the worktree watcher no longer probes a WSL distro's home synchronously at startup

For a project inside WSL the watcher resolved the workspace root before seeing the
repo is a UNC path it skips. That ran wsl.exe 'echo $HOME' synchronously with a 5 s
timeout: on a cold distro it blocked main for 5 s and killed the distro's first
boot, after which every wsl.exe call failed with Wsl/Service/E_UNEXPECTED. The
watcher now skips WSL repos first and resolves other roots asynchronously.

* revert(wsl): drop the transient E_UNEXPECTED retry from stablyai#33145

The error came from the watcher's synchronous home probe killing the distro's first
boot (fixed in the previous commit). Once that happens the distro answers every
wsl.exe call with E_UNEXPECTED for 14+ s, so a 2.5 s retry never recovered it; on
the measuring box it failed every attempt. With the trigger gone the retry is dead
weight.

* fix(wsl): skip mirrored WSL roots without probing; keep the direct-git guard

Review follow-ups: a Windows repo whose workspace root mirrors into WSL also probed
the distro's home (async, still killed at 5 s) only to skip it, so the watcher now
recognizes the mirror and keeps just the Git-common watch. The revert keeps one
piece of stablyai#33145: a WSL service failure no longer falls back to the login shell and
switches the direct git read path off.
…ai#33177)

* test: strengthen transport, status, and permission assertions

* test: avoid preview screenshot after top-frame navigation

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…lyai#33183)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…i#33189)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…sertions (stablyai#33197)

* test: remove duplicate capability coverage and strengthen boundary assertions

* test: preserve background task name assertion across mock resets

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…ap (stablyai#33039)

The director now accepts a cell heartbeat whose reported connection cap is at or below its configured cap, and places with the lower of the two; a reported cap above the configured one is still refused. A cap-only change keeps the cell's stored capacity rows. This lets the US cells' configured cap be raised once, ahead of their rolls, so an old process at the lower cap stays live until it is replaced, instead of desktops pointed at it being refused during a resize.
…coverage (stablyai#33207)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…blyai#33208)

* test: trim redundant telemetry checks and exercise session producers

* test: include persistence producer in renderer typecheck

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
* Allow saving quick command lists beyond forty

Preserve compatibility by limiting older clients to readable commands

* Cover quick command persistence across client capabilities

* Reject edits to hidden quick commands from stale clients
nwparker and others added 26 commits October 25, 2026 00:32
…ts through the host's Orca server (stablyai#32484) (stablyai#33388)

* test(e2e): a saved SSH forward on a managed host comes back after a restart (stablyai#32484)

* test(e2e): a restart that reaches the host only through its server's tunnel restores saved forwards (stablyai#32484)

* fix(ssh): restore saved port forwards whenever a host's server is up, not only after an SSH connect (stablyai#32484)

A host whose managed server the app reaches at startup through its tunnel
publishes its served status from the tunnel path, which never ran the
forward restore. The served status itself now triggers the restore, from
any publisher, and a host kept on the legacy relay bridge restores too.

* test(ssh): type the restore spy's target argument

* fix(ssh): user forward edits keep unrestored saved forwards; restore once the tunnel is up

Add, edit and remove now merge with saved forwards that aren't live, so a
restart that restored nothing no longer lets one re-added forward erase
the rest. A call that brings up the managed server's tunnel restores too,
so a failed update check or redeploy can't skip it, and a restore runs once
per transport instead of on every status note.

* fix(ssh): a forward that failed to bind is retried on the same transport

* fix(ssh): restore again when a restored forward closed; a reused local port replaces its old mapping

* fix(ssh): user forward edits and restores share one per-host queue

A restore that ran mid-edit could reopen the mapping the edit was
replacing and save both. Every add, edit, remove and restore for a host now
runs in order through the same queue.

* fix(ssh): pace forward restores and back off a forward that keeps failing

Each runtime call triggers a restore over the managed tunnel, and with
system SSH every attempt is a new login. Restores on the same transport
now run at most once per 30 s, a forward that keeps failing waits longer
each time, and teardown forgets both. A tunnel with no status yet counts
only outside a connect; a remove re-checks its forward inside the queue;
drop a circular listener test and the plain restart e2e case.

* fix(ssh): a start a teardown cancelled records no backoff

* fix(ssh): a reconnected transport retries failed forwards at once
…he prompt (stablyai#33316)

DSH: Orca re-presses Enter (up to a 30s launch budget) while dsh's launchpad still visibly holds the launch prompt — dsh refuses Enter while its session is starting — and stops as soon as the prompt leaves the screen, so no Enter reaches the first-run guide. The shared draft reader recognises dsh's boxed launchpad composer. Fixes stablyai#29131, stablyai#33227. Supersedes stablyai#33229.

Co-authored-by: Xulin Wu <35489799+wuuli@users.noreply.github.com>
…tory and folder when slept (stablyai#33425)

* fix(terminal): a pane a relaunched app has not reopened keeps its history and folder when slept

After an app relaunch, a terminal the window had not shown again was known to the daemon client
only from its terminal list: no history writer and, for a WSL pane, no distro or pane key. Its
Sleep then wrote no final checkpoint at all (only output.log), so Wake restored from older output
and, for a WSL pane on Windows, reopened at the spawn folder (awin verify-10, X2). stablyai#33398 learned
those facts in `reconcileOnStartup`, which nothing in the app calls.

Sleep now adopts such a session first: one `listSessions`, then the same history reconciliation,
distro and pane key a startup adoption records. Its final checkpoint then lands with the shell's
folder. Sessions the client spawned or reattached skip this.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(terminal): Sleep never re-adopts a session this client suspended after a seed failure

Review of stablyai#33425: adopting an unattached session before Sleep also caught sessions this client
already holds but suspended after a history seed failed (an old daemon, an oversized seed, a
transfer failure). Re-adopting one wrote its fresh-only screen as the authoritative checkpoint,
so Wake lost everything from before the restore. Sleep now adopts only sessions the client
does not already hold as active.

A session it does adopt becomes active only once its history writer is open, so an exit
during the reconcile leaves it out.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
…yai#33449)

* perf(dev): serve the renderer with bundled dev mode by default

* test(dev): expect bundled renderer dev by default
…aude account switch (stablyai#30328)

Leave a user's node or python program alone after a Claude account switch; unchecked terminals get an accurate toast.

Fixes stablyai#30327

Co-authored-by: Adif Sgaid <69080239+adifsgaid@users.noreply.github.com>
* Reduce tab preview tooltip delay to 500 ms

* Reduce tab hover card test delay expectations
* refactor: group filesystem IPC registration and suites

* refactor: preserve lint baseline counts for relocated filesystem suites
…tablyai#33453)

* test: remove low-value cases and repair behavioral assertions

* test: prune repaired wall-clock finding from flaky-test baseline

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…unch metadata (stablyai#33317)

Graceful close (mobile pane, headless tab, worktree stop) of a shell without launch metadata now sweeps descendants on macOS/Linux, matching desktop tab close, while sparing the shell's own nohup/disown jobs (login-wrapper aware). Windows graceful plain-shell close is unchanged.

Fixes stablyai#16714
… TUI (stablyai#33466)

Terminals created with a flagged agent command (e.g. `omp --thinking high`) now get the agent's identity at creation, so `tui-idle` waits for the agent instead of reporting ready early.

Fixes stablyai#25264
Supersedes stablyai#25320

Co-authored-by: ggbdpq <67929842+ggbdpq@users.noreply.github.com>
…r its Stop hook (stablyai#33335)

Keep tui-idle blocked when Codex paints its plan menu after the Stop hook.

Fixes stablyai#25912
Supersedes stablyai#26492

Co-authored-by: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
…ws ConPTY (stablyai#33473)

Ctrl+Enter reaches Claude Code as CSI-u (`\x1b[13;5u`) on local Windows ConPTY panes, matching macOS/Linux, so custom ctrl+enter keybindings work.

Fixes stablyai#29711
…din (stablyai#33470)

Windows managed hook skip paths (Devin/Grok/Cursor replay guards, and orca-agent-hook.exe) exit immediately instead of draining stdin through more.com, so a held-open writer can no longer hang the hook.

Fixes stablyai#24907
Supersedes stablyai#24909

Co-authored-by: inforanger <29155427+inforanger@users.noreply.github.com>
…yai#33476)

* test: exercise stale permits and Unicode frame boundaries

* test: remove search schema inventory and clarify behavioral coverage

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…ablyai#29811)

Read `codex login`'s stderr too: Codex prints the browser sign-in URL there (codex-rs/cli/src/login.rs), so WSL Codex sign-in opened nothing and spun until timeout. Each stream gets its own line buffer and the URL is published once.
…tory (stablyai#33477)

Codex history now hides only internal thread sources (subagent, guardian_review, memory_consolidation); Desktop automation and agent-created threads show, matching `codex resume`. Bumps the session parse cache so hidden-cached threads are re-read once.

Refs stablyai#15061
Supersedes stablyai#15062

Co-authored-by: Ouyang Xingyuan <45086632+apple-ouyang@users.noreply.github.com>
…n unsent draft (stablyai#33429)

Hold the orchestration mailbox pointer (and coordinator nudges) while the agent's composer has an unsent draft, so Orca never submits over what the user is typing.

Fixes stablyai#26992
Supersedes stablyai#27195

Co-authored-by: Hotragn <103170876+Hotragn@users.noreply.github.com>
…#33478)

Codex usage no longer double-counts forked sessions: forks copy the parent's token_count events with fresh timestamps, so cumulative events are now keyed on turn id + totals (timestamp fallback when no turn id); the turn id is kept in the incremental-scan checkpoint and the usage cache is rebuilt once.

Fixes stablyai#19139
Supersedes stablyai#19152

Co-authored-by: Jio Kim <26668612+MeroZemory@users.noreply.github.com>
…s first setup (stablyai#33479)

On a Claude account's first setup, shared folders Claude already created (e.g. plugins/) are merged into the shared ~/.claude folder and linked instead of being skipped as user-owned; conflicts keep the user's copy and retain Claude's in <name>.orca-profile-merge.

Refs stablyai#33170
…i#33483)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
)

Detect Qwen Code on Windows: exact node entrypoint identities for the npm (@qwen-code/qwen-code cli-entry/cli) and standalone (qwen-code/lib) layouts, and comparablePath now collapses . / .. segments so shim paths like .bin\..\ match.

Fixes stablyai#17326
Supersedes stablyai#17382

Co-authored-by: Baojiang Lee <101562714+libaojiang@users.noreply.github.com>
…d let you remove them (stablyai#33450)

* feat(ssh): list saved port forwards that couldn't start, with why, and let you remove them (stablyai#32484)

A saved forward whose local port is taken, or that keeps failing, stayed
saved but invisible, retried in the background with no way to remove it.
The port-forward lists now show each saved forward that isn't open, with
the last start error, and Remove deletes it by its mapping.

* fix(ssh): a forward whose ssh exits after starting backs off like a failed start

* fix(ssh): re-register the new forward channels, close a forward a restore reopened before removing it, and update IPC fixtures

* fix(ssh): a flapping forward keeps its backoff streak until it stays up

* fix(ssh): translate the saved-forward row, say Stopped for a forward that died, toast a failed remove, and reset backoff on manual edits

* fix(ssh): keep saved forwards listed and removable while the host is offline; label the remove button; test the healthy-uptime reset

* fix(ssh): mirror saved forwards from main with a stale-read guard, including hosts that never connect

* fix(ssh): scroll the offline ports panel when saved forwards overflow it

* test(e2e): give the saved-forward restart case's timeout its reason
…#33491)

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
…start (stablyai#31311) (stablyai#33489)

Kimi sessions keep resuming across repeated Orca restarts: register Kimi's SessionStart hook (matcher ^resume$, so new sessions pay nothing) and map a resume to an idle session-start status that refreshes the resume record; recognise npm-installed Kimi (node_modules/@moonshot-ai/kimi-code/dist/main.mjs) on Windows so the pane isn't mistaken for a shell.

Fixes stablyai#31311
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-25T10:06:47.559792Z 0571e45 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@kiwidream

Copy link
Copy Markdown
Author

Superseded by #56 (sync/upstream-20261025): main is the mirror and takes no commits, so the 11 conflicts are resolved in a signed merge on the sync branch.

@kiwidream kiwidream closed this Oct 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.