dsh-kingdom 0.3.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.
Files changed (46) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +184 -0
  3. package/cordis.patch.yml +6 -0
  4. package/lib/core/binding.js +57 -0
  5. package/lib/core/binding.js.map +1 -0
  6. package/lib/core/db.js +521 -0
  7. package/lib/core/db.js.map +1 -0
  8. package/lib/core/execution.js +88 -0
  9. package/lib/core/execution.js.map +1 -0
  10. package/lib/core/kingdom.js +117 -0
  11. package/lib/core/kingdom.js.map +1 -0
  12. package/lib/core/task-service.js +581 -0
  13. package/lib/core/task-service.js.map +1 -0
  14. package/lib/core/task.js +93 -0
  15. package/lib/core/task.js.map +1 -0
  16. package/lib/core/territory.js +47 -0
  17. package/lib/core/territory.js.map +1 -0
  18. package/lib/gui/contract.js +53 -0
  19. package/lib/gui/contract.js.map +1 -0
  20. package/lib/gui/server.js +204 -0
  21. package/lib/gui/server.js.map +1 -0
  22. package/lib/gui/snapshot.js +379 -0
  23. package/lib/gui/snapshot.js.map +1 -0
  24. package/lib/index.js +489 -0
  25. package/lib/index.js.map +1 -0
  26. package/lib/paths.js +23 -0
  27. package/lib/paths.js.map +1 -0
  28. package/lib/types/core/binding.d.ts +11 -0
  29. package/lib/types/core/db.d.ts +261 -0
  30. package/lib/types/core/execution.d.ts +51 -0
  31. package/lib/types/core/kingdom.d.ts +34 -0
  32. package/lib/types/core/task-service.d.ts +107 -0
  33. package/lib/types/core/task.d.ts +60 -0
  34. package/lib/types/core/territory.d.ts +9 -0
  35. package/lib/types/gui/contract.d.ts +226 -0
  36. package/lib/types/gui/server.d.ts +26 -0
  37. package/lib/types/gui/snapshot.d.ts +44 -0
  38. package/lib/types/index.d.ts +80 -0
  39. package/lib/types/paths.d.ts +6 -0
  40. package/lib/types/worker/dsh-subagent.d.ts +79 -0
  41. package/lib/types/worker/executor.d.ts +121 -0
  42. package/lib/worker/dsh-subagent.js +117 -0
  43. package/lib/worker/dsh-subagent.js.map +1 -0
  44. package/lib/worker/executor.js +94 -0
  45. package/lib/worker/executor.js.map +1 -0
  46. package/package.json +59 -0
@@ -0,0 +1,581 @@
1
+ /**
2
+ * dsh-kingdom — Task 治理闭环(Phase 2 语义 + Phase 3 结构化输出)。
3
+ *
4
+ * ## Phase 2 的治理不变量(Owner 裁决 1/4/6,未变)
5
+ *
6
+ * 1. **Claim ≠ Fact**:Worker 交回结果只让 Task 到 REVIEW,永远不到 DONE。
7
+ * 2. Worker 自称 FAILED 仍然只到 REVIEW;只有 Supervisor 的 FAIL 决定才 FAILED。
8
+ * 3. 只有 executor **客观**失败才由 Core 直接 RUNNING → FAILED。
9
+ * 4. 没有任何工具能把 Task 直接置 DONE —— DONE 只有 REVIEW + ACCEPT 一条入口。
10
+ *
11
+ * ## Phase 3 增量(GUI 适配)
12
+ *
13
+ * - 所有写命令返回结构化 {@link CommandResultView},GUI 不再解析中文字符串。
14
+ * - 每次 Worker 执行独立建 Execution 行(运行事实),与 Task.status(治理事实)分开。
15
+ * - 命令回传本次产生的事件(已带单调 seq),GUI 可直接接到事件流尾部。
16
+ */
17
+ import { randomUUID } from 'node:crypto';
18
+ import { asTaskStatus, REVIEW_DECISION_TARGET } from './task.js';
19
+ import { asExecutionState, isLiveExecutionState } from './execution.js';
20
+ import { allowedActionsFor, toEventView, toExecutionView, toTaskView } from '../gui/snapshot.js';
21
+ function now() {
22
+ return new Date().toISOString();
23
+ }
24
+ /**
25
+ * 收集一条命令产生的全部事件,供 {@link CommandResultView.emittedEvents} 回传。
26
+ *
27
+ * GUI 拿到它就能把新事件直接追加到本地事件流尾部,
28
+ * 不必为了看到自己刚触发的效果而立刻重拉 snapshot。
29
+ */
30
+ class EventCollector {
31
+ store;
32
+ kingdomId;
33
+ rows = [];
34
+ constructor(store, kingdomId) {
35
+ this.store = store;
36
+ this.kingdomId = kingdomId;
37
+ }
38
+ emit(eventType, actor, target, payload) {
39
+ const row = this.store.appendEvent({
40
+ event_id: randomUUID(),
41
+ kingdom_id: this.kingdomId,
42
+ event_type: eventType,
43
+ actor_role: actor.role,
44
+ actor_id: actor.id,
45
+ target_type: target.type,
46
+ target_id: target.id,
47
+ payload_json: JSON.stringify(payload),
48
+ created_at: now(),
49
+ });
50
+ this.rows.push(row);
51
+ return row;
52
+ }
53
+ }
54
+ function fail(store, kingdomId, errorCode, message, collector) {
55
+ return {
56
+ ok: false,
57
+ errorCode,
58
+ message,
59
+ task: null,
60
+ execution: null,
61
+ emittedEvents: (collector?.rows ?? []).map(toEventView),
62
+ allowedActions: [],
63
+ revision: store.revision(kingdomId),
64
+ };
65
+ }
66
+ function succeed(store, kingdomId, message, task, execution, collector, ok = true, errorCode = null) {
67
+ const latestExecution = task ? store.latestExecution(task.task_id) : execution;
68
+ const actions = task ? allowedActionsFor(task, latestExecution) : [];
69
+ return {
70
+ ok,
71
+ errorCode,
72
+ message,
73
+ task: task ? toTaskView(store, task) : null,
74
+ execution: execution ? toExecutionView(execution) : null,
75
+ emittedEvents: collector.rows.map(toEventView),
76
+ allowedActions: actions,
77
+ revision: store.revision(kingdomId),
78
+ };
79
+ }
80
+ /**
81
+ * 角色校验。
82
+ *
83
+ * `declarative`(Phase 1/2 延续):只确认王国里存在该角色的 binding,
84
+ * **不验证调用者就是该角色** —— 这是本地可信演示权限,
85
+ * snapshot 的 `auth.trustLevel` 会如实报成 `local-demo`,GUI 必须显著标注。
86
+ *
87
+ * `session-bound`:额外要求调用方 session 与 binding.session_id 一致;
88
+ * binding 未绑定 session 时**拒绝**(无法验证就不放行,不猜)。
89
+ */
90
+ function requireRole(store, ctx, roleType) {
91
+ const binding = store.getBindingByRole(ctx.kingdomId, roleType);
92
+ if (!binding) {
93
+ return {
94
+ ok: false,
95
+ code: 'ROLE_BINDING_MISSING',
96
+ message: `错误:当前王国没有 ${roleType} 角色绑定,无法执行该操作。`
97
+ + `请先绑定:kingdom_bind_role(role_type="${roleType}")。`,
98
+ };
99
+ }
100
+ if (ctx.auth.mode === 'session-bound') {
101
+ const caller = ctx.principal?.sessionId ?? null;
102
+ if (!binding.session_id) {
103
+ return {
104
+ ok: false,
105
+ code: 'UNAUTHORIZED_PRINCIPAL',
106
+ message: `错误:${roleType} 绑定未关联 session,session-bound 模式下无法验证调用者身份。`,
107
+ };
108
+ }
109
+ if (caller !== binding.session_id) {
110
+ return {
111
+ ok: false,
112
+ code: 'UNAUTHORIZED_PRINCIPAL',
113
+ message: `错误:当前调用者不是 ${roleType}(session 不匹配),拒绝执行。`,
114
+ };
115
+ }
116
+ }
117
+ return { ok: true, binding };
118
+ }
119
+ function loadTask(store, kingdomId, taskId) {
120
+ const task = store.getTask(taskId);
121
+ if (!task)
122
+ return { ok: false, code: 'TASK_NOT_FOUND', message: `错误:找不到任务 ${taskId}。` };
123
+ const territory = store.getTerritoryById(task.territory_id);
124
+ if (!territory || territory.kingdom_id !== kingdomId) {
125
+ return { ok: false, code: 'TASK_NOT_IN_KINGDOM', message: `错误:任务 ${taskId} 不属于当前王国。` };
126
+ }
127
+ return { ok: true, task };
128
+ }
129
+ // ── 加载期回收(热插拔正确性)──────────────────────────────────
130
+ /**
131
+ * 插件加载时回收孤儿 Execution。
132
+ *
133
+ * **为什么这是安全的**:Worker 以 **one-shot in-process subagent** 执行,
134
+ * 它的生命周期完全绑在插件 fiber 上。插件一旦卸载/重载,那个 subagent
135
+ * 就不可能还活着。因此**开库时看到的任何"活跃" Execution,都必然是
136
+ * 上一个进程留下的残骸** —— 这不是推测,是由执行模型保证的。
137
+ *
138
+ * 不回收会怎样:Execution 永远停在 RUNNING,
139
+ * - GUI 看到骑士永远在工作(谎报运行状态);
140
+ * - 该任务再也无法 start(被"已有未结束的 Execution"挡住)。
141
+ *
142
+ * 回收判定为 `ABORTED` 而不是 `FAILED`:这是宿主观察到的**中断**,
143
+ * 不是"executor 没跑出合法结果",两者语义必须分开。
144
+ * 任务的治理状态**不动** —— 回收只处理运行事实,不替 Supervisor 做裁定。
145
+ *
146
+ * @returns 被回收的 Execution 数量。
147
+ */
148
+ export function reclaimOrphanExecutions(store, kingdomId) {
149
+ const orphans = store.listLiveExecutions(kingdomId);
150
+ if (orphans.length === 0)
151
+ return 0;
152
+ const collector = new EventCollector(store, kingdomId);
153
+ for (const orphan of orphans) {
154
+ const reclaimed = store.transitionExecution(orphan, 'ABORTED', {
155
+ detail: '插件重载/宿主重启时回收:one-shot 执行无法跨越插件生命周期',
156
+ });
157
+ collector.emit('SESSION_STOPPED', { role: 'WORKER', id: orphan.worker_binding_id }, { type: 'execution', id: reclaimed.execution_id }, {
158
+ task_id: orphan.task_id,
159
+ attempt_no: orphan.attempt_no,
160
+ reason: 'reclaimed-on-load',
161
+ previous_state: orphan.state,
162
+ last_heartbeat_at: orphan.heartbeat_at,
163
+ });
164
+ }
165
+ return orphans.length;
166
+ }
167
+ /** 创建 Task → CREATED。要求 CHANCELLOR binding。 */
168
+ export function planTask(store, ctx, input) {
169
+ const role = requireRole(store, ctx, 'CHANCELLOR');
170
+ if (!role.ok)
171
+ return fail(store, ctx.kingdomId, role.code, role.message);
172
+ const title = input.title.trim();
173
+ if (!title)
174
+ return fail(store, ctx.kingdomId, 'INVALID_INPUT', '错误:任务标题不能为空。');
175
+ const territories = store.listTerritories(ctx.kingdomId);
176
+ if (territories.length === 0) {
177
+ return fail(store, ctx.kingdomId, 'TERRITORY_MISSING', '错误:当前王国还没有领地。请先 kingdom_create_territory。');
178
+ }
179
+ let territoryId = input.territoryId?.trim();
180
+ if (!territoryId) {
181
+ if (territories.length > 1) {
182
+ return fail(store, ctx.kingdomId, 'TERRITORY_AMBIGUOUS', `错误:当前王国有 ${territories.length} 个领地,请显式指定 territory_id。可选:`
183
+ + territories.map(t => `${t.name}(${t.territory_id})`).join('、'));
184
+ }
185
+ territoryId = territories[0].territory_id;
186
+ }
187
+ else if (!territories.some(t => t.territory_id === territoryId)) {
188
+ return fail(store, ctx.kingdomId, 'TERRITORY_NOT_IN_KINGDOM', `错误:领地 ${territoryId} 不属于当前王国。`);
189
+ }
190
+ const ts = now();
191
+ const task = {
192
+ task_id: randomUUID(),
193
+ territory_id: territoryId,
194
+ parent_task_id: null,
195
+ title,
196
+ description: input.description?.trim() || null,
197
+ assigned_binding_id: null,
198
+ status: 'CREATED',
199
+ acceptance_criteria: input.acceptanceCriteria?.trim() || null,
200
+ result_summary: null,
201
+ created_at: ts,
202
+ updated_at: ts,
203
+ };
204
+ store.insertTask(task);
205
+ const collector = new EventCollector(store, ctx.kingdomId);
206
+ collector.emit('TASK_PLANNED', { role: 'CHANCELLOR', id: role.binding.binding_id }, { type: 'task', id: task.task_id }, { title, territory_id: territoryId, acceptance_criteria: task.acceptance_criteria });
207
+ return succeed(store, ctx.kingdomId, `已创建任务「${title}」(id=${task.task_id},状态 CREATED)。`
208
+ + `${task.acceptance_criteria ? '' : '\n提示:未设置验收标准,Supervisor 审查时将缺少客观依据。'}`
209
+ + '\n下一步:kingdom_assign_task 派给 Worker。', task, null, collector);
210
+ }
211
+ /** CREATED → ASSIGNED。 */
212
+ export function assignTask(store, ctx, input) {
213
+ const role = requireRole(store, ctx, 'SUPERVISOR');
214
+ if (!role.ok)
215
+ return fail(store, ctx.kingdomId, role.code, role.message);
216
+ const loaded = loadTask(store, ctx.kingdomId, input.taskId);
217
+ if (!loaded.ok)
218
+ return fail(store, ctx.kingdomId, loaded.code, loaded.message);
219
+ const status = asTaskStatus(loaded.task.status);
220
+ if (status !== 'CREATED') {
221
+ return fail(store, ctx.kingdomId, 'ILLEGAL_TASK_STATE', `错误:任务当前状态为 ${status},只有 CREATED 的任务可以派发。`);
222
+ }
223
+ let worker;
224
+ if (input.workerBindingId?.trim()) {
225
+ worker = store.getBindingById(input.workerBindingId.trim());
226
+ if (!worker || worker.kingdom_id !== ctx.kingdomId) {
227
+ return fail(store, ctx.kingdomId, 'WORKER_BINDING_INVALID', `错误:找不到当前王国的绑定 ${input.workerBindingId}。`);
228
+ }
229
+ if (worker.role_type !== 'WORKER') {
230
+ return fail(store, ctx.kingdomId, 'WORKER_BINDING_INVALID', `错误:绑定 ${worker.role_name} 的角色是 ${worker.role_type},不是 WORKER。`);
231
+ }
232
+ }
233
+ else {
234
+ worker = store.getBindingByRole(ctx.kingdomId, 'WORKER');
235
+ if (!worker) {
236
+ return fail(store, ctx.kingdomId, 'WORKER_BINDING_INVALID', '错误:当前王国没有 WORKER 角色绑定。请先 kingdom_bind_role(role_type="WORKER")。');
237
+ }
238
+ }
239
+ const task = store.transitionTask(loaded.task, 'ASSIGNED', { assigned_binding_id: worker.binding_id });
240
+ const collector = new EventCollector(store, ctx.kingdomId);
241
+ collector.emit('TASK_ASSIGNED', { role: 'SUPERVISOR', id: role.binding.binding_id }, { type: 'task', id: task.task_id }, { worker_binding_id: worker.binding_id, worker_role_name: worker.role_name });
242
+ return succeed(store, ctx.kingdomId, `已把任务「${task.title}」派给 ${worker.role_name}(状态 ASSIGNED)。`
243
+ + '\n下一步:kingdom_start_task 触发 Worker 执行。', task, null, collector);
244
+ }
245
+ /**
246
+ * 触发一轮 Worker 执行(执行期间阻塞等待 subagent)。
247
+ *
248
+ * 入口状态:`ASSIGNED`(首轮)或 `RUNNING`(Supervisor 刚判 REWORK)。
249
+ *
250
+ * Phase 3 增量:本轮执行会创建一条独立的 Execution 行。
251
+ * Task.status 与 Execution.state 从此分离——
252
+ * GUI 判断"骑士是否在工作"只看后者。
253
+ *
254
+ * 结局仍只有两种(裁决 6):
255
+ * - 合法结构化 Claim → 落 worker_results → **RUNNING → REVIEW**(无论 Claim 自称成败);
256
+ * - executor 客观失败 → **RUNNING → FAILED** + `WORKER_EXECUTION_FAILED`,且不落 Claim。
257
+ */
258
+ export async function startTask(store, executor, ctx, input) {
259
+ const role = requireRole(store, ctx, 'SUPERVISOR');
260
+ if (!role.ok)
261
+ return fail(store, ctx.kingdomId, role.code, role.message);
262
+ const loaded = loadTask(store, ctx.kingdomId, input.taskId);
263
+ if (!loaded.ok)
264
+ return fail(store, ctx.kingdomId, loaded.code, loaded.message);
265
+ const status = asTaskStatus(loaded.task.status);
266
+ if (status !== 'ASSIGNED' && status !== 'RUNNING') {
267
+ return fail(store, ctx.kingdomId, 'ILLEGAL_TASK_STATE', `错误:任务当前状态为 ${status},只有 ASSIGNED(首轮)或 RUNNING(Supervisor 已判 REWORK)可以启动 Worker。`);
268
+ }
269
+ const existing = store.latestExecution(loaded.task.task_id);
270
+ if (existing && isLiveExecutionState(asExecutionState(existing.state))) {
271
+ return fail(store, ctx.kingdomId, 'ILLEGAL_EXECUTION_STATE', `错误:该任务已有一个未结束的 Execution(${existing.execution_id},${existing.state}),不能重复启动。`);
272
+ }
273
+ const collector = new EventCollector(store, ctx.kingdomId);
274
+ let task = status === 'ASSIGNED' ? store.transitionTask(loaded.task, 'RUNNING') : loaded.task;
275
+ const attemptNo = store.nextAttemptNo(task.task_id);
276
+ const previous = store.latestWorkerResult(task.task_id);
277
+ const reworkReason = attemptNo > 1 ? lastReworkReason(store, ctx.kingdomId, task.task_id) : undefined;
278
+ // ── 建立本轮 Execution(运行事实)──
279
+ let execution = store.insertExecution({
280
+ execution_id: randomUUID(),
281
+ task_id: task.task_id,
282
+ attempt_no: attemptNo,
283
+ worker_binding_id: task.assigned_binding_id,
284
+ session_id: null,
285
+ state: 'STARTING',
286
+ detail: null,
287
+ started_at: now(),
288
+ heartbeat_at: now(),
289
+ ended_at: null,
290
+ pause_requested_at: null,
291
+ });
292
+ collector.emit('SESSION_STARTED', { role: 'SUPERVISOR', id: role.binding.binding_id }, { type: 'execution', id: execution.execution_id }, { task_id: task.task_id, attempt_no: attemptNo, worker_binding_id: task.assigned_binding_id, executor: executor.kind });
293
+ execution = store.transitionExecution(execution, 'RUNNING');
294
+ collector.emit('WORKER_EXECUTION_STARTED', { role: 'SUPERVISOR', id: role.binding.binding_id }, { type: 'task', id: task.task_id }, { attempt_no: attemptNo, execution_id: execution.execution_id, worker_binding_id: task.assigned_binding_id, executor: executor.kind });
295
+ const context = {
296
+ task,
297
+ acceptanceCriteria: task.acceptance_criteria,
298
+ attemptNo,
299
+ ...previous ? { prevResultSummary: claimSummary(previous.result_json) } : {},
300
+ ...reworkReason ? { reworkReason } : {},
301
+ };
302
+ const outcome = await executor.execute(task, context);
303
+ // 结算写入必须整体成功。最常见的失败原因是**执行期间插件被卸载**
304
+ // (热重载 / DSH 退出)导致 SQLite 连接已关闭。此时把裸 SQLite 错误
305
+ // 换成可行动的说明:数据没有半写,残留的 Execution 会在下次加载时被回收。
306
+ try {
307
+ return settleExecution(store, ctx, collector, role.binding, {
308
+ task, execution, attemptNo, outcome, executorKind: executor.kind,
309
+ });
310
+ }
311
+ catch (error) {
312
+ const reason = error instanceof Error ? error.message : String(error);
313
+ throw new Error(`Worker 执行已结束,但结算写入失败:${reason}\n`
314
+ + `最可能的原因是本次执行期间插件被卸载或重载(SQLite 连接已关闭)。\n`
315
+ + `Execution ${execution.execution_id} 会在插件下次加载时被自动回收为 ABORTED,`
316
+ + `任务「${task.title}」的治理状态不受影响,可重新 kingdom_start_task。`, { cause: error });
317
+ }
318
+ }
319
+ /** 把一次执行的结局落库(Claim 到达 / executor 客观失败),并产出结构化结果。 */
320
+ function settleExecution(store, ctx, collector, reviewer, args) {
321
+ const { attemptNo, outcome, executorKind } = args;
322
+ let { task, execution } = args;
323
+ if (outcome.kind === 'executor-failure') {
324
+ // 宿主观察到的运行事实:executor 没产出合法 Result(裁决 6)。
325
+ execution = store.transitionExecution(execution, 'FAILED', {
326
+ detail: outcome.reason,
327
+ sessionId: outcome.sessionId,
328
+ });
329
+ task = store.transitionTask(task, 'FAILED');
330
+ collector.emit('WORKER_EXECUTION_FAILED', { role: 'SUPERVISOR', id: reviewer.binding_id }, { type: 'task', id: task.task_id }, {
331
+ attempt_no: attemptNo,
332
+ execution_id: execution.execution_id,
333
+ worker_binding_id: task.assigned_binding_id,
334
+ session_id: outcome.sessionId,
335
+ executor: executorKind,
336
+ reason: outcome.reason,
337
+ });
338
+ collector.emit('SESSION_FAILED', { role: 'SUPERVISOR', id: reviewer.binding_id }, { type: 'execution', id: execution.execution_id }, { task_id: task.task_id, attempt_no: attemptNo, reason: outcome.reason });
339
+ return succeed(store, ctx.kingdomId, `Worker 执行客观失败(第 ${attemptNo} 次尝试):${outcome.reason}\n`
340
+ + `任务「${task.title}」已置为 FAILED(终态),并记录 WORKER_EXECUTION_FAILED 事件。\n`
341
+ + '注意:这是宿主观察到的运行事实(executor 未产出合法结果),不是 Worker 的自述。', task, execution, collector, false, 'WORKER_EXECUTION_FAILED');
342
+ }
343
+ // Claim 到达:落 worker_results,Task 推到 REVIEW —— 而不是 DONE。
344
+ const claim = outcome.result;
345
+ store.insertWorkerResult({
346
+ result_id: randomUUID(),
347
+ task_id: task.task_id,
348
+ attempt_no: attemptNo,
349
+ worker_binding_id: task.assigned_binding_id,
350
+ session_id: outcome.sessionId,
351
+ outcome: claim.outcome,
352
+ result_json: JSON.stringify(claim),
353
+ created_at: now(),
354
+ });
355
+ execution = store.transitionExecution(execution, 'COMPLETED', { sessionId: outcome.sessionId });
356
+ task = store.transitionTask(task, 'REVIEW', { result_summary: claim.summary });
357
+ collector.emit('WORKER_RESULT_SUBMITTED', { role: 'WORKER', id: task.assigned_binding_id }, { type: 'task', id: task.task_id }, {
358
+ attempt_no: attemptNo,
359
+ execution_id: execution.execution_id,
360
+ claimed_outcome: claim.outcome,
361
+ session_id: outcome.sessionId,
362
+ executor: executorKind,
363
+ });
364
+ // Execution 结束 ≠ 任务完成:GUI 收到它只移除人物 Sprite,组织节点保留。
365
+ collector.emit('SESSION_STOPPED', { role: 'WORKER', id: task.assigned_binding_id }, { type: 'execution', id: execution.execution_id }, { task_id: task.task_id, attempt_no: attemptNo, reason: 'completed' });
366
+ return succeed(store, ctx.kingdomId, `Worker 已提交第 ${attemptNo} 次尝试的结果(自称 ${claim.outcome})。\n`
367
+ + `摘要:${claim.summary}\n`
368
+ + `任务「${task.title}」现在处于 **REVIEW**。\n`
369
+ + '这是一个待审查的 Claim,**尚未成为任务完成事实**。'
370
+ + '请 Supervisor 用 kingdom_review_task 裁定 ACCEPT / REWORK / FAIL。', task, execution, collector);
371
+ }
372
+ /** 从 events 里取最近一条 REWORK 的理由,注入下一轮 Worker Context(裁决 5)。 */
373
+ function lastReworkReason(store, kingdomId, taskId) {
374
+ for (const event of store.listEvents(kingdomId, 200)) {
375
+ if (event.event_type !== 'TASK_REWORK_REQUESTED' || event.target_id !== taskId)
376
+ continue;
377
+ try {
378
+ const payload = JSON.parse(event.payload_json);
379
+ return typeof payload.reason === 'string' ? payload.reason : undefined;
380
+ }
381
+ catch {
382
+ return undefined;
383
+ }
384
+ }
385
+ return undefined;
386
+ }
387
+ /** 从存下来的 Claim JSON 中取 summary,坏 JSON 不致命。 */
388
+ function claimSummary(resultJson) {
389
+ try {
390
+ const parsed = JSON.parse(resultJson);
391
+ return typeof parsed.summary === 'string' ? parsed.summary : undefined;
392
+ }
393
+ catch {
394
+ return undefined;
395
+ }
396
+ }
397
+ /**
398
+ * Supervisor 审查 Worker Claim,把 Claim 转成组织事实。
399
+ *
400
+ * - ACCEPT → DONE(+ TASK_ACCEPTED;不新增 task_reviews 表,裁决 4)
401
+ * - REWORK → RUNNING(同一 Worker Binding;下一次 start 会以 attempt+1 起新 Execution)
402
+ * - FAIL → FAILED(终态;只有这里能把 Worker 的失败 Claim 变成组织事实)
403
+ */
404
+ export function reviewTask(store, ctx, input) {
405
+ const role = requireRole(store, ctx, 'SUPERVISOR');
406
+ if (!role.ok)
407
+ return fail(store, ctx.kingdomId, role.code, role.message);
408
+ const decision = input.decision.trim().toUpperCase();
409
+ if (!(decision in REVIEW_DECISION_TARGET)) {
410
+ return fail(store, ctx.kingdomId, 'INVALID_DECISION', `错误:decision 必须是 ACCEPT / REWORK / FAIL 之一,收到 "${input.decision}"。`);
411
+ }
412
+ const verdict = decision;
413
+ const loaded = loadTask(store, ctx.kingdomId, input.taskId);
414
+ if (!loaded.ok)
415
+ return fail(store, ctx.kingdomId, loaded.code, loaded.message);
416
+ const status = asTaskStatus(loaded.task.status);
417
+ if (status !== 'REVIEW') {
418
+ return fail(store, ctx.kingdomId, 'ILLEGAL_TASK_STATE', `错误:任务当前状态为 ${status},只有 REVIEW 状态的任务可以审查。`);
419
+ }
420
+ const claim = store.latestWorkerResult(input.taskId);
421
+ const attemptNo = claim?.attempt_no ?? 0;
422
+ const reason = input.reason?.trim() || null;
423
+ if (verdict !== 'ACCEPT' && !reason) {
424
+ return fail(store, ctx.kingdomId, 'REASON_REQUIRED', `错误:${verdict} 必须给出 reason(Worker 返工/失败需要可追溯的理由)。`);
425
+ }
426
+ const task = store.transitionTask(loaded.task, REVIEW_DECISION_TARGET[verdict]);
427
+ const eventType = verdict === 'ACCEPT'
428
+ ? 'TASK_ACCEPTED'
429
+ : verdict === 'REWORK' ? 'TASK_REWORK_REQUESTED' : 'TASK_FAILED';
430
+ const collector = new EventCollector(store, ctx.kingdomId);
431
+ collector.emit(eventType, { role: 'SUPERVISOR', id: role.binding.binding_id }, { type: 'task', id: task.task_id }, {
432
+ decision: verdict,
433
+ reason,
434
+ reviewer_binding_id: role.binding.binding_id,
435
+ reviewed_attempt_no: attemptNo,
436
+ claimed_outcome: claim?.outcome ?? null,
437
+ });
438
+ switch (verdict) {
439
+ case 'ACCEPT':
440
+ return succeed(store, ctx.kingdomId, `已 ACCEPT 第 ${attemptNo} 次尝试的结果。任务「${task.title}」→ **DONE**(终态)。\n`
441
+ + `Worker 的 Claim 至此才成为组织事实,已记 TASK_ACCEPTED(reviewer=${role.binding.role_name})。`, task, null, collector);
442
+ case 'REWORK':
443
+ return succeed(store, ctx.kingdomId, `已判 REWORK(理由:${reason})。任务「${task.title}」回到 **RUNNING**,保持同一 Worker Binding。\n`
444
+ + `下一步:再次 kingdom_start_task,将以 attempt_no=${attemptNo + 1} 起一个**新的** Execution 与 subagent session。\n`
445
+ + '注意:此刻还没有新的 Execution,Worker 处于等待状态,并不在工作。', task, null, collector);
446
+ default:
447
+ return succeed(store, ctx.kingdomId, `已判 FAIL(理由:${reason})。任务「${task.title}」→ **FAILED**(终态)。\n`
448
+ + 'Worker 的失败声明至此才成为组织事实。', task, null, collector);
449
+ }
450
+ }
451
+ function loadExecution(store, kingdomId, executionId) {
452
+ const execution = store.getExecution(executionId);
453
+ if (!execution) {
454
+ return { ok: false, code: 'EXECUTION_NOT_FOUND', message: `错误:找不到 Execution ${executionId}。` };
455
+ }
456
+ const loaded = loadTask(store, kingdomId, execution.task_id);
457
+ if (!loaded.ok)
458
+ return loaded;
459
+ return { ok: true, execution, task: loaded.task };
460
+ }
461
+ /**
462
+ * 请求暂停一次执行。
463
+ *
464
+ * **诚实的语义边界**:Worker 是 one-shot subagent,宿主无法在一次 turn 中途
465
+ * 真正挂起它。因此:
466
+ * - 执行**尚未真正开始**(STARTING)→ 直接转 PAUSED,人物可以睡觉;
467
+ * - 执行**正在进行**(RUNNING)→ 只登记 `pause_requested_at`,状态保持 RUNNING,
468
+ * `ExecutionView.pausePending = true`。GUI 应表现为"准备休息",
469
+ * **不能**直接播睡觉动画——那会谎报运行状态。
470
+ */
471
+ export function pauseExecution(store, ctx, input) {
472
+ const role = requireRole(store, ctx, 'SUPERVISOR');
473
+ if (!role.ok)
474
+ return fail(store, ctx.kingdomId, role.code, role.message);
475
+ const loaded = loadExecution(store, ctx.kingdomId, input.executionId);
476
+ if (!loaded.ok)
477
+ return fail(store, ctx.kingdomId, loaded.code, loaded.message);
478
+ const state = asExecutionState(loaded.execution.state);
479
+ if (!isLiveExecutionState(state) || state === 'PAUSED') {
480
+ return fail(store, ctx.kingdomId, 'ILLEGAL_EXECUTION_STATE', `错误:Execution 当前为 ${state},无法暂停。`);
481
+ }
482
+ const collector = new EventCollector(store, ctx.kingdomId);
483
+ let execution = loaded.execution;
484
+ if (state === 'STARTING') {
485
+ execution = store.transitionExecution(execution, 'PAUSED', { detail: input.reason ?? null });
486
+ collector.emit('SESSION_PAUSED', { role: 'SUPERVISOR', id: role.binding.binding_id }, { type: 'execution', id: execution.execution_id }, { task_id: execution.task_id, effective: true, reason: input.reason ?? null });
487
+ return succeed(store, ctx.kingdomId, `Execution ${execution.execution_id} 已暂停(PAUSED)。`, loaded.task, execution, collector);
488
+ }
489
+ store.setExecutionPauseRequest(execution.execution_id, now());
490
+ execution = store.getExecution(execution.execution_id);
491
+ collector.emit('SESSION_PAUSED', { role: 'SUPERVISOR', id: role.binding.binding_id }, { type: 'execution', id: execution.execution_id }, { task_id: execution.task_id, effective: false, reason: input.reason ?? null });
492
+ return succeed(store, ctx.kingdomId, `已登记暂停请求。该 Execution 正在运行中,one-shot subagent 无法在 turn 中途挂起,`
493
+ + `因此状态仍是 RUNNING(pausePending=true),暂停将在下一个 attempt 边界生效。`, loaded.task, execution, collector);
494
+ }
495
+ /** 恢复执行:撤销暂停请求,或把 PAUSED 转回 RUNNING。 */
496
+ export function resumeExecution(store, ctx, input) {
497
+ const role = requireRole(store, ctx, 'SUPERVISOR');
498
+ if (!role.ok)
499
+ return fail(store, ctx.kingdomId, role.code, role.message);
500
+ const loaded = loadExecution(store, ctx.kingdomId, input.executionId);
501
+ if (!loaded.ok)
502
+ return fail(store, ctx.kingdomId, loaded.code, loaded.message);
503
+ const state = asExecutionState(loaded.execution.state);
504
+ if (state !== 'PAUSED' && loaded.execution.pause_requested_at === null) {
505
+ return fail(store, ctx.kingdomId, 'ILLEGAL_EXECUTION_STATE', `错误:Execution 当前为 ${state} 且无暂停请求,无需恢复。`);
506
+ }
507
+ const collector = new EventCollector(store, ctx.kingdomId);
508
+ let execution = loaded.execution;
509
+ if (state === 'PAUSED') {
510
+ execution = store.transitionExecution(execution, 'RUNNING', { pauseRequestedAt: null });
511
+ }
512
+ else {
513
+ store.setExecutionPauseRequest(execution.execution_id, null);
514
+ execution = store.getExecution(execution.execution_id);
515
+ }
516
+ collector.emit('SESSION_RESUMED', { role: 'SUPERVISOR', id: role.binding.binding_id }, { type: 'execution', id: execution.execution_id }, { task_id: execution.task_id });
517
+ return succeed(store, ctx.kingdomId, `Execution ${execution.execution_id} 已恢复运行。`, loaded.task, execution, collector);
518
+ }
519
+ /**
520
+ * 终止一次执行(ABORTED)。
521
+ *
522
+ * 与 FAILED 区分开:ABORTED 是"被显式停止",FAILED 是"宿主观察到跑不出结果"。
523
+ * 终止只影响运行事实;Task 的治理状态由 Supervisor 另行裁定
524
+ * (任务停在 RUNNING,等待重新 start 或人工处理)。
525
+ * GUI 收到 SESSION_STOPPED 只移除人物 Sprite,**组织节点、姓名牌与详情保留**。
526
+ */
527
+ export function abortExecution(store, ctx, input) {
528
+ const role = requireRole(store, ctx, 'SUPERVISOR');
529
+ if (!role.ok)
530
+ return fail(store, ctx.kingdomId, role.code, role.message);
531
+ const loaded = loadExecution(store, ctx.kingdomId, input.executionId);
532
+ if (!loaded.ok)
533
+ return fail(store, ctx.kingdomId, loaded.code, loaded.message);
534
+ const state = asExecutionState(loaded.execution.state);
535
+ if (!isLiveExecutionState(state)) {
536
+ return fail(store, ctx.kingdomId, 'ILLEGAL_EXECUTION_STATE', `错误:Execution 当前为 ${state}(已终结),无法终止。`);
537
+ }
538
+ const execution = store.transitionExecution(loaded.execution, 'ABORTED', {
539
+ detail: input.reason ?? 'aborted by supervisor',
540
+ });
541
+ const collector = new EventCollector(store, ctx.kingdomId);
542
+ collector.emit('SESSION_STOPPED', { role: 'SUPERVISOR', id: role.binding.binding_id }, { type: 'execution', id: execution.execution_id }, { task_id: execution.task_id, reason: input.reason ?? 'aborted' });
543
+ return succeed(store, ctx.kingdomId, `Execution ${execution.execution_id} 已终止(ABORTED)。`
544
+ + `任务「${loaded.task.title}」的治理状态未变(仍为 ${loaded.task.status}),`
545
+ + '需要 Supervisor 另行处置(重新 start 或走审查流程)。', loaded.task, execution, collector);
546
+ }
547
+ /** 列出任务真实状态,含 attempt_no 与最新 Claim 摘要(面向模型的文本形式)。 */
548
+ export function listTasks(store, kingdomId, input = {}) {
549
+ const status = input.status?.trim().toUpperCase();
550
+ const rows = store.listTasks(kingdomId, {
551
+ ...input.territoryId?.trim() ? { territoryId: input.territoryId.trim() } : {},
552
+ ...status ? { status } : {},
553
+ });
554
+ if (rows.length === 0) {
555
+ return status || input.territoryId
556
+ ? '没有符合条件的任务。'
557
+ : '当前王国还没有任务。可以说“规划一个任务”触发 kingdom_plan_task。';
558
+ }
559
+ const lines = [];
560
+ for (const task of rows) {
561
+ const territory = store.getTerritoryById(task.territory_id);
562
+ const attempts = store.maxAttemptNo(task.task_id);
563
+ const latest = store.latestWorkerResult(task.task_id);
564
+ const execution = store.latestExecution(task.task_id);
565
+ const worker = task.assigned_binding_id ? store.getBindingById(task.assigned_binding_id) : null;
566
+ lines.push(`- [${task.status}] ${task.title}(id=${task.task_id})`, ` 领地:${territory?.name ?? task.territory_id}`
567
+ + `|Worker:${worker?.role_name ?? '未指派'}`
568
+ + `|尝试次数:${attempts}`
569
+ + `|执行:${execution ? `${execution.state}(attempt ${execution.attempt_no})` : '无'}`);
570
+ if (latest) {
571
+ lines.push(` 最新 Claim(attempt ${latest.attempt_no},自称 ${latest.outcome}`
572
+ + `${latest.session_id ? `,session=${latest.session_id}` : ''}):`
573
+ + `${claimSummary(latest.result_json) ?? '(无摘要)'}`);
574
+ }
575
+ if (task.status === 'REVIEW') {
576
+ lines.push(' ↑ 待 Supervisor 审查:以上是 Worker 的 Claim,尚未成为完成事实。');
577
+ }
578
+ }
579
+ return lines.join('\n');
580
+ }
581
+ //# sourceMappingURL=task-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-service.js","sourceRoot":"","sources":["../../src/core/task-service.ts"],"names":[],"mappings":"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"}