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.
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.