Skip to main content

vtcode_acp/
lib.rs

1//! ACP (Agent Communication Protocol) support for VT Code.
2//!
3//! This crate exposes both the ACP client library and the VT Code Zed bridge.
4//! Downstream crates should treat this as the canonical ACP entrypoint.
5
6pub mod capabilities;
7pub mod client;
8pub mod client_v2;
9pub mod discovery;
10pub mod error;
11pub mod jsonrpc;
12pub mod messages;
13pub mod permissions;
14pub mod reports;
15pub mod session;
16pub mod tooling;
17mod tooling_provider;
18pub mod transport;
19pub mod workspace;
20mod zed;
21
22pub(crate) mod acp {
23    pub(crate) use agent_client_protocol::*;
24}
25
26pub use capabilities::{
27    AgentCapabilities, AgentFeatures, AgentInfo as AgentInfoV2, AuthCredentials, AuthMethod,
28    AuthRequirements, AuthenticateParams, AuthenticateResult, ClientCapabilities, ClientInfo,
29    FilesystemCapabilities, InitializeParams, InitializeResult, PROTOCOL_VERSION,
30    SUPPORTED_VERSIONS, TerminalCapabilities, ToolCapability, UiCapabilities,
31};
32pub use client_v2::{AcpClientV2, AcpClientV2Builder};
33pub use discovery::{AgentInfo, AgentRegistry};
34pub use error::{AcpError, AcpResult};
35pub use jsonrpc::{JSONRPC_VERSION, JsonRpcError, JsonRpcId, JsonRpcRequest, JsonRpcResponse};
36pub use session::{
37    AcpSession, ConversationTurn, PermissionOption, PromptContent, RequestPermissionParams,
38    RequestPermissionResult, SessionCancelParams, SessionLoadParams, SessionLoadResult,
39    SessionNewParams, SessionNewResult, SessionPromptParams, SessionPromptResult, SessionState,
40    SessionUpdate, SessionUpdateNotification, ToolCallRecord, TurnStatus,
41};
42pub use transport::{StdioTransport, StdioTransportOptions};
43pub use zed::{StandardAcpAdapter, ZedAcpAdapter};
44
45#[deprecated(since = "0.60.0", note = "Use AcpClientV2 for ACP protocol compliance")]
46pub use client::{AcpClient, AcpClientBuilder};
47#[deprecated(since = "0.60.0", note = "Use jsonrpc module types instead")]
48pub use messages::{AcpMessage, AcpRequest, AcpResponse};
49
50use std::sync::{Arc, OnceLock};
51
52static ACP_CONNECTION: OnceLock<Arc<acp::AgentSideConnection>> = OnceLock::new();
53
54/// Register the global ACP connection from the host protocol.
55///
56/// Returns `Err` with the provided connection if one has already been
57/// registered. Callers may drop the returned connection or reuse it as needed.
58pub fn register_acp_connection(
59    connection: Arc<acp::AgentSideConnection>,
60) -> Result<(), Arc<acp::AgentSideConnection>> {
61    ACP_CONNECTION.set(connection)
62}
63
64/// Retrieve the registered ACP connection, if available.
65pub fn acp_connection() -> Option<Arc<acp::AgentSideConnection>> {
66    ACP_CONNECTION.get().cloned()
67}