1use std::path::PathBuf;
7
8#[derive(Debug, thiserror::Error)]
10pub enum PluginError {
11 #[error("invalid plugin manifest: {0}")]
13 InvalidManifest(String),
14
15 #[error("invalid plugin name {name:?}: {reason}")]
17 InvalidName { name: String, reason: String },
18
19 #[error(
21 "plugin MCP server {id:?} spawns command {command:?}, which is not in mcp.allowed_commands"
22 )]
23 DisallowedMcpCommand { id: String, command: String },
24
25 #[error("plugin skill {name:?} conflicts with an existing managed skill")]
27 SkillNameConflictWithManaged { name: String },
28
29 #[error("plugin skill {name:?} conflicts with a bundled skill")]
31 SkillNameConflictWithBundled { name: String },
32
33 #[error("plugin skill {name:?} conflicts with skill from plugin {plugin:?}")]
35 SkillNameConflictWithPlugin { name: String, plugin: String },
36
37 #[error(
39 "plugin config overlay key {key:?} is not allowed; only tools.blocked_commands, tools.allowed_commands, and skills.disambiguation_threshold may be overridden"
40 )]
41 UnsafeOverlay { key: String },
42
43 #[error("plugin skill entry at {path:?} does not contain a SKILL.md file")]
45 SkillEntryMissing { path: PathBuf },
46
47 #[error("plugin not found: {name}")]
49 NotFound { name: String },
50
51 #[error("invalid plugin source {path:?}: {reason}")]
53 InvalidSource { path: String, reason: String },
54
55 #[error("filesystem error at {path}: {source}")]
57 Io {
58 path: PathBuf,
59 #[source]
60 source: std::io::Error,
61 },
62
63 #[error("TOML error: {0}")]
65 Toml(#[from] toml::de::Error),
66
67 #[error("TOML serialization error: {0}")]
69 TomlSer(#[from] toml::ser::Error),
70}