Some checks failed
plugin-tests / test (push) Failing after 5s
JP feedback: floating BTE launcher + always-visible Adwright panel were
"very fucked up" UX. Replaced with proper hermes-webui sidebar integration.
New static/svrnty_nav.js:
- Injects 2 nav-tab buttons into .sidebar-nav matching the existing
data-panel + nav-tab + has-tooltip pattern
- Adwright: bullseye icon (marketing intelligence)
- BTE: sparkle/palette icon (creative studio)
- Wraps window.switchPanel to add main.svrnty-showing-{adwright,bte}
classes so our panels participate in the existing main-view show/hide
system without editing upstream panels.js
- Dispatches "svrnty:panel-switch" CustomEvent so panel modules can
lazy-init / open / close based on which panel is active
Adwright panel:
- adwright.css: hidden by default; shows only when main has
.svrnty-showing-adwright. When showing, occupies full main width
and hides all other main children (chat etc).
- adwright.js: no change to mount logic (already mounted inside <main>).
BTE panel:
- bte.js: removed _installLauncher (no more floating bottom-right button).
Init now listens for svrnty:panel-switch events to open/close the
overlay. Defensively removes any stale .svrnty-bte-launcher DOM nodes
from prior plugin versions.
- bte.css: launcher styles replaced with display:none !important.
manifest.yaml: bumped 0.4.0 → 0.5.0, svrnty_nav.js added to assets in
the correct load order (after app.js, before adwright.js + bte.js).
CONNECTION-MAP regenerated.
Karpathy 4 rules: no upstream edit, smallest possible wrap of switchPanel
to keep our panels coexisting with native panels (chat, tasks, kanban,
etc), CSS-only visibility (no DOM thrashing).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
57 lines
2.4 KiB
YAML
57 lines
2.4 KiB
YAML
# 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
|
|
stylesheets:
|
|
- /plugins/svrnty/app.css
|
|
- /plugins/svrnty/adwright.css
|
|
- /plugins/svrnty/bte.css
|
|
|
|
# Routes this plugin registers at load time (declarative cross-check vs runtime).
|
|
# Each row maps to a routes/<file>.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 }
|
|
|
|
# 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
|