Files
orca/mobile/package.json
T
Neil e74d775884 feat(cloud): Orca Cloud workspaces on the phone (W8) (#113)
* feat(cloud): Orca Cloud workspaces on the phone (W8)

Home gets a Cloud section that lists the team's cloud workspaces straight from
the control plane (phone-signed device-session tokens; no desktop in the path).
A workspace screen wakes the sandbox (W2 long-poll wake), gets this phone its
own revocable orcad device through a W4 sealed grant (opened with the shared
opener on pure-JS primitives for Hermes), pairs directly over E2EE to the stable
sandbox endpoint, and delivers prompts queued on the phone while it was asleep
(agent.launchReplay, deduped by operation id). Create a workspace from the
phone (repo, branch, agent, first prompt, sandbox size), sleep, archive, live
status and spend, per-phone access management with revoke and disconnect, and
team share links (orca://cloud/w/<id>) open on the phone. Copy follows the
Orca Cloud glossary; dark/light, Reduce Motion, VoiceOver announcements.

* fix(w8): design round 2 (honest spend, can't-connect state, queue states, distinct titles, neutral archive, hairline groups)

* fix(w8): FE + W10 round 2 (retry ids, pairing give-up, create idempotency, neutral dots, waking composer, a11y values, salvage storage)

* fix(w8): tell same-named cloud workspaces apart by when they were made

* fix(w8): agent names from the shared table; localized repo placeholder

* fix(w8): round 3 (agent-started card with terminal sign-in path, transport-safe retries, open waits for the connection, single wake timer, created-ago rows)

* fix(w8): FE round 4 (open never blocked on worktree lookup, one connect deadline per run, mid-delivery prompts never stranded, no blank terminal on open session)

* fix(w8): prompts interrupted mid-delivery count as waiting (Open and retry resume them)
2026-11-09 17:29:05 -08:00

109 lines
4.1 KiB
JSON

{
"name": "orca-mobile",
"version": "0.0.1",
"private": true,
"main": "index.js",
"scripts": {
"start": "node scripts/start-expo.mjs",
"android": "expo run:android",
"ios": "expo run:ios",
"native": "node scripts/native-client.mjs",
"postinstall": "node scripts/build-terminal-webview-engine.mjs && node scripts/build-mermaid-page-engine.mjs && node scripts/build-katex-page-style.mjs && node scripts/build-terminal-document-script.mjs",
"test": "vitest run",
"typecheck": "node ../config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --project=mobile/tsconfig.json",
"typecheck:tests": "node ../config/scripts/typecheck/project-execution/run-typecheck-projects-in-parallel.mjs --project=mobile/tsconfig.test.json",
"check:tests-typecheck": "node scripts/check-tests-typecheck-ratchet.mjs",
"rpc:record": "tsx --conditions=orca-source scripts/rpc-recording.mts",
"rpc:diff": "tsx --conditions=orca-source scripts/rpc-diff.mts",
"lint": "oxlint",
"format": "oxfmt --write .",
"format:check": "oxfmt --check .",
"mock-server": "npx tsx scripts/mock-server.ts",
"repro:workspace-picker-lag": "npx tsx scripts/repro-workspace-picker-lag.ts",
"start:emulator": "node scripts/start-emulator.mjs"
},
"dependencies": {
"@formatjs/intl-pluralrules": "6.3.16",
"@noble/ciphers": "1.3.0",
"@noble/hashes": "1.8.0",
"@orca/expo-two-way-audio": "file:./packages/expo-two-way-audio",
"@react-native-async-storage/async-storage": "^2.2.0",
"@tanstack/query-persist-client-core": "5.105.3",
"@tanstack/react-query": "5.105.3",
"@xterm/addon-unicode11": "0.10.0-beta.330",
"@xterm/addon-webgl": "0.20.0-beta.329",
"@xterm/xterm": "6.1.0-beta.336",
"buffer": "^6.0.3",
"expo": "^55.0.31",
"expo-build-properties": "^55.0.18",
"expo-camera": "^55.0.23",
"expo-clipboard": "^55.0.17",
"expo-constants": "^55.0.17",
"expo-crypto": "^55.0.19",
"expo-dev-client": "~55.0.40",
"expo-document-picker": "^55.0.17",
"expo-file-system": "55.0.26",
"expo-haptics": "^55.0.18",
"expo-image-picker": "^55.0.24",
"expo-keep-awake": "~55.0.8",
"expo-linking": "^55.0.17",
"expo-localization": "~55.0.19",
"expo-modules-core": "~55.0.26",
"expo-network": "~55.0.18",
"expo-notifications": "^55.0.27",
"expo-router": "^55.0.18",
"expo-secure-store": "^55.0.18",
"expo-splash-screen": "^55.0.25",
"expo-status-bar": "^55.0.6",
"expo-task-manager": "~55.0.20",
"fflate": "0.8.3",
"i18next": "26.5.11",
"katex": "0.18.10",
"lowlight": "^3.3.0",
"lucide-react-native": "^1.14.0",
"markdown-it": "^14.3.2",
"markdown-it-cjk-friendly": "^2.0.3",
"markdown-it-footnote": "^4.0.0",
"mermaid": "11.17.2",
"react": "19.2.8",
"react-dom": "19.2.8",
"react-native": "^0.83.10",
"react-native-gesture-handler": "^2.31.2",
"react-native-libsodium": "1.7.0",
"react-native-reanimated": "4.3.4",
"react-native-safe-area-context": "^5.7.0",
"react-native-screens": "^4.24.0",
"react-native-svg": "^15.15.5",
"react-native-web": "^0.21.3",
"react-native-webview": "13.16.2",
"react-native-worklets": "^0.8.3",
"remend": "1.4.0",
"smol-toml": "1.9.1",
"tweetnacl": "^1.0.3",
"zod": "~4.6.7"
},
"devDependencies": {
"@orca/process-host": "link:../src/packages/process-host",
"@types/markdown-it": "14.1.2",
"@types/markdown-it-footnote": "^3.0.4",
"@types/mdast": "^4.0.4",
"@types/react": "~19.2.18",
"@types/react-test-renderer": "19.1.0",
"@types/ws": "^8.18.2",
"acorn": "8.18.0",
"esbuild": "0.28.2",
"expo-module-scripts": "^55.0.2",
"happy-dom": "^21.0.4",
"oxfmt": "^0.74.0",
"oxlint": "^1.88.0",
"react-test-renderer": "19.2.8",
"tsx": "^4.23.15",
"typescript": "^7.0.2",
"typescript-api": "npm:typescript@6.0.3",
"vite": "^8.3.4",
"vitest": "5.0.5",
"ws": "^8.22.0"
},
"packageManager": "pnpm@12.14.0+sha512.c18ba6d87993d3d164cb5e8948f32b2c06ee854487e06cd8d86781342fb3e5bb4634367034711e86802baa9c37bea906ce1929ad08d70884c97d801df13389a6"
}