Commit Graph
21553 Commits
Author SHA1 Message Date
Neil 047c96855e feat(cloud): RA-11 strip over a running Orca Cloud agent whose sign-in expires; strip reserves its height
- When the Orca account goes from active/expiring to expired/revoked, every running Orca Cloud
  Claude/Codex pane shows the strip (same component, place, height as #315): 'Your Claude sign-in
  expired' / 'Renew to keep working. Your conversation is kept.' / Renew (compact: 'Claude sign-in
  expired' + Renew). The process keeps running; nothing is parsed from terminal output.
- One Renew clears state 1 everywhere; the panes that showed it move to state 2: 'Claude sign-in
  renewed' / 'Restart Claude to pick up where you left off.' (or 'Starts a new conversation.') /
  Restart Claude / Dismiss. Restart reuses the account-restart path (queuePaneAccountRestarts), which
  resumes the pane's own session. Never automatic; a turn that ends cleanly after the renewal clears it.
- Kill switch / never offered: nothing new on a running pane. A held launch keeps #315's strip.
- Account reads while a running cloud agent pane is mounted: on window focus and at most once a
  minute (one timer per window).
- #315 P2: the strip is a pane-top banner (useReservePaneTopSpace), so the terminal refits below it
  and no row is covered; a spacer keeps it under a chromeless pane's title-row buttons.
- Spec: terminal starts below the strip and its last row stays visible (held and running); state 2's
  Dismiss sits a full title row below the pane's ×. Removes the debug screenshot left in #315's spec
  and polls the resize assertion (it raced the layout).
2026-11-10 18:25:46 -08:00
Neil defa46442a Merge pull request #315 from nwparker/cloud/ra1-cloud-launch-hold
fix(cloud): RA-1 — hold host-published Orca Cloud agent launches on an expired account; strip renders in the real app
2026-11-10 18:12:44 -08:00
Neil 96ed405376 Merge remote-tracking branch 'private/cloud/integration' into cloud/ra1-cloud-launch-hold 2026-11-10 18:09:23 -08:00
Neil 41b6b2c67f Merge pull request #321 from nwparker/cloud/w2-asleep-restore
fix(cloud): asleep workspace keeps its project after restart; asleep Files tab; calm terminal banner (RA-9, RA-10)
2026-11-10 18:04:02 -08:00
Neil 187aaf4dce test(cloud): RA-1 resize spec without a cast 2026-11-10 18:01:44 -08:00
Neil 4789756cd8 Merge branch 'cloud/integration' of https://github.com/nwparker/orca-private into cloud/w2-asleep-restore 2026-11-10 18:00:20 -08:00
Neil 8d12c9054d test(cloud): asleep Files panel fixtures (changed, no snapshot, waking) 2026-11-10 18:00:17 -08:00
Neil 7df9b12e32 fix(cloud): RA-1 strip follows its live width and sits below the pane's title row
From the m4air real-app shots:
- The width class was frozen at mount, so a pane narrowed after mount collapsed the text to 'Y.'/'S.'.
  The strip now lays itself out from its own width (ResizeObserver): wide / narrow / tiny, plus a
  compact class below 360 px with one line ('Claude sign-in expired') and Renew; the detail stays the
  region's aria-describedby and tooltip. Height stays 56 px.
- The strip sat under the pane's split and close buttons. CloudStripLayer (shared by the pane and the
  fixture) starts it below the pane title row (--orca-pane-title-height), and the renew strip drops
  its own × (Renew is the action; Escape still cancels).
Specs: resize after mount keeps the title readable at 520 and 320 px; the pane's split and close
buttons are hit-testable above the strip in three states.
2026-11-10 17:58:56 -08:00
Neil 0be973e1f7 fix(cloud): change status as the explorer's letter (M/U/A/D/R) in the asleep Files tab 2026-11-10 17:55:58 -08:00
Neil 3627a05b29 Merge pull request #323 from nwparker/core-ui-ra/agent-accounts-jump
feat(cloud): Agent accounts jump row (This computer · Hosts · Orca Cloud)
2026-11-10 17:55:38 -08:00
Neil f9d01534d4 Merge pull request #325 from nwparker/cloud/fix-flaky-tests
fix(cloud-integration): picker-prompt test mock error; shot-editor test hermetic
2026-11-10 17:52:24 -08:00
Neil 4759dd9ee8 Merge pull request #324 from nwparker/cloud/w6-revoke-confirm
fix(cloud): confirm a provider 401 before revoking an Orca account (migration 0047)
2026-11-10 17:50:51 -08:00
Neil 93530ded64 fix(cloud): asleep Files tab trusts the local VM record too, so it shows right after Sleep 2026-11-10 17:49:40 -08:00
Neil fee92b2f67 Merge pull request #319 from nwparker/cloud/ra5-agent-accounts-polish
fix(cloud): RA-5 — Agent accounts polish from the real-app re-check
2026-11-10 17:49:23 -08:00
Neil 95960cd081 fix(cloud-integration): picker-prompt test mock error; shot-editor test hermetic
- interrupted-turn-continue reads its delivery helpers at call time: the cloud workspace store
  imports it, so launch-agent-picker-prompt.test's partial paste mock failed at module load
- plugin-shot-editor test marks its temp cwd as a repo root so the default shots dir (which walks up
  to the nearest plugin folder / repo root) can't be redirected by anything above the shared temp dir
2026-11-10 17:49:01 -08:00
Neil ca73c6c8dc fix(cloud): confirm a provider 401 with one auth check before revoking an Orca account
A single 401 on an Orca-account request no longer revokes the person's Claude account everywhere. The hook only fires after the real credential was swapped in and sent. The control plane then makes one free auth check with the real token (Anthropic count_tokens, oauth beta) and revokes only on a definite authentication_error; anything else (passes, 429, 5xx, other 401 types, network) keeps the account. Checks are rate-limited to one per person and agent per minute (agent_credentials.checked_at), and every keep/revoke is audited (agent_credential_audit, migration 0047). Codex keeps its lease-refresh path.
2026-11-10 17:47:58 -08:00
Neil f28253beff Merge pull request #309 from nwparker/np4-polish/cloud-project-rows
fix(cloud): one row per cloud workspace (hide sandbox clones); scope cloud workspaces to the active team (np4-e2e bugs 6, 7)
2026-11-10 17:47:07 -08:00
Neil 549d76a01b chore(settings): jump row prop is links (matches stablyai/orca#40965 6f2ee281ce) 2026-11-10 17:43:57 -08:00
Neil c7c129ca9e Merge pull request #322 from nwparker/cloud/w6-revoke-all-sandboxes
fix(cloud): a provider 401 refreshes all of the person's running sandboxes
2026-11-10 17:42:57 -08:00
Neil 937109543c Merge remote-tracking branch 'private/cloud/integration' into cloud/ra5-agent-accounts-polish 2026-11-10 17:42:47 -08:00
Neil 5818222629 Merge remote-tracking branch 'private/cloud/integration' into cloud/ra1-cloud-launch-hold 2026-11-10 17:42:37 -08:00
Neil ddf6cfe09f fix(cloud): a provider 401 drops the dead account placeholder from all the person's running sandboxes 2026-11-10 17:40:14 -08:00
Neil 2315ac1bbb fix(cloud): asleep Files tab lists changed files, then recent commits on the branch; dates past a month; no filter or search while asleep (RA-10 review) 2026-11-10 17:39:22 -08:00
Neil c92edf9f96 feat(cloud): Hosts and Orca Cloud as Agent accounts parts, listed in the page's jump row 2026-11-10 17:37:58 -08:00
Neil b59a580246 feat(settings): Agent accounts takes parts and links them from a jump row
renderAccountsSettingsSection now takes additionalParts ({ id, title, description, content }) and
titles each with AgentAccountsSubsection. When the page has more than one part, a jump row under the
description links to each one ('This computer · …'); a link scrolls the settings pane to the part and
moves focus to its heading.
2026-11-10 17:37:40 -08:00
Neil b53af3448c Merge pull request #320 from nwparker/core-ui-ra/agent-accounts-merge
feat(cloud): one Agent accounts page (This computer, Hosts, Orca Cloud) + sentence-case nav (RA-8)
2026-11-10 17:33:16 -08:00
Neil 88e03f017e fix(sidebar): state word's separator is its own element, hidden when nothing follows on line 2 (every state) 2026-11-10 17:32:14 -08:00
Neil d7435b2bec test: fixed clock in the terminal override test 2026-11-10 17:29:31 -08:00
Neil 66bae33860 Merge branch 'cloud/integration' of https://github.com/nwparker/orca-private into cloud/w2-asleep-restore 2026-11-10 17:27:27 -08:00
Neil ce7eada73b fix(cloud): terminal asleep/waking banner — none while waking, neutral line when asleep, no VM in shared copy; empty-changes wording in the asleep Files tab 2026-11-10 17:27:24 -08:00
Neil 3dc4899821 fix(cloud): RA-5 Paste a token instead as a muted link (link-muted button variant) 2026-11-10 17:24:14 -08:00
Neil 53284ee79f feat(cloud): fold Agent accounts into the one Agent accounts page (Hosts, Orca Cloud parts)
Drops the separate cloud 'agent-accounts' settings entry. The upstream 'accounts' page (now
Agent accounts) gets Hosts (S3) and Orca Cloud (S0) through renderAccountsSettingsSection's
additionalSections; deep links move to pane 'accounts' with sectionId orca-cloud / accounts-hosts.
In Orca Cloud builds the entry loses its Optional badge and gains the cloud search entries.
2026-11-10 17:20:08 -08:00
Neil 4fcfd84e81 fix(cloud): RA-5 lint and catalog fixes (link button, new expired-detail key, retired keys removed) 2026-11-10 17:18:20 -08:00
Neil 8e21d2620e fix(cloud): asleep cloud workspace keeps its project after a restart (stand-in setup from the VM record) and shows no activity; Files tab covers waking too (RA-9, RA-10) 2026-11-10 17:17:09 -08:00
Neil ade507d04c Merge pull request #318 from nwparker/cloud/w6-ra1-session-env
fix(cloud): agents orcad spawns directly get the live session env (RA-1, P0)
2026-11-10 17:11:02 -08:00
Neil a50c182463 feat(settings): one Agent accounts page and a sentence-case settings nav
AI provider accounts becomes Agent accounts: a page whose first part is This computer (or the
selected host), holding the existing provider accounts, switching and usage. renderAccountsSettingsSection
takes additionalSections so other parts can be added below it with AgentAccountsSubsection. The
section id stays 'accounts', so every deep link keeps working.

The Settings nav, its group labels and the matching section titles move to sentence case
(Orca account, Computer use, SSH hosts, ...). In-app, CLI and docs references to
'AI Provider Accounts' now say 'Agent accounts'.
2026-11-10 17:10:10 -08:00
Neil 94651604b5 test(cloud): type the gone-sandbox retire test's sent list without a cast 2026-11-10 17:09:56 -08:00
Neil 4f9b0a51bb Merge pull request #316 from nwparker/create-speed/start-gate
fix(cloud-start-gate): sleeping and abandoned sandboxes don't count against concurrency limits
2026-11-10 17:07:10 -08:00
Neil 32b4f45704 fix(cloud): RA-5 Agent accounts polish from the real-app re-check
- S3 host column: the name keeps a 6rem minimum so 'Orca Cloud' never truncates; the muted detail
  gives way first.
- 'Needs attention · 0' shows 'Nothing needs attention.' instead of a header-only table.
- An expired Orca Cloud row offers Renew plus a ⋯ with Remove…, which confirms like the active row
  (shared RemoveConfirmRow).
- 'Renew' everywhere for an expired account: the build-sheet row no longer says 'Sign in again'.
- The not-set-up Claude row offers 'Paste a token instead' (S0's existing paste path) under its detail.
Fixtures: OrcaCloudAccounts:expiredRemoveConfirm, AgentAccountsPane:nothingNeedsAttention.
2026-11-10 17:05:53 -08:00
Neil 1075298bd7 test(cloud): cloud session env overlay against the in-memory reader 2026-11-10 17:04:47 -08:00
Neil c3470c1371 fix(cloud): retire Orca Cloud records whose sandbox was destroyed elsewhere
A sandbox destroyed out of band (the team list's Delete for a workspace
this desktop doesn't run, or the control plane) left its runtime record,
server and project here. After a restart its clone came back as a stray
folder project with a "Couldn't start" row.

The team filing's list now runs at startup and every 10 minutes too, and
hands each successful list to a prune. A record filed under that team
that the list omits is retired only on proof: a second consecutive list
without it, or GET /v1/sandboxes/:id answering not found or destroyed.
Errors, offline, a team switch while confirming, a create in flight, or
another or unknown team's record never retire anything, and asleep
(suspended/archived) sandboxes stay listed so they are never touched.
Retiring follows the app's own delete: the record is cleaned and its
server released and retired, and the window's catalog refresh purges the
host's project and setup.
2026-11-10 17:04:28 -08:00
Neil beca015919 fix(cloud): read the cloud session env without sync fs (watched in-memory copy) 2026-11-10 17:03:49 -08:00
Neil c2e250bcfe fix(cloud-start-gate): a sandbox going to sleep or an abandoned create no longer refuses a start
The team and per-member concurrency counts (billing's checkStart input and the guardrail backstop)
counted 'suspending' rows, which drain for up to 5 min after someone chose Sleep and read as
asleep everywhere, and 'creating' rows whose Worker was cut off (until the cron released them).
Both could refuse a start that the user's view says fits. The global capacity cap still counts them.
2026-11-10 17:02:49 -08:00
Neil 7a34a50bec feat(cloud): asleep Files tab shows the files changed at sleep, read-only, with Wake; neutral note when nothing was saved (RA-10) 2026-11-10 17:02:24 -08:00
Neil 2c638149fd Merge pull request #313 from nwparker/cloud/w2-cloud-one-host
feat(cloud): Orca Cloud is one host in the sidebar and Hosts filter (RA-2, RA-6)
2026-11-10 17:00:32 -08:00
Neil 9942c75b86 fix(cloud): overloads instead of a generic cast for withCloudSessionEnv 2026-11-10 16:56:51 -08:00
Neil a892b9d26b Merge pull request #312 from nwparker/create-speed/clone-step
feat(cloud-create): Clone repository step with live progress; create returns at the no-repo baseline; no header timer
2026-11-10 16:55:32 -08:00
Neil 43e79b8f4f test: typed fixtures for the theme-offer test 2026-11-10 16:55:07 -08:00
Neil a81304f534 fix(cloud): leave the old team's open cloud workspace on a team switch
A team switch hid the old team's sandboxes from every list, but the main
pane kept showing the one that was open. When the active workspace's host
goes from in-team to out of scope (team or account switch), clear the
active workspace as a host removal does; its terminals stay, since the
sandbox is still the old team's. Only that edge counts, so a launch whose
team or runtimes are still loading keeps a restored cloud workspace.
2026-11-10 16:54:42 -08:00
Neil dc5f8d98fd fix(cloud): agents orcad starts directly get the live session env (RA-1)
orcad's process env and its cached login-shell capture are frozen at sandbox start, while the control plane updates the session env live (tmpfs file). A Claude account signed in after the workspace started reached shells (profile hook) but not chat agents or PTYs orcad spawns itself: no CLAUDE_CODE_OAUTH_TOKEN placeholder, ORCA_SESSION_ENV_NAMES empty, Not logged in. Structured agent launches and the PTY daemon now lay the current file over their env (same name rules as the hook) and drop names the live env removed; a launch's explicit deletions still win.
2026-11-10 16:51:47 -08:00