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.
26 lines
816 B
TOML
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"
|