Files
cli/Cargo.toml
zooqueen 67822268f1 up is a root verb, and the command tree comes from the document
The front door tells a reader to run hanzo up, and the binary answered
only hanzo node up — an unrecognised first word is taken as a task for
the coding agent, so the reader did not get an error, they got
something else entirely. Root Up dispatches to the same handler; both
spellings run one implementation.

The product commands are folded from the served document rather than
kept beside it, so a command the document names is a command the binary
answers.
2026-08-20 15:19:42 -07:00

54 lines
2.3 KiB
TOML

[package]
name = "hanzo-cli"
version = "1.0.1"
edition = "2021"
authors = ["Hanzo AI"]
description = "Unified CLI for Hanzo AI development tools"
license = "MIT"
repository = "https://github.com/hanzoai/cli"
[[bin]]
name = "hanzo"
path = "src/main.rs"
[dependencies]
# `string` lets a command be named at runtime, which is what grafting the
# platform's served command document onto this tree needs (src/catalog.rs).
clap = { version = "4.5", features = ["derive", "env", "string"] }
tokio = { version = "1.36", features = ["full"] }
anyhow = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
toml = "0.8"
dirs = "5.0"
colored = "2.1"
indicatif = "0.17"
dialoguer = "0.11"
reqwest = { version = "0.12", features = ["json", "gzip"] }
which = "6.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tempfile = "3.10"
subprocess = "0.2"
chrono = { version = "0.4", features = ["serde"] }
# Cloud auth (HIP-0111 OIDC PKCE S256 + RFC 8628 device flow).
sha2 = "0.10" # PKCE S256 challenge
base64 = "0.22.1" # base64url (no pad) — PKCE + JWT claim decode
rand = "0.8" # OsRng for PKCE verifier + state + local wallet entropy
keyring = { version = "3", features = ["apple-native", "windows-native", "sync-secret-service"] } # OS keychain — secrets NEVER hit disk
webbrowser = "1" # open the IAM authorize URL
qr2term = "0.3.3" # terminal QR of the device verification link
# Local / imported wallets — HD derivation + EVM address. Cloud-custody (KMS/MPC)
# wallets need NONE of this; these are only for offline `wallet create --local`
# and `wallet import`. Pure-Rust RustCrypto; secrets live in the OS keychain.
bip39 = { package = "tiny-bip39", version = "1" } # BIP-39 mnemonic (all word counts) -> seed
bip32 = "0.5" # secp256k1 BIP-32 HD derivation from a seed
k256 = "0.13" # secp256k1 (matches bip32) — public key -> EVM address
sha3 = "0.10" # Keccak-256 for EVM address
[dev-dependencies]
assert_cmd = "2.0"
predicates = "3.1"