@guyghost/swarm-dao-core 0.16.2 → 1.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/dist/adapters/persistence/file-dao-state.repository.d.ts +35 -0
- package/dist/adapters/persistence/file-dao-state.repository.d.ts.map +1 -1
- package/dist/adapters/persistence/file-dao-state.repository.js +316 -30
- package/dist/adapters/persistence/file-dao-state.repository.js.map +1 -1
- package/dist/adapters/ship-audit/fs-ship-audit.store.d.ts.map +1 -1
- package/dist/adapters/ship-audit/fs-ship-audit.store.js +57 -2
- package/dist/adapters/ship-audit/fs-ship-audit.store.js.map +1 -1
- package/dist/application/proposals/control-proposal.use-case.d.ts +2 -1
- package/dist/application/proposals/control-proposal.use-case.d.ts.map +1 -1
- package/dist/application/proposals/control-proposal.use-case.js +16 -3
- package/dist/application/proposals/control-proposal.use-case.js.map +1 -1
- package/dist/application/proposals/create-proposal.use-case.d.ts.map +1 -1
- package/dist/application/proposals/create-proposal.use-case.js +22 -0
- package/dist/application/proposals/create-proposal.use-case.js.map +1 -1
- package/dist/application/proposals/deliberate-proposal.use-case.d.ts +4 -0
- package/dist/application/proposals/deliberate-proposal.use-case.d.ts.map +1 -1
- package/dist/application/proposals/deliberate-proposal.use-case.js +33 -13
- package/dist/application/proposals/deliberate-proposal.use-case.js.map +1 -1
- package/dist/application/proposals/record-deliberation-outputs.use-case.d.ts.map +1 -1
- package/dist/application/proposals/record-deliberation-outputs.use-case.js +16 -2
- package/dist/application/proposals/record-deliberation-outputs.use-case.js.map +1 -1
- package/dist/application/proposals/reject-proposal.use-case.d.ts +3 -3
- package/dist/application/proposals/reject-proposal.use-case.d.ts.map +1 -1
- package/dist/application/proposals/reject-proposal.use-case.js +6 -4
- package/dist/application/proposals/reject-proposal.use-case.js.map +1 -1
- package/dist/application/proposals/ship-proposal.use-case.d.ts +1 -0
- package/dist/application/proposals/ship-proposal.use-case.d.ts.map +1 -1
- package/dist/application/proposals/ship-proposal.use-case.js +31 -4
- package/dist/application/proposals/ship-proposal.use-case.js.map +1 -1
- package/dist/commands/registry.js +3 -3
- package/dist/commands/registry.js.map +1 -1
- package/dist/config.d.ts +9 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +184 -6
- package/dist/config.js.map +1 -1
- package/dist/control/gates.d.ts +10 -1
- package/dist/control/gates.d.ts.map +1 -1
- package/dist/control/gates.js +105 -43
- package/dist/control/gates.js.map +1 -1
- package/dist/delivery/execution-isolation.d.ts +3 -0
- package/dist/delivery/execution-isolation.d.ts.map +1 -1
- package/dist/delivery/execution-isolation.js +5 -0
- package/dist/delivery/execution-isolation.js.map +1 -1
- package/dist/governance/agents.d.ts.map +1 -1
- package/dist/governance/agents.js +5 -1
- package/dist/governance/agents.js.map +1 -1
- package/dist/governance/delegation.utils.d.ts +16 -0
- package/dist/governance/delegation.utils.d.ts.map +1 -1
- package/dist/governance/delegation.utils.js +68 -0
- package/dist/governance/delegation.utils.js.map +1 -1
- package/dist/governance/proposal.utils.d.ts +11 -1
- package/dist/governance/proposal.utils.d.ts.map +1 -1
- package/dist/governance/proposal.utils.js +40 -7
- package/dist/governance/proposal.utils.js.map +1 -1
- package/dist/governance/voting.d.ts +10 -2
- package/dist/governance/voting.d.ts.map +1 -1
- package/dist/governance/voting.js +41 -9
- package/dist/governance/voting.js.map +1 -1
- package/dist/host-tools/github-config.d.ts.map +1 -1
- package/dist/host-tools/github-config.js +14 -2
- package/dist/host-tools/github-config.js.map +1 -1
- package/dist/host-tools/handlers.d.ts +3 -0
- package/dist/host-tools/handlers.d.ts.map +1 -1
- package/dist/host-tools/handlers.js +91 -28
- package/dist/host-tools/handlers.js.map +1 -1
- package/dist/integrations/github.d.ts +1 -0
- package/dist/integrations/github.d.ts.map +1 -1
- package/dist/integrations/github.js +41 -0
- package/dist/integrations/github.js.map +1 -1
- 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/roundtable.d.ts.map +1 -1
- package/dist/intelligence/roundtable.js +10 -0
- package/dist/intelligence/roundtable.js.map +1 -1
- package/dist/intelligence/runtime.d.ts +61 -0
- package/dist/intelligence/runtime.d.ts.map +1 -0
- package/dist/intelligence/runtime.js +135 -0
- package/dist/intelligence/runtime.js.map +1 -0
- package/dist/intelligence/sequential.d.ts +3 -0
- package/dist/intelligence/sequential.d.ts.map +1 -1
- package/dist/intelligence/sequential.js +30 -0
- package/dist/intelligence/sequential.js.map +1 -1
- package/dist/intelligence/swarm.d.ts +11 -1
- package/dist/intelligence/swarm.d.ts.map +1 -1
- package/dist/intelligence/swarm.js +62 -3
- package/dist/intelligence/swarm.js.map +1 -1
- package/dist/models/improvement-loop.machine.d.ts +7 -1
- package/dist/models/improvement-loop.machine.d.ts.map +1 -1
- package/dist/models/improvement-loop.machine.js +9 -1
- package/dist/models/improvement-loop.machine.js.map +1 -1
- package/dist/models/proposal.machine.d.ts +11 -0
- package/dist/models/proposal.machine.d.ts.map +1 -1
- package/dist/models/proposal.machine.js +14 -3
- package/dist/models/proposal.machine.js.map +1 -1
- package/dist/persistence.d.ts +23 -1
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +77 -38
- package/dist/persistence.js.map +1 -1
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/host.d.ts +8 -1
- package/dist/utils/host.d.ts.map +1 -1
- package/dist/utils/host.js +25 -3
- package/dist/utils/host.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { DAOAgent } from "../types/index.js";
|
|
2
|
+
export declare function isValidHarnessId(id: string): boolean;
|
|
3
|
+
export declare function isValidModelId(id: string): boolean;
|
|
4
|
+
export declare function isValidModelFlag(flag: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* D3 frozen flag table: harness → the CLI flag that carries its model.
|
|
7
|
+
* Unknown harness + explicit model + no config override ⇒ E4 (never silent).
|
|
8
|
+
*/
|
|
9
|
+
export declare const HARNESS_MODEL_FLAGS: Readonly<Record<string, string>>;
|
|
10
|
+
/** Project-level runtime configuration (`.dao/config.json` → `runtime`). */
|
|
11
|
+
export interface RuntimeConfig {
|
|
12
|
+
defaultHarness?: string;
|
|
13
|
+
harnessModelFlag?: Record<string, string>;
|
|
14
|
+
}
|
|
15
|
+
export interface RuntimeResolutionContext {
|
|
16
|
+
projectRuntime?: RuntimeConfig;
|
|
17
|
+
hostDefaultHarness?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ResolvedHarness {
|
|
20
|
+
harness: string;
|
|
21
|
+
source: "agent" | "project" | "host";
|
|
22
|
+
}
|
|
23
|
+
export interface ResolvedAgentRuntime {
|
|
24
|
+
harness: string;
|
|
25
|
+
harnessSource: "agent" | "project" | "host";
|
|
26
|
+
model: string;
|
|
27
|
+
modelFlag?: string;
|
|
28
|
+
}
|
|
29
|
+
export type AgentRuntimeResolution = {
|
|
30
|
+
ok: true;
|
|
31
|
+
runtime: ResolvedAgentRuntime;
|
|
32
|
+
} | {
|
|
33
|
+
ok: false;
|
|
34
|
+
code: "E_INVALID_HARNESS" | "E_NO_HARNESS" | "E_INVALID_MODEL" | "E_MODEL_FLAG_UNKNOWN" | "E_INVALID_FLAG_OVERRIDE";
|
|
35
|
+
message: string;
|
|
36
|
+
};
|
|
37
|
+
export declare function buildRuntimeResolutionContext(options?: {
|
|
38
|
+
projectRuntime?: RuntimeConfig;
|
|
39
|
+
hostDefaultHarness?: string;
|
|
40
|
+
}): RuntimeResolutionContext;
|
|
41
|
+
/** §6 — deterministic host default (pi is its own harness; herdr defers to its kind; tmux has none). */
|
|
42
|
+
export declare function hostDefaultHarnessFor(hostId: string, herdrKind?: string): string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* D1 harness precedence:
|
|
45
|
+
*
|
|
46
|
+
* agent.harness
|
|
47
|
+
* → runtime.defaultHarness (project config — overrides legacy herdr kind)
|
|
48
|
+
* → hostDefaultHarness
|
|
49
|
+
*
|
|
50
|
+
* Returns undefined when the chain is exhausted (⇒ E2 at full resolution).
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveAgentHarness(agent: DAOAgent, ctx: RuntimeResolutionContext): ResolvedHarness | undefined;
|
|
53
|
+
export declare function describeHarnessResolution(resolved: ResolvedHarness): string;
|
|
54
|
+
/**
|
|
55
|
+
* Full runtime resolution (D1 + D2 + D3). `resolvedModel` comes from the
|
|
56
|
+
* existing model chain (resolveAgentModel) — "default" means host default and
|
|
57
|
+
* disables flag emission. Pure and total: never throws (I1), never mutates
|
|
58
|
+
* anything (I3), same inputs → same outputs (I4).
|
|
59
|
+
*/
|
|
60
|
+
export declare function resolveAgentRuntime(agent: DAOAgent, resolvedModel: string, ctx: RuntimeResolutionContext): AgentRuntimeResolution;
|
|
61
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/intelligence/runtime.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AASlD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/D,CAAC;AAEH,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,oBAAoB,CAAA;CAAE,GAC3C;IACE,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EACA,mBAAmB,GACnB,cAAc,GACd,iBAAiB,GACjB,sBAAsB,GACtB,yBAAyB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,wBAAgB,6BAA6B,CAAC,OAAO,CAAC,EAAE;IACtD,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,wBAAwB,CAK3B;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,wBAAwB,GAAG,eAAe,GAAG,SAAS,CAM/G;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAS3E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EACf,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,wBAAwB,GAC5B,sBAAsB,CAqDxB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Swarm DAO Core — Agent Runtime Resolution
|
|
3
|
+
// ============================================================
|
|
4
|
+
// Implements models/agent-runtime.md (approved at manifest hash
|
|
5
|
+
// 183507f568904059cba2084c5514d90568fa746c409feb2f6aa78784327274fa).
|
|
6
|
+
// Pure, total, deterministic: configuration in, (runtime | typed failure) out.
|
|
7
|
+
// The LLM never selects a runtime (invariant I2) — inputs are config only.
|
|
8
|
+
/** §4.1 — herdr-safe harness identifier. */
|
|
9
|
+
const SAFE_HARNESS_ID = /^[a-z][a-z0-9_-]{0,31}$/;
|
|
10
|
+
/** §4.2 — single argv token, provider-style model identifier. */
|
|
11
|
+
const SAFE_MODEL_ID = /^[A-Za-z0-9][A-Za-z0-9._/:+-]{0,127}$/;
|
|
12
|
+
/** D3 — model flag override syntax. */
|
|
13
|
+
const SAFE_MODEL_FLAG = /^--[a-z][a-z0-9-]*$/;
|
|
14
|
+
export function isValidHarnessId(id) {
|
|
15
|
+
return SAFE_HARNESS_ID.test(id);
|
|
16
|
+
}
|
|
17
|
+
export function isValidModelId(id) {
|
|
18
|
+
return SAFE_MODEL_ID.test(id);
|
|
19
|
+
}
|
|
20
|
+
export function isValidModelFlag(flag) {
|
|
21
|
+
return SAFE_MODEL_FLAG.test(flag);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* D3 frozen flag table: harness → the CLI flag that carries its model.
|
|
25
|
+
* Unknown harness + explicit model + no config override ⇒ E4 (never silent).
|
|
26
|
+
*/
|
|
27
|
+
export const HARNESS_MODEL_FLAGS = Object.freeze({
|
|
28
|
+
pi: "--model",
|
|
29
|
+
claude: "--model",
|
|
30
|
+
codex: "--model",
|
|
31
|
+
copilot: "--model",
|
|
32
|
+
opencode: "--model",
|
|
33
|
+
});
|
|
34
|
+
export function buildRuntimeResolutionContext(options) {
|
|
35
|
+
return {
|
|
36
|
+
projectRuntime: options?.projectRuntime,
|
|
37
|
+
hostDefaultHarness: options?.hostDefaultHarness,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** §6 — deterministic host default (pi is its own harness; herdr defers to its kind; tmux has none). */
|
|
41
|
+
export function hostDefaultHarnessFor(hostId, herdrKind) {
|
|
42
|
+
if (hostId === "herdr")
|
|
43
|
+
return herdrKind;
|
|
44
|
+
if (hostId === "tmux")
|
|
45
|
+
return undefined;
|
|
46
|
+
return hostId;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* D1 harness precedence:
|
|
50
|
+
*
|
|
51
|
+
* agent.harness
|
|
52
|
+
* → runtime.defaultHarness (project config — overrides legacy herdr kind)
|
|
53
|
+
* → hostDefaultHarness
|
|
54
|
+
*
|
|
55
|
+
* Returns undefined when the chain is exhausted (⇒ E2 at full resolution).
|
|
56
|
+
*/
|
|
57
|
+
export function resolveAgentHarness(agent, ctx) {
|
|
58
|
+
if (agent.harness)
|
|
59
|
+
return { harness: agent.harness, source: "agent" };
|
|
60
|
+
const projectDefault = ctx.projectRuntime?.defaultHarness;
|
|
61
|
+
if (projectDefault)
|
|
62
|
+
return { harness: projectDefault, source: "project" };
|
|
63
|
+
if (ctx.hostDefaultHarness)
|
|
64
|
+
return { harness: ctx.hostDefaultHarness, source: "host" };
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
export function describeHarnessResolution(resolved) {
|
|
68
|
+
switch (resolved.source) {
|
|
69
|
+
case "agent":
|
|
70
|
+
return `${resolved.harness} (agent override)`;
|
|
71
|
+
case "project":
|
|
72
|
+
return `${resolved.harness} (project default)`;
|
|
73
|
+
case "host":
|
|
74
|
+
return `${resolved.harness} (host default)`;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Full runtime resolution (D1 + D2 + D3). `resolvedModel` comes from the
|
|
79
|
+
* existing model chain (resolveAgentModel) — "default" means host default and
|
|
80
|
+
* disables flag emission. Pure and total: never throws (I1), never mutates
|
|
81
|
+
* anything (I3), same inputs → same outputs (I4).
|
|
82
|
+
*/
|
|
83
|
+
export function resolveAgentRuntime(agent, resolvedModel, ctx) {
|
|
84
|
+
const harness = resolveAgentHarness(agent, ctx);
|
|
85
|
+
if (agent.harness && !isValidHarnessId(agent.harness)) {
|
|
86
|
+
return {
|
|
87
|
+
ok: false,
|
|
88
|
+
code: "E_INVALID_HARNESS",
|
|
89
|
+
message: `Agent "${agent.id}": invalid harness "${agent.harness}" (must match ^[a-z][a-z0-9_-]{0,31}$; fix agent.harness or runtime.defaultHarness)`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (!harness) {
|
|
93
|
+
return {
|
|
94
|
+
ok: false,
|
|
95
|
+
code: "E_NO_HARNESS",
|
|
96
|
+
message: `Agent "${agent.id}": no harness resolvable — set runtime.defaultHarness or agent.harness`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (resolvedModel !== "default" && !isValidModelId(resolvedModel)) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
code: "E_INVALID_MODEL",
|
|
103
|
+
message: `Agent "${agent.id}": invalid model "${resolvedModel}" (must be a single token matching ^[A-Za-z0-9][A-Za-z0-9._/:+-]{0,127}$)`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
let modelFlag;
|
|
107
|
+
if (resolvedModel !== "default") {
|
|
108
|
+
const override = ctx.projectRuntime?.harnessModelFlag?.[harness.harness];
|
|
109
|
+
if (override !== undefined && !isValidModelFlag(override)) {
|
|
110
|
+
return {
|
|
111
|
+
ok: false,
|
|
112
|
+
code: "E_INVALID_FLAG_OVERRIDE",
|
|
113
|
+
message: `Agent "${agent.id}": runtime.harnessModelFlag.${harness.harness} = "${override}" violates flag syntax (use --flag-name)`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
modelFlag = override ?? HARNESS_MODEL_FLAGS[harness.harness];
|
|
117
|
+
if (!modelFlag) {
|
|
118
|
+
return {
|
|
119
|
+
ok: false,
|
|
120
|
+
code: "E_MODEL_FLAG_UNKNOWN",
|
|
121
|
+
message: `Agent "${agent.id}": model "${resolvedModel}" requested for harness "${harness.harness}" with unknown model flag — set runtime.harnessModelFlag.${harness.harness} or drop the per-agent model`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
ok: true,
|
|
127
|
+
runtime: {
|
|
128
|
+
harness: harness.harness,
|
|
129
|
+
harnessSource: harness.source,
|
|
130
|
+
model: resolvedModel,
|
|
131
|
+
modelFlag,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/intelligence/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AgentWorkerPort } from "../ports/host.js";
|
|
2
2
|
import type { AgentOutput, DAOAgent, Proposal } from "../types/index.js";
|
|
3
3
|
import type { ModelResolutionContext } from "./model.js";
|
|
4
|
+
import { type RuntimeResolutionContext } from "./runtime.js";
|
|
4
5
|
/**
|
|
5
6
|
* Content up to the first vote section: the analysis an agent produced,
|
|
6
7
|
* stripped of its vote and reasoning so later voters stay independent.
|
|
@@ -26,6 +27,8 @@ export interface SequentialDispatchOptions extends PriorAnalysesOptions {
|
|
|
26
27
|
}) => void;
|
|
27
28
|
/** Shared project brief injected into every participant's prompt. */
|
|
28
29
|
projectBrief?: string;
|
|
30
|
+
/** Runtime resolution context (models/agent-runtime.md). */
|
|
31
|
+
runtime?: RuntimeResolutionContext;
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
31
34
|
* Dispatch deliberation as a sequential pipeline: agents run in the given
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequential.d.ts","sourceRoot":"","sources":["../../src/intelligence/sequential.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"sequential.d.ts","sourceRoot":"","sources":["../../src/intelligence/sequential.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,KAAK,wBAAwB,EAAuB,MAAM,cAAc,CAAC;AAGlF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAWR;AAED,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9G,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACpC;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,OAAO,EAAE,eAAe,EACxB,YAAY,EAAE,sBAAsB,EACpC,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,WAAW,EAAE,CAAC,CA0ExB"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
// Boundary (unchanged): this is orchestration only. No proposal states, no
|
|
11
11
|
// transitions, no new AI authority — agents still emit text that is parsed
|
|
12
12
|
// into votes exactly as in the parallel strategy.
|
|
13
|
+
import { resolveAgentRuntime } from "./runtime.js";
|
|
13
14
|
import { buildDispatchInstructions } from "./swarm.js";
|
|
14
15
|
/**
|
|
15
16
|
* Content up to the first vote section: the analysis an agent produced,
|
|
@@ -51,6 +52,7 @@ export function buildPriorAnalysesSection(priorOutputs, options = {}) {
|
|
|
51
52
|
export async function dispatchSequentialSwarm(proposal, agents, adapter, modelContext, options = {}) {
|
|
52
53
|
const instructions = buildDispatchInstructions(proposal, [...agents], modelContext, {
|
|
53
54
|
projectBrief: options.projectBrief,
|
|
55
|
+
runtime: options.runtime,
|
|
54
56
|
});
|
|
55
57
|
const agentById = new Map(agents.map((agent) => [agent.id, agent]));
|
|
56
58
|
const outputs = [];
|
|
@@ -62,12 +64,40 @@ export async function dispatchSequentialSwarm(proposal, agents, adapter, modelCo
|
|
|
62
64
|
const priorSection = buildPriorAnalysesSection(outputs, options);
|
|
63
65
|
const prompt = priorSection ? `${instruction.prompt}\n\n${priorSection}` : instruction.prompt;
|
|
64
66
|
let output;
|
|
67
|
+
// Runtime resolution (models/agent-runtime.md): typed failure ⇒ error
|
|
68
|
+
// output for this agent only; the pipeline continues.
|
|
69
|
+
let harness;
|
|
70
|
+
if (options.runtime) {
|
|
71
|
+
const resolution = resolveAgentRuntime(agent, instruction.model, options.runtime);
|
|
72
|
+
if (!resolution.ok) {
|
|
73
|
+
output = {
|
|
74
|
+
agentId: instruction.agentId,
|
|
75
|
+
agentName: instruction.agentName,
|
|
76
|
+
role: agent.role,
|
|
77
|
+
content: "",
|
|
78
|
+
durationMs: 0,
|
|
79
|
+
error: resolution.message,
|
|
80
|
+
};
|
|
81
|
+
outputs.push(output);
|
|
82
|
+
options.onUpdate?.({
|
|
83
|
+
agentId: instruction.agentId,
|
|
84
|
+
agentName: instruction.agentName,
|
|
85
|
+
phase: "error",
|
|
86
|
+
});
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
harness = resolution.runtime.harness;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
harness = agent.harness;
|
|
93
|
+
}
|
|
65
94
|
try {
|
|
66
95
|
output = await adapter.spawnAgent({
|
|
67
96
|
agent,
|
|
68
97
|
proposal,
|
|
69
98
|
systemPrompt: prompt,
|
|
70
99
|
model: instruction.model,
|
|
100
|
+
harness,
|
|
71
101
|
timeoutMs: instruction.timeoutMs,
|
|
72
102
|
});
|
|
73
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequential.js","sourceRoot":"","sources":["../../src/intelligence/sequential.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,sDAAsD;AACtD,+DAA+D;AAC/D,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,gEAAgE;AAChE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,kDAAkD;AAKlD,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1E,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAOD,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,YAAoC,EACpC,UAAgC,EAAE;IAElC,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,IAAI,uBAAuB,CAAC;IAC/D,MAAM,OAAO,GAAG,YAAY;SACzB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SACpD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACpF,OAAO,QAAQ,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,SAAS,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;IAC/F,CAAC,CAAC,CAAC;IACL,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,+IAA+I,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/K,CAAC;
|
|
1
|
+
{"version":3,"file":"sequential.js","sourceRoot":"","sources":["../../src/intelligence/sequential.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AgentWorkerPort } from "../ports/host.js";
|
|
2
2
|
import type { AgentOutput, DAOAgent, DAOConfig, Proposal } from "../types/index.js";
|
|
3
3
|
import { type ModelResolutionContext } from "./model.js";
|
|
4
|
+
import { type RuntimeResolutionContext } from "./runtime.js";
|
|
4
5
|
export interface SwarmProgressUpdate {
|
|
5
6
|
agentId: string;
|
|
6
7
|
agentName: string;
|
|
@@ -14,6 +15,9 @@ export interface DispatchInstruction {
|
|
|
14
15
|
prompt: string;
|
|
15
16
|
model: string;
|
|
16
17
|
modelDescription: string;
|
|
18
|
+
harness?: string;
|
|
19
|
+
harnessDescription?: string;
|
|
20
|
+
harnessWarning?: string;
|
|
17
21
|
timeoutMs: number;
|
|
18
22
|
}
|
|
19
23
|
/**
|
|
@@ -22,6 +26,7 @@ export interface DispatchInstruction {
|
|
|
22
26
|
*/
|
|
23
27
|
export declare function buildDispatchInstructions(proposal: Proposal, agents: DAOAgent[], modelContext: ModelResolutionContext, options?: {
|
|
24
28
|
projectBrief?: string;
|
|
29
|
+
runtime?: RuntimeResolutionContext;
|
|
25
30
|
}): DispatchInstruction[];
|
|
26
31
|
export declare function formatDispatchPlan(proposal: Proposal, instructions: DispatchInstruction[], options?: {
|
|
27
32
|
strategy?: "parallel" | "sequential";
|
|
@@ -42,10 +47,15 @@ export declare function createDispatchModelContext(configDefaultModel: string, a
|
|
|
42
47
|
* coordinators are registered for the `delegation-closed` gate (INV-8) and
|
|
43
48
|
* drained on completion.
|
|
44
49
|
*/
|
|
45
|
-
export declare function dispatchSwarm(proposal: Proposal, agents: DAOAgent[], adapter: AgentWorkerPort, maxConcurrent: number, modelContext: ModelResolutionContext, onUpdate?: (update: SwarmProgressUpdate) => void,
|
|
50
|
+
export declare function dispatchSwarm(proposal: Proposal, agents: DAOAgent[], adapter: AgentWorkerPort, maxConcurrent: number, modelContext: ModelResolutionContext, onUpdate?: (update: SwarmProgressUpdate) => void,
|
|
51
|
+
/** `daoRoot` persists a cross-process in-flight marker so the
|
|
52
|
+
* delegation-closed gate can actually block while delegations run (#159). */
|
|
53
|
+
delegation?: {
|
|
46
54
|
config: DAOConfig;
|
|
55
|
+
daoRoot?: string;
|
|
47
56
|
}, options?: {
|
|
48
57
|
projectBrief?: string;
|
|
58
|
+
runtime?: RuntimeResolutionContext;
|
|
49
59
|
}): Promise<AgentOutput[]>;
|
|
50
60
|
/** Clear the coordinator registry for a proposal once deliberation is over. */
|
|
51
61
|
export declare function resetDelegationRegistry(proposalId: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../src/intelligence/swarm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../src/intelligence/swarm.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAGL,KAAK,sBAAsB,EAE5B,MAAM,YAAY,CAAC;AACpB,OAAO,EAA6B,KAAK,wBAAwB,EAAuB,MAAM,cAAc,CAAC;AAE7G,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACrD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,QAAQ,EAAE,EAClB,YAAY,EAAE,sBAAsB,EACpC,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,wBAAwB,CAAA;CAAO,GAC1E,mBAAmB,EAAE,CAiDvB;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,mBAAmB,EAAE,EACnC,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7E,MAAM,CA+BR;AAED,wBAAgB,0BAA0B,CACxC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GACnE,sBAAsB,CAKxB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,QAAQ,EAAE,EAClB,OAAO,EAAE,eAAe,EACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,sBAAsB,EACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI;AAChD;8EAC8E;AAC9E,UAAU,CAAC,EAAE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,wBAAwB,CAAA;CAAE,GACtE,OAAO,CAAC,WAAW,EAAE,CAAC,CAsIxB;AAED,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAEhE"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// ============================================================
|
|
2
2
|
// Swarm DAO Core — Swarm Dispatch
|
|
3
3
|
// ============================================================
|
|
4
|
-
import { clearProposalCoordinators, registerProposalCoordinators } from "../governance/delegation.utils.js";
|
|
4
|
+
import { clearDelegationInFlight, clearProposalCoordinators, markDelegationInFlight, registerProposalCoordinators, } from "../governance/delegation.utils.js";
|
|
5
5
|
import { drainDelegations, runDelegations } from "./delegation.js";
|
|
6
6
|
import { buildModelResolutionContext, describeModelResolution, resolveAgentModel, } from "./model.js";
|
|
7
|
+
import { describeHarnessResolution, resolveAgentRuntime } from "./runtime.js";
|
|
7
8
|
/**
|
|
8
9
|
* Build dispatch instructions for each agent.
|
|
9
10
|
* Host adapters use these to spawn sub-agents.
|
|
@@ -27,12 +28,31 @@ ${proposal.successMetrics?.length ? `**Success Metrics:**\n${proposal.successMet
|
|
|
27
28
|
${briefSection}Evaluate this proposal carefully. Provide your analysis, vote, and scoring.`;
|
|
28
29
|
return agents.map((agent) => {
|
|
29
30
|
const model = resolveAgentModel(agent, modelContext);
|
|
31
|
+
let harness;
|
|
32
|
+
let harnessDescription;
|
|
33
|
+
let harnessWarning;
|
|
34
|
+
if (options.runtime) {
|
|
35
|
+
const resolution = resolveAgentRuntime(agent, model, options.runtime);
|
|
36
|
+
if (resolution.ok) {
|
|
37
|
+
harness = resolution.runtime.harness;
|
|
38
|
+
harnessDescription = describeHarnessResolution({
|
|
39
|
+
harness: resolution.runtime.harness,
|
|
40
|
+
source: resolution.runtime.harnessSource,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
harnessWarning = `⚠️ ${resolution.message}`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
30
47
|
return {
|
|
31
48
|
agentId: agent.id,
|
|
32
49
|
agentName: agent.name,
|
|
33
50
|
prompt: `${agent.systemPrompt}\n\n${basePrompt}`,
|
|
34
51
|
model,
|
|
35
52
|
modelDescription: describeModelResolution(agent, model, modelContext),
|
|
53
|
+
harness,
|
|
54
|
+
harnessDescription,
|
|
55
|
+
harnessWarning,
|
|
36
56
|
timeoutMs: 120_000,
|
|
37
57
|
};
|
|
38
58
|
});
|
|
@@ -54,7 +74,7 @@ ${sequentialNote}## Instructions
|
|
|
54
74
|
${instructions
|
|
55
75
|
.map((inst) => `### @${inst.agentId} (${inst.agentName})
|
|
56
76
|
- Model: ${inst.modelDescription}
|
|
57
|
-
- Timeout: ${inst.timeoutMs}ms
|
|
77
|
+
${inst.harness ? `- Harness: ${inst.harnessDescription ?? inst.harness}\n` : ""}${inst.harnessWarning ? `${inst.harnessWarning}\n` : ""}- Timeout: ${inst.timeoutMs}ms
|
|
58
78
|
|
|
59
79
|
Spawn this sub-agent with the following task (use \`task\` with \`model="${inst.model}"\` when available):
|
|
60
80
|
\`\`\`
|
|
@@ -83,7 +103,10 @@ export function createDispatchModelContext(configDefaultModel, adapter, options)
|
|
|
83
103
|
* coordinators are registered for the `delegation-closed` gate (INV-8) and
|
|
84
104
|
* drained on completion.
|
|
85
105
|
*/
|
|
86
|
-
export async function dispatchSwarm(proposal, agents, adapter, maxConcurrent, modelContext, onUpdate,
|
|
106
|
+
export async function dispatchSwarm(proposal, agents, adapter, maxConcurrent, modelContext, onUpdate,
|
|
107
|
+
/** `daoRoot` persists a cross-process in-flight marker so the
|
|
108
|
+
* delegation-closed gate can actually block while delegations run (#159). */
|
|
109
|
+
delegation, options) {
|
|
87
110
|
const instructions = buildDispatchInstructions(proposal, agents, modelContext, options);
|
|
88
111
|
const outputs = [];
|
|
89
112
|
const agentById = new Map(agents.map((a) => [a.id, a]));
|
|
@@ -94,6 +117,9 @@ export async function dispatchSwarm(proposal, agents, adapter, maxConcurrent, mo
|
|
|
94
117
|
// gate can observe in-flight coordinators as they are pushed during dispatch.
|
|
95
118
|
if (delegationEnabled) {
|
|
96
119
|
registerProposalCoordinators(proposal.id, allCoordinators);
|
|
120
|
+
if (delegation?.daoRoot) {
|
|
121
|
+
await markDelegationInFlight(delegation.daoRoot, proposal.id);
|
|
122
|
+
}
|
|
97
123
|
}
|
|
98
124
|
try {
|
|
99
125
|
// Process in batches based on maxConcurrent
|
|
@@ -109,11 +135,41 @@ export async function dispatchSwarm(proposal, agents, adapter, maxConcurrent, mo
|
|
|
109
135
|
agentName: inst.agentName,
|
|
110
136
|
phase: "started",
|
|
111
137
|
});
|
|
138
|
+
// Runtime resolution (models/agent-runtime.md): a typed failure
|
|
139
|
+
// produces a per-agent error output — never a throw across the
|
|
140
|
+
// dispatch loop, never a silent model drop.
|
|
141
|
+
let harness;
|
|
142
|
+
if (options?.runtime) {
|
|
143
|
+
const resolution = resolveAgentRuntime(agent, inst.model, options.runtime);
|
|
144
|
+
if (!resolution.ok) {
|
|
145
|
+
const errorOutput = {
|
|
146
|
+
agentId: inst.agentId,
|
|
147
|
+
agentName: inst.agentName,
|
|
148
|
+
role: agent.role,
|
|
149
|
+
content: "",
|
|
150
|
+
durationMs: 0,
|
|
151
|
+
error: resolution.message,
|
|
152
|
+
};
|
|
153
|
+
outputs.push(errorOutput);
|
|
154
|
+
onUpdate?.({
|
|
155
|
+
agentId: inst.agentId,
|
|
156
|
+
agentName: inst.agentName,
|
|
157
|
+
phase: "error",
|
|
158
|
+
output: errorOutput,
|
|
159
|
+
});
|
|
160
|
+
return errorOutput;
|
|
161
|
+
}
|
|
162
|
+
harness = resolution.runtime.harness;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
harness = agent.harness;
|
|
166
|
+
}
|
|
112
167
|
const output = await adapter.spawnAgent({
|
|
113
168
|
agent,
|
|
114
169
|
proposal,
|
|
115
170
|
systemPrompt: inst.prompt,
|
|
116
171
|
model: inst.model,
|
|
172
|
+
harness,
|
|
117
173
|
timeoutMs: inst.timeoutMs,
|
|
118
174
|
});
|
|
119
175
|
// DFI hook: fold declared delegations into the parent reasoning.
|
|
@@ -169,6 +225,9 @@ export async function dispatchSwarm(proposal, agents, adapter, maxConcurrent, mo
|
|
|
169
225
|
if (delegationEnabled) {
|
|
170
226
|
drainDelegations(allCoordinators, allRequests);
|
|
171
227
|
clearProposalCoordinators(proposal.id);
|
|
228
|
+
if (delegation?.daoRoot) {
|
|
229
|
+
await clearDelegationInFlight(delegation.daoRoot, proposal.id);
|
|
230
|
+
}
|
|
172
231
|
}
|
|
173
232
|
}
|
|
174
233
|
return outputs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/intelligence/swarm.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,kCAAkC;AAClC,+DAA+D;AAE/D,OAAO,
|
|
1
|
+
{"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/intelligence/swarm.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ export declare const IMPROVEMENT_MAX_RETRIES = 2;
|
|
|
4
4
|
export declare const IMPROVEMENT_TERMINAL_STATES: readonly ["succeeded", "failed", "blocked", "cancelled"];
|
|
5
5
|
export type ImprovementAnchorName = (typeof REQUIRED_IMPROVEMENT_ANCHORS)[number];
|
|
6
6
|
export type ImprovementSignalSource = "ai" | "tool" | "human" | "system";
|
|
7
|
-
export type AnchorStatus = "passed" | "failed";
|
|
7
|
+
export type AnchorStatus = "passed" | "failed" | "blocked";
|
|
8
8
|
export type DriftClass = "none" | "partial" | "detached";
|
|
9
9
|
export type Sample = Readonly<{
|
|
10
10
|
value: string;
|
|
@@ -170,6 +170,9 @@ export declare const improvementMachine: import("xstate").StateMachine<Improveme
|
|
|
170
170
|
} | {
|
|
171
171
|
type: "applyReferenceApproval";
|
|
172
172
|
params: import("xstate").NonReducibleUnknown;
|
|
173
|
+
} | {
|
|
174
|
+
type: "recordBlockedReason";
|
|
175
|
+
params: import("xstate").NonReducibleUnknown;
|
|
173
176
|
} | {
|
|
174
177
|
type: "recordDetachedAdjustment";
|
|
175
178
|
params: import("xstate").NonReducibleUnknown;
|
|
@@ -203,6 +206,9 @@ export declare const improvementMachine: import("xstate").StateMachine<Improveme
|
|
|
203
206
|
} | {
|
|
204
207
|
type: "isToolArbitration";
|
|
205
208
|
params: unknown;
|
|
209
|
+
} | {
|
|
210
|
+
type: "hasBlockedAnchor";
|
|
211
|
+
params: unknown;
|
|
206
212
|
} | {
|
|
207
213
|
type: "isSystemEvaluate";
|
|
208
214
|
params: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"improvement-loop.machine.d.ts","sourceRoot":"","sources":["../../src/models/improvement-loop.machine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,QAAQ,CAAC;AAEvE,eAAO,MAAM,4BAA4B,8HAO/B,CAAC;AAEX,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,2BAA2B,0DAA2D,CAAC;AAEpG,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAClF,MAAM,MAAM,uBAAuB,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"improvement-loop.machine.d.ts","sourceRoot":"","sources":["../../src/models/improvement-loop.machine.ts"],"names":[],"mappings":"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"}
|
|
@@ -75,8 +75,9 @@ const improvementSetup = setup({
|
|
|
75
75
|
isValidAnchor: ({ event }) => event.type === "ANCHOR_RECORDED" &&
|
|
76
76
|
event.source === "tool" &&
|
|
77
77
|
isRequiredImprovementAnchor(event.anchor) &&
|
|
78
|
-
(event.status === "passed" || event.status === "failed") &&
|
|
78
|
+
(event.status === "passed" || event.status === "failed" || event.status === "blocked") &&
|
|
79
79
|
isNonEmpty(event.evidence),
|
|
80
|
+
hasBlockedAnchor: ({ context }) => REQUIRED_IMPROVEMENT_ANCHORS.some((anchor) => context.anchors[anchor]?.status === "blocked"),
|
|
80
81
|
isSystemEvaluate: ({ event }) => event.type === "EVALUATE" && event.source === "system",
|
|
81
82
|
isDetached: ({ context }) => context.driftClass === "detached",
|
|
82
83
|
allAnchorsPassed: ({ context }) => REQUIRED_IMPROVEMENT_ANCHORS.every((anchor) => {
|
|
@@ -176,6 +177,10 @@ const improvementSetup = setup({
|
|
|
176
177
|
...context,
|
|
177
178
|
terminalReason: "reason" in event && isNonEmpty(event.reason) ? event.reason : "improvement cycle failed",
|
|
178
179
|
})),
|
|
180
|
+
recordBlockedReason: assign(({ context }) => ({
|
|
181
|
+
...context,
|
|
182
|
+
terminalReason: `blocked anchors (environment could not be measured): ${REQUIRED_IMPROVEMENT_ANCHORS.filter((anchor) => context.anchors[anchor]?.status === "blocked").join(", ")}`,
|
|
183
|
+
})),
|
|
179
184
|
recordVerificationFailure: assign(({ context }) => ({
|
|
180
185
|
...context,
|
|
181
186
|
terminalReason: "required ground-contact anchors did not all pass",
|
|
@@ -228,6 +233,9 @@ export const improvementMachine = improvementSetup.createMachine({
|
|
|
228
233
|
},
|
|
229
234
|
evaluating: {
|
|
230
235
|
always: [
|
|
236
|
+
// Issue #145: an unmeasurable environment invalidates the whole verdict —
|
|
237
|
+
// blocked precedes every other outcome and only a human restart recovers.
|
|
238
|
+
{ guard: "hasBlockedAnchor", target: "#swarm-dao-improvement-loop.blocked", actions: "recordBlockedReason" },
|
|
231
239
|
{ guard: "isDetached", target: "adjusting", actions: "recordDetachedAdjustment" },
|
|
232
240
|
{ guard: "allAnchorsPassed", target: "succeeded", actions: "recordSuccess" },
|
|
233
241
|
{ guard: "canRetry", target: "retrying", actions: "recordVerificationFailure" },
|