@guyghost/swarm-dao-core 0.2.0 → 0.4.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/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/registry.d.ts +46 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +352 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/control/gates.d.ts.map +1 -1
- package/dist/control/gates.js +17 -0
- package/dist/control/gates.js.map +1 -1
- package/dist/delivery/dependencies.d.ts.map +1 -1
- package/dist/delivery/dependencies.js +15 -7
- package/dist/delivery/dependencies.js.map +1 -1
- package/dist/delivery/execution.d.ts.map +1 -1
- package/dist/delivery/execution.js +7 -5
- package/dist/delivery/execution.js.map +1 -1
- package/dist/governance/agents.d.ts +2 -0
- package/dist/governance/agents.d.ts.map +1 -1
- package/dist/governance/agents.js +49 -12
- package/dist/governance/agents.js.map +1 -1
- package/dist/governance/delegation.machine.d.ts +316 -0
- package/dist/governance/delegation.machine.d.ts.map +1 -0
- package/dist/governance/delegation.machine.js +387 -0
- package/dist/governance/delegation.machine.js.map +1 -0
- package/dist/governance/delegation.utils.d.ts +55 -0
- package/dist/governance/delegation.utils.d.ts.map +1 -0
- package/dist/governance/delegation.utils.js +157 -0
- package/dist/governance/delegation.utils.js.map +1 -0
- package/dist/governance/index.d.ts +2 -0
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +2 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/governance/lifecycle.d.ts +0 -6
- package/dist/governance/lifecycle.d.ts.map +1 -1
- package/dist/governance/lifecycle.js +7 -31
- package/dist/governance/lifecycle.js.map +1 -1
- package/dist/governance/proposal.machine.d.ts +65 -81
- package/dist/governance/proposal.machine.d.ts.map +1 -1
- package/dist/governance/proposal.machine.js +160 -357
- package/dist/governance/proposal.machine.js.map +1 -1
- package/dist/governance/proposal.utils.d.ts +19 -165
- package/dist/governance/proposal.utils.d.ts.map +1 -1
- package/dist/governance/proposal.utils.js +49 -119
- package/dist/governance/proposal.utils.js.map +1 -1
- package/dist/governance/scoring.d.ts.map +1 -1
- package/dist/governance/scoring.js +36 -16
- package/dist/governance/scoring.js.map +1 -1
- package/dist/host-tools/github-config.d.ts +7 -0
- package/dist/host-tools/github-config.d.ts.map +1 -0
- package/dist/host-tools/github-config.js +33 -0
- package/dist/host-tools/github-config.js.map +1 -0
- package/dist/host-tools/handlers.d.ts +87 -0
- package/dist/host-tools/handlers.d.ts.map +1 -0
- package/dist/host-tools/handlers.js +556 -0
- package/dist/host-tools/handlers.js.map +1 -0
- package/dist/host-tools/index.d.ts +5 -0
- package/dist/host-tools/index.d.ts.map +1 -0
- package/dist/host-tools/index.js +5 -0
- package/dist/host-tools/index.js.map +1 -0
- package/dist/host-tools/messages.d.ts +12 -0
- package/dist/host-tools/messages.d.ts.map +1 -0
- package/dist/host-tools/messages.js +34 -0
- package/dist/host-tools/messages.js.map +1 -0
- package/dist/host-tools/utils.d.ts +3 -0
- package/dist/host-tools/utils.d.ts.map +1 -0
- package/dist/host-tools/utils.js +29 -0
- package/dist/host-tools/utils.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/http.d.ts +12 -1
- package/dist/integrations/http.d.ts.map +1 -1
- package/dist/integrations/http.js +114 -17
- package/dist/integrations/http.js.map +1 -1
- package/dist/intelligence/delegation.d.ts +40 -0
- package/dist/intelligence/delegation.d.ts.map +1 -0
- package/dist/intelligence/delegation.js +162 -0
- package/dist/intelligence/delegation.js.map +1 -0
- package/dist/intelligence/index.d.ts +1 -0
- package/dist/intelligence/index.d.ts.map +1 -1
- package/dist/intelligence/index.js +1 -0
- package/dist/intelligence/index.js.map +1 -1
- package/dist/intelligence/model.d.ts +28 -2
- package/dist/intelligence/model.d.ts.map +1 -1
- package/dist/intelligence/model.js +36 -3
- package/dist/intelligence/model.js.map +1 -1
- package/dist/intelligence/swarm.d.ts +13 -2
- package/dist/intelligence/swarm.d.ts.map +1 -1
- package/dist/intelligence/swarm.js +97 -50
- package/dist/intelligence/swarm.js.map +1 -1
- package/dist/persistence.d.ts +2 -6
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +109 -123
- package/dist/persistence.js.map +1 -1
- package/dist/types/index.d.ts +70 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Delegation Lifecycle State Machines
|
|
3
|
+
// ------------------------------------------------------------
|
|
4
|
+
// Source of truth for Delegated Facet Investigation (DFI, thin slice,
|
|
5
|
+
// depth = 1). Two coordinated XState v5 machines:
|
|
6
|
+
//
|
|
7
|
+
// • DelegationCoordinator — one per (parent agent, deliberation). Owns the
|
|
8
|
+
// parent-scoped budget counters atomically (INV-7), the enabled check
|
|
9
|
+
// (parentEnabled), and the drain/cancel cascade entry point.
|
|
10
|
+
// • DelegationRequest — one per request. Owns the per-request lifecycle
|
|
11
|
+
// (requested → gated → spawned → reported → delegated | blocked |
|
|
12
|
+
// cancelled | failed). Pure permission guards only.
|
|
13
|
+
//
|
|
14
|
+
// Discipline (unchanged from proposal.machine.ts): "Le modèle décide." The
|
|
15
|
+
// LLM produces ONE signal — `FACET_REQUESTED` — extracted by the orchestrator
|
|
16
|
+
// from the parent agent's output. That signal feeds `REQUEST_ARRIVED`. Every
|
|
17
|
+
// other transition is decided by guards + the coordinator. No call site
|
|
18
|
+
// chooses a target status; it emits the event that matches what happened.
|
|
19
|
+
//
|
|
20
|
+
// The orchestrator owns I/O only (parse, spawn child via adapter, fold output,
|
|
21
|
+
// run timers). It emits no decision the machines do not authorize. The
|
|
22
|
+
// proposal machine is untouched.
|
|
23
|
+
//
|
|
24
|
+
// Invariants enforced here: INV-1 (depth cap), INV-2 (no ungated spawn),
|
|
25
|
+
// INV-4 (terminal immutability), INV-5 (exact facet match), INV-7 (atomic
|
|
26
|
+
// budget). INV-3 (LLM boundary) is structural. INV-6 (child does not vote)
|
|
27
|
+
// is enforced in `intelligence/synthesis`. INV-8 (ordering) is enforced at
|
|
28
|
+
// the deliberation orchestrator via `allCoordinatorsClosed()`.
|
|
29
|
+
// ============================================================
|
|
30
|
+
import { assign, setup } from "xstate";
|
|
31
|
+
export const COORDINATOR_FINAL_STATUSES = new Set([
|
|
32
|
+
"blocked_signal",
|
|
33
|
+
"closed",
|
|
34
|
+
]);
|
|
35
|
+
export const REQUEST_FINAL_STATUSES = new Set([
|
|
36
|
+
"delegated",
|
|
37
|
+
"blocked",
|
|
38
|
+
"cancelled",
|
|
39
|
+
"failed",
|
|
40
|
+
]);
|
|
41
|
+
export function isCoordinatorFinal(status) {
|
|
42
|
+
return COORDINATOR_FINAL_STATUSES.has(status);
|
|
43
|
+
}
|
|
44
|
+
export function isDelegationRequestFinal(status) {
|
|
45
|
+
return REQUEST_FINAL_STATUSES.has(status);
|
|
46
|
+
}
|
|
47
|
+
// ── Pure helpers (INV-3, INV-5; W2, W5) ──────────────────────
|
|
48
|
+
/**
|
|
49
|
+
* Normalize a facet token. Pure. The orchestrator MUST call this before
|
|
50
|
+
* emitting REQUEST_ARRIVED; guards match on the normalized value exactly.
|
|
51
|
+
*/
|
|
52
|
+
export function normalizeFacet(facet) {
|
|
53
|
+
return facet.trim().toLowerCase();
|
|
54
|
+
}
|
|
55
|
+
export function evaluateDelegationGate(input) {
|
|
56
|
+
const reasons = [];
|
|
57
|
+
const normalized = normalizeFacet(input.facet);
|
|
58
|
+
const declared = input.declared.find((d) => normalizeFacet(d.facet) === normalized);
|
|
59
|
+
if (!declared) {
|
|
60
|
+
reasons.push(`facet "${normalized}" is not declared by the parent agent`);
|
|
61
|
+
}
|
|
62
|
+
else if (normalizeFacet(declared.archetype) !== normalizeFacet(input.archetype)) {
|
|
63
|
+
reasons.push(`facet "${normalized}" is declared for archetype "${declared.archetype}", not "${input.archetype}"`);
|
|
64
|
+
}
|
|
65
|
+
if (!input.registeredArchetypes.has(normalizeFacet(input.archetype))) {
|
|
66
|
+
reasons.push(`archetype "${input.archetype}" has no registered delegation profile`);
|
|
67
|
+
}
|
|
68
|
+
if (input.parentDepth + 1 > input.maxDepth) {
|
|
69
|
+
reasons.push(`depth cap exceeded (parentDepth ${input.parentDepth} + 1 > maxDepth ${input.maxDepth})`);
|
|
70
|
+
}
|
|
71
|
+
return { ok: reasons.length === 0, reasons };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* INV-6 boundary marker — the hash the orchestrator must compute when it
|
|
75
|
+
* merges a child output into the parent's reasoning. Verified by the
|
|
76
|
+
* `reported → delegated` guard before the fold is acknowledged.
|
|
77
|
+
*/
|
|
78
|
+
export function computeMergedFoldHash(mergedContent) {
|
|
79
|
+
// FNV-1a 32-bit over UTF-8. Deterministic, dependency-free; sufficient as a
|
|
80
|
+
// tampering/integrity check for the fold ack (not a security boundary).
|
|
81
|
+
let hash = 0x811c9dc5;
|
|
82
|
+
for (let i = 0; i < mergedContent.length; i++) {
|
|
83
|
+
hash ^= mergedContent.charCodeAt(i);
|
|
84
|
+
hash = Math.imul(hash, 0x01000193);
|
|
85
|
+
}
|
|
86
|
+
return `fnv1a:${(hash >>> 0).toString(16).padStart(8, "0")}`;
|
|
87
|
+
}
|
|
88
|
+
export function extractDelegationSignals(content) {
|
|
89
|
+
if (!content)
|
|
90
|
+
return [];
|
|
91
|
+
const signals = [];
|
|
92
|
+
const section = content.match(/##\s*Delegation Requests\s*\n([\s\S]*?)(?=\n##\s|$)/i);
|
|
93
|
+
if (!section?.[1])
|
|
94
|
+
return [];
|
|
95
|
+
for (const line of section[1].split("\n")) {
|
|
96
|
+
const m = line.match(/^\s*[-*]\s*facet:\s*([^|]+?)\s*\|\s*archetype:\s*(.+?)\s*$/i);
|
|
97
|
+
if (!m?.[1] || !m[2])
|
|
98
|
+
continue;
|
|
99
|
+
const facet = m[1].trim();
|
|
100
|
+
const archetype = m[2].trim();
|
|
101
|
+
if (facet.length > 0 && archetype.length > 0) {
|
|
102
|
+
signals.push({ facet: normalizeFacet(facet), archetype: normalizeFacet(archetype) });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return signals;
|
|
106
|
+
}
|
|
107
|
+
const coordinatorSetup = setup({
|
|
108
|
+
types: {
|
|
109
|
+
context: {},
|
|
110
|
+
input: {},
|
|
111
|
+
events: {},
|
|
112
|
+
},
|
|
113
|
+
guards: {
|
|
114
|
+
slotAvailable: ({ context }) => context.activeRequests < context.maxChildren,
|
|
115
|
+
parentEnabled: ({ context }) => context.parentEnabled === true,
|
|
116
|
+
depthWithinBudget: ({ context }) => context.parentDepth + 1 <= context.maxDepth,
|
|
117
|
+
requestAccepted: ({ context }) => context.activeRequests < context.maxChildren &&
|
|
118
|
+
context.parentEnabled === true &&
|
|
119
|
+
context.parentDepth + 1 <= context.maxDepth,
|
|
120
|
+
// "Last in flight" — this REQUEST_RESOLVED brings activeRequests to 0, so
|
|
121
|
+
// the coordinator can close. Guards evaluate BEFORE actions, hence the `<= 1`
|
|
122
|
+
// (current count minus one == zero). Without this the coordinator could never
|
|
123
|
+
// reach `closed` during a drain while children were still in flight.
|
|
124
|
+
lastInFlight: ({ context }) => context.activeRequests <= 1,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
function buildCoordinatorMachine(initial) {
|
|
128
|
+
return coordinatorSetup.createMachine({
|
|
129
|
+
id: "delegationCoordinator",
|
|
130
|
+
initial,
|
|
131
|
+
context: ({ input }) => ({
|
|
132
|
+
parentAgentId: input.parentAgentId,
|
|
133
|
+
parentDepth: input.parentDepth,
|
|
134
|
+
parentEnabled: input.parentEnabled,
|
|
135
|
+
maxChildren: input.maxChildren,
|
|
136
|
+
maxDepth: input.maxDepth,
|
|
137
|
+
activeRequests: input.activeRequests,
|
|
138
|
+
lastTransitionTime: input.lastTransitionTime ?? new Date().toISOString(),
|
|
139
|
+
}),
|
|
140
|
+
states: {
|
|
141
|
+
open: {
|
|
142
|
+
on: {
|
|
143
|
+
REQUEST_ARRIVED: [
|
|
144
|
+
{
|
|
145
|
+
guard: "requestAccepted",
|
|
146
|
+
target: "open",
|
|
147
|
+
actions: assign({
|
|
148
|
+
activeRequests: ({ context }) => context.activeRequests + 1,
|
|
149
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
150
|
+
}),
|
|
151
|
+
},
|
|
152
|
+
// Guards failed: stay open, no budget consumed. COORD_ACK{ok:false}
|
|
153
|
+
// is synthesized by the dispatch service from the unchanged
|
|
154
|
+
// context + the guard outcome (see delegation.utils.ts).
|
|
155
|
+
{ target: "open" },
|
|
156
|
+
],
|
|
157
|
+
REQUEST_RESOLVED: {
|
|
158
|
+
target: "open",
|
|
159
|
+
actions: assign({
|
|
160
|
+
activeRequests: ({ context }) => Math.max(0, context.activeRequests - 1),
|
|
161
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
162
|
+
}),
|
|
163
|
+
},
|
|
164
|
+
DRAIN: {
|
|
165
|
+
target: "draining",
|
|
166
|
+
actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
|
|
167
|
+
},
|
|
168
|
+
ERROR: {
|
|
169
|
+
target: "blocked_signal",
|
|
170
|
+
actions: assign({
|
|
171
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
172
|
+
errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
|
|
173
|
+
}),
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
draining: {
|
|
178
|
+
on: {
|
|
179
|
+
REQUEST_RESOLVED: [
|
|
180
|
+
{
|
|
181
|
+
guard: "lastInFlight",
|
|
182
|
+
target: "closed",
|
|
183
|
+
actions: assign({
|
|
184
|
+
activeRequests: ({ context }) => Math.max(0, context.activeRequests - 1),
|
|
185
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
186
|
+
}),
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
target: "draining",
|
|
190
|
+
actions: assign({
|
|
191
|
+
activeRequests: ({ context }) => Math.max(0, context.activeRequests - 1),
|
|
192
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
193
|
+
}),
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
blocked_signal: { type: "final" },
|
|
199
|
+
closed: { type: "final" },
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
const coordinatorCache = new Map();
|
|
204
|
+
export function createDelegationCoordinatorMachine(initial) {
|
|
205
|
+
let machine = coordinatorCache.get(initial);
|
|
206
|
+
if (!machine) {
|
|
207
|
+
machine = buildCoordinatorMachine(initial);
|
|
208
|
+
coordinatorCache.set(initial, machine);
|
|
209
|
+
}
|
|
210
|
+
return machine;
|
|
211
|
+
}
|
|
212
|
+
const requestSetup = setup({
|
|
213
|
+
types: {
|
|
214
|
+
context: {},
|
|
215
|
+
input: {},
|
|
216
|
+
events: {},
|
|
217
|
+
},
|
|
218
|
+
guards: {
|
|
219
|
+
gateApproved: ({ event }) => event.type === "GATE_DECIDED" && event.ok === true,
|
|
220
|
+
foldHashMatches: ({ event, context }) => event.type === "FOLD_COMPLETE" &&
|
|
221
|
+
typeof event.mergedAgentOutputHash === "string" &&
|
|
222
|
+
event.mergedAgentOutputHash === context.mergedAgentOutputHash,
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
function buildRequestMachine(initial) {
|
|
226
|
+
return requestSetup.createMachine({
|
|
227
|
+
id: "delegationRequest",
|
|
228
|
+
initial,
|
|
229
|
+
context: ({ input }) => ({
|
|
230
|
+
requestId: input.requestId,
|
|
231
|
+
parentAgentId: input.parentAgentId,
|
|
232
|
+
facet: input.facet,
|
|
233
|
+
archetype: input.archetype,
|
|
234
|
+
childAgentId: input.childAgentId,
|
|
235
|
+
mergedAgentOutputHash: input.mergedAgentOutputHash,
|
|
236
|
+
errorMessage: input.errorMessage,
|
|
237
|
+
gateReasons: input.gateReasons,
|
|
238
|
+
lastTransitionTime: input.lastTransitionTime ?? new Date().toISOString(),
|
|
239
|
+
}),
|
|
240
|
+
states: {
|
|
241
|
+
requested: {
|
|
242
|
+
on: {
|
|
243
|
+
GATE_DECIDED: [
|
|
244
|
+
{
|
|
245
|
+
guard: "gateApproved",
|
|
246
|
+
target: "gated",
|
|
247
|
+
actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
target: "blocked",
|
|
251
|
+
actions: assign({
|
|
252
|
+
gateReasons: ({ event }) => (event.type === "GATE_DECIDED" ? event.reasons : []),
|
|
253
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
254
|
+
}),
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
CANCEL: { target: "cancelled", actions: assign({ lastTransitionTime: () => new Date().toISOString() }) },
|
|
258
|
+
ERROR: {
|
|
259
|
+
target: "failed",
|
|
260
|
+
actions: assign({
|
|
261
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
262
|
+
errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
|
|
263
|
+
}),
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
gated: {
|
|
268
|
+
on: {
|
|
269
|
+
SPAWN_ACKED: {
|
|
270
|
+
target: "spawned",
|
|
271
|
+
actions: assign({
|
|
272
|
+
childAgentId: ({ event }) => (event.type === "SPAWN_ACKED" ? event.childAgentId : ""),
|
|
273
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
274
|
+
}),
|
|
275
|
+
},
|
|
276
|
+
CANCEL: { target: "cancelled", actions: assign({ lastTransitionTime: () => new Date().toISOString() }) },
|
|
277
|
+
ERROR: {
|
|
278
|
+
target: "failed",
|
|
279
|
+
actions: assign({
|
|
280
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
281
|
+
errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
|
|
282
|
+
}),
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
spawned: {
|
|
287
|
+
on: {
|
|
288
|
+
CHILD_REPORTED: {
|
|
289
|
+
target: "reported",
|
|
290
|
+
actions: assign({
|
|
291
|
+
// The orchestrator computes the fold hash when it merges the
|
|
292
|
+
// child output into the parent's reasoning and stores it here.
|
|
293
|
+
// The `reported → delegated` guard verifies FOLD_COMPLETE carries
|
|
294
|
+
// the same hash (INV-6 integrity check, B2).
|
|
295
|
+
mergedAgentOutputHash: ({ event }) => event.type === "CHILD_REPORTED" ? computeMergedFoldHash(event.output.content ?? "") : "",
|
|
296
|
+
}),
|
|
297
|
+
},
|
|
298
|
+
CHILD_FAILED: {
|
|
299
|
+
target: "failed",
|
|
300
|
+
actions: assign({
|
|
301
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
302
|
+
errorMessage: ({ event }) => (event.type === "CHILD_FAILED" ? event.error : ""),
|
|
303
|
+
}),
|
|
304
|
+
},
|
|
305
|
+
SPAWN_FAILED: {
|
|
306
|
+
target: "failed",
|
|
307
|
+
actions: assign({
|
|
308
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
309
|
+
errorMessage: ({ event }) => (event.type === "SPAWN_FAILED" ? event.error : ""),
|
|
310
|
+
}),
|
|
311
|
+
},
|
|
312
|
+
CANCEL: { target: "cancelled", actions: assign({ lastTransitionTime: () => new Date().toISOString() }) },
|
|
313
|
+
ERROR: {
|
|
314
|
+
target: "failed",
|
|
315
|
+
actions: assign({
|
|
316
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
317
|
+
errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
|
|
318
|
+
}),
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
},
|
|
322
|
+
reported: {
|
|
323
|
+
on: {
|
|
324
|
+
FOLD_COMPLETE: {
|
|
325
|
+
guard: "foldHashMatches",
|
|
326
|
+
target: "delegated",
|
|
327
|
+
actions: assign({ lastTransitionTime: () => new Date().toISOString() }),
|
|
328
|
+
},
|
|
329
|
+
FOLD_TIMEOUT: {
|
|
330
|
+
target: "failed",
|
|
331
|
+
actions: assign({
|
|
332
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
333
|
+
errorMessage: "fold timeout",
|
|
334
|
+
}),
|
|
335
|
+
},
|
|
336
|
+
CANCEL: { target: "cancelled", actions: assign({ lastTransitionTime: () => new Date().toISOString() }) },
|
|
337
|
+
ERROR: {
|
|
338
|
+
target: "failed",
|
|
339
|
+
actions: assign({
|
|
340
|
+
lastTransitionTime: () => new Date().toISOString(),
|
|
341
|
+
errorMessage: ({ event }) => (event.type === "ERROR" ? event.message : ""),
|
|
342
|
+
}),
|
|
343
|
+
},
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
delegated: { type: "final" },
|
|
347
|
+
blocked: { type: "final" },
|
|
348
|
+
cancelled: { type: "final" },
|
|
349
|
+
failed: { type: "final" },
|
|
350
|
+
},
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
const requestCache = new Map();
|
|
354
|
+
export function createDelegationRequestMachine(initial) {
|
|
355
|
+
let machine = requestCache.get(initial);
|
|
356
|
+
if (!machine) {
|
|
357
|
+
machine = buildRequestMachine(initial);
|
|
358
|
+
requestCache.set(initial, machine);
|
|
359
|
+
}
|
|
360
|
+
return machine;
|
|
361
|
+
}
|
|
362
|
+
// ── Child agent + model resolution helpers ───────────────────
|
|
363
|
+
/**
|
|
364
|
+
* Build the child agent descriptor for a declared delegation spec. Pure.
|
|
365
|
+
* The orchestrator spawns this via `HostAdapter.spawnAgent` using the model
|
|
366
|
+
* resolved through `buildChildModelResolutionContext`.
|
|
367
|
+
*/
|
|
368
|
+
export function buildChildAgent(parent, spec) {
|
|
369
|
+
return {
|
|
370
|
+
id: `${parent.id}:delegate:${normalizeFacet(spec.facet)}`,
|
|
371
|
+
name: `${parent.name} → ${spec.facet}`,
|
|
372
|
+
role: `Delegated facet investigation (${spec.archetype})`,
|
|
373
|
+
description: `Sub-agent spawned by ${parent.id} to investigate the "${spec.facet}" facet.`,
|
|
374
|
+
weight: 0, // INV-6: a child never votes.
|
|
375
|
+
systemPrompt: "", // resolved from delegationProfile[archetype].promptId by the orchestrator
|
|
376
|
+
model: spec.model && spec.model !== "inherit" ? spec.model : undefined,
|
|
377
|
+
enabled: true,
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Resolve the profile entry for an archetype from a DAO config. Returns
|
|
382
|
+
* undefined when no profile is registered (the gate then rejects the request).
|
|
383
|
+
*/
|
|
384
|
+
export function resolveDelegationProfile(profiles, archetype) {
|
|
385
|
+
return profiles?.[archetype];
|
|
386
|
+
}
|
|
387
|
+
//# sourceMappingURL=delegation.machine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation.machine.js","sourceRoot":"","sources":["../../src/governance/delegation.machine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { DAOAgent, DAOConfig, DelegationProfileEntry } from "../types/index.js";
|
|
2
|
+
import { type DelegationCoordinatorEvent, type DelegationCoordinatorStatus, type DelegationRequestEvent, type DelegationRequestStatus } from "./delegation.machine.js";
|
|
3
|
+
export interface DelegationCoordinatorState {
|
|
4
|
+
parentAgentId: string;
|
|
5
|
+
parentDepth: number;
|
|
6
|
+
parentEnabled: boolean;
|
|
7
|
+
maxChildren: number;
|
|
8
|
+
maxDepth: number;
|
|
9
|
+
activeRequests: number;
|
|
10
|
+
status: DelegationCoordinatorStatus;
|
|
11
|
+
lastTransitionTime: string;
|
|
12
|
+
errorMessage?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface DelegationRequestState {
|
|
15
|
+
requestId: string;
|
|
16
|
+
parentAgentId: string;
|
|
17
|
+
facet: string;
|
|
18
|
+
archetype: string;
|
|
19
|
+
status: DelegationRequestStatus;
|
|
20
|
+
childAgentId?: string;
|
|
21
|
+
mergedAgentOutputHash?: string;
|
|
22
|
+
errorMessage?: string;
|
|
23
|
+
gateReasons: string[];
|
|
24
|
+
lastTransitionTime: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function createCoordinatorState(parent: DAOAgent, config: DAOConfig, now?: string): DelegationCoordinatorState;
|
|
27
|
+
export declare function createRequestState(requestId: string, coordinator: DelegationCoordinatorState, facet: string, archetype: string, now?: string): DelegationRequestState;
|
|
28
|
+
export interface CoordinatorAck {
|
|
29
|
+
requestId: string;
|
|
30
|
+
accepted: boolean;
|
|
31
|
+
reason?: string;
|
|
32
|
+
}
|
|
33
|
+
export type CoordinatorDispatchResult = {
|
|
34
|
+
ok: true;
|
|
35
|
+
status: DelegationCoordinatorStatus;
|
|
36
|
+
ack?: CoordinatorAck;
|
|
37
|
+
} | {
|
|
38
|
+
ok: false;
|
|
39
|
+
error: string;
|
|
40
|
+
};
|
|
41
|
+
export declare function dispatchCoordinatorEvent(state: DelegationCoordinatorState, event: DelegationCoordinatorEvent): CoordinatorDispatchResult;
|
|
42
|
+
export type RequestDispatchResult = {
|
|
43
|
+
ok: true;
|
|
44
|
+
status: DelegationRequestStatus;
|
|
45
|
+
} | {
|
|
46
|
+
ok: false;
|
|
47
|
+
error: string;
|
|
48
|
+
};
|
|
49
|
+
export declare function dispatchDelegationEvent(state: DelegationRequestState, event: DelegationRequestEvent): RequestDispatchResult;
|
|
50
|
+
export declare function registeredArchetypes(config: DAOConfig): Set<string>;
|
|
51
|
+
export declare function profileFor(config: DAOConfig, archetype: string): DelegationProfileEntry | undefined;
|
|
52
|
+
export declare function registerProposalCoordinators(proposalId: number, states: DelegationCoordinatorState[]): void;
|
|
53
|
+
export declare function clearProposalCoordinators(proposalId: number): void;
|
|
54
|
+
export declare function allCoordinatorsClosed(proposalId: number): boolean;
|
|
55
|
+
//# sourceMappingURL=delegation.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation.utils.d.ts","sourceRoot":"","sources":["../../src/governance/delegation.utils.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAIL,KAAK,0BAA0B,EAE/B,KAAK,2BAA2B,EAEhC,KAAK,sBAAsB,EAE3B,KAAK,uBAAuB,EAG7B,MAAM,yBAAyB,CAAC;AAQjC,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,2BAA2B,CAAC;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,uBAAuB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAID,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,SAAS,EACjB,GAAG,GAAE,MAAiC,GACrC,0BAA0B,CAY5B;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,0BAA0B,EACvC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAiC,GACrC,sBAAsB,CAUxB;AAID,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,2BAA2B,CAAC;IAAC,GAAG,CAAC,EAAE,cAAc,CAAA;CAAE,GACvE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AASjC,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,0BAA0B,EACjC,KAAK,EAAE,0BAA0B,GAChC,yBAAyB,CA4C3B;AAID,MAAM,MAAM,qBAAqB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,EAC7B,KAAK,EAAE,sBAAsB,GAC5B,qBAAqB,CAsCvB;AAID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAInE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAEnG;AAYD,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,EAAE,GAAG,IAAI,CAE3G;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAElE;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAIjE"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Delegation Dispatch Service
|
|
3
|
+
// ------------------------------------------------------------
|
|
4
|
+
// The only sanctioned way to mutate a delegation lifecycle. Mirrors
|
|
5
|
+
// `dispatchProposalEvent`: rehydrate an actor at the persisted status,
|
|
6
|
+
// ask the machine whether the event is permitted (guards included),
|
|
7
|
+
// and only then write the new status + context back. No other writer.
|
|
8
|
+
//
|
|
9
|
+
// Two services, one per machine:
|
|
10
|
+
// • dispatchCoordinatorEvent — mutates a DelegationCoordinatorState
|
|
11
|
+
// • dispatchDelegationEvent — mutates a DelegationRequestState
|
|
12
|
+
//
|
|
13
|
+
// The orchestrator (intelligence layer) owns these state objects and drives
|
|
14
|
+
// them through the cascade: signal → REQUEST_ARRIVED → COORD_ACK →
|
|
15
|
+
// GATE_DECIDED → SPAWN_ACKED → CHILD_REPORTED → FOLD_COMPLETE. It never
|
|
16
|
+
// names a target status; it emits events.
|
|
17
|
+
// ============================================================
|
|
18
|
+
import { createActor } from "xstate";
|
|
19
|
+
import { createDelegationCoordinatorMachine, createDelegationRequestMachine, isCoordinatorFinal, isDelegationRequestFinal, } from "./delegation.machine.js";
|
|
20
|
+
// ── Factories ────────────────────────────────────────────────
|
|
21
|
+
export function createCoordinatorState(parent, config, now = new Date().toISOString()) {
|
|
22
|
+
const delegation = config.delegation;
|
|
23
|
+
return {
|
|
24
|
+
parentAgentId: parent.id,
|
|
25
|
+
parentDepth: 0, // thin slice: the council member is always depth 0
|
|
26
|
+
parentEnabled: Boolean(parent.enabled !== false && delegation?.enabled === true),
|
|
27
|
+
maxChildren: delegation?.maxChildrenPerParent ?? 0,
|
|
28
|
+
maxDepth: delegation?.maxDepth ?? 0,
|
|
29
|
+
activeRequests: 0,
|
|
30
|
+
status: "open",
|
|
31
|
+
lastTransitionTime: now,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function createRequestState(requestId, coordinator, facet, archetype, now = new Date().toISOString()) {
|
|
35
|
+
return {
|
|
36
|
+
requestId,
|
|
37
|
+
parentAgentId: coordinator.parentAgentId,
|
|
38
|
+
facet,
|
|
39
|
+
archetype,
|
|
40
|
+
status: "requested",
|
|
41
|
+
gateReasons: [],
|
|
42
|
+
lastTransitionTime: now,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function coordinatorReason(state) {
|
|
46
|
+
if (!state.parentEnabled)
|
|
47
|
+
return "delegation is disabled for this parent";
|
|
48
|
+
if (state.parentDepth + 1 > state.maxDepth)
|
|
49
|
+
return "depth cap reached";
|
|
50
|
+
if (state.activeRequests >= state.maxChildren)
|
|
51
|
+
return "children budget exhausted";
|
|
52
|
+
return "rejected";
|
|
53
|
+
}
|
|
54
|
+
export function dispatchCoordinatorEvent(state, event) {
|
|
55
|
+
if (isCoordinatorFinal(state.status)) {
|
|
56
|
+
return { ok: false, error: `Coordinator is in terminal status "${state.status}"; no transitions are permitted.` };
|
|
57
|
+
}
|
|
58
|
+
const machine = createDelegationCoordinatorMachine(state.status);
|
|
59
|
+
const actor = createActor(machine, {
|
|
60
|
+
input: {
|
|
61
|
+
parentAgentId: state.parentAgentId,
|
|
62
|
+
parentDepth: state.parentDepth,
|
|
63
|
+
parentEnabled: state.parentEnabled,
|
|
64
|
+
maxChildren: state.maxChildren,
|
|
65
|
+
maxDepth: state.maxDepth,
|
|
66
|
+
activeRequests: state.activeRequests,
|
|
67
|
+
lastTransitionTime: state.lastTransitionTime,
|
|
68
|
+
errorMessage: state.errorMessage,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
actor.start();
|
|
72
|
+
if (!actor.getSnapshot().can(event)) {
|
|
73
|
+
return { ok: false, error: `Event "${event.type}" is not permitted from coordinator status "${state.status}".` };
|
|
74
|
+
}
|
|
75
|
+
const before = state.activeRequests;
|
|
76
|
+
actor.send(event);
|
|
77
|
+
const snapshot = actor.getSnapshot();
|
|
78
|
+
const status = snapshot.value;
|
|
79
|
+
const ctx = snapshot.context;
|
|
80
|
+
state.status = status;
|
|
81
|
+
state.activeRequests = ctx.activeRequests;
|
|
82
|
+
state.lastTransitionTime = ctx.lastTransitionTime;
|
|
83
|
+
state.errorMessage = ctx.errorMessage;
|
|
84
|
+
let ack;
|
|
85
|
+
if (event.type === "REQUEST_ARRIVED") {
|
|
86
|
+
const accepted = ctx.activeRequests > before;
|
|
87
|
+
ack = accepted
|
|
88
|
+
? { requestId: event.requestId, accepted: true }
|
|
89
|
+
: { requestId: event.requestId, accepted: false, reason: coordinatorReason(state) };
|
|
90
|
+
}
|
|
91
|
+
return { ok: true, status, ack };
|
|
92
|
+
}
|
|
93
|
+
export function dispatchDelegationEvent(state, event) {
|
|
94
|
+
if (isDelegationRequestFinal(state.status)) {
|
|
95
|
+
return { ok: false, error: `Request is in terminal status "${state.status}"; no transitions are permitted.` };
|
|
96
|
+
}
|
|
97
|
+
const machine = createDelegationRequestMachine(state.status);
|
|
98
|
+
const actor = createActor(machine, {
|
|
99
|
+
input: {
|
|
100
|
+
requestId: state.requestId,
|
|
101
|
+
parentAgentId: state.parentAgentId,
|
|
102
|
+
facet: state.facet,
|
|
103
|
+
archetype: state.archetype,
|
|
104
|
+
childAgentId: state.childAgentId,
|
|
105
|
+
mergedAgentOutputHash: state.mergedAgentOutputHash,
|
|
106
|
+
errorMessage: state.errorMessage,
|
|
107
|
+
gateReasons: state.gateReasons,
|
|
108
|
+
lastTransitionTime: state.lastTransitionTime,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
actor.start();
|
|
112
|
+
if (!actor.getSnapshot().can(event)) {
|
|
113
|
+
return { ok: false, error: `Event "${event.type}" is not permitted from request status "${state.status}".` };
|
|
114
|
+
}
|
|
115
|
+
actor.send(event);
|
|
116
|
+
const snapshot = actor.getSnapshot();
|
|
117
|
+
const status = snapshot.value;
|
|
118
|
+
const ctx = snapshot.context;
|
|
119
|
+
state.status = status;
|
|
120
|
+
state.childAgentId = ctx.childAgentId;
|
|
121
|
+
state.mergedAgentOutputHash = ctx.mergedAgentOutputHash;
|
|
122
|
+
state.errorMessage = ctx.errorMessage;
|
|
123
|
+
state.gateReasons = ctx.gateReasons;
|
|
124
|
+
state.lastTransitionTime = ctx.lastTransitionTime;
|
|
125
|
+
return { ok: true, status };
|
|
126
|
+
}
|
|
127
|
+
// ── Convenience: is this archetype registered? ───────────────
|
|
128
|
+
export function registeredArchetypes(config) {
|
|
129
|
+
const set = new Set();
|
|
130
|
+
for (const key of Object.keys(config.delegationProfile ?? {}))
|
|
131
|
+
set.add(key);
|
|
132
|
+
return set;
|
|
133
|
+
}
|
|
134
|
+
export function profileFor(config, archetype) {
|
|
135
|
+
return config.delegationProfile?.[archetype];
|
|
136
|
+
}
|
|
137
|
+
// ── Proposal ↔ coordinator registry (INV-8) ──────────────────
|
|
138
|
+
//
|
|
139
|
+
// The deliberation orchestrator owns DelegationCoordinator states. For the
|
|
140
|
+
// `delegation-closed` control gate to enforce INV-8 (no APPROVE while a
|
|
141
|
+
// delegation is in flight), the orchestrator registers the live coordinators
|
|
142
|
+
// for a proposal; the gate reads this registry. Cleared when a proposal leaves
|
|
143
|
+
// the deliberation phase.
|
|
144
|
+
const proposalCoordinators = new Map();
|
|
145
|
+
export function registerProposalCoordinators(proposalId, states) {
|
|
146
|
+
proposalCoordinators.set(proposalId, states);
|
|
147
|
+
}
|
|
148
|
+
export function clearProposalCoordinators(proposalId) {
|
|
149
|
+
proposalCoordinators.delete(proposalId);
|
|
150
|
+
}
|
|
151
|
+
export function allCoordinatorsClosed(proposalId) {
|
|
152
|
+
const states = proposalCoordinators.get(proposalId);
|
|
153
|
+
if (!states || states.length === 0)
|
|
154
|
+
return true;
|
|
155
|
+
return states.every((s) => s.status === "closed" || s.status === "blocked_signal");
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=delegation.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegation.utils.js","sourceRoot":"","sources":["../../src/governance/delegation.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/governance/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/governance/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|