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 中。
-----