rhei-cli 0.3.0

Command-line driver for the Rhei agent runtime.
Documentation
[package]
name = "rhei-cli"
version.workspace = true
edition.workspace = true
license.workspace = true
rust-version.workspace = true
repository.workspace = true
homepage.workspace = true
keywords.workspace = true
description = "Command-line driver for the Rhei agent runtime."
categories = ["command-line-utilities", "development-tools"]
readme = "../../README.md"
# The built-in templates, skills, and the flow-visualization asset are compiled
# into the binary (§FS-rhei-templates.1, §FS-rhei-install-skills.4.3,
# §AR-rhei-viz-flow.2), so they must travel with the published package.
include = ["src/**/*", "templates/**/*", "skills/**/*", "assets/**/*"]

[dependencies]
rhei-core = { package = "rhei-plan", path = "../rhei-core", version = "=0.3.0" }
# Absorbed from the former rhei-cli-tui crate.
crossbeam-channel = "0.5"
crossterm = "0.27"
ratatui = "0.26"
# Constrain ratatui's transitive resolver for Rust 1.82-compatible package verification.
unicode-segmentation = "=1.12.0"
clap = { version = "=4.5.60", features = ["derive"] }
clap_complete = { version = "=4.5.60", features = ["unstable-dynamic"] }
# `cargo install --path` ignores the workspace lockfile, so pin clap_lex to a
# Cargo 1.82-compatible release instead of letting resolution float to 1.1.x.
clap_lex = "=1.0.0"
anyhow = "1"
# Constrain serde_yaml's transitive resolver for Rust 1.82-compatible package verification.
indexmap = { version = "=2.2.6", features = ["serde"] }
miette = { version = "7", default-features = false, features = ["fancy-no-backtrace", "derive"] }
minijinja = "2"
notify = "6"
regex = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# Already in the graph via miette; named directly only to pass a
# `WordSplitter` to the diagnostic handler (miette does not re-export it).
textwrap = { version = "0.16", default-features = false }
serde_yaml = "0.9"
sha2 = "0.10"
fs2 = "0.4.3"
tempfile = "3.27.0"
nix = { version = "0.29", features = ["signal", "process"] }
# Compiles `templates/` into the binary so `rhei templates` is populated on a
# bare `cargo install`, with no `share/` layout to install alongside it.
include_dir = { version = "0.7.4", default-features = false }

# Only the pty-based interruption e2e needs this, and only on Unix — Windows is
# in the CI matrix and `nix` does not build there. §FS-rhei-run-tui.1.5.7
[target.'cfg(unix)'.dev-dependencies]
# `fs` is what gates `nix::fcntl`, which the hung-up-terminal e2e needs to keep
# the pty out of the child it spawns. §FS-rhei-run.3.2
nix = { version = "0.29", features = ["term", "fs"] }

# The CLI body is a library so both binary targets below link one compiled
# copy of it; pointing two `[[bin]]`s at the same `main.rs` would compile the
# whole crate twice under the LTO release profile. §AR-source-file-size
[lib]
name = "rhei_cli"
path = "src/lib.rs"

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

# Short alias for the same CLI, so `cargo install rhei-cli` puts both `rhei`
# and `rh` on PATH: Cargo has no install-time symlink mechanism, so the second
# name has to be its own binary target. §FS-rhei-distribution.1
[[bin]]
name = "rh"
path = "src/bin/rh.rs"