@deepseek-ai/dsh-client-ui-settings-plugins 0.1.6-alpha.2 → 0.1.7-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +2 -2
- package/README.md +11 -46
- package/README.zh.md +15 -50
- package/lib/client.js +15 -1753
- package/lib/types/client/index.d.ts +6 -14
- package/lib/types/client/locales.d.ts +3 -3
- package/package.json +11 -16
- package/lib/types/client/AgentLoopCard.d.ts +0 -12
- package/lib/types/client/BashCard.d.ts +0 -12
- package/lib/types/client/PluginConfigForm.d.ts +0 -34
- package/lib/types/client/SubagentCard.d.ts +0 -12
- package/lib/types/client/SubagentLimitsFields.d.ts +0 -14
- package/lib/types/client/SubagentModelSelectionFields.d.ts +0 -14
- package/lib/types/client/WebSearchCard.d.ts +0 -16
- package/lib/types/client/agent-loop-card-controller.d.ts +0 -43
- package/lib/types/client/bash-card-controller.d.ts +0 -45
- package/lib/types/client/card-form.d.ts +0 -171
- package/lib/types/client/fields.d.ts +0 -69
- package/lib/types/client/subagent-card-controller.d.ts +0 -32
- package/lib/types/client/subagent-limits-card-controller.d.ts +0 -33
- package/lib/types/client/subagent-model-selection-card-controller.d.ts +0 -129
- package/lib/types/client/web-search-card-controller.d.ts +0 -93
package/README.i18n.yaml
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
# side as of the last confirmed-consistent state. Both languages carry equal authority;
|
|
3
3
|
# after editing either side, bring the other along and re-record with:
|
|
4
4
|
# pnpm run verify-translation-pairing --write packages/client/ui-settings-plugins/README.md
|
|
5
|
-
README.md:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: b4b3d37bd9da0fa6d1e3dcefd4d26394d4dde161
|
|
6
|
+
README.zh.md: d22a9ec3f142bd7c11b27b1cb08e0a8a56ce6ead
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Built-in plugins settings section for the dsh web client
|
|
2
|
+
description: "Built-in plugins settings section for the dsh web client: the Settings navigation entry and the tab chrome that feature-owned tabs register into."
|
|
3
3
|
kind: "package-reference"
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
|
|
|
9
9
|
|
|
10
10
|
## Summary
|
|
11
11
|
|
|
12
|
-
Use the **Built-in plugins** settings section to inspect the plugins this deployment ships
|
|
12
|
+
Use the **Built-in plugins** settings section to inspect the plugins this deployment ships. The section is a shell: it owns the navigation entry and the tab row, and every tab in it is registered by another plugin — the read-only inventory ships one. Configuring a built-in plugin happens on the sidebar's Plugins page, where each official plugin's own companion package registers its page.
|
|
13
13
|
|
|
14
14
|
## Table of Contents
|
|
15
15
|
|
|
@@ -25,25 +25,9 @@ Use the **Built-in plugins** settings section to inspect the plugins this deploy
|
|
|
25
25
|
<a id="use-this-package"></a>
|
|
26
26
|
## Use this package
|
|
27
27
|
|
|
28
|
-
Open **Built-in plugins** in Settings
|
|
28
|
+
Open **Built-in plugins** in Settings. [ui-settings-plugin-inventory](../ui-settings-plugin-inventory/README.md) contributes the inventory as the section's one tab, shown as the page itself; a second registered tab turns the row into tabs. A deployment whose composition contributes no tab shows the section's empty line.
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Each page registers into the Plugins page's `plugins.item` slot while the Host serves its settings namespace, so a deployment that does not compose the owning plugin shows no trace of it, and a namespace the Host starts or stops serving adds or withdraws its page on the next settings-document commit or reconnect. The card's one-liner and the page's form are one entry rendered in the two views the Plugins page asks for.
|
|
33
|
-
|
|
34
|
-
### Editing and saving
|
|
35
|
-
|
|
36
|
-
A page stages what the user types and writes it only when they save. Each control renders staged text, so what is on screen is exactly what a save would store. Leaving the page drops the drafts; there is no discard control. A failed save keeps the page as it is, reports the failure, and retains the drafts for correction. A reset stages the composed default rather than writing immediately, and a draft the field does not accept blocks the save instead of being dropped. The Host is the only authority on whether a value was accepted.
|
|
37
|
-
|
|
38
|
-
The **Subagent** card groups delegation limits and model selection on one page with one save button. **Maximum recursion depth** and **Subagent parallelism limit** appear side by side, stacking on narrow screens. Information buttons reveal a two-row depth example and the shared count rule; validation errors remain visible below the input. Depth retains explicit tool overrides. Capacity counts live continuable descendants across all recursion levels, including waiting children and excluding the root, one-shot runs, and external providers. Saving applies to later delegation attempts; lowering capacity does not stop existing children.
|
|
39
|
-
|
|
40
|
-
The model selection section stages its permission switch and exact model checkboxes together. Enabling requires at least one selected adapter route. Saving submits `enabled` and `allowedModels` in one mutation fenced by the revision where that draft began; a newer Host revision marks the draft failed instead of restoring a revoked route. Disabling retains the selected routes for later reuse. Available models are grouped by provider, while saved routes absent from the current catalog appear last and remain removable. Adapter names and model descriptions remain live directory metadata and are not stored, and the card refreshes them after adapter changes, settings commits, and reconnects.
|
|
41
|
-
|
|
42
|
-
Saving the Subagent card validates both sections and writes their drafts through their existing namespaces. These writes are independent: if one fails, the card stays open with that draft retained, and retry writes only the remaining draft. The page appears when either namespace is served and shows only the available sections.
|
|
43
|
-
|
|
44
|
-
### Secret-role fields
|
|
45
|
-
|
|
46
|
-
A key control starts blank, reports only whether one is configured, and writes through the credentials domain rather than the settings section; a blank draft writes nothing and keeps the stored key.
|
|
30
|
+
To contribute a tab, register into `settings.plugins.tab` with an `id`, an `order`, and a localized `label`; the section renders the entries in order and mounts a tab on its first selection. Feature copy stays in the registering plugin's dictionary.
|
|
47
31
|
|
|
48
32
|
-----
|
|
49
33
|
|
|
@@ -53,15 +37,7 @@ A key control starts blank, reports only whether one is configured, and writes t
|
|
|
53
37
|
<details>
|
|
54
38
|
<summary>Implementation internals — click to expand</summary>
|
|
55
39
|
|
|
56
|
-
The
|
|
57
|
-
|
|
58
|
-
### The registration rule
|
|
59
|
-
|
|
60
|
-
The section declares `settings.plugins.tab`, a root list slot whose labels become ordered tabs; a lone contribution renders as the page itself, and a tab stays mounted after its first selection so search and the inventory snapshot survive switching. The configuration pages are `plugins.item` registrations, one per namespace, made through `ctx.slots.inject` when the shared settings mirror shows the Host serves the namespace and disposed when it stops; registration order is the page order, not the Host's description order, which follows plugin activation and can change between boots. A page owns its controls and copy; the Plugins page draws its title, icon, and crumb.
|
|
61
|
-
|
|
62
|
-
### The write path
|
|
63
|
-
|
|
64
|
-
Saving writes staged fields through the client settings scope, which fences each write or ordered mutation with the namespace revision the draft read, so a form that has drifted from the document is refused rather than overwriting a concurrent change. A field's presence in the raw user layer — not its value — is what marks it overridden; a reset clears that field so it re-inherits the composition layer. Secret-role fields never ride a response; the page re-reads on the forwarded `credentials/reference-updated` event for the reference it watches.
|
|
40
|
+
The section declares `settings.plugins.tab`, a root list slot whose labels become ordered tabs; a lone contribution renders as the page itself, and a tab stays mounted after its first selection so search and the inventory snapshot survive switching. The section's `inject` projects the slot's ledger into ordered rows whose labels follow the active locale, cached until the ledger version or the locale revision moves. The Host half is an empty `apply`, present only so the package holds a Loader row the client module system serves the browser half for.
|
|
65
41
|
|
|
66
42
|
</details>
|
|
67
43
|
|
|
@@ -70,14 +46,10 @@ Saving writes staged fields through the client settings scope, which fences each
|
|
|
70
46
|
<a id="further-exploration"></a>
|
|
71
47
|
## Further Exploration
|
|
72
48
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
- [ui-plugin-manager](../ui-plugin-manager/README.md) — the
|
|
76
|
-
- [ui-settings](../ui-settings/README.md) — the
|
|
77
|
-
- [ui-settings-plugin-inventory](../ui-settings-plugin-inventory/README.md) — the read-only inventory the section shows.
|
|
78
|
-
- [settings](../../settings/README.md) — the durable user-settings seam and its file provider.
|
|
79
|
-
- [credentials](../../credentials/README.md) — the credential-reference seam secret fields write through.
|
|
80
|
-
- [ui-settings-general](../ui-settings-general/README.md) — the settings shell hosting the section.
|
|
49
|
+
- [ui-settings-plugin-inventory](../ui-settings-plugin-inventory/README.md) — the read-only inventory tab.
|
|
50
|
+
- [ui-settings](../ui-settings/README.md) — the domain base declaring `settings.section`.
|
|
51
|
+
- [ui-plugin-manager](../ui-plugin-manager/README.md) — the Plugins page where official plugins are configured.
|
|
52
|
+
- [ui-settings-shell](../ui-settings-shell/README.md), [ui-settings-agent-loop](../ui-settings-agent-loop/README.md), [ui-settings-subagent](../ui-settings-subagent/README.md), [ui-settings-web-search](../ui-settings-web-search/README.md) — the official configuration pages, one companion package each.
|
|
81
53
|
|
|
82
54
|
-----
|
|
83
55
|
|
|
@@ -94,13 +66,8 @@ None; this package neither assembles nor sends a provider request.
|
|
|
94
66
|
|
|
95
67
|
<a id="known-limitations-and-deferred-work"></a>
|
|
96
68
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
- **Only host-plane plugins have a page** — a plugin an agent preset mounts carries its configuration inline in that preset's `agent.cordis.yml` and cannot register a settings namespace at all, so this package registers nothing for it. Editing those values remains the preset editor's job.
|
|
101
|
-
- **A page still needs a browser bundle** — the browser half must be a `dsh.client` package built in the client module system's lazy-CJS factory format, and the `clientBundle` preset that emits it lives in `../../../packages/client/tsdown.client.ts` rather than a published package, so a plugin outside this repository has to reproduce that build itself.
|
|
102
|
-
- **The served namespaces re-read on two signals only** — the wire announces settings-document commits and connection resets, not registrations, so a namespace whose owner registers after the mirror's read joins the Official group on the next document commit or reconnect.
|
|
103
|
-
- **The shell page follows the composed executor** — the POSIX and PowerShell executor families share the `shell` namespace because a host composes exactly one of them, so the served schema differs by platform (PowerShell adds `pwshPath`) even though the page edits the same two fields on both.
|
|
69
|
+
- **The section has no tab of its own** — it renders its empty line until a feature plugin registers one; the shell cannot fill the section alone.
|
|
70
|
+
- **Runtime invariant:** No companion is published. The section owns no relationship beyond the slot ledger it projects.
|
|
104
71
|
|
|
105
72
|
<a id="dev-note"></a>
|
|
106
73
|
### Dev Note
|
|
@@ -111,5 +78,3 @@ These limits define which plugins get a page and how fresh the group is; they ar
|
|
|
111
78
|
None.
|
|
112
79
|
|
|
113
80
|
</details>
|
|
114
|
-
|
|
115
|
-
**Runtime invariant:** No companion is published. This is a browser-side settings surface whose node half owns no event stream or mutable runtime data; the layering and write refusals are Host contracts covered by the owning plugins and the api-proxy.
|
package/README.zh.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "dsh Web
|
|
2
|
+
description: "dsh Web 客户端的「内置插件」设置分区:设置导航项与供功能插件注册标签页的标签行。"
|
|
3
3
|
kind: "package-reference"
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -9,7 +9,7 @@ kind: "package-reference"
|
|
|
9
9
|
|
|
10
10
|
## 概述
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
使用**内置插件**设置分区查看本部署随附的插件。该分区只是一个壳:它拥有导航项和标签行,里面的每个标签页都由其他插件注册——只读清单注册了一个。配置内置插件在侧栏的插件页上进行,每个官方插件自己的伴生包把页面注册到那里。
|
|
13
13
|
|
|
14
14
|
## 目录
|
|
15
15
|
|
|
@@ -25,25 +25,9 @@ kind: "package-reference"
|
|
|
25
25
|
<a id="use-this-package"></a>
|
|
26
26
|
## 使用本包
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
在设置里打开**内置插件**。[ui-settings-plugin-inventory](../ui-settings-plugin-inventory/README.zh.md) 把清单作为分区唯一的标签页贡献进来,直接显示为页面本身;注册第二个标签页后这一行就变成标签行。组合里没有任何标签页贡献的部署会显示分区的空提示。
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
每个页面在 Host 服务其 settings 命名空间期间注册进插件页的 `plugins.item` slot,因此没有组装该插件的部署不会留下它的任何痕迹;Host 开始或停止服务某个命名空间时,其页面会在下一次 settings 文档提交或重连时加入或撤下。卡片上的一句话简介与页面上的表单是同一个条目按插件页索取的两种视图渲染出来的。
|
|
33
|
-
|
|
34
|
-
### 编辑与保存
|
|
35
|
-
|
|
36
|
-
页面暂存用户输入,只有用户保存时才写入。每个控件渲染的都是暂存文本,因此屏幕上所见即保存后所存。离开页面即丢弃草稿,没有放弃控件。保存失败时页面保持原样、报告失败并保留草稿供用户修改。重置暂存的是组装默认值而非立即写入;字段不接受的草稿会阻塞保存,而不是被丢弃。值是否被接受,唯一的裁判是 Host。
|
|
37
|
-
|
|
38
|
-
**Subagent** 卡片将委派限制与模型选择放在同一个页面中,共用一个保存按钮。**最大递归深度**和 **Subagent 并行数量上限**并排呈现,窄屏时上下排列。信息按钮按需展开两行深度示例表和共享计数规则;校验错误仍直接显示在输入框下。深度保留工具显式覆盖。总数统计所有递归层级中存活的可续接 Subagent,包含等待中的 Subagent,不计入主 Agent、一次性运行和外部提供方。保存后用于后续委派;调低上限不会停止已有 Subagent。
|
|
39
|
-
|
|
40
|
-
模型选择分区会同时暂存其权限开关与精确模型复选框。启用时必须至少选择一条适配器路由。保存会在一次 mutation 中提交 `enabled` 与 `allowedModels`,并以草稿开始时的 revision 设栅;Host revision 更新后,草稿会标记为失败,而不会恢复已撤销的路由。关闭时会保留已选路由供以后重新使用。可用模型按提供方分组;当前目录中缺失的已存路由排在末尾,且仍可移除。适配器名称与模型描述仍属于实时目录元数据,不会存储;适配器变化、设置提交和重连后,卡片会刷新这些元数据。
|
|
41
|
-
|
|
42
|
-
保存 Subagent 卡片时会校验两个分区,并通过各自原有命名空间写入草稿。这些写入相互独立:若其中一项失败,页面保持打开并保留该草稿,重试仅写入剩余草稿。只要部署提供任一命名空间,页面就会出现,且仅显示可用分区。
|
|
43
|
-
|
|
44
|
-
### secret 角色字段
|
|
45
|
-
|
|
46
|
-
密钥控件初始为空、只报告是否已配置,并经由 credentials 领域而非 settings 分节写入;空草稿不写入任何东西,保留已存密钥。
|
|
30
|
+
要贡献一个标签页,带 `id`、`order` 和本地化的 `label` 注册进 `settings.plugins.tab`;分区按序渲染条目,标签页在首次被选中时挂载。功能文案留在注册方自己的字典里。
|
|
47
31
|
|
|
48
32
|
-----
|
|
49
33
|
|
|
@@ -53,15 +37,7 @@ kind: "package-reference"
|
|
|
53
37
|
<details>
|
|
54
38
|
<summary>实现细节——点击展开</summary>
|
|
55
39
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
### 注册规则
|
|
59
|
-
|
|
60
|
-
本分区声明根级列表 slot `settings.plugins.tab`,其标签会成为有序标签页;只有一个贡献时它直接显示为页面本身,某个标签页首次被选择后会保持挂载,因此搜索与清单快照在切换时不会丢失。配置页是 `plugins.item` 注册项,每个命名空间一个:共享的 settings 镜像表明 Host 服务该命名空间时通过 `ctx.slots.inject` 注册,停止服务时销毁;注册顺序就是页面顺序,而不是 Host 的描述顺序——后者跟随插件激活,可能在两次启动之间变化。页面拥有自己的控件与文案;插件页负责画标题、图标与面包屑。
|
|
61
|
-
|
|
62
|
-
### 写入路径
|
|
63
|
-
|
|
64
|
-
保存时,暂存字段通过客户端 settings scope 写入;每次单字段写入或有序 mutation 都以草稿读取时的命名空间 revision 设栅,因此已与文档脱节的表单会被拒绝,而不是覆盖并发变更。字段是否被覆盖,取决于它是否出现在原始用户层中,而非取决于它的值;重置会清除该字段,使其重新继承组装层。secret 角色的字段绝不搭乘响应;页面会在转发来的 `credentials/reference-updated` 事件到来时重读它所关注的引用。
|
|
40
|
+
分区声明 `settings.plugins.tab`,一个根级 list slot,其标签成为有序的标签页;只有一个贡献时直接渲染为页面本身,标签页在首次被选中后保持挂载,搜索词和清单快照因此在切换间不丢失。分区的 `inject` 把 slot 账本投影成按序排列、标签随当前语言的行,在账本版本或语言修订变化前保持缓存。宿主半侧是一个空的 `apply`,只为让本包占一条 Loader 行,客户端模块系统据此送出浏览器半侧。
|
|
65
41
|
|
|
66
42
|
</details>
|
|
67
43
|
|
|
@@ -70,46 +46,35 @@ kind: "package-reference"
|
|
|
70
46
|
<a id="further-exploration"></a>
|
|
71
47
|
## 进一步探索
|
|
72
48
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
- [ui-plugin-manager](../ui-plugin-manager/README.zh.md)
|
|
76
|
-
- [ui-settings](../ui-settings/README.zh.md)
|
|
77
|
-
- [ui-settings-plugin-inventory](../ui-settings-plugin-inventory/README.zh.md)——分区显示的只读插件列表。
|
|
78
|
-
- [settings](../../settings/README.zh.md)——持久化用户设置 seam 及其文件提供方。
|
|
79
|
-
- [credentials](../../credentials/README.zh.md)——secret 字段写入所经的凭据引用 seam。
|
|
80
|
-
- [ui-settings-general](../ui-settings-general/README.zh.md)——承载本分区的设置外壳。
|
|
49
|
+
- [ui-settings-plugin-inventory](../ui-settings-plugin-inventory/README.zh.md)——只读清单标签页。
|
|
50
|
+
- [ui-settings](../ui-settings/README.zh.md)——声明 `settings.section` 的领域基座。
|
|
51
|
+
- [ui-plugin-manager](../ui-plugin-manager/README.zh.md)——配置官方插件的插件页。
|
|
52
|
+
- [ui-settings-shell](../ui-settings-shell/README.zh.md)、[ui-settings-agent-loop](../ui-settings-agent-loop/README.zh.md)、[ui-settings-subagent](../ui-settings-subagent/README.zh.md)、[ui-settings-web-search](../ui-settings-web-search/README.zh.md)——官方配置页,每个一个伴生包。
|
|
81
53
|
|
|
82
54
|
-----
|
|
83
55
|
|
|
84
56
|
<a id="model-experience"></a>
|
|
85
57
|
## 模型体验
|
|
86
58
|
|
|
87
|
-
|
|
59
|
+
无,本包是浏览器侧的设置界面,不注册任何模型面。
|
|
88
60
|
|
|
89
|
-
#### KV
|
|
61
|
+
#### KV 缓存影响
|
|
90
62
|
|
|
91
|
-
|
|
63
|
+
无;本包既不组装也不发送提供方请求。
|
|
92
64
|
|
|
93
65
|
## 已知限制与延期工作
|
|
94
66
|
|
|
95
67
|
<a id="known-limitations-and-deferred-work"></a>
|
|
96
68
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
- **只有宿主平面的插件有页面**:由 agent preset 挂载的插件把配置内联在该 preset 的 `agent.cordis.yml` 中,且根本无法注册 settings 命名空间,因此本包不会为它注册任何东西。编辑那些值仍是 preset 编辑器的职责。
|
|
101
|
-
- **页面仍然需要一份浏览器 bundle**:浏览器半侧必须是按客户端模块系统的 lazy-CJS factory 格式构建的 `dsh.client` 包,而产出它的 `clientBundle` 预设位于 `../../../packages/client/tsdown.client.ts`,并非已发布的包,因此本仓库之外的插件得自行复刻该构建。
|
|
102
|
-
- **被服务的命名空间只在两种信号上重读**:协议通告的是 settings 文档提交与连接重置,而非注册行为,因此在镜像读取之后才被其拥有方注册的命名空间,要等下一次文档提交或重连才会加入官方分组。
|
|
103
|
-
- **shell 页面跟随被组装的执行器**:POSIX 与 PowerShell 两个执行器家族共用 `shell` 命名空间,因为一个宿主只组装其中之一,所以被服务的 schema 随平台不同(PowerShell 多出 `pwshPath`),尽管页面在两者下编辑的都是同样两个字段。
|
|
69
|
+
- **分区没有自己的标签页**——在功能插件注册标签页之前它只显示空提示;壳自己填不满分区。
|
|
70
|
+
- **运行时不变量:**不发布伴生。分区除了投影 slot 账本之外不拥有任何关系。
|
|
104
71
|
|
|
105
72
|
<a id="dev-note"></a>
|
|
106
73
|
### 开发备注
|
|
107
74
|
|
|
108
75
|
<details>
|
|
109
|
-
<summary
|
|
76
|
+
<summary>维护者工作上下文——点击展开</summary>
|
|
110
77
|
|
|
111
78
|
无。
|
|
112
79
|
|
|
113
80
|
</details>
|
|
114
|
-
|
|
115
|
-
**运行时不变式:** 不发布伴生入口。这是浏览器端设置界面,node half 不持有事件流或可变运行时数据;分层与写入拒绝是 Host 约定,由相应插件和 api-proxy 覆盖。
|