diff --git a/src/config/request_context.rs b/src/config/request_context.rs index cdd573d..8551bda 100644 --- a/src/config/request_context.rs +++ b/src/config/request_context.rs @@ -1928,6 +1928,15 @@ impl RequestContext { "skill", "agent-data", ]), + ".edit" => super::map_completion_values(vec![ + "config", + "mcp-config", + "role", + "session", + "rag-docs", + "agent-config", + "skill", + ]), ".vault" => { let mut values = vec!["add", "get", "update", "delete", "list"]; values.sort_unstable(); @@ -1938,6 +1947,8 @@ impl RequestContext { } _ => vec![], }; + } else if cmd == ".edit" && args.first() == Some(&"skill") && args.len() == 2 { + values = super::map_completion_values(paths::list_skills()); } else if cmd == ".install" && args.first() == Some(&"remote") && args.len() >= 2 { let prev = args.get(args.len() - 2).copied().unwrap_or(""); if prev == "--filter" { diff --git a/src/repl/mod.rs b/src/repl/mod.rs index a766a98..5623331 100644 --- a/src/repl/mod.rs +++ b/src/repl/mod.rs @@ -529,8 +529,8 @@ pub async fn run_repl_command( .skill loaded # List currently-loaded skills .skill load # Load a skill into the current context .skill unload # Unload a loaded skill - .skill edit # Open an existing skill in $EDITOR - .skill # Open the skill in $EDITOR; create with a scaffold if missing"# + .skill # Open the skill in $EDITOR; create with a scaffold if missing + # (Use `.edit skill ` to edit an existing skill without the create-if-missing behavior.)"# ), "loaded" => ctx.list_loaded_skills(), "load" => { @@ -547,19 +547,6 @@ pub async fn run_repl_command( ctx.unload_skill_repl(rest, abort_signal.clone()).await?; } } - "edit" => { - if rest.is_empty() { - println!("Usage: .skill edit "); - } else if !paths::has_skill(rest) { - bail!( - "Skill '{rest}' is not installed (expected at {})", - paths::skill_file(rest).display() - ); - } else { - let app = Arc::clone(&ctx.app.config); - ctx.upsert_skill(app.as_ref(), rest)?; - } - } name => { let app = Arc::clone(&ctx.app.config); ctx.upsert_skill(app.as_ref(), name)?; @@ -712,9 +699,23 @@ pub async fn run_repl_command( Some("mcp-config") => { ctx.edit_mcp_config()?; } + Some(s) if s == "skill" || s.starts_with("skill ") => { + let name = s.strip_prefix("skill").unwrap_or("").trim(); + if name.is_empty() { + println!("Usage: .edit skill "); + } else if !paths::has_skill(name) { + bail!( + "Skill '{name}' is not installed (expected at {})", + paths::skill_file(name).display() + ); + } else { + let app = Arc::clone(&ctx.app.config); + ctx.upsert_skill(app.as_ref(), name)?; + } + } _ => { println!( - r#"Usage: .edit "# + r#"Usage: .edit >"# ) } }