@guyghost/swarm-dao-improvement 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # @guyghost/swarm-dao-improvement
2
+
3
+ Executor for the Swarm DAO **improvement loop**: continuous improvement series
4
+ over journal-replayed cycles, with AI workers as real coding agents (via
5
+ [herdr](https://herdr.dev)) and bounded sandbox execution of ground-truth gate
6
+ commands (Docker or Apple container).
7
+
8
+ The machines — the only state authority for cycles and series — live in
9
+ `@guyghost/swarm-dao-core/models/improvement`. This package is the executor:
10
+ it journals every signal, persists evidence, and executes exactly the effect
11
+ the current state authorizes. Free-form text and AI output can never forge a
12
+ state transition, select a reference, or waive a gate.
13
+
14
+ ## Use from the CLI
15
+
16
+ ```bash
17
+ swarm-dao improve init --series-id s1 --scope ci-health --reference-hash <sha256> --cooldown-ms 60000
18
+ swarm-dao improve status --series-id s1
19
+ swarm-dao improve once --series-id s1 --sandbox container --image node:22-bookworm
20
+ swarm-dao improve submit --series-id s1 --event retry.json
21
+ ```
22
+
23
+ The project binds its ground-truth gates in `.dao/improvement.json`:
24
+
25
+ ```json
26
+ {
27
+ "anchorCommands": {
28
+ "drift-audit": "npm test",
29
+ "anchor-reality": "npm run build",
30
+ "frozen-set-intact": "npm run lint",
31
+ "regression": "npm run typecheck"
32
+ },
33
+ "sandbox": { "mode": "container", "image": "node:22-bookworm" }
34
+ }
35
+ ```
36
+
37
+ Exactly the four command-backed anchors (`counter-metric-paired` and
38
+ `arbitration-policy` are recorded automatically by the machine). Unknown,
39
+ missing, or machine-recorded anchors fail config validation.
40
+
41
+ ## Sandbox
42
+
43
+ `--sandbox docker|container|auto|none` (with `--image`) runs every anchor
44
+ command inside a throwaway container: repository mounted at `/workspace`,
45
+ **network disabled**, CPU/memory capped. Apple `container` is detected first
46
+ on `auto`; a missing runtime fails loudly instead of degrading to the host. A
47
+ flagged gate failure never runs on the host implicitly — bounded means bounded.
48
+
49
+ ## Programmatic use
50
+
51
+ ```typescript
52
+ import { OrchestratorRunner, resolveAnchorCommands } from "@guyghost/swarm-dao-improvement";
53
+
54
+ const runner = await OrchestratorRunner.create({ seriesId: "s1", evidenceRoot: ".dao/improvement-series" });
55
+ const result = await runner.once({ workDir: process.cwd() });
56
+ ```
57
+
58
+ `runner.once()` executes exactly one state-authorized effect per call
59
+ (init cycle, sample, seal, audit, arbitrate, anchor, evaluate, observe,
60
+ cooldown); loop it to drive a series.
@@ -0,0 +1,30 @@
1
+ export declare const PROJECT_CONFIG_PATH = ".dao/improvement.json";
2
+ /** Anchors recorded automatically by the machine (SAMPLES_SEALED, ARBITRATION). */
3
+ export declare const AUTO_RECORDED_ANCHORS: ReadonlySet<string>;
4
+ /** Anchors a project must bind commands for. */
5
+ export declare const COMMAND_BACKED_ANCHORS: readonly string[];
6
+ export interface ProjectImprovementConfig {
7
+ /** Absolute path the config was loaded from. */
8
+ path: string;
9
+ /** Parsed file. Only `anchorCommands` is validated here; unknown sections (e.g. `sandbox`) pass through. */
10
+ raw: {
11
+ anchorCommands: Record<string, string>;
12
+ [key: string]: unknown;
13
+ };
14
+ }
15
+ /**
16
+ * Validate the anchorCommands section: exactly the command-backed required
17
+ * anchors, each bound to a non-empty command string. Strict set equality — a
18
+ * missing gate must not silently pass unanchored, an unknown anchor must not
19
+ * silently do nothing, and the machine-recorded anchors must not be
20
+ * overridden.
21
+ */
22
+ export declare function validateProjectAnchorCommands(raw: unknown): Record<string, string>;
23
+ /**
24
+ * Load `.dao/improvement.json` from the project. Returns null when the file
25
+ * does not exist (callers fall back to repo-local frozen configuration);
26
+ * throws when it exists but is invalid — a malformed human-owned config is
27
+ * never silently ignored.
28
+ */
29
+ export declare function loadProjectImprovementConfig(workDir: string): Promise<ProjectImprovementConfig | null>;
30
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAA4D,CAAC;AAEnH,gDAAgD;AAChD,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAEnD,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,4GAA4G;IAC5G,GAAG,EAAE;QACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAKD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA0BlF;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAkB5G"}
package/dist/config.js ADDED
@@ -0,0 +1,83 @@
1
+ // ============================================================
2
+ // Swarm DAO Improvement Loop — per-project config (.dao/improvement.json)
3
+ // ============================================================
4
+ // The human-owned binding of a project's ground-truth gate commands onto the
5
+ // frozen improvement-machine anchors. The machine fixes WHICH anchors exist
6
+ // (REQUIRED_IMPROVEMENT_ANCHORS); the project owns WHICH commands prove them.
7
+ // Two anchors are recorded automatically by the machine (the sample seal and
8
+ // the deterministic arbitration) and can never carry project commands.
9
+ import { readFile } from "node:fs/promises";
10
+ import { resolve } from "node:path";
11
+ import { REQUIRED_IMPROVEMENT_ANCHORS } from "@guyghost/swarm-dao-core/models/improvement";
12
+ export const PROJECT_CONFIG_PATH = ".dao/improvement.json";
13
+ /** Anchors recorded automatically by the machine (SAMPLES_SEALED, ARBITRATION). */
14
+ export const AUTO_RECORDED_ANCHORS = new Set(["counter-metric-paired", "arbitration-policy"]);
15
+ /** Anchors a project must bind commands for. */
16
+ export const COMMAND_BACKED_ANCHORS = REQUIRED_IMPROVEMENT_ANCHORS.filter((anchor) => !AUTO_RECORDED_ANCHORS.has(anchor));
17
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
18
+ /**
19
+ * Validate the anchorCommands section: exactly the command-backed required
20
+ * anchors, each bound to a non-empty command string. Strict set equality — a
21
+ * missing gate must not silently pass unanchored, an unknown anchor must not
22
+ * silently do nothing, and the machine-recorded anchors must not be
23
+ * overridden.
24
+ */
25
+ export function validateProjectAnchorCommands(raw) {
26
+ const issues = [];
27
+ if (!isRecord(raw)) {
28
+ throw new Error(`${PROJECT_CONFIG_PATH}: 'anchorCommands' must be an object mapping anchors to commands`);
29
+ }
30
+ const keys = Object.keys(raw);
31
+ const expected = new Set(COMMAND_BACKED_ANCHORS);
32
+ for (const key of keys) {
33
+ if (AUTO_RECORDED_ANCHORS.has(key)) {
34
+ issues.push(`'${key}' is recorded automatically by the machine and must not carry a project command`);
35
+ continue;
36
+ }
37
+ if (!expected.has(key)) {
38
+ issues.push(`'${key}' is not a required improvement anchor (expected: ${COMMAND_BACKED_ANCHORS.join(", ")})`);
39
+ continue;
40
+ }
41
+ const command = raw[key];
42
+ if (typeof command !== "string" || command.trim().length === 0) {
43
+ issues.push(`'${key}' must be bound to a non-empty command string`);
44
+ }
45
+ }
46
+ for (const anchor of COMMAND_BACKED_ANCHORS) {
47
+ if (!keys.includes(anchor))
48
+ issues.push(`missing command for required anchor '${anchor}'`);
49
+ }
50
+ if (issues.length > 0)
51
+ throw new Error(`${PROJECT_CONFIG_PATH}: ${issues.join("; ")}`);
52
+ return raw;
53
+ }
54
+ /**
55
+ * Load `.dao/improvement.json` from the project. Returns null when the file
56
+ * does not exist (callers fall back to repo-local frozen configuration);
57
+ * throws when it exists but is invalid — a malformed human-owned config is
58
+ * never silently ignored.
59
+ */
60
+ export async function loadProjectImprovementConfig(workDir) {
61
+ const path = resolve(workDir, PROJECT_CONFIG_PATH);
62
+ let content;
63
+ try {
64
+ content = await readFile(path, "utf8");
65
+ }
66
+ catch (error) {
67
+ if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT")
68
+ return null;
69
+ throw error;
70
+ }
71
+ let parsed;
72
+ try {
73
+ parsed = JSON.parse(content);
74
+ }
75
+ catch {
76
+ throw new Error(`${PROJECT_CONFIG_PATH} is not valid JSON`);
77
+ }
78
+ if (!isRecord(parsed))
79
+ throw new Error(`${PROJECT_CONFIG_PATH} must contain a JSON object`);
80
+ const anchorCommands = validateProjectAnchorCommands(parsed.anchorCommands);
81
+ return { path, raw: { ...parsed, anchorCommands } };
82
+ }
83
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from "./config.js";
2
+ export * from "./orchestrator.js";
3
+ export * from "./runner.js";
4
+ export * from "./sandbox.js";
5
+ export * from "./signal.js";
6
+ export * from "./workers.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ // @guyghost/swarm-dao-improvement — executor for the Swarm DAO improvement
2
+ // loop: continuous improvement series over journal-replayed cycles, herdr
3
+ // workers, and bounded sandbox execution for anchor commands. The machines
4
+ // (state authority) live in @guyghost/swarm-dao-core/models/improvement.
5
+ export * from "./config.js";
6
+ export * from "./orchestrator.js";
7
+ export * from "./runner.js";
8
+ export * from "./sandbox.js";
9
+ export * from "./signal.js";
10
+ export * from "./workers.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,yEAAyE;AAEzE,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { ORCHESTRATOR_MIN_COOLDOWN_MS, type OrchestratorContext, type OrchestratorEvent, type WorkerPhase } from "@guyghost/swarm-dao-core/models/improvement";
2
+ export { ORCHESTRATOR_MIN_COOLDOWN_MS };
3
+ import { type WorkerHarvest } from "./workers.js";
4
+ export declare const DEFAULT_SERIES_EVIDENCE_ROOT = "evidence/improvement-series";
5
+ export declare const DEFAULT_CYCLE_EVIDENCE_ROOT = "evidence/improvement-cycles";
6
+ export type PersistedSeriesSnapshot = Readonly<{
7
+ seriesId: string;
8
+ state: string;
9
+ status: string;
10
+ context: OrchestratorContext;
11
+ cooldownEnteredAt: string | null;
12
+ }>;
13
+ export type OrchestratorSubmissionResult = Readonly<{
14
+ accepted: boolean;
15
+ issues: readonly string[];
16
+ snapshot: PersistedSeriesSnapshot;
17
+ }>;
18
+ export type AnchorCommandOutcome = Readonly<{
19
+ ok: boolean;
20
+ detail: string;
21
+ }>;
22
+ export interface OrchestratorOnceDeps {
23
+ /** Injected wall clock (ms) for cooldown scheduling; defaults to Date.now. */
24
+ nowMs?: () => number;
25
+ /** Worker executor override (tests); default runs the worker through herdr. */
26
+ runWorker?: (phase: WorkerPhase, worker: string) => Promise<WorkerHarvest>;
27
+ /** Anchor command runner override (tests); default executes via child exec. */
28
+ runCommand?: (command: string) => Promise<AnchorCommandOutcome>;
29
+ /** Improvement cycle evidence root (default evidence/improvement-cycles). */
30
+ cycleEvidenceRoot?: string;
31
+ /** Repository root for herdr workspaces and anchor commands (default cwd). */
32
+ workDir?: string;
33
+ }
34
+ export type OrchestratorOnceResult = Readonly<{
35
+ seriesId: string;
36
+ stateBefore: string;
37
+ stateAfter: string;
38
+ executed: boolean;
39
+ event: string | null;
40
+ accepted: boolean;
41
+ issues: readonly string[];
42
+ detail: string;
43
+ }>;
44
+ export interface OrchestratorRunnerOptions {
45
+ seriesId: string;
46
+ evidenceRoot: string;
47
+ clock?: () => string;
48
+ }
49
+ /**
50
+ * The CLI submit channel forwards only human events; tool/system events are
51
+ * produced by `once`. CANCEL_SERIES must already carry a non-empty reason so
52
+ * the CLI fails early instead of surfacing a generic machine rejection later.
53
+ */
54
+ export declare const isHumanChannelEvent: (event: unknown) => boolean;
55
+ /** Maps a persisted improvement cycle state to exactly one typed observation, or null (poll continues). */
56
+ export declare const mapCycleStateToObservation: (cycleState: string, terminalReason: string | null) => OrchestratorEvent | null;
57
+ /**
58
+ * Resolve the anchor commands for a working directory. `.dao/improvement.json`
59
+ * (explicit, human-owned project config) wins; repositories that ship the
60
+ * frozen improvement graph (swarm-dao itself) fall back to it. A missing
61
+ * anchor configuration is an error with actionable guidance, never a silent
62
+ * no-op: grounding without gates would be forged ground contact.
63
+ */
64
+ export declare const resolveAnchorCommands: (workDir: string) => Promise<ReadonlyArray<readonly [anchor: string, command: string]>>;
65
+ /** Reads the frozen anchor commands (minus the auto-recorded pair) from the improvement graph. */
66
+ export declare const loadFrozenAnchorCommands: (root: string) => Promise<ReadonlyArray<readonly [anchor: string, command: string]>>;
67
+ export declare class OrchestratorRunner {
68
+ #private;
69
+ private constructor();
70
+ static create(options: OrchestratorRunnerOptions): Promise<OrchestratorRunner>;
71
+ snapshot(): PersistedSeriesSnapshot;
72
+ submit(input: unknown): Promise<OrchestratorSubmissionResult>;
73
+ /**
74
+ * Execute the single effect authorized by the current series state and
75
+ * submit the resulting tool/system event. Human-gated and terminal states
76
+ * never execute an effect.
77
+ */
78
+ once(deps?: OrchestratorOnceDeps): Promise<OrchestratorOnceResult>;
79
+ }
80
+ /** Rejects starting a series for a scope that already has a non-terminal series (invariant 7). */
81
+ export declare const assertNoActiveSeriesForScope: (evidenceRoot: string, scope: string, seriesId: string) => Promise<void>;
82
+ export declare const runSeriesCliInner: (argv: string[]) => Promise<number>;
83
+ /**
84
+ * Entry point for the `improvement:series:*` scripts and the swarm-dao CLI.
85
+ * Exit codes: 0 success, 2 machine rejection, 1 usage or execution error.
86
+ */
87
+ export declare const runSeriesCli: (argv: string[]) => Promise<number>;
88
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}