[package]
name = "knishio-cli"
version = "0.1.7"
edition = "2021"
description = "KnishIO validator orchestration CLI — Docker control, cell management, benchmarks, and health checks"
license = "GPL-3.0-or-later"
authors = ["Eugene Teplitsky"]
repository = "https://github.com/WishKnish/KnishIO-CLI"
keywords = ["knishio", "dlt", "validator", "cli", "docker"]
categories = ["command-line-utilities"]
readme = "README.md"

[[bin]]
name = "knishio"
path = "src/main.rs"

[dependencies]
# CLI argument parsing
clap = { version = "4.5", features = ["derive"] }
clap_complete = "4.5"

# Async runtime
tokio = { version = "1.40", features = ["rt-multi-thread", "macros", "process"] }

# HTTP client for health and benchmark endpoints
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] }

# JSON serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

# Terminal colors
colored = "2.1"

# Table formatting
tabled = "0.16"

# TOML config file parsing
toml = "0.8"

# Error handling
anyhow = "1.0"
thiserror = "2.0"

# Progress bars (benchmark)
indicatif = "0.17"

# KnishIO SDK for molecule signing and wallet operations (benchmark).
# Always a crates.io version string in shipped builds. Temporarily swap to
# `{ path = "../../sdks/KnishIO-Client-Rust" }` ONLY while testing an
# unpublished SDK change, then revert before shipping. Guard lives in
# servers/knishio-validator-rust/Makefile → `check-no-path-dep`.
knishio-client = "0.1.2"

# SQLite for benchmark fixture storage
rusqlite = { version = "0.31", features = ["bundled"] }

# Latency plot rendering (benchmark PNG output)
plotters = { version = "0.3", default-features = false, features = ["bitmap_backend", "line_series", "bitmap_encoder", "ttf"] }

# Random number generation (benchmark endpoint selection)
rand = "0.8"

# Async stream utilities (benchmark concurrent execution)
futures-util = "0.3"

# WebSocket client for `knishio watch *` — talks graphql-transport-ws
# against the validator's /graphql/ws. rustls over native-tls because
# the validator serves TLS 1.3 + ChaCha20-Poly1305 (rustls server side);
# macOS SecureTransport via native-tls has known issues with that combo.
tokio-tungstenite = { version = "0.24", features = ["rustls-tls-native-roots"] }
# ring feature required — rustls 0.23 needs an explicit crypto provider;
# default features don't always install one. Matches the crypto stack
# reqwest (also used here) uses internally.
rustls = { version = "0.23", features = ["ring"] }
rustls-pki-types = "1"
webpki-roots = "0.26"

[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true
