mirror of
https://github.com/instructkr/claude-code.git
synced 2026-06-04 11:36:44 +00:00
fix: default to workspace-write permissions
This commit is contained in:
@@ -514,7 +514,7 @@ pub fn mvp_tool_specs() -> Vec<ToolSpec> {
|
||||
"required": ["url", "prompt"],
|
||||
"additionalProperties": false
|
||||
}),
|
||||
required_permission: PermissionMode::ReadOnly,
|
||||
required_permission: PermissionMode::DangerFullAccess,
|
||||
},
|
||||
ToolSpec {
|
||||
name: "WebSearch",
|
||||
@@ -535,7 +535,7 @@ pub fn mvp_tool_specs() -> Vec<ToolSpec> {
|
||||
"required": ["query"],
|
||||
"additionalProperties": false
|
||||
}),
|
||||
required_permission: PermissionMode::ReadOnly,
|
||||
required_permission: PermissionMode::DangerFullAccess,
|
||||
},
|
||||
ToolSpec {
|
||||
name: "TodoWrite",
|
||||
@@ -1321,8 +1321,26 @@ fn execute_tool_with_enforcer(
|
||||
maybe_enforce_permission_check_with_mode(enforcer, name, input, required_mode)?;
|
||||
run_grep_search(grep_input)
|
||||
}
|
||||
"WebFetch" => from_value::<WebFetchInput>(input).and_then(run_web_fetch),
|
||||
"WebSearch" => from_value::<WebSearchInput>(input).and_then(run_web_search),
|
||||
"WebFetch" => {
|
||||
let web_input = from_value::<WebFetchInput>(input)?;
|
||||
maybe_enforce_permission_check_with_mode(
|
||||
enforcer,
|
||||
name,
|
||||
input,
|
||||
PermissionMode::DangerFullAccess,
|
||||
)?;
|
||||
run_web_fetch(web_input)
|
||||
}
|
||||
"WebSearch" => {
|
||||
let web_input = from_value::<WebSearchInput>(input)?;
|
||||
maybe_enforce_permission_check_with_mode(
|
||||
enforcer,
|
||||
name,
|
||||
input,
|
||||
PermissionMode::DangerFullAccess,
|
||||
)?;
|
||||
run_web_search(web_input)
|
||||
}
|
||||
"TodoWrite" => from_value::<TodoWriteInput>(input).and_then(run_todo_write),
|
||||
"Skill" => from_value::<SkillInput>(input).and_then(run_skill),
|
||||
"Agent" => from_value::<AgentInput>(input).and_then(run_agent),
|
||||
@@ -10264,6 +10282,26 @@ printf 'pwsh:%s' "$1"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn given_workspace_write_enforcer_when_web_tools_then_denied() {
|
||||
let registry = workspace_write_registry();
|
||||
for (tool, input) in [
|
||||
(
|
||||
"WebFetch",
|
||||
json!({"url":"https://example.com", "prompt":"summarize"}),
|
||||
),
|
||||
("WebSearch", json!({"query":"rust language"})),
|
||||
] {
|
||||
let err = registry
|
||||
.execute(tool, &input)
|
||||
.expect_err("network tools should require explicit full access");
|
||||
assert!(
|
||||
err.contains("requires 'danger-full-access'"),
|
||||
"{tool} should require elevated mode: {err}"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn given_workspace_write_enforcer_when_bash_uses_shell_expansion_then_denied() {
|
||||
let registry = workspace_write_registry();
|
||||
|
||||
Reference in New Issue
Block a user