Skip to main content

pi/
lib.rs

1//! Pi - High-performance AI coding agent CLI
2//!
3//! This library provides the core functionality for the Pi CLI tool,
4//! a Rust port of pi-mono (TypeScript) with emphasis on:
5//! - Performance: Sub-100ms startup, smooth TUI at 60fps
6//! - Reliability: No panics in normal operation
7//! - Efficiency: Single binary, minimal dependencies
8//!
9//! ## Public API policy
10//!
11//! The `pi` crate is primarily the implementation crate for the `pi` CLI binary.
12//! External consumers should treat non-`sdk` modules/types as **unstable**
13//! and subject to change. Use [`sdk`] as the stable library-facing surface.
14//!
15//! Currently intended stable exports:
16//! - [`Error`]
17//! - [`PiResult`]
18//! - [`sdk`] module
19
20#![forbid(unsafe_code)]
21// rch clippy probes without these allowances still expose broad, cross-module
22// dormant surfaces in extension/session/SDK paths. The no-allow inventory is
23// tracked in bd-63x3v.5.1; keep this crate-wide guard until the remaining
24// subsystems are narrowed in their own patches.
25#![allow(dead_code, clippy::unused_async)]
26#![cfg_attr(
27    test,
28    allow(
29        unused_variables,
30        clippy::assertions_on_constants,
31        clippy::match_same_arms,
32        clippy::uninlined_format_args,
33        clippy::missing_const_for_fn,
34        clippy::collapsible_if
35    )
36)]
37// Allow pedantic lints during early development - can tighten later
38#![allow(
39    clippy::must_use_candidate,
40    clippy::doc_markdown,
41    clippy::missing_errors_doc,
42    clippy::missing_panics_doc,
43    clippy::module_name_repetitions,
44    clippy::similar_names,
45    clippy::wildcard_imports
46)]
47
48// Allow in-crate tests that include integration test helpers to resolve `pi::...`
49// paths the same way integration tests do.
50extern crate self as pi;
51
52// Gap H: jemalloc allocator for allocation-heavy paths.
53// Declared in the library so all project binaries/tests share allocator behavior.
54// BSD-family targets stay on their platform allocator to avoid allocator-domain
55// mismatch across libc/pthread and C dependencies such as QuickJS.
56#[cfg(all(feature = "jemalloc", any(target_os = "linux", target_os = "macos")))]
57#[global_allocator]
58static GLOBAL_ALLOCATOR: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
59
60#[doc(hidden)]
61pub mod acp;
62#[doc(hidden)]
63pub mod agent;
64#[doc(hidden)]
65pub mod agent_cx;
66#[doc(hidden)]
67pub mod app;
68#[doc(hidden)]
69pub mod auth;
70#[doc(hidden)]
71pub mod autocomplete;
72#[doc(hidden)]
73pub mod buffer_shim;
74#[doc(hidden)]
75pub mod cli;
76#[doc(hidden)]
77pub mod compaction;
78#[doc(hidden)]
79pub mod compaction_worker;
80#[doc(hidden)]
81pub mod config;
82#[doc(hidden)]
83pub mod conformance;
84#[doc(hidden)]
85pub mod conformance_shapes;
86#[doc(hidden)]
87pub mod connectors;
88#[doc(hidden)]
89pub mod crypto_shim;
90#[doc(hidden)]
91pub mod doctor;
92#[doc(hidden)]
93pub mod error;
94#[doc(hidden)]
95pub mod error_hints;
96#[doc(hidden)]
97pub mod extension_conformance_matrix;
98#[doc(hidden)]
99pub mod extension_dispatcher;
100#[doc(hidden)]
101pub mod extension_events;
102#[doc(hidden)]
103pub mod extension_inclusion;
104#[doc(hidden)]
105pub mod extension_index;
106#[doc(hidden)]
107pub mod extension_license;
108#[doc(hidden)]
109pub mod extension_popularity;
110#[doc(hidden)]
111pub mod extension_preflight;
112#[doc(hidden)]
113pub mod extension_replay;
114#[doc(hidden)]
115pub mod extension_scoring;
116#[doc(hidden)]
117pub mod extension_tools;
118#[doc(hidden)]
119pub mod extension_validation;
120#[doc(hidden)]
121pub mod extensions;
122#[doc(hidden)]
123pub mod extensions_js;
124#[doc(hidden)]
125pub mod flake_classifier;
126#[doc(hidden)]
127pub mod hostcall_amac;
128#[doc(hidden)]
129pub mod hostcall_io_uring_lane;
130#[doc(hidden)]
131pub mod hostcall_queue;
132#[doc(hidden)]
133pub mod hostcall_rewrite;
134#[doc(hidden)]
135pub mod hostcall_s3_fifo;
136#[doc(hidden)]
137pub mod hostcall_superinstructions;
138#[doc(hidden)]
139pub mod hostcall_trace_jit;
140#[doc(hidden)]
141pub mod http;
142#[doc(hidden)]
143pub mod http_shim;
144#[cfg(feature = "tui")]
145#[doc(hidden)]
146pub mod interactive;
147#[doc(hidden)]
148pub mod keybindings;
149#[doc(hidden)]
150pub mod migrations;
151#[doc(hidden)]
152pub mod model;
153#[doc(hidden)]
154pub mod model_routing;
155#[doc(hidden)]
156pub mod model_selector;
157#[doc(hidden)]
158pub mod models;
159#[doc(hidden)]
160pub mod package_manager;
161#[doc(hidden)]
162pub mod perf_build;
163#[doc(hidden)]
164pub mod permissions;
165#[cfg(feature = "wasm-host")]
166#[doc(hidden)]
167pub mod pi_wasm;
168#[doc(hidden)]
169pub mod platform;
170#[doc(hidden)]
171pub mod provider;
172#[doc(hidden)]
173pub mod provider_metadata;
174#[doc(hidden)]
175pub mod providers;
176#[doc(hidden)]
177pub mod resource_governor;
178#[doc(hidden)]
179pub mod resources;
180#[doc(hidden)]
181pub mod rpc;
182#[doc(hidden)]
183pub mod scheduler;
184pub mod sdk;
185#[doc(hidden)]
186pub mod semantic_workspace_graph;
187#[doc(hidden)]
188pub mod session;
189#[doc(hidden)]
190pub mod session_index;
191#[doc(hidden)]
192pub mod session_metrics;
193#[cfg(feature = "tui")]
194#[doc(hidden)]
195pub mod session_picker;
196#[cfg(feature = "sqlite-sessions")]
197#[doc(hidden)]
198pub mod session_sqlite;
199#[doc(hidden)]
200pub mod session_store_v2;
201#[doc(hidden)]
202pub mod sse;
203#[doc(hidden)]
204pub mod swarm_activity_ledger;
205#[doc(hidden)]
206pub mod swarm_flight_recorder;
207#[doc(hidden)]
208pub mod swarm_progress_slo;
209#[doc(hidden)]
210pub mod swarm_replay;
211#[doc(hidden)]
212pub mod terminal_images;
213#[doc(hidden)]
214pub mod theme;
215#[doc(hidden)]
216pub mod tools;
217#[doc(hidden)]
218pub mod tui;
219#[doc(hidden)]
220pub mod validation_broker;
221#[doc(hidden)]
222pub mod vcr;
223#[doc(hidden)]
224pub mod version_check;
225
226pub use error::{Error, Result as PiResult};
227#[doc(hidden)]
228pub use extension_dispatcher::ExtensionDispatcher;
229
230// Conditional re-exports for fuzz harnesses.
231// These expose internal parsing functions that are normally private,
232// gated behind the `fuzzing` feature so they do not appear in the
233// public API during normal builds.
234#[cfg(feature = "fuzzing")]
235#[doc(hidden)]
236pub mod fuzz_exports {
237    //! Re-exports of internal parsing/deserialization functions for
238    //! `cargo-fuzz` / `libFuzzer` harnesses.
239    //!
240    //! Enabled only when the `fuzzing` Cargo feature is active.
241    //! The `fuzz/Cargo.toml` depends on this crate with
242    //! `features = ["fuzzing"]`.
243
244    pub use crate::config::Config;
245    pub use crate::model::{
246        AssistantMessage, ContentBlock, Message, StreamEvent, TextContent, ThinkingContent,
247        ToolCall, ToolResultMessage, Usage, UserContent, UserMessage,
248    };
249    pub use crate::session::{Session, SessionEntry, SessionHeader, SessionMessage};
250    pub use crate::sse::{SseEvent, SseParser};
251    pub use crate::tools::{fuzz_normalize_dot_segments, fuzz_resolve_path};
252
253    // Provider stream processor wrappers for coverage-guided fuzzing.
254    pub use crate::providers::anthropic::fuzz::Processor as AnthropicProcessor;
255    pub use crate::providers::azure::fuzz::Processor as AzureProcessor;
256    pub use crate::providers::cohere::fuzz::Processor as CohereProcessor;
257    pub use crate::providers::gemini::fuzz::Processor as GeminiProcessor;
258    pub use crate::providers::openai::fuzz::Processor as OpenAIProcessor;
259    pub use crate::providers::openai_responses::fuzz::Processor as OpenAIResponsesProcessor;
260    pub use crate::providers::vertex::fuzz::Processor as VertexProcessor;
261}