This commit is contained in:
2026-01-05 10:45:54 -06:00
parent 5e9ec0722c
commit 287e235788
2 changed files with 128 additions and 84 deletions

View File

@@ -9,10 +9,6 @@ return {
"j-hui/fidget.nvim", "j-hui/fidget.nvim",
-- For statusline integration -- For statusline integration
-- "nvim-lualine/lualine.nvim", -- "nvim-lualine/lualine.nvim",
{
"franco-ruggeri/codecompanion-lualine.nvim", -- Add this line
dependencies = { "olimorris/codecompanion.nvim" },
},
}, },
event = "VeryLazy", -- Lazy load the plugin event = "VeryLazy", -- Lazy load the plugin
config = function() config = function()
@@ -52,6 +48,18 @@ return {
}, },
}) })
end, end,
anthropic_haiku = function()
return require("codecompanion.adapters").extend("anthropic", {
env = {
api_key = "ANTHROPIC_API_KEY",
},
schema = {
model = {
default = "claude-haiku-4-5-20251001",
},
},
})
end,
}, },
}, },
-- Display settings for the chat window -- Display settings for the chat window
@@ -74,15 +82,15 @@ return {
-- Optional: Set up keymaps -- Optional: Set up keymaps
vim.api.nvim_set_keymap( vim.api.nvim_set_keymap(
"n", "n",
"<leader>cc", "<leader>cc",
"<cmd>CodeCompanionChat Toggle<cr>", "<cmd>CodeCompanionChat anthropic_haiku Toggle<cr>",
{ noremap = true, silent = true } { noremap = true, silent = true, desc = "Chat with Claude Haiku" }
) )
vim.api.nvim_set_keymap( vim.api.nvim_set_keymap(
"v", "v",
"<leader>cc", "<leader>cc",
"<cmd>CodeCompanionChat Toggle<cr>", "<cmd>CodeCompanionChat anthropic_haiku Toggle<cr>",
{ noremap = true, silent = true } { noremap = true, silent = true, desc = "Chat with Claude Haiku" }
) )
vim.api.nvim_set_keymap("n", "<leader>ca", "<cmd>CodeCompanionActions<cr>", { noremap = true, silent = true }) vim.api.nvim_set_keymap("n", "<leader>ca", "<cmd>CodeCompanionActions<cr>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("v", "<leader>ca", "<cmd>CodeCompanionActions<cr>", { noremap = true, silent = true }) vim.api.nvim_set_keymap("v", "<leader>ca", "<cmd>CodeCompanionActions<cr>", { noremap = true, silent = true })
@@ -110,6 +118,8 @@ return {
model_info = "Claude Sonnet (claude-sonnet-4-20250514)" model_info = "Claude Sonnet (claude-sonnet-4-20250514)"
elseif current_adapter == "anthropic_opus" then elseif current_adapter == "anthropic_opus" then
model_info = "Claude Opus (claude-opus-4-5-20251101)" model_info = "Claude Opus (claude-opus-4-5-20251101)"
elseif current_adapter == "anthropic_haiku" then
model_info = "Claude Haiku (claude-haiku-4-5-20251001)"
end end
vim.notify(string.format("Current CodeCompanion model: %s", model_info), vim.log.levels.INFO) vim.notify(string.format("Current CodeCompanion model: %s", model_info), vim.log.levels.INFO)
@@ -120,18 +130,19 @@ return {
vim.api.nvim_create_user_command("CodeCompanionSwitchModel", function(args) vim.api.nvim_create_user_command("CodeCompanionSwitchModel", function(args)
local model = args.args local model = args.args
if model == "" then if model == "" then
vim.notify("Available models: sonnet, opus", vim.log.levels.INFO) vim.notify("Available models: sonnet, opus, haiku", vim.log.levels.INFO)
return return
end end
local adapter_map = { local adapter_map = {
sonnet = "anthropic", sonnet = "anthropic",
opus = "anthropic_opus", opus = "anthropic_opus",
haiku = "anthropic_haiku",
} }
local adapter = adapter_map[model:lower()] local adapter = adapter_map[model:lower()]
if not adapter then if not adapter then
vim.notify("Invalid model. Use: sonnet, opus", vim.log.levels.ERROR) vim.notify("Invalid model. Use: sonnet, opus, haiku", vim.log.levels.ERROR)
return return
end end
@@ -146,11 +157,25 @@ return {
end, { end, {
nargs = 1, nargs = 1,
complete = function() complete = function()
return { "sonnet", "opus" } return { "sonnet", "opus", "haiku" }
end, end,
desc = "Switch CodeCompanion model (sonnet/opus)", desc = "Switch CodeCompanion model (sonnet/opus/haiku)",
}) })
-- Additional keymaps for Sonnet (backup primary)
vim.api.nvim_set_keymap(
"n",
"<leader>cs",
"<cmd>CodeCompanionChat anthropic Toggle<cr>",
{ noremap = true, silent = true, desc = "Chat with Claude Sonnet" }
)
vim.api.nvim_set_keymap(
"v",
"<leader>cs",
"<cmd>CodeCompanionChat anthropic Toggle<cr>",
{ noremap = true, silent = true, desc = "Chat with Claude Sonnet" }
)
-- Additional keymaps for Opus -- Additional keymaps for Opus
vim.api.nvim_set_keymap( vim.api.nvim_set_keymap(
"n", "n",
@@ -164,5 +189,19 @@ return {
"<cmd>CodeCompanionChat anthropic_opus Toggle<cr>", "<cmd>CodeCompanionChat anthropic_opus Toggle<cr>",
{ noremap = true, silent = true, desc = "Chat with Claude Opus" } { noremap = true, silent = true, desc = "Chat with Claude Opus" }
) )
-- Additional keymaps for Haiku
vim.api.nvim_set_keymap(
"n",
"<leader>ch",
"<cmd>CodeCompanionChat anthropic_haiku Toggle<cr>",
{ noremap = true, silent = true, desc = "Chat with Claude Haiku" }
)
vim.api.nvim_set_keymap(
"v",
"<leader>ch",
"<cmd>CodeCompanionChat anthropic_haiku Toggle<cr>",
{ noremap = true, silent = true, desc = "Chat with Claude Haiku" }
)
end, end,
} }

View File

@@ -67,74 +67,79 @@ return {
} }
-- Enhanced CodeCompanion status function with model display -- Enhanced CodeCompanion status function with model display
-- local function codecompanion_status() local function codecompanion_status()
-- local ok, codecompanion = pcall(require, "codecompanion") local ok, codecompanion = pcall(require, "codecompanion")
-- if not ok then if not ok then
-- return "" return ""
-- end end
--
-- -- Get current adapter and model info -- Always start with CodeCompanion indicator since it's loaded
-- local current_adapter = nil local status_parts = { "🤖" }
-- local current_model = nil
-- -- Try to get current adapter and model info
-- -- Try to get adapter from active chat buffer local current_adapter = nil
-- local chat_ok, chat = pcall(codecompanion.buf_get_chat) local current_model = nil
-- if chat_ok and chat and chat.adapter then
-- current_adapter = chat.adapter.name or chat.adapter -- First try to get from active chat
-- current_model = chat.adapter.schema and chat.adapter.schema.model and chat.adapter.schema.model.default local chat_ok, chat = pcall(codecompanion.last_chat)
-- end if chat_ok and chat and chat.adapter then
-- current_adapter = chat.adapter.name or "active"
-- -- If no active chat, get default adapter from config if chat.adapter.schema and chat.adapter.schema.model then
-- if not current_adapter then current_model = chat.adapter.schema.model.default or chat.adapter.schema.model
-- local config_ok, config = pcall(function() end
-- return codecompanion.config.strategies.chat.adapter end
-- end)
-- if config_ok and config then -- If no active chat, get from config
-- current_adapter = config if not current_adapter and codecompanion.config then
-- -- Try to get model from adapter config if
-- local adapter_config_ok, adapter_config = pcall(function() codecompanion.config.strategies
-- return codecompanion.config.adapters.http[config] and codecompanion.config.strategies.chat
-- end) and codecompanion.config.strategies.chat.adapter
-- if adapter_config_ok and type(adapter_config) == "function" then then
-- local adapter_instance_ok, adapter_instance = pcall(adapter_config) current_adapter = codecompanion.config.strategies.chat.adapter
-- if adapter_instance_ok and adapter_instance.schema and adapter_instance.schema.model then
-- current_model = adapter_instance.schema.model.default -- Try to get model from adapter config
-- end if
-- end codecompanion.config.adapters
-- end and codecompanion.config.adapters.http
-- end and codecompanion.config.adapters.http[current_adapter]
-- and type(codecompanion.config.adapters.http[current_adapter]) == "function"
-- -- Format the display string then
-- local status_parts = {} local success, adapter_instance = pcall(codecompanion.config.adapters.http[current_adapter])
-- if
-- -- Check for active requests/chats first success
-- local status = codecompanion.status() and adapter_instance
-- if status and status ~= "" then and adapter_instance.schema
-- table.insert(status_parts, "🤖") and adapter_instance.schema.model
-- elseif chat_ok and chat then and adapter_instance.schema.model.default
-- table.insert(status_parts, "💬") then
-- end current_model = adapter_instance.schema.model.default
-- end
-- -- Add model info end
-- if current_model then end
-- -- Shorten model names for better display end
-- local short_model = current_model
-- :gsub("claude%-sonnet%-4%-20250514", "Sonnet") -- Add model/adapter info
-- :gsub("claude%-opus%-4%-5%-20251101", "Opus") if current_model then
-- :gsub("claude%-3%-5%-sonnet%-20241022", "3.5S") -- Shorten model names for better display
-- :gsub("claude%-3%-haiku%-20240307", "Haiku") local short_model = current_model
-- :gsub("gpt%-4o", "GPT-4o") :gsub("claude%-sonnet%-4%-20250514", "Sonnet")
-- :gsub("gpt%-4", "GPT-4") :gsub("claude%-opus%-4%-5%-20251101", "Opus")
-- :gsub("gpt%-3.5%-turbo", "GPT-3.5") :gsub("claude%-3%-5%-sonnet%-20241022", "3.5S")
-- table.insert(status_parts, short_model) :gsub("claude%-3%-haiku%-20240307", "Haiku")
-- elseif current_adapter then :gsub("gpt%-4o", "GPT-4o")
-- -- Show adapter name if model not available :gsub("gpt%-4", "GPT-4")
-- local short_adapter = current_adapter:gsub("anthropic", "Claude"):gsub("openai", "OpenAI") :gsub("gpt%-3.5%-turbo", "GPT-3.5")
-- table.insert(status_parts, short_adapter) table.insert(status_parts, short_model)
-- end elseif current_adapter then
-- -- Show adapter name if model not available
-- return table.concat(status_parts, " ") local short_adapter = current_adapter:gsub("anthropic", "Claude"):gsub("openai", "OpenAI")
-- end table.insert(status_parts, short_adapter)
end
-- Return the formatted string
return table.concat(status_parts, " ")
end
local colors = { local colors = {
blue = "#65D1FF", blue = "#65D1FF",
@@ -204,8 +209,8 @@ return {
}, },
lualine_x = { lualine_x = {
{ {
"codecompanion", -- "codecompanion",
-- codecompanion_status, codecompanion_status,
color = { fg = colors.green }, color = { fg = colors.green },
}, },
{ {