Add Windows named-pipe local control

This commit is contained in:
Eric Wendland 2026-07-18 17:05:38 +02:00
commit 3c84713472
9 changed files with 338 additions and 72 deletions

View file

@ -22,8 +22,10 @@ For deployment-readiness work that cuts across feature areas, see
- `[x]` Daemon startup claims the local control endpoint before starting
network and background modules.
- `[x]` A live endpoint rejects another daemon with the stable
`daemon_already_running` code instead of unlinking the first socket.
- `[x]` Stale, unreachable socket paths are recovered automatically.
`daemon_already_running` code instead of unlinking the first Unix socket or
replacing the first Windows named-pipe server.
- `[x]` Stale, unreachable Unix socket paths are recovered automatically;
Windows pipe lifetime is owned by the server handle.
- `[x]` Tests cover stale recovery and live second-daemon rejection.
- `[x]` Keep local control available when Iroh-native startup degrades.
@ -37,6 +39,17 @@ For deployment-readiness work that cuts across feature areas, see
- `[x]` Tests inject a post-endpoint native-store failure and verify clean
degradation where UDP endpoint binding is available.
- `[x]` Use a platform-native local control carrier.
Acceptance criteria:
- `[x]` Linux and macOS retain per-home Unix-domain sockets.
- `[x]` Windows derives a deterministic per-home named-pipe name and uses
Tokio named-pipe clients and server instances for the same JSONL protocol.
- `[x]` Unary control, SSH proxying, and TCP byte forwarding share one async
local-stream abstraction without adding another executable or remote
transport.
- `[x]` Unix-socket forwarding is cfg-gated with an explicit unsupported
result on Windows, and a platform transport roundtrip runs in CI tests.
- `[x]` Make startup modes and the daemon lifecycle discoverable.
Acceptance criteria:
- `[x]` Base and nested CLI help explain every command family instead of
@ -346,10 +359,11 @@ control, local CAS, service installation, and written architecture decisions.
- `cargo run -p geth -- daemon run` starts one local daemon.
- No `gethd` or `gethctl` binaries exist in the workspace.
- `[x]` Local daemon control socket.
- `[x]` Local daemon control endpoint.
Acceptance criteria:
- Control request/response types roundtrip through JSONL serialization.
- `geth status` and `geth node id` talk to a running daemon.
- Unix sockets and Windows named pipes carry the same local protocol.
- Control decoding treats input as untrusted and returns structured errors.
- `[x]` Local metadata store and identity.