refactor: enforce device labels, unify screenshot, remove deprecated commands, session-id-less design
- Device labels: lowercase, no whitespace, only a-z 0-9 - _ (enforced at config time) - Session IDs removed: device label is the sole identifier - Routes changed: /sessions/:id → /devices/:label - Removed commands: click, type, find-window, wait-for-window, label, old version, server-version - Renamed: status → version (compares relay/remote.py/client commits) - Unified screenshot: takes 'screen' or a window label as argument - Windows listed with human-readable labels (same format as device labels) - Single instance enforcement via PID lock file - Removed input.rs (click/type functionality) - All docs and code in English - Protocol: Hello.label is now required (String, not Option<String>) - Client auto-migrates invalid labels on startup
This commit is contained in:
parent
5fd01a423d
commit
0b4a6de8ae
14 changed files with 736 additions and 1180 deletions
|
|
@ -1,36 +1,40 @@
|
|||
# helios-client (Phase 2 — not yet implemented)
|
||||
# helios-client
|
||||
|
||||
This crate will contain the Windows remote-control client for `helios-remote`.
|
||||
Windows client for helios-remote. Connects to the relay server via WebSocket and executes commands.
|
||||
|
||||
## Planned Features
|
||||
## Features
|
||||
|
||||
- Connects to the relay server via WebSocket (`wss://`)
|
||||
- Sends a `Hello` message on connect with an optional display label
|
||||
- Handles incoming `ServerMessage` commands:
|
||||
- `ScreenshotRequest` → captures the primary display (Windows GDI or `windows-capture`) and responds with base64 PNG
|
||||
- `ExecRequest` → runs a shell command in a persistent `cmd.exe` / PowerShell session and returns stdout/stderr/exit-code
|
||||
- `ClickRequest` → simulates a mouse click via `SendInput` Win32 API
|
||||
- `TypeRequest` → types text via `SendInput` (virtual key events)
|
||||
- Persistent shell session so `cd C:\Users` persists across `exec` calls
|
||||
- Auto-reconnect with exponential backoff
|
||||
- Configurable via environment variables or a `client.toml` config file
|
||||
- Full-screen and per-window screenshots
|
||||
- Shell command execution (persistent PowerShell session)
|
||||
- Window management (list, focus, maximize, minimize)
|
||||
- File upload/download
|
||||
- Clipboard get/set
|
||||
- Program launch (fire-and-forget)
|
||||
- User prompts (MessageBox)
|
||||
- Single instance enforcement (PID lock file)
|
||||
|
||||
## Planned Tech Stack
|
||||
## Configuration
|
||||
|
||||
| Crate | Purpose |
|
||||
|---|---|
|
||||
| `tokio` | Async runtime |
|
||||
| `tokio-tungstenite` | WebSocket client |
|
||||
| `serde_json` | Protocol serialization |
|
||||
| `windows` / `winapi` | Screen capture, mouse/keyboard input |
|
||||
| `base64` | PNG encoding for screenshots |
|
||||
On first run, the client prompts for:
|
||||
- **Relay URL** (default: `wss://remote.agent-helios.me/ws`)
|
||||
- **API Key**
|
||||
- **Device label** — must be lowercase, no whitespace, only `a-z 0-9 - _`
|
||||
|
||||
## Build Target
|
||||
Config is saved to `%APPDATA%/helios-remote/config.toml`.
|
||||
|
||||
## Device Labels
|
||||
|
||||
The device label is the sole identifier for this machine. It must follow these rules:
|
||||
- Lowercase only
|
||||
- No whitespace
|
||||
- Only characters: `a-z`, `0-9`, `-`, `_`
|
||||
|
||||
Examples: `moritz_pc`, `work-desktop`, `gaming-rig`
|
||||
|
||||
If an existing config has an invalid label, it will be automatically migrated on next startup.
|
||||
|
||||
## Build
|
||||
|
||||
```bash
|
||||
cargo build -p helios-client --release
|
||||
```
|
||||
cargo build --target x86_64-pc-windows-gnu
|
||||
```
|
||||
|
||||
## App Icon
|
||||
|
||||
The file `assets/logo.ico` in the repository root is the application icon intended for the Windows `.exe`. It can be embedded at compile time using a build script (e.g. via the `winres` crate).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue