fix(session): switch session when active child/grandchild's ancestor is deleted#376
Merged
Conversation
Contributor
Author
|
Failing CI should be unrelated. There was a regression in nightly neovim that was fixed today. |
Owner
|
Thanks for the fix. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
When deleting a parent session from the session picker while switched into a child/grandchild subagent session, two bugs occurred:
No session switch triggered — the deletion check only compared the active session ID directly against the deleted set, so deleting an ancestor while inside a child session was not detected.
Agent mode stuck on subagent — when the "no remaining sessions" fallback created a new session, the agent mode was never reset. If the active session was running under a subagent (e.g.
explore), the new session inherited that mode with no way to switch back.Solution
Ancestor-aware deletion detection: a new
_is_session_or_ancestor_deletedhelper walks up theparentIDchain to detect whether any ancestor of the active session is being deleted.Agent mode reset: when no remaining sessions exist after deletion,
state.model.clear()andagent_model.ensure_current_mode()are now called before creating the new session — matching the reset already present inswitch_session.Test coverage
_is_session_or_ancestor_deleted(direct, parent, grandparent, sibling, unrelated cases)