Add External Services plugin settings section

Expose plugins that declare the external settings section from the External Services settings page.

Wire the sidebar item, subsection mount, and settings DOX contract so plugin sections use matching tab IDs.
This commit is contained in:
Alessandro 2026-07-09 13:20:48 +02:00
parent f64b6490c5
commit bc96386260
3 changed files with 11 additions and 0 deletions

View file

@ -14,6 +14,7 @@
## Local Contracts ## Local Contracts
- Keep settings payloads synchronized with backend APIs and plugin settings contracts. - Keep settings payloads synchronized with backend APIs and plugin settings contracts.
- Settings tabs that expose plugin `settings_sections` must mount `settings/plugins/plugins-subsection.html` with matching `data-tab` and sidebar/nav section IDs.
- Do not store secrets in localStorage, URLs, or console output. - Do not store secrets in localStorage, URLs, or console output.
- Preserve Store Gating and modal footer conventions in settings components. - Preserve Store Gating and modal footer conventions in settings components.
- MCP manager tool toggles write `disabled_tools` into the draft JSON and require Apply before changing the running MCP tool set. - MCP manager tool toggles write `disabled_tools` into the draft JSON and require Apply before changing the running MCP tool set.

View file

@ -45,6 +45,12 @@
<span>Remote Control</span> <span>Remote Control</span>
</a> </a>
</li> </li>
<li>
<a href="#section-external-plugins">
<span class="material-symbols-outlined" aria-hidden="true">extension</span>
<span>Plugins</span>
</a>
</li>
</ul> </ul>
</nav> </nav>
@ -67,6 +73,9 @@
<div id="section-tunnel" class="section"> <div id="section-tunnel" class="section">
<x-component path="settings/tunnel/tunnel-section.html"></x-component> <x-component path="settings/tunnel/tunnel-section.html"></x-component>
</div> </div>
<div id="section-external-plugins" class="section">
<x-component path="settings/plugins/plugins-subsection.html" data-tab="external"></x-component>
</div>
</div> </div>
</template> </template>
</div> </div>

View file

@ -49,6 +49,7 @@ const TAB_ITEMS = Object.freeze([
{ id: "section-auth", label: "Authentication", icon: "passkey" }, { id: "section-auth", label: "Authentication", icon: "passkey" },
{ id: "section-external-api", label: "External API", icon: "api" }, { id: "section-external-api", label: "External API", icon: "api" },
{ id: "section-tunnel", label: "Remote Control", icon: "share" }, { id: "section-tunnel", label: "Remote Control", icon: "share" },
{ id: "section-external-plugins", label: "Plugins", icon: "extension" },
], ],
}, },
{ {