feat: Add auto_approve_tool_permissions config allowing the confirm dialogs to be disabled in agentic mode (#2110)

Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
This commit is contained in:
Eli Oshinsky
2025-06-04 11:02:15 -04:00
committed by GitHub
parent c23ce02bbd
commit 16e041ff9a
8 changed files with 30 additions and 6 deletions

View File

@@ -364,6 +364,10 @@ _See [config.lua#L9](./lua/avante/config.lua) for the full config_
support_paste_from_clipboard = false,
minimize_diff = true, -- Whether to remove unchanged lines when applying a code block
enable_token_counting = true, -- Whether to enable token counting. Default to true.
auto_approve_tool_permissions = false, -- Default: show permission prompts for all tools
-- Examples:
-- auto_approve_tool_permissions = true, -- Auto-approve all tools (no prompts)
-- auto_approve_tool_permissions = {"bash", "replace_in_file"}, -- Auto-approve specific tools only
},
mappings = {
--- @class AvanteConflictMappings

View File

@@ -413,6 +413,8 @@ M._defaults = {
enable_token_counting = true,
use_cwd_as_project_root = false,
auto_focus_on_diff_view = false,
---@type boolean | string[] -- true: auto-approve all tools, false: normal prompts, string[]: auto-approve specific tools by name
auto_approve_tool_permissions = false, -- Default: show permission prompts for all tools
},
history = {
max_tokens = 4096,

View File

@@ -246,7 +246,8 @@ function M.func(opts, on_log, on_complete, session_ctx)
end, abs_path)
end,
{ focus = true },
session_ctx
session_ctx,
M.name -- Pass the tool name for permission checking
)
end

View File

@@ -75,7 +75,7 @@ function M.func(opts, on_log, on_complete, session_ctx)
vim.cmd("noautocmd write")
vim.api.nvim_set_current_win(current_winid)
on_complete(true, nil)
end, { focus = true }, session_ctx)
end, { focus = true }, session_ctx, M.name)
end
return M

View File

@@ -23,12 +23,29 @@ end
---@param callback fun(yes: boolean, reason?: string)
---@param confirm_opts? { focus?: boolean }
---@param session_ctx? table
---@param tool_name? string -- Optional tool name to check against tool_permissions config
---@return avante.ui.Confirm | nil
function M.confirm(message, callback, confirm_opts, session_ctx)
function M.confirm(message, callback, confirm_opts, session_ctx, tool_name)
if session_ctx and session_ctx.always_yes then
callback(true)
return
end
-- Check behaviour.auto_approve_tool_permissions config for auto-approval
local Config = require("avante.config")
local auto_approve = Config.behaviour.auto_approve_tool_permissions
-- If auto_approve is true, auto-approve all tools
if auto_approve == true then
callback(true)
return
end
-- If auto_approve is a table (array of tool names), check if this tool is in the list
if type(auto_approve) == "table" and vim.tbl_contains(auto_approve, tool_name) then
callback(true)
return
end
local Confirm = require("avante.ui.confirm")
local sidebar = require("avante").get()
if not sidebar or not sidebar.input_container or not sidebar.input_container.winid then

View File

@@ -92,7 +92,7 @@ function M.func(opts, on_log, on_complete, session_ctx)
vim.api.nvim_buf_call(bufnr, function() vim.cmd("noautocmd write") end)
if session_ctx then Helpers.mark_as_not_viewed(opts.path, session_ctx) end
on_complete(true, nil)
end, { focus = true }, session_ctx)
end, { focus = true }, session_ctx, M.name)
end
return M

View File

@@ -695,7 +695,7 @@ function M.func(opts, on_log, on_complete, session_ctx)
vim.api.nvim_buf_call(bufnr, function() vim.cmd("noautocmd write") end)
if session_ctx then Helpers.mark_as_not_viewed(opts.path, session_ctx) end
on_complete(true, nil)
end, { focus = not Config.behaviour.auto_focus_on_diff_view }, session_ctx)
end, { focus = not Config.behaviour.auto_focus_on_diff_view }, session_ctx, M.name)
end
return M

View File

@@ -61,7 +61,7 @@ function M.func(opts, on_log, on_complete, session_ctx)
vim.api.nvim_buf_call(bufnr, function() vim.cmd("noautocmd write") end)
if session_ctx then Helpers.mark_as_not_viewed(opts.path, session_ctx) end
on_complete(true, nil)
end, { focus = true }, session_ctx)
end, { focus = true }, session_ctx, M.name)
end
return M