Browse Source

refactor(web): rename ui-settings-plugin-manager to ui-plugin-manager

The package hosts the sidebar's Plugins panel and a preset's capabilities
section, not a settings tab; the directory, the package name, and its
dictionary namespace (`pluginManager`) say so, and every reference, catalog,
and note follows.
Yichen Jiang 1 week ago
parent
commit
08974835d7
44 changed files with 112 additions and 112 deletions
  1. 2 2
      .agents/notes/implemented/architecture/2026-09-04-plugin-management-in-web-settings.i18n.yaml
  2. 1 1
      .agents/notes/implemented/architecture/2026-09-04-plugin-management-in-web-settings.md
  3. 1 1
      .agents/notes/implemented/architecture/2026-09-04-plugin-management-in-web-settings.zh.md
  4. 2 2
      .agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.i18n.yaml
  5. 2 2
      .agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.md
  6. 2 2
      .agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.zh.md
  7. 2 2
      docs/config-catalog.i18n.yaml
  8. 1 1
      docs/config-catalog.md
  9. 1 1
      docs/config-catalog.zh.md
  10. 2 2
      docs/module-graph.i18n.yaml
  11. 2 2
      docs/module-graph.md
  12. 2 2
      docs/module-graph.zh.md
  13. 2 2
      packages/bundle/web-app/cordis.patch.yml
  14. 1 1
      packages/bundle/web-app/package.json
  15. 2 2
      packages/client/README.i18n.yaml
  16. 1 1
      packages/client/README.md
  17. 1 1
      packages/client/README.zh.md
  18. 3 3
      packages/client/ui-plugin-manager/README.i18n.yaml
  19. 1 1
      packages/client/ui-plugin-manager/README.md
  20. 1 1
      packages/client/ui-plugin-manager/README.zh.md
  21. 2 2
      packages/client/ui-plugin-manager/package.json
  22. 0 0
      packages/client/ui-plugin-manager/src/client/NoticeLine.tsx
  23. 0 0
      packages/client/ui-plugin-manager/src/client/PluginManagerPage.module.css
  24. 1 1
      packages/client/ui-plugin-manager/src/client/PluginManagerPage.tsx
  25. 0 0
      packages/client/ui-plugin-manager/src/client/PluginsPanelIcon.tsx
  26. 1 1
      packages/client/ui-plugin-manager/src/client/PresetPluginsSection.tsx
  27. 5 5
      packages/client/ui-plugin-manager/src/client/index.ts
  28. 0 0
      packages/client/ui-plugin-manager/src/client/locales.ts
  29. 0 0
      packages/client/ui-plugin-manager/src/client/manager-store.ts
  30. 1 1
      packages/client/ui-plugin-manager/src/client/presentation.ts
  31. 0 0
      packages/client/ui-plugin-manager/src/css-modules.d.ts
  32. 0 0
      packages/client/ui-plugin-manager/src/index.ts
  33. 1 1
      packages/client/ui-plugin-manager/tests/browser-plugin.client.spec.tsx
  34. 0 0
      packages/client/ui-plugin-manager/tests/components.client.spec.tsx
  35. 0 0
      packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts
  36. 0 0
      packages/client/ui-plugin-manager/tests/preset-section.client.spec.tsx
  37. 0 0
      packages/client/ui-plugin-manager/tsconfig.json
  38. 3 0
      packages/client/ui-plugin-manager/tsdown.config.ts
  39. 0 3
      packages/client/ui-settings-plugin-manager/tsdown.config.ts
  40. 3 3
      packages/extensions/cordis-client-runner/src/client/slot-catalog.ts
  41. 60 60
      pnpm-lock.yaml
  42. 1 1
      scripts/verify-package-readme-model-experience.ts
  43. 1 1
      tsconfig.base.json
  44. 1 1
      tsconfig.client.json

+ 2 - 2
.agents/notes/implemented/architecture/2026-09-04-plugin-management-in-web-settings.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-09-04-plugin-management-in-web-settings.md
-2026-09-04-plugin-management-in-web-settings.md: a13b3b45a566c1c6e2965ec69e758c3f3e293614
-2026-09-04-plugin-management-in-web-settings.zh.md: b3a7dc0fe5917a79462bfe0878c47bbc870b5ee2
+2026-09-04-plugin-management-in-web-settings.md: ea0af030e89c5e352c71fe9be0daaaf3beb5af83
+2026-09-04-plugin-management-in-web-settings.zh.md: 571e6df39551b6b592ac5e03c72c23d1d7f7d34d

File diff suppressed because it is too large
+ 1 - 1
.agents/notes/implemented/architecture/2026-09-04-plugin-management-in-web-settings.md


File diff suppressed because it is too large
+ 1 - 1
.agents/notes/implemented/architecture/2026-09-04-plugin-management-in-web-settings.zh.md


+ 2 - 2
.agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.md
-2026-09-09-plugin-management-in-the-web-sidebar.md: 12bba6196fb13bfd90a13afd5488598533670e53
-2026-09-09-plugin-management-in-the-web-sidebar.zh.md: 2255d006fe02f7430bcb445243f04cd95172880b
+2026-09-09-plugin-management-in-the-web-sidebar.md: 9dd717ce757fb606a2454732c90e239c86ff40fa
+2026-09-09-plugin-management-in-the-web-sidebar.zh.md: 90ae509e7815d7eb63b9e48aa0ad239862ac1a77

+ 2 - 2
.agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.md

@@ -10,7 +10,7 @@ English | [中文](2026-09-09-plugin-management-in-the-web-sidebar.zh.md)
 
 ## Decision
 
-**Management is a sidebar entry; configuration stays in Settings.** `ui-settings-plugin-manager` registers a `sidebar.panellist` entry and the `main` panel it opens under one id, `plugins`: the sidebar renders the localized **Plugins** label, this package the icon and the page. The page is root-scoped and bound to no Session; it carries its own heading, intro, refresh, and **Add plugin**, and scrolls inside the main column. What the page shows did not change: the packs and plugins, each package's page, the install dialog, and the confirmations are the former tab's. The Settings **Plugins** section keeps plugin configuration, and `ui-settings-plugins` renders a single `settings.plugins.tab` contribution as the page itself, without a tab strip, so the section reads as the configuration page it now is. The preset detail page in Settings keeps its **Capabilities** section over the same store.
+**Management is a sidebar entry; configuration stays in Settings.** `ui-plugin-manager` registers a `sidebar.panellist` entry and the `main` panel it opens under one id, `plugins`: the sidebar renders the localized **Plugins** label, this package the icon and the page. The page is root-scoped and bound to no Session; it carries its own heading, intro, refresh, and **Add plugin**, and scrolls inside the main column. What the page shows did not change: the packs and plugins, each package's page, the install dialog, and the confirmations are the former tab's. The Settings **Plugins** section keeps plugin configuration, and `ui-settings-plugins` renders a single `settings.plugins.tab` contribution as the page itself, without a tab strip, so the section reads as the configuration page it now is. The preset detail page in Settings keeps its **Capabilities** section over the same store.
 
 **Configuration does not move.** A plugin's configuration binds a settings namespace under a scope — the global instance or one preset's — and the Settings shell owns that scope machinery, one selection serving the section and every preset's detail page. Moving the cards onto the management page would duplicate the shell's scope selection and split settings across two entry points, while a person looks for a value in Settings. The plugin's own page will instead point at its configurable sections once Settings can be opened on one section, which needs only a deep link.
 
@@ -26,4 +26,4 @@ The web bundle's panel list is no longer empty: the **Plugins** entry sits betwe
 
 ## Testing
 
-`packages/client/ui-settings-plugin-manager/tests` pin the two registrations under one id and the page's rendering; `packages/client/ui-settings-plugins/tests` the tab-less single contribution; the web e2e scenarios above drive the panel and the section over a scaffold.
+`packages/client/ui-plugin-manager/tests` pin the two registrations under one id and the page's rendering; `packages/client/ui-settings-plugins/tests` the tab-less single contribution; the web e2e scenarios above drive the panel and the section over a scaffold.

+ 2 - 2
.agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.zh.md

@@ -10,7 +10,7 @@ Status: implemented
 
 ## 决定
 
-**管理是侧栏入口;配置留在设置里。** `ui-settings-plugin-manager` 用同一个 id `plugins` 注册一个 `sidebar.panellist` 条目和它打开的 `main` 面板:侧栏渲染本地化的**插件**标签,本包提供图标与页面。页面是根级作用域,不绑定任何 Session;它带自己的标题、简介、刷新与**添加插件**,并在主列内部滚动。页面显示的内容没有变:插件包与插件、每个包的页面、安装对话框与各个确认框都来自原来的标签页。设置的**插件**分区保留插件配置,`ui-settings-plugins` 把唯一的 `settings.plugins.tab` 贡献直接渲染成这一页,没有标签条,因此该分区读起来就是它现在的样子——配置页。设置里的预设详情页保留读同一个 store 的**能力**段。
+**管理是侧栏入口;配置留在设置里。** `ui-plugin-manager` 用同一个 id `plugins` 注册一个 `sidebar.panellist` 条目和它打开的 `main` 面板:侧栏渲染本地化的**插件**标签,本包提供图标与页面。页面是根级作用域,不绑定任何 Session;它带自己的标题、简介、刷新与**添加插件**,并在主列内部滚动。页面显示的内容没有变:插件包与插件、每个包的页面、安装对话框与各个确认框都来自原来的标签页。设置的**插件**分区保留插件配置,`ui-settings-plugins` 把唯一的 `settings.plugins.tab` 贡献直接渲染成这一页,没有标签条,因此该分区读起来就是它现在的样子——配置页。设置里的预设详情页保留读同一个 store 的**能力**段。
 
 **配置不搬。** 插件的配置把一个 settings 命名空间绑定在某个 scope 下——全局实例或某个预设——而设置外壳拥有这套 scope 机制,一处选择同时服务分区与每个预设的详情页。把卡片搬到管理页会复制外壳的 scope 选择,并把设置拆到两个入口,而人找一个值时会去设置里找。等设置能按分区打开后,插件自己的页面会转而指向它的可配置分区,那只需要一个深链接。
 
@@ -26,4 +26,4 @@ web bundle 的面板列表不再为空:**插件**入口位于新建会话与
 
 ## 测试
 
-`packages/client/ui-settings-plugin-manager/tests` 钉住同一 id 下的两处注册与页面的渲染;`packages/client/ui-settings-plugins/tests` 钉住没有标签条的单一贡献;上述 web e2e 场景在脚手架上驱动面板与分区。
+`packages/client/ui-plugin-manager/tests` 钉住同一 id 下的两处注册与页面的渲染;`packages/client/ui-settings-plugins/tests` 钉住没有标签条的单一贡献;上述 web e2e 场景在脚手架上驱动面板与分区。

+ 2 - 2
docs/config-catalog.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write docs/config-catalog.md
-config-catalog.md: 4ad6bd21927b7be3324a94a755625b9e203160bc
-config-catalog.zh.md: 5514537b000db68d6d5da9cee13b5fc8d2207539
+config-catalog.md: ffc82b63458287ce38006048cba0332581529a12
+config-catalog.zh.md: 746f03a3e84280c041ac0506ed3f723874a075fd

+ 1 - 1
docs/config-catalog.md

@@ -3491,6 +3491,7 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
 - `@deepseek-ai/dsh-client-ui-open-in-app` ([`packages/client/ui-open-in-app/src/index.ts`](../packages/client/ui-open-in-app/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-permission-presets` ([`packages/client/ui-permission-presets/src/index.ts`](../packages/client/ui-permission-presets/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-plan` ([`packages/client/ui-plan/src/index.ts`](../packages/client/ui-plan/src/index.ts))
+- `@deepseek-ai/dsh-client-ui-plugin-manager` ([`packages/client/ui-plugin-manager/src/index.ts`](../packages/client/ui-plugin-manager/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-reference` ([`packages/client/ui-reference/src/index.ts`](../packages/client/ui-reference/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-renderer` ([`packages/client/ui-renderer/src/index.ts`](../packages/client/ui-renderer/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-schedule` ([`packages/client/ui-schedule/src/index.ts`](../packages/client/ui-schedule/src/index.ts))
@@ -3498,7 +3499,6 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
 - `@deepseek-ai/dsh-client-ui-settings` ([`packages/client/ui-settings/src/index.ts`](../packages/client/ui-settings/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-settings-general` ([`packages/client/ui-settings-general/src/index.ts`](../packages/client/ui-settings-general/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-settings-models` ([`packages/client/ui-settings-models/src/index.ts`](../packages/client/ui-settings-models/src/index.ts))
-- `@deepseek-ai/dsh-client-ui-settings-plugin-manager` ([`packages/client/ui-settings-plugin-manager/src/index.ts`](../packages/client/ui-settings-plugin-manager/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-settings-plugins` ([`packages/client/ui-settings-plugins/src/index.ts`](../packages/client/ui-settings-plugins/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-sidebar` ([`packages/client/ui-sidebar/src/index.ts`](../packages/client/ui-sidebar/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-sidebar-files` ([`packages/client/ui-sidebar-files/src/index.ts`](../packages/client/ui-sidebar-files/src/index.ts))

+ 1 - 1
docs/config-catalog.zh.md

@@ -3494,6 +3494,7 @@ export interface Config {
 - `@deepseek-ai/dsh-client-ui-open-in-app`([`packages/client/ui-open-in-app/src/index.ts`](../packages/client/ui-open-in-app/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-permission-presets`([`packages/client/ui-permission-presets/src/index.ts`](../packages/client/ui-permission-presets/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-plan`([`packages/client/ui-plan/src/index.ts`](../packages/client/ui-plan/src/index.ts))
+- `@deepseek-ai/dsh-client-ui-plugin-manager`([`packages/client/ui-plugin-manager/src/index.ts`](../packages/client/ui-plugin-manager/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-reference`([`packages/client/ui-reference/src/index.ts`](../packages/client/ui-reference/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-renderer`([`packages/client/ui-renderer/src/index.ts`](../packages/client/ui-renderer/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-schedule`([`packages/client/ui-schedule/src/index.ts`](../packages/client/ui-schedule/src/index.ts))
@@ -3501,7 +3502,6 @@ export interface Config {
 - `@deepseek-ai/dsh-client-ui-settings`([`packages/client/ui-settings/src/index.ts`](../packages/client/ui-settings/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-settings-general`([`packages/client/ui-settings-general/src/index.ts`](../packages/client/ui-settings-general/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-settings-models`([`packages/client/ui-settings-models/src/index.ts`](../packages/client/ui-settings-models/src/index.ts))
-- `@deepseek-ai/dsh-client-ui-settings-plugin-manager`([`packages/client/ui-settings-plugin-manager/src/index.ts`](../packages/client/ui-settings-plugin-manager/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-settings-plugins`([`packages/client/ui-settings-plugins/src/index.ts`](../packages/client/ui-settings-plugins/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-sidebar`([`packages/client/ui-sidebar/src/index.ts`](../packages/client/ui-sidebar/src/index.ts))
 - `@deepseek-ai/dsh-client-ui-sidebar-files`([`packages/client/ui-sidebar-files/src/index.ts`](../packages/client/ui-sidebar-files/src/index.ts))

+ 2 - 2
docs/module-graph.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write docs/module-graph.md
-module-graph.md: d489f6ca0205cbc40751b86f8f51c568623ff446
-module-graph.zh.md: 8c0f0fdaee7ad2204e25b7443420ab295851edbc
+module-graph.md: bb8874cedb3628e748f182a32c6636ab149b68ef
+module-graph.zh.md: 6bb6ed96491c035e1d64d3dbf1a500741eaf5468

+ 2 - 2
docs/module-graph.md

@@ -163,6 +163,7 @@ flowchart TD
     pkg_client_ui_open_in_app["client-ui-open-in-app"]
     pkg_client_ui_permission_presets["client-ui-permission-presets"]
     pkg_client_ui_plan["client-ui-plan"]
+    pkg_client_ui_plugin_manager["client-ui-plugin-manager"]
     pkg_client_ui_primitives["client-ui-primitives"]
     pkg_client_ui_reference["client-ui-reference"]
     pkg_client_ui_renderer["client-ui-renderer"]
@@ -171,7 +172,6 @@ flowchart TD
     pkg_client_ui_settings["client-ui-settings"]
     pkg_client_ui_settings_general["client-ui-settings-general"]
     pkg_client_ui_settings_models["client-ui-settings-models"]
-    pkg_client_ui_settings_plugin_manager["client-ui-settings-plugin-manager"]
     pkg_client_ui_settings_plugins["client-ui-settings-plugins"]
     pkg_client_ui_sidebar["client-ui-sidebar"]
     pkg_client_ui_sidebar_files["client-ui-sidebar-files"]
@@ -1245,6 +1245,7 @@ flowchart TD
 | [`client-ui-open-in-app`](../packages/client/ui-open-in-app) | `client` | — |
 | [`client-ui-permission-presets`](../packages/client/ui-permission-presets) | `client` | — |
 | [`client-ui-plan`](../packages/client/ui-plan) | `client` | — |
+| [`client-ui-plugin-manager`](../packages/client/ui-plugin-manager) | `client` | — |
 | [`client-ui-primitives`](../packages/client/ui-primitives) | `client` | — |
 | [`client-ui-reference`](../packages/client/ui-reference) | `client` | — |
 | [`client-ui-renderer`](../packages/client/ui-renderer) | `client` | — |
@@ -1253,7 +1254,6 @@ flowchart TD
 | [`client-ui-settings`](../packages/client/ui-settings) | `client` | — |
 | [`client-ui-settings-general`](../packages/client/ui-settings-general) | `client` | — |
 | [`client-ui-settings-models`](../packages/client/ui-settings-models) | `client` | — |
-| [`client-ui-settings-plugin-manager`](../packages/client/ui-settings-plugin-manager) | `client` | — |
 | [`client-ui-settings-plugins`](../packages/client/ui-settings-plugins) | `client` | — |
 | [`client-ui-sidebar`](../packages/client/ui-sidebar) | `client` | — |
 | [`client-ui-sidebar-files`](../packages/client/ui-sidebar-files) | `client` | — |

+ 2 - 2
docs/module-graph.zh.md

@@ -165,6 +165,7 @@ flowchart TD
     pkg_client_ui_open_in_app["client-ui-open-in-app"]
     pkg_client_ui_permission_presets["client-ui-permission-presets"]
     pkg_client_ui_plan["client-ui-plan"]
+    pkg_client_ui_plugin_manager["client-ui-plugin-manager"]
     pkg_client_ui_primitives["client-ui-primitives"]
     pkg_client_ui_reference["client-ui-reference"]
     pkg_client_ui_renderer["client-ui-renderer"]
@@ -173,7 +174,6 @@ flowchart TD
     pkg_client_ui_settings["client-ui-settings"]
     pkg_client_ui_settings_general["client-ui-settings-general"]
     pkg_client_ui_settings_models["client-ui-settings-models"]
-    pkg_client_ui_settings_plugin_manager["client-ui-settings-plugin-manager"]
     pkg_client_ui_settings_plugins["client-ui-settings-plugins"]
     pkg_client_ui_sidebar["client-ui-sidebar"]
     pkg_client_ui_sidebar_files["client-ui-sidebar-files"]
@@ -1247,6 +1247,7 @@ flowchart TD
 | [`client-ui-open-in-app`](../packages/client/ui-open-in-app) | `client` | — |
 | [`client-ui-permission-presets`](../packages/client/ui-permission-presets) | `client` | — |
 | [`client-ui-plan`](../packages/client/ui-plan) | `client` | — |
+| [`client-ui-plugin-manager`](../packages/client/ui-plugin-manager) | `client` | — |
 | [`client-ui-primitives`](../packages/client/ui-primitives) | `client` | — |
 | [`client-ui-reference`](../packages/client/ui-reference) | `client` | — |
 | [`client-ui-renderer`](../packages/client/ui-renderer) | `client` | — |
@@ -1255,7 +1256,6 @@ flowchart TD
 | [`client-ui-settings`](../packages/client/ui-settings) | `client` | — |
 | [`client-ui-settings-general`](../packages/client/ui-settings-general) | `client` | — |
 | [`client-ui-settings-models`](../packages/client/ui-settings-models) | `client` | — |
-| [`client-ui-settings-plugin-manager`](../packages/client/ui-settings-plugin-manager) | `client` | — |
 | [`client-ui-settings-plugins`](../packages/client/ui-settings-plugins) | `client` | — |
 | [`client-ui-sidebar`](../packages/client/ui-sidebar) | `client` | — |
 | [`client-ui-sidebar-files`](../packages/client/ui-sidebar-files) | `client` | — |

+ 2 - 2
packages/bundle/web-app/cordis.patch.yml

@@ -252,8 +252,8 @@
 
     # Plugin management: install, enable, disable, retry, and compose the
     # profile's packages. Without a profile runtime it reports itself unavailable.
-    - id: ui-settings-plugin-manager
-      name: '@deepseek-ai/dsh-client-ui-settings-plugin-manager'
+    - id: ui-plugin-manager
+      name: '@deepseek-ai/dsh-client-ui-plugin-manager'
 
     - id: ui-conversation
       name: '@deepseek-ai/dsh-client-ui-conversation'

+ 1 - 1
packages/bundle/web-app/package.json

@@ -79,7 +79,7 @@
     "@deepseek-ai/dsh-client-ui-settings": "workspace:^",
     "@deepseek-ai/dsh-client-ui-settings-general": "workspace:^",
     "@deepseek-ai/dsh-client-ui-settings-models": "workspace:^",
-    "@deepseek-ai/dsh-client-ui-settings-plugin-manager": "workspace:^",
+    "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:^",
     "@deepseek-ai/dsh-client-ui-settings-plugins": "workspace:^",
     "@deepseek-ai/dsh-client-ui-sidebar": "workspace:^",
     "@deepseek-ai/dsh-client-ui-sidebar-files": "workspace:^",

+ 2 - 2
packages/client/README.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write packages/client/README.md
-README.md: b1d4f0e58474cdb01428abbd282e8995cc95399b
-README.zh.md: 4ae786dda57635fdf397b746f54a2b6797affe4c
+README.md: 964d2dfd04f01c37b23a53948fa151deebbde8fa
+README.zh.md: e643a97e98be7a8b370ab071d66f193a3215c5f3

+ 1 - 1
packages/client/README.md

@@ -69,7 +69,7 @@ The kernel packages boot and serve the page; the UI feature packages present it.
 | [`ui-settings/`](ui-settings/README.md) | Hosts the settings interface and its extension areas | — |
 | [`ui-settings-general/`](ui-settings-general/README.md) | Provides the general settings section | — |
 | [`ui-settings-models/`](ui-settings-models/README.md) | Provides model-provider configuration and DeepSeek onboarding | — |
-| [`ui-settings-plugin-manager/`](ui-settings-plugin-manager/README.md) | Contributes the plugin management tab to Plugins settings: install, enable, disable, retry, and compose packages | — |
+| [`ui-plugin-manager/`](ui-plugin-manager/README.md) | Contributes the plugin management tab to Plugins settings: install, enable, disable, retry, and compose packages | — |
 | [`ui-deliverables/`](ui-deliverables/README.md) | Produces the produced-files turn tail and clickable final-response file references | — |
 | [`ui-message-feedback/`](ui-message-feedback/README.md) | Contributes per-message feedback controls to the assistant-message action strip | — |
 | [`ui-directory-picker-browse/`](ui-directory-picker-browse/README.md) | In-app directory browsing surface for the workspace directory flow | — |

+ 1 - 1
packages/client/README.zh.md

@@ -69,7 +69,7 @@ kind: "package-group"
 | [`ui-settings/`](ui-settings/README.zh.md) | 承载设置界面及其扩展区域 | — |
 | [`ui-settings-general/`](ui-settings-general/README.zh.md) | 提供常规设置分区 | — |
 | [`ui-settings-models/`](ui-settings-models/README.zh.md) | 提供模型提供方配置与 DeepSeek 引导 | — |
-| [`ui-settings-plugin-manager/`](ui-settings-plugin-manager/README.zh.md) | 向“插件”设置贡献插件管理标签页:安装、启用、停用、重试与组合包 | — |
+| [`ui-plugin-manager/`](ui-plugin-manager/README.zh.md) | 向“插件”设置贡献插件管理标签页:安装、启用、停用、重试与组合包 | — |
 | [`ui-deliverables/`](ui-deliverables/README.zh.md) | 生成已产出文件的轮次尾部与可点击的最终响应文件引用 | — |
 | [`ui-message-feedback/`](ui-message-feedback/README.zh.md) | 向助手消息操作条贡献逐消息反馈控件 | — |
 | [`ui-directory-picker-browse/`](ui-directory-picker-browse/README.zh.md) | 面向工作区目录流程的应用内目录浏览界面 | — |

+ 3 - 3
packages/client/ui-settings-plugin-manager/README.i18n.yaml → packages/client/ui-plugin-manager/README.i18n.yaml

@@ -1,6 +1,6 @@
 # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
-#   pnpm run verify-translation-pairing --write packages/client/ui-settings-plugin-manager/README.md
-README.md: 1feffda15c4db945541589d45c16feedb0ec7e34
-README.zh.md: fbc737ef8cd746d39c0114f697da72f6be8ea6ab
+#   pnpm run verify-translation-pairing --write packages/client/ui-plugin-manager/README.md
+README.md: 72b9bf02de66d0c6c8ae86e05e9f3f19d9981863
+README.zh.md: 527b8a3f6c61fcf57b99e8589e947ead552102db

+ 1 - 1
packages/client/ui-settings-plugin-manager/README.md → packages/client/ui-plugin-manager/README.md

@@ -3,7 +3,7 @@ description: "Plugin management behind the Web sidebar's Plugins entry for the d
 kind: "package-reference"
 ---
 
-# @deepseek-ai/dsh-client-ui-settings-plugin-manager
+# @deepseek-ai/dsh-client-ui-plugin-manager
 
 English | [中文](README.zh.md)
 

+ 1 - 1
packages/client/ui-settings-plugin-manager/README.zh.md → packages/client/ui-plugin-manager/README.zh.md

@@ -3,7 +3,7 @@ description: "dsh Web 客户端左侧栏「插件」入口背后的插件管理
 kind: "package-reference"
 ---
 
-# @deepseek-ai/dsh-client-ui-settings-plugin-manager
+# @deepseek-ai/dsh-client-ui-plugin-manager
 
 [English](README.md) | 中文
 

+ 2 - 2
packages/client/ui-settings-plugin-manager/package.json → packages/client/ui-plugin-manager/package.json

@@ -1,5 +1,5 @@
 {
-  "name": "@deepseek-ai/dsh-client-ui-settings-plugin-manager",
+  "name": "@deepseek-ai/dsh-client-ui-plugin-manager",
   "description": "Plugin management for the dsh web client: the sidebar Plugins panel installs, enables, disables, retries, and composes installed plugin packages",
   "version": "0.1.5-alpha.1",
   "publishConfig": {
@@ -8,7 +8,7 @@
   "repository": {
     "type": "git",
     "url": "git+https://github.com/deepseek-ai/deepseek-harness.git",
-    "directory": "packages/client/ui-settings-plugin-manager"
+    "directory": "packages/client/ui-plugin-manager"
   },
   "type": "module",
   "main": "lib/index.js",

+ 0 - 0
packages/client/ui-settings-plugin-manager/src/client/NoticeLine.tsx → packages/client/ui-plugin-manager/src/client/NoticeLine.tsx


+ 0 - 0
packages/client/ui-settings-plugin-manager/src/client/PluginManagerPage.module.css → packages/client/ui-plugin-manager/src/client/PluginManagerPage.module.css


+ 1 - 1
packages/client/ui-settings-plugin-manager/src/client/PluginManagerPage.tsx → packages/client/ui-plugin-manager/src/client/PluginManagerPage.tsx

@@ -30,7 +30,7 @@ import css from './PluginManagerPage.module.css'
 /** Full component props assembled by the main slot renderer. */
 export type PluginManagerPageProps =
   PropsRuntime<'main'>
-  & PropsLocale<'settings.pluginManager'>
+  & PropsLocale<'pluginManager'>
   & InjectFace<PluginManagerFace>
 
 type RowView = PluginPackageView['rows'][number]

+ 0 - 0
packages/client/ui-settings-plugin-manager/src/client/PluginsPanelIcon.tsx → packages/client/ui-plugin-manager/src/client/PluginsPanelIcon.tsx


+ 1 - 1
packages/client/ui-settings-plugin-manager/src/client/PresetPluginsSection.tsx → packages/client/ui-plugin-manager/src/client/PresetPluginsSection.tsx

@@ -22,7 +22,7 @@ import css from './PluginManagerPage.module.css'
 /** Full component props assembled by the slot renderer. */
 export type PresetPluginsSectionProps =
   PropsRuntime<'settings.agentPreset.detail'>
-  & PropsLocale<'settings.pluginManager'>
+  & PropsLocale<'pluginManager'>
   & InjectFace<PluginManagerFace>
 
 /** One module the preset could still add, carried through the menu as its item id. */

+ 5 - 5
packages/client/ui-settings-plugin-manager/src/client/index.ts → packages/client/ui-plugin-manager/src/client/index.ts

@@ -42,12 +42,12 @@ export type { PluginManagerLocaleKey } from './locales.ts'
 declare module '@deepseek-ai/dsh-client-ui-slots' {
   interface LocaleNamespaceMap {
     /** Plugin manager tab copy. */
-    'settings.pluginManager': PluginManagerLocaleKey
+    'pluginManager': PluginManagerLocaleKey
   }
 }
 
 /** Dictionary namespace owned by this plugin. */
-export const NS = 'settings.pluginManager'
+export const NS = 'pluginManager'
 
 /** The id shared by the sidebar entry and the main panel it opens. */
 export const PANEL_ID = 'plugins' as MainPanelId
@@ -62,11 +62,11 @@ export const inject = ['slots', 'locale', 'remote', 'remote.plugins', 'remote.pl
  * @param ctx - the browser plugin context.
  */
 export function apply(ctx: ClientContext): void {
-  ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ui-settings-plugin-manager: dictionaries')
+  ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ui-plugin-manager: dictionaries')
   const t = ctx.locale.bind(NS)
   const agentPresetCopy = ctx.locale.bind('settings.agentPreset')
   const controller = new PluginManagerController(ctx, preset => presetDisplayText(preset, agentPresetCopy).name)
-  ctx.effect(() => () => { controller.dispose() }, 'ui-settings-plugin-manager: controller')
+  ctx.effect(() => () => { controller.dispose() }, 'ui-plugin-manager: controller')
   // The Host says when what is installed, enabled, or composed changed — from
   // this page, the CLI, or another browser — and streams install output.
   ctx.effect(() => {
@@ -80,7 +80,7 @@ export function apply(ctx: ClientContext): void {
       ctx.on('connection/reset', refresh),
     ]
     return () => { for (const dispose of disposers) dispose() }
-  }, 'ui-settings-plugin-manager: host invalidations')
+  }, 'ui-plugin-manager: host invalidations')
 
   // The page is a global panel: it belongs to the profile, not to a Session,
   // and the sidebar's entry selects it. How a plugin is configured stays in

+ 0 - 0
packages/client/ui-settings-plugin-manager/src/client/locales.ts → packages/client/ui-plugin-manager/src/client/locales.ts


+ 0 - 0
packages/client/ui-settings-plugin-manager/src/client/manager-store.ts → packages/client/ui-plugin-manager/src/client/manager-store.ts


+ 1 - 1
packages/client/ui-settings-plugin-manager/src/client/presentation.ts → packages/client/ui-plugin-manager/src/client/presentation.ts

@@ -11,7 +11,7 @@ import { zh, type PluginManagerLocaleKey } from './locales.ts'
 import type { ManagerNotice, PresetRow } from './manager-store.ts'
 
 /** The translate seat of the manager's dictionary. */
-export type Translate = PropsLocale<'settings.pluginManager'>['t']
+export type Translate = PropsLocale<'pluginManager'>['t']
 
 /** The scope every harness module is published under. */
 const FIRST_PARTY_SCOPE = '@deepseek-ai/'

+ 0 - 0
packages/client/ui-settings-plugin-manager/src/css-modules.d.ts → packages/client/ui-plugin-manager/src/css-modules.d.ts


+ 0 - 0
packages/client/ui-settings-plugin-manager/src/index.ts → packages/client/ui-plugin-manager/src/index.ts


+ 1 - 1
packages/client/ui-settings-plugin-manager/tests/browser-plugin.client.spec.tsx → packages/client/ui-plugin-manager/tests/browser-plugin.client.spec.tsx

@@ -47,7 +47,7 @@ function declare(slots: SlotRegistry): () => void {
   } as never, () => null)
 }
 
-describe('ui-settings-plugin-manager browser plugin', () => {
+describe('ui-plugin-manager browser plugin', () => {
   it('keeps the host Loader entry inert', () => {
     expect(hostApply).not.toThrow()
   })

+ 0 - 0
packages/client/ui-settings-plugin-manager/tests/components.client.spec.tsx → packages/client/ui-plugin-manager/tests/components.client.spec.tsx


+ 0 - 0
packages/client/ui-settings-plugin-manager/tests/manager-store.client.spec.ts → packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts


+ 0 - 0
packages/client/ui-settings-plugin-manager/tests/preset-section.client.spec.tsx → packages/client/ui-plugin-manager/tests/preset-section.client.spec.tsx


+ 0 - 0
packages/client/ui-settings-plugin-manager/tsconfig.json → packages/client/ui-plugin-manager/tsconfig.json


+ 3 - 0
packages/client/ui-plugin-manager/tsdown.config.ts

@@ -0,0 +1,3 @@
+import { clientBundle } from '../tsdown.client.ts'
+
+export default clientBundle('@deepseek-ai/dsh-client-ui-plugin-manager', ['lib/types/index.js'])

+ 0 - 3
packages/client/ui-settings-plugin-manager/tsdown.config.ts

@@ -1,3 +0,0 @@
-import { clientBundle } from '../tsdown.client.ts'
-
-export default clientBundle('@deepseek-ai/dsh-client-ui-settings-plugin-manager', ['lib/types/index.js'])

+ 3 - 3
packages/extensions/cordis-client-runner/src/client/slot-catalog.ts

@@ -1385,7 +1385,7 @@ export const CLIENT_SLOT_API: readonly ClientSlotEntry[] = [
     declaredBy: 'an entry in \'root\' (client-ui-layout), so it exists while that entry is mounted',
     occupants: [
       'client-ui-conversation ConversationPanel key \'conversation\'',
-      'client-ui-settings-plugin-manager PluginManagerPage',
+      'client-ui-plugin-manager PluginManagerPage',
     ],
     replaceRisk: 'shadows-shipped-ui',
     example: 'return {\n  inject: [\'slots\'],\n  apply(ctx) {\n    ctx.slots.inject(\'main\', () => ctx.slots.register(\n      { name: \'main\', key: \'<one key the owner dispatches>\' },\n      () => React.createElement(\'div\', null, \'hello\'),\n    ))\n  },\n}',
@@ -1615,7 +1615,7 @@ export const CLIENT_SLOT_API: readonly ClientSlotEntry[] = [
     slotInject: '',
     declaredBy: 'an entry in \'settings.section\' (client-ui-agent-preset), so it exists while that entry is mounted',
     occupants: [
-      'client-ui-settings-plugin-manager PresetPluginsSection id \'plugins\'',
+      'client-ui-plugin-manager PresetPluginsSection id \'plugins\'',
       'client-ui-settings-plugins PresetSettingsSection id \'settings\'',
     ],
     replaceRisk: 'none',
@@ -2298,7 +2298,7 @@ export const CLIENT_SLOT_API: readonly ClientSlotEntry[] = [
     slotInject: '',
     declaredBy: 'an entry in \'sidebar\' (client-ui-sidebar), so it exists while that entry is mounted',
     occupants: [
-      'client-ui-settings-plugin-manager PluginsPanelIcon',
+      'client-ui-plugin-manager PluginsPanelIcon',
     ],
     replaceRisk: 'none',
     example: 'return {\n  inject: [\'slots\'],\n  apply(ctx) {\n    ctx.slots.inject(\'sidebar.panellist\', () => ctx.slots.register(\n      { name: \'sidebar.panellist\', id: \'my-entry\', order: 100, label: \'My entry\' },\n      () => React.createElement(\'div\', null, \'hello\'),\n    ))\n  },\n}',

+ 60 - 60
pnpm-lock.yaml

@@ -1876,6 +1876,9 @@ importers:
       '@deepseek-ai/dsh-client-ui-plan':
         specifier: workspace:^
         version: link:../../client/ui-plan
+      '@deepseek-ai/dsh-client-ui-plugin-manager':
+        specifier: workspace:^
+        version: link:../../client/ui-plugin-manager
       '@deepseek-ai/dsh-client-ui-reference':
         specifier: workspace:^
         version: link:../../client/ui-reference
@@ -1897,9 +1900,6 @@ importers:
       '@deepseek-ai/dsh-client-ui-settings-models':
         specifier: workspace:^
         version: link:../../client/ui-settings-models
-      '@deepseek-ai/dsh-client-ui-settings-plugin-manager':
-        specifier: workspace:^
-        version: link:../../client/ui-settings-plugin-manager
       '@deepseek-ai/dsh-client-ui-settings-plugins':
         specifier: workspace:^
         version: link:../../client/ui-settings-plugins
@@ -3309,6 +3309,63 @@ importers:
         specifier: ^18.2.0
         version: 18.3.1
 
+  packages/client/ui-plugin-manager:
+    devDependencies:
+      '@deepseek-ai/cordis':
+        specifier: workspace:^
+        version: link:../../../vendor/cordis
+      '@deepseek-ai/dsh-agent-presets':
+        specifier: workspace:^
+        version: link:../../preset/agent-presets
+      '@deepseek-ai/dsh-api-remotes':
+        specifier: workspace:^
+        version: link:../../api/remotes
+      '@deepseek-ai/dsh-client-locale':
+        specifier: workspace:^
+        version: link:../locale
+      '@deepseek-ai/dsh-client-store':
+        specifier: workspace:^
+        version: link:../store
+      '@deepseek-ai/dsh-client-test-runtime':
+        specifier: workspace:^
+        version: link:../../test-support/client-runtime
+      '@deepseek-ai/dsh-client-ui-agent-preset':
+        specifier: workspace:^
+        version: link:../ui-agent-preset
+      '@deepseek-ai/dsh-client-ui-layout':
+        specifier: workspace:^
+        version: link:../ui-layout
+      '@deepseek-ai/dsh-client-ui-primitives':
+        specifier: workspace:^
+        version: link:../ui-primitives
+      '@deepseek-ai/dsh-client-ui-renderer':
+        specifier: workspace:^
+        version: link:../ui-renderer
+      '@deepseek-ai/dsh-client-ui-sidebar':
+        specifier: workspace:^
+        version: link:../ui-sidebar
+      '@deepseek-ai/dsh-client-ui-slots':
+        specifier: workspace:^
+        version: link:../ui-slots
+      '@deepseek-ai/dsh-host-plugin-manager':
+        specifier: workspace:^
+        version: link:../../host/plugin-manager
+      '@testing-library/react':
+        specifier: ^16.1.0
+        version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@types/react':
+        specifier: ~18.3.1
+        version: 18.3.31
+      clsx:
+        specifier: ^2.1.1
+        version: 2.1.1
+      react:
+        specifier: ^18.2.0
+        version: 18.3.1
+      react-dom:
+        specifier: ^18.2.0
+        version: 18.3.1(react@18.3.1)
+
   packages/client/ui-primitives:
     devDependencies:
       '@deepseek-ai/cordis':
@@ -3661,63 +3718,6 @@ importers:
         specifier: ^18.2.0
         version: 18.3.1
 
-  packages/client/ui-settings-plugin-manager:
-    devDependencies:
-      '@deepseek-ai/cordis':
-        specifier: workspace:^
-        version: link:../../../vendor/cordis
-      '@deepseek-ai/dsh-agent-presets':
-        specifier: workspace:^
-        version: link:../../preset/agent-presets
-      '@deepseek-ai/dsh-api-remotes':
-        specifier: workspace:^
-        version: link:../../api/remotes
-      '@deepseek-ai/dsh-client-locale':
-        specifier: workspace:^
-        version: link:../locale
-      '@deepseek-ai/dsh-client-store':
-        specifier: workspace:^
-        version: link:../store
-      '@deepseek-ai/dsh-client-test-runtime':
-        specifier: workspace:^
-        version: link:../../test-support/client-runtime
-      '@deepseek-ai/dsh-client-ui-agent-preset':
-        specifier: workspace:^
-        version: link:../ui-agent-preset
-      '@deepseek-ai/dsh-client-ui-layout':
-        specifier: workspace:^
-        version: link:../ui-layout
-      '@deepseek-ai/dsh-client-ui-primitives':
-        specifier: workspace:^
-        version: link:../ui-primitives
-      '@deepseek-ai/dsh-client-ui-renderer':
-        specifier: workspace:^
-        version: link:../ui-renderer
-      '@deepseek-ai/dsh-client-ui-sidebar':
-        specifier: workspace:^
-        version: link:../ui-sidebar
-      '@deepseek-ai/dsh-client-ui-slots':
-        specifier: workspace:^
-        version: link:../ui-slots
-      '@deepseek-ai/dsh-host-plugin-manager':
-        specifier: workspace:^
-        version: link:../../host/plugin-manager
-      '@testing-library/react':
-        specifier: ^16.1.0
-        version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@types/react':
-        specifier: ~18.3.1
-        version: 18.3.31
-      clsx:
-        specifier: ^2.1.1
-        version: 2.1.1
-      react:
-        specifier: ^18.2.0
-        version: 18.3.1
-      react-dom:
-        specifier: ^18.2.0
-        version: 18.3.1(react@18.3.1)
-
   packages/client/ui-settings-plugins:
     devDependencies:
       '@deepseek-ai/cordis':

+ 1 - 1
scripts/verify-package-readme-model-experience.ts

@@ -118,7 +118,7 @@ const SENTENCE_MODEL_EXPERIENCE: Readonly<Record<string, SentenceContract>> = {
   'packages/client/ui-settings': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
   'packages/client/ui-settings-general': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
   'packages/client/ui-settings-models': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
-  'packages/client/ui-settings-plugin-manager': { kind: 'none', reason: 'Browser-side management surface; registers nothing model-facing.' },
+  'packages/client/ui-plugin-manager': { kind: 'none', reason: 'Browser-side management surface; registers nothing model-facing.' },
   'packages/client/locale': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
   'packages/client/web': { kind: 'none', reason: 'Browser-side UI plugin layer; registers nothing model-facing.' },
   'packages/context/file-reference': { kind: 'indirect', reason: 'The discovery seam and grammar delegate model guidance to the composed provider.' },

+ 1 - 1
tsconfig.base.json

@@ -225,7 +225,7 @@
       "@deepseek-ai/dsh-client-ui-settings": ["./packages/client/ui-settings/src"],
       "@deepseek-ai/dsh-client-ui-settings-general": ["./packages/client/ui-settings-general/src"],
       "@deepseek-ai/dsh-client-ui-settings-models": ["./packages/client/ui-settings-models/src"],
-      "@deepseek-ai/dsh-client-ui-settings-plugin-manager": ["./packages/client/ui-settings-plugin-manager/src"],
+      "@deepseek-ai/dsh-client-ui-plugin-manager": ["./packages/client/ui-plugin-manager/src"],
       "@deepseek-ai/dsh-client-locale": ["./packages/client/locale/src"],
       "@deepseek-ai/dsh-client-web": ["./packages/client/web/src"],
       "@deepseek-ai/dsh-schedule/client": ["./packages/schedule/schedule/src/client.ts"],

+ 1 - 1
tsconfig.client.json

@@ -107,7 +107,7 @@
     { "path": "./packages/client/ui-settings" },
     { "path": "./packages/client/ui-settings-general" },
     { "path": "./packages/client/ui-settings-models" },
-    { "path": "./packages/client/ui-settings-plugin-manager" },
+    { "path": "./packages/client/ui-plugin-manager" },
     { "path": "./packages/client/locale" },
     { "path": "./packages/client/ui-renderer" },
     { "path": "./packages/client/ui-session" },

Some files were not shown because too many files changed in this diff