From feef3f67b5f3ae61b2db0e214406874af66db8d9 Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Thu, 4 Jun 2026 14:30:56 -0600 Subject: [PATCH] style: miscellaneous cleanup --- src/config/install_remote.rs | 22 +++++++++++++++++++++- src/vault/utils.rs | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/config/install_remote.rs b/src/config/install_remote.rs index 61981b0..0606f50 100644 --- a/src/config/install_remote.rs +++ b/src/config/install_remote.rs @@ -5,7 +5,7 @@ use crate::mcp::{McpServer, McpServersConfig}; use crate::utils; use crate::utils::IS_STDOUT_TERMINAL; use crate::vault::{Vault, create_vault_password_file, interpolate_secrets}; -use anyhow::{Context, Result, bail}; +use anyhow::{Context, Result, anyhow, bail}; use indexmap::IndexMap; use indoc::formatdoc; use inquire::{Confirm, Select}; @@ -418,6 +418,26 @@ fn plan_dir_into( let rel = src .strip_prefix(src_dir) .expect("walk_files only returns paths under src_dir"); + + if category == TopCategory::Skills { + let skill_name = rel + .components() + .next() + .and_then(|c| c.as_os_str().to_str()) + .ok_or_else(|| { + anyhow!( + "remote skill bundle has unparseable path component: {}", + rel.display() + ) + })?; + paths::validate_skill_name(skill_name).with_context(|| { + format!( + "remote skill '{skill_name}' has an invalid name \ + (skill names must contain only ASCII alphanumerics, '-', or '_')" + ) + })?; + } + let dst = dst_dir.join(rel); let kind = classify_file(&src, &dst)?; out.push(PlannedFile { diff --git a/src/vault/utils.rs b/src/vault/utils.rs index f5aafe1..1463689 100644 --- a/src/vault/utils.rs +++ b/src/vault/utils.rs @@ -15,6 +15,7 @@ use inquire::validator::Validation; use inquire::{Confirm, Password, PasswordDisplayMode, Select, Text, min_length, required}; use std::path::{Path, PathBuf}; use std::process::Command; +use log::debug; pub fn ensure_password_file_initialized(local_provider: &mut LocalProvider) -> Result<()> { let vault_password_file = local_provider