diff --git a/apps/web/tests/expected/plugin-config/official.expected.md b/apps/web/tests/expected/plugin-config/official.expected.md index 53c7ff8b5a..c3f1cafc28 100644 --- a/apps/web/tests/expected/plugin-config/official.expected.md +++ b/apps/web/tests/expected/plugin-config/official.expected.md @@ -32,16 +32,16 @@ - text: 实验性 在本机使用 SenseVoice 转写录音,首次使用需安装依赖。 - status - switch "启用 语音输入" + - listitem: + - button "查看 自定义插件市场": 自定义插件市场 + - text: 实验性 在插件页添加「发现」标签页,从你添加的插件市场索引浏览和安装插件。 + - status + - switch "启用 自定义插件市场" - listitem: - button "查看 自动授权审查": 自动授权审查 - text: 实验性 提供自动审查权限模式,由模型在每次工具调用前判断是否授权。 - status - switch "启用 自动授权审查" - - listitem: - - button "查看 开发者工具": 开发者工具 - - text: 实验性 查看调试会话原始数据、聊天消息分组数据,以及调试 NodeJS 后端 - - status - - switch "启用 开发者工具" - heading "已安装插件" [level=3] - list: - listitem: diff --git a/apps/web/tests/expected/plugin-manager/live-enabled.expected.md b/apps/web/tests/expected/plugin-manager/live-enabled.expected.md index 2a8464f596..fd91449871 100644 --- a/apps/web/tests/expected/plugin-manager/live-enabled.expected.md +++ b/apps/web/tests/expected/plugin-manager/live-enabled.expected.md @@ -32,16 +32,16 @@ - text: 实验性 在本机使用 SenseVoice 转写录音,首次使用需安装依赖。 - status - switch "启用 语音输入" + - listitem: + - button "查看 自定义插件市场": 自定义插件市场 + - text: 实验性 在插件页添加「发现」标签页,从你添加的插件市场索引浏览和安装插件。 + - status + - switch "启用 自定义插件市场" - listitem: - button "查看 自动授权审查": 自动授权审查 - text: 实验性 提供自动审查权限模式,由模型在每次工具调用前判断是否授权。 - status - switch "启用 自动授权审查" - - listitem: - - button "查看 开发者工具": 开发者工具 - - text: 实验性 查看调试会话原始数据、聊天消息分组数据,以及调试 NodeJS 后端 - - status - - switch "启用 开发者工具" - heading "已安装插件" [level=3] - list: - listitem: diff --git a/apps/web/tests/expected/plugin-manager/manager.expected.md b/apps/web/tests/expected/plugin-manager/manager.expected.md index 3d5cb8dfa7..730b82532f 100644 --- a/apps/web/tests/expected/plugin-manager/manager.expected.md +++ b/apps/web/tests/expected/plugin-manager/manager.expected.md @@ -32,16 +32,16 @@ - text: 实验性 在本机使用 SenseVoice 转写录音,首次使用需安装依赖。 - status - switch "启用 语音输入" + - listitem: + - button "查看 自定义插件市场": 自定义插件市场 + - text: 实验性 在插件页添加「发现」标签页,从你添加的插件市场索引浏览和安装插件。 + - status + - switch "启用 自定义插件市场" - listitem: - button "查看 自动授权审查": 自动授权审查 - text: 实验性 提供自动审查权限模式,由模型在每次工具调用前判断是否授权。 - status - switch "启用 自动授权审查" - - listitem: - - button "查看 开发者工具": 开发者工具 - - text: 实验性 查看调试会话原始数据、聊天消息分组数据,以及调试 NodeJS 后端 - - status - - switch "启用 开发者工具" - heading "已安装插件" [level=3] - list: - listitem: diff --git a/apps/web/tests/inspector-late-enable.e2e.ts b/apps/web/tests/inspector-late-enable.e2e.ts index c8c7e6fff3..9db11324c9 100644 --- a/apps/web/tests/inspector-late-enable.e2e.ts +++ b/apps/web/tests/inspector-late-enable.e2e.ts @@ -35,6 +35,7 @@ it('opens bottom DevTools after the Developer Tools bundle is enabled on an alre await page.getByRole('navigation', { name: 'Global panels' }).getByRole('button', { name: 'Plugins', exact: true }).click() const plugins = page.locator('[data-plugin-panel]') + await plugins.getByRole('button', { name: 'More', exact: true }).click() const toggle = plugins.getByRole('switch', { name: 'Enable Developer tools', exact: true }) await toggle.waitFor() expect(await toggle.getAttribute('aria-checked')).toBe('false') @@ -43,6 +44,10 @@ it('opens bottom DevTools after the Developer Tools bundle is enabled on an alre await toggle.click() await expect.poll(() => toggle.getAttribute('aria-checked'), { timeout: PLUGIN_TOGGLE_SETTLE_MS }).toBe('true') + // Enabling a More-page bundle also pins it to the main list. + await plugins.getByRole('button', { name: 'Back to plugins', exact: true }).click() + await plugins.locator('[data-plugin-group="extensions"]').getByRole('switch', { name: 'Enable Developer tools', exact: true }).waitFor() + expect(await toggle.getAttribute('aria-checked')).toBe('true') await panel.waitFor({ state: 'attached', timeout: 20_000 }).catch((error: unknown) => { throw new Error(`Bottom panel did not mount; ${BOOTSTRAP_PATH} responses: ${JSON.stringify(bootstraps)}`, { cause: error }) }) diff --git a/apps/web/tests/plugin-manager.e2e.ts b/apps/web/tests/plugin-manager.e2e.ts index 21826685e8..2e685831a5 100644 --- a/apps/web/tests/plugin-manager.e2e.ts +++ b/apps/web/tests/plugin-manager.e2e.ts @@ -659,11 +659,12 @@ describe('web e2e: plugin manager', () => { expect(await panel.locator('[data-plugin-group="basic"] [data-plugin-item]').count()).toBe(4) expect(await panel.locator('[data-plugin-package="@deepseek-ai/dsh-experimental-inspector"]').count()).toBe(0) expect(await panel.getByRole('switch', { name: '启用 语音输入', exact: true }).getAttribute('aria-checked')).toBe('false') - expect(await panel.getByRole('switch', { name: '启用 开发者工具', exact: true }).getAttribute('aria-checked')).toBe('false') - expect(await panel.getByText('查看调试会话原始数据、聊天消息分组数据,以及调试 NodeJS 后端', { exact: true }).count()).toBe(1) + expect(await panel.getByRole('switch', { name: '启用 自定义插件市场', exact: true }).getAttribute('aria-checked')).toBe('false') + expect(await panel.getByRole('switch', { name: '启用 开发者工具', exact: true }).count()).toBe(0) expect(await panel.getByText(/Cordis|Chrome DevTools/).count()).toBe(0) await panel.getByRole('button', { name: '更多', exact: true }).click() await panel.getByRole('heading', { name: '实验性插件', exact: true, level: 1 }).waitFor() + expect(await panel.getByText('查看调试会话原始数据、聊天消息分组数据,以及调试 NodeJS 后端', { exact: true }).count()).toBe(1) const bundles = await scaffold.ctx.pluginManager.listBundles() expect(bundles.some(bundle => bundle.name === '@deepseek-ai/dsh-experimental-terminal-bundle')).toBe(true) expect(await panel.getByRole('switch', { name: '启用 持久终端', exact: true }).count()).toBe(0) @@ -682,6 +683,7 @@ describe('web e2e: plugin manager', () => { ]))).toEqual([ ['@deepseek-ai/dsh-experimental-agent-team-profile', 1], ['@deepseek-ai/dsh-experimental-voice-input-bundle', 1], + ['@deepseek-ai/dsh-experimental-plugin-market-bundle', 1], ['@deepseek-ai/dsh-experimental-auto-review', 1], ['@deepseek-ai/dsh-experimental-inspector-profile', 1], ['@deepseek-ai/dsh-cua-bundle', 1], @@ -689,7 +691,6 @@ describe('web e2e: plugin manager', () => { ['@deepseek-ai/dsh-experimental-cot-translation-bundle', 1], ['@deepseek-ai/dsh-experimental-session-titles-bundle', 1], ['@deepseek-ai/dsh-experimental-badge-skill-bundle', 1], - ['@deepseek-ai/dsh-experimental-plugin-market-bundle', 1], ['@deepseek-ai/dsh-subagent-codex', 0], ['@deepseek-ai/dsh-subagent-claude-code', 0], ]) diff --git a/docs/user/guide/plugin-market.i18n.yaml b/docs/user/guide/plugin-market.i18n.yaml index 068aa90be6..3a940f4be4 100644 --- a/docs/user/guide/plugin-market.i18n.yaml +++ b/docs/user/guide/plugin-market.i18n.yaml @@ -12,8 +12,8 @@ en: a8d1e6785c3c3c30 zh: 7ea1eaa8204a5a1e /plugin-markets/turn-on-discover: - en: 96b2fd994f8f3e7e - zh: 203e8460ec6aed7a + en: a5024e57052f6e36 + zh: 39b84e247adc9a18 /plugin-markets/browse-and-install: en: cf616bba26958533 zh: 1e32df16a6f4bba7 diff --git a/docs/user/guide/plugin-market.md b/docs/user/guide/plugin-market.md index e4d8793361..a690e46c55 100644 --- a/docs/user/guide/plugin-market.md +++ b/docs/user/guide/plugin-market.md @@ -18,7 +18,7 @@ A plugin market is one JSON index file that lists installable DSH bundles with t ## Turn on Discover -Open **Plugins**, select **More** beside **Experimental plugins**, find **Custom plugin markets**, and switch it on. A **Discover** tab appears next to **Installed**, and Creator mode gains the read-only `plugin_market` tool. Switching the bundle off removes both again. +Open **Plugins**, find **Custom plugin markets** under **Experimental plugins**, and switch it on. A **Discover** tab appears next to **Installed**, and Creator mode gains the read-only `plugin_market` tool. Switching the bundle off removes both again. DSH ships no index source. Select **Discover**, choose **Add index source**, and enter the URL of an index file. A URL must use `http:` or `https:` and must not contain a user name, password, or `#` fragment. Anyone on the network path can change an `http:` index, including the install specs it lists, so use `https:` for a market reached over a network you do not control. Each source belongs to the current profile. diff --git a/docs/user/guide/plugin-market.zh.md b/docs/user/guide/plugin-market.zh.md index 4680c58a58..2385d0a75b 100644 --- a/docs/user/guide/plugin-market.zh.md +++ b/docs/user/guide/plugin-market.zh.md @@ -18,7 +18,7 @@ ## 打开「发现」 -打开**插件**,点击**实验性插件**旁的**更多**,找到**自定义插件市场**并打开开关。**已安装**旁边会出现**发现**标签页,Creator 模式也会获得只读的 `plugin_market` 工具。关闭该组合包会再次移除这两者。 +打开**插件**,在**实验性插件**下找到**自定义插件市场**并打开开关。**已安装**旁边会出现**发现**标签页,Creator 模式也会获得只读的 `plugin_market` 工具。关闭该组合包会再次移除这两者。 DSH 不内置任何索引源。选择**发现**,点击**添加索引源**,输入一个索引文件的 URL。URL 必须使用 `http:` 或 `https:`,并且不能包含用户名、密码或 `#` 片段。网络路径上的任何人都能修改 `http:` 索引,包括其中列出的安装 spec,因此经由不受你控制的网络访问的市场应使用 `https:`。每个索引源属于当前 profile。 diff --git a/packages/client/ui-plugin-manager/src/client/PluginManagerPage.tsx b/packages/client/ui-plugin-manager/src/client/PluginManagerPage.tsx index a3d080d24d..5adf279a1f 100644 --- a/packages/client/ui-plugin-manager/src/client/PluginManagerPage.tsx +++ b/packages/client/ui-plugin-manager/src/client/PluginManagerPage.tsx @@ -113,11 +113,12 @@ const HIDDEN_BUNDLES = new Set([ const EXTENSION_BUNDLES = [ '@deepseek-ai/dsh-experimental-agent-team-profile', '@deepseek-ai/dsh-experimental-voice-input-bundle', + '@deepseek-ai/dsh-experimental-plugin-market-bundle', '@deepseek-ai/dsh-experimental-auto-review', - '@deepseek-ai/dsh-experimental-inspector-profile', ] /** The optional bundles the main list holds back until selected; the More list includes eligible entries. */ const MORE_BUNDLES = [ + '@deepseek-ai/dsh-experimental-inspector-profile', '@deepseek-ai/dsh-cua-bundle', '@deepseek-ai/dsh-experimental-tool-worktree', '@deepseek-ai/dsh-experimental-cot-translation-bundle', @@ -125,7 +126,6 @@ const MORE_BUNDLES = [ '@deepseek-ai/dsh-experimental-session-titles-bundle', '@deepseek-ai/dsh-experimental-badge-skill-bundle', '@deepseek-ai/dsh-experimental-ralph-bundle', - '@deepseek-ai/dsh-experimental-plugin-market-bundle', '@deepseek-ai/dsh-subagent-codex', '@deepseek-ai/dsh-subagent-claude-code', ] diff --git a/packages/experimental/inspector-profile/README.i18n.yaml b/packages/experimental/inspector-profile/README.i18n.yaml index 583ef4608e..b8d6133bdd 100644 --- a/packages/experimental/inspector-profile/README.i18n.yaml +++ b/packages/experimental/inspector-profile/README.i18n.yaml @@ -15,8 +15,8 @@ en: 76368b6b1da79c80 zh: 52384aee991ac542 /deepseek-ai-dsh-experimental-inspector-profile/use-this-package: - en: 25cfe986a0ff91e1 - zh: 0f0c82abda2f3630 + en: 0996fa06b8b8aafc + zh: 42d4f0c08d073d35 /deepseek-ai-dsh-experimental-inspector-profile/understand-the-implementation: en: cc0adef84da59698 zh: c2d1209c14a42088 diff --git a/packages/experimental/inspector-profile/README.md b/packages/experimental/inspector-profile/README.md index 443718d9fb..5a484e32ef 100644 --- a/packages/experimental/inspector-profile/README.md +++ b/packages/experimental/inspector-profile/README.md @@ -24,7 +24,7 @@ Enable this optional bundle to inspect Session data in the Sidebar and open Node ## Use this package -Enable **Developer tools** in Plugin Manager's official group. This selects `@deepseek-ai/dsh-experimental-inspector-profile` for the current Web profile. +Open **Plugins**, select **More** beside **Experimental plugins**, and enable **Developer tools**; once on, it also appears on the main list. This selects `@deepseek-ai/dsh-experimental-inspector-profile` for the current Web profile. Open **Session log** from the Sidebar's new-tab menu or guide. [Session Inspector](../session-inspector/README.md) provides one view with selectable Raw log and Chat group presentations; Raw log is selected initially. diff --git a/packages/experimental/inspector-profile/README.zh.md b/packages/experimental/inspector-profile/README.zh.md index cc75289ff7..4d8d516488 100644 --- a/packages/experimental/inspector-profile/README.zh.md +++ b/packages/experimental/inspector-profile/README.zh.md @@ -24,7 +24,7 @@ kind: "package-bundle" ## 使用本包 -在插件管理器的官方分组中启用**开发者工具**,即可为当前 Web profile 选择 `@deepseek-ai/dsh-experimental-inspector-profile`。 +打开**插件**,点击**实验性插件**旁的**更多**并启用**开发者工具**;启用后它也会出现在主列表中。这会为当前 Web profile 选择 `@deepseek-ai/dsh-experimental-inspector-profile`。 从 Sidebar 的新建 tab 菜单或引导页打开**会话数据诊断**。[Session Inspector](../session-inspector/README.zh.md) 提供一个视图,可选择原始数据或对话分组展示形式,初始选中原始数据。 diff --git a/packages/experimental/plugin-market-bundle/README.i18n.yaml b/packages/experimental/plugin-market-bundle/README.i18n.yaml index a626adf221..6ab1b3e7c9 100644 --- a/packages/experimental/plugin-market-bundle/README.i18n.yaml +++ b/packages/experimental/plugin-market-bundle/README.i18n.yaml @@ -15,8 +15,8 @@ en: 76368b6b1da79c80 zh: 434cf3c1f5db33cd /deepseek-ai-dsh-experimental-plugin-market-bundle/use-this-package: - en: 4929999ed97cbcaf - zh: a815fca7044326fc + en: cbe922a8d2f319a7 + zh: 5cc5f505553c4d37 /deepseek-ai-dsh-experimental-plugin-market-bundle/understand-the-implementation: en: 6cdb2c0f794b001f zh: f18ba67b927b09b8 diff --git a/packages/experimental/plugin-market-bundle/README.md b/packages/experimental/plugin-market-bundle/README.md index 7701853085..89d4ac67fd 100644 --- a/packages/experimental/plugin-market-bundle/README.md +++ b/packages/experimental/plugin-market-bundle/README.md @@ -24,7 +24,7 @@ This optional bundle mounts custom plugin markets: the Host [`pluginMarket`](../ ## Use this package -Open **Plugins** in the Web sidebar, select **More** beside **Experimental plugins**, and switch on **Custom plugin markets**; once on, it also appears on the main list. The page then shows the **Installed** and **Discover** tabs; **Discover** adds index sources and installs their bundles. Switching the bundle off removes the Discover tab and the `plugin_market` tool; the saved index sources stay in the profile. +Open **Plugins** in the Web sidebar and switch on **Custom plugin markets** under **Experimental plugins**. The page then shows the **Installed** and **Discover** tabs; **Discover** adds index sources and installs their bundles. Switching the bundle off removes the Discover tab and the `plugin_market` tool; the saved index sources stay in the profile. ----- diff --git a/packages/experimental/plugin-market-bundle/README.zh.md b/packages/experimental/plugin-market-bundle/README.zh.md index e47fc96960..bcbde44605 100644 --- a/packages/experimental/plugin-market-bundle/README.zh.md +++ b/packages/experimental/plugin-market-bundle/README.zh.md @@ -24,7 +24,7 @@ kind: "package-bundle" ## 使用此包 -打开 Web 侧栏中的**插件**,点击**实验性插件**旁的**更多**,启用**自定义插件市场**;启用后它也会出现在主列表中。页面随后显示**已安装**和**发现**两个标签页;**发现**用于添加索引源并安装其中的组合包。禁用此组合包会移除发现标签页和 `plugin_market` 工具;已保存的索引源保留在 profile 中。 +打开 Web 侧栏中的**插件**,在**实验性插件**下启用**自定义插件市场**。页面随后显示**已安装**和**发现**两个标签页;**发现**用于添加索引源并安装其中的组合包。禁用此组合包会移除发现标签页和 `plugin_market` 工具;已保存的索引源保留在 profile 中。 -----