# Single-crate protocol/door crate (the alktty template). No workspace: # the composition story is deferred — alkssh's substance is the mappings # (family ADR-003). [workspace] members = ["."] [package] name = "alkssh" version = "0.1.0" edition = "2024" rust-version = "1.89" license = "MIT OR Apache-2.0" description = "SSH adapter for the alk family: russh-wrapped vanilla-ssh termination bridged to/from alkcall channels — session/pty, tunnels, git exec — with every capability mapping a fail-closed cargo feature (no features: no capabilities)" repository = "https://git.alk.dev/alkdev/alkssh" keywords = ["ssh", "russh", "protocol", "alkcall", "network"] categories = ["network-programming", "asynchronous"] # The package policy (the sibling crates' convention): the published crate # ships the architecture docs (the authoritative contract) but not the # process surface — reviews, research, plans, task files, the working # agents' config, AGENTS.md. exclude = [".opencode/", "AGENTS.md", "docs/reviews/", "docs/plans/", "docs/research/", "docs/sdd_process.md", "tasks/"] [lib] name = "alkssh" [features] # ADR-003: flat and independent — no feature implies another; `default = []` # by design (a default build has no capabilities; every unfeatured open # declines fail-closed). Features gate nothing yet — the wave-2 decline core # is their first consumer; the per-feature sibling deps land with their # first consuming wave. default = [] session = [] git = [] tunnel = [] sftp = [] [dependencies] # async-trait (the alkcall precedent) makes the injected handles # dyn-compatible (`Arc`) — the HostKeyPolicy dial handle needs # that, and native AFIT traits are not object-safe at this toolchain. async-trait = "0.1" # ADR-002: aws-lc-rs only; default features off — no flate2, no rsa # (ed25519-only; the tree stays RC-free except the ssh-key pin riding the # russh keys path). Never enable russh's `des`/`dsa` features. russh = { version = "0.65", default-features = false, features = ["aws-lc-rs"] } alkcall = "0.10" alkvault = "0.1" tokio = { version = "1.54", features = ["full"] } thiserror = "2.0" tracing = "0.1" parking_lot = "0.12" zeroize = "1.9" [dev-dependencies] [profile.release] lto = "thin"