diff --git a/README.md b/README.md index 9658c0b..bd7b584 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/lua/avante/config.lua b/lua/avante/config.lua index 16b6279..f42405f 100644 --- a/lua/avante/config.lua +++ b/lua/avante/config.lua @@ -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, diff --git a/lua/avante/llm_tools/bash.lua b/lua/avante/llm_tools/bash.lua index 5f52261..dfa5ff3 100644 --- a/lua/avante/llm_tools/bash.lua +++ b/lua/avante/llm_tools/bash.lua @@ -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 diff --git a/lua/avante/llm_tools/create.lua b/lua/avante/llm_tools/create.lua index 4c912ae..ec9e38c 100644 --- a/lua/avante/llm_tools/create.lua +++ b/lua/avante/llm_tools/create.lua @@ -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 diff --git a/lua/avante/llm_tools/helpers.lua b/lua/avante/llm_tools/helpers.lua index ef6cfe9..42632f1 100644 --- a/lua/avante/llm_tools/helpers.lua +++ b/lua/avante/llm_tools/helpers.lua @@ -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 diff --git a/lua/avante/llm_tools/insert.lua b/lua/avante/llm_tools/insert.lua index 1247a86..9f7d168 100644 --- a/lua/avante/llm_tools/insert.lua +++ b/lua/avante/llm_tools/insert.lua @@ -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 diff --git a/lua/avante/llm_tools/replace_in_file.lua b/lua/avante/llm_tools/replace_in_file.lua index efd4522..2c23960 100644 --- a/lua/avante/llm_tools/replace_in_file.lua +++ b/lua/avante/llm_tools/replace_in_file.lua @@ -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 diff --git a/lua/avante/llm_tools/undo_edit.lua b/lua/avante/llm_tools/undo_edit.lua index b4f2ed5..afaba1d 100644 --- a/lua/avante/llm_tools/undo_edit.lua +++ b/lua/avante/llm_tools/undo_edit.lua @@ -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