Skip to content

feat: rewrite bubble layout as vertical stack#5

Merged
BinaryFroggy merged 1 commit into
mainfrom
feat/pet-bubble-list-layout
May 8, 2026
Merged

feat: rewrite bubble layout as vertical stack#5
BinaryFroggy merged 1 commit into
mainfrom
feat/pet-bubble-list-layout

Conversation

@BinaryFroggy
Copy link
Copy Markdown
Owner

Drop the orbital BubbleLayout in favor of a bottom-up vertical stack pinned to the pet (max 5 visible). The orbital layout required a 1100x800 stage to avoid clipping the worst-case expanded card, which detached the window from any natural anchor; the stack collapses the stage to 380x620 and lets PetWindow constrain its frame to visibleFrame so the seal cannot leave the screen.

Bubbles always render as pixel-style cards; the collapsed dot form is gone. Default card shows cwd / title and the last assistant message extracted from the transcript via the Stop hook.

Drop PersistentStore: cross-run "recent session" restore produced ghost cards more often than it helped, since the only liveness signal was a 10-minute timer. Stale-peer pruning now keys on isRunning + lastActivityAt, so legitimate parallel sessions in the same cwd survive.

Disconnect monitoring on the IPC channel is lazy-attached when onPeerDisconnect is registered, closing a race where EOF arrived before the @mainactor handler bound. askUser disconnect now advances via askUserResolved -- the state machine has no askUser -> postToolUse edge.

See devDocs/hooks-and-priority.md for the Stop hook payload.

Drop the orbital BubbleLayout in favor of a bottom-up vertical
stack pinned to the pet (max 5 visible). The orbital layout
required a 1100x800 stage to avoid clipping the worst-case
expanded card, which detached the window from any natural anchor;
the stack collapses the stage to 380x620 and lets PetWindow
constrain its frame to visibleFrame so the seal cannot leave the
screen.

Bubbles always render as pixel-style cards; the collapsed dot form
is gone. Default card shows cwd / title and the last assistant
message extracted from the transcript via the Stop hook.

Drop PersistentStore: cross-run "recent session" restore produced
ghost cards more often than it helped, since the only liveness
signal was a 10-minute timer. Stale-peer pruning now keys on
isRunning + lastActivityAt, so legitimate parallel sessions in the
same cwd survive.

Disconnect monitoring on the IPC channel is lazy-attached when
onPeerDisconnect is registered, closing a race where EOF arrived
before the @mainactor handler bound. askUser disconnect now
advances via askUserResolved -- the state machine has no
askUser -> postToolUse edge.

See devDocs/hooks-and-priority.md for the Stop hook payload.
@BinaryFroggy BinaryFroggy merged commit e6c74c9 into main May 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant