From 12e28f982d95a7aafc21a7f6028c173716fcb820 Mon Sep 17 00:00:00 2001 From: flin16 Date: Sat, 14 Jun 2025 11:13:44 -0500 Subject: [PATCH] feat(fidget-spinner): add code companion fidget spinner integration --- lua/utils/codecompanion_fidget_spinner.lua | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 lua/utils/codecompanion_fidget_spinner.lua diff --git a/lua/utils/codecompanion_fidget_spinner.lua b/lua/utils/codecompanion_fidget_spinner.lua new file mode 100644 index 0000000..7478e70 --- /dev/null +++ b/lua/utils/codecompanion_fidget_spinner.lua @@ -0,0 +1,71 @@ +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