use std::path::PathBuf;
#[derive(Debug, thiserror::Error)]
pub enum PluginError {
#[error("invalid plugin manifest: {0}")]
InvalidManifest(String),
#[error("invalid plugin name {name:?}: {reason}")]
InvalidName { name: String, reason: String },
#[error(
"plugin MCP server {id:?} spawns command {command:?}, which is not in mcp.allowed_commands"
)]
DisallowedMcpCommand { id: String, command: String },
#[error("plugin skill {name:?} conflicts with an existing managed skill")]
SkillNameConflictWithManaged { name: String },
#[error("plugin skill {name:?} conflicts with a bundled skill")]
SkillNameConflictWithBundled { name: String },
#[error("plugin skill {name:?} conflicts with skill from plugin {plugin:?}")]
SkillNameConflictWithPlugin { name: String, plugin: String },
#[error(
"plugin config overlay key {key:?} is not allowed; only tools.blocked_commands, tools.allowed_commands, and skills.disambiguation_threshold may be overridden"
)]
UnsafeOverlay { key: String },
#[error("plugin skill entry at {path:?} does not contain a SKILL.md file")]
SkillEntryMissing { path: PathBuf },
#[error("plugin not found: {name}")]
NotFound { name: String },
#[error("invalid plugin source {path:?}: {reason}")]
InvalidSource { path: String, reason: String },
#[error("filesystem error at {path}: {source}")]
Io {
path: PathBuf,
#[source]
source: std::io::Error,
},
#[error("TOML error: {0}")]
Toml(#[from] toml::de::Error),
#[error("TOML serialization error: {0}")]
TomlSer(#[from] toml::ser::Error),
}