From 78ab771a1fd0c87b7a505d31a919404e4e4ee3a2 Mon Sep 17 00:00:00 2001 From: David Herman Date: Fri, 17 Apr 2026 00:49:36 +0200 Subject: [PATCH] fix(session_picker): switch to remaining session when deleting active one --- lua/opencode/ui/session_picker.lua | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lua/opencode/ui/session_picker.lua b/lua/opencode/ui/session_picker.lua index 21f82ef1..ff990238 100644 --- a/lua/opencode/ui/session_picker.lua +++ b/lua/opencode/ui/session_picker.lua @@ -56,12 +56,28 @@ function M.pick(sessions, callback) local sessions_to_delete = type(selected) == 'table' and selected.id == nil and selected or { selected } - for _, session in ipairs(sessions_to_delete) do - if state.active_session and state.active_session.id == session.id then + local to_delete_ids = {} + for _, s in ipairs(sessions_to_delete) do + to_delete_ids[s.id] = true + end + + local deleting_current = state.active_session and to_delete_ids[state.active_session.id] or false + + if deleting_current then + local core = require('opencode.core') + local remaining = vim.tbl_filter(function(item) + return not to_delete_ids[item.id] + end, opts.items or {}) + + if #remaining > 0 then + core.switch_session(remaining[1].id):await() + else vim.notify('deleting current session, creating new session') - state.session.set_active(require('opencode.core').create_new_session():await()) + state.session.set_active(core.create_new_session():await()) end + end + for _, session in ipairs(sessions_to_delete) do state.api_client:delete_session(session.id):catch(function(err) vim.schedule(function() vim.notify('Failed to delete session ' .. session.id .. ': ' .. vim.inspect(err), vim.log.levels.ERROR)