Hmbown/CodeWhale · error · anyhow::Error
plugin name is not a safe directory name: {error:#}
Error message
plugin name is not a safe directory name: {error:#} What it means
Error "plugin name is not a safe directory name: {error:#}" thrown in Hmbown/CodeWhale.
Source
Thrown at crates/tui/src/plugins/install/place.rs:125
fs::remove_dir_all(&backup).ok();
}
Ok(PluginInstallOutcome::Installed(InstalledPlugin {
name: staged.name,
path: final_path,
content_hash: staged.content_hash,
installed_content_hash,
source_checksum: source_checksum.to_string(),
}))
}
// ─────────────────────────────────────────────────────────────────────────────
// Path guards
// ─────────────────────────────────────────────────────────────────────────────
pub(super) fn plugin_target_path(name: &str, user_plugins_dir: &Path) -> Result<PathBuf> {
let name = validate_skill_name_segment(name)
.map_err(|error| anyhow::anyhow!("plugin name is not a safe directory name: {error:#}"))?;
Ok(user_plugins_dir.join(name))
}
/// The resolved bundle must be a direct child of the resolved plugins root,
/// matching discovery's fail-closed containment rule.
pub(super) fn ensure_target_within_plugins_dir(
target: &Path,
user_plugins_dir: &Path,
) -> Result<()> {
let root = fs::canonicalize(user_plugins_dir).with_context(|| {
format!(
"failed to resolve plugins directory {}",
user_plugins_dir.display()
)
})?;
let target = fs::canonicalize(target)
.with_context(|| format!("failed to resolve {}", target.display()))?;
if target.parent() != Some(root.as_path()) {View on GitHub (pinned to 8880682c63)
When it happens
Trigger: Thrown at crates/tui/src/plugins/install/place.rs:125 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16).
Data as JSON: /api/errors/6c8924608743a10e.
Report an issue: GitHub.