From 4936fd1fcab289f3f50ee7552ac398aedc720c32 Mon Sep 17 00:00:00 2001 From: Spencer Gray Date: Mon, 5 Jan 2026 09:54:30 -0500 Subject: [PATCH 1/3] fix: Delete confirmation window buffers after closing. THe confirmation buffers are unlisted, but never deleted. --- lua/mcphub/utils/ui.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/mcphub/utils/ui.lua b/lua/mcphub/utils/ui.lua index c47ea9c..c6878b0 100644 --- a/lua/mcphub/utils/ui.lua +++ b/lua/mcphub/utils/ui.lua @@ -387,10 +387,12 @@ function M.confirm(message, opts) is_closed = true vim.schedule(function() - if vim.api.nvim_win_is_valid(win) then if vim.api.nvim_win_is_valid(win) then vim.api.nvim_win_close(win, true) end + + if vim.api.nvim_buf_is_valid(bufnr) then + vim.api.nvim_buf_delete(bufnr, { force = true }) end callback(confirmed, cancelled) end) From ab63d977c1affed4a874d1e2b854d80c82821409 Mon Sep 17 00:00:00 2001 From: Spencer Gray Date: Mon, 5 Jan 2026 09:56:27 -0500 Subject: [PATCH 2/3] fix: Delete auth popup window buffers after closing. --- lua/mcphub/utils/ui.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lua/mcphub/utils/ui.lua b/lua/mcphub/utils/ui.lua index c6878b0..a49fe56 100644 --- a/lua/mcphub/utils/ui.lua +++ b/lua/mcphub/utils/ui.lua @@ -607,6 +607,13 @@ function M.open_auth_popup(server_name, auth_url) if vim.api.nvim_win_is_valid(input_win) then vim.api.nvim_win_close(input_win, true) end + + if vim.api.nvim_buf_is_valid(info_buf) then + vim.api.nvim_buf_delete(info_buf, { force = true }) + end + if vim.api.nvim_buf_is_valid(input_buf) then + vim.api.nvim_buf_delete(input_buf, { force = true }) + end -- Return focus to MCPHub window if State.ui_instance and State.ui_instance.window then vim.api.nvim_set_current_win(State.ui_instance.window) From 5728dba097865f7456b2e75df58a772fb533c4a4 Mon Sep 17 00:00:00 2001 From: Spencer Gray Date: Mon, 5 Jan 2026 09:58:05 -0500 Subject: [PATCH 3/3] Explicitly delete multiline_input buffers after closing. These buffers configured with "bufhidden" "wipe", which should clean them up after the buffer is hidden anyway. This is just an extra check to be sure they are cleaned up. --- lua/mcphub/utils/ui.lua | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lua/mcphub/utils/ui.lua b/lua/mcphub/utils/ui.lua index a49fe56..545f395 100644 --- a/lua/mcphub/utils/ui.lua +++ b/lua/mcphub/utils/ui.lua @@ -110,7 +110,13 @@ function M.multiline_input(title, content, on_save, opts) end end -- Close the window - vim.api.nvim_win_close(win, true) + if vim.api.nvim_win_is_valid(win) then + vim.api.nvim_win_close(win, true) + end + + if vim.api.nvim_buf_is_valid(bufnr) then + vim.api.nvim_buf_delete(bufnr, { force = true }) + end -- -- Call save callback if content changed -- if content ~= new_content then on_save(new_content) @@ -118,7 +124,13 @@ function M.multiline_input(title, content, on_save, opts) end local function close_window() - vim.api.nvim_win_close(win, true) + if vim.api.nvim_win_is_valid(win) then + vim.api.nvim_win_close(win, true) + end + + if vim.api.nvim_buf_is_valid(bufnr) then + vim.api.nvim_buf_delete(bufnr, { force = true }) + end if opts.on_cancel then opts.on_cancel() end @@ -387,9 +399,9 @@ function M.confirm(message, opts) is_closed = true vim.schedule(function() - if vim.api.nvim_win_is_valid(win) then - vim.api.nvim_win_close(win, true) - end + if vim.api.nvim_win_is_valid(win) then + vim.api.nvim_win_close(win, true) + end if vim.api.nvim_buf_is_valid(bufnr) then vim.api.nvim_buf_delete(bufnr, { force = true })