Repository navigation
fix: one card per conversation - #799
Merged
Merged
Conversation
…conversation Reopening a parked row whose conversation an open session already runs now hands back that open session instead of a second card on the same transcript; both windows already focus an id that is on screen. History lists each conversation once, by its newest park, and hides one a card has open; Forget removes every parked copy of it.
ToasterStyle.Position is sonner's position prop: top-right (the zero value and the default), top-left, bottom-right or bottom-left. A bottom stack grows up and enters from below, and a swipe leaves toward the corner's own side and edge. The gallery takes -toasts-at to shoot each corner.
A session-start report naming a conversation another open card already runs,
which a resume typed in the agent's own app does, raises session-duplicate
{id, heldBy}. The native window shows it in its own bottom-right toaster with
Keep both and Switch; Switch closes the card that resumed without leaving a
parked copy and brings up the one that had the conversation.
Which providers report such a switch, and when, was measured on 2026-10-17
and is written down in docs/ceilings.md and the README provider tables.
omartelo
force-pushed
the
fix/one-card-per-conversation
branch
from
October 17, 2026 17:15
07de1a9 to
9004a2b
Compare
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.
Two cards could end up on one provider conversation, both writing into the same transcript. This closes the doors lich owns and warns about the one it does not.
What changes
store.reopen, behind History, an undone close, an existing worktree and Pulls, hands back the open session that already runs a parked row's conversation instead of reinserting a second card. Both windows already only focus an id that is on screen, so no client change was needed.ClosedSessionskeeps the newest park per conversation and hides one a card has open;ForgetSessionremoves every parked copy, so a forgotten row is not replaced by an older one.session-duplicate {id, heldBy}. The native window shows it in a bottom-right toaster of its own, with Keep both and Switch (closes the card that resumed without parking it, then focuses the holder). Strings in all seven native locales.ui.ToasterStyle.Position: sonner'sposition, four corners, top-right stays the default. Only the warning uses bottom-right; every other toast is where it was.Providers
Measured on 2026-10-17 with the installed CLIs (details in
docs/ceilings.md, row added to every README's provider table):session_switch, which the plugin does not hear yet)No change to the hook contract on the plugin side;
docs/hooks/session-start.mdnotes the new server-side event.Verification
ConversationHolder), terminal (event raised / not raised), native (duplicateOf, event dispatch), ui (corner placement, swipe out per corner, dampened pull).go vet/go test ./...and nativegofmt/go vet/go test ./...green before the rebase onto feat(native): UI polish: status ring, key caps, Settings scope and a one-line palette #797; the rebase conflicted only inCHANGELOG.md.