ikigai-cli 0.1.21

ikigai — a REPL client for resource-resolution kernels (native + WebAssembly).
[package]
name = "ikigai-cli"
description = "ikigai — a REPL client for resource-resolution kernels (native + WebAssembly)."
version.workspace = true
edition.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true

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

[features]
default = ["embedded", "ipc"]
embedded = ["dep:ikigai-embedded"]
ipc = ["dep:ikigai-ipc"]   # Unix only; the dep is empty elsewhere
quic = ["dep:ikigai-quic", "dep:ikigai-discovery", "dep:ikigai-wire"] # opt-in; pulls quinn/rustls/tokio
web = ["dep:ikigai-web", "dep:tokio", "dep:serde_yaml"] # opt-in inbound HTTP face; pulls Tokio (like quic)

[dependencies]
async-trait = "0.1"
ikigai-core = { workspace = true }
# Sibling crates carry an explicit version — a path-only dependency is unpublishable.
# The number is the LOCKSTEP version, NOT a floor: these siblings are released together at
# one version, so same-version-across-the-set is the only combination anything has ever
# packaged, published or tested. A floor would name a combination CI has never built, and
# no local build could contradict it — in-tree the path dependency always wins, so the
# version half is never exercised here. The full argument, and why this is constitution
# rule 5 APPLIED rather than broken, lives in the root manifest's `[workspace.dependencies]`.
# The per-pin notes below stay as API HISTORY: they record which release first carried the
# API named, which is what a reader needs when asking whether an older sibling would compile
# at all. They no longer set the number. `tests/lockstep_pins.rs` fails if any of them falls
# out of step with `workspace.package.version` — six of the seventeen sibling pins a lockstep
# bump has to touch are in this file.
ikigai-engine = { path = "../ikigai-engine", version = "0.1.21" } # API history — 0.1.16 = with_width_routing + last_fan_out: the fan-out switch and the note the REPL prints
ikigai-resolve = { workspace = true }
serde_json = { workspace = true }
ikigai-embedded = { path = "../ikigai-embedded", version = "0.1.21", optional = true } # API history — 0.1.16 = set_width_routing/width_routing: the --width-routing channel, beside set_scheduler_spec
ikigai-mcp = { path = "../ikigai-mcp", version = "0.1.21" } # API history — 0.1.12 = row collapse: every same-named manifold row stays reachable
ikigai-ipc = { path = "../ikigai-ipc", version = "0.1.21", optional = true } # API history — 0.1.13 = heal-on-use: a broken established connection redials
ikigai-quic = { path = "../ikigai-quic", version = "0.1.21", optional = true } # API history — 0.1.14 = the
# first published quic carrying `Minter`, `PeerIdentity` and `fingerprint_of_pem` (#286,
# per-identity grants), all three named in main.rs. The pin read 0.1.6 — a version that
# EXISTS on crates.io and does not have them, so the claim was false in the one direction a
# resolver can actually take. No local build could ever have contradicted it.
# mDNS announce/browse. Rides the `quic` feature: the only thing worth finding on the
# network is a QUIC-served kernel.
ikigai-discovery = { path = "../ikigai-discovery", version = "0.1.21", optional = true }
ikigai-wire = { workspace = true, optional = true }
# Inbound HTTP face — published as `ikigai-web`; this workspace owns that crates.io name
# (the standalone server repo of the same directory name publishes as `ikigai-web-server`).
# Gated behind `web`.
ikigai-web = { workspace = true, optional = true }
# A runtime for the `web` serve loop (ikigai-web is async). Feature-gated so the
# default/wasm binary never pulls Tokio; matches the `quic` transport's posture.
# net+time so the runtime's `enable_all()` has the io+time drivers on its own.
tokio = { version = "1", features = ["rt-multi-thread", "net", "time"], optional = true }
# YAML authoring of the non-LD route table (parses to the same value tree as JSON). Only the
# `web`-featured loader uses it. (serde_yaml 0.9 is archived-but-stable; swap to serde_yml if
# a maintained fork is preferred.)
serde_yaml = { version = "0.9", optional = true }

# The full-screen TUI is native-only (crossterm). The browser frontend (ratzilla)
# lands in a later slice; on wasm the binary falls back to the line REPL.
[target.'cfg(not(target_family = "wasm"))'.dependencies]
ratatui = "0.30.1"
crossterm = "0.29.0"

[dev-dependencies]
# `block_on` for the one assertion the adapter cannot make: issuing the step's request at
# the KERNEL, under the session's own capability, to see the TYPED `Denied` — the engine's
# `Entry.result` is `Result<String, String>`, so the taxonomy reaches a face as prose only.
futures = { workspace = true }
# Read this workspace's own manifests back in `tests/lockstep_pins.rs`. A real TOML parse
# rather than line matching: the invariant must hold for a dependency written as an inline
# table, a `[dependencies.x]` table or a target-gated one, and a hand-rolled scan that
# silently skips a form it does not recognize is a guard that passes by not looking.
toml = "0.8"