Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
e8d8f2f
fix(deps): take Electron 43.7.5 so detached webviews stop blanking br…
Jinwoo-H Sep 28, 2026
9c1f9b5
docs(readme): remove the TestFlight link (#23660)
Jinwoo-H Sep 28, 2026
a9195ee
docs: update GitHub star history chart (#23661)
Jinwoo-H Sep 28, 2026
b1d6fdf
fix(claude): withdraw a follow-up queued behind a stopped turn instea…
brennanb2025 Sep 28, 2026
d691486
fix(codex): a message whose turn was stopped before Codex took it is …
brennanb2025 Sep 28, 2026
504e749
Show a resting Claude chat's effort instead of a blank picker (#23106)
brennanb2025 Sep 28, 2026
95a16e3
fix(release): stop the release policy from deleting pipeline-cut rele…
AmethystLiang Sep 28, 2026
a84bd1c
fix(claude): write only the hook events and statusLine the user's Cla…
brennanb2025 Sep 28, 2026
2c92e5e
fix(native-chat): a failed Codex turn keeps its failure and "Worked f…
brennanb2025 Sep 28, 2026
3eac4d9
fix(terminal): stop guessing that apps died and wiping their keyboard…
Jinwoo-H Sep 28, 2026
84daac2
test(e2e): take the sidebar measured-row baseline with reduced motion…
brennanb2025 Sep 28, 2026
0034ede
fix(mobile): left-align every line of the desktop host card (#23673)
Jinwoo-H Sep 28, 2026
9d11a75
fix(native-chat): each chat failure says why in plain words, on the t…
brennanb2025 Sep 28, 2026
d5451d9
test(cross-version): a released client's capabilities come from its o…
brennanb2025 Sep 28, 2026
6c4625d
fix(terminal): main records every tab close, and seeding reads the re…
brennanb2025 Sep 28, 2026
9b46c3f
fix(terminal): let unselected Cmd+C reach apps that own their selecti…
Jinwoo-H Sep 28, 2026
1f6f852
feat(terminal): add Reset Terminal that clears leftover input modes o…
Jinwoo-H Sep 28, 2026
fe7e13d
test(claude): expect typed cancellation in queued-send settlements (#…
nwparker Sep 28, 2026
55aea85
fix(ci): repair terminal link handling and E2E recovery fixtures (#23…
nwparker Sep 28, 2026
409462a
fix(status-bar): fold agents into +N before status labels go icon-onl…
AmethystLiang Sep 28, 2026
fe34acd
fix(mobile): truncate oversize markdown reads instead of failing them…
Jinwoo-H Sep 28, 2026
0f52bb8
perf(ci): use four ARM test workers and remove repeated compilation (…
nwparker Sep 28, 2026
0ceb3fa
test(e2e): give wheel probes a running TUI fixture (#23691)
nwparker Sep 28, 2026
1a0ff42
test: finish sidebar lazy imports before teardown (#23694)
nwparker Sep 28, 2026
dbc4e21
fix(sidebar): move agent child disclosure to the right (#23577)
brennanb2025 Sep 28, 2026
29c7d5d
fix(mobile): start AI-button agents through agent.launch, never a bar…
brennanb2025 Sep 28, 2026
8c61a5d
fix(windows): require signed release binaries and identify CLI launch…
nwparker Sep 28, 2026
e87772b
test: retire a dormant worker through host-owned status (#23686)
nwparker Sep 28, 2026
b482b4d
test: measure pointer gestures on the isolated visible display (#23678)
nwparker Sep 28, 2026
813aff8
fix(opencode): stop OpenCode 2 loading a stale plugin from the retire…
OrcaWin Sep 28, 2026
153d3fd
feat(native-chat): Codex sessions write their subagents into the host…
brennanb2025 Sep 28, 2026
a880c88
test(browser): check grab scope through responsive chrome (#23709)
nwparker Sep 28, 2026
2ca4ecb
feat(orchestration): let a structured chat run orchestration as itsel…
brennanb2025 Sep 28, 2026
c5330d0
fix(native-chat): stop killing processes that only inherited a chat's…
brennanb2025 Sep 28, 2026
e8e144b
fix(native-chat): a subagent's words are presented as that subagent's…
brennanb2025 Sep 28, 2026
e794012
fix(tab-group): measure fallback pane geometry once per tab group, on…
brennanb2025 Sep 28, 2026
9b11b1d
fix(agent-hooks): compare status rows structurally instead of seriali…
brennanb2025 Sep 28, 2026
64569a8
fix(ssh): don't overwrite remote agent config after a failed read (#2…
AmoabaKelvin Sep 28, 2026
2af897d
fix(codex): the provider supervisor outlives its provider group when …
brennanb2025 Sep 28, 2026
d68eee3
fix(runtime): retire an exited terminal before its stream end (#23492)
brennanb2025 Sep 28, 2026
d0db35c
fix(terminal): preserve typing while a remote pane reattaches (#23701)
nwparker Sep 28, 2026
2aed2cf
fix(terminal): reveal splits while the source pane binds (#23692)
nwparker Sep 28, 2026
4b622e1
fix(runtime): reopen the quiet-foreground tui-idle lane for agents wi…
brennanb2025 Sep 28, 2026
64dbe87
test(terminal): wait for decoy panes before host parking (#23729)
nwparker Sep 28, 2026
8bb78f0
test(browser): create probe body before starting frame requests (#23730)
nwparker Sep 29, 2026
bd5dca4
fix(editor): preserve combined diff scroll on line focus (#23735)
nwparker Sep 29, 2026
d606be3
test: wait for remote terminal grid convergence after reveal (#23738)
nwparker Sep 29, 2026
da48d98
fix: bound combined diff editors and scope chat style invalidation (#…
nwparker Sep 29, 2026
ccdb324
Add CodeBuddy as a built-in coding agent (#23740)
nwparker Sep 29, 2026
28942ee
test(mobile): repin the RPC recording corpus to main after #22762 (#2…
Jinwoo-H Sep 29, 2026
ec9f35e
perf(ci): plan the unit shards before the static-analysis gate instea…
nwparker Sep 29, 2026
a134d12
feat(mobile): tell users when a newer app binary is installable (#23755)
Jinwoo-H Sep 29, 2026
85ad292
fix(status-bar): re-measure collapsing levels when only the collapsed…
AmethystLiang Sep 29, 2026
a5ce825
Agent launches carry the surface that started them (#23697)
brennanb2025 Sep 29, 2026
94b5a7d
fix(native-chat): only Codex's turn completion ends a Codex turn (#23…
brennanb2025 Sep 29, 2026
b283a09
fix(native-chat): stop flashing "still starting" on every chat launch…
brennanb2025 Sep 29, 2026
2dc2693
fix(native-chat): a turn a proven crash cut short reads interrupted (…
brennanb2025 Sep 29, 2026
b4c19f1
fix(claude): run structured Claude under the POSIX provider superviso…
brennanb2025 Sep 29, 2026
b776e9a
fix(browser): give a tab's identity one owner so viewport presets sto…
brennanb2025 Sep 29, 2026
3976ad4
perf(test): remove obsolete structural snapshots (#23777)
nwparker Sep 29, 2026
2ae7c00
fix(opencode): keep OpenCode 2 panes Working across plugin reloads (#…
brennanb2025 Sep 29, 2026
e899809
fix(mobile): unsubscribe session tabs by request on the direct connec…
brennanb2025 Sep 29, 2026
c5fc0c6
fix(ci): keep a squash-merged RPC recording pin reachable through its…
brennanb2025 Sep 29, 2026
50a8ef1
fix(native-chat): keep a turn's bar on the prompt that opened it (#23…
brennanb2025 Sep 29, 2026
c30c8f9
fix(native-chat): a message Claude folds into its running turn no lon…
brennanb2025 Sep 29, 2026
c8af48d
fix(runtime): settle a quiet Codex composer as ready on every version…
Jinwoo-H Sep 29, 2026
18bd9cb
test(status-bar): cover re-probing a roomier level after the tightest…
AmethystLiang Sep 29, 2026
7445fea
fix(terminal): only diagnose disk exhaustion from capacity errors
nwparker Sep 29, 2026
2ea3fb1
perf(ci): take advisory unit-selection evidence off the gate (#23776)
nwparker Sep 29, 2026
f6324f2
chore(ci): stop auto-filing community PRs onto the project board (#23…
nwparker Sep 29, 2026
ceffecf
fix(setup): remove wait-for-setup helper text (#23799)
nwparker Sep 29, 2026
643f93f
fix(native-chat): drop the Codex error path #23682 removed (#23801)
nwparker Sep 29, 2026
2d358df
fix(i18n): prune the wait-for-setup help copy #23799 removed (#23802)
nwparker Sep 29, 2026
25d9c57
fix(native-chat): keep a child turn settling on an error Codex will n…
nwparker Sep 29, 2026
5560e53
Update README downloads badge
github-actions[bot] Sep 29, 2026
f8f656c
perf(ci): spend fewer concurrency slots per pull request (#23810)
nwparker Sep 29, 2026
33f661b
fix(native-chat): an empty workspace opens the default agent as a cha…
brennanb2025 Sep 29, 2026
f4829f0
fix(renderer): stop the modal toast rule from freezing large diffs (#…
brennanb2025 Sep 29, 2026
b8a7daf
fix(codex): guard the daemon socket in the home a resumed Codex pane …
brennanb2025 Sep 29, 2026
b7e3bbf
fix(browser): restore hover after leaving a mobile viewport preset (#…
AmoabaKelvin Sep 29, 2026
357a2fe
fix(native-chat): group chat rows by the turn that produced them (#23…
brennanb2025 Sep 29, 2026
bd13305
refactor(sidebar): one subagent row for CLI and structured children, …
brennanb2025 Sep 29, 2026
b6c2de9
fix(codex): index a new account home before bridging history into it …
AmoabaKelvin Sep 29, 2026
bb91e39
test(native-chat): main's Codex child tests expect a turn to end on i…
brennanb2025 Sep 29, 2026
36c473e
fix(runtime): wait out Codex 0.157's startup screen, and stop at Code…
brennanb2025 Sep 29, 2026
e1362ad
fix(terminal): stop inline-image decoders exhausting the renderer's w…
OrcaWin Sep 29, 2026
6e1b7e7
test: remove junk tests that assert source text instead of behavior (…
nwparker Sep 29, 2026
4da485c
fix(native-chat): render the terminal-backed chat through the structu…
brennanb2025 Sep 29, 2026
c49388c
fix(native-chat): Stop is there from the moment a message is sent (#2…
brennanb2025 Sep 29, 2026
31012ae
test: remove assertion-free probes, copied inventories and export-sha…
nwparker Sep 29, 2026
2c62dd8
Merge upstream main (31012aeb09) into swaplabs/main
kiwidream Sep 29, 2026
945b00b
Merge remote-tracking branch 'swaplabs/swaplabs/main' into HEAD
kiwidream Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
24 changes: 23 additions & 1 deletion .github/workflows/bun-profile-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,24 @@ on:
- '.pnpmfile.cjs'
- '.github/actions/install-node-dependencies/**'
- '.github/workflows/bun-profile-tests.yml'
# The pull request qualifies one platform for an unflavoured change; this is where all six
# are re-qualified, so a platform break surfaces minutes after merge instead of next cron.
push:
branches: [main]
paths:
- 'src/**'
- 'config/**'
- 'native/**'
- 'tests/**'
- 'resources/**'
- 'package.json'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
- 'tsconfig.json'
- '.npmrc'
- '.pnpmfile.cjs'
- '.github/actions/install-node-dependencies/**'
- '.github/workflows/bun-profile-tests.yml'
workflow_dispatch:
schedule:
- cron: '30 11 * * *'
Expand Down Expand Up @@ -57,7 +75,11 @@ jobs:
persistence:
needs: changes
# Missing/failed detection runs the full matrix; manual runs remain unconditional.
if: ${{ !cancelled() && needs.changes.outputs.should_run != 'false' }}
# A draft carries no platform verdict; readiness re-triggers this workflow. Spelled against
# the event name so the push and schedule paths do not rest on a null property comparison.
if: >-
${{ !cancelled() && needs.changes.outputs.should_run != 'false' &&
(github.event_name != 'pull_request' || github.event.pull_request.draft != true) }}
strategy:
fail-fast: false
matrix:
Expand Down
9 changes: 4 additions & 5 deletions .github/workflows/homebrew-bump.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,11 +132,10 @@ jobs:
print(src)
PY

# Why: reuse the existing buf0-bot GitHub App (also used by
# track-community-prs.yaml) instead of minting a new PAT. The app is
# installed org-wide, so it has access to stablyai/homebrew-orca
# automatically. GITHUB_TOKEN cannot push cross-repo; a short-lived
# installation token can.
# Why: reuse the existing buf0-bot GitHub App instead of minting a new
# PAT. The app is installed org-wide, so it has access to
# stablyai/homebrew-orca automatically. GITHUB_TOKEN cannot push
# cross-repo; a short-lived installation token can.
- name: Generate buf0-bot token
id: app-token
uses: actions/create-github-app-token@v3
Expand Down
22 changes: 14 additions & 8 deletions .github/workflows/mobile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,8 @@ on:
- 'config/scripts/mobile-test-change-scope*'
- 'config/scripts/pr-code-change-scope.mjs'
- 'config/scripts/mobile-recording-pin-checkout.test.mjs'
# Why main too: a behaviour-change branch legitimately pins its own last fenced commit, and that
# commit only stops being reachable when the branch squash-merges. The pull_request run cannot
# see that; this one is where the pin guard finds it.
# Why main too: a squash is where a spliced corpus lands, and where a behaviour-change branch's
# own pinned commit leaves main's history for its pull request's head ref, which the guard follows.
push:
branches:
- main
Expand Down Expand Up @@ -182,6 +181,10 @@ jobs:
name: RPC recording pin
# Why ARM: pure Node plus git; the golden comparison masks `platform`.
runs-on: ubuntu-24.04-arm
# Why pull-requests: the guard asks GitHub which pull requests hold a pin main's history lacks.
permissions:
contents: read
pull-requests: read

defaults:
run:
Expand All @@ -191,7 +194,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v6
with:
# The ancestry verdict is read straight off history. On a shallow checkout
# The reachability verdict is read straight off history. On a shallow checkout
# `git merge-base --is-ancestor` answers from grafted parents, so the guard refuses to
# answer at all rather than reporting a pass it has no evidence for -- and the pinned tree
# below has to be checkable out.
Expand All @@ -211,12 +214,14 @@ jobs:
# Seconds. No `--ref`, so the pin is judged against the same tree it was read out of. On a
# pull request that is the merge preview, which already carries main's repins; judging the
# branch head instead fails every branch cut before the day's repin, and its instruction would
# tell the author to pin their own head -- creating the break this guard exists to catch. A
# branch that pins its own commit passes here and fails on the push after the squash, which is
# where the pin actually leaves the history.
# tell the author to pin their own head. A branch that pins its own commit still passes on the
# push after the squash: the guard asks GitHub which pull requests hold the pin and fetches
# their `refs/pull/<n>/head`, which GitHub keeps for good. The token lifts the API rate limit.
- name: Check the recording pin is reachable
shell: bash
run: pnpm exec tsx scripts/rpc-recording-pin-guard.mts ancestry
env:
GITHUB_TOKEN: ${{ github.token }}
run: pnpm exec tsx scripts/rpc-recording-pin-guard.mts reachable

# ~2 min locally for the record itself, so it is gated rather than run twice over. A pull
# request that moves none of the corpus, the manifest or the recorder cannot move this
Expand All @@ -226,6 +231,7 @@ jobs:
- name: Reproduce the corpus from the pinned tree
shell: bash
env:
GITHUB_TOKEN: ${{ github.token }}
PIN_GUARD_BASE: ${{ github.event.pull_request.base.sha }}
run: |
if [ -n "$PIN_GUARD_BASE" ]; then
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/node-next-compat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,12 @@ jobs:
native-runtime: node
node-version: ${{ matrix.node }}

unit_plan:
uses: ./.github/workflows/unit-plan.yml

test:
needs: [test_native_cache]
needs: [test_native_cache, unit_plan]
uses: ./.github/workflows/unit-tests.yml
with:
node_versions: '["24", "26"]'
shards: ${{ needs.unit_plan.outputs.shards }}
29 changes: 24 additions & 5 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,7 @@ jobs:
src/main/zsh-scoped-histfile.live-shell.test.ts \
src/main/zsh-startup-hook-user-config-equivalence.live-shell.test.ts \
src/main/zsh-wrapper-version-mismatch.live-shell.test.ts \
src/main/runtime/structured-session-cli-login-shell.live-shell.test.ts \
src/renderer/src/components/terminal-pane/fish-color-scheme-child-stdin.node-pty.test.ts \
src/shared/fish-query-reply-child-stdin.node-pty.test.ts \
src/shared/pty-reply-echo-shapes.node-pty.test.ts \
Expand All @@ -663,20 +664,40 @@ jobs:
native-runtime: node
node-version: '24'

# Why hoisted out of unit-tests.yml: a caller's `needs` gate the whole called workflow, so
# while planning lived in there it queued behind static analysis and typecheck and the shards
# then queued behind it. Planning needs none of their output, so running it against
# code_paths alone overlaps it with the gate. Measured a median 93s off the matrix's start.
unit_plan:
needs: [code_paths]
if: needs.code_paths.outputs.test == 'true'
uses: ./.github/workflows/unit-plan.yml
with:
selection_mode: ${{ vars.ORCA_UNIT_SELECTION_MODE || 'shadow' }}

test:
needs: [code_paths, test_native_cache, static_analysis, typecheck]
needs: [code_paths, unit_plan, test_native_cache, static_analysis, typecheck]
# Honor cancellation while allowing the optional native-cache primer to skip.
if: >-
!cancelled() &&
needs.code_paths.outputs.test == 'true' &&
needs.unit_plan.result == 'success' &&
needs.static_analysis.result == 'success' &&
needs.typecheck.result == 'success' &&
(needs.test_native_cache.result == 'success' || needs.test_native_cache.result == 'skipped')
uses: ./.github/workflows/unit-tests.yml
with:
node_versions: '["24"]'
runner: ubuntu-24.04-arm
selection_mode: ${{ vars.ORCA_UNIT_SELECTION_MODE || 'shadow' }}
shards: ${{ needs.unit_plan.outputs.shards }}

# Why a sibling and not part of the test workflow: it is advisory, so it must not delay the
# gate. Inside unit-tests.yml a caller's `needs: test` waited for it, holding verify ~36s
# after the last shard. Deliberately absent from verify's needs for the same reason.
unit_selection_evidence:
needs: [test]
if: ${{ !cancelled() && needs.test.result == 'success' }}
uses: ./.github/workflows/unit-selection-evidence.yml

# Why a separate job: the test needs a real Chrome, and the sharded `test` matrix
# would pay for it on every shard to run one file in whichever shard it landed in.
Expand Down Expand Up @@ -1130,11 +1151,9 @@ jobs:
uses: actions/cache@v5
with:
path: native/windows-cli-launcher/.build
key: windows-cli-launcher-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/windows-cli-launcher/**', 'config/scripts/build-windows-cli-launcher.mjs') }}
key: windows-cli-launcher-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('native/windows-cli-launcher/**', 'config/scripts/build-windows-cli-launcher.mjs', 'resources/build/icon.ico', 'package.json') }}

- name: Build package inputs
env:
ORCA_REUSE_WINDOWS_CLI_LAUNCHER: '1'
run: pnpm run build:release:parallel

- name: Restore compiled Electron native modules
Expand Down
Loading
Loading