Improved AI tools
This commit is contained in:
@@ -41,4 +41,34 @@ vim.api.nvim_create_autocmd("User", {
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
|
||||
local fidget_group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", { clear = true })
|
||||
|
||||
vim.api.nvim_create_autocmd({ "User" }, {
|
||||
pattern = "CodeCompanionRequestStarted",
|
||||
group = fidget_group,
|
||||
callback = function(event)
|
||||
local FidgetHelper = require('utils.fidget_helper')
|
||||
-- Pass event instead of request if the callback receives the full event object
|
||||
local handle = FidgetHelper:create_progress_handle(event)
|
||||
FidgetHelper:store_progress_handle(event.data.id, handle)
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd({ "User" }, {
|
||||
pattern = "CodeCompanionRequestFinished",
|
||||
group = fidget_group,
|
||||
callback = function(event)
|
||||
local FidgetHelper = require('utils.fidget_helper')
|
||||
-- Pass event instead of request if the callback receives the full event object
|
||||
-- Pass event instead of request if the callback receives the full event object
|
||||
local handle = FidgetHelper:pop_progress_handle(event.data.id)
|
||||
if handle then
|
||||
FidgetHelper:report_exit_status(handle, event)
|
||||
handle:finish()
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
require('helpers').edit_cf('a', '/lua/autocmd.lua')
|
||||
|
||||
@@ -40,7 +40,11 @@ vim.keymap.set({ 'n', 'v', 'c', 'i' }, '<C-Q>', '<CMD>Telescope lsp_document_sym
|
||||
vim.keymap.set({ 'n', 'v', 'c', 'i' }, '<C-S-Q>', '<CMD>Telescope lsp_workspace_symbols<CR>', { desc = 'Show symbols in workspace' })
|
||||
vim.keymap.set({ 'n', 'v', 'c', 'i' }, '<C-E>', '<CMD>Telescope oldfiles<CR>', { desc = 'Show recently opened files' })
|
||||
vim.keymap.set({ 'n', 'v', 'c', 'i' }, '<C-P>', function()
|
||||
require('telescope.builtin').git_files()
|
||||
require('telescope.builtin').find_files {
|
||||
show_untracked = true,
|
||||
no_ignore = false,
|
||||
hidden = true,
|
||||
}
|
||||
end, { desc = 'Find all files' })
|
||||
vim.keymap.set({ 'n', 'v', 'c', 'i' }, '<C-S-P>', function()
|
||||
require('telescope.builtin').find_files {
|
||||
@@ -93,7 +97,7 @@ vim.keymap.set('n', '<Leader>gd', '<CMD>Git diff<CR>', { desc = 'Git diff' })
|
||||
vim.keymap.set('n', '<Leader>gdc', '<CMD>Git diff --cached<CR>', { desc = 'Git diff' })
|
||||
vim.keymap.set('n', '<Leader>gl', '<CMD>Git log<CR>', { desc = 'Git log' })
|
||||
vim.keymap.set('n', '<Leader>gun', '<CMD>Git reset -- %<CR>', { desc = 'Git unstage file' })
|
||||
vim.keymap.set('n', '<Leader>gco', '<CMD>Git checkout', { desc = 'Git checkout' })
|
||||
vim.keymap.set('n', '<Leader>gco', '<CMD>Git checkout -- %<CR>', { desc = 'Git checkout' })
|
||||
vim.keymap.set('n', '<Leader>G', '<CMD>Git', { desc = 'Git' })
|
||||
vim.keymap.set('n', '<Leader>gsta', '<CMD>Git stash push<CR>', { desc = 'Git stash' })
|
||||
vim.keymap.set('n', '<Leader>gstA', '<CMD>Git stash apply<CR>', { desc = 'Git stash apply' })
|
||||
|
||||
@@ -2,26 +2,43 @@ require('helpers').edit_cf('pa', '/lua/plugins/codecompanion.lua')
|
||||
|
||||
return {
|
||||
'olimorris/codecompanion.nvim',
|
||||
opts = {
|
||||
adapters = {
|
||||
opts = function(_, opts)
|
||||
opts.adapters = {
|
||||
copilot = function()
|
||||
return require('codecompanion.adapters').extend('copilot', {
|
||||
schema = {
|
||||
model = {
|
||||
default = 'claude-3.7-sonnet',
|
||||
default = 'gpt-4o',
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
display = {
|
||||
}
|
||||
|
||||
opts.display = {
|
||||
chat = {
|
||||
show_settings = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
opts.strategies = {
|
||||
chat = {
|
||||
adapter = 'copilot',
|
||||
slash_commands = {
|
||||
codebase = require('vectorcode.integrations').codecompanion.chat.make_slash_command(),
|
||||
},
|
||||
tools = {
|
||||
vectorcode = {
|
||||
description = 'Run VectorCode to retrieve the project context.',
|
||||
callback = require('vectorcode.integrations').codecompanion.chat.make_tool(),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
dependencies = {
|
||||
'nvim-lua/plenary.nvim',
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'Davidyz/VectorCode',
|
||||
},
|
||||
}
|
||||
|
||||
3
lua/plugins/fidget.lua
Normal file
3
lua/plugins/fidget.lua
Normal file
@@ -0,0 +1,3 @@
|
||||
return {
|
||||
'j-hui/fidget.nvim',
|
||||
}
|
||||
10
lua/plugins/git_blame.lua
Normal file
10
lua/plugins/git_blame.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
return {
|
||||
'f-person/git-blame.nvim',
|
||||
event = 'VeryLazy',
|
||||
opts = {
|
||||
enabled = true, -- if you want to enable the plugin
|
||||
message_template = ' <summary> • <date> • <author> • <<sha>>', -- template for the blame message, check the Message template section for more options
|
||||
date_format = '%m-%d-%Y %H:%M:%S', -- template for the date, check Date format section for more options
|
||||
virtual_text_column = 1, -- virtual text start column, check Start virtual text at column section for more options
|
||||
},
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
require('helpers').edit_cf('pg', '/lua/plugins/gitsigns.lua')
|
||||
-- Adds git related signs to the gutter, as well as utilities for managing changes
|
||||
-- See `:help gitsigns`
|
||||
return {
|
||||
|
||||
8
lua/plugins/vectorcode.lua
Normal file
8
lua/plugins/vectorcode.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
require('helpers').edit_cf('pv', '/lua/plugins/vectorcode.lua')
|
||||
return {
|
||||
'Davidyz/VectorCode',
|
||||
version = '*', -- optional, depending on whether you're on nightly or release
|
||||
dependencies = { 'nvim-lua/plenary.nvim' },
|
||||
build = 'pipx upgrade vectorcode',
|
||||
cmd = 'VectorCode', -- if you're lazy-loading VectorCode
|
||||
}
|
||||
53
lua/utils/fidget_helper.lua
Normal file
53
lua/utils/fidget_helper.lua
Normal file
@@ -0,0 +1,53 @@
|
||||
local progress = require 'fidget.progress'
|
||||
local M = {}
|
||||
|
||||
M.handles = {}
|
||||
|
||||
function M:store_progress_handle(id, handle)
|
||||
M.handles[id] = handle
|
||||
end
|
||||
|
||||
function M:pop_progress_handle(id)
|
||||
local handle = M.handles[id]
|
||||
M.handles[id] = nil
|
||||
return handle
|
||||
end
|
||||
|
||||
function M:create_progress_handle(request)
|
||||
-- Ensure request.data and request.data.adapter exist before accessing them
|
||||
local strategy = request.data and request.data.strategy or 'unknown'
|
||||
local adapter_info = request.data and request.data.adapter or {}
|
||||
|
||||
return progress.handle.create {
|
||||
title = ' Requesting assistance (' .. strategy .. ')',
|
||||
message = 'In progress...',
|
||||
lsp_client = {
|
||||
name = M:llm_role_title(adapter_info),
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function M:llm_role_title(adapter)
|
||||
local parts = {}
|
||||
-- Use adapter.formatted_name if available, otherwise default
|
||||
local name = adapter.formatted_name or 'LLM'
|
||||
table.insert(parts, name)
|
||||
if adapter.model and adapter.model ~= '' then
|
||||
table.insert(parts, '(' .. adapter.model .. ')')
|
||||
end
|
||||
return table.concat(parts, ' ')
|
||||
end
|
||||
|
||||
function M:report_exit_status(handle, request)
|
||||
-- Ensure request.data exists before accessing status
|
||||
local status = request.data and request.data.status or 'unknown'
|
||||
if status == 'success' then
|
||||
handle.message = 'Completed'
|
||||
elseif status == 'error' then
|
||||
handle.message = ' Error'
|
||||
else -- Includes "cancelled" or any other status
|
||||
handle.message = ' Cancelled/Other'
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
Reference in New Issue
Block a user