Commit Graph

2 Commits

Author SHA1 Message Date
Caspian Zhao d89b5f6483 feat(cloud): R2 sleep persistence for cloud sessions (Phase 2b)
Persist the container's Helmor data dir to R2 so chat/session history survives
a sandbox sleep (CF wipes the disk on sleep). Per finished agent turn the serve
process folds the SQLite WAL into helmor.db (synchronous wal_checkpoint(TRUNCATE),
env-gated on HELMOR_CLOUD_AUTOPUSH); after the turn stream closes the Worker
snapshots /home/helmor to R2 in localBucket mode (excluding the git worktrees,
which are restored via autopush) and stores the DirectoryBackup handle in D1
teams.backup_handle. On cold start ensureServe restores from that handle before
launching serve. Relocate the data dir to /home/helmor (an allowed backup root)
via HELMOR_DATA_DIR in both start-serve.sh and boot.sh so serve and boot share
one DB. Zero pipeline-snapshot drift; all team UI/proxy paths unchanged.
2026-06-13 23:16:39 -07:00
Caspian Zhao dbd3168896 feat(cloud): Team Cloud Sandbox Phase 0 — headless serve + CF proxy
Single-user cloud workspace: the desktop app can point its backend at a
remote Helmor companion running headless inside a Cloudflare Sandbox,
with zero UI changes (a transport-only mode switch).

- PR1 bootstrap::init_core(): extract the deterministic startup core
  (data dir, logging, DB schema, pools) shared by GUI + serve.
- PR2 helmor serve: build_app(mode) shares one Tauri builder; a
  windowless Wry host wires the functional trio + companion bound to
  0.0.0.0 with an injected capability token. Adds a serve smoke test.
- PR3 vendor Linux: vendor-platform.ts gains a linux target; the serve
  image stages only codex + gh.
- PR4 Dockerfile: 4-stage image FROM cloudflare/sandbox with webkit/gtk
  + xvfb; start-serve.sh runs an independent Xvfb daemon. ENTRYPOINT is
  left to the CF base.
- PR5 cloud/: stateless thin Worker proxy (ensureServe -> startProcess
  -> containerFetch / wsConnect), @cloudflare/sandbox 0.12.1.
- PR6 workflow closure: boot.sh reuses CLI verbs; cloud_autopush commits
  + pushes after each agent turn (env-gated; desktop is a hard no-op).
- PR7 desktop entry: team-mode.ts + ipc.ts runtime transport; a Settings
  Team panel and a sidebar Local<->Team switch.

Desktop behavior is unchanged: every path is either a pure refactor or
env-gated. The full Rust and frontend test suites stay green.
2026-06-12 23:23:35 -07:00