use bamboo_agent_core::AgentError;
use bamboo_engine::session_app::errors::{RespondError, SessionLoadError, SessionSaveError};
#[derive(Debug, thiserror::Error)]
pub enum SdkError {
#[error(transparent)]
Agent(#[from] AgentError),
#[error("agent builder error: {0}")]
Build(String),
#[error("configuration error: {0}")]
Config(String),
#[error("provider initialization failed: {0}")]
ProviderInit(String),
#[error("session store initialization failed: {0}")]
StoreInit(String),
#[error("skill manager initialization failed: {0}")]
SkillInit(String),
#[error("MCP server '{server_id}' failed to start: {source}")]
McpServerStart {
server_id: String,
#[source]
source: bamboo_mcp::McpError,
},
#[error("session not found: {0}")]
SessionNotFound(String),
#[error("session load failed: {0}")]
SessionLoad(String),
#[error("session save failed: {0}")]
SessionSave(String),
#[error("no pending question waiting for response")]
NoPendingQuestion,
#[error("invalid response: {0}")]
InvalidResponse(String),
#[error("unsupported: {0}")]
Unsupported(String),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
}
impl From<SessionLoadError> for SdkError {
fn from(error: SessionLoadError) -> Self {
match error {
SessionLoadError::NotFound(id) => SdkError::SessionNotFound(id),
SessionLoadError::StorageError(message) => SdkError::SessionLoad(message),
}
}
}
impl From<SessionSaveError> for SdkError {
fn from(error: SessionSaveError) -> Self {
match error {
SessionSaveError::StorageError(message) => SdkError::SessionSave(message),
}
}
}
impl From<RespondError> for SdkError {
fn from(error: RespondError) -> Self {
match error {
RespondError::NotFound(id) => SdkError::SessionNotFound(id),
RespondError::LoadFailed(inner) => inner.into(),
RespondError::SaveFailed(inner) => inner.into(),
RespondError::NoPendingQuestion => SdkError::NoPendingQuestion,
RespondError::InvalidResponse(message) => SdkError::InvalidResponse(message),
}
}
}