Add manifest-based addon manager
This commit is contained in:
@@ -1405,6 +1405,10 @@
|
||||
</button>
|
||||
<div class="settings-sidebar-divider admin-only"></div>
|
||||
<div class="settings-sidebar-label admin-only">Admin</div>
|
||||
<button class="settings-nav-item admin-only" data-settings-tab="addons">
|
||||
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2l3 6 6 .9-4.5 4.4 1.1 6.2L12 16.6 6.4 19.5l1.1-6.2L3 8.9 9 8z"/></svg>
|
||||
<span>Addons</span>
|
||||
</button>
|
||||
<button class="settings-nav-item admin-only" data-settings-tab="tools">
|
||||
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg>
|
||||
<span>Agent Tools</span>
|
||||
@@ -2262,6 +2266,35 @@
|
||||
</div>
|
||||
|
||||
<!-- ═══ TOOLS TAB ═══ -->
|
||||
<!-- ADDONS TAB -->
|
||||
<div data-settings-panel="addons" class="hidden">
|
||||
<div class="admin-card">
|
||||
<h2 style="display:flex;align-items:center;gap:8px;">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="opacity:0.6"><path d="M12 2l3 6 6 .9-4.5 4.4 1.1 6.2L12 16.6 6.4 19.5l1.1-6.2L3 8.9 9 8z"/></svg>
|
||||
Addons
|
||||
<span style="flex:1"></span>
|
||||
<button class="admin-btn-sm" id="addons-refresh-btn" title="Rescan addons">Refresh</button>
|
||||
</h2>
|
||||
<div class="admin-toggle-sub" style="margin-bottom:12px">Manifest-based extensions loaded from <code>data/addons/<id>/addon.json</code>. Addons are declarative by default; Odysseus does not execute arbitrary addon code automatically.</div>
|
||||
<div id="addons-list" class="addons-list"><div class="admin-empty">Loading addons...</div></div>
|
||||
</div>
|
||||
<div class="admin-card">
|
||||
<h2 style="display:flex;align-items:center;gap:8px;">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="opacity:0.6"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><path d="M12 18v-6"/><path d="M9 15h6"/></svg>
|
||||
Addon Builder
|
||||
</h2>
|
||||
<div class="admin-toggle-sub" style="margin-bottom:10px">Create or edit an addon manifest. This is the stable contract future addon code can build on.</div>
|
||||
<div class="addon-builder-row">
|
||||
<input id="addon-template-id" class="settings-select" type="text" value="my-addon" aria-label="Addon id" />
|
||||
<button class="admin-btn-add" id="addon-template-btn">Load Template</button>
|
||||
<button class="admin-btn-add" id="addon-save-btn">Save Addon</button>
|
||||
<button class="admin-btn-sm" id="addon-clear-btn">Clear</button>
|
||||
</div>
|
||||
<textarea id="addon-manifest-editor" class="addon-manifest-editor" spellcheck="false" placeholder="{ "id": "my-addon", "name": "My Addon" }"></textarea>
|
||||
<div id="addons-msg" class="addon-msg"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div data-settings-panel="tools" class="hidden">
|
||||
<div class="admin-card" style="margin-bottom:12px;">
|
||||
<h2><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-2px;margin-right:5px;opacity:0.6"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg>Agent</h2>
|
||||
|
||||
Reference in New Issue
Block a user