# Package: dirigent_acp_api ACP Server implementation for accepting incoming ACP connections from external agents. ## Quick Facts - **Type**: Library - **Main Entry**: src/lib.rs - **Dependencies**: axum, tokio, serde, tracing, uuid, async-trait, dirigent_protocol - **Status**: Core structure complete, integration with CoreRuntime pending ## Overview The `dirigent_acp_api` package implements an ACP (Agent-Client Protocol) server that allows Dirigent to accept incoming connections from external ACP clients like Claude Code or custom agents. This enables session sharing, remote orchestration, and multi-client collaboration. ## Architecture ### Core Components - **config.rs** - Server configuration types (`AcpServerConfig`) - **error.rs** - Error types (`AcpServerError`, `JsonRpcErrorObject`) - **jsonrpc.rs** - JSON-RPC 2.0 types and parsing - **rpc.rs** - RPC handler and method dispatch - **session_manager.rs** - Session/client tracking (TODO) - **sse.rs** - SSE notification system (TODO) - **event_bridge.rs** - Event translation (TODO) ### Key Types ```rust pub struct AcpServerConfig { pub enabled: bool, // Enable/disable server pub port: u16, // Listen port (default: 3001) pub allowed_origins: Option>, // CORS origins pub max_connections: usize, // Connection limit (default: 100) } ``` ### ConnectorOperations Trait The RPC handler uses a trait abstraction to avoid circular dependencies with dirigent_core: ```rust #[async_trait] pub trait ConnectorOperations: Send + Sync { async fn create_session(&self, connector_id: &str) -> Result; async fn load_session(&self, connector_id: &str, session_id: &str) -> Result; async fn send_prompt(&self, connector_id: &str, session_id: &str, prompt: &str) -> Result; // ... more methods } ``` ## API Endpoints ### POST `/rpc` JSON-RPC 2.0 endpoint supporting: - `initialize` - Client handshake - `session/new` - Create session - `session/load` - Load existing session - `session/prompt` - Send prompt - `session/cancel` - Cancel generation - `session/close` - Close session ### GET `/events` Server-Sent Events for streaming notifications: - `acp/messageChunk` - Streaming content - `acp/messageComplete` - Generation complete - `acp/sessionIdle` - Ready for input ### GET `/health` Health check endpoint. ## Configuration UI The ACP Server is configured via the web UI at **Configuration > ACP Server**: - Enable/disable toggle - Port configuration - Max connections limit - Allowed origins (CORS) - Default connector selection - Connected clients management Server functions in `crates/api/src/acp_server.rs` bridge the UI and this package. ## Implementation Status **Completed:** - Configuration types (`AcpServerConfig`) - Error types (`AcpServerError`) - JSON-RPC types and parsing - RPC handler structure with ConnectorOperations trait **Pending:** - Session Manager implementation - SSE Notifier implementation - Event Bridge implementation - Axum router integration - Web server integration ## Key Files | File | Description | |------|-------------| | `src/lib.rs` | Module exports and router creation | | `src/config.rs` | AcpServerConfig with validation | | `src/error.rs` | Error types and codes | | `src/jsonrpc.rs` | JSON-RPC 2.0 implementation | | `src/rpc.rs` | RPC handler and method dispatch | ## Related Packages - **dirigent_core** - Provides CoreHandle implementation of ConnectorOperations - **dirigent_protocol** - Shared event and message types - **api** - Server functions for UI configuration - **web** - Configuration UI components ## Documentation - **Architecture**: `docs/architecture/acp_server.md` - **Configuration**: `docs/configuration/acp-connectors.md` - **Tasks**: `docs/building/07_acp_serve/02_acp_server_tasks.md`