3.8 KiB
3.8 KiB
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
pub struct AcpServerConfig {
pub enabled: bool, // Enable/disable server
pub port: u16, // Listen port (default: 3001)
pub allowed_origins: Option<Vec<String>>, // 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:
#[async_trait]
pub trait ConnectorOperations: Send + Sync {
async fn create_session(&self, connector_id: &str) -> Result<String>;
async fn load_session(&self, connector_id: &str, session_id: &str) -> Result<Session>;
async fn send_prompt(&self, connector_id: &str, session_id: &str, prompt: &str) -> Result<String>;
// ... more methods
}
API Endpoints
POST /rpc
JSON-RPC 2.0 endpoint supporting:
initialize- Client handshakesession/new- Create sessionsession/load- Load existing sessionsession/prompt- Send promptsession/cancel- Cancel generationsession/close- Close session
GET /events
Server-Sent Events for streaming notifications:
acp/messageChunk- Streaming contentacp/messageComplete- Generation completeacp/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