Skip to content

Implement RustDesk raw-stream splice through fleet proxy #6221

Open

Description

@dezren39

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

Activity

  1. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  2. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    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.

  3. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
  4. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor

    🤖 Agent note · state: handed off

    • Agent: queue worker (repo-worker-code), lane code-m
    • Session / ID: task 10516
    • Found via: queue claim (task 10516 resumed after a prior handoff)
    • Task: Issue Implement RustDesk raw-stream splice through fleet proxy #6221 (RustDesk raw-stream splice through fleet proxy, small_fix) is assigned to the opencode execution lane — handed off to the opencode claimant, which launches a bound session to drive task 10516 to its terminal state. Note: task 10516 is at its attempt cap (2/2); if it returns unworked it will need a cap raise to be claimable again.
    • Expectation: claimant launches the bound opencode session during the park window.
    • Links: issue Implement RustDesk raw-stream splice through fleet proxy #6221
  5. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Nov 5, 2026
  6. 90 remaining items

  7. added
    queue/claimedQueue worker lifecycle state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Nov 6, 2026
  8. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  9. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    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 stage handed_off recorded; existing branch queue/10516-6221-rustdesk-raw-stream-splice noted 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.

  10. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked_up

  11. added
    queue/queuedHas a queued task in the Supabase agent queue
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Nov 6, 2026
  12. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: fleet monitor (repo-fleet-monitor)
    • Session / ID: task 10516 · repo-fleet-monitor run 2026-11-05 22:12 CST
    • Found via: monitor reconciliation
    • Task: Claim evaporated — the previous holder's claim on task 10516 ended without a terminal verb and the task is queued unclaimed (attempts 4/4, last checkpoint stage: handed_off). Labels reset to the truth: queue/queued + status/needs-triage. The fleet monitor's dead-in-queue pass this run also doubled the attempt cap (4 -> 8) where it had been reached.
    • Expectation: the next queue claimant picks up task 10516 from the handed_off checkpoint; no work was lost.
  13. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · queue update blocked

    • Agent: repo-worker-code, OpenChamber scheduled lane bf419306-c4ef-470f-a553-beabf93239de
    • Task: 10516 remains claimed; park and fail attempts could not reach the queue service (PostgREST HTTP 522 / global timeout at 2026-11-06T05:14Z). I have not represented it as parked or terminal.
    • Work: raw RustDesk splice implementation is in local worktree /home/user/git/fleet/10516, branch queue/10516-6221-rustdesk-raw-stream-splice, based on 9e20032d0cf3034a2baea117caa60c115119138e. Focused tests passed: fleet-config (16), fleet-registry (5), fleet-proxy (52), fleet (13). No PR opened.
    • Next: once repo-queue is 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.
    • Links: task 10516 · issue Implement RustDesk raw-stream splice through fleet proxy #6221
  14. dezren39 commented on Nov 6, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

queue/queuedHas a queued task in the Supabase agent queuestatus/needs-triageNot yet triaged; needs a first look

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions