local IS_DEV = false return { { dir = IS_DEV and "~/Projects/research/codecompanion.nvim" or nil, "olimorris/codecompanion.nvim", dependencies = { "nvim-lua/plenary.nvim", "nvim-treesitter/nvim-treesitter", "ibhagwan/fzf-lua", -- For fzf provider, file or buffer picker "jellydn/spinner.nvim", -- Show loading spinner when request is started { "echasnovski/mini.diff", config = function() local diff = require "mini.diff" diff.setup { source = diff.gen_source.none() } end, }, { "ravitemer/mcphub.nvim", dependencies = { "nvim-lua/plenary.nvim", }, build = "npm install -g mcp-hub@latest", -- Installs `mcp-hub` node binary globally config = function() require("mcphub").setup() end, }, }, opts = { log_level = "TRACE", -- or "DEBUG" adapters = { http = { ollama = function() return require("codecompanion.adapters").extend("ollama", { name = "tinyllama", env = { url = "http://127.0.0.1:11434", -- api_key = "", }, headers = { ["Content-Type"] = "application/json", -- ["Authorization"] = "Bearer ${api_key}", }, parameters = { sync = true, }, schema = { model = { default = "qwen2.5-coder:0.5b", }, }, }) end, anthropic = function() return require("codecompanion.adapters").extend("anthropic", { env = { api_key = "cmd:echo $ANTHROPIC_API_KEY", }, schema = { model = { default = "claude-3-opus-20240229", }, }, }) end, copilot = function() return require("codecompanion.adapters").extend("copilot", { schema = { model = { default = "gpt-4.1", }, }, }) end, gemini = function() return require("codecompanion.adapters").extend("gemini", { env = { api_key = "cmd:op read op://personal/Gemini_API/credential --no-newline", }, }) end, openai = function() return require("codecompanion.adapters").extend("openai", { env = { api_key = "cmd:echo $OPENAI_API_KEY", chat_url = "/v1/chat/completions", url = "https://api.openai.com", }, schema = { model = { default = function() return "gpt-4o-mini" end, }, }, }) end, openai_compatible = function() return require("codecompanion.adapters").extend("openai_compatible", { env = { api_key = "cmd:echo $OPENAI_API_KEY", chat_url = "/v1/chat/completions", url = "http://127.0.0.1:8012", }, headers = { ["Content-Type"] = "application/json", }, schema = { model = { default = function() return "davinci" end, }, }, }) end, xai = function() return require("codecompanion.adapters").extend("xai", { env = { api_key = "cmd:op read op://personal/xAI_API/credential --no-newline", }, }) end, azure_openai = function() return require("codecompanion.adapters").extend("azure_openai", { env = { api_key = "cmd:echo $AZ_DS_API_KEY", endpoint = "https://DeepSeek-R1-nphob.eastus2.models.ai.azure.com", }, schema = { model = { default = "DeepSeek-R1-nphob", }, }, }) end, }, }, display = { diff = { provider = "mini_diff", }, }, strategies = { chat = { adapter = "copilot", -- roles = { llm = " Copilot Chat", user = "IT Man" }, }, inline = { adapter = "copilot" }, agent = { adapter = "copilot" }, cmd = { adapter = "copilot" }, }, }, config = function(_, options) require("codecompanion").setup(options) require("codecompanion").setup { opts = { language = "English", }, extensions = { mcphub = { callback = "mcphub.extensions.codecompanion", opts = { make_vars = true, make_slash_commands = true, show_result_in_chat = true, }, }, }, } -- Show loading spinner when request is started local spinner = require "spinner" local group = vim.api.nvim_create_augroup("CodeCompanionHooks", {}) vim.api.nvim_create_autocmd({ "User" }, { pattern = "CodeCompanionRequest*", group = group, callback = function(request) if request.match == "CodeCompanionRequestStarted" then spinner.show() end if request.match == "CodeCompanionRequestFinished" then spinner.hide() end end, }) end, }, }