Skip to main content

vtcode_acp/
lib.rs

1#![allow(
2    missing_docs,
3    dead_code,
4    unused_imports,
5    reason = "Intentional compatibility, platform, or test-only suppression."
6)]
7//! ACP (Agent Communication Protocol) support for VT Code.
8//!
9//! Canonical surface is the SACP stdio agent in [`zed`] (`StandardAcpAdapter`,
10//! `ZedAcpAdapter`). The `capabilities`/`client`/`client_v2`/`session`/
11//! `messages`/`jsonrpc` modules are a legacy crate-internal HTTP stack and
12//! must not be extended for new protocol work.
13
14pub mod capabilities;
15pub(crate) mod client;
16pub(crate) mod client_v2;
17pub mod discovery;
18pub mod error;
19pub mod jsonrpc;
20pub mod messages;
21pub mod permissions;
22pub mod reports;
23pub mod session;
24pub mod tooling;
25mod tooling_provider;
26pub mod transport;
27pub mod workspace;
28mod zed;
29
30/// Compatibility facade re-exporting the upstream
31/// [`agent_client_protocol`](https://docs.rs/agent-client-protocol) schema types
32/// that the ACP bridge uses internally. The protocol schema types live under
33/// [`agent_client_protocol::schema::v1`]; the role/transport types are imported
34/// directly from the crate root.
35pub(crate) mod acp {
36    pub(crate) use agent_client_protocol::schema::ProtocolVersion;
37    pub(crate) use agent_client_protocol::schema::v1::*;
38}
39
40pub(crate) use capabilities::{
41    AgentCapabilities, AgentFeatures, AgentInfo as AgentInfoV2, AuthCredentials, AuthMethod, AuthRequirements,
42    AuthenticateParams, AuthenticateResult, ClientCapabilities, ClientInfo, FilesystemCapabilities, InitializeParams,
43    InitializeResult, PROTOCOL_VERSION, SUPPORTED_VERSIONS, TerminalCapabilities, ToolCapability, UiCapabilities,
44};
45pub(crate) use client_v2::{AcpClientV2, AcpClientV2Builder};
46pub(crate) use discovery::{AgentInfo, AgentRegistry};
47pub use error::{AcpError, AcpResult};
48pub(crate) use jsonrpc::{JSONRPC_VERSION, JsonRpcError, JsonRpcId, JsonRpcRequest, JsonRpcResponse};
49pub(crate) use session::{
50    AcpSession, ConversationTurn, PermissionOption, PromptContent, RequestPermissionParams, RequestPermissionResult,
51    SessionCancelParams, SessionLoadParams, SessionLoadResult, SessionNewParams, SessionNewResult, SessionPromptParams,
52    SessionPromptResult, SessionState, SessionUpdate, SessionUpdateNotification, ToolCallRecord, TurnStatus,
53};
54pub use transport::{StdioTransport, StdioTransportOptions};
55pub use zed::{StandardAcpAdapter, ZedAcpAdapter, lifecycle_schema_document};
56
57#[deprecated(since = "0.60.0", note = "Use AcpClientV2 for ACP protocol compliance")]
58pub(crate) use client::{AcpClient, AcpClientBuilder};
59#[deprecated(since = "0.60.0", note = "Use jsonrpc module types instead")]
60pub(crate) use messages::{AcpMessage, AcpRequest, AcpResponse};
61
62use std::sync::{Arc, OnceLock};
63
64/// Connection context handle for in-handler notification sending.
65///
66/// In ACP 1.0+ the agent emits session notifications by calling
67/// `cx.send_notification(...)` from inside a request handler. To preserve the
68/// original "send update from any method" flow, the bridge stores the active
69/// [`zed::connection::ConnectionHandle`] in a [`OnceLock`] for the lifetime of the connection.
70static ACP_CONNECTION: OnceLock<Arc<zed::connection::ConnectionHandle>> = OnceLock::new();
71
72/// Register the global ACP connection from the host protocol.
73///
74/// Returns `Err` with the provided connection if one has already been
75/// registered. Callers may drop the returned connection or reuse it as needed.
76pub(crate) fn register_acp_connection(
77    connection: Arc<zed::connection::ConnectionHandle>,
78) -> Result<(), Arc<zed::connection::ConnectionHandle>> {
79    ACP_CONNECTION.set(connection)
80}
81
82/// Retrieve the registered ACP connection, if available.
83pub fn acp_connection() -> Option<Arc<zed::connection::ConnectionHandle>> {
84    ACP_CONNECTION.get().cloned()
85}