-- lua/plugins/codecompanion/fidget-spinner.lua local progress = require 'fidget.progress' local M = {} function M:init() local group = vim.api.nvim_create_augroup('CodeCompanionFidgetHooks', {}) vim.api.nvim_create_autocmd({ 'User' }, { pattern = 'CodeCompanionRequestStarted', group = group, callback = function(request) local handle = M:create_progress_handle(request) M:store_progress_handle(request.data.id, handle) end, }) vim.api.nvim_create_autocmd({ 'User' }, { pattern = 'CodeCompanionRequestFinished', group = group, callback = function(request) local handle = M:pop_progress_handle(request.data.id) if handle then M:report_exit_status(handle, request) handle:finish() end end, }) end 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) return progress.handle.create { title = ' Requesting assistance (' .. request.data.strategy .. ')', message = 'In progress...', lsp_client = { name = M:llm_role_title(request.data.adapter), }, } end function M:llm_role_title(adapter) local parts = {} table.insert(parts, adapter.formatted_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) if request.data.status == 'success' then handle.message = 'Completed' elseif request.data.status == 'error' then handle.message = ' Error' else handle.message = '󰜺 Cancelled' end end return M