aboutsummaryrefslogtreecommitdiffstats
path: root/lua/plugins/codecompanion.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/plugins/codecompanion.lua')
-rw-r--r--lua/plugins/codecompanion.lua104
1 files changed, 83 insertions, 21 deletions
diff --git a/lua/plugins/codecompanion.lua b/lua/plugins/codecompanion.lua
index 95edce8..e5f087f 100644
--- a/lua/plugins/codecompanion.lua
+++ b/lua/plugins/codecompanion.lua
@@ -1,3 +1,27 @@
+-- Choose default model from a list of preferred models. Fall back to first
+-- available.
+local function preferred_model_picker(preferred)
+ return function(self)
+ if self == nil then
+ -- Debug:render() calls Adapter.schema.model.default() but doesn't pass
+ -- in `self`. Just return an empty string in this case.
+ return ""
+ end
+
+ local choices = self.schema.model.choices(self)
+
+ for _, best in ipairs(preferred) do
+ for _, choice in ipairs(choices) do
+ if choice:find(best, 1, true) then
+ return choice
+ end
+ end
+ end
+
+ return choices[1]
+ end
+end
+
local IS_DEV = false
return {
{
@@ -8,6 +32,23 @@ return {
"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"
@@ -28,7 +69,13 @@ return {
},
schema = {
model = {
- default = "tinyllama:1.1b",
+ default = preferred_model_picker {
+ "qwen2.5-coder:14b",
+ "qwen2.5-coder:7b",
+ "qwen2.5-coder:3b",
+ "qwen2.5-coder:1.5b",
+ "qwen2.5-coder:0.5b",
+ },
},
},
})
@@ -49,7 +96,7 @@ return {
return require("codecompanion.adapters").extend("copilot", {
schema = {
model = {
- default = "o3-mini"
+ default = "gpt-4.1",
},
},
})
@@ -111,9 +158,9 @@ return {
},
schema = {
model = {
- default = "deepseek-chat"
- }
- }
+ default = "deepseek-chat",
+ },
+ },
})
end,
-- deepseek = function()
@@ -135,24 +182,28 @@ return {
-- },
-- })
-- 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",
+ 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",
},
- },
- })
- end,
+ schema = {
+ model = {
+ default = "DeepSeek-R1-nphob",
+ },
+ },
+ })
+ end,
+ },
+ display = {
+ diff = {
+ provider = "mini_diff",
+ },
},
-
strategies = {
chat = {
- adapter = "deepseek",
+ adapter = "copilot",
-- roles = { llm = " Copilot Chat", user = "IT Man" },
},
inline = { adapter = "copilot" },
@@ -161,9 +212,20 @@ return {
},
config = function(_, options)
require("codecompanion").setup(options)
-
+ require("codecompanion").setup {
+ 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 spinner = require "spinner"
local group = vim.api.nvim_create_augroup("CodeCompanionHooks", {})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "CodeCompanionRequest*",