8236b41771
Pulls the multi-source roster into the bundled plugin: profiles.list rows from the active gateway are merged with the host.agents() union roster (hermes-agent #86875), so the Bots panel shows agents from every registered Desktop connection with @name-device handles for duplicates. Feature-detected and best-effort — an older Desktop build or roster failure leaves the single-source list untouched. Adapted for the bundle: - useRoster queryFn combines the bot_mode_protocol capability read (which landed after #68 was cut) with the multi-source merge - multi-source-roster tests updated for the namespace SDK import harness - soul-protocol-backfill anchor widened for the new botHandle(name, bot) signature Plugin suite: 143/143.
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.