swactor/xtask/Cargo.toml
Zachery Aaron Shores-Chmielewski c42bf5e983 demo: rename xtask demo command; dashboard-established data-plane edges
Rename `cargo xtask provisioning-reconciler-demo` to `cargo xtask demo`
(CLI dispatch, help, child re-exec argv, launch spec strings, module dir
xtask/src/provisioning_demo -> xtask/src/demo).

Add iteration-1 data-plane edges, established from Fleet Control:

- Fleet Control "edge" button -> POST /control/edge (new
  ControlCommand::EstablishEdge) -> supervisor actor resolves the node's
  advertised EndpointAddr (stashed in NodeRuntime by AnnounceActor) and
  provisions a real outbound EdgeRuntime (arena ring lease, recorder
  WorkerPort, EDGE_ALPN send pump) in a new edge pump thread.
- Node gains EDGE_ALPN, an actor bridge decoding EdgeProvision gossip,
  and a NodeEdgeAgent that provisions its (single) inbound edge, polls
  it, mirrors observations onto the node.edge telemetry channel
  (render-only), and answers EdgeAck gossip which terminates the
  supervisor's provision retries. Node teardown replaces its inbound on
  re-provision; supervisor replaces sessions per node and tears them
  down on node exit/replacement/shutdown.
- The edge pump runs on the engine's blocking pool with sole session
  ownership (commands in, state mirror + feed lines out): the connect
  handshake blocks its thread and must not run on a Tokio worker or
  share a lock with the actor. Connects are bounded (10s) so a dead
  node faults its session instead of wedging edge polling.
- iroh-driver: retain_telemetry_connections() opts an application out
  of the driver-owned TELEMETRY_ALPN ingress so the node's pull server
  can drain those connections itself (the actor-bridge pump would
  otherwise claim them).
- Dashboard: edges array in the reconciler snapshot, per-node edge
  badges and edge button in Fleet Control, node_edges render mirror.
2026-08-17 00:11:20 +04:00

26 lines
816 B
TOML

[package]
name = "xtask"
version = "0.1.0"
edition = "2024"
license = "AGPL-3.0-only"
[dependencies]
serde_json = "1"
blake3 = "1"
swactor = { path = "..", features = ["serde"] }
swactor-engine = { path = "../crates/engine" }
swactor-transport = { path = "../crates/transport" }
swactor-process = { path = "../crates/process" }
provisioning = { path = "../crates/provisioning" }
telemetry = { path = "../crates/telemetry" }
dashboard = { path = "../crates/dashboard", features = ["demo-control"] }
data-plane = { path = "../crates/data-plane" }
iroh-driver = { path = "../crates/iroh-driver" }
distribution = { path = "../crates/distribution" }
iroh = "0.98"
tokio.workspace = true
serde = { version = "1", features = ["derive"] }
parking_lot = "0.12"
[target.'cfg(target_os = "linux")'.dependencies]
libc = "0.2"