magi-cli 0.19.0

Blind multi-agent implementation competition: N agents implement, M judges rank blind, deliberate, vote privately, winner survives double review + E2E gate
Documentation
[package]
# `magi` on crates.io is an 882-byte placeholder with no repository, and
# crates.io does not reclaim names. Same workaround as yukimemi/yui, which
# publishes as `yui-cli`: the repo, the binary and the library all stay `magi`,
# only the published package name carries the suffix.
name = "magi-cli"
version = "0.19.0"
edition = "2024"
rust-version = "1.85"
authors = ["yukimemi <yukimemi@gmail.com>"]
license = "MIT"
description = "Blind multi-agent implementation competition: N agents implement, M judges rank blind, deliberate, vote privately, winner survives double review + E2E gate"
repository = "https://github.com/yukimemi/magi"
readme = "README.md"
categories = ["command-line-utilities", "development-tools"]
keywords = ["ai", "agent", "code-review", "git", "worktree"]

[lib]
name = "magi"
path = "src/lib.rs"

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

[dependencies]
clap = { version = "4.6.6", features = ["derive"] }
clap_complete = "4.6.9"
serde = { version = "1.0.229", features = ["derive"] }
serde_json = "1.0.151"
toml = "1.1.6"
anyhow = "1.0.104"
thiserror = "2.0.20"
tracing = "0.1.44"
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
tokio = { version = "1.53.1", features = [
  "rt",
  "rt-multi-thread",
  "macros",
  "process",
  "time",
  "fs",
  "io-util",
  "sync",
  # `signal`: the daemon's loop shuts down on Ctrl-C, which needs a portable
  # signal handler. Without it an unattended run has no clean stop.
  "signal",
] }
# TUI. Versions match the rest of the fleet (shoka, rvpm), including
# `ansi-to-tui`, which lets the detail pane render `report::run`'s own coloured
# output instead of reimplementing the report against ratatui spans.
ratatui = "0.30.2"
crossterm = { version = "0.29", features = ["events"] }
ansi-to-tui = "8.0.1"
jiff = { version = "0.2.37", features = ["serde"] }
dirs = "7.0.0"
kaishin = "0.7.3"
teravars = { version = "0.2.2", features = ["merge"] }
# Web UI. `axum` for the API and its built-in SSE, `tokio-stream` to turn the
# change-notification channel into the stream SSE wants. No `tower-http` and no
# JS toolchain: the front end is three files embedded with `include_str!`, so
# `cargo install magi-cli` yields a working phone UI with nothing else to fetch.
axum = "0.8.9"
tokio-stream = "0.1.19"
# GFM markdown -> node tree for the web UI (see `md`). `default-features =
# false` because the crate's defaults pull in `syntect` for fenced-code
# syntax highlighting, which magi does not want: a fence is shown as plain
# text, never colored, so there is nothing for a highlighter to do here.
comrak = { version = "0.55.0", default-features = false }

[dev-dependencies]
pretty_assertions = "1.4.1"
tempfile = "3.27.0"