@feng0531/dsh-execution-bus 0.2.11 → 0.2.12
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.md +25 -18
- package/docs/FLOW-TEST.md +37 -25
- package/docs/RELEASING.md +44 -15
- package/docs/host-compatibility.md +61 -30
- package/docs/protocol.md +77 -28
- package/docs/releases/0.1.0.md +3 -1
- package/docs/releases/0.1.1.md +2 -0
- package/docs/releases/0.1.2.md +2 -0
- package/docs/releases/0.2.0.md +2 -0
- package/docs/releases/0.2.1.md +2 -0
- package/docs/releases/0.2.10.md +2 -0
- package/docs/releases/0.2.11.md +2 -0
- package/docs/releases/0.2.12.md +19 -0
- package/docs/releases/0.2.2.md +2 -0
- package/docs/releases/0.2.3.md +3 -1
- package/docs/releases/0.2.4.md +2 -0
- package/docs/releases/0.2.5.md +2 -0
- package/docs/releases/0.2.6.md +2 -0
- package/docs/releases/0.2.7.md +2 -0
- package/docs/releases/0.2.8.md +2 -0
- package/docs/releases/0.2.9.md +2 -0
- package/docs/validation.md +46 -49
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
“萧何”是产品与模式显示名,执行总线是其技术功能;不新增人物 Agent,不进行角色扮演。仓库 dsh-execution-bus、npm 包名、execution_bus 工具名及 execution-bus-test 预设 ID 保持不变。历史版本发布说明保留当时名称。
|
|
6
6
|
|
|
7
|
-
DSH 独立插件:`@feng0531/dsh-execution-bus` · 当前版本 **0.2.
|
|
7
|
+
DSH 独立插件:`@feng0531/dsh-execution-bus` · 当前版本 **0.2.12**
|
|
8
8
|
|
|
9
9
|
> 当前是早期可运行版本,不是完整生产验收版。已验证真实 DSH 组件和脚本模型驱动的内存会话;真实模型、桌面界面和 PTC 完整链路尚未验收。**不支持重启后恢复任务。**
|
|
10
10
|
|
|
@@ -31,23 +31,30 @@ DSH 独立插件:`@feng0531/dsh-execution-bus` · 当前版本 **0.2.11**
|
|
|
31
31
|
```mermaid
|
|
32
32
|
flowchart TD
|
|
33
33
|
A[DSH 会话中的模型提出请求] --> B[调用 execution_bus 工具]
|
|
34
|
-
B --> C{
|
|
35
|
-
C -->|否| D[
|
|
34
|
+
B --> C{参数和可信上下文有效?}
|
|
35
|
+
C -->|否| D[返回校验错误]
|
|
36
36
|
C -->|是| E{同一会话已有相同 requestId?}
|
|
37
37
|
E -->|输入不同| F[拒绝请求编号冲突]
|
|
38
|
-
E -->|输入相同| G[
|
|
39
|
-
E -->|新请求|
|
|
40
|
-
|
|
38
|
+
E -->|输入相同| G[校验消息及附着额度后复用执行或结果]
|
|
39
|
+
E -->|新请求| Q{队列与记录容量允许?}
|
|
40
|
+
Q -->|否| R[返回背压错误]
|
|
41
|
+
Q -->|是| H[内存受理并申请宿主 Job]
|
|
42
|
+
H --> V{宿主 Job 准入成功?}
|
|
43
|
+
V -->|否| W[取消尚未执行的请求并返回服务错误]
|
|
44
|
+
V -->|是| P[进入程序等待与队列分发]
|
|
45
|
+
P --> I[有空闲名额后分发给 Handler]
|
|
41
46
|
I --> J[测试处理器 或 宿主 read 工具管线]
|
|
42
47
|
J -.进度.-> K[宿主 Job 状态更新]
|
|
43
48
|
J --> L[记录最终执行状态与结果]
|
|
44
|
-
G --> M[
|
|
49
|
+
G --> M[等待已有执行或立即读取终态结果]
|
|
45
50
|
L --> M
|
|
46
51
|
M --> N[由 DSH 把结果提交给原工具调用]
|
|
47
52
|
N --> O[会话继续推理]
|
|
48
53
|
```
|
|
49
54
|
|
|
50
|
-
|
|
55
|
+
上图表示正常执行路径;工具校验、策略拒绝、取消或服务异常可能令外层调用返回错误,不能把箭头理解为每次请求必然执行成功。已保存的终态结果复用不申请新 Job。
|
|
56
|
+
|
|
57
|
+
**图里的“等待”不是阻塞宿主线程,也不是让模型不断查询。** 工具返回的是一个尚未完成的异步操作,DSH 在它完成后继续。队列执行与等待同时进行;进度更新走宿主任务机制,不把每条进度变成聊天消息。正常已等待的 Job 完成通知可由宿主抑制;等待服务故障时不承诺没有额外宿主通知。
|
|
51
58
|
|
|
52
59
|
若阅读器不支持 Mermaid,上图的主线是:
|
|
53
60
|
|
|
@@ -81,13 +88,13 @@ flowchart TD
|
|
|
81
88
|
|
|
82
89
|
`host.read` 在出队时重新进入宿主工具管线,沿用宿主当前权限、会话工作目录及输出限制。插件不自行启动命令、不提供任意远程执行服务。它也不会强制将现有工具改成总线调用。
|
|
83
90
|
|
|
84
|
-
##
|
|
91
|
+
## 选择“萧何”预设
|
|
85
92
|
|
|
86
|
-
|
|
93
|
+
包内提供标准 DSH bundle patch(预设组合补丁)。宿主正常加载后会收到“萧何 / Xiao He”预设定义,由既有设置 → Agent 预设 → **自定义**列表展示。建议选择它新建专门会话,不改默认选择或正在使用的普通会话。已有会话的切换受宿主空白会话检查约束。**实际桌面卡片展示尚未验收**,不能把注册表测试当作界面已通过。
|
|
87
94
|
|
|
88
|
-
该预设只在自己的作用域注册 execution_bus,使用原生工具调用,不改其他会话的 PTC 模式。它没有 shell 行;宿主文件工具套件会声明 read/write/edit
|
|
95
|
+
该预设只在自己的作用域注册 execution_bus,使用原生工具调用,不改其他会话的 PTC 模式。它没有 shell 行;宿主文件工具套件会声明 read/write/edit 等工具,但该模式的执行门禁(guard)只允许总线、read 和 Job 控制,写入/编辑即使可见也会拒绝。它不是进程级沙箱,读取边界仍由宿主权限决定;同一预设的会话共享有界队列容量,但请求结果按会话隔离。
|
|
89
96
|
|
|
90
|
-
**不要同时把包根入口作为全局工具插件加载**:那是手工集成入口,会使 execution_bus 全局可见,失去此预设的可见性隔离。仅安装 npm 包也不保证卡片立即出现,需要加载包声明的 bundle patch
|
|
97
|
+
**不要同时把包根入口作为全局工具插件加载**:那是手工集成入口,会使 execution_bus 全局可见,失去此预设的可见性隔离。仅安装 npm 包也不保证卡片立即出现,需要加载包声明的 bundle patch。项目发布不会自动安装到任何读者的宿主,卡片是否可用需要在目标实例实际检查。
|
|
91
98
|
|
|
92
99
|
## 安装前先确认
|
|
93
100
|
|
|
@@ -102,7 +109,7 @@ flowchart TD
|
|
|
102
109
|
2. 在你选定的隔离 DSH 配置依赖目录安装固定版本,不要在 DSH 程序安装目录执行:
|
|
103
110
|
|
|
104
111
|
```powershell
|
|
105
|
-
npm install --ignore-scripts @feng0531/dsh-execution-bus@0.2.
|
|
112
|
+
npm install --ignore-scripts @feng0531/dsh-execution-bus@0.2.12
|
|
106
113
|
```
|
|
107
114
|
|
|
108
115
|
这是 npm 目录示例。若目标配置使用 pnpm,应沿用其包管理器,不混用锁文件。遇到宿主 peer 版本冲突就停止,不用强制安装绕过。
|
|
@@ -148,7 +155,7 @@ flowchart TD
|
|
|
148
155
|
|
|
149
156
|
### 两种编号不要混淆
|
|
150
157
|
|
|
151
|
-
- **`messageId`:这条消息的编号。**
|
|
158
|
+
- **`messageId`:这条消息的编号。** 新操作/控制消息使用新编号;同一条消息的重复投递可沿用原编号及原内容。
|
|
152
159
|
- **`requestId`:这一次逻辑操作的编号。** 同一次操作重发沿用它;不同操作必须换编号,即使参数完全相同。
|
|
153
160
|
|
|
154
161
|
同一 `requestId` 搭配不同输入会被拒绝;不同会话不能读取或取消彼此的任务。重复执行保护仅在当前插件实例和保存期内有效,不是永久保证。
|
|
@@ -167,7 +174,7 @@ flowchart TD
|
|
|
167
174
|
}
|
|
168
175
|
```
|
|
169
176
|
|
|
170
|
-
将 `type` 换成 `status` 查询状态,换成 `result`
|
|
177
|
+
将 `type` 换成 `status` 查询状态,换成 `result` 重取保存结果;两者都立即返回当前快照,运行中不会替你等待终态。该示例如果在前面的成功请求之后执行,任务早已完成,取消只返回原终态;要验证运行中取消,需要由另一个并发控制调用在任务未完成时发出。取消中的任务要看最终 `state`;`cancelRequested: true` 只表示取消请求已经发出,不表示任务已停止或副作用已撤销。
|
|
171
178
|
|
|
172
179
|
### 如果宿主使用 PTC 模式
|
|
173
180
|
|
|
@@ -199,10 +206,10 @@ stateDiagram-v2
|
|
|
199
206
|
|
|
200
207
|
## 容量与重要限制
|
|
201
208
|
|
|
202
|
-
默认并发 **2**,排队上限 **32**,最多保存 **256** 条任务记录,单结果最多 **64 KiB
|
|
209
|
+
默认并发 **2**,排队上限 **32**,最多保存 **256** 条任务记录,单结果最多 **64 KiB**,完成结果保留期 **1 小时**,在新请求和查询时惰性清理;不是一小时一到即定时删除。队列或记录满时拒绝新任务;宿主 Job 自身也有容量限制。
|
|
203
210
|
|
|
204
211
|
- **全部状态在内存中。** 受理没有落盘,插件关闭或进程崩溃后,不能依靠它恢复原调用或保证请求不丢失。
|
|
205
|
-
- **不自动重跑任务。** 通信超时不等于执行失败,取消不等于回滚。
|
|
212
|
+
- **不自动重跑任务。** 通信超时不等于执行失败,取消不等于回滚。Job 等待服务异常会在原执行排空后返回服务错误,执行可能已成功;应核对原 requestId 的状态,不要换编号盲目重跑。
|
|
206
213
|
- **不承诺端到端 exactly-once。** 当前实例的请求复用不能代替外部副作用对账。
|
|
207
214
|
- 当前没有远端执行端、跨插件 Handler 注册服务或非幂等操作对账能力。
|
|
208
215
|
- 未证明真实模型轮次、主动查询次数或总耗时的提升比例。
|
|
@@ -231,7 +238,7 @@ npm run test:install # 临时目录安装,不操作日常 DSH
|
|
|
231
238
|
|
|
232
239
|
- [协议和投递语义](<docs/protocol.md>):字段、状态、重复处理与取消规则。
|
|
233
240
|
- [宿主兼容性与源码调用链](<docs/host-compatibility.md>):为什么可以等待,为什么不能跨重启恢复。
|
|
234
|
-
- [验证记录](<docs/validation.md>)、[0.2.
|
|
241
|
+
- [验证记录](<docs/validation.md>)、[0.2.12 发布说明](<docs/releases/0.2.12.md>):已验证与未验证范围。
|
|
235
242
|
- [维护者发布流程](<docs/RELEASING.md>):标签 CI、安装包校验与正式发布门禁。
|
|
236
243
|
|
|
237
244
|
## 许可
|
package/docs/FLOW-TEST.md
CHANGED
|
@@ -1,38 +1,50 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 不安装到日常 DSH 的流程测试
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 适合什么场景?
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
先验证代码行为,而不改日常 DSH 配置。命令在独立 Node 进程中加载本仓库产物和真实 DSH npm 组件,不向正在使用的宿主注入插件,也不重启宿主。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**由聊天会话启动测试,不等于该聊天会话直接调用了 execution_bus。** 真实模型、GUI、PTC 进程和桌面沙箱结论不能由此替代。
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## 如何运行
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
```powershell
|
|
12
|
+
npm ci --include=dev --ignore-scripts
|
|
13
|
+
npm run test:flow
|
|
14
|
+
npm run check
|
|
15
|
+
npm run verify:package
|
|
16
|
+
npm run test:install
|
|
17
|
+
```
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
| 命令 | 实际范围 |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `test:flow` | 三个固定测试文件:早期流程回归、真实宿主工具组件、脚本适配器驱动的 AgentLoop |
|
|
22
|
+
| `check` | 编译并运行全部测试;包括后续 Job 故障、卸载、预设隔离等回归 |
|
|
23
|
+
| `verify:package` | 检查候选打包清单及导出,不安装日常宿主 |
|
|
24
|
+
| `test:install` | 在临时目录安装生产依赖并验证根入口/简化注册,结束后清理 |
|
|
17
25
|
|
|
18
|
-
|
|
26
|
+
`test:flow` 不是全部集成测试的别名;发布前必须运行 `check`。临时安装不是桌面插件管理器安装。完整验证层次见[验证范围](<validation.md>)。
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
|---|---|---|---|
|
|
22
|
-
| core 返回的 done 结果对象共享且可修改 | 第一个消费者将 state/result 改写后,第二次同请求取得被修改值 | 深度冻结终态快照 | core 扩展接入;不能据此声称模型能修改宿主冻结结果 |
|
|
23
|
-
| Handler 完成但结果 JSON.stringify 抛错被记为 failed | 返回 BigInt 的一次执行被误记 failed | 保存异常为 unknown / RESULT_NOT_RETAINED,不重跑 | 当前内置只读/测试返回值正常;扩展 Handler 有风险 |
|
|
24
|
-
| 结果超期查询未检查 TTL | 无新 request 时,过期 result 仍可读 | command 查询前 sweep | 查询/重取/取消均遵守结果保存期 |
|
|
28
|
+
## 已覆盖的代表场景
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
- 正常受理与异步返回,两个会话不串线,同键冲突拒绝。
|
|
31
|
+
- 并发重复请求共用执行/Job;终态结果在宿主槽位满时仍可复用。
|
|
32
|
+
- 查询额度、附着容量、取消保留槽及过期结果清理。
|
|
33
|
+
- 合作取消、晚取消、未知结果不自动重跑。
|
|
34
|
+
- 深层/非 JSON 结果拒绝,结果和通知不可变,异步观察者拒绝隔离。
|
|
35
|
+
- 已受理 Handler 与替换注册并存,旧注销函数不破坏新注册。
|
|
36
|
+
- 宿主 read 真正经过工具管线;前置拒绝仍生效。
|
|
37
|
+
- Job 先行移除、等待/清理异常与卸载交错。
|
|
38
|
+
- 可选预设成功激活、普通 Agent 不可见总线、写入被 guard 拒绝。
|
|
27
39
|
|
|
28
|
-
|
|
40
|
+
以上是场景摘要,不表示真实模型/宿主 GUI 已通过。
|
|
29
41
|
|
|
30
|
-
|
|
31
|
-
2. 后续可优化:完成请求重取无需新建短暂 Job;现在不会重复执行,但会产生不必要的 UI 生命周期事件。
|
|
32
|
-
3. 后续可优化:每个重复附着仍注册一个空进度监听器;可将进度观察者绑定到共享逻辑请求,避免消耗 32 个监听者限额。
|
|
33
|
-
4. 后续可优化:宿主 read 取消错误仍统一映射 HOST_READ_FAILED,保守归为 unknown。应保留经过白名单验证的取消类型,而不泄露原始异常文本。
|
|
34
|
-
5. 不建议盲目改动:取消一个附着工具会请求取消整个逻辑执行,是当前明确语义;改成仅取消等待者需要单独设计宿主 drain、Job 通知和结果留存,不能只 Promise.race 后抛弃原执行。
|
|
42
|
+
## 测试之外仍需注意
|
|
35
43
|
|
|
36
|
-
|
|
44
|
+
- 宿主 read 的错误目前被适配层统一映射为 `HOST_READ_FAILED`;在取消后可能保守记为 `unknown`,不能把它当作取消已确认。
|
|
45
|
+
- 相同逻辑请求的取消是请求级取消,不能简单用 Promise.race 放弃执行来改成等待者级取消。
|
|
46
|
+
- 当前没有远端 Handler 传输或持久化恢复;测试没有提供这些能力。
|
|
37
47
|
|
|
38
|
-
|
|
48
|
+
## 要直接在聊天会话中试用
|
|
49
|
+
|
|
50
|
+
需要先通过宿主正常加载插件,并让目标 Agent 看得到 `execution_bus`。建议加载可选“萧何”预设,新建专门会话;不要全局注入工具。安装/加载需使用者自行授权,是否重启由使用者决定。只启动另一个 Node 进程、伪造 sessionId 或追加聊天结果,都不算恢复原工具调用。参见[使用说明](<../README.md>)。
|
package/docs/RELEASING.md
CHANGED
|
@@ -1,29 +1,58 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 维护者发布流程
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
此文面向维护者,使用者从[README](<../README.md>)开始。流程参考 dsh-vcs,使用本项目实际工作流和脚本;没有 SVN 或浏览器布局任务。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 1. 版本与说明
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
采用 vX.Y.Z:X 为大版本,Y 为小版本/新增功能,Z 为 BUG 或文档纠错补丁。每轮完成且验证通过的改动主动正式发布;没有确认问题时不为发版本制造改动。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
包版本、锁文件根版本和标签必须一致,每版提供独立中文发布说明。说明围绕本版变化、使用影响、验证和限制,不把开发流水账当用户文档。保留旧发布说明的版本语境,不移动已有标签、不替换已上传的同版本包。
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
发布前核对非商业许可证、第三方说明和公开文件,排除凭据、私人材料、宿主源码快照及开发制品。产品显示名为萧何 / Xiao He;仓库、npm 包、工具和预设技术标识保持兼容。
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## 2. 本地验证
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
```powershell
|
|
16
|
+
npm ci --include=dev --ignore-scripts
|
|
17
|
+
npm run check
|
|
18
|
+
npm run verify:package
|
|
19
|
+
npm run pack:candidate
|
|
20
|
+
npm run test:install -- artifacts/candidate/feng0531-dsh-execution-bus-X.Y.Z.tgz
|
|
21
|
+
```
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
把示例 X.Y.Z 替换为待发版本。包安装校验在系统临时目录运行,只检查生产依赖、入口及简化注册;不是实际桌面验收。候选生成命令不自行保证源码已重建,必须按上述顺序先执行 check。
|
|
18
24
|
|
|
19
|
-
|
|
25
|
+
## 3. 标签 CI
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
只有匹配格式的版本标签 push 和手动 workflow_dispatch 触发 [CI](https://github.com/f-e-n-g-0531/dsh-execution-bus/blob/main/.github/workflows/ci.yml);普通分支 push、PR 不触发。标签检查会进一步严格校验格式及版本一致性。
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
创建新 vX.Y.Z 标签后,等待 Windows/Ubuntu × Node 22/24 四项全部成功。各项编译、测试、检查包、生成候选,再安装该项的同一 tgz,并上传候选和 SHA-256 文件。手动分支 CI 不能替代同标签 push CI。
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
失败后先定位。需要修改冻结源码或测试时使用新的版本/标签,不强推覆盖。制品过期或缺少任何一份时,发布门禁会拒绝,需要先恢复可核验的同标签 CI。
|
|
26
32
|
|
|
27
|
-
##
|
|
33
|
+
## 4. 联合发布
|
|
28
34
|
|
|
29
|
-
|
|
35
|
+
从 main 手动运行 [Publish GitHub and npm](https://github.com/f-e-n-g-0531/dsh-execution-bus/blob/main/.github/workflows/release.yml),输入已验证标签和确认词 publish-execution-bus。工作流并非由普通分支推送自动发布。
|
|
36
|
+
|
|
37
|
+
仓库需配置 NPM_AUTOMATION_TOKEN,具有指定包发布权限并满足 npm 策略;密钥仅提供给上传步骤,不写源码、日志或文档。工作流声明 npm-release environment,但**声明环境不等于已经配置维护者审批规则**,规则需要仓库维护者单独设置。本项目历史发布使用明确用户授权和工作流确认,不能称为人工环境审批已验收。
|
|
38
|
+
|
|
39
|
+
发布步骤:
|
|
40
|
+
|
|
41
|
+
1. 检出指定标签,校验标签/版本/许可证/发布说明。
|
|
42
|
+
2. 重新安装、检查和打包。
|
|
43
|
+
3. 要求同一提交、同一标签的最新 push CI 成功,下载四份候选,与本次候选逐字节比较。
|
|
44
|
+
4. 对同一 tgz 做隔离安装,保留发布候选制品。
|
|
45
|
+
5. 查询 npm 已有版本:存在且 integrity 相同则跳过上传;不一致停止。确实未找到时才上传固定 tgz,禁用生命周期脚本。
|
|
46
|
+
6. 有界核对公开 npm 元数据 integrity 和实际下载字节;成功后才创建非草稿、非预发布 GitHub Release,上传同一个 tgz 与 SHA256SUMS.txt。
|
|
47
|
+
|
|
48
|
+
## 5. 失败恢复与发布后核验
|
|
49
|
+
|
|
50
|
+
npm 与 GitHub 不是原子发布。上传显示成功但公开包仍 404 时,门禁会停止并保留候选。**不要盲目重传,不另造版本绕过,不先创建 Release。** 先只读检查公开元数据和实际包;确认与原候选相同后恢复原失败任务,使上传步骤核对已有 integrity 并跳过。若仍不公开,则报告发布未完成,继续保留原标签/制品。
|
|
51
|
+
|
|
52
|
+
公开核验当前最多查询十次;网络异常或非预期状态也可能立即失败,不能解释成“必定等足十次”或“上传失败”。已有 GitHub Release 不自动覆盖;已经完成的发布仅补记证据,不替换附件。
|
|
53
|
+
|
|
54
|
+
最终核对 npm 指定版本和 latest、GitHub 非草稿/非预发布、两端真实下载大小和 SHA-256 与候选一致。源码或 npm 包内的发布说明是在上传前冻结的,不能含尚未发生的通过结论;发布后的事实以 Actions、公开制品和版本化记录为准。
|
|
55
|
+
|
|
56
|
+
## 6. 安装边界
|
|
57
|
+
|
|
58
|
+
正式发布不自动安装、升级或重启任何日常 DSH。桌面卡片、实际模型、权限/沙箱或 PTC 端到端未验收项必须如实披露,不能用 CI、注册表测试或替代服务器冒充当前页面通过。
|
|
@@ -1,44 +1,75 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 宿主兼容性与接入原理
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 兼容目标
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
源码调查基线为 **2026-10-15 的 DSH 0.2.0-rc.2、Cordis 4.0.4**。本项目用同版本 npm 组件编译和隔离测试;这不是对任意旧版、新版宿主的兼容保证,也不是对读者当前安装版本的自动检测。Node.js 要求为 22 或以上;CI 使用 Node 22、24。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
本项目只做插件,没有修改宿主源码、ASAR 或其他插件。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## 接入链路
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
```text
|
|
12
|
+
AgentLoop 发起工具调用
|
|
13
|
+
→ ToolRuntime 校验、策略与可信身份绑定
|
|
14
|
+
→ execution_bus 工具体
|
|
15
|
+
→ 内存去重/排队,宿主 Job 记录和程序等待
|
|
16
|
+
→ test Handler 或经 ToolRuntime 再调用宿主 read
|
|
17
|
+
→ 保存执行结果,清理 Job
|
|
18
|
+
→ 工具体返回
|
|
19
|
+
→ AgentLoop 关联原工具调用并继续会话
|
|
20
|
+
```
|
|
12
21
|
|
|
13
|
-
|
|
22
|
+
等待由 Promise 完成,不阻塞宿主线程,不为正常等待反复调用模型。进度只交给 Job 机制;宿主的前后置策略、取消和最终会话提交仍有权改变外层工具结果。
|
|
14
23
|
|
|
15
|
-
|
|
24
|
+
### 与 PTC 的关系
|
|
16
25
|
|
|
17
|
-
|
|
18
|
-
2. [工具注册:2878–2886](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tools/lib/index.js#L2878-L2886):ctx.tools.register 是作用域 effect,卸载自动移除。工具 execute 可以返回 Promise。
|
|
19
|
-
3. [可信执行身份:3131–3175](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tools/lib/index.js#L3131-L3175):注册表生成 token,保留 callId、rootCallId、agent、signal,快照参数。
|
|
20
|
-
4. [前置策略:3225](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tools/lib/index.js#L3225) → [执行 waterfall 与工具体:3294–3331](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tools/lib/index.js#L3294-L3331) → [后置策略:3504](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tools/lib/index.js#L3504) → [最终 tools/result:3417](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tools/lib/index.js#L3417)。插件只调用公开 execute,不直接调用 read 的定义体,不跳过这些策略。
|
|
21
|
-
5. [可选 PTC:1294–1307](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tools/lib/index.js#L1294-L1307):子调用继承 agent、rootCallId,带 parent token;在原 run_code 时间预算内等待。[超时策略:4–6](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tool-call-timeout-policy/lib/index.js#L4-L6) 是协作式取消并 drain,不代表外部副作用失败。插件不改全局工具呈现、不拦截其他工具。
|
|
22
|
-
6. [宿主 read:174](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tool-fs/lib/index.js#L174):cwd 来自 exec.agent.session.header;[实际读取和输出限制:348](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tool-fs/lib/index.js#L348)。嵌套 read 在出队时重新进工具管线,沿用当时宿主权限和 fs 实现;插件没有独立 shell、spawn 或文件读取能力。read 的只读访问边界由宿主实际组合的 fs/权限实现决定,不能把 cwd 当作沙箱。隔离测试的 LocalFS 不等于桌面沙箱验证。
|
|
23
|
-
7. [Job start:412–491](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-jobs-local/lib/index.js#L412-L491):已有 owner 校验、controller admission、输出环、进度句柄、首终态约束;[等待:510](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-jobs-local/lib/index.js#L510)、[进度:717–729](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-jobs-local/lib/index.js#L717-L729)。插件只补排队、请求冲突和结果复用,不再造通用 Job 注册表。
|
|
24
|
-
8. [完成通知抑制:268–270](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-tool-jobs/lib/index.js#L268-L270):awaited 为 true 时不追加完成通知;插件先注册 wait 再等待终态,并移除已收集 Job。每 60 秒等待窗口续等由程序执行,不调用模型,不把超时改为失败。
|
|
25
|
-
9. [原调用结果提交:680–706](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-agent-loop/lib/index.js#L680-L706):宿主将结果关联原 callId 和 call-event-seq;插件只 return,不追加 tool/result 或聊天消息。
|
|
26
|
-
10. [中断恢复:717–730](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-session/lib/index.js#L717-L730) 和 [interruptedTurnClosers:904](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-session/lib/index.js#L904):为未保存结果生成 outcome unknown,不会复活内存中的 Promise。[Agent 恢复:1950](../dev/host-snapshot/node_modules/@deepseek-ai/dsh-agent-loop/lib/index.js#L1950) 使用这个保守闭合机制。
|
|
26
|
+
PTC 是可选入口:外层 `run_code` 可以调用同一个工具。它不是总线本身,也不会因使用本插件取消自身时间预算。可选“萧何”预设选择 native 工具呈现;其他预设原有 PTC 呈现不变。完整 PTC 进程尚未端到端验收。
|
|
27
27
|
|
|
28
|
-
##
|
|
28
|
+
## 源码证据定位
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
- 事件:ctx.on / ctx.waterfall / ctx.emit;副作用生命周期 ctx.effect,异步 disposer 用于取消并等待处理中的任务。本插件未注册全局工具拦截器。
|
|
32
|
-
- 界面:本版不注册自定义前端,复用现有 Jobs 进度事件和默认工具卡片。宿主原有客户端插件体系不是必需依赖;尚未完成该体系全部入口调查,不能提供未核实的 UI 注册示例。
|
|
33
|
-
- 持久化:宿主会话日志有持久化;本地 Job 注册表注释明确是 process-local。二者不能混同为插件可恢复执行权。
|
|
30
|
+
下表位置来自调查时实际安装包的发布构建文件,均是组件内部的 `lib/index.js` 行号,**不是上游 TypeScript 源文件行号**。要复核,请取得相同版本包后定位组件与符号;宿主升级后行号可能变化。
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
| 环节 | 组件、构建行号与符号 | 结论 |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| 调用与调度 | `@deepseek-ai/dsh-agent-loop`:506–532,`runGroup` 调度路径 | 绑定原调用并等待工具返回 |
|
|
35
|
+
| 注册与卸载 | `@deepseek-ai/dsh-tools`:2878–2886,工具注册;3294–3331,`dispatchToolBody` | 注册为作用域副作用,工具体可异步等待 |
|
|
36
|
+
| 身份与策略 | `@deepseek-ai/dsh-tools`:3131–3175、3225、3504、3417 | 生成可信 token、保留 agent/callId/rootCallId,执行前后策略及结果通知 |
|
|
37
|
+
| PTC 子调用 | `@deepseek-ai/dsh-tools`:1294–1307 | 子调用携带 agent、rootCallId 和 parent token;不是任意身份注入 |
|
|
38
|
+
| 文件读取 | `@deepseek-ai/dsh-tool-fs`:174、348,read 注册/执行路径 | 工作目录来自会话;输出和文件边界由宿主组合决定 |
|
|
39
|
+
| 任务与等待 | `@deepseek-ai/dsh-jobs-local`:412–491 `start`、510 `wait`、717–729 `updateProgress` | 所属访问、容量、进度、取消、首终态与程序等待可复用 |
|
|
40
|
+
| 完成通知 | `@deepseek-ai/dsh-tool-jobs`:268–270 | 正常已等待的完成通知不再额外报告;异常等待通道不承诺这一抑制仍完整生效 |
|
|
41
|
+
| 会话结果提交 | `@deepseek-ai/dsh-agent-loop`:680–706 | 宿主按 callId 和调用事件序号写入结果,插件不自行追加聊天消息 |
|
|
42
|
+
| 中断闭合 | `@deepseek-ai/dsh-session`:717–730、904;`@deepseek-ai/dsh-agent-loop`:1950 | 未保存结果保守闭合为未知,不恢复旧 Promise |
|
|
43
|
+
| 预设注册 | `@deepseek-ai/dsh-agent-preset-registry`:500–539 `register`/`activate` | 独立组合作用域,可供所选 Agent 加入 |
|
|
36
44
|
|
|
37
|
-
|
|
38
|
-
- 现有本地 origin 是 https://github.com/f-e-n-g-0531/dsh-execution-bus.git ,git ls-remote 读取 HEAD 为 06299e9425d6ba197c0d2e04bf8818ddfe471edf。仓库名称已经存在,与当前工作区既有 remote 一致,未创建、推送或修改远程;GitHub API 限流未拿到账户所有权证明。
|
|
39
|
-
- 中文“执行总线”和英文“Execution Bus”是描述性显示名称,不是唯一名称或商标授权结论。
|
|
45
|
+
开发仓库中的提取脚本可在原调查安装布局下生成本地快照;该布局是开发证据,不是用户必需依赖。快照不进入仓库或 npm 包,因此本文不再提供指向未分发快照的相对链接。
|
|
40
46
|
|
|
41
|
-
##
|
|
47
|
+
## 插件能力与边界
|
|
42
48
|
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
### 当前可用
|
|
50
|
+
|
|
51
|
+
- 标准 Cordis 工具注册、异步等待及生命周期清理。
|
|
52
|
+
- 复用宿主工具管线和 Job 服务,不自行启动进程或实现独立 HTTP 执行服务。
|
|
53
|
+
- bundle patch 注册可选预设,由宿主既有 Agent 预设界面消费元数据,不需要自定义前端。
|
|
54
|
+
- 同预设范围内共享有界总线,但查询/取消按宿主 Agent 的会话身份分隔。
|
|
55
|
+
|
|
56
|
+
测试预设使用作用域 guard 拒绝非白名单执行,不是隐藏全部其他工具:文件工具套件的 write/edit 仍可能可见。它不是进程或权限沙箱,也不隔离进程资源消耗。宿主 cwd 只是路径解析基准,不是文件访问围栏。
|
|
57
|
+
|
|
58
|
+
### 当前不提供
|
|
59
|
+
|
|
60
|
+
- 接管所有现有工具或更改默认 Agent 预设。
|
|
61
|
+
- 持久化受理、跨重启恢复或重新认领原工具调用。
|
|
62
|
+
- 工具结果已写入会话磁盘日志的持久化回执。
|
|
63
|
+
- 远端执行端、通用工作流或有副作用操作的对账能力。
|
|
64
|
+
|
|
65
|
+
若未来要跨重启接续,需要宿主公开稳定的认领/提交契约;本项目不虚构这样的 API,也不通过聊天消息绕过。
|
|
66
|
+
|
|
67
|
+
## 故障处理
|
|
68
|
+
|
|
69
|
+
正常等待使用宿主 Job 窗口续等。等待服务异常后,先排空原执行并保留原服务错误;然后按原 owner 对确切 Job 最多检查 20 次、每次间隔 10 毫秒,尝试清理终态记录。这些是错误恢复检查,不是模型轮询或重跑任务。
|
|
70
|
+
|
|
71
|
+
宿主 rc.2 没有类型化 Job not-found 错误码。对先行移除的幂等处理仅匹配本调用创建的 Job 的精确错误消息,并确认原 owner 查询中记录已不存在。其他错误不被冒充成功。持续故障时可能遗留记录,不合作 Handler 可能阻碍关闭。
|
|
72
|
+
|
|
73
|
+
## 哪些是真实验证?
|
|
74
|
+
|
|
75
|
+
真实组件、真实 AgentLoop 内存会话和真实预设注册表均有隔离测试;模型侧是脚本适配器,部分 Agent 身份是夹具。桌面卡片渲染、实际权限提示/沙箱、磁盘结果提交和真实模型继续推理均未验收。详见[验证范围](<validation.md>)。
|
package/docs/protocol.md
CHANGED
|
@@ -1,52 +1,101 @@
|
|
|
1
|
-
# 协议 v1
|
|
1
|
+
# 协议 v1:请求、状态与结果
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本文面向调用者和 core Handler 开发者。消息示例见[使用说明](<../README.md>),兼容版本见[宿主说明](<host-compatibility.md>)。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 1. 请求结构
|
|
6
6
|
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"protocolVersion": 1,
|
|
10
|
+
"messageId": "message-001",
|
|
11
|
+
"requestId": "operation-001",
|
|
12
|
+
"type": "request",
|
|
13
|
+
"payload": { "handler": "test", "input": { "delayMs": 1000, "fail": false } }
|
|
14
|
+
}
|
|
15
|
+
```
|
|
7
16
|
|
|
8
|
-
|
|
17
|
+
| 字段 | 规则 |
|
|
18
|
+
|---|---|
|
|
19
|
+
| `protocolVersion` | 必须为数字 1 |
|
|
20
|
+
| `messageId` | 单请求范围内一条消息的编号;相同编号不同内容拒绝 |
|
|
21
|
+
| `requestId` | 同一逻辑执行的稳定编号;同会话内重复输入复用执行,不同输入拒绝冲突 |
|
|
22
|
+
| `type` | `request`、`status`、`result` 或 `cancel` |
|
|
23
|
+
| `payload` | request 必须为 `{handler,input}`;其他三种类型必须为 `{}` |
|
|
9
24
|
|
|
10
|
-
|
|
11
|
-
- requestId 是一次逻辑操作的稳定幂等键;作用域为当前插件实例 + 宿主 session。相同 requestId 不同 handler/input 拒绝冲突,相同输入使用新 requestId 仍是新操作。
|
|
12
|
-
- 输入规范排序后的摘要仅用于同 requestId 冲突比较,不作永久参数去重。保存期后旧键会失效,调用者不得因此盲目重跑有副作用操作。
|
|
13
|
-
- callId / rootCallId / Agent / parent token 来自宿主;通过工具原本的 Promise 关联结果,不依赖模型提供的身份。
|
|
25
|
+
两个 ID 都只接受 1–128 位字母、数字、下划线、点、冒号和短横线;不接受其他顶层字段。身份、权限和工作目录不能由消息另行指定。宿主工具上下文中的 Agent、调用 ID 与 token 才是可信关联。
|
|
14
26
|
|
|
15
|
-
|
|
27
|
+
请求最大 16 KiB。输入和结果采用严格 JSON:深度最多 64,访问节点最多 65536;拒绝非有限数字、负零、undefined、函数、符号、稀疏数组、访问器、特殊对象和循环引用。普通对象接受当前运行域 Object.prototype 或 null 原型;数组只接受当前运行域 Array.prototype。跨运行域值须先转换为受支持的纯数据,不能假定任意 JavaScript 对象都可传入。
|
|
16
28
|
|
|
17
|
-
|
|
29
|
+
### 去重与消息额度
|
|
18
30
|
|
|
19
|
-
|
|
31
|
+
- 逻辑键是 **当前存活总线实例 + 宿主会话身份 + requestId**。不同会话不能查询/取消彼此记录;同预设仍共享容量。
|
|
32
|
+
- 对参数规范排序后的摘要仅用于同 requestId 的冲突比较,不用于永久按参数去重。相同参数的新 requestId 仍是新操作。
|
|
33
|
+
- 普通消息最多记账 128 条,含首次请求、重复请求及查询。满后拒绝普通新消息;首次尚未确认的有效取消可使用一个额外控制槽,最多 129 条。已记账消息的冲突检查不因控制槽而放松。
|
|
34
|
+
- 活跃观察者附着最多 32 个;每个附着独立占名额,即使共用回调。附着被拒绝时不占用新消息编号/额度。
|
|
35
|
+
- 终态超期清理后旧请求键失效,不应把此机制用于长期避免外部副作用重复。
|
|
20
36
|
|
|
21
|
-
|
|
37
|
+
## 2. 工具返回和 core 事件
|
|
22
38
|
|
|
23
|
-
|
|
39
|
+
**工具 request 不提前返回 accepted 或仅 taskId。** 它异步等待后返回执行快照;校验、容量、宿主服务等也可能令外层工具调用返回错误,而非执行快照。
|
|
24
40
|
|
|
25
|
-
|
|
26
|
-
queued → cancelled。终态不可变;取消终态任务只返回原状态。
|
|
41
|
+
快照字段:`requestId`、`state`、`sequence`、`cancelRequested`、`delivery`,以及可选 `result`、`error`、`progress`。`status`、`result`、`cancel` 均返回当前快照;`result` 在运行中也只返回当前状态,不额外等待。
|
|
27
42
|
|
|
28
|
-
|
|
43
|
+
core 的 `submit()` 返回 `accepted`、`done` Promise 和取消/解除通知/返回标记句柄。accepted 只是内存受理或已有记录的快照,`durable:false`,不代表执行成功;终态重取也不代表重新执行。
|
|
29
44
|
|
|
30
|
-
|
|
45
|
+
通知包含版本、消息 ID、请求 ID、关联 ID(correlationId)、请求内序号、类型与 payload。accepted 的 correlationId 对应本次提交消息,序号是当前快照;后续事件关联首次请求 messageId,新增序号。类型包括 started、progress、cancel_requested 和 succeeded、failed、cancelled、unknown 四种终态事件。
|
|
31
46
|
|
|
32
|
-
|
|
47
|
+
Handler 报告的进度序号必须递增;重复、乱序及终态后进度忽略,百分比须在 0–100 内。事件及 payload 在通知前冻结。每个附着独立解除通知,detach 不取消执行;取消是另一个操作。观察者抛错或异步拒绝被隔离,不记录异常原文,也不等待观察者资源完成。
|
|
33
48
|
|
|
34
|
-
|
|
49
|
+
## 3. 执行状态和交付标记
|
|
35
50
|
|
|
36
|
-
|
|
51
|
+
```text
|
|
52
|
+
queued → running → succeeded / failed / cancelled / unknown
|
|
53
|
+
└────────────→ cancelled
|
|
54
|
+
```
|
|
37
55
|
|
|
38
|
-
|
|
56
|
+
终态不可再改成另一终态:
|
|
39
57
|
|
|
40
|
-
|
|
58
|
+
| 状态 | 含义 |
|
|
59
|
+
|---|---|
|
|
60
|
+
| queued | 内存已受理,尚未开始 |
|
|
61
|
+
| running | 正在执行 |
|
|
62
|
+
| succeeded | Handler 正常返回,结果可验证、保存 |
|
|
63
|
+
| failed | 未在取消中的 Handler 执行异常 |
|
|
64
|
+
| cancelled | 排队时取消,或运行 Handler 用 AbortError 确认取消 |
|
|
65
|
+
| unknown | 取消后异常未确认,或执行结果不能可靠保存 |
|
|
41
66
|
|
|
42
|
-
|
|
67
|
+
`cancelRequested` 只表示发出了 AbortSignal,不代表停止或回滚。取消后正常返回且结果可保存,成功可获胜;取消后其他异常保守记为 unknown。取消某个正在等待的重复调用,会请求取消整个逻辑执行,不是仅退出该等待者。
|
|
43
68
|
|
|
44
|
-
|
|
69
|
+
执行完成与结果交付分开。`pending`/`returned` 只是插件返回路径的标记;done 快照保留当时值,后续查询可看到更新。**returned 不证明宿主磁盘提交或模型已消费**。外层取消/后置策略仍可能改变返回值。
|
|
45
70
|
|
|
46
|
-
|
|
71
|
+
错误也须分层:Handler 异常原文不进入保存结果,使用 HANDLER_FAILED 等固定码;不合法、过大或快照不可保存结果为 unknown / RESULT_NOT_RETAINED。宿主 wait/remove 等服务错误可能作为外层工具错误传出,不能笼统声称所有错误都已脱敏或都是固定码。不要把宿主服务错误文本当成业务执行失败凭据。
|
|
47
72
|
|
|
48
|
-
##
|
|
73
|
+
## 4. 容量、保存与关闭
|
|
49
74
|
|
|
50
|
-
|
|
75
|
+
| 默认配置 | 值 |
|
|
76
|
+
|---|---|
|
|
77
|
+
| 并发执行 | 2 |
|
|
78
|
+
| 待分发队列 | 32 |
|
|
79
|
+
| 任务记录 | 256 |
|
|
80
|
+
| 单结果 JSON | 64 KiB |
|
|
81
|
+
| 终态保留期 | 自完成起 1 小时 |
|
|
51
82
|
|
|
52
|
-
|
|
83
|
+
新执行请求受队列和记录容量限制;运行中重复附着受消息/监听名额限制;未过期终态复用不申请新 Job。宿主新 Job 准入还有独立容量要求。没有公平性 SLA,单会话可能占满总线。
|
|
84
|
+
|
|
85
|
+
core 不传配置时用默认值;显式配置必须完整包含 concurrency、queueLimit、recordLimit、resultBytes、retentionMs 五项正安全整数。拒绝缺项、额外字段与访问器;构造时复制冻结,无动态更新接口。
|
|
86
|
+
|
|
87
|
+
保留期通过新请求或控制消息触发惰性清理,也可调用实例 `sweep()`;不是精确的一小时定时删除,闲置时记录可能继续占内存,但后续正常查询会先清理过期记录。无磁盘任务库。结果大小检查在 Handler 返回后进行,Handler 自身也必须限制内存分配。敏感返回内容仍可能进入宿主会话日志,本插件不是秘密识别器。
|
|
88
|
+
|
|
89
|
+
关闭停止受理,取消队列和运行任务,等待合作 Handler。正常路径复用 Job 窗口等待;服务异常后仍先排空执行,再有界检查记录并保留原服务错误。持续故障可能留记录到宿主生命周期清理,不合作 Handler 可能阻碍关闭。
|
|
90
|
+
|
|
91
|
+
## 5. 重试与恢复语义
|
|
92
|
+
|
|
93
|
+
当前没有网络传输层,自动通信重试与执行重试均为 0。正常 Job 的 60 秒窗口只由程序续等,不自动改为失败;异常清理有界检查也不是模型轮询或执行重试。
|
|
94
|
+
|
|
95
|
+
同存活实例、保存期内的请求复用不是端到端 exactly-once;每个实际工具调用仍有自己的宿主结果记录。没有外部终态注入接口,也没有跨重启恢复:任一阶段进程崩溃都会丢失插件内存状态。宿主日志不能复活旧 Promise,不追加聊天消息冒充原调用恢复。
|
|
96
|
+
|
|
97
|
+
## 6. 扩展 Handler
|
|
98
|
+
|
|
99
|
+
包的 `./core` 导出 ExecutionBus、Handler、Capability 类型。Handler 只接收输入、requestId、signal、progress 和可选最小 capability,不接收聊天历史。register 返回绑定唯一注册令牌的幂等注销函数,不会误删后来同名注册;已受理请求继续持有原 Handler。
|
|
100
|
+
|
|
101
|
+
内置 test 和 host.read 没有非幂等写能力。当前没有 ctx.executionBus 服务、远端传输、跨插件动态注册或外部副作用对账契约。扩展有副作用 Handler 前必须另行设计授权、幂等与崩溃对账,不能仅依赖本版请求键。
|
package/docs/releases/0.1.0.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 执行总线 0.1.0
|
|
2
2
|
|
|
3
|
+
> 历史版本说明:名称、能力和验证结论以该版本发布时为准,不代表当前版本状态。当前行为与限制请阅读 [README](<../../README.md>) 和[验证范围](<../validation.md>)。已发布标签及安装包不会因本文后续澄清而改变。
|
|
4
|
+
|
|
3
5
|
## 本版变化
|
|
4
6
|
|
|
5
7
|
第一阶段纯插件原型:版本化协议、有界队列、请求复用与冲突检查、原工具异步等待、宿主 Job 进度、受控测试 Handler 和宿主只读 read 接入。测试与发布流程参考 dsh-vcs,标签触发四矩阵 CI,正式发布独立手动门禁。
|
|
@@ -14,4 +16,4 @@
|
|
|
14
16
|
|
|
15
17
|
## 验证
|
|
16
18
|
|
|
17
|
-
真实宿主组件与 AgentLoop 内存会话采用脚本模型隔离测试;不能当作真实模型端到端通过。具体本地测试数与检查结果见 docs/validation.md。2026-10-15 正式发布完成:Windows/Ubuntu × Node 22/24 四项标签 CI
|
|
19
|
+
真实宿主组件与 AgentLoop 内存会话采用脚本模型隔离测试;不能当作真实模型端到端通过。具体本地测试数与检查结果见 docs/validation.md。2026-10-15 正式发布完成:Windows/Ubuntu × Node 22/24 四项标签 CI 全部通过,发布工作流成功。发布后核验时 npm latest 为 0.1.0;npm 与 GitHub 实际下载包均为 22,017 字节,与候选逐字节一致,SHA-256 为 9b5f57d829c2238d0bed8548e17633a67b15a5358b792df0d492071a261529ce。
|
package/docs/releases/0.1.1.md
CHANGED
package/docs/releases/0.1.2.md
CHANGED
package/docs/releases/0.2.0.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 执行总线 0.2.0
|
|
2
2
|
|
|
3
|
+
> 历史版本说明:名称、能力和验证结论以该版本发布时为准,不代表当前版本状态。当前行为与限制请阅读 [README](<../../README.md>) 和[验证范围](<../validation.md>)。已发布标签及安装包不会因本文后续澄清而改变。
|
|
4
|
+
|
|
3
5
|
## 新增功能
|
|
4
6
|
|
|
5
7
|
新增可选 Agent 预设“执行总线测试 / Execution Bus Test”,通过标准 dsh.bundle.patch 声明,出现在宿主 Agent 预设自定义列表。无需修改宿主前端或 DSH 源码。不会改变默认模式或已有会话。
|
package/docs/releases/0.2.1.md
CHANGED
package/docs/releases/0.2.10.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 萧何 / Xiao He 0.2.10
|
|
2
2
|
|
|
3
|
+
> 历史版本说明:名称、能力和验证结论以该版本发布时为准,不代表当前版本状态。当前行为与限制请阅读 [README](<../../README.md>) 和[验证范围](<../validation.md>)。已发布标签及安装包不会因本文后续澄清而改变。
|
|
4
|
+
|
|
3
5
|
## BUG 修复
|
|
4
6
|
|
|
5
7
|
Job 等待通道或清理服务异常时,不再在执行仍运行中提前结束原工具调用。保留调用方取消监听,等待原执行和宿主 outcome 达到终态,再尽力清理并返回原服务错误。不会因通信失败自动重跑或误记执行失败。
|
package/docs/releases/0.2.11.md
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 萧何 / Xiao He 0.2.12
|
|
2
|
+
|
|
3
|
+
## 文档纠错与整理
|
|
4
|
+
|
|
5
|
+
本版只整理对外文档,不修改插件运行逻辑或工具参数。
|
|
6
|
+
|
|
7
|
+
- 重组使用、协议、兼容性、验证和维护说明,统一当前名称与版本语境。
|
|
8
|
+
- 纠正验证文档中“21 项测试、尚未发布/推送”等过时状态;用 v0.2.11 的冻结证据与未验收清单分层说明,不预写本版发布成功。
|
|
9
|
+
- 移除指向未分发宿主快照的失效相对链接,保留组件名、构建符号、版本和定位行号。
|
|
10
|
+
- 修正流程图:先判断重复请求,终态结果复用不需要新 Job 准入;补充取消示例的并发要求和立即返回状态语义。
|
|
11
|
+
- 纠正错误分层、TTL 惰性清理、协议关联与容量说明,区分固定 Handler 错误码和宿主服务错误。
|
|
12
|
+
- 将已经修复的短暂 Job 问题从“待优化”移除,说明 test:flow 不覆盖全部后续集成用例。
|
|
13
|
+
- 历史发布说明增加版本语境提示;保留当时名称、缺陷与验证事实,不重写标签或公开包。
|
|
14
|
+
|
|
15
|
+
## 验证与限制
|
|
16
|
+
|
|
17
|
+
执行全量回归、对外文档链接检查、示例协议验证、包白名单及生产隔离安装;本版正式发布仍需标签四矩阵和候选一致性门禁。文档检查不等于 Mermaid 页面实际渲染或宿主 GUI 验收。
|
|
18
|
+
|
|
19
|
+
DSH 0.2.0-rc.2,非商业源码公开许可。真实模型、桌面卡片、实际沙箱及 PTC 完整链路未验收,不支持跨重启恢复;发布不自动安装或重启 DSH。
|
package/docs/releases/0.2.2.md
CHANGED
package/docs/releases/0.2.3.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 萧何 / Xiao He 0.2.3
|
|
2
2
|
|
|
3
|
+
> 历史版本说明:名称、能力和验证结论以该版本发布时为准,不代表当前版本状态。当前行为与限制请阅读 [README](<../../README.md>) 和[验证范围](<../validation.md>)。已发布标签及安装包不会因本文后续澄清而改变。
|
|
4
|
+
|
|
3
5
|
## 名称统一
|
|
4
6
|
|
|
5
7
|
统一当前产品显示名为“萧何 / Xiao He”,覆盖 Agent 预设卡片、工具说明、任务标签、模式提示、README、npm 描述和新 GitHub Release 标题。“执行总线”保留为技术功能描述,不代表新增人物 Agent 或角色扮演能力。
|
|
@@ -8,6 +10,6 @@
|
|
|
8
10
|
|
|
9
11
|
## 验证与限制
|
|
10
12
|
|
|
11
|
-
本版只调整名称和文字,不混入已审核但尚未修复的异步观察者异常隔离、数组子类 JSON 保真问题。它们仍影响 core
|
|
13
|
+
本版只调整名称和文字,不混入已审核但尚未修复的异步观察者异常隔离、数组子类 JSON 保真问题。它们仍影响 core 扩展边界,不能将更名表述为缺陷已修复。全量回归、预设隔离、标签四矩阵、包校验和同包安装按既有门禁执行。
|
|
12
14
|
|
|
13
15
|
实际桌面未安装,不保证当前界面立即出现卡片;用户已选择只发布暂不安装。真实模型、桌面 GUI 和 PTC 全链路仍未验收,不支持跨重启恢复。非商业源码公开许可,不自动安装或重启 DSH。
|
package/docs/releases/0.2.4.md
CHANGED
package/docs/releases/0.2.5.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 萧何 / Xiao He 0.2.5
|
|
2
2
|
|
|
3
|
+
> 历史版本说明:名称、能力和验证结论以该版本发布时为准,不代表当前版本状态。当前行为与限制请阅读 [README](<../../README.md>) 和[验证范围](<../validation.md>)。已发布标签及安装包不会因本文后续澄清而改变。
|
|
4
|
+
|
|
3
5
|
## BUG 修复
|
|
4
6
|
|
|
5
7
|
- Handler 注销函数绑定唯一注册令牌并支持幂等清理。旧注销函数重复执行不会误删后来同名注册,即使复用相同 Handler 对象。已受理请求继续使用它捕获的旧 Handler,新请求使用当前注册。
|
package/docs/releases/0.2.6.md
CHANGED
package/docs/releases/0.2.7.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 萧何 / Xiao He 0.2.7
|
|
2
2
|
|
|
3
|
+
> 历史版本说明:名称、能力和验证结论以该版本发布时为准,不代表当前版本状态。当前行为与限制请阅读 [README](<../../README.md>) 和[验证范围](<../validation.md>)。已发布标签及安装包不会因本文后续澄清而改变。
|
|
4
|
+
|
|
3
5
|
## BUG 修复
|
|
4
6
|
|
|
5
7
|
- core 构造器补齐完整配置校验:不传参数仍使用默认值;显式配置须包含 concurrency、queueLimit、recordLimit、resultBytes、retentionMs 五项正安全整数。缺项、额外字段、非对象及访问器立即 INVALID_OPTIONS,避免受理后因缺少并发配置而不执行。不扩展部分配置契约。
|
package/docs/releases/0.2.8.md
CHANGED
package/docs/releases/0.2.9.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# 萧何 / Xiao He 0.2.9
|
|
2
2
|
|
|
3
|
+
> 历史版本说明:名称、能力和验证结论以该版本发布时为准,不代表当前版本状态。当前行为与限制请阅读 [README](<../../README.md>) 和[验证范围](<../validation.md>)。已发布标签及安装包不会因本文后续澄清而改变。
|
|
4
|
+
|
|
3
5
|
## BUG 修复
|
|
4
6
|
|
|
5
7
|
修复终态 Job 被其他合法订阅者先行移除时,原工具调用错误返回 unknown job、无法交付已有执行结果的问题。等待及清理路径仅对当前调用创建的确切 Job 未找到错误、且同一 owner 查询确认已不存在时做幂等处理;继续等待原执行结果,不把记录移除当作成功。权限及其他服务异常仍明确失败,不一概吞掉。
|
package/docs/validation.md
CHANGED
|
@@ -1,61 +1,58 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 验证范围与使用限制
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本文说明当前版本的证据边界,不是生产环境认证。最近一次功能代码基线为 **v0.2.11**;0.2.12 只整理文档,不改变执行逻辑。验证环境为 Windows、Node.js 24.21.0,宿主组件锁定 DSH 0.2.0-rc.2、Cordis 4.0.4。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 已验证什么?
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
| 层次 | 检查内容 | 能说明什么 |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 总线核心 | 参数、队列、并发、重复请求、冲突、取消竞争、结果保存、TTL、监听与注销 | 程序内部约束及已覆盖异常路径可重复检查 |
|
|
10
|
+
| 真实宿主组件 | Cordis、ToolRuntime、LocalJobs、LocalFS、文件工具 | 请求经过真实工具管线;权限拒绝、Job 进度、共享任务与清理逻辑有效;Agent 身份为夹具 |
|
|
11
|
+
| 真实会话循环 | AgentLoop、AgentRegistry、SessionStore;脚本模型适配器 | 内存会话中原工具结果只提交一次,完成后再进入下一次适配器调用 |
|
|
12
|
+
| 预设隔离 | AgentPresetRegistry 与 Loader | 预设可激活;普通 Agent 不可见总线;测试预设 native 呈现不改变普通 Agent 的 PTC 呈现;写入调用被 guard 拒绝 |
|
|
13
|
+
| 故障注入 | 克隆失败、观察者拒绝、Job 等待/清理异常、先行移除与卸载交错 | 指定故障下的回归约束;不证明所有故障组合都已覆盖 |
|
|
14
|
+
| 候选包 | 严格文件白名单、临时目录生产依赖安装、入口注册 | 包可安装和加载;安装验证使用简化宿主夹具,不是桌面插件管理器验收 |
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
- 两个 session 同 requestId 结果独立,第三会话查询/取消拒绝。
|
|
11
|
-
- 同请求共用执行,同键不同输入冲突;同参数新键为不同操作。
|
|
12
|
-
- 重复/乱序/迟到进度丢弃,观察者抛错不影响执行。
|
|
13
|
-
- 等待时间短于执行时仍保持运行,不生成失败。
|
|
14
|
-
- 排队取消、运行取消、晚取消、完成竞争;取消未确认为 unknown;unknown 不自动重跑。
|
|
15
|
-
- 队列/记录容量背压、并发为一时第二任务保持 queued、控制消息上限。
|
|
16
|
-
- Handler 异常、未知 Handler、未知消息类型/版本、伪造身份字段、输入越界、结果过大、异常敏感文本不泄漏。
|
|
17
|
-
- 关闭合作任务并拒绝新受理;终态 TTL 清理,不误清理运行任务。
|
|
16
|
+
截至 v0.2.11,本地回归为 **48/48 通过,0 失败、0 跳过**。测试项数量是用例数量,不是全部产品验收条数。当前结果请重新运行下述命令;文档测试数不应代替实际输出。
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
```powershell
|
|
19
|
+
npm ci --include=dev --ignore-scripts
|
|
20
|
+
npm run check
|
|
21
|
+
npm run verify:package
|
|
22
|
+
npm run test:install
|
|
23
|
+
```
|
|
20
24
|
|
|
21
|
-
##
|
|
25
|
+
## 已发布不等于已在日常环境验收
|
|
22
26
|
|
|
23
|
-
|
|
27
|
+
项目已经正式发布到 npm 与 GitHub,不再是“仅有本地源码、尚未推送”。v0.2.11 的[标签 CI](https://github.com/f-e-n-g-0531/dsh-execution-bus/actions/runs/38741066848)和[发布工作流](https://github.com/f-e-n-g-0531/dsh-execution-bus/actions/runs/38741256031)均成功。
|
|
24
28
|
|
|
25
|
-
|
|
29
|
+
该版本公开 npm 与 GitHub tgz 均为 **37,036 字节**,与候选逐字节一致,SHA-256:
|
|
26
30
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
| GUI Jobs 实际可视展示 | 未验证;仅证明进度事件进入真实 Job 注册表 |
|
|
31
|
-
| 当前 Windows 授权提示和文件沙箱集成 | 未验证;测试使用 LocalFS 和前置拒绝策略,不代表桌面沙箱 |
|
|
32
|
-
| PTC 完整进程入口和超时 | 源码核查/类型兼容;未执行真实 PTC 冒烟 |
|
|
33
|
-
| 真实模型面对重复终态的继续行为 | 真实循环的单次结果提交已验证;真实模型及外部终态重投链路未验证 |
|
|
34
|
-
| 跨重启恢复原调用 | 不支持,不能用新消息冒充 |
|
|
35
|
-
| 受理/运行/结果/交付四阶段持久化崩溃注入 | 未实现持久化,不声称通过;当前实例丢失的边界测试通过 |
|
|
36
|
-
| 模型轮次、主动查询、重复执行、总耗时对照 | 全部未验证;不捏造提升比例 |
|
|
37
|
-
| 插件管理器完整安装、卸载与回滚 | 未验证;仅包构建/内容检查及 Cordis effect 注销 |
|
|
38
|
-
|
|
39
|
-
## CI 与发布流程检查
|
|
40
|
-
|
|
41
|
-
参考 dsh-vcs 配置标签/手动 CI:Windows/Ubuntu × Node 22/24;普通分支和 PR 不触发。新增版本/锁文件/标签一致性、包严格白名单、全新临时目录生产依赖安装、工作流 YAML 契约和许可证缺失拒绝测试。本地 Windows/Node 24 的 check、verify:package、pack:candidate、test:install 通过,npm audit 为 0 漏洞。
|
|
42
|
-
|
|
43
|
-
发布仅手动确认后运行,需精确标签 CI 成功且四份候选与重建包逐字节一致;先 npm 上传并验证公开实际字节,再创建 GitHub Release。用户已确认非商业许可证并授权正式发布;预检仍验证明确确认词及完整 LICENSE。2026-10-15:v0.1.0 标签 CI 四矩阵成功(运行 38705851984),联合发布成功(38706021548)。GitHub Release 非草稿、非预发布;npm latest 为 0.1.0。公开 npm/GitHub 包均为 22,017 字节,与候选逐字节一致,SHA-256:9b5f57d829c2238d0bed8548e17633a67b15a5358b792df0d492071a261529ce。npm-release 环境此前不存在,未配置维护者保护审批,发布使用用户授权及工作流明确确认门禁。
|
|
44
|
-
|
|
45
|
-
## 已完成 / 部分完成 / 后续
|
|
31
|
+
```text
|
|
32
|
+
eb95b4e51675f5f1821275e0812ef4dd4984b1aba45a52fbc6bab3518bbf6f38
|
|
33
|
+
```
|
|
46
34
|
|
|
47
|
-
|
|
35
|
+
这只证明那个冻结版本的制品事实,不代表任何后续版本已发布,也不代表此刻 npm latest 永远保持该版本。最新状态请看 [npm](https://www.npmjs.com/package/@feng0531/dsh-execution-bus) 与 [GitHub Releases](https://github.com/f-e-n-g-0531/dsh-execution-bus/releases)。每次正式发布另须通过同标签 Windows/Ubuntu × Node 22/24 四矩阵及制品一致性门禁。
|
|
48
36
|
|
|
49
|
-
|
|
37
|
+
## 未验证或不支持
|
|
50
38
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
39
|
+
| 项目 | 当前结论 |
|
|
40
|
+
|---|---|
|
|
41
|
+
| 当前桌面真实模型发起请求并继续推理 | 未验收;脚本适配器不是实际模型 |
|
|
42
|
+
| 当前桌面预设卡片、进度界面、授权提示和实际沙箱 | 未验收;组件事件和 LocalFS 测试不等于桌面 UI/沙箱 |
|
|
43
|
+
| PTC 完整进程与实际时间预算行为 | 只核对接口和源码,未完成端到端验收 |
|
|
44
|
+
| 从真实 tgz 经宿主插件管理器加载预设、卸载与回滚 | 未完成完整桌面流程;源码工作区的 Loader 测试不能替代 |
|
|
45
|
+
| 磁盘会话结果提交及重启恢复原调用 | 未验收磁盘提交;本插件不支持跨重启恢复 |
|
|
46
|
+
| 减少真实模型轮次、状态查询或总耗时的对照 | 未验证,不给提升比例 |
|
|
47
|
+
| 长期运行、所有卸载/服务故障组合 | 未穷尽;持续故障仍有清理限制 |
|
|
48
|
+
|
|
49
|
+
## 需要知道的运行约束
|
|
50
|
+
|
|
51
|
+
1. 受理、队列、结果及交付标记均在内存。进程关闭会丢失,宿主会话日志不等于插件恢复执行权。
|
|
52
|
+
2. 同一预设的会话共享总线容量,结果访问按会话隔离;不是独立进程或资源安全隔离。
|
|
53
|
+
3. 取消任一正在等待的重复调用会请求取消整个逻辑执行,不是仅停止该等待者。
|
|
54
|
+
4. 已终态且未过期的请求可直接复用结果,不申请新 Job;仍须通过身份、冲突及消息额度检查。
|
|
55
|
+
5. 等待服务异常后先排空原执行,再有界检查宿主记录;服务持续不可用时记录可能留到所属生命周期清理。不合作 Handler 仍可能阻碍关闭。
|
|
56
|
+
6. `returned` 不是宿主持久化或模型消费确认;外层取消和后置策略仍可能改变最终工具结果。
|
|
57
|
+
|
|
58
|
+
开发者可阅读[流程测试说明](<FLOW-TEST.md>)、[协议](<protocol.md>)和[宿主兼容性](<host-compatibility.md>)。
|