CodeNomad/dev-docs
Pascal André 9dd4b3f059
feat(remote-control): add Remote Control over OpenTunnel alongside direct access (#668)
Adds Remote Control alongside direct/LAN access. A phone or another computer pairs with CodeNomad and continues its sessions from anywhere, without an inbound port. The transport is OpenTunnel, the blind TLS relay used by OpenCode: TLS ends inside the CodeNomad backend, and nothing has to be deployed.

- packages/remote-tunnel wraps @opentunnel/client. The server build bundles it with its own Effect 4.0.x, so the published server has no runtime dependency on a private workspace package. CodeNomad claims its own route on the device's shared identity and never deletes it.
- A remote-only loopback ingress marks its sockets as remote, so local privileges come from isLocalRequest(), never the peer address. The gate runs before CORS, auth and routing:
  - exact tunnel Host, and the public Origin on mutations;
  - stripped forwarding headers;
  - origin-form targets only, judged as routed (decoded, cut at ';');
  - host-only paths denied;
  - a paired device required, except for the public UI bundle.
- Host-owned pairing: a single-use five-minute code, hashed device credentials with 30-day idle expiry, and a __Host- cookie. Revocation or eviction closes live streams. A revoked device is asked to pair again, keeping drafts.
- The Cloudflare Worker/Durable Object relay, the custom E2EE protocol and the browser transport shims are removed. Electron and Tauri keep the backend alive after the last window only while Remote Control is enabled.

Validation:
- the real createHttpServer is exercised through the ingress, plus raw-socket canonicalization tests and device registry tests;
- recovery unit and browser tests;
- an opt-in end-to-end run through the hosted relay;
- a packaged smoke import of the bundled runtime;
- five gatekeeper rounds to zero findings, and green CI on all desktop targets.
2026-10-09 12:43:25 +02:00
..
architecture.md feat(remote-control): add Remote Control over OpenTunnel alongside direct access (#668) 2026-10-09 12:43:25 +02:00
BROWSER_AUTOMATION.md fix(browser): preserve per-session previews and Back history (#884) 2026-10-09 00:30:01 +02:00
BROWSER_DEVICE_EMULATION.md fix(layout): make desktop minimums zoom-aware and compact headers at 420px (#817) 2026-10-01 12:44:01 +02:00
CACHE_REFRESH_CONVENTIONS.md fix(usage): preserve quotas on duplicate connection notifications (#835) 2026-10-03 00:57:04 +02:00
DEVELOPER_MODE.md feat(remote-control): add Remote Control over OpenTunnel alongside direct access (#668) 2026-10-09 12:43:25 +02:00
FILES_PANEL.md feat(files): unify Workspace, Changes and Commits with central previews (#797) 2026-10-01 11:10:50 +02:00
INDEX.md refactor: retire obsolete docs, dead APIs and speculative loaders (#880) 2026-10-08 01:03:40 +02:00
NATIVE_INTERRUPTION_UX.md fix(chat): keep request icons and show complete red badges (#871) 2026-10-07 14:22:55 +02:00
OPENCODE_V2_COMPATIBILITY.md fix(pending): stop cold-worktree recovery fallback; qualify OpenCode 2.0.24 (#865) 2026-10-06 23:06:50 +02:00
OPENCODE_V2_POST_BETA.md refactor: retire obsolete docs, dead APIs and speculative loaders (#880) 2026-10-08 01:03:40 +02:00
PALETTE_SOURCES.md V2(ui): progressively harmonize the CodeNomad interface (#667) 2026-09-15 14:17:30 +01:00
PANEL_EXTENSIONS.md feat(extensions): add bounded current-session assets for API 2 panels (#874) 2026-10-07 22:54:06 +02:00
PLUGIN_ACTIVATION_CONTROLS.md feat(plugins): add scoped V2 plugin activation controls (#726) 2026-09-25 01:29:14 +02:00
PROVIDER_ACCOUNTS_UX_PLAN.md feat(accounts): native account controls and opt-in Codex quota selection (#793) 2026-10-02 17:36:23 +02:00
REMOTE_CONTROL.md feat(remote-control): add Remote Control over OpenTunnel alongside direct access (#668) 2026-10-09 12:43:25 +02:00
SESSION_ENVIRONMENT.md revert(missions): undo PR #673 without dropping later dev changes 2026-10-02 16:18:06 +02:00
SESSION_HISTORY_NAVIGATION.md chore: remove historical reports and generated artifacts (#857) 2026-10-06 02:25:35 +02:00
SESSION_HISTORY_QUERIES.md fix(history): fill search pages and remove redundant counting (#839) 2026-10-03 11:36:04 +02:00
SESSION_PRUNING_RPC.md docs: prune obsolete specifications and development readouts 2026-10-08 00:42:53 +02:00
SESSION_PRUNING_SAFETY.md feat(pruning): restore opt-in selective deletion through native plugin RPC (#686) 2026-09-10 13:31:40 +02:00
solidjs-llms.txt update blank session cleanup code for now session store logic 2025-11-27 20:18:22 -05:00
WORKTREE_SESSION_PLACEMENT.md docs: prune obsolete specifications and development readouts 2026-10-08 00:42:53 +02:00