Rename all crates, CLI commands, constants, type names, doc comments, and documentation from wraith to alknet. Includes wire-protocol changes: ALPN wraith-ssh -> alknet-ssh, reserved destination prefix wraith- -> alknet-, SSH auth username wraith -> alknet.
2.3 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | |
|---|---|---|---|---|---|---|---|---|
| cli/serve-command | Implement `alknet serve` CLI subcommand with clap | completed |
|
moderate | low | component | implementation |
Description
Implement the alknet serve CLI subcommand using clap with derive macros. This translates ServeOptions into CLI flags and runs the server. All options from server.md CLI interface must be supported.
Environment variable defaults: none mandated for serve, but consistent with programmatic-first API.
The binary is the alknet crate at crates/alknet/src/main.rs.
Acceptance Criteria
crates/alknet/src/main.rsdefines CLI with clap derive:alknetwithserveandconnectsubcommands (connect stub for now)alknet servesubcommand flags match server.md CLI interface exactly:--key,--authorized-keys,--cert-authority,--transport,--listen,--tls-cert,--tls-key,--acme-domain,--stealth,--proxy,--iroh-relay,--max-connections-per-ip,--max-auth-attempts--keyis required (no default)--transportdefaults totcp--listendefaults to0.0.0.0:22--stealthvalidates that--transport tlsis set; error otherwise--transport irohprints endpoint ID on startup--acme-domainrequiresacmefeature (compile-time or runtime error if missing)- Key inputs accept file paths (strings); in-memory key data is a library/API concern, not CLI
- CLI translates args into
ServeOptionsand callsServer::new(opts).run().await - Errors reported to stderr with non-zero exit code
cargo run -p alknet -- serve --helpshows all flags with descriptions
References
- docs/architecture/server.md — CLI Interface section with all flags
- docs/architecture/overview.md — "A single binary with subcommands"
Notes
All 12 CLI flags implemented. ServeTransportModeArg ValueEnum maps to ServeTransportMode. Stealth validation checks transport==tls. ACME feature-gated at compile time. iroh prints endpoint ID on startup.
Summary
Implemented alknet serve CLI subcommand with all server.md flags. Clap derive with ServeTransportModeArg, stealth validation, ACME feature gate, iroh endpoint ID printing. Build/clippy/test pass across all feature combinations.