Skip to content

Commit a322832

Browse files
DatafyingTechclaude
andcommitted
feat: v0.8.1 — Cloud Relay for Remote Access from Anywhere
Add cloud relay mode so users can control their ATM desktop from any phone in the world, not just on the same WiFi. E2E encrypted (X25519 + XSalsa20- Poly1305) via a lightweight WebSocket relay server that never sees plaintext. New relay/ crate, E2E crypto in remote-sync.ts and mobile client, LAN/Cloud mode toggle in Settings, room codes, QR pairing, rate limiting, and full security review with 9 issues found and fixed before release. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent ca9c3f0 commit a322832

30 files changed

Lines changed: 4275 additions & 118 deletions

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,38 @@
11
# ATM (Agent Team Manager) — Changelog
22

3+
## v0.8.1 — March 5, 2026
4+
5+
### New Feature: Cloud Relay — Remote Access from Anywhere (GitHub Issue #14)
6+
- **Cloud relay mode** — connect to your ATM desktop from anywhere in the world, not just the same WiFi. Turn on "Cloud" mode in Settings, get a room code, enter it on your phone — it just works
7+
- **End-to-end encryption** — all messages between desktop and phone are encrypted with X25519 ECDH key exchange + XSalsa20-Poly1305 authenticated encryption. The relay server never sees plaintext
8+
- **Standalone relay server** — new `relay/` Rust crate: a lightweight WebSocket relay that forwards opaque encrypted blobs between desktop and mobile. Runs on `atm-relay.datafying.com`
9+
- **Room code system** — 8-character base58 room codes (e.g., `ATM-X7K3mP`) with 5-minute TTL for joining and 30-minute idle timeout
10+
- **QR code for instant pairing** — Settings panel shows a scannable QR code encoding the relay URL, room code, and desktop public key. Scan on phone to connect instantly
11+
- **LAN/Cloud mode toggle** — new mode selector in Settings panel. LAN mode unchanged; Cloud mode uses the encrypted relay. Switch freely between modes
12+
- **Custom relay URL** — advanced option to point at a self-hosted relay server instead of the default
13+
14+
### Security
15+
- E2E encryption using tweetnacl-js (X25519 + XSalsa20-Poly1305, audited library)
16+
- Nonce space partitioned by role (desktop=0x01, mobile=0x02) to prevent nonce collisions
17+
- Relay server rate limiting: per-IP connection limits, room creation throttling, message rate limiting
18+
- Room codes use cryptographically random base58 characters
19+
- Relay never stores data to disk, never logs message content
20+
21+
### Technical
22+
- New Rust crate: `relay/` with axum 0.8, dashmap, governor rate limiting
23+
- New Rust module: `src-tauri/src/remote/relay_client.rs` — outbound WSS client to relay
24+
- New Tauri commands: `connect_to_relay`, `disconnect_from_relay`, `get_relay_status`, `send_to_relay`
25+
- New TypeScript class: `CryptoSession` in `remote-sync.ts` for E2E encryption
26+
- Updated `remote-sync.ts` with `initRelay()`, dual-mode broadcasting, encrypted message handling
27+
- Updated `ui-store.ts` with `relayStatus`, `connectRelay()`, `disconnectRelay()`
28+
- Updated `SettingsPanel.tsx` with LAN/Cloud toggle, room code display, QR code
29+
- Updated mobile client `app.js` with room code entry, relay WebSocket, E2E crypto
30+
- Added `tweetnacl` and `tweetnacl-util` npm dependencies
31+
- Added `tokio-tungstenite` Cargo dependency for outbound WSS
32+
- Deployment files: Dockerfile, systemd service, Caddyfile for relay server
33+
34+
---
35+
336
## v0.8.0 — March 4, 2026
437

538
### New Feature: Remote Access from Mobile (GitHub Issue #14)

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "atm",
33
"private": true,
4-
"version": "0.8.0",
4+
"version": "0.8.1",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",
@@ -21,6 +21,8 @@
2121
"gray-matter": "^4.0.3",
2222
"react": "^19.2.4",
2323
"react-dom": "^19.2.4",
24+
"tweetnacl": "^1.0.3",
25+
"tweetnacl-util": "^0.15.1",
2426
"yaml": "^2.8.2",
2527
"zod": "^4.3.6",
2628
"zustand": "^5.0.11"

pnpm-lock.yaml

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

relay/.dockerignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
target/
2+
.git/
3+
*.md

0 commit comments

Comments
 (0)