arcature-cli 2026.1.1

Developer lifecycle CLI for Arcature applications.
Documentation
//! The MCP tool implementations — one file per tool, plus the shared
//! argument parser `parse.rs` (AGENTS.md §1). This `mod.rs` declares the
//! child modules and re-exports the shared parser items only — no
//! implementation lives here.
//!
//! Every tool reads the canonical UAG from the shared [`ToolContext`]
//! (loaded once per session, file-preferred) and returns a JSON-RPC result
//! value. None of them grep the project, walk the source tree, or parse
//! Rust — the cardinal rule (PROGRAM.md AP2.1-9). The shipped tools are
//! read-only and require no capabilities; the capability gate is exercised
//! by negative tests against a synthetic destructive tool requirement.
//!
//! # Bounds (§29)
//!
//! Each tool parses its own arguments with a per-field size bound, so an
//! attacker-controlled MCP client cannot drive unbounded work through a
//! tool call. The UAG content itself is developer-authored (trusted), so
//! returning all routes/pages/services is not an abuse vector — the bound
//! is on the *client's args*, not the app's graph.

pub(crate) mod application_info;
pub(crate) mod config_schema;
pub(crate) mod docs_search;
pub(crate) mod inspect_route;
pub(crate) mod jobs;
pub(crate) mod pages;
mod parse;
pub(crate) mod routes;
pub(crate) mod services;

pub(crate) use parse::{parse_bounded_string, parse_optional_bounded_string};