diff --git a/lua/avante/config.lua b/lua/avante/config.lua index 1ab6529..7113632 100644 --- a/lua/avante/config.lua +++ b/lua/avante/config.lua @@ -17,6 +17,7 @@ local Utils = require("avante.utils") ---@class avante.CoreConfig: avante.Config local M = {} ---@class avante.Config +---@field custom_tools AvanteLLMToolPublic[] M._defaults = { debug = false, ---@alias Provider "claude" | "openai" | "azure" | "gemini" | "vertex" | "cohere" | "copilot" | string @@ -409,6 +410,8 @@ M._defaults = { throttle = 600, }, disabled_tools = {}, ---@type string[] + ---@type AvanteLLMToolPublic[] + custom_tools = {}, } ---@type avante.Config diff --git a/lua/avante/llm_tools.lua b/lua/avante/llm_tools.lua index 635de4d..9458396 100644 --- a/lua/avante/llm_tools.lua +++ b/lua/avante/llm_tools.lua @@ -573,8 +573,10 @@ end ---@return AvanteLLMTool[] function M.get_tools() + ---@type AvanteLLMTool[] + local unfiltered_tools = vim.list_extend(vim.list_extend({}, M._tools), Config.custom_tools) return vim - .iter(M._tools) + .iter(unfiltered_tools) :filter(function(tool) ---@param tool AvanteLLMTool -- Always disable tools that are explicitly disabled if vim.tbl_contains(Config.disabled_tools, tool.name) then return false end diff --git a/lua/avante/types.lua b/lua/avante/types.lua index fc214b4..a44eda1 100644 --- a/lua/avante/types.lua +++ b/lua/avante/types.lua @@ -328,18 +328,21 @@ vim.g.avante_login = vim.g.avante_login ---@field returns AvanteLLMToolReturn[] ---@field enabled? fun(): boolean +---@class AvanteLLMToolPublic : AvanteLLMTool +---@field func AvanteLLMToolFunc + ---@class AvanteLLMToolParam ----@field type string +---@field type 'table' ---@field fields AvanteLLMToolParamField[] ---@class AvanteLLMToolParamField ---@field name string ---@field description string ----@field type string +---@field type 'string' | 'integer' ---@field optional? boolean ---@class AvanteLLMToolReturn ---@field name string ---@field description string ----@field type string +---@field type 'string' | 'string[]' | 'boolean' ---@field optional? boolean