mirror of
https://github.com/instructkr/claude-code.git
synced 2026-05-06 14:10:52 +08:00
fix(permissions): return guidance for multi-word forms instead of falling through to LLM (#2994)
claw permissions list / claw permissions allow <tool> / claw permissions deny <tool> all fell through to the prompt/LLM path because parse_subcommand had no arm for "permissions". The single-word bare form was already intercepted by bare_slash_command_guidance, but any form with rest.len() > 1 bypassed the single-word guard and landed in the _other => CliAction::Prompt branch. Fix: add a "permissions" arm in parse_subcommand that returns a structured guidance Err so all multi-word forms get the same exit:1 + JSON error as the bare single-word form, without any LLM call or session creation. Verified: all invocation forms (bare, list, read-only, workspace-write, allow/deny <tool>) exit 1 with kind:unknown guidance JSON. Zero sessions.
This commit is contained in:
@@ -930,6 +930,14 @@ fn parse_args(args: &[String]) -> Result<CliAction, String> {
|
||||
}
|
||||
Ok(CliAction::Diff { output_format })
|
||||
}
|
||||
// `claw permissions <mode>` falls through to the LLM when called
|
||||
// with a subcommand argument because parse_single_word_command_alias
|
||||
// only intercepts the bare single-word form. Catch all multi-word
|
||||
// forms here and return a structured guidance error so no network
|
||||
// call or session is created.
|
||||
"permissions" => Err(format!(
|
||||
"`claw permissions` is a slash command. Start `claw` and run `/permissions` inside the REPL.\n Usage /permissions [read-only|workspace-write|danger-full-access]"
|
||||
)),
|
||||
"skills" => {
|
||||
let args = join_optional_args(&rest[1..]);
|
||||
match classify_skills_slash_command(args.as_deref()) {
|
||||
|
||||
Reference in New Issue
Block a user