@monoes/monomindcli 2.10.9 → 2.10.13
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/.claude/commands/mastermind/brain.md +14 -14
- package/.claude/commands/mastermind/help.md +2 -2
- package/.claude/commands/mastermind/master.md +24 -19
- package/.claude/commands/mastermind/memory.md +8 -8
- package/.claude/commands/mastermind/monoswarm.md +4 -4
- package/.claude/commands/mastermind.md +7 -7
- package/.claude/commands/truth/start.md +3 -3
- package/.claude/settings.json +0 -4
- package/.claude/skills/mastermind/SKILL.md +7 -16
- package/.claude/skills/mastermind/references/antigravity-tools.md +0 -62
- package/.claude/skills/mastermind/references/claude-code-tools.md +0 -52
- package/.claude/skills/mastermind/references/codex-tools.md +0 -66
- package/.claude/skills/mastermind/references/copilot-tools.md +0 -51
- package/.claude/skills/mastermind/references/gemini-tools.md +0 -65
- package/.claude/skills/mastermind/references/pi-tools.md +0 -30
- package/.claude/skills/mastermind-createorg/SKILL.md +3 -1
- package/.claude/skills/mastermind-debug/SKILL.md +3 -277
- package/.claude/skills/mastermind-design/SKILL.md +2 -0
- package/.claude/skills/mastermind-execute/SKILL.md +59 -103
- package/.claude/skills/mastermind-idea/SKILL.md +9 -2
- package/.claude/skills/mastermind-intake/SKILL.md +31 -7
- package/.claude/skills/mastermind-issue-detail/SKILL.md +70 -16
- package/.claude/skills/mastermind-issues/SKILL.md +111 -16
- package/.claude/skills/mastermind-liveness/SKILL.md +96 -26
- package/.claude/skills/mastermind-memory/SKILL.md +0 -316
- package/.claude/skills/mastermind-my-issues/SKILL.md +40 -8
- package/.claude/skills/mastermind-org/SKILL.md +1 -12
- package/.claude/skills/mastermind-plan/SKILL.md +7 -228
- package/.claude/skills/mastermind-plan-to-tasks/SKILL.md +132 -24
- package/.claude/skills/mastermind-protocol/SKILL.md +33 -22
- package/.claude/skills/mastermind-research/SKILL.md +0 -163
- package/.claude/skills/mastermind-review/SKILL.md +0 -228
- package/.claude/skills/mastermind-runorg/SKILL.md +22 -3
- package/.claude/skills/mastermind-skill-builder/SKILL.md +1 -1
- package/.claude/skills/mastermind-tasks/SKILL.md +5 -0
- package/.claude/skills/mastermind-techport/SKILL.md +1 -1
- package/.claude/skills/performance-analysis/SKILL.md +1 -1
- package/.claude/skills/verification-quality/SKILL.md +2 -3
- package/README.md +2 -2
- package/dist/src/commands/agent-exec.d.ts +2 -0
- package/dist/src/commands/agent-exec.d.ts.map +1 -1
- package/dist/src/commands/agent-exec.js +16 -0
- package/dist/src/commands/agent-exec.js.map +1 -1
- package/dist/src/commands/doc.js +2 -2
- package/dist/src/commands/doc.js.map +1 -1
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +20 -1
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/init-wizard.d.ts.map +1 -1
- package/dist/src/commands/init-wizard.js +6 -0
- package/dist/src/commands/init-wizard.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +12 -2
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/monograph.d.ts.map +1 -1
- package/dist/src/commands/monograph.js +11 -4
- package/dist/src/commands/monograph.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts +2 -0
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +115 -6
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts +26 -0
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +186 -28
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/init/codex-generator.d.ts +5 -0
- package/dist/src/init/codex-generator.d.ts.map +1 -1
- package/dist/src/init/codex-generator.js +12 -3
- package/dist/src/init/codex-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +10 -9
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +0 -5
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/write-codex.d.ts.map +1 -1
- package/dist/src/init/write-codex.js +6 -5
- package/dist/src/init/write-codex.js.map +1 -1
- package/dist/src/knowledge/document-pipeline.d.ts +5 -0
- package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
- package/dist/src/knowledge/document-pipeline.js +32 -16
- package/dist/src/knowledge/document-pipeline.js.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.d.ts +9 -0
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +12 -1
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/knowledge-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/knowledge-tools.js +105 -13
- package/dist/src/mcp-tools/knowledge-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts +13 -0
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +257 -31
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/health-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/health-tools.js +99 -42
- package/dist/src/mcp-tools/monograph/health-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/impact-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/impact-tools.js +123 -51
- package/dist/src/mcp-tools/monograph/impact-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/query-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/query-tools.js +113 -96
- package/dist/src/mcp-tools/monograph/query-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph/shared.d.ts +37 -4
- package/dist/src/mcp-tools/monograph/shared.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/shared.js +75 -56
- package/dist/src/mcp-tools/monograph/shared.js.map +1 -1
- package/dist/src/memory/embedding-operations.d.ts.map +1 -1
- package/dist/src/memory/embedding-operations.js +9 -4
- package/dist/src/memory/embedding-operations.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +60 -1
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +185 -42
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-kg.d.ts +495 -28
- package/dist/src/memory/memory-kg.d.ts.map +1 -1
- package/dist/src/memory/memory-kg.js +2186 -251
- package/dist/src/memory/memory-kg.js.map +1 -1
- package/dist/src/memory/query-router.d.ts +51 -0
- package/dist/src/memory/query-router.d.ts.map +1 -1
- package/dist/src/memory/query-router.js +38 -2
- package/dist/src/memory/query-router.js.map +1 -1
- package/dist/src/orgrt/agent-exec.d.ts +14 -0
- package/dist/src/orgrt/agent-exec.d.ts.map +1 -1
- package/dist/src/orgrt/agent-exec.js +88 -4
- package/dist/src/orgrt/agent-exec.js.map +1 -1
- package/dist/src/orgrt/agent-runner.d.ts +26 -1
- package/dist/src/orgrt/agent-runner.d.ts.map +1 -1
- package/dist/src/orgrt/agent-runner.js +73 -22
- package/dist/src/orgrt/agent-runner.js.map +1 -1
- package/dist/src/orgrt/antigravity-runner.d.ts +1 -1
- package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
- package/dist/src/orgrt/antigravity-runner.js +36 -19
- package/dist/src/orgrt/antigravity-runner.js.map +1 -1
- package/dist/src/orgrt/approvals.d.ts +26 -2
- package/dist/src/orgrt/approvals.d.ts.map +1 -1
- package/dist/src/orgrt/approvals.js +67 -7
- package/dist/src/orgrt/approvals.js.map +1 -1
- package/dist/src/orgrt/broker.d.ts +21 -2
- package/dist/src/orgrt/broker.d.ts.map +1 -1
- package/dist/src/orgrt/broker.js +56 -8
- package/dist/src/orgrt/broker.js.map +1 -1
- package/dist/src/orgrt/bus.d.ts +8 -0
- package/dist/src/orgrt/bus.d.ts.map +1 -1
- package/dist/src/orgrt/bus.js +27 -0
- package/dist/src/orgrt/bus.js.map +1 -1
- package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint-ops.js +15 -5
- package/dist/src/orgrt/checkpoint-ops.js.map +1 -1
- package/dist/src/orgrt/checkpoint.d.ts +42 -4
- package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint.js +75 -4
- package/dist/src/orgrt/checkpoint.js.map +1 -1
- package/dist/src/orgrt/codex-runner.d.ts +1 -1
- package/dist/src/orgrt/codex-runner.d.ts.map +1 -1
- package/dist/src/orgrt/codex-runner.js +50 -23
- package/dist/src/orgrt/codex-runner.js.map +1 -1
- package/dist/src/orgrt/copilot-runner.d.ts +24 -2
- package/dist/src/orgrt/copilot-runner.d.ts.map +1 -1
- package/dist/src/orgrt/copilot-runner.js +257 -157
- package/dist/src/orgrt/copilot-runner.js.map +1 -1
- package/dist/src/orgrt/cross-org.d.ts +10 -3
- package/dist/src/orgrt/cross-org.d.ts.map +1 -1
- package/dist/src/orgrt/cross-org.js +225 -10
- package/dist/src/orgrt/cross-org.js.map +1 -1
- package/dist/src/orgrt/crush-runner.d.ts +22 -2
- package/dist/src/orgrt/crush-runner.d.ts.map +1 -1
- package/dist/src/orgrt/crush-runner.js +227 -120
- package/dist/src/orgrt/crush-runner.js.map +1 -1
- package/dist/src/orgrt/daemon.d.ts +77 -7
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +989 -385
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/decisions.d.ts +2 -2
- package/dist/src/orgrt/decisions.d.ts.map +1 -1
- package/dist/src/orgrt/decisions.js +90 -18
- package/dist/src/orgrt/decisions.js.map +1 -1
- package/dist/src/orgrt/grok-runner.d.ts +29 -3
- package/dist/src/orgrt/grok-runner.d.ts.map +1 -1
- package/dist/src/orgrt/grok-runner.js +286 -150
- package/dist/src/orgrt/grok-runner.js.map +1 -1
- package/dist/src/orgrt/kimicode-runner.d.ts +5 -5
- package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/kimicode-runner.js +53 -32
- package/dist/src/orgrt/kimicode-runner.js.map +1 -1
- package/dist/src/orgrt/mailbox.d.ts +15 -0
- package/dist/src/orgrt/mailbox.d.ts.map +1 -1
- package/dist/src/orgrt/mailbox.js +29 -1
- package/dist/src/orgrt/mailbox.js.map +1 -1
- package/dist/src/orgrt/migrate.d.ts.map +1 -1
- package/dist/src/orgrt/migrate.js +8 -5
- package/dist/src/orgrt/migrate.js.map +1 -1
- package/dist/src/orgrt/opencode-runner.d.ts +1 -1
- package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
- package/dist/src/orgrt/opencode-runner.js +29 -3
- package/dist/src/orgrt/opencode-runner.js.map +1 -1
- package/dist/src/orgrt/org-memory.d.ts +19 -3
- package/dist/src/orgrt/org-memory.d.ts.map +1 -1
- package/dist/src/orgrt/org-memory.js +110 -38
- package/dist/src/orgrt/org-memory.js.map +1 -1
- package/dist/src/orgrt/pi-rpc-runner.d.ts +3 -1
- package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -1
- package/dist/src/orgrt/pi-rpc-runner.js +35 -3
- package/dist/src/orgrt/pi-rpc-runner.js.map +1 -1
- package/dist/src/orgrt/pi-runner.d.ts +25 -2
- package/dist/src/orgrt/pi-runner.d.ts.map +1 -1
- package/dist/src/orgrt/pi-runner.js +271 -152
- package/dist/src/orgrt/pi-runner.js.map +1 -1
- package/dist/src/orgrt/policy.d.ts +1 -0
- package/dist/src/orgrt/policy.d.ts.map +1 -1
- package/dist/src/orgrt/policy.js +199 -39
- package/dist/src/orgrt/policy.js.map +1 -1
- package/dist/src/orgrt/provider.d.ts +4 -0
- package/dist/src/orgrt/provider.d.ts.map +1 -1
- package/dist/src/orgrt/provider.js +16 -0
- package/dist/src/orgrt/provider.js.map +1 -1
- package/dist/src/orgrt/qwen-rpc-runner.d.ts +3 -1
- package/dist/src/orgrt/qwen-rpc-runner.d.ts.map +1 -1
- package/dist/src/orgrt/qwen-rpc-runner.js +35 -3
- package/dist/src/orgrt/qwen-rpc-runner.js.map +1 -1
- package/dist/src/orgrt/qwen-runner.d.ts +30 -3
- package/dist/src/orgrt/qwen-runner.d.ts.map +1 -1
- package/dist/src/orgrt/qwen-runner.js +282 -142
- package/dist/src/orgrt/qwen-runner.js.map +1 -1
- package/dist/src/orgrt/role-slot.d.ts +88 -0
- package/dist/src/orgrt/role-slot.d.ts.map +1 -0
- package/dist/src/orgrt/role-slot.js +133 -0
- package/dist/src/orgrt/role-slot.js.map +1 -0
- package/dist/src/orgrt/runtime-options.d.ts +17 -0
- package/dist/src/orgrt/runtime-options.d.ts.map +1 -0
- package/dist/src/orgrt/runtime-options.js +32 -0
- package/dist/src/orgrt/runtime-options.js.map +1 -0
- package/dist/src/orgrt/scheduler-integration.d.ts +11 -0
- package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -1
- package/dist/src/orgrt/scheduler-integration.js +75 -17
- package/dist/src/orgrt/scheduler-integration.js.map +1 -1
- package/dist/src/orgrt/scheduler.d.ts +4 -0
- package/dist/src/orgrt/scheduler.d.ts.map +1 -1
- package/dist/src/orgrt/scheduler.js +7 -1
- package/dist/src/orgrt/scheduler.js.map +1 -1
- package/dist/src/orgrt/server.d.ts +8 -3
- package/dist/src/orgrt/server.d.ts.map +1 -1
- package/dist/src/orgrt/server.js +48 -13
- package/dist/src/orgrt/server.js.map +1 -1
- package/dist/src/orgrt/session.d.ts +26 -2
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +99 -5
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/task-dag.d.ts +5 -0
- package/dist/src/orgrt/task-dag.d.ts.map +1 -1
- package/dist/src/orgrt/task-dag.js +41 -0
- package/dist/src/orgrt/task-dag.js.map +1 -1
- package/dist/src/orgrt/test-loop.js +2 -2
- package/dist/src/orgrt/test-loop.js.map +1 -1
- package/dist/src/orgrt/types.d.ts +14 -2
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +15 -1
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/orgrt/vercel-runner.d.ts.map +1 -1
- package/dist/src/orgrt/vercel-runner.js +4 -0
- package/dist/src/orgrt/vercel-runner.js.map +1 -1
- package/dist/src/ui/routes-org.mjs +27 -7
- package/dist/src/ui/server.mjs +82 -48
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/dist/src/ui/data/mastermind-sessions.json +0 -1
|
@@ -7,6 +7,17 @@ export interface BrokerEntry {
|
|
|
7
7
|
/** Normalize credential: trim whitespace, reject empty/oversized values. */
|
|
8
8
|
export declare function normalizeCredential(cred: string | undefined): string | undefined;
|
|
9
9
|
export declare function defaultRegistryDir(): string;
|
|
10
|
+
/** Where the OPERATOR credential lives — deliberately not the broker registry.
|
|
11
|
+
* The registry entry is the agent-facing credential: every org process on the
|
|
12
|
+
* machine reads it to deliver messages, so anything in it must be assumed
|
|
13
|
+
* visible to agents. The operator credential authorizes human decisions
|
|
14
|
+
* (approvals, gates, answers) and is only read by the `org` CLI. */
|
|
15
|
+
export declare function defaultOperatorDir(): string;
|
|
16
|
+
/** Publish the operator credential for org `name` so `org approve/deny/answer/gate-*`
|
|
17
|
+
* can authenticate to the hosting daemon's human-decision routes. */
|
|
18
|
+
export declare function writeOperatorCredential(name: string, credential: string, dir?: string): void;
|
|
19
|
+
export declare function readOperatorCredential(name: string, dir?: string): string | undefined;
|
|
20
|
+
export declare function removeOperatorCredential(name: string, dir?: string): void;
|
|
10
21
|
/** Publish that this process hosts org `name`, reachable via `url`. Call again periodically (heartbeat) — see BrokerLease.
|
|
11
22
|
* Writes via tmp+rename (same-directory rename is atomic on POSIX/NTFS) so a concurrent lookupOrg() never observes a
|
|
12
23
|
* partially-written entry — this file is rewritten every heartbeat (default 20s) while other processes may read it. */
|
|
@@ -15,15 +26,23 @@ export declare function registerOrg(name: string, url: string, dir?: string, cre
|
|
|
15
26
|
export declare function unregisterOrg(name: string, dir?: string): void;
|
|
16
27
|
/** Find which process (if any) currently hosts org `name`. Null if never registered or the registration is stale (owner crashed without cleanup). */
|
|
17
28
|
export declare function lookupOrg(name: string, dir?: string, staleMs?: number): BrokerEntry | null;
|
|
18
|
-
/** Keeps a broker registration alive with periodic heartbeats until stop() is called.
|
|
29
|
+
/** Keeps a broker registration alive with periodic heartbeats until stop() is called.
|
|
30
|
+
* `credential` is the org's AGENT credential (published in the registry entry);
|
|
31
|
+
* `operator` is the daemon's operator credential, written to its own directory
|
|
32
|
+
* and never into the registry entry. */
|
|
19
33
|
export declare class BrokerLease {
|
|
20
34
|
private name;
|
|
21
35
|
private url;
|
|
22
36
|
private dir;
|
|
23
37
|
private intervalMs;
|
|
24
38
|
private credential?;
|
|
39
|
+
private operator?;
|
|
25
40
|
private timer;
|
|
26
|
-
constructor(name: string, url: string, dir?: string, intervalMs?: number, credential?: string | undefined
|
|
41
|
+
constructor(name: string, url: string, dir?: string, intervalMs?: number, credential?: string | undefined, operator?: {
|
|
42
|
+
credential: string;
|
|
43
|
+
dir?: string;
|
|
44
|
+
} | undefined);
|
|
45
|
+
private publish;
|
|
27
46
|
start(): void;
|
|
28
47
|
stop(): void;
|
|
29
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../../src/orgrt/broker.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMhF;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../../src/orgrt/broker.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAOD,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMhF;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;qEAIqE;AACrE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAcD;sEACsE;AACtE,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,GAAG,SAAuB,GACzB,IAAI,CAGN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,SAAuB,GACzB,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAuB,GAAG,IAAI,CAMvF;AAED;;wHAEwH;AACxH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,SAAuB,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAYN;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAuB,GAAG,IAAI,CAM5E;AAED,qJAAqJ;AACrJ,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,GAAG,SAAuB,EAC1B,OAAO,SAAmB,GACzB,WAAW,GAAG,IAAI,CAQpB;AAED;;;yCAGyC;AACzC,qBAAa,WAAW;IAIpB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC;IARnB,OAAO,CAAC,KAAK,CAA+C;IAE5D,YACU,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAA6B,EAClC,UAAU,SAAS,EACnB,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,QAAQ,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,YAAA,EACrD;IAEJ,OAAO,CAAC,OAAO;IAMf,KAAK,IAAI,IAAI,CAIZ;IAED,IAAI,IAAI,IAAI,CAKX;CACF"}
|
package/dist/src/orgrt/broker.js
CHANGED
|
@@ -23,11 +23,48 @@ export function normalizeCredential(cred) {
|
|
|
23
23
|
export function defaultRegistryDir() {
|
|
24
24
|
return process.env.MONOMIND_ORGRT_BROKER_DIR || join(homedir(), '.monomind', 'orgrt-broker');
|
|
25
25
|
}
|
|
26
|
+
/** Where the OPERATOR credential lives — deliberately not the broker registry.
|
|
27
|
+
* The registry entry is the agent-facing credential: every org process on the
|
|
28
|
+
* machine reads it to deliver messages, so anything in it must be assumed
|
|
29
|
+
* visible to agents. The operator credential authorizes human decisions
|
|
30
|
+
* (approvals, gates, answers) and is only read by the `org` CLI. */
|
|
31
|
+
export function defaultOperatorDir() {
|
|
32
|
+
return process.env.MONOMIND_ORGRT_OPERATOR_DIR || join(homedir(), '.monomind', 'orgrt-operator');
|
|
33
|
+
}
|
|
26
34
|
function entryPath(name, dir) {
|
|
27
35
|
if (!SAFE_NAME.test(name))
|
|
28
36
|
throw new Error(`invalid org name for broker registry: ${name}`);
|
|
29
37
|
return join(dir, `${name}.json`);
|
|
30
38
|
}
|
|
39
|
+
/** Atomic owner-only write (tmp + same-directory rename) shared by both registries. */
|
|
40
|
+
function writeEntry(dest, data) {
|
|
41
|
+
const tmp = `${dest}.${process.pid}.tmp`;
|
|
42
|
+
writeFileSync(tmp, JSON.stringify(data), { mode: 0o600 });
|
|
43
|
+
renameSync(tmp, dest);
|
|
44
|
+
}
|
|
45
|
+
/** Publish the operator credential for org `name` so `org approve/deny/answer/gate-*`
|
|
46
|
+
* can authenticate to the hosting daemon's human-decision routes. */
|
|
47
|
+
export function writeOperatorCredential(name, credential, dir = defaultOperatorDir()) {
|
|
48
|
+
mkdirSync(dir, { recursive: true });
|
|
49
|
+
writeEntry(entryPath(name, dir), { credential, pid: process.pid, updatedAt: Date.now() });
|
|
50
|
+
}
|
|
51
|
+
export function readOperatorCredential(name, dir = defaultOperatorDir()) {
|
|
52
|
+
try {
|
|
53
|
+
const entry = JSON.parse(readFileSync(entryPath(name, dir), 'utf8'));
|
|
54
|
+
return normalizeCredential(entry.credential);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export function removeOperatorCredential(name, dir = defaultOperatorDir()) {
|
|
61
|
+
try {
|
|
62
|
+
unlinkSync(entryPath(name, dir));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* already gone */
|
|
66
|
+
}
|
|
67
|
+
}
|
|
31
68
|
/** Publish that this process hosts org `name`, reachable via `url`. Call again periodically (heartbeat) — see BrokerLease.
|
|
32
69
|
* Writes via tmp+rename (same-directory rename is atomic on POSIX/NTFS) so a concurrent lookupOrg() never observes a
|
|
33
70
|
* partially-written entry — this file is rewritten every heartbeat (default 20s) while other processes may read it. */
|
|
@@ -40,10 +77,9 @@ export function registerOrg(name, url, dir = defaultRegistryDir(), credential) {
|
|
|
40
77
|
updatedAt: Date.now(),
|
|
41
78
|
...(normalizedCred ? { credential: normalizedCred } : {}),
|
|
42
79
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
renameSync(tmp, dest);
|
|
80
|
+
// SEC: the entry carries this org's agent credential in plaintext —
|
|
81
|
+
// restrict to owner-only so other local users can't read it off disk.
|
|
82
|
+
writeEntry(entryPath(name, dir), entry);
|
|
47
83
|
}
|
|
48
84
|
/** Remove this process's registration for `name` (best effort). */
|
|
49
85
|
export function unregisterOrg(name, dir = defaultRegistryDir()) {
|
|
@@ -66,24 +102,34 @@ export function lookupOrg(name, dir = defaultRegistryDir(), staleMs = DEFAULT_ST
|
|
|
66
102
|
return null;
|
|
67
103
|
}
|
|
68
104
|
}
|
|
69
|
-
/** Keeps a broker registration alive with periodic heartbeats until stop() is called.
|
|
105
|
+
/** Keeps a broker registration alive with periodic heartbeats until stop() is called.
|
|
106
|
+
* `credential` is the org's AGENT credential (published in the registry entry);
|
|
107
|
+
* `operator` is the daemon's operator credential, written to its own directory
|
|
108
|
+
* and never into the registry entry. */
|
|
70
109
|
export class BrokerLease {
|
|
71
110
|
name;
|
|
72
111
|
url;
|
|
73
112
|
dir;
|
|
74
113
|
intervalMs;
|
|
75
114
|
credential;
|
|
115
|
+
operator;
|
|
76
116
|
timer = null;
|
|
77
|
-
constructor(name, url, dir = defaultRegistryDir(), intervalMs = 20_000, credential) {
|
|
117
|
+
constructor(name, url, dir = defaultRegistryDir(), intervalMs = 20_000, credential, operator) {
|
|
78
118
|
this.name = name;
|
|
79
119
|
this.url = url;
|
|
80
120
|
this.dir = dir;
|
|
81
121
|
this.intervalMs = intervalMs;
|
|
82
122
|
this.credential = credential;
|
|
123
|
+
this.operator = operator;
|
|
83
124
|
}
|
|
84
|
-
|
|
125
|
+
publish() {
|
|
85
126
|
registerOrg(this.name, this.url, this.dir, this.credential);
|
|
86
|
-
|
|
127
|
+
if (this.operator)
|
|
128
|
+
writeOperatorCredential(this.name, this.operator.credential, this.operator.dir);
|
|
129
|
+
}
|
|
130
|
+
start() {
|
|
131
|
+
this.publish();
|
|
132
|
+
this.timer = setInterval(() => this.publish(), this.intervalMs);
|
|
87
133
|
this.timer.unref?.();
|
|
88
134
|
}
|
|
89
135
|
stop() {
|
|
@@ -91,6 +137,8 @@ export class BrokerLease {
|
|
|
91
137
|
clearInterval(this.timer);
|
|
92
138
|
this.timer = null;
|
|
93
139
|
unregisterOrg(this.name, this.dir);
|
|
140
|
+
if (this.operator)
|
|
141
|
+
removeOperatorCredential(this.name, this.operator.dir);
|
|
94
142
|
}
|
|
95
143
|
}
|
|
96
144
|
//# sourceMappingURL=broker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../../src/orgrt/broker.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,+EAA+E;AAC/E,+EAA+E;AAC/E,kEAAkE;AAClE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,kFAAkF;AAClF,+EAA+E;AAC/E,MAAM,SAAS,GAAG,6BAA6B,CAAC;AAChD,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,IAAwB;IAC1D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC1D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,GAAW;IAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;IAC5F,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AACnC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../../src/orgrt/broker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/orgrt/bus.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare class OrgBus {
|
|
|
12
12
|
private seq;
|
|
13
13
|
private pending;
|
|
14
14
|
private dirReady;
|
|
15
|
+
private sealed;
|
|
15
16
|
readonly file: string;
|
|
16
17
|
constructor(org: string, run: string, dir: string);
|
|
17
18
|
subscribe(fn: Listener): () => void;
|
|
@@ -22,6 +23,13 @@ export declare class OrgBus {
|
|
|
22
23
|
* work to have settled too must await that subscriber's own completion signal separately
|
|
23
24
|
* (see daemon.ts stopOrg(), which awaits forwarder.settle() alongside bus.flush()). */
|
|
24
25
|
flush(): Promise<void>;
|
|
26
|
+
/** Await the final queued disk write, then permanently stop scheduling new
|
|
27
|
+
* ones — emit() keeps fanning out to in-memory listeners after this, it
|
|
28
|
+
* just never touches disk again. For a caller that's about to delete the
|
|
29
|
+
* run directory (a test's afterEach, or a real stop/cleanup path): a late
|
|
30
|
+
* emit() from work that outlived flush()'s snapshot (per flush()'s own
|
|
31
|
+
* doc comment) would otherwise recreate bus.jsonl mid-delete. Idempotent. */
|
|
32
|
+
seal(): Promise<void>;
|
|
25
33
|
static readHistory(dir: string): BusEvent[];
|
|
26
34
|
}
|
|
27
35
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEtC;;;GAGG;AACH,qBAAa,MAAM;
|
|
1
|
+
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEtC;;;GAGG;AACH,qBAAa,MAAM;IASf,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM;IAVtB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YACW,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EAGrB;IAED,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAGlC;IAED,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,QAAQ,CAkEnE;IAED;;;;4FAIwF;IACxF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAED;;;;;kFAK8E;IACxE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAG1B;IAED,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAe1C;CACF"}
|
package/dist/src/orgrt/bus.js
CHANGED
|
@@ -14,6 +14,7 @@ export class OrgBus {
|
|
|
14
14
|
seq = 0;
|
|
15
15
|
pending = Promise.resolve();
|
|
16
16
|
dirReady = false;
|
|
17
|
+
sealed = false;
|
|
17
18
|
file;
|
|
18
19
|
constructor(org, run, dir) {
|
|
19
20
|
this.org = org;
|
|
@@ -34,6 +35,22 @@ export class OrgBus {
|
|
|
34
35
|
...partial,
|
|
35
36
|
};
|
|
36
37
|
// serialize writes; never block emitters
|
|
38
|
+
if (this.sealed) {
|
|
39
|
+
// Post-seal: still fan out to listeners below (nothing silently lost
|
|
40
|
+
// from anyone still watching), but never schedule a new disk write —
|
|
41
|
+
// a late emit from a subscriber the caller couldn't wait for (see
|
|
42
|
+
// seal()'s doc comment) must not be able to recreate bus.jsonl inside
|
|
43
|
+
// a run directory that's already being torn down.
|
|
44
|
+
for (const fn of this.listeners) {
|
|
45
|
+
try {
|
|
46
|
+
fn(e);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
/* listener errors never break the bus */
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return e;
|
|
53
|
+
}
|
|
37
54
|
this.pending = this.pending
|
|
38
55
|
.then(async () => {
|
|
39
56
|
if (!this.dirReady) {
|
|
@@ -87,6 +104,16 @@ export class OrgBus {
|
|
|
87
104
|
flush() {
|
|
88
105
|
return this.pending;
|
|
89
106
|
}
|
|
107
|
+
/** Await the final queued disk write, then permanently stop scheduling new
|
|
108
|
+
* ones — emit() keeps fanning out to in-memory listeners after this, it
|
|
109
|
+
* just never touches disk again. For a caller that's about to delete the
|
|
110
|
+
* run directory (a test's afterEach, or a real stop/cleanup path): a late
|
|
111
|
+
* emit() from work that outlived flush()'s snapshot (per flush()'s own
|
|
112
|
+
* doc comment) would otherwise recreate bus.jsonl mid-delete. Idempotent. */
|
|
113
|
+
async seal() {
|
|
114
|
+
await this.pending;
|
|
115
|
+
this.sealed = true;
|
|
116
|
+
}
|
|
90
117
|
static readHistory(dir) {
|
|
91
118
|
const f = join(dir, 'bus.jsonl');
|
|
92
119
|
if (!existsSync(f))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC;;;GAGG;AACH,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint-ops.d.ts","sourceRoot":"","sources":["../../../src/orgrt/checkpoint-ops.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkpoint-ops.d.ts","sourceRoot":"","sources":["../../../src/orgrt/checkpoint-ops.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzD;0FAC0F;AAC1F,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAuE5B;AAED;;;;2FAI2F;AAC3F,wBAAsB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6E3F;AAED;;;;8DAI8D;AAC9D,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAkChE"}
|
|
@@ -4,7 +4,7 @@ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from '
|
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { writeJsonFileAtomic } from '../utils/json-file.js';
|
|
6
6
|
import { OrgBus } from './bus.js';
|
|
7
|
-
import { isCheckpointExpired, validateCheckpoint } from './checkpoint.js';
|
|
7
|
+
import { isCheckpointExpired, migrateCheckpoint, validateCheckpoint, } from './checkpoint.js';
|
|
8
8
|
import { ORG_DIR, OrgDefSchema } from './types.js';
|
|
9
9
|
/** Time-travel debugging: replay from a specific checkpoint by run ID.
|
|
10
10
|
* Creates a fresh daemon instance and replays events from the target run's bus.jsonl. */
|
|
@@ -56,6 +56,10 @@ export async function replayFrom(daemon, name, run) {
|
|
|
56
56
|
run: replayRun,
|
|
57
57
|
bus,
|
|
58
58
|
agents: new Map(),
|
|
59
|
+
roleSlots: new Map(),
|
|
60
|
+
bossRoleId: '',
|
|
61
|
+
glossary: [],
|
|
62
|
+
respawning: new Set(),
|
|
59
63
|
busEvents: () => [...collected],
|
|
60
64
|
};
|
|
61
65
|
// Reemit events into the replay bus with updated timestamps
|
|
@@ -101,10 +105,16 @@ export async function resumeOrg(daemon, name) {
|
|
|
101
105
|
console.error('resumeOrg failed: checkpoint expired for', name, 'updated:', rt.checkpoint.updated);
|
|
102
106
|
return null;
|
|
103
107
|
}
|
|
104
|
-
// Pattern 3: Checksum validation - detect corrupted state
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
+
// Pattern 3: Checksum validation - detect corrupted state. Migrate an
|
|
109
|
+
// older-schema checkpoint (verifying ITS OWN stored checksum first) before
|
|
110
|
+
// checking it against the current version — see migrateCheckpoint's doc.
|
|
111
|
+
if (rt.checkpoint) {
|
|
112
|
+
const migrated = migrateCheckpoint(rt.checkpoint);
|
|
113
|
+
if (!migrated || !validateCheckpoint(migrated)) {
|
|
114
|
+
console.error('resumeOrg failed: checkpoint validation failed for', name);
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
rt.checkpoint = migrated;
|
|
108
118
|
}
|
|
109
119
|
// Load the org definition
|
|
110
120
|
const defPath = join(daemon.root, ORG_DIR, `${name}.json`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint-ops.js","sourceRoot":"","sources":["../../../src/orgrt/checkpoint-ops.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,2EAA2E;AAC3E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"checkpoint-ops.js","sourceRoot":"","sources":["../../../src/orgrt/checkpoint-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AgentRuntime, RunningOrg } from './daemon.js';
|
|
2
|
+
import type { OrgTask } from './task-dag.js';
|
|
2
3
|
/** Checkpoint state for a single agent role */
|
|
3
4
|
export interface RoleCheckpoint {
|
|
4
5
|
/** Message queue content (actual messages, not just count) */
|
|
@@ -23,6 +24,27 @@ export interface RoleCheckpoint {
|
|
|
23
24
|
error?: string;
|
|
24
25
|
/** Terminal scrollback — last N lines of agent output. */
|
|
25
26
|
scrollback?: string[];
|
|
27
|
+
/** Role-slot generation this checkpoint was captured at (0 = never replaced). */
|
|
28
|
+
generation: number;
|
|
29
|
+
/** Accepted org_respawn_role attempts for this role so far this run. */
|
|
30
|
+
respawnCount: number;
|
|
31
|
+
/** Currently-applied overrides on top of the org definition's role config —
|
|
32
|
+
* omitted fields mean "keep the org-definition value", not "unset it". */
|
|
33
|
+
effectiveRoleOverrides: {
|
|
34
|
+
runtime?: string;
|
|
35
|
+
model?: string;
|
|
36
|
+
providerName?: string;
|
|
37
|
+
};
|
|
38
|
+
/** Messages that arrived while the role was mid-replacement, not yet
|
|
39
|
+
* delivered into a live mailbox. */
|
|
40
|
+
queuedDuringSwap: string[];
|
|
41
|
+
/** Usage retired from a previous (replaced) incarnation of this role —
|
|
42
|
+
* kept separate from the live PolicyEngine's usage so org-wide budget
|
|
43
|
+
* enforcement can sum both without double-counting or resetting spend. */
|
|
44
|
+
retiredUsage: {
|
|
45
|
+
tokens: number;
|
|
46
|
+
costUsd: number;
|
|
47
|
+
};
|
|
26
48
|
}
|
|
27
49
|
/** Full checkpoint state for an org */
|
|
28
50
|
export interface OrgCheckpoint {
|
|
@@ -38,13 +60,17 @@ export interface OrgCheckpoint {
|
|
|
38
60
|
roleState: Record<string, RoleCheckpoint>;
|
|
39
61
|
/** Roles not yet spawned (lazy spawn) */
|
|
40
62
|
pendingRoles: string[];
|
|
41
|
-
/**
|
|
42
|
-
|
|
63
|
+
/** TaskDag snapshot (TaskDag.toJSON()), so resume can rehydrate it via
|
|
64
|
+
* TaskDag.fromJSON() instead of discarding all task state. */
|
|
65
|
+
tasks?: OrgTask[];
|
|
43
66
|
/** Checksum for state validation */
|
|
44
67
|
checksum: string;
|
|
45
68
|
}
|
|
46
|
-
/** Current checkpoint format version. Bump on breaking shape changes.
|
|
47
|
-
|
|
69
|
+
/** Current checkpoint format version. Bump on breaking shape changes.
|
|
70
|
+
* v2 (this bump): added generation, respawnCount, effectiveRoleOverrides,
|
|
71
|
+
* queuedDuringSwap, retiredUsage per RoleCheckpoint for mid-run role
|
|
72
|
+
* replacement — see migrateCheckpoint() for the v1→v2 upgrade path. */
|
|
73
|
+
export declare const CHECKPOINT_VERSION = 2;
|
|
48
74
|
/** Checkpoint TTL config */
|
|
49
75
|
export declare const CHECKPOINT_TTL_MS: number;
|
|
50
76
|
/**
|
|
@@ -67,6 +93,18 @@ export declare function validateCheckpoint(checkpoint: OrgCheckpoint): boolean;
|
|
|
67
93
|
* Returns true if checkpoint is stale and should not be used
|
|
68
94
|
*/
|
|
69
95
|
export declare function isCheckpointExpired(checkpoint: OrgCheckpoint, ttlMs?: number): boolean;
|
|
96
|
+
/** Migrate a checkpoint from a known older schema version to
|
|
97
|
+
* CHECKPOINT_VERSION. Returns the checkpoint unchanged if already current,
|
|
98
|
+
* or null if its own integrity check fails or its version is neither
|
|
99
|
+
* current nor a version this build knows how to migrate from — callers
|
|
100
|
+
* must treat null the same as "no usable checkpoint" (see resumeOrg /
|
|
101
|
+
* daemon.ts's resume path, which call this before validateCheckpoint).
|
|
102
|
+
*
|
|
103
|
+
* v1→v2: old per-role state never went through a replacement, so the only
|
|
104
|
+
* correct defaults are generation 0, zero respawns, no config overrides
|
|
105
|
+
* (the org definition's own role config still applies), no swap-queued
|
|
106
|
+
* messages, and zero retired usage. */
|
|
107
|
+
export declare function migrateCheckpoint(checkpoint: OrgCheckpoint): OrgCheckpoint | null;
|
|
70
108
|
/**
|
|
71
109
|
* Generate checksum over checkpoint state.
|
|
72
110
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/orgrt/checkpoint.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/orgrt/checkpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,29 @@
|
|
|
2
2
|
// Semantic checkpoint state management for org runtime - Pattern 3 implementation
|
|
3
3
|
import { createHash } from 'node:crypto';
|
|
4
4
|
import { isRecoverableCloseReason } from './mailbox.js';
|
|
5
|
-
/** Current checkpoint format version. Bump on breaking shape changes.
|
|
6
|
-
|
|
5
|
+
/** Current checkpoint format version. Bump on breaking shape changes.
|
|
6
|
+
* v2 (this bump): added generation, respawnCount, effectiveRoleOverrides,
|
|
7
|
+
* queuedDuringSwap, retiredUsage per RoleCheckpoint for mid-run role
|
|
8
|
+
* replacement — see migrateCheckpoint() for the v1→v2 upgrade path. */
|
|
9
|
+
export const CHECKPOINT_VERSION = 2;
|
|
7
10
|
/** Checkpoint TTL config */
|
|
8
11
|
export const CHECKPOINT_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours default
|
|
12
|
+
/** Diff the slot's effective role against the org definition's original role
|
|
13
|
+
* for the same id, producing exactly the override triple org_respawn_role
|
|
14
|
+
* could have applied — this is what gets persisted and restored on resume,
|
|
15
|
+
* since the org definition itself is not rewritten by a replacement. */
|
|
16
|
+
function diffRoleOverrides(original, effective) {
|
|
17
|
+
const out = {};
|
|
18
|
+
if (effective.runtime !== original?.runtime && effective.runtime)
|
|
19
|
+
out.runtime = effective.runtime;
|
|
20
|
+
if (effective.adapter_config?.model !== original?.adapter_config?.model &&
|
|
21
|
+
effective.adapter_config?.model)
|
|
22
|
+
out.model = effective.adapter_config.model;
|
|
23
|
+
if (effective.adapter_config?.provider !== original?.adapter_config?.provider &&
|
|
24
|
+
effective.adapter_config?.provider)
|
|
25
|
+
out.providerName = effective.adapter_config.provider;
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
9
28
|
/**
|
|
10
29
|
* Extract full checkpoint state from a RunningOrg
|
|
11
30
|
* Called by persistState() to capture complete state for resume
|
|
@@ -13,9 +32,9 @@ export const CHECKPOINT_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours default
|
|
|
13
32
|
export function captureCheckpoint(org, status = 'running') {
|
|
14
33
|
const roleState = {};
|
|
15
34
|
const pendingRoles = [];
|
|
16
|
-
const abandonedRoles = [];
|
|
17
35
|
// Capture state for each running agent
|
|
18
36
|
for (const [roleId, runtime] of org.agents) {
|
|
37
|
+
const slot = org.roleSlots?.get(roleId);
|
|
19
38
|
roleState[roleId] = {
|
|
20
39
|
mailboxQueue: runtime.mailbox.serialize().queue,
|
|
21
40
|
mailboxClosed: runtime.mailbox.isClosed,
|
|
@@ -27,6 +46,13 @@ export function captureCheckpoint(org, status = 'running') {
|
|
|
27
46
|
status: runtime.status,
|
|
28
47
|
error: runtime.error,
|
|
29
48
|
scrollback: runtime.scrollback?.snapshot(),
|
|
49
|
+
generation: slot?.generation ?? 0,
|
|
50
|
+
respawnCount: slot?.respawnCount ?? 0,
|
|
51
|
+
effectiveRoleOverrides: slot
|
|
52
|
+
? diffRoleOverrides(org.def.roles.find((r) => r.id === roleId), slot.effectiveRole)
|
|
53
|
+
: {},
|
|
54
|
+
queuedDuringSwap: slot?.queuedDuringSwap ?? [],
|
|
55
|
+
retiredUsage: slot?.retiredUsage ?? { tokens: 0, costUsd: 0 },
|
|
30
56
|
};
|
|
31
57
|
}
|
|
32
58
|
// Capture pending roles (lazy spawn list)
|
|
@@ -42,7 +68,7 @@ export function captureCheckpoint(org, status = 'running') {
|
|
|
42
68
|
updated: new Date().toISOString(),
|
|
43
69
|
roleState,
|
|
44
70
|
pendingRoles,
|
|
45
|
-
|
|
71
|
+
tasks: org.taskDag?.toJSON(),
|
|
46
72
|
};
|
|
47
73
|
// Generate checksum over all state
|
|
48
74
|
const checksum = generateChecksum(partial);
|
|
@@ -77,6 +103,51 @@ export function isCheckpointExpired(checkpoint, ttlMs = CHECKPOINT_TTL_MS) {
|
|
|
77
103
|
const now = Date.now();
|
|
78
104
|
return now - updated > ttlMs;
|
|
79
105
|
}
|
|
106
|
+
/** Verify a checkpoint's checksum against its OWN stored version/shape,
|
|
107
|
+
* without gating on CHECKPOINT_VERSION. generateChecksum is schema-agnostic
|
|
108
|
+
* (it hashes whatever object shape it's given), so this correctly validates
|
|
109
|
+
* an old-shape checkpoint on its own terms before any migration touches it. */
|
|
110
|
+
function verifyStoredChecksum(checkpoint) {
|
|
111
|
+
const { checksum, ...state } = checkpoint;
|
|
112
|
+
return checksum === generateChecksum(state);
|
|
113
|
+
}
|
|
114
|
+
/** Migrate a checkpoint from a known older schema version to
|
|
115
|
+
* CHECKPOINT_VERSION. Returns the checkpoint unchanged if already current,
|
|
116
|
+
* or null if its own integrity check fails or its version is neither
|
|
117
|
+
* current nor a version this build knows how to migrate from — callers
|
|
118
|
+
* must treat null the same as "no usable checkpoint" (see resumeOrg /
|
|
119
|
+
* daemon.ts's resume path, which call this before validateCheckpoint).
|
|
120
|
+
*
|
|
121
|
+
* v1→v2: old per-role state never went through a replacement, so the only
|
|
122
|
+
* correct defaults are generation 0, zero respawns, no config overrides
|
|
123
|
+
* (the org definition's own role config still applies), no swap-queued
|
|
124
|
+
* messages, and zero retired usage. */
|
|
125
|
+
export function migrateCheckpoint(checkpoint) {
|
|
126
|
+
if (checkpoint.version === CHECKPOINT_VERSION)
|
|
127
|
+
return checkpoint;
|
|
128
|
+
if (checkpoint.version !== 1)
|
|
129
|
+
return null;
|
|
130
|
+
if (!verifyStoredChecksum(checkpoint))
|
|
131
|
+
return null;
|
|
132
|
+
const roleState = {};
|
|
133
|
+
for (const [roleId, old] of Object.entries(checkpoint.roleState)) {
|
|
134
|
+
roleState[roleId] = {
|
|
135
|
+
...old,
|
|
136
|
+
generation: 0,
|
|
137
|
+
respawnCount: 0,
|
|
138
|
+
effectiveRoleOverrides: {},
|
|
139
|
+
queuedDuringSwap: [],
|
|
140
|
+
retiredUsage: { tokens: 0, costUsd: 0 },
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const { checksum: _oldChecksum, ...rest } = checkpoint;
|
|
144
|
+
const migrated = {
|
|
145
|
+
...rest,
|
|
146
|
+
version: CHECKPOINT_VERSION,
|
|
147
|
+
roleState,
|
|
148
|
+
};
|
|
149
|
+
return { ...migrated, checksum: generateChecksum(migrated) };
|
|
150
|
+
}
|
|
80
151
|
/**
|
|
81
152
|
* Generate checksum over checkpoint state.
|
|
82
153
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/orgrt/checkpoint.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,kFAAkF;AAElF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/orgrt/checkpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AgentMessage, type AgentRunArgs, type AgentRunner } from './agent-runner.js';
|
|
2
2
|
/**
|
|
3
3
|
* One parsed codex event, normalized for incremental streaming.
|
|
4
4
|
* - 'assistant': rawText is one whole agent_message (fences intact) for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-runner.d.ts","sourceRoot":"","sources":["../../../src/orgrt/codex-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex-runner.d.ts","sourceRoot":"","sources":["../../../src/orgrt/codex-runner.ts"],"names":[],"mappings":"AA4IA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,mBAAmB,CAAC;AA0E3B;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD,qBAAa,gBAAiB,YAAW,WAAW;IACtC,OAAO,CAAC,QAAQ,CAAC;IAA7B,YAAoB,QAAQ,CAAC,EAAE,MAAM,YAAA,EAAI;IAElC,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CA8G1D;IAED;;;;;;;OAOG;YACY,UAAU;CAgO1B"}
|