Commit Graph
21198 Commits
Author SHA1 Message Date
Neil 3f2b8ead4e Merge pull request #228 from nwparker/cloud/w9-eval
feat(cloud): acceptance — run actions + ports (m4air UI), read-while-asleep (live E2EE), gap rows
2026-11-10 03:51:42 -08:00
Neil f88c09c7fa Merge pull request #211 from nwparker/cloud/w2-squad-archive
fix(cloud): archive from the team list really stops the sandbox (DS-01 P0, DS-09)
2026-11-10 03:47:46 -08:00
Neil c14e875adc Merge pull request #225 from nwparker/fix/ds-34-44-billing-polish
fix(billing): DS-34 billing polish + DS-44 nits
2026-11-10 03:42:47 -08:00
Neil b199587d7e feat(cloud): desktop run actions + ports checks (W9D_ONLY=run-actions)
- local.run-actions: autoRunAfterSetup after a good setup and not after a failed one, Run button,
  one trust prompt, Stop -> Stopped, menu Restart replaces the tab, Cmd+Opt+Enter start/restart
- run.nonconcurrent: echo-loop started in B stops A's
- run.ports: ORCA_PORT/ORCA_PORT_COUNT/CONDUCTOR_PORT per terminal, distinct blocks, stable across
  an app restart, served locally; cloud half: the action in the VM reachable here via auto-forward
- run.cloud-resume: action back after Sleep/wake and after Restart sandbox
2026-11-10 03:42:31 -08:00
Neil 29cdd2cb99 feat(cloud): acceptance read-while-asleep (live, E2EE, no wake) plus access/phone rows (owner-reported) 2026-11-10 03:42:31 -08:00
Neil 322ba5eabb feat(cloud): acceptance catalog rows for run actions and per-workspace ports (gap 4) 2026-11-10 03:42:31 -08:00
Neil c5199433a9 Merge pull request #214 from nwparker/cloud/w6-secret-request
feat(cloud): agent secret requests: orcad RPC, orca secret request, orca-env (contract §3)
2026-11-10 03:42:02 -08:00
Neil 6fa10c836b Merge remote-tracking branch 'private/cloud/integration' into cloud/w2-squad-archive
# Conflicts:
#	src/renderer/src/components/orca-cloud/cloud-workspace-actions.ts
2026-11-10 03:40:01 -08:00
Neil 018f918a8c fix(billing): usage warning states the actual share used, floored (DS-34 review) 2026-11-10 03:39:22 -08:00
Neil 01d2482a3a fix(billing): one billing store, skeleton, plurals, plans focus and billing nits (DS-34, DS-44)
DS-34:
- One billing store (billing-summary-store) replaces the summary, the hook's local state and the
  Run-on picker cache; it keeps the last good result through a failed read and still drops answers
  from before a team or account switch (DS-17).
- Skeleton while Plan & billing loads.
- '{{count}} sandbox hours left' and '{{count}} sandbox hours over the included amount this month'
  as i18n plurals; no bare 'hours'; the unreachable 100% branch is gone.
- Usage warning driven by usageWarningPercent ('Your team has used {{percent}}% of this month's
  sandbox hours.'), in Settings, the plans page and the account menu.
- capTooHigh states the maximum ('The spend cap can be at most {{max}}.'), from offers.maxSpendCapCents.
- Plans dialog focuses its heading on open, so Tab reaches the interval toggle before the cards.
- Payment notice uses InlineError; the build card's overage buttons land on the overage section.
- Account menu names the team once and adds the hours-left line.

DS-44: warning tone at 90%+, '$' as an input prefix, neutral paid check, 24px dialog close hit
area, no <p> inside the CheckoutPanel <dl>.
2026-11-10 03:39:21 -08:00
Neil e604bd4f39 Merge pull request #226 from nwparker/cloud/u22-cpu-fairuse
feat(sandbox-control): internal per-session CPU + operator fair-use report (U22)
2026-11-10 03:38:55 -08:00
Neil cfb0b56118 fix(cloud): archive confirm starts focus on Cancel 2026-11-10 03:36:20 -08:00
Neil e02edd279f Merge remote-tracking branch 'private/cloud/integration' into cloud/w6-secret-request
# Conflicts:
#	cloud/apps/sandbox-control/image/vm-scripts.generated.ts
2026-11-10 03:34:32 -08:00
Neil d76cb62c57 fix(sandbox-control): keep preview URLs on for the dev Worker (preview aliases 404ed) (#224) 2026-11-10 03:34:07 -08:00
Neil f8e362259a fix(cloud): harden agent secret requests (review of #214)
- Agent and worktree come from the terminal orcad verifies from launch
  evidence (verifiedCallerTerminalHandle, shared with turn-sender); the
  terminalHandle param is gone and a worktree hint is kept only when the
  host knows it.
- secrets.* are accepted, and their events sent, only on cloud orcad
  (ORCA_IS_CLOUD=1 + ORCA_SANDBOX_ID); already-set never reads orcad's env.
- touchRequest emits secrets.requestUpdated; natural expiry emits
  secrets.requestSettled {status: expired}.
- orca-env skips the control plane's reserved names and prefixes, with a
  test that reads them from secrets.ts.
- reason drops bidi controls and turns C0/C1 controls into spaces.
2026-11-10 03:34:04 -08:00
Neil 43aa595ee7 feat(sandbox-control): internal per-session CPU tracking and fair-use report (U22)
Customers keep flat sandbox hours. Each stopped session's activeCpuDurationMs
(from Vercel's stop response or GET session) is stored in a new session_cpu
table (migration 0042), idempotent per session. Recording is best-effort and
never blocks suspend, stop or usage reporting; a 5-minute cron sweep retries
recent sessions still missing CPU. Operator-only GET /v1/internal/fair-use
reports per-account 30-day utilisation sum(active_cpu_ms)/sum(wall_ms*vcpus)
with fairUseFlag above 60%. Nothing reaches usage_outbox, billing or clients.
2026-11-10 03:34:00 -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 8102e770dc fix(cloud): the registry edit can no longer label a workspace archived; tests for asleep archive (no wake) and creating/suspending refusals 2026-11-10 03:18:45 -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 c392a487a1 Merge remote-tracking branch 'private/cloud/integration' into cloud/w2-squad-archive
# Conflicts:
#	cloud/apps/sandbox-control/src/index.ts
#	src/renderer/src/components/cloud-workspaces/CloudWorkspacesHome.tsx
#	src/renderer/src/i18n/locales/en.json
2026-11-10 03:09:00 -08:00
Neil 7dbd33a1ad Merge remote-tracking branch 'private/cloud/integration' into cloud/w6-secret-request
# Conflicts:
#	cloud/apps/sandbox-control/image/provision-golden.sh
#	cloud/apps/sandbox-control/image/vm-scripts.generated.ts
2026-11-10 03:05:52 -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 e3748c9725 Merge remote-tracking branch 'private/cloud/integration' into cloud/w2-squad-archive
# Conflicts:
#	src/renderer/src/i18n/locales/en.json
2026-11-10 02:57:28 -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 81577b1ac7 feat(cloud): agent secret requests (secrets.request RPC, orca secret request, orca-env)
orcad keeps agent-initiated secret requests in memory with the contract's
limits (3 pending, 10/hour, 15 min TTL, touch capped at 60 min, dedupe per
name), derives the agent from the calling terminal, and announces
secrets.requested on runtime.clientEvents (replayed on attach; phones get
status only). The CLI waits on it and prints the D4 reload hint; the VM
ships orca-env and makes zsh read the session env hook.
2026-11-10 02:55:15 -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 dbe94611c5 fix(cloud): team-list archive runs the lifecycle first (409 while starting or mid-transition, never a label on a running sandbox); confirm before archiving a teammate's running workspace 2026-11-10 02:48:51 -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