dsh-kingdom 3.1.0 → 3.2.1
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 +252 -244
- package/docs/DISPATCH-IDENTITY-PROBE.md +79 -0
- package/docs/DSH-KINGDOM-3.0-ANNOUNCEMENT.md +13 -13
- package/docs/V3.0-RELEASE-NOTES.md +21 -21
- package/docs/V3.0-USER-GUIDE.md +33 -33
- package/docs/V3.1-RELEASE-NOTES.md +76 -72
- package/docs/V3.2-RELEASE-NOTES.md +108 -0
- package/docs/V3.2.1-RELEASE-NOTES.md +39 -0
- package/lib/adapter/dsh-backend.js +189 -11
- package/lib/adapter/dsh-backend.js.map +1 -1
- package/lib/adapter/dsh-session-events.js +51 -7
- package/lib/adapter/dsh-session-events.js.map +1 -1
- package/lib/core/binding.js +166 -61
- package/lib/core/binding.js.map +1 -1
- package/lib/core/db.js +593 -546
- package/lib/core/db.js.map +1 -1
- package/lib/core/governed.js +20 -6
- package/lib/core/governed.js.map +1 -1
- package/lib/core/owner-binding-intent.js +14 -25
- package/lib/core/owner-binding-intent.js.map +1 -1
- package/lib/core/owner-window.js +106 -12
- package/lib/core/owner-window.js.map +1 -1
- package/lib/core/task-service.js +4 -1
- package/lib/core/task-service.js.map +1 -1
- package/lib/core/territory.js +43 -9
- package/lib/core/territory.js.map +1 -1
- package/lib/core/usage.js +10 -6
- package/lib/core/usage.js.map +1 -1
- package/lib/core/workspace-admission.js +31 -7
- package/lib/core/workspace-admission.js.map +1 -1
- package/lib/dispatch/service.js +141 -7
- package/lib/dispatch/service.js.map +1 -1
- package/lib/gui/contract.js.map +1 -1
- package/lib/gui/control-contract.js +3 -2
- package/lib/gui/control-contract.js.map +1 -1
- package/lib/gui/owner-ui.js +43 -2
- package/lib/gui/owner-ui.js.map +1 -1
- package/lib/gui/workbench-ui.js +15 -3
- package/lib/gui/workbench-ui.js.map +1 -1
- package/lib/gui/workbench.js +10 -0
- package/lib/gui/workbench.js.map +1 -1
- package/lib/index.js +78 -20
- package/lib/index.js.map +1 -1
- package/lib/types/adapter/contract.d.ts +20 -0
- package/lib/types/adapter/dsh-backend.d.ts +5 -1
- package/lib/types/adapter/dsh-session-events.d.ts +10 -1
- package/lib/types/core/binding.d.ts +14 -0
- package/lib/types/core/db.d.ts +16 -0
- package/lib/types/core/governed.d.ts +5 -0
- package/lib/types/core/owner-binding-intent.d.ts +9 -1
- package/lib/types/core/owner-window.d.ts +2 -1
- package/lib/types/core/territory.d.ts +18 -3
- package/lib/types/core/workspace-admission.d.ts +13 -1
- package/lib/types/dispatch/service.d.ts +18 -14
- package/lib/types/gui/contract.d.ts +9 -0
- package/lib/types/index.d.ts +11 -1
- package/lib/worker/governed-executor.js +18 -0
- package/lib/worker/governed-executor.js.map +1 -1
- package/package.json +84 -79
package/README.md
CHANGED
|
@@ -1,244 +1,252 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
# 🏰 dsh-Kingdom
|
|
4
|
-
|
|
5
|
-
**在 DeepSeek Harness 里,装一个插件,拥有一个自己的 Agent 王国。**
|
|
6
|
-
|
|
7
|
-
[](https://github.com/lusblead/dsh-Kingdom/actions/workflows/ci.yml)
|
|
8
|
-
[](LICENSE)
|
|
10
|
-
[](#1-前置要求)
|
|
11
|
-
[](#1-前置要求)
|
|
12
|
-
|
|
13
|
-
</div>
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 这是什么?
|
|
18
|
-
|
|
19
|
-
3.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
DSH
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
|
47
|
-
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
|
114
|
-
|
|
115
|
-
|
|
|
116
|
-
|
|
|
117
|
-
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
>
|
|
125
|
-
> `
|
|
126
|
-
>
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
|
196
|
-
|
|
197
|
-
| 0.
|
|
198
|
-
| 0.
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🏰 dsh-Kingdom
|
|
4
|
+
|
|
5
|
+
**在 DeepSeek Harness 里,装一个插件,拥有一个自己的 Agent 王国。**
|
|
6
|
+
|
|
7
|
+
[](https://github.com/lusblead/dsh-Kingdom/actions/workflows/ci.yml)
|
|
8
|
+
[](docs/V3.2.1-RELEASE-NOTES.md)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](#1-前置要求)
|
|
11
|
+
[](#1-前置要求)
|
|
12
|
+
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 这是什么?
|
|
18
|
+
|
|
19
|
+
3.2.1 修复派发前关联、可靠接受回执与只读恢复对账,收紧受理/验收的换绑窗口,并明确资源占用后的重新请求要求。输入缺失仍为 UNKNOWN,不提供安全作废或自动重发。查看 [3.2.1 版本说明](docs/V3.2.1-RELEASE-NOTES.md)。
|
|
20
|
+
|
|
21
|
+
3.2.0 把**主管与领地完全绑定**:任命主管时必须同时指定它的领地,席位与领地主理在同一事务里原子写入(不再可能留下"有主管、没领地"的中间态);一个领地至多一个在任主理,一个主管席位只主理一个领地;退任主管时同时解除其领地主理。同一版还修掉了交付记录区的版面塌陷。查看 [3.2 版本说明](docs/V3.2-RELEASE-NOTES.md)。
|
|
22
|
+
|
|
23
|
+
更早的 3.0.0 在 2.0 个人工作台之上加入 Owner 交付清单:逐条查看、知悉、核对主管确认的改动证据,并就具体条目向接受交付的主管提问。交付由 Owner 主动查看,宰相目前不会自动上报。查看 [3.0 使用指南](docs/V3.0-USER-GUIDE.md)、[版本说明与验证范围](docs/V3.0-RELEASE-NOTES.md) 和 [功能介绍](docs/DSH-KINGDOM-3.0-ANNOUNCEMENT.md)——3.0.0 的功能是随 3.1.0 一并发布的。已有任务、协作、用量与软预算能力见 [2.0 指南](docs/V2.0-USER-GUIDE.md)。
|
|
24
|
+
|
|
25
|
+
**dsh-Kingdom 是一个 DeepSeek Harness(DSH)插件**:产品目标是在不另行部署外部服务、独立数据库或单独 GUI 前端的前提下,在 DSH 中**创建并运行一个属于自己的最小王国**——
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
你:初始化王国
|
|
30
|
+
DSH:已创建王国「My Kingdom」,你成为 Owner
|
|
31
|
+
|
|
32
|
+
你:给当前项目建一个 RAG 研发领
|
|
33
|
+
DSH:已创建领地「RAG 研发领」
|
|
34
|
+
|
|
35
|
+
你:让 Chancellor 把"检查测试情况"规划成任务,Supervisor 派给 Worker,
|
|
36
|
+
再通过 `kingdom_start_task_governed` 执行并验收
|
|
37
|
+
DSH:任务 CREATED → ASSIGNED → RUNNING → REVIEW → DONE ✅
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**插件实现本地持久化语义**:角色、领地、任务和验收记录写入本地 SQLite;正式数据库迁移仍须按对应版本的迁移边界执行。
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## ✨ 核心特性
|
|
45
|
+
|
|
46
|
+
| 特性 | 说明 |
|
|
47
|
+
|---|---|
|
|
48
|
+
| 🚀 **零门槛安装** | 发布后的一个 tgz + 一条命令;内置 GUI 随 `lib/**` 交付,无需独立前端 |
|
|
49
|
+
| 🏛 **完整角色体系** | Owner / Chancellor / Supervisor / Worker,角色与 Session / 模型解耦 |
|
|
50
|
+
| 📋 **治理闭环语义** | 规划 → 分配 → 独立执行 → 验收,任务状态全程留痕 |
|
|
51
|
+
| ⚖️ **Claim ≠ Fact** | **Worker 说自己完成了 ≠ 任务完成**——完成权只在 Supervisor,代码强制,不是口头约定 |
|
|
52
|
+
| 🧭 **主管与领地完全绑定**(3.2) | 任命主管必须同时指定它的领地,席位与领地主理**同一事务**原子写入;一个领地至多一个在任主理,一个主管只主理一个领地;退任主管时同时解除其领地主理。存量"未隶属领地"的席位不会被自动归属,只在界面上标注待处理 |
|
|
53
|
+
| 👁️ **Owner 逐条知悉与提问**(3.0) | 交付摘要和细项独立呈现;知悉只记录 Owner 声明已知道该内容版本,不代替质量认可或任务完成;问题记在接受该交付的主管名下,待其主动读取并回复 |
|
|
54
|
+
| 🧾 **改动证据**(3.0) | 主管确认属于本交付的文件改动可展开查看,包括有界的未提交差异快照;标明证据级别,不把 Git 时间窗口误称为 Worker 作者证明 |
|
|
55
|
+
| 👷 **Persistent Governed Worker** | 候选源码的 canonical headless 路径使用 `kingdom_start_task_governed`:Worker 绑定长期 DSH Session,结果结构化返回并经 Capability/Lease 治理 |
|
|
56
|
+
| 🔁 **返工留痕** | governed REWORK 复用同一 Worker Persistent Session;每次尝试(attempt)都有独立 Lease/Execution 记录 |
|
|
57
|
+
| 💾 **持久化与恢复语义** | 状态写入本地 SQLite;真实 DSH 重启恢复与正式数据库本轮未验证(`NOT_RUN`) |
|
|
58
|
+
| 🔄 **换届与会话归属**(v0.4) | `kingdom_unbind_role` 解绑 / `kingdom_bind_session` 把角色绑到**独立会话**;`session-bound` 模式下只有被绑定会话能行使职权 |
|
|
59
|
+
| 🪪 **会话身份预留字段**(v0.4) | 角色可携带 `model_name` / `agent_name` / `session_meta`(JSON 扩展槽)——现在不必填,未来完整会话逐步填满 |
|
|
60
|
+
| 🎛 **内置本地 GUI**(v1.0) | 直接执行 `/kingdom gui` 打开操作台,进行会话绑定的任务规划、指派、持久治理执行与审查;Owner 配置仍只走 direct Slash |
|
|
61
|
+
| 👑 **Persistent Governed Worker**(v0.8) | Worker 拥有**长期 DSH Session**(REWORK 唤醒同一 Worker);Session ↔ Territory Affinity 不可改绑;每次执行经 **Capability Gate**(仅 GRANTED+ENFORCED 才 dispatch,Runtime 无法 enforce → **DENIED + zero execution**);**Execution Lease** 互斥 + **Dispatch Intent**(crash 可 reconcile,不盲发);terminal 证据来自事件链,**Runtime 跑完 ≠ Task DONE**(Claim → Supervisor 裁定链不变)。这是 canonical headless 路径 |
|
|
62
|
+
| 🛡️ **Fail-closed 能力治理**(v0.8) | 无自授 / 超 Ceiling / scope 外 / 部分 policy 一律拒绝;approval=never 禁扩权;workspace 外写真实拒绝;RECOVERING 状态如实显示,禁止显示成 Done |
|
|
63
|
+
| 🧩 **Legacy 兼容**(v0.8) | `kingdom_start_task` 仅在用户明确选择时作为 `LEGACY_COMPAT` one-shot 入口;不会作为默认路径、错误恢复建议或 persistent 失败 fallback |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 🚀 快速开始
|
|
68
|
+
|
|
69
|
+
### 1. 前置要求
|
|
70
|
+
|
|
71
|
+
- **DeepSeek Harness(dsh)**:本版 peer 声明与 3.1.0 相同,覆盖 `0.1.5-rc` 与 `0.1.7-0` 两条线;构建与回归在 CLI `0.1.5-rc.1` / 主要组件 `0.1.5-rc.2` 上完成。`0.1.7-rc.2` 的实机加载在 3.1.0 已验证(无 bundle 跳过,见 [3.1 版本说明](docs/V3.1-RELEASE-NOTES.md));**完整宿主和真人交互验收须以各版记录为准**(peer 声明未变,但不要把它当作已验证)。旧宿主请继续使用对应旧版插件
|
|
72
|
+
- **Node.js** ≥ `22.19`(内置 SQLite,插件零原生依赖)
|
|
73
|
+
- 一个可用的模型 API key(Worker 执行需要)
|
|
74
|
+
|
|
75
|
+
### 2. 安装 v3.2.1
|
|
76
|
+
|
|
77
|
+
本版以 GitHub [Releases](https://github.com/lusblead/dsh-Kingdom/releases) 与 npm 为公开入口;若当前环境还取不到已发布包,可从源码构建取得准确的 `dsh-kingdom-3.2.1.tgz`,核对包与本机备份后,再在自己的 DSH Web profile 安装:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
dsh plugin --profile web add ./dsh-kingdom-3.2.1.tgz
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
安装后重启 Web profile 才会加载新包。不要将本地候选的版本号当作 npm 或 GitHub Releases 已可下载的证据。
|
|
84
|
+
|
|
85
|
+
内置 GUI 随 `lib/**` 包含在 tgz 中,不需要额外 GUI zip:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
/kingdom gui # 激活短期本地控制会话并打开内置操作台
|
|
89
|
+
/kingdom status # 也可以从 DSH 会话查看王国真实状态
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Owner 是本机人类操作者,不是 Agent 或 Session。管理操作可由用户直接键入
|
|
93
|
+
exact `/kingdom` Slash,或从 `/kingdom owner.gui` 准确激活的独立短时管理窗口完成;`OWNER.session_id` 永远保持 `null`。Chancellor、Supervisor、
|
|
94
|
+
Worker 才使用真实 DSH caller session 的会话绑定(`session-bound`)角色平面;历史
|
|
95
|
+
`declarative / local-demo` 语义不能解锁产品写入。
|
|
96
|
+
|
|
97
|
+
### 3. 用 GUI 完成最小治理闭环
|
|
98
|
+
|
|
99
|
+
1. 先由人类通过 direct `/kingdom` Slash 或准确激活的人类管理窗口完成初始化、能力上限、领地、角色/会话与 Worker 执行方案配置;具体步骤见 [首次使用](docs/V2.0-USER-GUIDE.md#第一次使用)。
|
|
100
|
+
2. 在本地 DSH 会话直接键入 exact `/kingdom gui`;若本机浏览器完成带 ticket 的导航,一次性入口兑换后会重定向到干净的 `/console`。若本机打开请求失败,控制会话虽已激活,但命令只显示不含 ticket 的干净 `/console` 参考地址;该地址不能完成一次性兑换,不要手工拼接或复用启动值,直接重新执行 `/kingdom gui`。
|
|
101
|
+
3. 日常工作台用于会话绑定操作与只读观察:Chancellor 会话规划任务;任务领地的 Supervisor 会话负责指派、选择 Host 提供的沙箱模式、启动与审查。设置页可进入独立人类管理页面。切换角色职权时要从对应真实 DSH 会话重新激活,不能由浏览器自报身份。
|
|
102
|
+
4. Worker 输出只会进入待审状态 `REVIEW`。Supervisor 选择接受 `ACCEPT` 后才进入 `DONE`;返工 `REWORK` 回到 `RUNNING` 并保留同一 Assignment,判定失败 `FAIL` 进入 `FAILED`。不用时执行 `/kingdom gui stop` 撤销控制会话并关闭本地 server。
|
|
103
|
+
|
|
104
|
+
Owner 专属 JSON Slash 命令只接受单个 object envelope;未知字段、额外 token、重复字段和
|
|
105
|
+
`OWNER.session_id` 改绑会在写入前拒绝。独立 GUI/HTTP 不能自行取得 Authority;只有 direct
|
|
106
|
+
`/kingdom gui` 激活闭包内的短期控制会话才可能执行日常角色操作,浏览器 payload 不能提交
|
|
107
|
+
principal/session/Owner capability。
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 🛠 工具一览
|
|
112
|
+
|
|
113
|
+
| 阶段 | 工具 |
|
|
114
|
+
|---|---|
|
|
115
|
+
| 王国基础 | **`/kingdom init`**(Owner direct)· `kingdom_status`(只读) |
|
|
116
|
+
| 领地 | **`/kingdom territory.* <JSON>`**(Owner direct)· `kingdom_list_territories`(只读) |
|
|
117
|
+
| 角色 | **`/kingdom role.* <JSON>`**(Owner direct)· `kingdom_list_bindings`(只读) |
|
|
118
|
+
| 能力治理 | **`/kingdom ceiling <JSON>`**(Owner direct) |
|
|
119
|
+
| 任务治理 | `kingdom_plan_task` · `kingdom_assign_task` · **`kingdom_start_task_governed`(CANONICAL HEADLESS)** · `kingdom_review_task` · `kingdom_list_tasks` |
|
|
120
|
+
| 显式兼容 | `kingdom_start_task`(`LEGACY_COMPAT` one-shot;必须传 `legacy_opt_in=true`,仅用户明确选择,不自动 fallback) |
|
|
121
|
+
| 执行控制 | `kingdom_execution_control` |
|
|
122
|
+
| GUI | **`/kingdom gui`**(打开)· **`/kingdom gui stop`**(撤销并关闭)· `kingdom_snapshot` · `kingdom_task_detail` |
|
|
123
|
+
|
|
124
|
+
> **领地删除(v0.5.1)**:`/kingdom territory.delete <JSON>` 遵循治理语义——
|
|
125
|
+
> 领地下存在任务(任意状态)时**默认拒绝**;传 `force=true` 才级联删除:未终态任务统一标记 `FAILED`、
|
|
126
|
+
> 活跃执行终止,`TERRITORY_DELETED` / `TASK_FAILED` 事件留痕;`DONE`/`FAILED` 终态任务不篡改。
|
|
127
|
+
|
|
128
|
+
> **Owner Ceiling(v0.8)**:在任何 governed start 前,用户直接执行
|
|
129
|
+
> `/kingdom ceiling {"ceiling":{"filesystem.write":true,"tool:pwsh":true}}`。
|
|
130
|
+
> `ceiling` 不是 Agent Grant,不能由 Tool 参数或 `exec.agent.session.id` 代替;未配置或越过
|
|
131
|
+
> Ceiling 仍由既有 Capability Gate 拒绝并完成 Lease cleanup。清空 Ceiling 只会保持 fail-closed。
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 🧠 它如何保证"治理是真的"?
|
|
136
|
+
|
|
137
|
+
这是 dsh-Kingdom 与其他 Agent 编排工具最根本的区别:
|
|
138
|
+
|
|
139
|
+
```text
|
|
140
|
+
Worker 交回结果 ──→ 这是一条 Claim(自述),只进 REVIEW
|
|
141
|
+
↓
|
|
142
|
+
Supervisor ACCEPT ──→ DONE(组织事实)
|
|
143
|
+
Supervisor REWORK ──→ 返工(同一 Worker Persistent Session)
|
|
144
|
+
Supervisor FAIL ──→ FAILED(组织事实)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
- **Worker 没有"完成"的权力**:它没有上报结果的工具,结果经宿主接收后落库,任务永远停在 `REVIEW`。
|
|
148
|
+
- **没有任何工具能把任务直接置为 DONE**——DONE 唯一入口是 Supervisor 的 ACCEPT。
|
|
149
|
+
- **即使是 Worker 自称失败**,任务也只到 REVIEW;FAILED 只能是 Supervisor 裁定,或宿主观察到执行器客观失败(启动失败/异常退出)。
|
|
150
|
+
- 每次执行(attempt)都记入 `worker_results`,返工历史完整可查。
|
|
151
|
+
|
|
152
|
+
> **一句话:模型可以提出动作,但只有程序决定状态。**
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 📁 数据与存储
|
|
157
|
+
|
|
158
|
+
| 项目 | 说明 |
|
|
159
|
+
|---|---|
|
|
160
|
+
| `~/.dsh/kingdom/kingdom.db` | 王国全部数据(SQLite,自包含) |
|
|
161
|
+
| Schema v4 | 在既有王国、领地、角色、任务、呈报、执行与事件之外,包含 Assignment、Affinity、Capability Decision、Lease 与 Dispatch 等治理账本 |
|
|
162
|
+
|
|
163
|
+
全新库或尚无王国数据的库可直接建立 v4;已有 v3 库默认保持 v3,不会自动迁移。只有经过 Formal DB Migration Gate 明确放行后才可迁移;未迁移时 GUI governed plan 与 governed start 均 fail-closed。本文档施工没有读取、迁移或验证正式数据库(`NOT_RUN`),不能据此声称旧库兼容或迁移通过。
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 🎛 GUI(王国操作台)
|
|
168
|
+
|
|
169
|
+
GUI 已内置在插件中,不需要下载或启动第二个前端项目。直接在本地 DSH 会话执行:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
/kingdom gui
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
插件只绑定 `127.0.0.1`,按实际监听端口生成一次性短期启动值,并请求本机浏览器打开 Console。启动值只兑换一次,随后重定向到干净的 `/console`;写请求还须通过 HttpOnly `SameSite=Strict` Cookie、CSRF、唯一 request id、精确 Origin 与单一在途请求检查。GUI/HTTP 本身没有 Authority,也不能构造 Owner 或角色身份。
|
|
176
|
+
|
|
177
|
+
### 操作台能力
|
|
178
|
+
|
|
179
|
+
- 首页就是无外层边框的“王国地图”:默认森林墨绿主题,可切换四种主题;领地颜色随主题区分,人物卡片按任务状态显示不同状态色。
|
|
180
|
+
- “管理中心”和“王国账本”是独立页面。首页只保留组织结构和一个主输入框;在输入框键入 `/` 可选择领地并发起常用任务,复杂技术信息放在展开详情中。
|
|
181
|
+
- 四类证据分别是治理事实(`GOVERNANCE_FACT`)、运行观察(`RUNTIME_OBSERVATION`)、执行者呈报(`WORKER_CLAIM`)与派生解释(`DERIVED_EXPLANATION`),不能压成一条“总体成功”。
|
|
182
|
+
- 日常主链是规划→指派→持久治理执行→呈报进入 `REVIEW`→Supervisor 裁决 `ACCEPT/REWORK/FAIL/HANDOFF`;持久路径失败不会自动降级到 `LEGACY_COMPAT`。
|
|
183
|
+
- Owner 专属动作始终不可执行(`executable=false / DIRECT_SLASH_REQUIRED`)。带状态 GET 需要有效本地控制 Cookie 或已配置 bearer;内部 `readContext` 来自 direct 激活时捕获的 Session,不接受浏览器自报,也不序列化到响应。
|
|
184
|
+
- 对 `GOVERNED_PERSISTENT`,暂停、恢复、终止当前都不可执行。合法生命周期候选在会话、Supervisor、scope、Host 与命令覆盖检查通过后,投影返回 `executable=false / GOVERNED_RUNTIME_CONTROL_UNAVAILABLE`;其他状态可能不列动作或先显示更早的拒绝原因。命令名称存在不代表可验证的 Runtime control seam 已实现。
|
|
185
|
+
- 未结算的持久治理 Execution 会在访问 Runtime/Session/Lease 前阻止新 attempt;对已有 Dispatch 关联的不可判定恢复路径,Dispatch、Lease、Execution 原子进入 `RECOVERING`,不改 Task、不自动重试或伪造终态。
|
|
186
|
+
- 事件与投影 payload 经过递归、有界脱敏,但这不是提交秘密的许可。
|
|
187
|
+
- 证据必须分层读取:静态源码/测试只是前置;fake Runtime、headless 浏览器、桌面真实连续交互、真实 DSH/Provider 是不同证据层级,不能互相替代。
|
|
188
|
+
> v1.0 GUI 的王国地图、管理中心、王国账本、任务→执行→审查、Authority 与恢复口径见
|
|
189
|
+
> [v1.0 GUI 快速开始](docs/v1.0/GUI_QUICK_START.md)。
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 🗺 路线图
|
|
194
|
+
|
|
195
|
+
| 版本 | 内容 | 状态 |
|
|
196
|
+
|---|---|---|
|
|
197
|
+
| 0.1.x | 王国基础:初始化/领地/角色绑定/重启恢复 | ✅ 已发布 |
|
|
198
|
+
| 0.2.x | 任务治理闭环:plan/assign/execute/review + **Claim ≠ Fact** | ✅ 已发布 |
|
|
199
|
+
| 0.3.x | 执行生命周期 + GUI 适配层 + 热插拔加固 | ✅ 已发布 |
|
|
200
|
+
| 0.4.x | **换届与会话归属**:unbind/bind_session、会话身份预留字段、session-bound 强制校验、init 引导 | ✅ 已发布 |
|
|
201
|
+
| 0.5.x | **领地删除**(拒绝优先 + force 级联 + 事件留痕)、GUI 删除控制、市场收录 | ✅ 已发布 |
|
|
202
|
+
| 0.8.0 | Persistent Governed Worker、Capability/Lease/Dispatch/Recovery | ✅ 已发布 |
|
|
203
|
+
| 0.9.0-alpha.1 | 内置可操作 GUI 最小闭环 | 本地源码阶段,尚未发布 |
|
|
204
|
+
| 1.0.0 | 王国地图、管理中心、王国账本、移交、沙箱与诚实的执行控制投影 | ✅ 已发布 |
|
|
205
|
+
| 2.0.0 | 个人工作台、人类管理窗口、有界协作、用量与软预算、恢复约束 | 上一版本;发布状态以 Releases 为准 |
|
|
206
|
+
| 3.0.0 | Owner 交付清单、逐条知悉、主管确认的改动证据、条目问答 | 随 3.1.0 一并发布 |
|
|
207
|
+
| 3.1.0 | DSH 0.1.7 兼容(peer 分线声明)、无 live Agent 会话可绑定席位、`session_evidence` 证据字段 | ✅ 已发布,然后是 3.2.0 |
|
|
208
|
+
| 3.2.0 | 主管与领地完全绑定、交付区版面修复 | 已发布 |
|
|
209
|
+
| 3.2.1 | 单次派发关联、可靠 Receipt、只读恢复对账、事务授权与占用诊断修复 | 发布状态见 [Releases](https://github.com/lusblead/dsh-Kingdom/releases) 与 npm |
|
|
210
|
+
|
|
211
|
+
> 已发布版本与市场更新状态以 [Releases](https://github.com/lusblead/dsh-Kingdom/releases) 为准(发布流程见 [RELEASE.md](RELEASE.md))。
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 📖 文档
|
|
216
|
+
|
|
217
|
+
- [3.2 版本说明](docs/V3.2-RELEASE-NOTES.md) — 主管与领地完全绑定、原子写入与退任联动、交付区版面修复
|
|
218
|
+
- [3.1 版本说明](docs/V3.1-RELEASE-NOTES.md) — DSH 0.1.7 兼容范围与无 live Agent 会话的席位绑定
|
|
219
|
+
- [3.0 使用指南](docs/V3.0-USER-GUIDE.md) — 交付清单、知悉、查看改动与条目问答
|
|
220
|
+
- [3.0 版本说明](docs/V3.0-RELEASE-NOTES.md) — 新增内容及实际验证范围
|
|
221
|
+
- [3.0 功能介绍](docs/DSH-KINGDOM-3.0-ANNOUNCEMENT.md) — 面向使用者的文章草稿
|
|
222
|
+
- [2.0 使用指南](docs/V2.0-USER-GUIDE.md) — 上一版本的日常任务、协作与恢复
|
|
223
|
+
- [v1.0 GUI 快速开始](docs/v1.0/GUI_QUICK_START.md) — 历史版本参考
|
|
224
|
+
- [LICENSE](LICENSE) — AGPL-3.0-or-later
|
|
225
|
+
|
|
226
|
+
## 🤝 参与贡献
|
|
227
|
+
|
|
228
|
+
欢迎提交 Issue / PR。克隆源码后安装锁定依赖并构建;单元测试使用隔离夹具,不读取个人数据库或调用付费模型:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
npm ci --registry=https://registry.npmjs.org
|
|
232
|
+
npm run typecheck
|
|
233
|
+
npm test
|
|
234
|
+
node scripts/p2-smoke.mjs # 当前治理与恢复测试
|
|
235
|
+
node scripts/p3-smoke.mjs # 当前 GUI 与人类管理窗口测试
|
|
236
|
+
node scripts/hotplug-audit.mjs # 服务释放、撤销与恢复测试
|
|
237
|
+
npm pack # 从当前源码重新构建并打包
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## 📜 许可证
|
|
241
|
+
|
|
242
|
+
[AGPL-3.0-or-later](LICENSE) © 2026 lusblead。v0.8.0 及更早版本保持其发布时的 BSD-3-Clause 许可。
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
<div align="center">
|
|
247
|
+
|
|
248
|
+
**Unofficial project, independently developed and maintained by community members.**
|
|
249
|
+
|
|
250
|
+
*DSH · Agent Kingdom · Multi-agent governance*
|
|
251
|
+
|
|
252
|
+
</div>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Dispatch identity probe — 2026-10-13
|
|
2
|
+
|
|
3
|
+
## 偏移与关键问题(必须首先阅读)
|
|
4
|
+
|
|
5
|
+
- 设计偏移:NONE;Core 保留 opaque Runtime 引用,Adapter 不取得治理权限。
|
|
6
|
+
- 最重要问题:持久化输入是正证据;缺少输入仍是 UNKNOWN,不能据此作废、释放 Lease 或重发。
|
|
7
|
+
- 未通过状态:Provider、真实 enforcement、terminal、冷 cleanup、安全作废和子目录写根均 NOT_RUN / UNKNOWN。
|
|
8
|
+
- 需要 Owner 裁决:NO;本探针验证关联与只读观察,不增加处置权限。
|
|
9
|
+
|
|
10
|
+
## 官方版本和复用选择
|
|
11
|
+
|
|
12
|
+
探针对调用方明确指定的已安装官方包读取各自 package.json。上一轮读取的 `dsh-agent`、`dsh-agent-loop`、`dsh-session`、`dsh-session-persistence-jsonl` 等组件均为 `0.1.5-rc.2`;安装目录名称不是组件版本。每次报告记录当前实际版本,结论仅对所列版本和该次明确指定的产品编译目录成立。
|
|
13
|
+
|
|
14
|
+
复用官方 Agent Registry、公开 maintenance / followup、`sessions.flush` 和 JSONL persistence handle,不复制 Runtime 存储、不新增上游 metadata。官方包采用 MIT 许可证;本轮没有新增产品依赖或 Provider 插件。Adapter 延续结构型完整 UserMessage,通过 Node UUID 和深层 Object.freeze 在调用前冻结消息;没有调用官方 `MessageId` / `freezeMessage` 构造器,不将这两个 API 写为实测链。真实 rc.2 followup 接受该完整消息仍须由产品探针证明。
|
|
15
|
+
|
|
16
|
+
匹配版本依据为安装包 `dsh-agent/README.md`、`dsh-session/README.md` 及其 `lib/types/index.d.ts`,`dsh-session-persistence/README.md` 及 `lib/types/handle.d.ts`,`dsh-session-persistence-jsonl/README.md`。公开说明和类型明确:
|
|
17
|
+
|
|
18
|
+
- `followup` 是 next-turn 入队并唤醒 driver,不是 terminal 或持久化 Receipt。
|
|
19
|
+
- `sessions.flush(session): Promise<boolean>` 在所有 durability listener 结束后返回;`true` 表示至少一个 listener 参与,`false` 表示没有 listener。`false` 不是“证明未派发”;也不是可靠接受。本探针装配官方 JSONL listener。
|
|
20
|
+
- persistence `open(id, 'read') / read(offset, length) / close()` 允许不 resume 的公开只读事件读取;read 的默认全量行为没有被产品 reconcile 使用。
|
|
21
|
+
- maintenance 预留真实 driver 的活动区间。本探针在该区间持有 reservation 到强杀,阻止模型轮次启动。
|
|
22
|
+
|
|
23
|
+
## 第二轮产品路径与证据边界
|
|
24
|
+
|
|
25
|
+
脚本:`scripts/e2e/dsh-dispatch-id-probe.mjs`。两个 case 都直接经过本轮编译的产品 Adapter 与 Core:
|
|
26
|
+
|
|
27
|
+
1. 真实 `DshRuntimeAdapter.createSession` 创建独立 Session;公开 maintenance 保持 driver 暂停。
|
|
28
|
+
2. 产品 `prepareDispatch` 冻结消息和单次 opaque token;此时未调用 followup。
|
|
29
|
+
3. 真实 Core `prepareGovernedDispatch` 完成 TX-3,将 Kingdom dispatch ID 和 planned Runtime ref 持久化到 `INTENDED`。它们与 Receipt、terminal 和治理事实明确分开。
|
|
30
|
+
4. `SENT_AFTER_FLUSH`:调用真实产品 `Adapter.dispatch`,仅在公开 flush 返回 true 后得到 Runtime Receipt;强杀 writer 前刻意不记录 Core Receipt。
|
|
31
|
+
5. `COMMIT_BEFORE_SEND`:TX-3 后不发送输入,直接强杀 writer;只对空 Session 完成一次 baseline flush,确保 reader 能读取。baseline flush 不是派发接受。
|
|
32
|
+
6. 两 case 启动全新 reader PID,只加载 session + persistence 服务,不 resume、不创建 Agent、不启模型。fresh 产品 Adapter 用真实已持久化 Core ref 调用 `.reconcile`;另用有界公开 read 交叉检查精确 inbox ref 数和 `turn/start` 数。
|
|
33
|
+
7. 断言正例为 `QUEUED / located=true`,未发送例为 `UNKNOWN / located=false`。均要求 Core 行/事件不变、Receipt 缺失、Lease 仍 EXECUTING、Execution 仍 STARTING、Task 仍 ASSIGNED、Claim 为0、模型 turn 为0。
|
|
34
|
+
|
|
35
|
+
权威、Binding、Capability Decision 和 cleanup plan 是显式直接写入隔离测试账本的 **FAKE_PREREQUISITES**;本探针只证明产品准备、Core TX-3、真实 DSH 派发耐久性和冷只读关联。它不是全受治理端到端、真实 sandbox/enforcement、Provider 成功、任务终态或最终验收证明。
|
|
36
|
+
|
|
37
|
+
运行方式:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
node scripts/e2e/dsh-dispatch-id-probe.mjs <installed-runtime-root> <isolated-output-root> <current-compiled-product-lib-root>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
第三参数也可由 `KINGDOM_DISPATCH_ID_PROBE_LIB_ROOT` 显式提供;未提供则在启动 Runtime / 创建目录前拒绝。脚本不会默认为仓库旧 `lib`,不能用旧编译输出证明新源码。调用方负责先把当前源码编译到独立 stage;探针不执行构建。
|
|
44
|
+
|
|
45
|
+
脚本仅终止本次 fork 创建的子进程。每次创建随机名测试子目录,Session JSONL、测试 kernel DB 只留在指定的 ignored 本地输出目录。报告保存有界状态、版本和比较结果,不输出原始会话、消息文本、绝对个人路径或 exact Session/message ref。报告输出 `dispatch-id-probe-report.json`;此报告及测试账本不能进入发布包。
|
|
46
|
+
|
|
47
|
+
`tests/dsh-dispatch-id-probe.test.mjs` 的4项失败路径检查验证:不得隐式沿用旧lib、缺失输入不得提升为 QUEUED、turn/Claim/DONE/Receipt/release不得假造、正常退出/同PID不得冒充强杀和新进程读取。它们不是 Runtime 探针证据。
|
|
48
|
+
|
|
49
|
+
## 3.2.1 发布移植的版本核对
|
|
50
|
+
|
|
51
|
+
派发关联改动从第二轮整改基线形成有限 delta,移入 `3.2.0` 发布源码;不会用旧开发树覆盖 3.0—3.2 的功能。下列静态核对只说明公开接口匹配,不继承旧编译或旧运行的 PASS:
|
|
52
|
+
|
|
53
|
+
- 已读取安装的 `0.1.7-rc.2` 官方组件 README、package.json 和公开类型:`dsh-session`、`dsh-agent`、`dsh-session-persistence` 与 JSONL backend。这些组件均声明 MIT 许可证。
|
|
54
|
+
- `sessions.flush(session): Promise<boolean>`、完整 UserMessage `followup` 和 persistence `open(id, 'read') / read(offset, length) / close()` 的本轮调用形状与 `0.1.5-rc.2` 一致;`read` 返回 `{ eventState, events }`,产品读取 `events`,不假定数组返回。
|
|
55
|
+
- `0.1.7-rc.2` 的 Session README 与类型已将 `snapshotEvents`、`eventAt`、`ownEvents` 标记 deprecated,仍保留公开方法,并允许既有逻辑暂不迁移。本插件 live 观测继续依赖这一公开兼容面;本轮不改造既有 warm fence、cleanup 或 Runtime 投影。冷 persistence 观察使用公开异步 read handle。
|
|
56
|
+
- 每个目标 Runtime 版本都必须用本次发布源码的明确编译目录重新跑产品探针。真实结果在运行后单独记录;只有类型检查或 probe 断言测试通过时,Runtime 能力仍为 `NOT_RUN / UNKNOWN`。
|
|
57
|
+
|
|
58
|
+
## 结果记录
|
|
59
|
+
|
|
60
|
+
- 3.2.1 发布基线:本轮当前源码构建分别对实际官方0.1.5-rc.2和0.1.7-rc.2运行v2产品探针,四个case全部PASS。两条线均为SENT_AFTER_FLUSH输入1条/QUEUED、COMMIT_BEFORE_SEND输入0条/UNKNOWN,fresh reader读取前后Core不变、Provider和模型turn均0。该结果不外推完整治理或安全作废。
|
|
61
|
+
|
|
62
|
+
- 上一轮 v1:仅 Runtime 构造器 + followup + flush + 新 persistence reader,PASS;不代表本轮产品路径。
|
|
63
|
+
- 整改开发树 v2(发布移植前):2026-10-13 本机 PASS,使用当时整改源码的独立编译 stage。所有装配的 DSH 组件实际为 `0.1.5-rc.2`;没有加载 Provider 插件。这不是 `3.2.1` 发布源码的实测结果。
|
|
64
|
+
|
|
65
|
+
| Case | 真 writer 强杀 / 新 reader PID | 持久化精确输入 | fresh Adapter observation | Core Receipt / Lease / Task / Claim | 模型 turn |
|
|
66
|
+
|---|---|---|---|---|---|
|
|
67
|
+
| SENT_AFTER_FLUSH | SIGKILL / YES | 1条;与 TX-3 planned ref 相同 | QUEUED,PERSISTED,complete=true | 无 / EXECUTING / ASSIGNED / 0 | 0 |
|
|
68
|
+
| COMMIT_BEFORE_SEND | SIGKILL / YES | 0条;planned ref 已存在 | UNKNOWN,PERSISTED,complete=true | 无 / EXECUTING / ASSIGNED / 0 | 0 |
|
|
69
|
+
|
|
70
|
+
两例均在 SEND 前确认 Core 已存 Kingdom ID 与 planned ref;reader observation 返回同一 ID/ref;Reader 对账前后隔离 Core 行和事件计数不变。实际报告在本地 ignored `dispatch-correlation-dev/probe/dispatch-id-probe-report.json`,不将本轮 PASS 外推到其他编译、版本或 backend。
|
|
71
|
+
|
|
72
|
+
## 不能推导的结论
|
|
73
|
+
|
|
74
|
+
- 未 flush、flush=false、throw 或超时均不能据此证明未派发。产品 prepared token 在第一次 side effect 前消耗;不确定时不能复用该 token 重发。
|
|
75
|
+
- `flush=true` 仅在当前公开 listener 与 backend 成功完成前提下支持持久化接受;不能外推到任意 backend 的 durability 实现。
|
|
76
|
+
- 找不到 ID 不证明未出境;查询完整性、原发送方失效屏障、迟发/未落盘输入和 enforcement cleanup 仍须单独证明。
|
|
77
|
+
- 持久 inbox 中排队消息可能在未来 resume 时执行。当前 turn 为0不证明未派发或安全作废。
|
|
78
|
+
- 只读恢复观察不重建原 Fence/cleanup context、不补写 Receipt、不 settle/release、不发 Claim、不推进 Task DONE。
|
|
79
|
+
- 强杀仅针对本探针拥有的 writer,不能授权终止其他产品 Session 或进程。
|