rpi_cli/lib.rs
1//! `pi-cli` — a terminal coding-agent CLI built on the rpi library crates.
2//!
3//! It provides the argument surface, provider/model resolution, harness
4//! construction, output modes, and the interactive TUI that a harness-backed
5//! CLI needs.
6//!
7//! # Surface
8//!
9//! - **Argument parsing** ([`args`]) — `--provider`/`--model`/`--api-key`,
10//! `--thinking`, `--print`/`-p`, `--mode {text,json}`, `-c`/`--continue`,
11//! `-r`/`--resume`, `--session`/`--session-dir`/`--no-session`, `--tools`/
12//! `-t`, `--exclude-tools`/`-xt`, `--no-tools`, `--no-builtin-tools`,
13//! `--system-prompt`, `--append-system-prompt`, `--name`/`-n`, `--verbose`,
14//! `--help`/`-h`, `--version`/`-v`, positional `messages`, and `@file`
15//! attachments.
16//! - **Provider/model resolution** ([`provider`]) — API key from `--api-key`
17//! or the provider's environment variable; model pattern
18//! `provider/id[:thinking]` resolved against the provider's catalog.
19//! - **Harness construction + run loop** ([`session`]) — `OsExecutionEnv` +
20//! built-in `read`/`write`/`edit`/`bash` tools, durable JSONL session storage,
21//! `AgentHarness`, and the `prompt_text → outcome` run.
22//! - **Output modes** ([`modes`]) — `print` (text, single-shot) and `json`
23//! (newline-delimited harness events), plus a simple interactive REPL.
24//! - **`app`** ([`app`]) — argument dispatch, model resolution, harness build,
25//! mode dispatch, exit codes.
26//!
27//! Resources load from `.rpi/` and `~/.rpi/agent/`; extensions are Rust
28//! `cdylib` plugins installed and developed with `rpi install` / `rpi dev`.
29
30pub mod agent_session;
31pub mod app;
32pub mod args;
33pub mod auth;
34pub mod auth_guidance;
35pub mod brand;
36pub mod changelog;
37pub mod config;
38pub mod dev_extension;
39pub mod docs_tool;
40pub mod events;
41pub mod experimental;
42pub mod export;
43pub mod extension_api;
44pub mod extensions_actions;
45pub mod extras;
46pub mod fs_watch;
47pub mod install;
48pub mod interactive_tui;
49pub mod key_trace;
50pub mod llama_command;
51pub mod model_registry;
52pub mod modes;
53pub mod packages;
54pub mod provider;
55pub mod remote;
56pub mod resource_dirs;
57pub mod resume_picker;
58pub mod session;
59pub mod session_cwd;
60pub mod session_driver;
61pub mod settings;
62pub mod source_info;
63pub mod timings;
64mod transcript_navigation;
65pub mod transcript_view;
66pub mod trust;
67pub mod tui_shell;
68pub mod updates;
69
70/// Crate version, surfaced by `rpi --version`. Mirrors the TS `VERSION` export
71/// (sourced from `package.json`; here from `env!("CARGO_PKG_VERSION")`).
72///
73/// Aliases [`rpi_plugin_sdk::HOST_VERSION`] so the version the CLI prints and
74/// the version handed to plugins (and, through it, the version extensions stamp
75/// on their own telemetry) can never disagree.
76pub const VERSION: &str = rpi_plugin_sdk::HOST_VERSION;
77
78/// The application name used in help + version output. Mirrors TS `APP_NAME`
79/// (the TS bin is `"pi"`; the Rust crate publishes under the `rpi-` namespace,
80/// so the binary + displayed name is `"rpi"` to match).
81///
82/// Aliases [`rpi_plugin_sdk::HOST_NAME`] — the plugin contract owns the
83/// identity, so an extension can label its output (a trace name, a tag) without
84/// hardcoding a brand that a rename would silently invalidate.
85pub const APP_NAME: &str = rpi_plugin_sdk::HOST_NAME;