Skip to content

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

Merged
kiwidream merged 214 commits into
swaplabs/mainfrom
sync/upstream-20261025
Oct 25, 2026
Merged

kiwidream merged 214 commits into
swaplabs/mainfrom
sync/upstream-20261025

Conversation

@kiwidream

@kiwidream kiwidream commented Oct 25, 2026 •

Copy link
Copy Markdown
Files Added Deleted Net
Test 1746 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​24020 $\color{#cf222e}{\Huge{\mathbf{−}}}$​11870 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​12150
Prod 1254 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​20662 $\color{#cf222e}{\Huge{\mathbf{−}}}$​6336 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​14326

ELI5

Upstream Orca moved forward 213 commits since yesterday's sync (#53). This PR merges them into swaplabs/main. 11 files conflicted with fork changes, each in one small spot, and the fork's lines are kept unchanged. Two more things broke without a conflict: a new upstream lint rule and a new upstream test-pattern ratchet. Both are fixed here without changing any fork behaviour. This PR replaces #55 (head main), which could not merge.

What Changed

Upstream range 30733ac703..0571e45107, 213 commits (compare). One signed merge commit, d0a85cc508 (Merge upstream main (0571e45107) into swaplabs/main), on sync/upstream-20261025, cut at the integration head a1c9ba1fd4.

Conflicts, by fork PR (orca-fork-ops conflicts)

Fork PR File Upstream change Resolution
#17 (managed-server update help) src/renderer/src/components/settings/RemoteServerUpdateStatus.tsx stablyai#33397 adds a managedOverSsh branch at the top of getRemoteServerManualUpdateHelp both branches; the fork's help-URL branch stays first (see below)
#17 src/renderer/src/i18n/locales/{en,es,fr,ja,ko,zh}.json stablyai#33397 adds managedOverSshHelp as the last key of the same object upstream's key, then the fork's managedByDeploymentHelp and howToUpdate
#6 (auto-resume) src/renderer/src/components/terminal-pane/pty-connection/connect-pane-pty.ts stablyai#33315 installs installAgentPreReadyTypedDraft after installPtyInputRecovery both: the fork's installAgentResumeRecovery (it must follow installPtyInputRecovery), then upstream's draft
#6 src/renderer/src/components/terminal-pane/pty-connection/session-reconcile-dispose.ts stablyai#33315 discards the pre-ready draft on dispose both: the fork's resume cleanup, then upstream's discardAgentPreReadyDraft
#10, #16 (update sources, mac self-update) src/main/updater.check-preflight.test.ts stablyai#33294 replaces an inline window cast with updaterMainWindow from the new updater-test-main-window.ts both imports: the fork's tests still use createUpdaterMainWindowFake, and upstream's test uses its helper
#8 (fork build pipeline) .gitignore stablyai#33406 allow-lists docs/reference/component-fixtures.md upstream's line, plus the fork's two docs/reference/swaplabs-*.md lines

RemoteServerUpdateStatus.tsx, why the fork's branch stays first: the fork's help-URL branch only fires for a host that reports manual-service-update-required and publishes an ORCA_SERVER_UPDATE_HELP_URL, and it is what the fork's "How to update" link trails. Upstream's new branch is for a server this desktop deployed over SSH (orcadDeployment). Every case that occurs today behaves as before on each side. A devvms host is paired, not SSH-deployed, so it gets the deployment text and link. An SSH-deployed server has no help URL (the variable is set only in orca-serve.service), so it gets upstream's text. Only a host that is both would see the fork's text; keeping it first means the help text and the link always agree.

For all 31 files both sides changed, the fork's added and removed lines against upstream are the same before and after the merge. The one exception is the six catalogs: the trailing comma the fork added moves from legacyHelp to upstream's new last key.

Breaks the conflict list did not show

Fork PR File Upstream change Fix
#10 (update sources) src/main/updater-release-source-feed.fixture.ts → .test-fixture.ts; import in src/main/updater-test-harness.ts stablyai#33406 adds a no-restricted-imports pattern: a *.fixture module is a dev-only component fixture and may be imported only from tests. The harness is not a test file, so the fork's import of this module failed oxlint rename the module to upstream's test-fixture convention (*.test-fixture.ts, already a knip entry and an anti-slop test-support pattern) and follow the rename in the harness. The fork's other *.fixture.ts modules are imported only by test files and are left alone
all fork test files config/flaky-test-pattern-baseline.txt stablyai#33430 adds a flaky-test ratchet (wall-clock reads, real-time waits, polling loops, timeouts without a reason). It grandfathers every existing finding in upstream's tree, but none in the fork's add the fork's 17 rows (52 findings, all in fork-only test files) with the note fork test, predates this ratchet, inserted in place. Upstream's rows are unchanged. Without them, pnpm lint and pnpm check:changed fail on any fork checkout, because their local scope is the whole fork delta. A precedent for a fork row in an upstream ratchet baseline is workspace-record-read-baseline.txt (sync 1a247d1c5c)

No other fork lines were moved or dropped.

Upstream's own failures (reported, not patched)

check:flaky-test-pattern-ratchet fails on pristine upstream 0571e45107 too. Upstream's baseline predates stablyai#33407's move of the filesystem-watcher tests into src/main/ipc/filesystem/watchers/: 6 stale rows at the old paths, 6 unbaselined rows at the new ones. It also has windows-pty-job.win32.test.ts at 8 against 6 and orchestration-idle-mail-delivery.spec.ts at 6 against 7. CI's "Enforce ratchets" step scopes to the files this PR changes, which include those, so it is expected to be red for upstream's reasons.

Some notable upstream changes in the range

Why

Daily upstream sync.

Linked Issue

N/A: daily upstream sync.

Visual Proof

N/A: no visible change in the fork's UI. The conflicts are in help-text selection, catalogs, terminal wiring and tests.

Testing

All checks ran on the merge result in the sync worktree, before the commit:

  • Install: pnpm install --frozen-lockfile (the lockfile and every package.json equal upstream's).
  • Typecheck: pnpm tc passes, before and after the fixture rename. A deliberate type error in a scratch file made it fail, which proves the gate is live.
  • Fork tests: every unit test file the fork adds or changes against upstream: 115 files, 1,451 tests passed, 8 skipped. orca-runtime.test.ts (it runs the fork's worktree-ps-agent-row-dismissal.spec.ts), run with fixture signing off: 1,505 passed, 3 skipped. The fork's 3 e2e specs were not run.
  • Touched directories: src/main/updater*, src/renderer/src/components/settings, src/renderer/src/components/terminal-pane, src/renderer/src/i18n, plus pty-pane-copies-untouched-main.test.ts: 907 files passed, 1 skipped; 8,415 tests passed, 38 skipped.
  • Changed-code gate: check-changed-code-quality.mjs with ORCA_SYNC_PR_DIFF_BASE=0571e45107. It found 1 finding across 328 fork files (the .fixture import above), and 0 after the rename.
  • Lint: full-repo oxlint reports 0 errors, and every other step of pnpm lint passes on its own. The exception is the flaky-test ratchet. In the fork-delta scope (ORCA_SYNC_PR_DIFF_BASE=0571e45107, what a fork checkout sees after this merge) it passes. In this PR's CI scope it shows only upstream's own rows above. verify:localization-catalog and verify:localization-runtime-catalog also pass.
  • Lint and format of everything the merge stages (3,189 code files and 69 others outside cloud/): oxlint with the default, JS-plugin and React Doctor configs, ast-grep scan, and oxfmt --check all pass. The pre-commit hook then ran normally, and the tree before the commit (291811324c) equals HEAD^{tree} after it.
  • Signature: d0a85cc508 is G from the sync key BF1DD75F888E96080C2453E2D9E158C5D6874235.

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, before this merge:

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
adifsgaid and others added 23 commits October 25, 2026 00:44
…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
Upstream range 30733ac..0571e45, 213 commits. 11 conflicted
files, each one hunk; the fork's lines are kept unchanged on upstream's
new code.

- Managed-server update help (fork #17): RemoteServerUpdateStatus.tsx
  keeps the fork's help-URL branch first, ahead of upstream stablyai#33397's
  new managedOverSsh branch. The six conflicting catalogs (en es fr ja
  ko zh) take upstream's managedOverSshHelp plus the fork's two keys.
- Auto-resume (fork #6): connect-pane-pty.ts installs the fork's
  resume recovery, then upstream stablyai#33315's pre-ready typed draft;
  session-reconcile-dispose.ts runs the fork's resume cleanup, then
  upstream's draft discard.
- Update sources (fork #10 #16): updater.check-preflight.test.ts
  imports both the fork's window fake and upstream stablyai#33294's
  updaterMainWindow.
- Fork build pipeline (fork #8): .gitignore takes upstream stablyai#33406's
  component-fixtures allow-list line plus the fork's two lines.

Two breaks the conflict list did not show:
- Upstream stablyai#33406 forbids importing a `.fixture` module outside tests.
  The fork's updater-release-source-feed.fixture.ts, imported by the
  updater test harness, is renamed .test-fixture.ts.
- Upstream stablyai#33430's flaky-test ratchet baselined only upstream's test
  files. The fork's 17 rows (52 findings, all in fork-only test files)
  join that baseline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@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:27:15.873478Z d0a85cc 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.

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.