Skip to main content

vtcode_acp_client/
lib.rs

1//! ACP (Agent Communication Protocol) client for inter-agent communication
2//!
3//! This module provides:
4//! - **V2 (Recommended)**: Full ACP protocol compliance with JSON-RPC 2.0
5//!   - Session lifecycle (initialize, session/new, session/prompt)
6//!   - Capability negotiation
7//!   - SSE streaming for real-time updates
8//! - **V1 (Legacy)**: HTTP-based communication with remote agents
9//!   - Agent discovery (online and offline)
10//!   - Request/response message handling
11//!
12//! # Quick Start (V2)
13//!
14//! ```rust,ignore
15//! use vtcode_acp_client::{AcpClientV2, ClientCapabilities};
16//!
17//! let client = AcpClientV2::new("http://agent.example.com")?;
18//!
19//! // Initialize connection and negotiate capabilities
20//! let init_result = client.initialize().await?;
21//!
22//! // Create a session
23//! let session = client.session_new(Default::default()).await?;
24//!
25//! // Send a prompt
26//! let response = client.session_prompt(SessionPromptParams {
27//!     session_id: session.session_id,
28//!     content: vec![PromptContent::text("Hello!")],
29//!     ..Default::default()
30//! }).await?;
31//! ```
32//!
33//! # Migration from V1
34//!
35//! The V1 `AcpClient` is deprecated and will be removed in a future version.
36//! Migrate to `AcpClientV2` for full ACP protocol compliance.
37
38// V2 modules (ACP compliant)
39pub mod capabilities;
40pub mod client_v2;
41pub mod jsonrpc;
42pub mod session;
43pub mod transport;
44
45// V1 modules (legacy, deprecated)
46pub mod client;
47pub mod discovery;
48pub mod error;
49pub mod messages;
50
51// V2 exports (recommended)
52pub use capabilities::{
53    AgentCapabilities, AgentFeatures, AgentInfo as AgentInfoV2, AuthCredentials, AuthMethod,
54    AuthRequirements, AuthenticateParams, AuthenticateResult, ClientCapabilities, ClientInfo,
55    FilesystemCapabilities, InitializeParams, InitializeResult, PROTOCOL_VERSION,
56    SUPPORTED_VERSIONS, TerminalCapabilities, ToolCapability, UiCapabilities,
57};
58pub use client_v2::{AcpClientV2, AcpClientV2Builder};
59pub use jsonrpc::{JSONRPC_VERSION, JsonRpcError, JsonRpcId, JsonRpcRequest, JsonRpcResponse};
60pub use session::{
61    AcpSession, ConversationTurn, PermissionOption, PromptContent, RequestPermissionParams,
62    RequestPermissionResult, SessionCancelParams, SessionLoadParams, SessionLoadResult,
63    SessionNewParams, SessionNewResult, SessionPromptParams, SessionPromptResult, SessionState,
64    SessionUpdate, SessionUpdateNotification, ToolCallRecord, TurnStatus,
65};
66pub use transport::StdioTransport;
67
68// V1 exports (deprecated)
69#[deprecated(since = "0.60.0", note = "Use AcpClientV2 for ACP protocol compliance")]
70pub use client::{AcpClient, AcpClientBuilder};
71pub use discovery::{AgentInfo, AgentRegistry};
72pub use error::{AcpError, AcpResult};
73#[deprecated(since = "0.60.0", note = "Use jsonrpc module types instead")]
74pub use messages::{AcpMessage, AcpRequest, AcpResponse};
75
76use agent_client_protocol::AgentSideConnection;
77use std::sync::{Arc, OnceLock};
78
79static ACP_CONNECTION: OnceLock<Arc<AgentSideConnection>> = OnceLock::new();
80
81/// Register the global ACP connection from the host protocol.
82///
83/// Returns `Err` with the provided connection if one has already been
84/// registered. Callers may drop the returned connection or reuse it as needed.
85pub fn register_acp_connection(
86    connection: Arc<AgentSideConnection>,
87) -> Result<(), Arc<AgentSideConnection>> {
88    ACP_CONNECTION.set(connection)
89}
90
91/// Retrieve the registered ACP connection, if available.
92pub fn acp_connection() -> Option<Arc<AgentSideConnection>> {
93    ACP_CONNECTION.get().cloned()
94}