# svrnty-hermes-webui-plugin — manifest. # Read by hermes-webui plugin loader + sync tooling. Machine-readable identity. plugin_name: svrnty-hermes-webui-plugin plugin_version: 0.5.0 entry_point: svrnty_hermes_webui_plugin:register upstream: project: nesquena/hermes-webui min_version: v0.51.103 # earliest tested upstream (bumped by upstream-sync.py) tested_versions: # appended by drift CI as it sweeps new tags - v0.51.103 - v0.51.117 - v0.51.118 current_local: v0.51.118 # what the local fork tracks (latest upstream tag) # Permanent public API surface the plugin uses (mirrors hermes-webui's loader hook). # CONNECTION-MAP.md is the runtime-discovered truth; this list is just declarative. public_api: - register_route - register_static - inject_script - inject_stylesheet - config_get - logger - register_audio_attachment_processor # Assets the plugin injects into index.html on every page load. # Load order matters: svrnty_nav.js (sidebar buttons + switchPanel wrap) MUST # load before adwright.js / bte.js so panel modules see the wrap in place. assets: scripts: - /plugins/svrnty/app.js - /plugins/svrnty/svrnty_nav.js - /plugins/svrnty/adwright.js - /plugins/svrnty/bte.js - /plugins/svrnty/canvas.js - /plugins/svrnty/umbrella_inline.js - /plugins/svrnty/cortex-os/runtime-health/runtime_health.js stylesheets: - /plugins/svrnty/app.css - /plugins/svrnty/adwright.css - /plugins/svrnty/bte.css - /plugins/svrnty/canvas.css - /plugins/svrnty/umbrella_inline.css - /plugins/svrnty/cortex-os/runtime-health/runtime_health.css # Routes this plugin registers at load time (declarative cross-check vs runtime). # Each row maps to a routes/.py. routes: - { path: /api/transcribe, method: POST, file: routes/transcribe.py, status: live } - { path: /api/vault/status, method: GET, file: routes/vault_status.py, status: live } - { path: /api/adwright/last-panel-update, method: GET, file: routes/adwright.py, status: mock } - { path: /api/adwright/provision-creds, method: POST, file: routes/adwright.py, status: live } - { path: /api/bte/proxy, method: GET, file: routes/bte_proxy.py, status: live } - { path: /api/bte/proxy, method: POST, file: routes/bte_proxy.py, status: live } - { path: /api/canvas/status, method: GET, file: routes/canvas.py, status: live } - { path: /api/canvas/tools, method: GET, file: routes/canvas.py, status: live } - { path: /api/canvas/proxy, method: GET, file: routes/canvas.py, status: live } - { path: /api/canvas/proxy, method: POST, file: routes/canvas.py, status: live } - { path: /api/canvas/proxy, method: PUT, file: routes/canvas.py, status: live } - { path: /api/canvas/command, method: POST, file: routes/canvas.py, status: live } - { path: /api/canvas/design-context, method: GET, file: routes/canvas.py, status: seed } - { path: /api/canvas/events, method: GET, file: routes/canvas.py, status: seed } - { path: /api/cortex-os/runtime-health, method: GET, file: routes/cortex_os_extension.py, status: live } # Audio-attachment processors (called by streaming.py before agent receives message). audio_processors: - { file: routes/transcribe.py, fn: _transcribe_audio_attachments, status: live } # Plugin refuses to load against an unlisted upstream version unless strict=0. strict_version_check: false