From 874b7c7ffb1e85d4a5fbee0ee0e0ac27a565ffd0 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Mon, 29 Jun 2026 04:24:15 +0800 Subject: [PATCH] feat: add workspace header search slot --- .../src/lib/plugin-host/VerstakPluginAPI.js | 9 +++ .../lib/plugin-manager/PluginManager.svelte | 9 ++- frontend/src/lib/shell/StatusBar.svelte | 23 +++++- frontend/src/lib/shell/WorkspaceHost.svelte | 78 ++++++++++++++++++- frontend/src/lib/test/wails-mock.js | 4 +- frontend/tests/shell-source-contract-test.mjs | 57 ++++++++++++++ 6 files changed, 168 insertions(+), 12 deletions(-) create mode 100644 frontend/tests/shell-source-contract-test.mjs diff --git a/frontend/src/lib/plugin-host/VerstakPluginAPI.js b/frontend/src/lib/plugin-host/VerstakPluginAPI.js index ad695d8..0d67691 100644 --- a/frontend/src/lib/plugin-host/VerstakPluginAPI.js +++ b/frontend/src/lib/plugin-host/VerstakPluginAPI.js @@ -144,6 +144,15 @@ export function createPluginAPI(pluginId) { return { pluginId: pluginId, + ui: { + openSettings: function(panelId) { + assertActive('ui.openSettings'); + window.dispatchEvent(new CustomEvent('verstak:open-settings', { + detail: { pluginId: pluginId, panelId: panelId || '' } + })); + } + }, + capabilities: { has: async function(capId) { const info = await callBackend(pluginId, 'capabilities.has(' + capId + ')', function() { diff --git a/frontend/src/lib/plugin-manager/PluginManager.svelte b/frontend/src/lib/plugin-manager/PluginManager.svelte index 4ff9283..df0d41a 100644 --- a/frontend/src/lib/plugin-manager/PluginManager.svelte +++ b/frontend/src/lib/plugin-manager/PluginManager.svelte @@ -30,10 +30,10 @@ export let activeSettingsPluginId = ''; export let activeSettingsPanelId = ''; - $: if (activeSettingsPluginId && activeSettingsPanelId) { - const key = `${activeSettingsPluginId}:${activeSettingsPanelId}`; - if (key !== lastOpenedKey) { - lastOpenedKey = key; + $: if (activeSettingsPluginId) { + const settingsPanelCount = (contributions.settingsPanels || []).length; + const key = `${activeSettingsPluginId}:${activeSettingsPanelId || '*'}`; + if (key !== lastOpenedKey || settingsPanelCount === 0) { openSettingsFromProps(activeSettingsPluginId, activeSettingsPanelId); } } @@ -71,6 +71,7 @@ async function openSettingsFromProps(pluginId, panelId) { const panel = (contributions.settingsPanels || []).find(sp => sp.pluginId === pluginId && (!panelId || sp.id === panelId)); if (panel) { + lastOpenedKey = `${pluginId}:${panelId || '*'}`; settingsPanel = panel; settingsPluginId = pluginId; settingsError = null; diff --git a/frontend/src/lib/shell/StatusBar.svelte b/frontend/src/lib/shell/StatusBar.svelte index e7682ec..df2531a 100644 --- a/frontend/src/lib/shell/StatusBar.svelte +++ b/frontend/src/lib/shell/StatusBar.svelte @@ -1,6 +1,7 @@