Files
alkssh/Cargo.toml
T
glm-5.3-flash 270365ea4c feat(config): land the wave-3 per-feature family-seam handles (w3-seam-config)
- ServeConfig gains cfg-gated SessionSeam / GitSeam Option fields
  (whole-Option struct per seam — the shape decision recorded in the
  task notes): unset → the owned rows decline even though the feature
  is on, no construction-time validation
- SessionSeam carries the alktty backends map + backend selector +
  ownership provider; GitSeam carries the alkgit backend quartet +
  caller-owned pipeline semaphore + push_options_negotiated
- optional deps alktty 0.8.1 / alkgit 0.1.0 wired feature-to-dep
  (pins verified against crates.io: licenses, MSRV, shared alkcall
  resolution); gix-hash 0.28 as dev-dep only (alkgit does not
  re-export ObjectId for the trait doubles)
- per-feature construction/unset-declines/Debug rows in config.rs;
  accessors session_seam_configured / git_seam_configured; docs state
  what each seam handle carries

Verified: cargo test (per-feature + --all-features), clippy ×2
(-D warnings), fmt, cargo doc --no-deps, cargo tree feature isolation
(git-build: no alktty; session-build: no alkgit), taskgraph validate
2026-10-28 16:12:03 +00:00

74 lines
3.3 KiB
TOML

# 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). The wave-2 decline core is the first `cfg`
# consumer; the wave-3 seam-config handles are the second (each optional
# sibling dep is gated feature-to-dep so a git-build never compiles
# alktty and vice versa — the wave-1 manifest rule: per-feature sibling
# deps land with their first consuming wave, which for alktty/alkgit is
# the wave-3 config fields; alktunnels still lands with its first
# consuming code, w3-tunnel-direct).
default = []
session = ["dep:alktty"]
git = ["dep:alkgit"]
tunnel = []
sftp = []
[dependencies]
# async-trait (the alkcall precedent) makes the injected handles
# dyn-compatible (`Arc<dyn ...>`) — 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"
# Wave-3 seam-handle types (`config.rs`'s `SessionSeam`/`GitSeam`).
# Pins verified against crates.io (2026-10-28): alktty 0.8.1, alkgit
# 0.1.0 — both MIT OR Apache-2.0, both rust_version 1.88 ≤ our 1.89,
# both over alkcall ^0.10 (shared with our `alkcall = "0.10"` → 0.10.1
# resolution). alktty's `local` feature stays off — alkssh never
# touches a real backend; the `local` shapes stay alktty-side.
alktty = { version = "0.8.1", default-features = false, optional = true }
alkgit = { version = "0.1.0", default-features = false, optional = true }
tokio = { version = "1.54", features = ["full"] }
thiserror = "2.0"
tracing = "0.1"
parking_lot = "0.12"
zeroize = "1.9"
[dev-dependencies]
# The git-seam test doubles name `GitPackGen`'s `gix_hash::ObjectId`
# parameters and alkgit does not re-export them — test-graph only,
# version matched to alkgit's `^0.28` req (same crate in the lockfile).
gix-hash = { version = "0.28", features = ["sha1"] }
[profile.release]
lto = "thin"