Commit Graph
22778 Commits
Author SHA1 Message Date
Neil 4498fffc35 fix(sync): regenerate rpc catalog and locale runtime catalogs; drop retired zh keys; split ProjectCombobox keys/props under max-lines; arming a cloud row closes the Add project cascade 2026-11-12 04:10:20 -08:00
Neil 3091a87385 Merge stablyai/orca main (52b618339f) into cloud/integration
Resolve 104 conflicts toward upstream's regrouped layout (rpc, profile-state, orca-profiles,
renderer lib/runtime moves) with cloud behaviour re-applied; repoint cloud imports at moved modules.
2026-11-12 03:30:25 -08:00
Brennan Benson 52b618339f Stream protected usage caches without whole-file buffers (#41478)
* Stream usage source caches without whole-document strings

* Keep the validated source-array type through migration

* Narrow migrated source records without an assertion

* Assert cache preservation without runtime-specific error copy

* Stream protected usage cache persistence and verification

* Assert bounded usage cache input before gzip compression

* Retain compressed usage cache publication bounds

* Verify persisted output in usage cache streaming contract
2026-11-12 02:55:43 -08:00
Neil fd60f4fd7d fix(new-workspace): move Linear and Jira scope pickers into source results popover (#41472)
* fix(new-workspace): move Linear and Jira scope pickers into source results popover

* fix(workspace): preserve focus around nested scope pickers
2026-11-12 02:43:48 -08:00
OrcaWinandOrcaWin c0d4b77a6f test: remove low-value mobile formatting and adapter suites (#41495)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 02:35:37 -08:00
OrcaWinandOrcaWin 831f655b1d test: remove low-value smoke and fixture assertions (#41493)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 02:25:47 -08:00
Neil 23e8982804 Merge pull request #524 from nwparker/cloud/entitlements-b2
feat(cloud): ENTITLEMENTS-B2 metadata.orca_plan on Stripe prices is the catalog join key
2026-11-12 02:25:29 -08:00
Neil d3b6609ac9 refactor(rpc): group root modules by defining owner (#41475)
* refactor(rpc): group root modules by defining owner

* test(orcad): include JSON CLI failures in launcher diagnostics
2026-11-12 02:18:19 -08:00
c58ac9cf1c fix(codex-hooks): name Orca's Codex hooks in Codex's hook review on macOS and Linux (#41487)
* fix(codex-hooks): name Orca's Codex hooks so Codex's hook review stops showing "Hook N"

Codex's hook review names a hook by its statusMessage and lists one without
it as "Hook 1", "Hook 2" and so on. Orca's nine Codex hooks had none, and a
name added by hand was stripped on the next reconcile, because Orca
replaces any entry that differs from its own.

Orca's entries now carry statusMessage "Reporting status to Orca". Codex
hashes the status message, so every trust entry Orca writes or recognizes
includes it: the local, remote and WSL installs, the status probe, and the
locally computed hashes. Approval cleanup still recognizes approvals made
for the unnamed entries.

The Codex hash memo was keyed by Codex version and command only, so after
this change it would have handed back the unnamed hashes as Codex's answer.
Records now store the status message, and a record without the current one
is ignored, which makes Orca ask Codex again. Old records still count as
known Orca approvals.

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

* fix(codex-hooks): name only form-2 hook commands and bump the form

Older builds share ~/.codex and rewrote the named entry back to unnamed on
every launch, since the command bytes were unchanged. Bump the POSIX command
form to 2 so they leave it alone, and name only commands that carry the form
marker. Windows, SSH and WSL commands have no marker and keep their frozen
bytes unnamed. Memo, stopgap and rollback stay command-keyed, which the form
bump already separates.

---------

Co-authored-by: Teddy Chan <1013507+teddychan@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 10:11:26 +00:00
OrcaWinandOrcaWin cdfcd41056 test: remove low-value media registry and watcher cases (#41485)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 02:01:53 -08:00
Brennan Benson d1f4021716 Avoid refetching every linked Linear badge on window focus (#41384)
* Avoid refetching every linked Linear badge on window focus

* Preserve sourced badge updates without focus polling

* Use a fixed clock in linked issue refresh contracts

* Resolve linked issue refresh scope from its source
2026-11-12 01:56:27 -08:00
OrcaWinandOrcaWin 4214d3da1c test: remove low-value input, media, and browser examples (#41484)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:52:38 -08:00
Neil c856b945f1 feat(cloud): ENTITLEMENTS-B2 metadata.orca_plan on Stripe prices is the catalog join key
Neil's Q1 answer: a plan id on the Stripe Price/Product maps to the repo catalog's entitlements.
seatPriceMatch reads price.metadata.orca_plan (after env ids and price history, before lookup key
and product); the catalog sync logs a lookup-key/tag mismatch; stripe-test-setup tags every price.
2026-11-12 01:44:10 -08:00
Neil fe2db1b352 Merge pull request #507 from nwparker/cloud/entitlements-b
feat(cloud): ENTITLEMENTS-B Stripe lifecycle for grants, reconciliation, GET /v1/plans and GET /v1/entitlements (fixes the planForPrice orphaning bug)
2026-11-12 01:44:05 -08:00
Neil 93184dbdcc Merge pull request #512 from nwparker/punchlist/ja21b-progressive-billing
feat(cloud): progressive billing (JA-21), with no billing hints in the composer and a blocker on the creating sheet
2026-11-12 01:42:40 -08:00
Neil 2fa19a0b7d Merge pull request #482 from nwparker/cloud/n02-reland
fix(cloud): N-02 cloud panes keep a local terminal's 5000 rows across reopen and sleep
2026-11-12 01:42:17 -08:00
OrcaWinandOrcaWin eb16a6e351 test: remove low-value input and native decoder checks (#41481)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:30:04 -08:00
Brennan Benson 1e09c9462d Stream large usage source caches without whole-document strings (#41459)
* Stream usage source caches without whole-document strings

* Keep the validated source-array type through migration

* Narrow migrated source records without an assertion

* Assert cache preservation without runtime-specific error copy
2026-11-12 01:28:48 -08:00
Kelvin Amoaba fa47b1a434 fix(computer): stop action results repeating the value or text an agent wrote (#41479)
* fix(computer): stop echoing written text and secure read-backs in action results

* fix(computer): treat a truncated set-value read-back as unverifiable

* fix(computer): accept code-point truncated read-backs as unverifiable
2026-11-12 09:25:49 +00:00
Neil c2f5b1fbb7 Merge remote-tracking branch 'private/cloud/integration' into cloud/n02-reland
# Conflicts:
#	cloud/apps/sandbox-control/image/vm-scripts.generated.ts
2026-11-12 01:25:37 -08:00
Neil 4b7456cada Merge pull request #520 from nwparker/cloud/w6-bind-identity
fix(cloud): binding the GitHub App through OAuth also connects the binder's GitHub identity (commits as you)
2026-11-12 01:25:14 -08:00
Kelvin Amoaba 0b516b8a9d fix(workspace-cleanup): warn before deleting a workspace's ignored local files like .env (#41446)
* fix(workspace-cleanup): warn before deleting a workspace's ignored local files

git worktree remove deletes ignored files such as .env and local config,
and git status never reports them, so cleanup showed "Clean git" and the
delete dialog said nothing. Read them with a bounded ls-files listing,
skip regenerable output, symlinks and byte-identical copies of the main
checkout, and surface the rest as an approval-only cleanup blocker and a
warning in the delete confirmation.

* fix(workspace-cleanup): show an unchecked warning when the ignored-files check fails

* style(workspace-cleanup): format merged fact status list
2026-11-12 09:23:46 +00:00
Neil 930d9f3acf Merge pull request #519 from nwparker/cloud/w6-token-paste
fix(cloud): setup-token paste fallback matches the paste-code strip (design-squad)
2026-11-12 01:16:24 -08:00
OrcaWinandOrcaWin 318bf64769 test: remove low-value catalog and shared checks (#41474)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:13:49 -08:00
Kelvin Amoaba b03285ef18 fix(sidebar): show the workspace name you set instead of a linked task title (#41470)
* fix(sidebar): keep a user-set workspace name over linked task titles

The card title guessed whether a name was user-set by comparing it with the branch, so a pinned name equal to the branch lost to a linked issue or PR title. It now reads displayNameMode. The Workspace details dialog also pins the name when the field was edited, even if the text ends up equal to the branch.

* test(sidebar): drop title case that passes without the fix
2026-11-12 09:12:55 +00:00
Neil c8a8288a5f Allow hosts to disable mobile push delivery (#41456)
* feat(push): allow hosts to disable mobile push delivery

* test(push): drop default-mode check that passes without the change
2026-11-12 01:06:39 -08:00
Neil 8358b360d8 fix(mobile): exclude overlay permission and clear removed-host diagnostics (#41455)
* fix(mobile): exclude overlay permission and clear removed-host diagnostics

* fix(mobile): ignore late diagnostics for removed hosts

A closing client or a re-acquired open that fails with host-not-found could
append after removal and re-persist diagnostics for the removed host.
2026-11-12 01:06:07 -08:00
Neil ec96b185d8 test(cloud): install redirect with an OAuth code (request-auth-on-install) stores the identity 2026-11-12 01:03:41 -08:00
Neil 380b6056ea Merge pull request #506 from nwparker/cloud/reland-485
fix(cloud): re-land #485 zsh history hook (REG-11 was a test artifact)
2026-11-12 01:03:39 -08:00
OrcaWinandOrcaWin c32480d9e1 test: remove low-value shared and CLI checks (#41465)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:01:57 -08:00
Kelvin Amoaba 161919e32d feat(workspace-cleanup): scan and remove workspaces on paired and SSH hosts (#41454)
The cleanup scan ran only in desktop main over its own saved repos, so
workspaces on a paired server or an SSH host's orcad never showed up, and an
SSH host's retained source rows showed as "Remote unavailable" even while its
orcad served them.

Each host now runs the same scan over the repos it owns through a new
workspaceCleanup.scan RPC. The dialog merges every known host's answer,
names remote rows by this window's runtime host id so removal goes through
the existing worktree.rm route, cancels remote legs with their scan id, and
builds "Remote unavailable" rows from its catalog only when a host can't be
reached. Desktop main scans only the repos it shows.
2026-11-12 09:00:53 +00:00
Neil cdb5f57625 fix(cloud): binding the GitHub App through OAuth also connects the binder's GitHub identity (commits as you) 2026-11-12 00:59:44 -08:00
Kelvin Amoaba ceb2039582 test(plugins): pin the catalog repo's initial branch in the CLI install test (#41466)
The test reads the catalog at ref master but created it with plain git init, so
it failed wherever init.defaultBranch is main (e.g. Xcode's git on macOS).
2026-11-12 08:56:57 +00:00
Neil 7f84ed30e0 docs(mobile): clarify pairing access and lost-device revocation (#41453) 2026-11-12 00:52:03 -08:00
Neil ec99d02d1c Merge pull request #504 from nwparker/cloud/entitlements
feat(cloud): ENTITLEMENTS-A plans catalog, entitlement grants and resolver (billing, shadow on dev)
2026-11-12 00:50:48 -08:00
OrcaWinandOrcaWin f70465cf3a test: remove low-value renderer adapter and projection checks (#41462)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 00:42:28 -08:00
Neil 06dd9adeca fix(cloud): JA-21 blocker reads billing's default cap (ENTITLEMENTS-C): Turn on overage without a guessed $25; cap suggestion adds billing's default 2026-11-12 00:42:23 -08:00
Jinjing e881c7e76c Highlight featured and newly added plugins (#41460)
* feat(plugins): Featured and Newly added rows in the plugin catalog

Featured shows the most installed plugin per category; Newly added lists plugins
by the catalog's new entry-level addedAt (hidden when no catalog dates entries),
with a New badge for 24h and an Added this week filter. Snapshots move to a v3
cache key so older builds never read addedAt.

* feat(plugins): derive Newly added dates from release dates, as the website does

Drops the catalog-level addedAt field (schema, docs, v3 snapshot key). Main now
estimates a listing date for each non-official plugin from its oldest dated
release, and the Newly added row, New badge and This week filter read it through
shared helpers that mirror orca-site's pluginNew.ts: 30-day window, newest first,
dates more than an hour in the future ignored, "just now / N hours ago / N days ago".

* feat(plugins): show nine Newly added plugins, drop the counts release dates inflate

Listing dates come from each community plugin's oldest kept release, and
catalogs keep only recent releases, so almost every plugin looks new: 181
of 182 fall in the 30-day window and 142 count as this week. Remove what
that inflates rather than flag it: the "N this week" count and its See all,
the This week filter, and the 24h New badge.

The Newly added row now offers the website's nine in the catalog's normal
wrapping grid, the same columns and card widths as the catalog groups.

* fix(plugins): pick Featured winners by every kind a plugin belongs to

Featured used only a plugin's first filter kind, while the category filters
count every kind, so category order could change winners or drop a kind's only
candidate. Each plugin, walked by installs with a key tie-break, now fills one
unfilled kind it belongs to (the one with the fewest candidates left, then by
name). Also note why Featured is a capped one-row teaser and pin the cap.

* fix(plugins): hide Featured when Newly added is empty

Without Newly added, Featured sat directly on the Official catalog, whose
leading cards are the same popular plugins in the same columns, so back-to-back
rows repeated and read as a render bug. Featured now shows only alongside
Newly added. Leaving featured plugins out of their catalog instead would move a
card into the catalog the moment it's installed and skew the catalog's N of M.

Adds a PluginManager test that no plugin card shows twice in the empty state,
and page-level fixtures (390, 600, 1440, empty 1440) for screenshots.

* fix(plugins): cap Newly added at two full rows of the current columns

At phone width nine stacked cards pushed the catalogs about 3.5 screens
down. The grid now shows two full rows of its container-query column
count (8 at four columns, 4 at two, 2 at one), hides a partial last row,
and the pick renders at most eight. Hidden plugins stay listed in their
catalog group, so there's no See all.

* Correct plugin catalog fixture evidence

* Make plugin highlight tests match observable behavior
2026-11-12 00:40:31 -08:00
NeilandJinjing 789ead4484 perf(sidebar): avoid repeated DOM scans in review visibility reports (#41318)
* perf(sidebar): share mounted row scans across review visibility checks

* refactor(sidebar): drop review-visibility parameters the hook no longer uses

The hook now gates on enabled and filters on-screen cards itself, so visibleReviewCardIds no longer needs enabled or isOnScreen.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-11-12 00:39:09 -08:00
Kelvin Amoaba 7e2810e653 fix(sidebar): keep the session name first on a monitoring agent row (#41458)
* fix(sidebar): keep the session name first on a monitoring agent row

Leading with "Monitoring background tasks" made every monitoring row in a
narrow sidebar truncate to the same text. The row's dot already draws the
monitoring glyph, so the status can trail the name like every other state.

* fix(agents): keep a monitoring child row's name first too

Sub-agent rows (desktop sidebar, chat strip and mobile) share one lead/trail
rule that also put "Monitoring background tasks" before the name.
2026-11-12 08:38:03 +00:00
NeilandJinjing 62edc2d8a7 perf(sidebar): avoid repeated DOM scans in review visibility reports (#41318)
* perf(sidebar): share mounted row scans across review visibility checks

* refactor(sidebar): drop review-visibility parameters the hook no longer uses

The hook now gates on enabled and filters on-screen cards itself, so visibleReviewCardIds no longer needs enabled or isOnScreen.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-11-12 00:36:25 -08:00
Kelvin Amoaba 5971e67757 fix(sidebar): keep the session name first on a monitoring agent row (#41458)
* fix(sidebar): keep the session name first on a monitoring agent row

Leading with "Monitoring background tasks" made every monitoring row in a
narrow sidebar truncate to the same text. The row's dot already draws the
monitoring glyph, so the status can trail the name like every other state.

* fix(agents): keep a monitoring child row's name first too

Sub-agent rows (desktop sidebar, chat strip and mobile) share one lead/trail
rule that also put "Monitoring background tasks" before the name.
2026-11-12 08:36:10 +00:00
Neil 778b21dfdb refactor(cloud): hoist the sheet title so VmBuildSheet stays within the line limit 2026-11-12 00:34:24 -08:00
Neil 424e53d1eb fix(cloud): JA-21 blocked sheet keeps a neutral cloud icon by its title; the card's triangle carries the warning (design-squad) 2026-11-12 00:34:24 -08:00
Neil 94c70c4960 fix(cloud): billingBlockKind without a non-exhaustive switch 2026-11-12 00:34:24 -08:00
Neil 296d198b89 refactor(cloud): JA-21 blocker owns Compare plans; billingBlockKind keeps VmBuildSheet under the line limit 2026-11-12 00:34:24 -08:00
Neil 05b7441731 feat(cloud): JA-21 the create's first step says Checking your plan… until the server takes it; Run on fixtures show the progressive row; continuing fixture 2026-11-12 00:34:24 -08:00
Neil ebecd11dc8 feat(cloud): progressive billing (JA-21, Neil) — no plan/hours/payment warnings or blocks in the composer; Create goes on and the creating sheet shows a blocker card (Turn on overage / raise cap / Compare plans / Update payment, member: ask an owner or admin), continuing the create after an in-app fix 2026-11-12 00:34:23 -08:00
Neil 9ff3eda40a fix(cloud): inline-code segments keyed by text offset (react-doctor) 2026-11-12 00:34:16 -08:00
Neil 2691accd1d Merge pull request #518 from nwparker/punchlist/account-billing-label
fix(settings): "Account & billing", and just "Account" with no billing (Neil)
2026-11-12 00:33:24 -08:00