6851841112
Opening a Bot Mode group chat painted the room twice — once as a main-window workspace tab (host.openWorkspace) and once as the in-panel fallback, because the Bots pane rendered off $groupChatWorkspace alone. Two live panes with independent drafts drove one shared engine, and the roster disappeared behind the duplicate. The in-panel room is the fallback surface, not a second copy: it now renders only while no main tab owns the group. The selection atom stays set either way so the roster row still highlights, and desktops without the door — or whose door throws — keep the in-pane room. Consolidates #89881, #90274 and #90398, which fixed the same bug. Closes #89788 Co-authored-by: helix4u <helix4u@users.noreply.github.com>
Bundled plugins
Drop a <name>/plugin.{ts,tsx} here that default-exports a HermesPlugin and
it registers automatically at boot (vite glob in ../contrib/plugins.ts), with
the same inventory + live enable/disable contract as runtime plugins.
Keep this tree for real shipped plugins (and the small authoring fixtures that
dogfood the SDK). One-off demos that rebuild a core chrome piece 1:1 do not
belong here — they double the UI and confuse Settings ▸ Plugins. Publish those
in the companion
hermes-example-plugins
repo instead.
User- and agent-authored plugins load at runtime from
$HERMES_HOME/desktop-plugins/<name>/plugin.js (the disk door) — see the
hermes-desktop-plugins skill.