Ending a terminal takes its window and hexhead with it

Featurekamo-internal
Ya
4 Septemba 2026, 17:50 UTC
Mwandishi
Kamo
Ahadi ya
8202235

Ending a terminal from the Interaction Center killed the shell and left the window behind, showing a red `closed` status over something that no longer exists. The member's next move was to close it by hand — and if they had put the window away first, the hexhead sat there pointing at nothing. Nothing linked a session id back to a window. Every close in the app names a window id, because every close starts at the window: the X on the chrome, the X on a head, a conversation closing itself from inside. This one starts in a list, where the member has a session id and no way to learn a window id. So `closeTerminal(sessionGuid)` joins `openTerminal` in the same module, and dispatches a new `tool:closeMatching`. The dock resolves it against the store on toolId AND props — never props alone, since `sessionGuid` is also chat's dedupe key and matching on the bare prop would let ending a terminal close a conversation — then routes each hit through the existing `onClose`, so `tool:closed` still fires and the exit animation still runs. A separate event rather than an extension of `tool:close`: that one deliberately no-ops on a detail carrying a toolId and no windowId, and ChatBox depends on it. Teaching it to match on props would quietly turn that no-op into "close every chat window". The head is taken down explicitly. `store.close()` only marks the window exiting and never emits `removeHexhead`, so a window closed while minimized strands its head — the gap HexHeadPopover already works around by hand, and this follows it exactly, `animate: true` included so the head spins away instead of blinking out. An empty match matches nothing, not everything: a caller reaches one by passing an id that came back undefined, and the honest answer to "close the window for `undefined`" is none of them. Closes before the DELETE is sent, for the same reason the row disappears optimistically — ending a terminal is a confirmed act, and a screen that waits for the round trip reads as a button that did nothing. Scoped to the Interaction Center's End button. The identical button in the maximized terminal's navigator is untouched, as is a shell that exits on its own or is ended from another tab: those still leave the window up, honestly reporting `closed`.

Mabadiliko yote

Je, unaona nini kuhusu usafiri?

Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.

Kuwa Huru MileleMtazamo wa bei