Skip to content

feat(desktop): group-chat rounds get a real Stop — interrupts the live turn, holds the rest (#91868, #94569) - #96241

Merged
teknium1 merged 4 commits into
mainfrom
fix/s5-group-stop-primitive
Aug 27, 2026
Merged

teknium1 merged 4 commits into
mainfrom
fix/s5-group-stop-primitive

Conversation

@teknium1

Copy link
Copy Markdown
Collaborator

Summary

Group-chat rounds finally have a real stop path (#91868, #94569). Before this, the loop's only cancellation primitives were the epoch bump (checked ONLY at member boundaries) and holds (skip FUTURE turns) — zero session.interrupt calls anywhere in the plugin, and no stop affordance in the room UI at all (live-verified on main: during an active round the composer offers only attach + New Thread).

Validation

Result
vm suite full plugin suite green incl. new group-stop tests + source-contract tests (button→primitive wiring, no-CJK)
sabotage interrupt call removed → test fails
eslint clean

Live (real Electron, mid-round): baseline main has no stop control at all during a running round; on this branch the Stop button appears during the round, clicking it mid-essay interrupted the in-flight member (essay truncated, no further members took turns, no spinner survived) and the activity feed records "You stopped the room — remaining turns are held until resumed".

Main (no affordance) Fix (button + stopped state)
no stop control stop visible
stopped label

Fixes #91868, #94569. Source PR #94570 to be closed with credit after merge.

Infographic

Stop the round

@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/desktop Electron desktop app (apps/desktop/*) area/sessions Session lifecycle, resume, persistence, history sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state labels Aug 27, 2026
teknium1 and others added 3 commits August 27, 2026 03:13
stopGroupThread(group, thread, members?) is the room's first true
cancellation primitive: it bumps the room epoch (the driving loop bails
at its next member boundary), sets #93129 holds for every member (no
future turns until an explicit release), records a 'stopped' activity
event on the new epoch, and sends session.interrupt to the member
currently on turn via its own route — previously the plugin issued zero
interrupt RPCs, so 'stop' meant waiting out the in-flight model call.

The runGroupChatMemberTurnLeased poll loop now abandons a turn whose
dispatch epoch went stale WHILE its member is held — the stop signature.
An ordinary newer-send epoch bump without a hold still polls to
completion so late work keeps landing (#93127 commit check unchanged).
Salvaged from #94570 (@ShonnQ): the Activity bar gains a Stop button
while a round is running (room.running), plus an inline Stop on the
expanded 'working' activity row. Rewired from the original per-member
session.interrupt spray onto the stopGroupThread primitive so the round
loop actually stops (epoch bump + holds + on-turn interrupt) instead of
marching to the next member; labels are plain English like the rest of
the plugin's UI strings.

Co-authored-by: Hermes Agent <agent@nousresearch.com>
…itive

Source-contract tests (the group-room-ux pattern): the workspace renders
the Stop button only while room.running, wires it to stopGroupThread
(not the #94570 per-member interrupt spray), and carries no hardcoded
CJK label.
@teknium1
teknium1 force-pushed the fix/s5-group-stop-primitive branch from 7c64172 to 13974e7 Compare August 27, 2026 10:14
@github-actions

github-actions Bot commented Aug 27, 2026 •

Copy link
Copy Markdown

૮ >ﻌ< ა ci review

ran on 87b2f5c — chore: retrigger CI (zero-job dispatch failure, auto-heal)

⚠️ Warnings

CI timings · View report · View job

Wall time 2m35s vs 1m11s (+118.3%). 2 job(s) slower, 2 faster,

  • OSV scan / Emit review status: +50.0s
  • Detect affected areas: -48.0s
  • OSV scan / Scan lockfiles / osv-scan: +4.0s
  • All required checks pass: -2.0s

OSV vulnerability scan · View job

6 known vulnerabilities found in pinned dependencies.

How to fix:

Review the findings in the Security tab. Update the affected dependencies if a patched version is available.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/sessions Session lifecycle, resume, persistence, history comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: No way to cancel/interrupt an in-flight agent request in a bot group chat

3 participants