dsh-kingdom 1.0.0 → 2.0.0
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/ASSETS_NOTICE.md +18 -2
- package/LICENSE +661 -661
- package/NOTICE +9 -9
- package/README.md +26 -20
- package/THIRD_PARTY_NOTICES.md +84 -0
- package/cordis.patch.yml +6 -6
- package/docs/V2.0-RELEASE-NOTES.md +30 -0
- package/docs/V2.0-USER-GUIDE.md +74 -0
- package/lib/adapter/dsh-backend.js +10 -6
- package/lib/adapter/dsh-backend.js.map +1 -1
- package/lib/adapter/dsh-cost.js +68 -0
- package/lib/adapter/dsh-cost.js.map +1 -0
- package/lib/adapter/dsh-session-events.js +86 -0
- package/lib/adapter/dsh-session-events.js.map +1 -0
- package/lib/adapter/dsh-usage.js +159 -0
- package/lib/adapter/dsh-usage.js.map +1 -0
- package/lib/capability/admin.js +4 -4
- package/lib/capability/admin.js.map +1 -1
- package/lib/capability/dsh-enforcement.js +19 -4
- package/lib/capability/dsh-enforcement.js.map +1 -1
- package/lib/capability/service.js +11 -0
- package/lib/capability/service.js.map +1 -1
- package/lib/capability/tool-disclosure.js +144 -0
- package/lib/capability/tool-disclosure.js.map +1 -0
- package/lib/core/binding.js +20 -18
- package/lib/core/binding.js.map +1 -1
- package/lib/core/budget.js +304 -0
- package/lib/core/budget.js.map +1 -0
- package/lib/core/collaboration.js +422 -0
- package/lib/core/collaboration.js.map +1 -0
- package/lib/core/cost.js +212 -0
- package/lib/core/cost.js.map +1 -0
- package/lib/core/db.js +124 -0
- package/lib/core/db.js.map +1 -1
- package/lib/core/governed-claim.js +46 -0
- package/lib/core/governed-claim.js.map +1 -0
- package/lib/core/governed.js +112 -7
- package/lib/core/governed.js.map +1 -1
- package/lib/core/kingdom.js +58 -56
- package/lib/core/kingdom.js.map +1 -1
- package/lib/core/owner-control.js +48 -7
- package/lib/core/owner-control.js.map +1 -1
- package/lib/core/owner-window.js +822 -0
- package/lib/core/owner-window.js.map +1 -0
- package/lib/core/task-service.js +103 -72
- package/lib/core/task-service.js.map +1 -1
- package/lib/core/territory.js +33 -11
- package/lib/core/territory.js.map +1 -1
- package/lib/core/usage.js +39 -0
- package/lib/core/usage.js.map +1 -0
- package/lib/core/workspace-admission.js +225 -0
- package/lib/core/workspace-admission.js.map +1 -0
- package/lib/dispatch/evidence.js +5 -2
- package/lib/dispatch/evidence.js.map +1 -1
- package/lib/dispatch/service.js +136 -5
- package/lib/dispatch/service.js.map +1 -1
- package/lib/gui/assets/characters/chancellor-idle.svg +67 -221
- package/lib/gui/assets/characters/chancellor-sleeping.svg +67 -221
- package/lib/gui/assets/characters/chancellor-thinking.svg +67 -221
- package/lib/gui/assets/characters/chancellor-working.svg +67 -221
- package/lib/gui/assets/characters/knight-redraw-r1-idle.svg +67 -111
- package/lib/gui/assets/characters/knight-redraw-r1-sleeping.svg +67 -115
- package/lib/gui/assets/characters/knight-redraw-r1-thinking.svg +67 -173
- package/lib/gui/assets/characters/knight-redraw-r1-working.svg +67 -248
- package/lib/gui/assets/characters/supervisor-idle.svg +67 -266
- package/lib/gui/assets/characters/supervisor-sleeping.svg +67 -266
- package/lib/gui/assets/characters/supervisor-thinking.svg +67 -266
- package/lib/gui/assets/characters/supervisor-working.svg +67 -266
- package/lib/gui/console-app.js +1964 -1927
- package/lib/gui/console-app.js.map +1 -1
- package/lib/gui/contract.js.map +1 -1
- package/lib/gui/control-contract.js +2 -0
- package/lib/gui/control-contract.js.map +1 -1
- package/lib/gui/local-control.js +1 -0
- package/lib/gui/local-control.js.map +1 -1
- package/lib/gui/owner-control.js +310 -0
- package/lib/gui/owner-control.js.map +1 -0
- package/lib/gui/owner-ui.js +191 -0
- package/lib/gui/owner-ui.js.map +1 -0
- package/lib/gui/server.js +4 -0
- package/lib/gui/server.js.map +1 -1
- package/lib/gui/snapshot.js +150 -15
- package/lib/gui/snapshot.js.map +1 -1
- package/lib/gui/visual-assets.js +56 -0
- package/lib/gui/visual-assets.js.map +1 -0
- package/lib/gui/visual-system.js +272 -0
- package/lib/gui/visual-system.js.map +1 -0
- package/lib/gui/workbench-ui.js +358 -0
- package/lib/gui/workbench-ui.js.map +1 -0
- package/lib/gui/workbench.js +163 -0
- package/lib/gui/workbench.js.map +1 -0
- package/lib/index.js +269 -39
- package/lib/index.js.map +1 -1
- package/lib/runner-context-broker.js +8 -2
- package/lib/runner-context-broker.js.map +1 -1
- package/lib/runtime-cost-observer.js +145 -0
- package/lib/runtime-cost-observer.js.map +1 -0
- package/lib/types/adapter/contract.d.ts +2 -0
- package/lib/types/adapter/dsh-backend.d.ts +2 -6
- package/lib/types/adapter/dsh-cost.d.ts +13 -0
- package/lib/types/adapter/dsh-session-events.d.ts +16 -0
- package/lib/types/adapter/dsh-usage.d.ts +36 -0
- package/lib/types/capability/dsh-enforcement.d.ts +8 -6
- package/lib/types/capability/service.d.ts +1 -0
- package/lib/types/capability/tool-disclosure.d.ts +36 -0
- package/lib/types/core/binding.d.ts +4 -3
- package/lib/types/core/budget.d.ts +81 -0
- package/lib/types/core/collaboration.d.ts +110 -0
- package/lib/types/core/cost.d.ts +99 -0
- package/lib/types/core/db.d.ts +21 -0
- package/lib/types/core/governed-claim.d.ts +7 -0
- package/lib/types/core/governed.d.ts +19 -1
- package/lib/types/core/kingdom.d.ts +3 -0
- package/lib/types/core/owner-control.d.ts +19 -3
- package/lib/types/core/owner-window.d.ts +226 -0
- package/lib/types/core/task-service.d.ts +36 -0
- package/lib/types/core/territory.d.ts +7 -0
- package/lib/types/core/usage.d.ts +26 -0
- package/lib/types/core/workspace-admission.d.ts +43 -0
- package/lib/types/dispatch/evidence.d.ts +2 -5
- package/lib/types/dispatch/service.d.ts +18 -0
- package/lib/types/gui/console-app.d.ts +2 -1
- package/lib/types/gui/contract.d.ts +176 -2
- package/lib/types/gui/control-contract.d.ts +1 -1
- package/lib/types/gui/owner-control.d.ts +45 -0
- package/lib/types/gui/owner-ui.d.ts +2 -0
- package/lib/types/gui/server.d.ts +3 -0
- package/lib/types/gui/snapshot.d.ts +3 -10
- package/lib/types/gui/visual-assets.d.ts +27 -0
- package/lib/types/gui/visual-system.d.ts +2 -0
- package/lib/types/gui/workbench-ui.d.ts +5 -0
- package/lib/types/gui/workbench.d.ts +33 -0
- package/lib/types/index.d.ts +36 -4
- package/lib/types/runtime-cost-observer.d.ts +22 -0
- package/lib/types/worker/collaboration.d.ts +35 -0
- package/lib/types/worker/executor.d.ts +3 -0
- package/lib/types/worker/governed-executor.d.ts +2 -0
- package/lib/worker/collaboration.js +172 -0
- package/lib/worker/collaboration.js.map +1 -0
- package/lib/worker/executor.js +5 -1
- package/lib/worker/executor.js.map +1 -1
- package/lib/worker/governed-executor.js +161 -93
- package/lib/worker/governed-executor.js.map +1 -1
- package/package.json +19 -8
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { requireAdmin } from './binding.js';
|
|
3
|
+
import { ownerInputHash } from './owner-control.js';
|
|
4
|
+
import { requireRole } from './task-service.js';
|
|
5
|
+
import { readDispatchUsage } from './usage.js';
|
|
6
|
+
import { isBudgetAdmissionInvocationActive } from './budget.js';
|
|
7
|
+
import { readAdditionalBudgetUsage, readIncompleteRoleUsageSourceRefs } from './cost.js';
|
|
8
|
+
export class CollaborationError extends Error {
|
|
9
|
+
code;
|
|
10
|
+
constructor(code, message) {
|
|
11
|
+
super(`${code}: ${message}`);
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.name = 'CollaborationError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function reject(code, message) { throw new CollaborationError(code, message); }
|
|
17
|
+
const count = (value) => Number.isSafeInteger(value) && value >= 0;
|
|
18
|
+
function add(a, b) {
|
|
19
|
+
if (!count(a) || !count(b) || !count(a + b))
|
|
20
|
+
reject('PLAN_USAGE_INVALID', '协作用量不能安全计算。');
|
|
21
|
+
return a + b;
|
|
22
|
+
}
|
|
23
|
+
function text(value, field, max = 768) {
|
|
24
|
+
if (typeof value !== 'string' || !value.trim() || value.trim().length > max)
|
|
25
|
+
reject('PLAN_INPUT_INVALID', `${field} 必须为非空且有界的文本。`);
|
|
26
|
+
return value.trim();
|
|
27
|
+
}
|
|
28
|
+
function object(value, required, optional = []) {
|
|
29
|
+
if (!value || typeof value !== 'object' || Array.isArray(value) || ![Object.prototype, null].includes(Object.getPrototypeOf(value))
|
|
30
|
+
|| Object.getOwnPropertySymbols(value).length)
|
|
31
|
+
reject('PLAN_INPUT_INVALID', '输入必须是普通对象。');
|
|
32
|
+
const row = value;
|
|
33
|
+
if (required.some(key => !Object.hasOwn(row, key)) || Object.keys(row).some(key => !required.includes(key) && !optional.includes(key)))
|
|
34
|
+
reject('PLAN_INPUT_INVALID', '输入字段缺失或不受支持。');
|
|
35
|
+
return row;
|
|
36
|
+
}
|
|
37
|
+
function normalizeProposal(value) {
|
|
38
|
+
const row = object(value, ['parentTaskId', 'mode', 'reason', 'integratorBindingId', 'budgetTokens', 'reserveTokens', 'items'], ['expectedVersion']);
|
|
39
|
+
if (!['EXPERT', 'TEAM'].includes(row.mode) || !count(row.budgetTokens) || row.budgetTokens < 1
|
|
40
|
+
|| !count(row.reserveTokens) || row.reserveTokens < 1 || row.reserveTokens > row.budgetTokens
|
|
41
|
+
|| !count(row.expectedVersion ?? 0) || !Array.isArray(row.items) || row.items.length < 1 || row.items.length > 2)
|
|
42
|
+
reject('PLAN_INPUT_INVALID', '计划模式、预算、版本或成员数量不合法;含整合者最多三个不同 Worker。');
|
|
43
|
+
const items = row.items.map(value => {
|
|
44
|
+
const item = object(value, ['key', 'title', 'description', 'acceptanceCriteria', 'territoryId', 'workerBindingId', 'access', 'dependsOn', 'expectedArtifact']);
|
|
45
|
+
const key = text(item.key, 'key', 48);
|
|
46
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(key) || !['READ_ONLY', 'WRITE'].includes(item.access)
|
|
47
|
+
|| row.mode === 'EXPERT' && item.access !== 'READ_ONLY' || !Array.isArray(item.dependsOn) || item.dependsOn.length > 2)
|
|
48
|
+
reject('PLAN_INPUT_INVALID', '成员 key、访问方式或依赖不合法;专家只允许只读。');
|
|
49
|
+
const dependsOn = item.dependsOn.map(dep => text(dep, 'dependsOn', 48));
|
|
50
|
+
if (new Set(dependsOn).size !== dependsOn.length)
|
|
51
|
+
reject('PLAN_DEPENDENCY_INVALID', '依赖不可重复。');
|
|
52
|
+
return { key, title: text(item.title, 'title', 200), description: text(item.description, 'description', 4000),
|
|
53
|
+
acceptanceCriteria: text(item.acceptanceCriteria, 'acceptanceCriteria', 2000), territoryId: text(item.territoryId, 'territoryId'),
|
|
54
|
+
workerBindingId: text(item.workerBindingId, 'workerBindingId'), access: item.access, dependsOn,
|
|
55
|
+
expectedArtifact: text(item.expectedArtifact, 'expectedArtifact', 1000) };
|
|
56
|
+
});
|
|
57
|
+
const integratorBindingId = text(row.integratorBindingId, 'integratorBindingId');
|
|
58
|
+
if (new Set(items.map(item => item.key)).size !== items.length
|
|
59
|
+
|| new Set([integratorBindingId, ...items.map(item => item.workerBindingId)]).size !== items.length + 1)
|
|
60
|
+
reject('PLAN_MEMBER_DUPLICATE', '成员 key 和 Worker 必须唯一,整合者另占一个席位。');
|
|
61
|
+
const keys = new Set(items.map(item => item.key)), visiting = new Set(), visited = new Set();
|
|
62
|
+
const visit = (key) => {
|
|
63
|
+
if (visiting.has(key))
|
|
64
|
+
reject('PLAN_DEPENDENCY_INVALID', '依赖不可成环。');
|
|
65
|
+
if (visited.has(key))
|
|
66
|
+
return;
|
|
67
|
+
visiting.add(key);
|
|
68
|
+
for (const dependency of items.find(item => item.key === key).dependsOn) {
|
|
69
|
+
if (!keys.has(dependency) || dependency === key)
|
|
70
|
+
reject('PLAN_DEPENDENCY_INVALID', '依赖必须指向本计划的其他成员。');
|
|
71
|
+
visit(dependency);
|
|
72
|
+
}
|
|
73
|
+
visiting.delete(key);
|
|
74
|
+
visited.add(key);
|
|
75
|
+
};
|
|
76
|
+
items.forEach(item => visit(item.key));
|
|
77
|
+
return { parentTaskId: text(row.parentTaskId, 'parentTaskId'), expectedVersion: (row.expectedVersion ?? 0),
|
|
78
|
+
mode: row.mode, reason: text(row.reason, 'reason', 2000), integratorBindingId,
|
|
79
|
+
budgetTokens: row.budgetTokens, reserveTokens: row.reserveTokens, items };
|
|
80
|
+
}
|
|
81
|
+
export function normalizePlanAdoptionParameters(value) {
|
|
82
|
+
const row = object(value, ['plan_id', 'version', 'digest']);
|
|
83
|
+
if (!count(row.version) || row.version < 1 || typeof row.digest !== 'string' || !/^[a-f0-9]{64}$/.test(row.digest))
|
|
84
|
+
reject('PLAN_INPUT_INVALID', '采纳必须准确指定计划、正整数版本和完整摘要。');
|
|
85
|
+
return { plan_id: text(row.plan_id, 'plan_id'), version: row.version, digest: row.digest };
|
|
86
|
+
}
|
|
87
|
+
function planEvents(store, kingdomId) {
|
|
88
|
+
return store.db.prepare("SELECT * FROM events WHERE kingdom_id = ? AND event_type IN ('COLLABORATION_PLAN_PROPOSED', 'COLLABORATION_PLAN_ADOPTED') ORDER BY seq")
|
|
89
|
+
.all(kingdomId);
|
|
90
|
+
}
|
|
91
|
+
function parsePlan(event) {
|
|
92
|
+
try {
|
|
93
|
+
const plan = JSON.parse(event.payload_json);
|
|
94
|
+
const { digest, ...content } = plan;
|
|
95
|
+
if (plan.type !== 'KingdomCollaborationPlan/v1' || plan.kingdomId !== event.kingdom_id || plan.planId !== event.target_id
|
|
96
|
+
|| event.actor_role !== 'CHANCELLOR' || event.actor_id !== plan.proposedBy
|
|
97
|
+
|| plan.proposalEventId !== event.event_id || plan.proposedSeq !== event.seq || ownerInputHash(content) !== digest)
|
|
98
|
+
reject('PLAN_LEDGER_INVALID', '计划事件与内容摘要不一致。');
|
|
99
|
+
return plan;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (error instanceof CollaborationError)
|
|
103
|
+
throw error;
|
|
104
|
+
return reject('PLAN_LEDGER_INVALID', '计划事件无法读取。');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function latestRecord(store, kingdomId, planId) {
|
|
108
|
+
const events = planEvents(store, kingdomId).filter(event => event.target_id === planId);
|
|
109
|
+
const proposal = events.filter(event => event.event_type === 'COLLABORATION_PLAN_PROPOSED').at(-1);
|
|
110
|
+
if (!proposal)
|
|
111
|
+
return null;
|
|
112
|
+
const plan = parsePlan(proposal);
|
|
113
|
+
const adoption = events.filter(event => event.event_type === 'COLLABORATION_PLAN_ADOPTED').at(-1) ?? null;
|
|
114
|
+
if (adoption) {
|
|
115
|
+
const value = JSON.parse(adoption.payload_json);
|
|
116
|
+
if (value.type !== 'KingdomCollaborationAdoption/v1' || value.planId !== plan.planId || value.version !== plan.version
|
|
117
|
+
|| adoption.actor_role !== 'OWNER' || adoption.actor_id !== store.getDefaultKingdom()?.owner_id
|
|
118
|
+
|| value.digest !== plan.digest || ownerInputHash(value.childTaskIds) !== ownerInputHash(plan.childTaskIds))
|
|
119
|
+
reject('PLAN_LEDGER_INVALID', '采纳事件不匹配当前计划。');
|
|
120
|
+
}
|
|
121
|
+
return { plan, adoption };
|
|
122
|
+
}
|
|
123
|
+
function parentContentDigest(parent) {
|
|
124
|
+
return ownerInputHash({ taskId: parent.task_id, territoryId: parent.territory_id, parentTaskId: parent.parent_task_id,
|
|
125
|
+
title: parent.title, description: parent.description, acceptanceCriteria: parent.acceptance_criteria });
|
|
126
|
+
}
|
|
127
|
+
function parentAndContext(store, kingdomId, input, proposedBy) {
|
|
128
|
+
const parent = store.getTask(input.parentTaskId);
|
|
129
|
+
if (!parent || parent.parent_task_id !== null || parent.status !== 'CREATED' || parent.assigned_binding_id !== null
|
|
130
|
+
|| store.latestExecution(parent.task_id) || store.getActiveAssignmentForTask(parent.task_id)
|
|
131
|
+
|| store.listTasks(kingdomId).some(task => task.parent_task_id === parent.task_id))
|
|
132
|
+
reject('PLAN_PARENT_INVALID', '协作父项必须是尚未派发、没有父项或子项的 CREATED 任务。');
|
|
133
|
+
const territoryIds = [...new Set([parent.territory_id, ...input.items.map(item => item.territoryId)])].sort();
|
|
134
|
+
const territories = territoryIds.map(id => {
|
|
135
|
+
const territory = store.getTerritoryById(id);
|
|
136
|
+
if (!territory || territory.kingdom_id !== kingdomId || territory.status !== 'ACTIVE' || !territory.workspace_path)
|
|
137
|
+
reject('PLAN_TERRITORY_INVALID', '计划领地必须属于当前王国且有效。');
|
|
138
|
+
const supervisor = territory.supervisor_binding_id ? store.getBindingById(territory.supervisor_binding_id) : null;
|
|
139
|
+
if (!supervisor || supervisor.kingdom_id !== kingdomId || supervisor.role_type !== 'SUPERVISOR' || supervisor.status !== 'ACTIVE')
|
|
140
|
+
reject('PLAN_TERRITORY_INVALID', '每个计划领地必须有当前有效主管。');
|
|
141
|
+
return { territory, supervisor };
|
|
142
|
+
});
|
|
143
|
+
const workers = [input.integratorBindingId, ...input.items.map(item => item.workerBindingId)].sort().map(id => {
|
|
144
|
+
const binding = store.getBindingById(id);
|
|
145
|
+
if (!binding || binding.kingdom_id !== kingdomId || binding.role_type !== 'WORKER' || binding.status !== 'ACTIVE')
|
|
146
|
+
reject('PLAN_WORKER_INVALID', '计划成员必须是当前王国有效 Worker。');
|
|
147
|
+
return binding;
|
|
148
|
+
});
|
|
149
|
+
const proposer = store.getBindingById(proposedBy);
|
|
150
|
+
if (!proposer || proposer.kingdom_id !== kingdomId || proposer.role_type !== 'CHANCELLOR' || proposer.status !== 'ACTIVE')
|
|
151
|
+
reject('PLAN_PROPOSER_INVALID', '计划提案的宰相身份已失效。');
|
|
152
|
+
return { parent, digest: ownerInputHash({ parent, territories, workers, proposer }) };
|
|
153
|
+
}
|
|
154
|
+
function view(store, record) {
|
|
155
|
+
const { plan, adoption } = record;
|
|
156
|
+
let state = adoption ? 'ADOPTED' : 'PROPOSED';
|
|
157
|
+
if (!adoption) {
|
|
158
|
+
try {
|
|
159
|
+
if (parentAndContext(store, plan.kingdomId, plan, plan.proposedBy).digest !== plan.contextDigest)
|
|
160
|
+
state = 'STALE';
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
state = 'STALE';
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return { type: plan.type, planId: plan.planId, kingdomId: plan.kingdomId, parentTaskId: plan.parentTaskId, version: plan.version,
|
|
167
|
+
digest: plan.digest, state, mode: plan.mode, reason: plan.reason, integratorBindingId: plan.integratorBindingId,
|
|
168
|
+
budgetTokens: plan.budgetTokens, reserveTokens: plan.reserveTokens, items: structuredClone(plan.items), childTaskIds: [...plan.childTaskIds],
|
|
169
|
+
proposedBy: plan.proposedBy, proposedAt: plan.proposedAt, proposedSeq: plan.proposedSeq, adoptedAt: adoption?.created_at ?? null, adoptedSeq: adoption?.seq ?? null };
|
|
170
|
+
}
|
|
171
|
+
export function readCollaborationPlan(store, kingdomId, planId) {
|
|
172
|
+
const record = latestRecord(store, kingdomId, planId);
|
|
173
|
+
return record ? view(store, record) : null;
|
|
174
|
+
}
|
|
175
|
+
export function listCollaborationPlans(store, kingdomId) {
|
|
176
|
+
return [...new Set(planEvents(store, kingdomId).filter(event => event.event_type === 'COLLABORATION_PLAN_PROPOSED').map(event => event.target_id))]
|
|
177
|
+
.map(id => readCollaborationPlan(store, kingdomId, id)).sort((a, b) => b.proposedSeq - a.proposedSeq);
|
|
178
|
+
}
|
|
179
|
+
export function proposeCollaborationPlan(store, ctx, input) {
|
|
180
|
+
const normalized = normalizeProposal(input);
|
|
181
|
+
return store.withImmediateTransaction(() => {
|
|
182
|
+
const role = requireRole(store, ctx, 'CHANCELLOR');
|
|
183
|
+
if (!role.ok)
|
|
184
|
+
reject(role.code, role.message);
|
|
185
|
+
const prior = listCollaborationPlans(store, ctx.kingdomId).find(plan => plan.parentTaskId === normalized.parentTaskId);
|
|
186
|
+
if (prior?.state === 'ADOPTED')
|
|
187
|
+
reject('PLAN_ALREADY_ADOPTED', '已采纳计划不可静默改写。');
|
|
188
|
+
if (normalized.expectedVersion !== (prior?.version ?? 0))
|
|
189
|
+
reject('PLAN_VERSION_STALE', '提案基准版本已变化,请读取当前计划。');
|
|
190
|
+
const context = parentAndContext(store, ctx.kingdomId, normalized, role.binding.binding_id);
|
|
191
|
+
const { expectedVersion: _, ...content } = normalized;
|
|
192
|
+
const items = content.items.map(item => ({ ...item, taskId: randomUUID() }));
|
|
193
|
+
const proposedAt = new Date().toISOString(), proposalEventId = randomUUID();
|
|
194
|
+
const withoutDigest = { ...content, type: 'KingdomCollaborationPlan/v1', planId: prior?.planId ?? randomUUID(),
|
|
195
|
+
kingdomId: ctx.kingdomId, version: (prior?.version ?? 0) + 1, items, childTaskIds: items.map(item => item.taskId),
|
|
196
|
+
proposedBy: role.binding.binding_id, proposedAt, proposedSeq: store.eventSequence() + 1, proposalEventId,
|
|
197
|
+
contextDigest: context.digest, parentContentDigest: parentContentDigest(context.parent), authority: ctx.auth.mode === 'session-bound' ? 'SESSION_BOUND' : 'LOCAL_DEMO' };
|
|
198
|
+
const plan = { ...withoutDigest, digest: ownerInputHash(withoutDigest) };
|
|
199
|
+
store.appendEvent({ event_id: proposalEventId, kingdom_id: ctx.kingdomId, event_type: 'COLLABORATION_PLAN_PROPOSED',
|
|
200
|
+
actor_role: 'CHANCELLOR', actor_id: role.binding.binding_id, target_type: 'collaboration-plan', target_id: plan.planId,
|
|
201
|
+
payload_json: JSON.stringify(plan), created_at: proposedAt });
|
|
202
|
+
return view(store, { plan, adoption: null });
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
export function adoptCollaborationPlan(store, input, auth) {
|
|
206
|
+
const admin = requireAdmin(store, input.kingdomId, auth, { operation: 'plan.adopt', input });
|
|
207
|
+
if (!admin.ok)
|
|
208
|
+
return admin.message;
|
|
209
|
+
const params = normalizePlanAdoptionParameters({ plan_id: input.plan_id, version: input.version, digest: input.digest });
|
|
210
|
+
const write = () => {
|
|
211
|
+
const record = latestRecord(store, input.kingdomId, params.plan_id);
|
|
212
|
+
if (!record || record.plan.version !== params.version || record.plan.digest !== params.digest)
|
|
213
|
+
reject('PLAN_VERSION_STALE', '计划版本或内容摘要已变化。');
|
|
214
|
+
if (record.adoption)
|
|
215
|
+
reject('PLAN_ALREADY_ADOPTED', '该计划已经采纳,请查询原回执。');
|
|
216
|
+
const plan = record.plan;
|
|
217
|
+
if (parentAndContext(store, input.kingdomId, plan, plan.proposedBy).digest !== plan.contextDigest)
|
|
218
|
+
reject('PLAN_CONTEXT_STALE', '父项、角色或领地已变化,请重新提案。');
|
|
219
|
+
const at = new Date().toISOString();
|
|
220
|
+
for (const item of plan.items) {
|
|
221
|
+
store.insertTask({ task_id: item.taskId, territory_id: item.territoryId, parent_task_id: plan.parentTaskId, title: item.title,
|
|
222
|
+
description: item.description, acceptance_criteria: item.acceptanceCriteria, assigned_binding_id: null, status: 'CREATED', result_summary: null,
|
|
223
|
+
capability_requirement_json: null, created_at: at, updated_at: at });
|
|
224
|
+
store.appendEvent({ event_id: randomUUID(), kingdom_id: input.kingdomId, event_type: 'COLLABORATION_CHILD_CREATED', actor_role: 'SYSTEM',
|
|
225
|
+
actor_id: 'kingdom-plan-adoption', target_type: 'task', target_id: item.taskId,
|
|
226
|
+
payload_json: JSON.stringify({ planId: plan.planId, version: plan.version, digest: plan.digest, parentTaskId: plan.parentTaskId,
|
|
227
|
+
proposalEventId: plan.proposalEventId, proposedBy: plan.proposedBy, proposalAuthority: plan.authority,
|
|
228
|
+
ownerId: admin.ownerPrincipalId, assignmentCreated: false, grantCreated: false, ...admin.eventSource }), created_at: at });
|
|
229
|
+
}
|
|
230
|
+
const adoption = { type: 'KingdomCollaborationAdoption/v1', planId: plan.planId, version: plan.version, digest: plan.digest,
|
|
231
|
+
parentTaskId: plan.parentTaskId, childTaskIds: plan.childTaskIds, carriedRoleSourceRefs: readIncompleteRoleUsageSourceRefs(store, input.kingdomId) };
|
|
232
|
+
store.appendEvent({ event_id: randomUUID(), kingdom_id: input.kingdomId, event_type: 'COLLABORATION_PLAN_ADOPTED', actor_role: 'OWNER',
|
|
233
|
+
actor_id: admin.ownerPrincipalId, target_type: 'collaboration-plan', target_id: plan.planId,
|
|
234
|
+
payload_json: JSON.stringify({ ...adoption, operation: 'plan.adopt', ...admin.eventSource }), created_at: at });
|
|
235
|
+
return '协作计划已按准确版本采纳,子项已创建;仍需各领地主管正常派发、授权和验收,父项不会自动完成。';
|
|
236
|
+
};
|
|
237
|
+
return store.db.isTransaction ? write() : store.withImmediateTransaction(write);
|
|
238
|
+
}
|
|
239
|
+
function acceptedHandoff(store, kingdomId, item) {
|
|
240
|
+
const task = store.getTask(item.taskId), result = store.latestWorkerResult(item.taskId), execution = store.latestExecution(item.taskId);
|
|
241
|
+
if (!task || task.status !== 'DONE' || task.assigned_binding_id !== item.workerBindingId || !result || !execution
|
|
242
|
+
|| result.worker_binding_id !== item.workerBindingId || execution.worker_binding_id !== item.workerBindingId
|
|
243
|
+
|| result.attempt_no !== execution.attempt_no || execution.state !== 'COMPLETED' || result.outcome !== 'COMPLETED')
|
|
244
|
+
return null;
|
|
245
|
+
const event = store.db.prepare("SELECT * FROM events WHERE kingdom_id = ? AND event_type = 'TASK_ACCEPTED' AND target_type = 'task' AND target_id = ? ORDER BY seq DESC LIMIT 1")
|
|
246
|
+
.get(kingdomId, item.taskId);
|
|
247
|
+
if (!event || event.actor_role !== 'SUPERVISOR')
|
|
248
|
+
return null;
|
|
249
|
+
try {
|
|
250
|
+
const accepted = JSON.parse(event.payload_json);
|
|
251
|
+
const territory = store.getTerritoryById(task.territory_id), supervisor = event.actor_id ? store.getBindingById(event.actor_id) : null;
|
|
252
|
+
if (accepted.decision !== 'ACCEPT' || accepted.reviewed_attempt_no !== result.attempt_no || accepted.reviewer_binding_id !== event.actor_id
|
|
253
|
+
|| accepted.reviewed_result_id !== result.result_id || accepted.reviewed_result_digest !== ownerInputHash(result)
|
|
254
|
+
|| !supervisor || supervisor.kingdom_id !== kingdomId || supervisor.role_type !== 'SUPERVISOR'
|
|
255
|
+
|| territory?.supervisor_binding_id !== event.actor_id || supervisor.status !== 'ACTIVE'
|
|
256
|
+
|| Date.parse(result.created_at) > Date.parse(event.created_at))
|
|
257
|
+
return null;
|
|
258
|
+
const payload = JSON.parse(result.result_json);
|
|
259
|
+
if (typeof payload.summary !== 'string' || !payload.summary.trim())
|
|
260
|
+
return null;
|
|
261
|
+
const artifacts = Array.isArray(payload.artifacts) ? payload.artifacts.filter((ref) => typeof ref === 'string' && ref.length > 0 && ref.length <= 768).slice(0, 8) : [];
|
|
262
|
+
return { taskId: item.taskId, attemptNo: result.attempt_no, resultId: result.result_id, resultDigest: ownerInputHash(result),
|
|
263
|
+
acceptEventId: event.event_id, acceptEventSeq: event.seq, summary: payload.summary.slice(0, 2000), artifacts };
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/** A failed member may retry itself only after review of this exact settled attempt. */
|
|
270
|
+
function hasSettledFailedRework(store, kingdomId, taskId, preparingLeaseId) {
|
|
271
|
+
const task = store.getTask(taskId), execution = store.latestExecution(taskId), claim = store.latestWorkerResult(taskId);
|
|
272
|
+
if (task?.status !== 'RUNNING' || !execution || !claim || !['FAILED', 'ABORTED'].includes(execution.state)
|
|
273
|
+
|| execution.attempt_no !== claim.attempt_no || claim.outcome !== execution.state
|
|
274
|
+
|| execution.worker_binding_id !== task.assigned_binding_id || claim.worker_binding_id !== task.assigned_binding_id
|
|
275
|
+
|| store.listExecutions(taskId).some(row => !['COMPLETED', 'FAILED', 'ABORTED'].includes(row.state))
|
|
276
|
+
|| store.listLeases(kingdomId).some(row => row.task_id === taskId && row.state !== 'RELEASED'
|
|
277
|
+
&& !(store.db.isTransaction && row.lease_id === preparingLeaseId && row.state === 'DISPATCH_READY'
|
|
278
|
+
&& row.attempt_no === execution.attempt_no + 1 && row.worker_binding_id === task.assigned_binding_id
|
|
279
|
+
&& row.territory_id === task.territory_id && !store.listDispatchesForTaskAttempt(taskId, row.attempt_no).length))
|
|
280
|
+
|| store.listDispatchesForTaskAttempt(taskId, execution.attempt_no).some(row => !['TERMINAL', 'FAILED'].includes(row.state)))
|
|
281
|
+
return false;
|
|
282
|
+
const rework = store.latestTaskReworkEvent(kingdomId, taskId, claim.attempt_no);
|
|
283
|
+
if (!rework)
|
|
284
|
+
return false;
|
|
285
|
+
try {
|
|
286
|
+
const reviewed = JSON.parse(rework.payload_json);
|
|
287
|
+
return reviewed.decision === 'REWORK' && reviewed.reviewed_result_id === claim.result_id
|
|
288
|
+
&& reviewed.reviewed_result_digest === ownerInputHash(claim) && reviewed.reviewed_execution_id === execution.execution_id;
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/** Read-only exact references. Handoff text remains an untrusted Worker Claim. */
|
|
295
|
+
export function readCollaborationReadiness(store, kingdomId, taskId, preparingLeaseId) {
|
|
296
|
+
const plan = listCollaborationPlans(store, kingdomId).find(plan => plan.parentTaskId === taskId || plan.childTaskIds.includes(taskId));
|
|
297
|
+
if (!plan)
|
|
298
|
+
return null;
|
|
299
|
+
const item = plan.items.find(item => item.taskId === taskId);
|
|
300
|
+
const result = { planId: plan.planId, version: plan.version, digest: plan.digest, parentTaskId: plan.parentTaskId,
|
|
301
|
+
taskId, kind: item ? 'ITEM' : 'INTEGRATION', access: item?.access ?? 'WRITE', workerBindingId: item?.workerBindingId ?? plan.integratorBindingId,
|
|
302
|
+
ready: false, reasonCode: null, blockingTaskIds: [], handoffs: [] };
|
|
303
|
+
const blocked = (reasonCode, tasks = []) => ({ ...result, reasonCode, blockingTaskIds: tasks });
|
|
304
|
+
if (plan.state !== 'ADOPTED')
|
|
305
|
+
return blocked('PLAN_NOT_ADOPTED');
|
|
306
|
+
const parent = store.getTask(plan.parentTaskId), task = store.getTask(taskId), worker = store.getBindingById(result.workerBindingId);
|
|
307
|
+
const record = latestRecord(store, kingdomId, plan.planId);
|
|
308
|
+
const parentTerritory = parent ? store.getTerritoryById(parent.territory_id) : null;
|
|
309
|
+
if (!parent || parent.parent_task_id !== null || !task || !worker || worker.status !== 'ACTIVE' || worker.role_type !== 'WORKER'
|
|
310
|
+
|| !parentTerritory || parentTerritory.kingdom_id !== kingdomId || parentTerritory.status !== 'ACTIVE'
|
|
311
|
+
|| parentContentDigest(parent) !== record.plan.parentContentDigest
|
|
312
|
+
|| worker.kingdom_id !== kingdomId || task.assigned_binding_id !== null && task.assigned_binding_id !== result.workerBindingId)
|
|
313
|
+
return blocked('PLAN_MEMBER_CHANGED', [taskId]);
|
|
314
|
+
for (const member of plan.items) {
|
|
315
|
+
const child = store.getTask(member.taskId), territory = store.getTerritoryById(member.territoryId);
|
|
316
|
+
const binding = store.getBindingById(member.workerBindingId);
|
|
317
|
+
if (!child || child.parent_task_id !== plan.parentTaskId || child.territory_id !== member.territoryId || child.title !== member.title
|
|
318
|
+
|| child.description !== member.description || child.acceptance_criteria !== member.acceptanceCriteria
|
|
319
|
+
|| child.assigned_binding_id !== null && child.assigned_binding_id !== member.workerBindingId
|
|
320
|
+
|| !binding || binding.kingdom_id !== kingdomId || binding.role_type !== 'WORKER' || binding.status !== 'ACTIVE'
|
|
321
|
+
|| !territory || territory.kingdom_id !== kingdomId || territory.status !== 'ACTIVE')
|
|
322
|
+
return blocked('PLAN_MEMBER_CHANGED', [member.taskId]);
|
|
323
|
+
}
|
|
324
|
+
const retryingSettledFailure = hasSettledFailedRework(store, kingdomId, taskId, preparingLeaseId);
|
|
325
|
+
const failed = [parent.task_id, ...plan.childTaskIds].filter(id => {
|
|
326
|
+
const current = store.getTask(id), execution = store.latestExecution(id);
|
|
327
|
+
return current?.status === 'FAILED' || execution?.state === 'RECOVERING'
|
|
328
|
+
|| current?.status !== 'DONE' && ['FAILED', 'ABORTED'].includes(execution?.state ?? '')
|
|
329
|
+
&& (!retryingSettledFailure || !hasSettledFailedRework(store, kingdomId, id, id === taskId ? preparingLeaseId : undefined))
|
|
330
|
+
|| store.listDispatchesForTaskAttempt(id, execution?.attempt_no ?? 0).some(dispatch => dispatch.state === 'RECOVERING');
|
|
331
|
+
});
|
|
332
|
+
if (failed.length)
|
|
333
|
+
return blocked('PLAN_MEMBER_FAILED_OR_UNKNOWN', failed);
|
|
334
|
+
if (!['CREATED', 'ASSIGNED', 'RUNNING'].includes(task.status))
|
|
335
|
+
return blocked('TASK_NOT_STARTABLE', [taskId]);
|
|
336
|
+
const dependencies = item ? plan.items.filter(member => item.dependsOn.includes(member.key)) : plan.items;
|
|
337
|
+
for (const dependency of dependencies) {
|
|
338
|
+
const handoff = acceptedHandoff(store, kingdomId, dependency);
|
|
339
|
+
if (!handoff)
|
|
340
|
+
result.blockingTaskIds.push(dependency.taskId);
|
|
341
|
+
else
|
|
342
|
+
result.handoffs.push(handoff);
|
|
343
|
+
}
|
|
344
|
+
if (result.blockingTaskIds.length)
|
|
345
|
+
return { ...result, reasonCode: 'DEPENDENCY_NOT_ACCEPTED_OR_STALE', handoffs: [] };
|
|
346
|
+
return { ...result, ready: true };
|
|
347
|
+
}
|
|
348
|
+
/** Recompute before dispatch; caller-supplied or stale references never become authority. */
|
|
349
|
+
export function validateCollaborationHandoffs(store, kingdomId, taskId, expected, preparingLeaseId) {
|
|
350
|
+
const readiness = readCollaborationReadiness(store, kingdomId, taskId, preparingLeaseId);
|
|
351
|
+
return !!readiness?.ready && ownerInputHash(readiness.handoffs) === ownerInputHash(expected);
|
|
352
|
+
}
|
|
353
|
+
/** Members are exact; all observable concurrent kingdom coordination is a conservative upper bound. */
|
|
354
|
+
export function readPlanBudgetView(store, kingdomId, planId) {
|
|
355
|
+
const record = latestRecord(store, kingdomId, planId);
|
|
356
|
+
if (!record?.adoption)
|
|
357
|
+
return null;
|
|
358
|
+
const { plan, adoption } = record;
|
|
359
|
+
const adopted = JSON.parse(adoption.payload_json);
|
|
360
|
+
const members = new Set([plan.parentTaskId, ...plan.childTaskIds]);
|
|
361
|
+
const admissions = new Map();
|
|
362
|
+
for (const event of store.listBudgetEvents(kingdomId)) {
|
|
363
|
+
if (!event.event_type.startsWith('BUDGET_ADMISSION_'))
|
|
364
|
+
continue;
|
|
365
|
+
const value = JSON.parse(event.payload_json);
|
|
366
|
+
if (members.has(value.taskId))
|
|
367
|
+
admissions.set(value.admissionId, value);
|
|
368
|
+
}
|
|
369
|
+
let workerVerifiedTokens = 0, reservedEstimateTokens = 0, pendingUnits = 0, unknownUnits = 0;
|
|
370
|
+
const dispatches = store.listDispatches(kingdomId).filter(dispatch => members.has(dispatch.task_id));
|
|
371
|
+
const ids = new Set(dispatches.map(dispatch => dispatch.dispatch_id));
|
|
372
|
+
for (const dispatch of dispatches) {
|
|
373
|
+
const usage = readDispatchUsage(store, dispatch.dispatch_id);
|
|
374
|
+
const complete = usage?.status === 'COMPLETE' && usage.taskId === dispatch.task_id && usage.attemptNo === dispatch.attempt_no
|
|
375
|
+
&& usage.usage !== null && count(usage.usage.totalTokens);
|
|
376
|
+
const tokens = complete ? usage.usage.totalTokens : 0;
|
|
377
|
+
workerVerifiedTokens = add(workerVerifiedTokens, tokens);
|
|
378
|
+
const pending = !['TERMINAL', 'FAILED'].includes(dispatch.state);
|
|
379
|
+
if (pending)
|
|
380
|
+
pendingUnits++;
|
|
381
|
+
else if (!complete)
|
|
382
|
+
unknownUnits++;
|
|
383
|
+
if (pending || !complete)
|
|
384
|
+
reservedEstimateTokens = add(reservedEstimateTokens, Math.max(0, plan.reserveTokens - tokens));
|
|
385
|
+
}
|
|
386
|
+
for (const admission of admissions.values()) {
|
|
387
|
+
if (admission.state === 'CANCELLED' || admission.state === 'BOUND' && ids.has(admission.dispatchId ?? ''))
|
|
388
|
+
continue;
|
|
389
|
+
reservedEstimateTokens = add(reservedEstimateTokens, plan.reserveTokens);
|
|
390
|
+
pendingUnits++;
|
|
391
|
+
if (admission.state === 'BOUND' || !isBudgetAdmissionInvocationActive(store, admission.admissionId))
|
|
392
|
+
unknownUnits++;
|
|
393
|
+
}
|
|
394
|
+
// A legacy or otherwise unmatched Execution has no proven Dispatch usage.
|
|
395
|
+
// Keep its risk visible instead of treating a missing metering seam as free.
|
|
396
|
+
const dispatchAttempts = new Set(dispatches.map(dispatch => `${dispatch.task_id}:${dispatch.attempt_no}`));
|
|
397
|
+
const reservedAttempts = new Set([...admissions.values()].filter(admission => admission.state !== 'CANCELLED')
|
|
398
|
+
.map(admission => `${admission.taskId}:${admission.attemptNo}`));
|
|
399
|
+
for (const taskId of members)
|
|
400
|
+
for (const execution of store.listExecutions(taskId)) {
|
|
401
|
+
const key = `${taskId}:${execution.attempt_no}`;
|
|
402
|
+
if (dispatchAttempts.has(key))
|
|
403
|
+
continue;
|
|
404
|
+
unknownUnits++;
|
|
405
|
+
if (!reservedAttempts.has(key)) {
|
|
406
|
+
reservedEstimateTokens = add(reservedEstimateTokens, plan.reserveTokens);
|
|
407
|
+
if (!['COMPLETED', 'FAILED', 'ABORTED'].includes(execution.state))
|
|
408
|
+
pendingUnits++;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
const other = readAdditionalBudgetUsage(store, kingdomId, adoption.seq, adopted.carriedRoleSourceRefs);
|
|
412
|
+
pendingUnits = add(pendingUnits, other.pendingUnits);
|
|
413
|
+
unknownUnits = add(unknownUnits, other.unknownUnits);
|
|
414
|
+
reservedEstimateTokens = add(reservedEstimateTokens, other.pendingUnits * plan.reserveTokens);
|
|
415
|
+
const exposureTokens = add(add(workerVerifiedTokens, other.verifiedTokens), reservedEstimateTokens);
|
|
416
|
+
const state = unknownUnits > 0 ? 'BLOCK_UNKNOWN' : add(exposureTokens, plan.reserveTokens) > plan.budgetTokens ? 'BLOCK_LIMIT'
|
|
417
|
+
: other.attributionGapCount > 0 || exposureTokens >= plan.budgetTokens * 0.8 ? 'WARN' : 'ALLOW';
|
|
418
|
+
return { scope: 'PLAN_WITH_KINGDOM_COORDINATION_UPPER_BOUND', planId, limitTokens: plan.budgetTokens, reserveTokens: plan.reserveTokens,
|
|
419
|
+
workerVerifiedTokens, coordinationUpperBoundTokens: other.verifiedTokens, reservedEstimateTokens, exposureTokens,
|
|
420
|
+
remainingTokens: Math.max(0, plan.budgetTokens - exposureTokens), pendingUnits, unknownUnits, attributionGapCount: other.attributionGapCount, state, amount: null };
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=collaboration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collaboration.js","sourceRoot":"","sources":["../../src/core/collaboration.ts"],"names":[],"mappings":"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"}
|