Commit Graph
21173 Commits
Author SHA1 Message Date
Neil 12fe0c867f feat(cloud): sign agents out before sandbox delete, scrub env-build images, recipe env warning (A9, P-4)
- Worker: run orca-agent-signout (each agent's logout, then credential files) on a running sandbox
  before the provider delete; bounded (20 s) and best effort, never blocks the delete.
- Environment builds: scrub agent auth (--scrub-only) before the snapshot; fail closed.
- New VM script registered in VM_SCRIPTS + provision loop; vm-scripts regenerated.
- Main IPC ephemeralVm:forwardedEnvSummary returns names only, grouped by credential-looking.
- P-4 warning component (+ fixture) shown under Settings > recipes; delete dialog line for awake
  Orca Cloud sandboxes.
2026-11-10 04:07:13 -08:00
Neil 0f8ab90314 Merge pull request #222 from nwparker/cloud/w6-agent-sources
W6: agent Source per person (/v1/agent-sources) + per-agent credential names
2026-11-10 03:31:03 -08:00
Neil bc7e012e6e Merge pull request #219 from nwparker/cloud/agents-a6
feat(cloud): this computer's Agent API Keys never reach an Orca Cloud VM; save each as a personal Cloud secret (A6)
2026-11-10 03:27:21 -08:00
Neil 18918529cf Merge pull request #218 from nwparker/cloud/read-snapshot-session-list
fix(cloud): read snapshot lists chats from orcad's session store
2026-11-10 03:24:40 -08:00
Neil 4b31500921 Merge pull request #221 from nwparker/cloud/run-actions-no-port-pin
fix(ports): each workspace keeps its own ORCA_PORT block, even on a VM whose launcher sets ORCA_PORT
2026-11-10 03:24:09 -08:00
Neil 9d9d91e875 Merge pull request #220 from nwparker/ds-35-signin-copy-team-page
fix(cloud): DS-35 sign-in copy, one unauthorized sentence, team busy row and chip contrast
2026-11-10 03:23:46 -08:00
Neil 9b56250956 feat(cloud): agent Source per person (GET/PUT /v1/agent-sources, offer answers, owner block) — 'Your sign-in' keeps that agent's credentials out of the sandbox session live; shared credential-names module + Worker mirror (migration 0041) 2026-11-10 03:21:22 -08:00
Neil c7f9f4a80b fix(cloud): DS-35 expired session is a neutral status with a LogIn Sign in action 2026-11-10 03:20:21 -08:00
Neil 97764fe305 fix(cloud): DS-35 sign-in copy, one unauthorized sentence, team busy row and chip contrast
- Orca account pane: signed-out and reconnect-required lines name Orca Cloud.
- Every unauthorized failure (lifecycle toast, cloud workspace errors, share links,
  cloud secrets) now says "Sign in to Orca again to continue." with a "Sign in" action.
- Team page busy row keeps full contrast: spinner + aria-busy, no opacity dimming.
- destructive-chip text uses a new --destructive-text token (light: 85% mix with
  foreground) so it clears AA on its tint.
- TeamDialogHost quietRefresh depends on the stable refresh callbacks.
2026-11-10 03:13:26 -08:00
Neil 233ddf8111 fix(ports): never pin every workspace on a host to the host's ORCA_PORT
#216 let a launcher-set ORCA_PORT (the VM launcher sets 3000) override the per-workspace block, so
two worktrees on one cloud VM would both get 3000. Each workspace always gets its own registry
block again; a regression test covers a host env with ORCA_PORT=3000.
2026-11-10 03:12:32 -08:00
Neil 86ccf4eb29 fix(cloud): read snapshot lists chats from orcad's session store (the local socket can't stream subscribeStatus)
Live on dev the first capture sealed zero sessions: agentSession.subscribeStatus needs a streaming
transport and the unix socket refuses it, and worktree.ps lists only agents live right now. The
collector now reads orcad's own session records (agent-session-journal.db, read-only): provider,
name and last turn, open tabs first; live worktree.ps rows override status; history still comes
from agentSession.history, with the stored last turn as fallback.
2026-11-10 03:10:34 -08:00
Neil be26e2f832 copy(w8): DS-04 phone status reads "N sandbox hours so far. Uses sandbox hours while running." / "…Uses no sandbox hours while asleep." (no dollars) (#217) 2026-11-10 03:09:39 -08:00
Neil 9b48cee115 Merge pull request #216 from nwparker/cloud/run-actions-followup
Run actions: fixes from the live cloud proof (adopted tab ids, persisted runs, rollover relaunch, host-pinned ORCA_PORT)
2026-11-10 03:09:04 -08:00
Neil d3bf567b19 fix: keep the launch path free of Electron (user data path set at startup) 2026-11-10 03:05:42 -08:00
Neil 7734019354 fix(w3): DS-29 follow-up — port row inline actions trimmed, distinct Copy details icon (#215)
* fix(w3): port row keeps only Open in browser, Share… and More inline; Copy details gets its own icon (DS-29 follow-up)

* chore(w3): drop the unreferenced inline copy-button label from every locale
2026-11-10 03:04:17 -08:00
Neil 797504f582 chore(run-actions): read worktree records through the catalog selector 2026-11-10 03:02:30 -08:00
Neil 0b4a4327a9 Merge pull request #189 from nwparker/cloud/sleeping-read-snapshot
feat(cloud): read a sleeping workspace from an E2EE snapshot, without waking it (gap 5)
2026-11-10 03:01:19 -08:00
Neil a4b5d89437 Merge remote-tracking branch 'private/cloud/integration' into cloud/sleeping-read-snapshot 2026-11-10 03:01:14 -08:00
Neil 4ececa2c61 fix: keep the runtime call site to its original size; one import per module 2026-11-10 03:00:43 -08:00
Neil 07ff07d386 Merge pull request #210 from nwparker/cloud/checkpoints-ds39
DS-39: rewind file list, files-only restore, focus ring, disabled checkbox
2026-11-10 02:59:21 -08:00
Neil b341b2b7dd Merge remote-tracking branch 'private/cloud/integration' into cloud/run-actions-followup 2026-11-10 02:55:44 -08:00
Neil e9561c3c50 fix(run-actions): persisted runs load at startup (TDZ), relaunch after a rollover waits for the new host to answer
Found live on an Orca Cloud rollover (m4air): the persisted-run reader referenced a const declared
below the module-level read, so every restart started with no runs and nothing relaunched. The
relaunch also read orca.yaml before the replacement host served RPCs; it now retries with a bound.
2026-11-10 02:55:34 -08:00
Neil a7dbb437cc Merge remote-tracking branch 'private/cloud/integration' into cloud/sleeping-read-snapshot 2026-11-10 02:54:55 -08:00
Neil 47864ce9f4 Merge pull request #212 from nwparker/cloud/overage-rate-copy
copy(billing): overage '{{rate}} per sandbox hour' (glossary)
2026-11-10 02:54:24 -08:00
Neil 4a45475368 Merge pull request #213 from nwparker/ds-15-16-member-billing-checkout
feat(billing): member billing walls and back-to-work after checkout (DS-15, DS-16)
2026-11-10 02:53:58 -08:00
Neil 548e1549ae fix(billing): 'Use this computer instead' and glossary error order on member cards
Design-squad sign-off tweaks for DS-15: the action reopens the composer rather
than creating, so it says so; member billing bodies put 'Nothing was created,
and you weren't charged.' before who to ask.
2026-11-10 02:51:58 -08:00
Neil bcfa0cffe7 feat(native-chat): DS-39 rewind polish — file list, files-only restore, focus ring
- Rewind confirm lists the changed files under the choice (three, then Show N more);
  the host preview returns up to 200 sorted paths.
- 'Restore files to here' in a user message's menu restores files without
  rewinding the chat (Claude Code's code-only rewind), with Undo.
- Rewind hover action uses the --focus-ring outline token.
- Disabled unchecked checkboxes keep a full-strength --input border on a muted fill.
- Fixture: NativeChatRewindConfirm:restoreFilesOnly; restoreFiles shows six paths.
2026-11-10 02:49:53 -08:00
Neil 56540b4188 Merge remote-tracking branch 'private/cloud/integration' into cloud/sleeping-read-snapshot 2026-11-10 02:44:59 -08:00
Neil 9a4bd94b66 feat(billing): member billing walls and back-to-work after checkout (DS-15, DS-16)
DS-15: no-plan access carries canManageBilling. Members see 'Ask an owner or
admin' instead of Upgrade, and the hint says 'Ask an owner or admin to choose
one.'; at the cap they're told to raise the spend cap. Every billing failure
on the build card offers 'Create on this computer instead' (same prompt,
Local), and Dismiss hands the typed prompt back to the composer.

DS-16: choosing a plan from an Orca Cloud wall leaves an intent. Once paid,
the plans dialog returns to the open composer with Orca Cloud picked, or
retries the refused create. The no-plan card adds Try again, and the Team
page's create action opens on Orca Cloud.
2026-11-10 02:44:31 -08:00
Neil 0c542e8375 copy(billing): overage reads '{{rate}} per sandbox hour' with the rate from the plan (glossary); formatRateCents always shows cents 2026-11-10 02:41:21 -08:00
Neil a5b87f43f2 Merge pull request #208 from nwparker/ds17-team-switch-reload
fix(cloud): reload billing, secrets, API keys and workspaces on team switch (DS-17)
2026-11-10 02:40:15 -08:00
Neil 42cc4d5b86 fix: import and SSH store method name 2026-11-10 02:39:51 -08:00
Neil 05ce474270 Merge pull request #207 from nwparker/cloud/w5-ui-ds26b
fix(cloud): quieter run failure reasons, capped availability backoff (DS-26/DS-36 follow-up)
2026-11-10 02:39:19 -08:00
Neil 046e08f60d fix(cloud-ports): keyboard Share and More actions on port rows, W3 copy and contrast (DS-29) (#209)
- Port rows get hover/focus buttons: Open in browser, Share… (Orca Cloud), and
  More actions for port N, which opens the existing row menu.
- Drop focus:outline-none on the port row group so the focus-ring shows.
- Retry -> Try again; listen failure copy; sentence case for SSH/ports labels.
- Remote desktop notCloud/notInstalled/signedOut render neutral, not red.
- busy/taken -> in use on this computer.
- Expired / Turned off share status keeps full text-muted-foreground.
- New i18n keys for changed defaults; stale keys pruned from all locales.
- Fixtures: share-links portRowFocused / portRowShareFocused / portRowMoreActions.
2026-11-10 02:39:06 -08:00
Neil 49ce098274 Merge remote-tracking branch 'private/cloud/integration' into cloud/sleeping-read-snapshot
# Conflicts:
#	src/renderer/src/components/cloud-workspaces/CloudWorkspacesHome.fixture.tsx
#	src/renderer/src/i18n/locales/en.json
2026-11-10 02:39:02 -08:00
Neil dd4baa98ed fix(cloud): security review of A6: offer and save only keys the proxy swaps; no desktop keys over SSH into a cloud workspace; orcad on a cloud VM drops carried keys
- 'Save as personal Cloud secret' is offered, and accepted by main, only for names the egress proxy
  swaps (a shared list the control-plane test holds equal to the proxy's); anything else would sit
  on the VM in full, so main answers not_swappable.
- SSH launches into an Orca Cloud workspace (orca-* aliases or an 'orca ssh-proxy' ProxyCommand
  surfaced through ~/.ssh/config Includes) get no desktop keys.
- Defense in depth on the VM: orcad with ORCA_IS_CLOUD=1 drops a carried keyEnv.
2026-11-10 02:37:29 -08:00
Neil c689f1eddb fix(cloud): reload billing, secrets, API keys and workspaces on team switch (DS-17)
Settings and Home kept showing the previous team's plan, secrets, keys and
workspaces after a team switch while saves went to the new team, and a
billing read from before the switch could land in local state.

- useOrcaAccountKey() gives `${userId}:${activeOrgId}`; Plan & billing,
  Cloud secrets, Cloud environment and Orca API keys remount on it.
- useOrcaBillingStatus re-reads on a switch, clears the old plan, and
  drops (and re-reads) an answer whose billing generation moved.
- useCloudWorkspaces keys its read by account, hides another team's list
  instead of dimming it; Home resets its filters on a switch.
- Hook tests cover the stale response being dropped and the new team read.
2026-11-10 02:33:43 -08:00
Neil 9dcda9941c chore(cloud): mobile switch exhaustiveness; extract the read-panel hook 2026-11-10 02:32:17 -08:00
Neil a3f28c1733 Merge pull request #206 from nwparker/ds-18-price-formats
fix(billing): spell out price formats (DS-18)
2026-11-10 02:32:06 -08:00
Neil f364c85f87 feat(cloud): this computer's Agent API Keys never reach an Orca Cloud VM; each can be saved as a personal Cloud secret (A6)
Desktop-sealed keys (Settings → Agent API Keys) ride every agent launch as plain env on other
hosts. An Orca Cloud VM would hold them in plaintext, so they are no longer sent there: runtime
calls to Orca Cloud environments skip them (provider record; otherwise any VM-provisioned host or a
Vercel Sandbox route counts, failing closed). The Add-an-agent view and the build sheet's key step
list each every-host key no Cloud secret covers yet, with its own 'Save as personal Cloud secret'
button: main unseals that one key and writes it to the user's personal Cloud secrets; the renderer
never sees the value, and nothing is uploaded without the click. The VM then gets a placeholder
the egress proxy swaps. Readiness no longer counts desktop keys as cloud access.
2026-11-10 02:30:18 -08:00
Neil 16d2a7aebf fix(cloud): DS-26 follow-up — run failure reasons as one quiet line (neutral for skipped/superseded/workspace gone), capped availability backoff that stops without subscribers, "Couldn't reach Orca Cloud." 2026-11-10 02:27:26 -08:00
Neil 519f6f6c9b fix(billing): spell out price formats per DS-18
Line items: '{{seats}} x {{price}} per seat, billed yearly' / 'per seat per month'
(plural keys); totals '{{total}} per year' / 'per month'; Worker plan labels
'$50 per seat per month' and '$480 per seat, billed yearly'. Drops /mo, /yr,
/year and /seat/month strings.
2026-11-10 02:27:14 -08:00
Neil b5a00612ca Merge pull request #205 from nwparker/cloud/w5-ui-ds26
fix(cloud): routine run failures in plain words; one page error on Orca API keys; Routines on Cloud workspaces (DS-26, DS-36)
2026-11-10 02:24:13 -08:00
Neil 2cf08c221e fix(run-actions): follow cloud tabs adopted as web-terminal-<id>, settle tab-list churn before forgetting a run, retire the dead tab after a relaunch; honor a host-pinned ORCA_PORT
Found on a real Orca Cloud VM (m4air): a remote host adopts the run's tab under web-terminal-<id>,
so the run was pruned at once and Stop/status/relaunch lost it; a window reload's empty tab list
pruned local runs too. Pruning now waits for the list to settle (3 s; 15 s after startup).
A one-workspace host (the VM launcher sets ORCA_PORT=3000) keeps its pinned block.
2026-11-10 02:22:07 -08:00
Neil a4f5062278 Merge pull request #204 from nwparker/cloud/ds23-entitlement-classifier
refactor(cloud): shared classifyEntitlementDenial (DS-23)
2026-11-10 02:22:00 -08:00
Neil 6fb8497a1a Merge remote-tracking branch 'private/cloud/integration' into cloud/sleeping-read-snapshot
# Conflicts:
#	cloud/apps/sandbox-control/image/vm-scripts.generated.ts
#	mobile/src/cloud/cloud-control-plane-client.ts
#	mobile/src/i18n/en-runtime-required.json
#	mobile/src/i18n/locales/en.json
#	src/renderer/src/components/cloud-workspaces/CloudWorkspaceRow.tsx
#	src/renderer/src/components/cloud-workspaces/CloudWorkspacesHome.tsx
2026-11-10 02:21:17 -08:00
Neil 7de9fe8f25 fix(cloud): DS-26 run failures in plain words via InlineError; DS-36 one page-level error on Orca API keys, MCP tag contrast, Routines entry on Cloud workspaces, availability probes don't cache rejections 2026-11-10 02:20:29 -08:00
Neil 298fbc7cfa fix(cloud): DS-38 read-only header marker, queued caption alignment, offline poll catch 2026-11-10 02:20:25 -08:00
Neil 10a9c7e3a3 fix(cloud): exhaustive switches over the denial classifier 2026-11-10 02:19:23 -08:00
Neil 92142679a5 refactor(cloud): one classifyEntitlementDenial in src/shared/orca-billing.ts (DS-23); run-on access, build failure, build log, workspace errors and the phone keep their own wording 2026-11-10 02:17:30 -08:00