use std::path::PathBuf;
use thiserror::Error;
use crate::domain::{
agent_session::{AgentProcessId, AgentSessionId},
process::{AgentTool, ProcessKind},
value::{ProcessName, ProjectName},
};
#[derive(Debug, Error)]
pub enum ConfigError {
#[error("could not read config file {path}: {source}")]
Read {
path: PathBuf,
source: std::io::Error,
},
#[error("could not write config file {path}: {source}")]
Write {
path: PathBuf,
source: std::io::Error,
},
#[error("no config directory is available")]
NoConfigDir,
#[error("unsupported agent-session state version {0}")]
UnsupportedAgentSessionVersion(u8),
#[error("agent session '{0}' is not present in session state")]
AgentSessionNotFound(AgentSessionId),
#[error(
"agent session '{id}' belongs to {expected}, but received a lifecycle event from {reported}"
)]
AgentSessionProviderMismatch {
id: AgentSessionId,
expected: AgentTool,
reported: AgentTool,
},
#[error(
"agent session '{id}' belongs to process {expected:?}, but received a lifecycle event from process {reported}"
)]
AgentSessionProcessMismatch {
id: AgentSessionId,
expected: Option<AgentProcessId>,
reported: AgentProcessId,
},
#[error("agent session '{id}' is already owned by live process {owner}")]
AgentSessionAlreadyOwned {
id: AgentSessionId,
owner: AgentProcessId,
},
#[error(
"registered project '{name}' uses unsupported relative config path {path:?}; edit or remove it in projects.yml"
)]
RelativeProjectConfig {
name: ProjectName,
path: PathBuf,
},
#[error("could not parse config: {0}")]
Parse(#[from] serde_yaml_ng::Error),
#[error("{kind} process '{name}' configures stop, which is only valid for commands")]
InvalidStopPolicy {
kind: ProcessKind,
name: ProcessName,
},
}