ridl-cli 0.2.0

The `ridl` command-line toolchain: check, build, fmt, lock, diff, lsp, and mcp, over the shared compiler crates.
[package]
# The crates.io package name, not the installed binary's: `ridl` is already
# an unrelated crate on crates.io (a crypto library), so this crate publishes
# as `ridl-cli` and the `[[bin]]` section below names the binary `ridl`
# regardless, unchanged for every existing install and every doc that says
# `ridl check`, `ridl build`, and so on.
name = "ridl-cli"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
description = "The `ridl` command-line toolchain: check, build, fmt, lock, diff, lsp, and mcp, over the shared compiler crates."

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

[dependencies]
clap.workspace = true
# `ridl lsp` owns the stdio transport the language server runs over; the
# server itself is `ridl-lsp`'s library face.
lsp-server.workspace = true
num-bigint.workspace = true
num-rational.workspace = true
# `ridl test` (E2.11a) draws its samples from the E1.18 range strategies, so the
# property runner needs proptest's seeded `TestRunner`. This is the CLI binary,
# which the E1.19 wasm check does not build, so nothing here reaches that gate.
proptest = { workspace = true, features = ["std"] }
ridl-core.workspace = true
ridl-diff.workspace = true
ridl-fmt.workspace = true
ridl-ir.workspace = true
ridl-lsp.workspace = true
ridl-mcp.workspace = true
ridl-sem.workspace = true
ridl-syntax.workspace = true
ridlc.workspace = true
rowan.workspace = true
serde_json.workspace = true
# `ridl-mcp`'s `serve_stdio` is async, so `ridl mcp` builds the process's one
# Tokio runtime and blocks on it. No other subcommand is async.
tokio.workspace = true

[dev-dependencies]
pulldown-cmark.workspace = true
# The end-to-end server tests speak MCP to a spawned `ridl mcp`: `client` is
# the caller half of the SDK, `transport-child-process` the child-process
# transport that spawns the binary and frames JSON-RPC over its stdio.
rmcp = { workspace = true, features = ["client", "transport-child-process"] }
# `process` for `tokio::process::Command`, which the child-process transport
# takes. `transport-child-process` enables it too; naming it here makes the
# test's own requirement explicit rather than inherited. `time` for
# `tokio::time::timeout`, which bounds every `#[tokio::test]` below — `cargo
# test` has no per-test timeout of its own.
tokio = { workspace = true, features = ["process", "time"] }