feat: Allow inline buttons and popup confirmation for both ACP and normal Providers (#2760)

Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
This commit is contained in:
Carlos Gomes
2025-10-15 12:08:51 +02:00
committed by GitHub
parent 178b62a180
commit cecd0de6fc
9 changed files with 264 additions and 42 deletions

View File

@@ -1,5 +1,7 @@
local Utils = require("avante.utils")
local Path = require("plenary.path")
local Config = require("avante.config")
local ACPConfirmAdapter = require("avante.ui.acp_confirm_adapter")
local M = {}
@@ -19,9 +21,34 @@ function M.get_abs_path(rel_path)
return p
end
---@type avante.acp.PermissionOption[]
local default_permission_options = {
{ optionId = "allow_always", name = "Allow Always", kind = "allow_always" },
{ optionId = "allow_once", name = "Allow", kind = "allow_once" },
{ optionId = "reject_once", name = "Reject", kind = "reject_once" },
}
---@param callback fun(option_id: string)
---@param confirm_opts avante.ui.ConfirmOptions
function M.confirm_inline(callback, confirm_opts)
local sidebar = require("avante").get()
local items =
ACPConfirmAdapter.generate_buttons_for_acp_options(confirm_opts.permission_options or default_permission_options)
sidebar.permission_button_options = items
sidebar.permission_handler = function(id)
callback(id)
sidebar.scroll = true
sidebar.permission_button_options = nil
sidebar.permission_handler = nil
sidebar._history_cache_invalidated = true
sidebar:update_content("")
end
end
---@param message string
---@param callback fun(yes: boolean, reason?: string)
---@param confirm_opts? { focus?: boolean }
---@param callback fun(response: boolean, reason?: string)
---@param confirm_opts? avante.ui.ConfirmOptions
---@param session_ctx? table
---@param tool_name? string -- Optional tool name to check against tool_permissions config
---@return avante.ui.Confirm | nil
@@ -32,7 +59,6 @@ function M.confirm(message, callback, confirm_opts, session_ctx, tool_name)
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
@@ -46,6 +72,20 @@ function M.confirm(message, callback, confirm_opts, session_ctx, tool_name)
callback(true)
return
end
if Config.behaviour.confirmation_ui_style == "inline_buttons" then
M.confirm_inline(function(option_id)
if option_id == "allow" or option_id == "allow_once" or option_id == "allow_always" then
if option_id == "allow_always" and session_ctx then session_ctx.always_yes = true end
callback(true)
else
callback(false, option_id)
end
end, confirm_opts or {})
return
end
local Confirm = require("avante.ui.confirm")
local sidebar = require("avante").get()
if not sidebar or not sidebar.containers.input or not sidebar.containers.input.winid then