Detailed changes
@@ -1414,7 +1414,7 @@ impl Thread {
for tool_use in pending_tool_uses.iter() {
if let Some(tool) = self.tools.tool(&tool_use.name, cx) {
- if tool.needs_confirmation()
+ if tool.needs_confirmation(&tool_use.input, cx)
&& !AssistantSettings::get_global(cx).always_allow_tool_actions
{
self.tool_use.confirm_tool_use(
@@ -201,7 +201,7 @@ impl ToolUseState {
let (icon, needs_confirmation) = if let Some(tool) = self.tools.tool(&tool_use.name, cx)
{
- (tool.icon(), tool.needs_confirmation())
+ (tool.icon(), tool.needs_confirmation(&tool_use.input, cx))
} else {
(IconName::Cog, false)
};
@@ -48,7 +48,7 @@ pub trait Tool: 'static + Send + Sync {
/// Returns true iff the tool needs the users's confirmation
/// before having permission to run.
- fn needs_confirmation(&self) -> bool;
+ fn needs_confirmation(&self, input: &serde_json::Value, cx: &App) -> bool;
/// Returns the JSON schema that describes the tool's input.
fn input_schema(&self, _: LanguageModelToolSchemaFormat) -> serde_json::Value {
@@ -29,7 +29,7 @@ impl Tool for BashTool {
"bash".to_string()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
true
}
@@ -151,8 +151,17 @@ impl Tool for BatchTool {
"batch_tool".into()
}
- fn needs_confirmation(&self) -> bool {
- true
+ fn needs_confirmation(&self, input: &serde_json::Value, cx: &App) -> bool {
+ serde_json::from_value::<BatchToolInput>(input.clone())
+ .map(|input| {
+ let working_set = ToolWorkingSet::default();
+ input.invocations.iter().any(|invocation| {
+ working_set
+ .tool(&invocation.name, cx)
+ .map_or(false, |tool| tool.needs_confirmation(&invocation.input, cx))
+ })
+ })
+ .unwrap_or(false)
}
fn description(&self) -> String {
@@ -79,7 +79,7 @@ impl Tool for CodeSymbolsTool {
"code_symbols".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -43,7 +43,7 @@ impl Tool for CopyPathTool {
"copy_path".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
true
}
@@ -33,7 +33,7 @@ impl Tool for CreateDirectoryTool {
"create_directory".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
true
}
@@ -40,7 +40,7 @@ impl Tool for CreateFileTool {
"create_file".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -33,7 +33,7 @@ impl Tool for DeletePathTool {
"delete_path".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
true
}
@@ -46,7 +46,7 @@ impl Tool for DiagnosticsTool {
"diagnostics".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -116,7 +116,7 @@ impl Tool for FetchTool {
"fetch".to_string()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
true
}
@@ -129,7 +129,7 @@ impl Tool for FindReplaceFileTool {
"find_replace_file".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -44,7 +44,7 @@ impl Tool for ListDirectoryTool {
"list_directory".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -42,7 +42,7 @@ impl Tool for MovePathTool {
"move_path".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
true
}
@@ -33,7 +33,7 @@ impl Tool for NowTool {
"now".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -23,7 +23,7 @@ impl Tool for OpenTool {
"open".to_string()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
true
}
@@ -41,7 +41,7 @@ impl Tool for PathSearchTool {
"path_search".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -51,7 +51,7 @@ impl Tool for ReadFileTool {
"read_file".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -44,7 +44,7 @@ impl Tool for RegexSearchTool {
"regex_search".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -72,7 +72,7 @@ impl Tool for SymbolInfoTool {
"symbol_info".into()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -24,7 +24,7 @@ impl Tool for ThinkingTool {
"thinking".to_string()
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
false
}
@@ -49,7 +49,7 @@ impl Tool for ContextServerTool {
}
}
- fn needs_confirmation(&self) -> bool {
+ fn needs_confirmation(&self, _: &serde_json::Value, _: &App) -> bool {
true
}