[package]
name = "scsh"
version = "1.15.1"
edition = "2021"
description = "Scoped Skills Helper — preflight a git repo and run its scoped skills in ephemeral containers."
license = "MIT"
repository = "https://github.com/dkorolev/scsh"

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

# scsh keeps its own logic dependency-free; these crates only support the terminal UX.
# `crossterm` drives the interactive live board — raw mode, mouse reporting, the alternate
# screen, and key/mouse/resize events — so each long step is a collapsible row you click to
# expand and scroll (no `derive-more` feature: it needs a newer rustc than scsh targets).
# `console` does the cross-cutting text bits crossterm doesn't: NO_COLOR / TTY-aware colour,
# ANSI stripping, and Unicode-aware width/truncation. `signal-hook` is a **safe** way to catch
# terminal signals (std has none), so a kill restores the terminal and tears the (isolated)
# child process groups down instead of orphaning containers.
[dependencies]
console = "0.16"
signal-hook = "0.4"
crossterm = { version = "0.29.0", default-features = false, features = ["events"] }
# The session-browser daemon persists its store in an embedded, pure-Rust ACID key-value
# DB (`~/.scsh/daemon-<port>.redb`), written per-session rather than rewriting one growing
# JSON file every tick. redb is single-purpose, dependency-light, and needs no server.
redb = "4.1"
# The first-party clean-room asciicast player + VT emulator, zero dependencies, MIT: the
# session browser inlines its `PLAYER_JS`/`PLAYER_CSS` constants.
beecast-player = "0.9.2"
# The page pipeline for `scsh export-cast`: one self-contained offline `.html` per
# recording, embedding the same player as the live pages. Its only dependency is
# `beecast-player`, so nothing third-party rides in.
beecast-page = "0.9.2"

# Tuned for a small, self-contained release binary. `cargo test` uses the dev
# profile (unwinding), so these settings do not affect the test run.
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"
strip = true
