Repository navigation
Description
Parent design: #5694. Related remote-GUI evaluation: #5924; dedicated SSH forward: #5509.
Goal
Implement the first-build recommendation from #5694: let the fleet proxy expose the laptop's RustDesk direct-access TCP endpoint through a loopback-only raw stream splice, using the existing CONNECT tunnel path. Keep forward.sh as the fallback until the splice is verified.
Current-main evidence
At current main (04f78696abfbdf6567f58e623d80520436f002fa), fleet-config registers laptop-agent port 4799 but not RustDesk 21118 (pkgs/fleet/crates/fleet-config/src/lib.rs:27,368); the proxy advertises ProxyServe only (pkgs/fleet/crates/fleet-proxy/src/serve.rs:488); and tunnel.rs applies a 660-second read timeout (pkgs/fleet/crates/fleet-proxy/src/tunnel.rs:22,196). PR #6088 is merged and explicitly says RustDesk remains on its SSH forward until this splice is built. PR #6140 is merged credential durability work, not transport.
Scope
- Register the RustDesk TCP service at laptop port 21118.
- Add an explicit raw-splice capability in the fleet proxy handshake; older brokers must not advertise it.
- Add the client-side loopback listener at
127.0.0.1:21118; per accepted client, check out one CONNECT tunnel to laptop:21118 and relay bytes bidirectionally. Do not wrap as HTTP or return a spent stream to the pool. - Make the long-lived splice opt out of the HTTP tunnel read/write timeout.
- Keep broker configuration and logs free of RustDesk credentials; the broker is only a byte pipe.
Non-goals
Do not change forward.sh until verified; do not pre-warm RustDesk sockets; do not run hbbs/hbbr; do not implement per-connection virtual desktops (separate design/follow-up).
Acceptance
- New and old broker capability negotiation is tested; old brokers keep existing behavior.
- A local loopback RustDesk client can establish a session through the splice; a bidirectional byte-stream test proves framing is transparent and concurrent splices work.
- An idle session remains connected beyond the current 660-second timeout (the acceptance target in design: remote desktop through the fleet brokers (RustDesk transport, secrets, pre-warming, virtual desktops) #5694 is >30 minutes).
- No RustDesk password/proof is added to broker config or logs; the existing SSH forward remains an available fallback.
- Targeted tests and applicable Nix/build checks pass; findings and any activation caveat are recorded on design: remote desktop through the fleet brokers (RustDesk transport, secrets, pre-warming, virtual desktops) #5694.
Activity
developing-today commentedon Nov 5, 2026
CODE-1819
dezren39 commentedon Nov 5, 2026
agent-note:v1 agent=repo-worker-code state=queued task=10516 at=2026-11-05T13:03:44Z
Follow-up implementation packet 10516 is queued in repo-health-code-pilot. Scope and acceptance are in this issue; parent design is #5694.
developing-today commentedon Nov 5, 2026
🤖 Agent note · state: handed off
90 remaining items
dezren39 commentedon Nov 6, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 6, 2026
Picked up by lane code-u as task 10516 (small_fix, issue #6221). Execution-lane assignment returned
opencode: handed off to the opencode claimant, which launches a bound session for task 10516. Checkpoint stagehanded_offrecorded; existing branchqueue/10516-6221-rustdesk-raw-stream-splicenoted in task progress. CAP RISK: task 10516 is at attempts 4/4 — if the claimant does not bind before the lease expires (~2026-11-06T03:20Z), the task becomes unclaimable and needs a cap raise. Labels already in claimed state; no change needed.dezren39 commentedon Nov 6, 2026
🤖 Agent note · picked_up
repo-worker-code, OpenChamber scheduled lanebf419306-c4ef-470f-a553-beabf93239desmall_fix) for issue Implement RustDesk raw-stream splice through fleet proxy #6221; claimed atomically in this lane at 2026-11-06T04:40Z.status/in-progress,queue/claimed,work/assigned; no hard-stop labels. Exact-topic and Implement RustDesk raw-stream splice through fleet proxy #6221 open-PR REST searches returned none. PR fix(id-web): collision-proof spaced-destination placeholders on save (#1348) #4665 is unrelated (id(web): spaced-destination placeholder can collide with document text — global replace on save rewrites the document's own words (PR #1022) #1348).queue/10516-6221-rustdesk-raw-stream-splice, worktree/home/user/git/fleet/10516; next verify ownership/worktree and resume from the saved checkpoint.dezren39 commentedon Nov 6, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 6, 2026
🤖 Agent note · queue update blocked
repo-worker-code, OpenChamber scheduled lanebf419306-c4ef-470f-a553-beabf93239de/home/user/git/fleet/10516, branchqueue/10516-6221-rustdesk-raw-stream-splice, based on9e20032d0cf3034a2baea117caa60c115119138e. Focused tests passed: fleet-config (16), fleet-registry (5), fleet-proxy (52), fleet (13). No PR opened.repo-queueis reachable, park task 10516 immediately for the live >30-minute idle-session check and PR/CI review; resume by revalidating the branch and issue first.dezren39 commentedon Nov 6, 2026
🤖 Agent note · handed off