tsafe-cli 1.0.20

tsafe CLI — local secret and credential manager (replaces .env files)
Documentation
[package]

name        = "tsafe-cli"

version = "1.0.20"

edition.workspace = true

authors.workspace = true

license.workspace = true

repository.workspace = true

homepage = "https://github.com/0ryant/tsafe"

documentation = "https://docs.rs/tsafe-cli"

rust-version.workspace = true

description = "tsafe CLI — local secret and credential manager (replaces .env files)"

readme = "../../README.md"

categories = ["command-line-utilities", "development-tools"]

keywords = ["secrets", "cli", "vault", "dotenv", "credentials"]



[[bin]]

name = "tsafe"

path = "src/main.rs"



[dependencies]

tsafe-core      = { path = "../tsafe-core", version = "1.0.9" }

tsafe-azure     = { path = "../tsafe-azure", version = "1.0.3", optional = true }

tsafe-bitwarden = { path = "../tsafe-bitwarden", version = "0.1.0", optional = true }

tsafe-tui       = { path = "../tsafe-tui", version = "1.0.8", optional = true }

tsafe-collab    = { path = "../tsafe-collab", version = "0.1.0", optional = true }

anyhow      = { workspace = true }

chrono      = { workspace = true }

rand        = { workspace = true }

zeroize     = { workspace = true }

serde       = { workspace = true }

serde_json  = { workspace = true }

ureq        = { workspace = true }

clap        = { version = "4", features = ["derive", "env"] }

clap_complete = "4"

clap_mangen = "0.2"

rpassword   = "7"

inquire     = "0.7"

colored     = "2"

qr2term     = "0.3"

base64      = { workspace = true }

age         = { workspace = true }

directories = { workspace = true }

sha1        = "0.10"

sha2        = { workspace = true }

flate2      = "1"

tracing     = { workspace = true }

tracing-subscriber = { workspace = true }

hmac        = { version = "0.12", optional = true }

toml        = { version = "0.8", optional = true }

jsonwebtoken = { workspace = true, optional = true }

thiserror   = { workspace = true, optional = true }

keepass     = { version = "0.12", optional = true }



# Optional: enable with `cargo build --features otel`

opentelemetry         = { workspace = true, optional = true }

opentelemetry_sdk     = { workspace = true, optional = true }

opentelemetry-stdout  = { workspace = true, optional = true }

opentelemetry-otlp    = { workspace = true, optional = true }

tracing-opentelemetry = { workspace = true, optional = true }



# SSH key generation and agent (enabled via the `ssh` feature).

ssh-key       = { version = "0.6", features = ["ed25519", "rsa", "alloc"], optional = true }

ssh-agent-lib = { version = "0.5", optional = true }

tokio         = { version = "1", features = ["rt", "net", "macros"], optional = true }



[features]

# Frozen core-only default release surface:

# always-on authority/runtime base plus tui, akv-pull, biometric, agent, team-core.

# Non-core surfaces stay available as explicit opt-ins below.

default = [

    "tui",

    "akv-pull",

    "biometric",

    "agent",

    "team-core",

    "ssh",

]



# Dependency-backed topology slices.

tui = ["dep:tsafe-tui"]

akv-pull = ["dep:tsafe-azure"]

cloud-pull-aws = ["dep:hmac", "dep:thiserror"]

cloud-pull-gcp = ["dep:jsonwebtoken", "dep:thiserror"]

cloud-pull-keepass = ["dep:keepass", "dep:thiserror"]

cloud-pull-bitwarden = ["dep:tsafe-bitwarden"]



# Core/default-on roadmap slices that do not need extra Cargo deps here.

# `agent` stays a core CLI surface; the actual `tsafe-agent` runtime remains a

# separately published companion binary rather than an in-process dependency.

agent = []

biometric = ["tsafe-core/biometric", "dep:windows", "dep:windows-future"]

team-core = []



# Gated non-core roadmap slices.

cloud-pull-vault = ["dep:thiserror"]

cloud-pull-1password = ["dep:thiserror"]

multi-pull = [

    "akv-pull",

    "cloud-pull-aws",

    "cloud-pull-gcp",

    "cloud-pull-vault",

    "cloud-pull-1password",

    "cloud-pull-keepass",

    "cloud-pull-bitwarden",

]

pm-import-extended = []

ots-sharing = []

git-helpers = []

browser = ["nativehost"]

nativehost = []

ssh = ["dep:ssh-key", "dep:ssh-agent-lib", "dep:tokio"]



# Plugin command surface (`tsafe plugin <tool> [args...]`).

# Explicit opt-in only for the core-only release reset.

plugins = ["dep:toml"]



# Collaboration service scaffolding (ADR-027/028). Off by default.

# No network calls in Tranche 2; full implementation is Tranche 3+.

collab = ["dep:tsafe-collab"]



# Feature-gated OpenTelemetry tracing bridge.

# When enabled, tsafe emits OpenTelemetry spans from existing tracing::instrument

# call-sites.  Configure the export target via environment variables:

#   OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318  (future: full OTLP)

#   TSAFE_OTEL_STDOUT=1                               (stdout/stderr export, this release)

otel = [

    "dep:opentelemetry",

    "dep:opentelemetry_sdk",

    "dep:opentelemetry-stdout",

    "dep:opentelemetry-otlp",

    "dep:tracing-opentelemetry",

]



[dev-dependencies]

assert_cmd  = "2"

predicates  = "3"

tempfile    = { workspace = true }

temp-env    = "0.3"

mockito     = "1"

keepass     = { version = "0.12", features = ["save_kdbx4"] }

serde_yaml  = { workspace = true }



[target.'cfg(unix)'.dependencies]

# UID lookup for the default SSH agent socket path.

libc = "0.2"



[target.'cfg(windows)'.dependencies]

# Native messaging host registration (HKCU + manifest JSON).

winreg = "0.52"

# Windows Hello IUserConsentVerifierInterop challenge (E4.1).

# Optional — compiled only when the `biometric` feature is enabled.

windows = { version = "0.61", features = [

    "Security_Credentials_UI",

    "Win32_System_Console",

    "Win32_System_WinRT",

    "Foundation",

], optional = true }

# windows_future is a public crate from the windows-rs project that exposes

# IAsyncOperation<T> and its blocking .get() method.  It is a transitive dep

# of `windows = "0.61"` but must be named explicitly to import in user code.

windows-future = { version = "0.2", optional = true }



[build-dependencies]

# Embeds the tsafe icon + version metadata into tsafe.exe on Windows builds.

# No-op on other platforms — cross-compile safe.

winres = "0.1"



[package.metadata.wix]

# WiX extensions required for WixUI_Minimal (license dialog) and WixUtilExtension (util namespace).

extensions = ["WixUIExtension", "WixUtilExtension"]