Repository navigation
Conversation
Interrupt all member sessions of a running group room from the room view: - Stop button on the Activity header row when the room is running - Stop button beside each 'working' activity event row - Sends session.interrupt per member via requestForBot, then marks the room not-running; hidden when idle. Closes NousResearch#94569
Keep the bundled plugin free of hardcoded CJK strings — the rest of hermes-bots uses English literals (no i18n table in this plugin). Closes NousResearch#94569
This PR adds a Stop button to the group chat Activity bar, allowing users to interrupt all bot sessions in a room with one click. The UI integration is clean — the button appears conditionally on Three concerns:
|
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.
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.
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.
|
Merged via #96241 (rebase-merge) — your Stop button is on main with your authorship preserved: b00e71d. Thanks @ShonnQ! The salvage rewired the button from per-member interrupts onto a new |
…ch#94570) Salvaged from NousResearch#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 NousResearch#94570 per-member interrupt spray), and carries no hardcoded CJK label.
…ch#94570) Salvaged from NousResearch#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 NousResearch#94570 per-member interrupt spray), and carries no hardcoded CJK label.
…ch#94570) Salvaged from NousResearch#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 NousResearch#94570 per-member interrupt spray), and carries no hardcoded CJK label.
Closes #94569
What
Adds a Stop button to the group chat Activity bar in Hermes Desktop:
⏹ 停止while the room isrunningworkingevent row gets a stop button beside its timestampsession.interruptto every member session (requestForBot), then marks the room not-runningWhy
Multi-bot group rooms run long turns with no one-click escape from the room view. Single sessions have stop affordances in the composer; group rooms were the gap. Users reported needing to type '/stop' or wait — a button on the room's own Activity bar is the natural affordance.
Implementation
apps/desktop/src/plugins/hermes-bots/plugin.jsonly:stopAllBots()helper inGroupChatWorkspace— iteratesroom.sessionsper member, sendssession.interrupt, resetsrunningrequestForBot,groupMemberKey,updateGroupChatplumbingdebug-stop)Tests
All 556 hermes-bots tests pass.