#[cfg(feature = "acp-http")]
pub mod auth;
#[cfg(feature = "acp-http")]
pub mod discovery;
pub mod http;
pub mod router;
pub mod stdio;
pub mod ws;
#[cfg(test)]
mod tests;
pub use stdio::{serve_connection, serve_stdio};
#[cfg(feature = "acp-http")]
pub use http::AcpHttpState;
#[cfg(feature = "acp-http")]
pub use router::acp_router;
#[derive(Clone, Debug)]
pub struct ReadyNotification {
pub version: String,
pub pid: u32,
pub log_file: Option<String>,
}
pub type SharedAvailableModels = std::sync::Arc<parking_lot::RwLock<Vec<String>>>;
pub struct AcpServerConfig {
pub agent_name: String,
pub agent_version: String,
pub max_sessions: usize,
pub session_idle_timeout_secs: u64,
pub permission_file: Option<std::path::PathBuf>,
pub provider_factory: Option<crate::agent::ProviderFactory>,
pub available_models: SharedAvailableModels,
pub mcp_manager: Option<std::sync::Arc<zeph_mcp::McpManager>>,
pub auth_bearer_token: Option<String>,
pub discovery_enabled: bool,
pub terminal_timeout_secs: u64,
pub project_rules: Vec<std::path::PathBuf>,
pub title_max_chars: usize,
pub max_history: usize,
pub sqlite_path: Option<String>,
pub ready_notification: Option<ReadyNotification>,
pub additional_directories: Vec<zeph_core::config::AdditionalDir>,
pub auth_methods: Vec<zeph_core::config::AcpAuthMethod>,
pub message_ids_enabled: bool,
}
impl Clone for AcpServerConfig {
fn clone(&self) -> Self {
Self {
agent_name: self.agent_name.clone(),
agent_version: self.agent_version.clone(),
max_sessions: self.max_sessions,
session_idle_timeout_secs: self.session_idle_timeout_secs,
permission_file: self.permission_file.clone(),
provider_factory: self.provider_factory.clone(),
available_models: self.available_models.clone(),
mcp_manager: self.mcp_manager.clone(),
auth_bearer_token: self.auth_bearer_token.clone(),
discovery_enabled: self.discovery_enabled,
terminal_timeout_secs: self.terminal_timeout_secs,
project_rules: self.project_rules.clone(),
title_max_chars: self.title_max_chars,
max_history: self.max_history,
sqlite_path: self.sqlite_path.clone(),
ready_notification: self.ready_notification.clone(),
additional_directories: self.additional_directories.clone(),
auth_methods: self.auth_methods.clone(),
message_ids_enabled: self.message_ids_enabled,
}
}
}
impl Default for AcpServerConfig {
fn default() -> Self {
Self {
agent_name: String::new(),
agent_version: String::new(),
max_sessions: 4,
session_idle_timeout_secs: 1800,
permission_file: None,
provider_factory: None,
available_models: std::sync::Arc::new(parking_lot::RwLock::new(Vec::new())),
mcp_manager: None,
auth_bearer_token: None,
discovery_enabled: true,
terminal_timeout_secs: 120,
project_rules: Vec::new(),
title_max_chars: 60,
max_history: 100,
sqlite_path: None,
ready_notification: None,
additional_directories: Vec::new(),
auth_methods: vec![zeph_core::config::AcpAuthMethod::Agent],
message_ids_enabled: true,
}
}
}