Skip to main content

par_term_acp/
lib.rs

1//! par-term-acp: Agent Communication Protocol (ACP) implementation.
2//!
3//! This crate provides the core ACP protocol implementation for communicating
4//! with AI coding agents (Claude Code, Codex CLI, Gemini CLI, etc.) via JSON-RPC.
5//!
6//! # Architecture
7//!
8//! The crate is organized into several modules:
9//!
10//! - [`agent`] - Agent lifecycle management (spawn, handshake, message routing dispatch)
11//! - [`agents`] - Agent discovery and configuration loading
12//! - [`message_handler`] - Background async task that routes incoming JSON-RPC messages to the UI
13//! - [`protocol`] - ACP message types (initialize, session, permission, etc.)
14//! - [`jsonrpc`] - JSON-RPC 2.0 client implementation
15//! - [`fs_ops`] - Low-level filesystem operations (read, write, list, find)
16//! - [`fs_tools`] - RPC handler functions for `fs/*` tool calls from the agent
17//! - [`permissions`] - Permission request dispatch, auto-approval logic, `SafePaths`, and `is_safe_write_path`
18//! - [`session`] - Session-new parameter builders (MCP server descriptor, Claude wrapper metadata)
19//!
20//! # Example
21//!
22//! ```ignore
23//! use par_term_acp::{Agent, AgentConfig, AgentMessage, SafePaths, discover_agents};
24//! use tokio::sync::mpsc;
25//!
26//! // Discover available agents
27//! let agents = discover_agents(&config_dir);
28//! let config = agents.into_iter().next().unwrap();
29//!
30//! // Create agent manager
31//! let (tx, mut rx) = mpsc::unbounded_channel();
32//! let safe_paths = SafePaths {
33//!     config_dir: PathBuf::from("/path/to/config"),
34//!     shaders_dir: PathBuf::from("/path/to/shaders"),
35//! };
36//! let mut agent = Agent::new(config, tx, safe_paths, PathBuf::from("par-term"));
37//!
38//! // Connect and handle messages
39//! agent.connect("/working/dir", capabilities, &[]).await?;
40//! while let Some(msg) = rx.recv().await {
41//!     match msg {
42//!         AgentMessage::SessionUpdate(update) => { /* handle */ }
43//!         AgentMessage::PermissionRequest { .. } => { /* handle */ }
44//!         _ => {}
45//!     }
46//! }
47//! ```
48
49pub mod agent;
50pub mod agents;
51pub mod fs_ops;
52pub mod fs_tools;
53pub mod harness;
54pub mod jsonrpc;
55pub mod message_handler;
56pub mod permissions;
57pub mod protocol;
58pub mod session;
59
60// Re-export the main public types at the crate root for convenience
61pub use agent::{Agent, AgentMessage, AgentStatus};
62pub use agents::{AgentConfig, discover_agents};
63pub use jsonrpc::{IncomingMessage, JsonRpcClient, Request, Response, RpcError};
64pub use permissions::SafePaths;
65pub use protocol::{
66    ClientCapabilities, ClientInfo, ContentBlock, FsCapabilities, FsFindParams,
67    FsListDirectoryParams, FsReadParams, FsWriteParams, InitializeParams, InitializeResult,
68    PermissionOption, PermissionOutcome, RequestPermissionParams, RequestPermissionResponse,
69    SessionNewParams, SessionPromptParams, SessionResult, SessionUpdate, SessionUpdateParams,
70    ToolCallInfo, ToolCallUpdateInfo,
71};