@goah/cli 0.11.4 → 0.13.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/cli.js +165 -66
- package/dist/cli.js.map +1 -1
- package/dist/console/assets/index-3sYrDMmt.css +1 -0
- package/dist/console/assets/index-Rtc_B7cs.js +52 -0
- package/dist/console/assets/index-Rtc_B7cs.js.map +1 -0
- package/dist/console/index.html +2 -2
- package/dist/control.d.ts +13 -13
- package/dist/control.d.ts.map +1 -1
- package/dist/control.js +77 -50
- package/dist/control.js.map +1 -1
- package/dist/index.d.ts +6 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +156 -28
- package/dist/index.js.map +1 -1
- package/dist/live-config.js +2 -2
- package/dist/live-config.js.map +1 -1
- package/dist/prompt-queue.d.ts.map +1 -1
- package/dist/prompt-queue.js +5 -0
- package/dist/prompt-queue.js.map +1 -1
- package/dist/setup-wizard.d.ts +13 -2
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +87 -63
- package/dist/setup-wizard.js.map +1 -1
- package/dist/thread-inspect.d.ts +47 -0
- package/dist/thread-inspect.d.ts.map +1 -0
- package/dist/thread-inspect.js +78 -0
- package/dist/thread-inspect.js.map +1 -0
- package/dist/transcript.d.ts +2 -0
- package/dist/transcript.d.ts.map +1 -0
- package/dist/transcript.js +2 -0
- package/dist/transcript.js.map +1 -0
- package/dist/tui-theme.d.ts +1 -0
- package/dist/tui-theme.d.ts.map +1 -1
- package/dist/tui-theme.js +1 -0
- package/dist/tui-theme.js.map +1 -1
- package/dist/tui.d.ts +16 -3
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +332 -80
- package/dist/tui.js.map +1 -1
- package/dist/update.d.ts +1 -0
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +15 -7
- package/dist/update.js.map +1 -1
- package/dist/web-console.d.ts +1 -1
- package/dist/web-console.d.ts.map +1 -1
- package/dist/web-console.js +27 -37
- package/dist/web-console.js.map +1 -1
- package/dist/welcome.d.ts +2 -2
- package/dist/welcome.d.ts.map +1 -1
- package/dist/welcome.js +24 -36
- package/dist/welcome.js.map +1 -1
- package/node_modules/goah-ledger-contract/dist/execution.d.ts +272 -130
- package/node_modules/goah-ledger-contract/dist/execution.d.ts.map +1 -1
- package/node_modules/goah-ledger-contract/dist/execution.js +31 -19
- package/node_modules/goah-ledger-contract/dist/execution.js.map +1 -1
- package/node_modules/goah-ledger-contract/dist/index.d.ts +1 -2
- package/node_modules/goah-ledger-contract/dist/index.d.ts.map +1 -1
- package/node_modules/goah-ledger-contract/dist/index.js +1 -2
- package/node_modules/goah-ledger-contract/dist/index.js.map +1 -1
- package/node_modules/goah-ledger-contract/dist/kernel.d.ts +1 -1
- package/node_modules/goah-ledger-contract/dist/kernel.d.ts.map +1 -1
- package/node_modules/goah-ledger-contract/dist/kernel.js +1 -1
- package/node_modules/goah-ledger-contract/dist/kernel.js.map +1 -1
- package/node_modules/goah-ledger-contract/dist/transcript.d.ts +63 -0
- package/node_modules/goah-ledger-contract/dist/transcript.d.ts.map +1 -0
- package/node_modules/goah-ledger-contract/dist/transcript.js +115 -0
- package/node_modules/goah-ledger-contract/dist/transcript.js.map +1 -0
- package/node_modules/goah-ledger-contract/package.json +3 -4
- package/node_modules/goah-ledger-sqlite/dist/index.d.ts +32 -23
- package/node_modules/goah-ledger-sqlite/dist/index.d.ts.map +1 -1
- package/node_modules/goah-ledger-sqlite/dist/index.js +764 -394
- package/node_modules/goah-ledger-sqlite/dist/index.js.map +1 -1
- package/node_modules/goah-ledger-sqlite/package.json +2 -2
- package/node_modules/goah-runner-pi/dist/configurator.d.ts.map +1 -1
- package/node_modules/goah-runner-pi/dist/configurator.js +186 -30
- package/node_modules/goah-runner-pi/dist/configurator.js.map +1 -1
- package/node_modules/goah-runner-pi/dist/credential-store.d.ts +2 -0
- package/node_modules/goah-runner-pi/dist/credential-store.d.ts.map +1 -1
- package/node_modules/goah-runner-pi/dist/credential-store.js +117 -23
- package/node_modules/goah-runner-pi/dist/credential-store.js.map +1 -1
- package/node_modules/goah-runner-pi/dist/index.d.ts +18 -6
- package/node_modules/goah-runner-pi/dist/index.d.ts.map +1 -1
- package/node_modules/goah-runner-pi/dist/index.js +97 -12
- package/node_modules/goah-runner-pi/dist/index.js.map +1 -1
- package/node_modules/goah-runner-pi/dist/pi-worker.d.ts +6 -2
- package/node_modules/goah-runner-pi/dist/pi-worker.d.ts.map +1 -1
- package/node_modules/goah-runner-pi/dist/pi-worker.js +232 -70
- package/node_modules/goah-runner-pi/dist/pi-worker.js.map +1 -1
- package/node_modules/goah-runner-pi/dist/steering-no-ack.test-fixture.d.ts +2 -0
- package/node_modules/goah-runner-pi/dist/steering-no-ack.test-fixture.d.ts.map +1 -0
- package/node_modules/goah-runner-pi/dist/steering-no-ack.test-fixture.js +3 -0
- package/node_modules/goah-runner-pi/dist/steering-no-ack.test-fixture.js.map +1 -0
- package/node_modules/goah-runner-pi/dist/steering-reject.test-fixture.d.ts +2 -0
- package/node_modules/goah-runner-pi/dist/steering-reject.test-fixture.d.ts.map +1 -0
- package/node_modules/goah-runner-pi/dist/steering-reject.test-fixture.js +5 -0
- package/node_modules/goah-runner-pi/dist/steering-reject.test-fixture.js.map +1 -0
- package/node_modules/goah-runner-pi/dist/steering-worker.test-fixture.d.ts +2 -0
- package/node_modules/goah-runner-pi/dist/steering-worker.test-fixture.d.ts.map +1 -0
- package/node_modules/goah-runner-pi/dist/steering-worker.test-fixture.js +5 -0
- package/node_modules/goah-runner-pi/dist/steering-worker.test-fixture.js.map +1 -0
- package/node_modules/goah-runner-pi/dist/test-helpers.d.ts +1 -1
- package/node_modules/goah-runner-pi/dist/test-helpers.d.ts.map +1 -1
- package/node_modules/goah-runner-pi/dist/test-helpers.js +3 -1
- package/node_modules/goah-runner-pi/dist/test-helpers.js.map +1 -1
- package/node_modules/goah-runner-pi/dist/verification-worker.d.ts.map +1 -1
- package/node_modules/goah-runner-pi/dist/verification-worker.js +3 -5
- package/node_modules/goah-runner-pi/dist/verification-worker.js.map +1 -1
- package/node_modules/goah-runner-pi/package.json +2 -2
- package/node_modules/goah-supervisor/dist/context-view.d.ts +4 -5
- package/node_modules/goah-supervisor/dist/context-view.d.ts.map +1 -1
- package/node_modules/goah-supervisor/dist/context-view.js +7 -20
- package/node_modules/goah-supervisor/dist/context-view.js.map +1 -1
- package/node_modules/goah-supervisor/dist/index.d.ts +38 -36
- package/node_modules/goah-supervisor/dist/index.d.ts.map +1 -1
- package/node_modules/goah-supervisor/dist/index.js +762 -575
- package/node_modules/goah-supervisor/dist/index.js.map +1 -1
- package/node_modules/goah-supervisor/dist/roles.d.ts +2 -1
- package/node_modules/goah-supervisor/dist/roles.d.ts.map +1 -1
- package/node_modules/goah-supervisor/dist/roles.js +20 -5
- package/node_modules/goah-supervisor/dist/roles.js.map +1 -1
- package/node_modules/goah-supervisor/dist/verification.d.ts +8 -29
- package/node_modules/goah-supervisor/dist/verification.d.ts.map +1 -1
- package/node_modules/goah-supervisor/dist/verification.js +71 -46
- package/node_modules/goah-supervisor/dist/verification.js.map +1 -1
- package/node_modules/goah-supervisor/package.json +2 -2
- package/node_modules/goah-testkit/dist/faux-runner-worker.js +16 -9
- package/node_modules/goah-testkit/dist/faux-runner-worker.js.map +1 -1
- package/node_modules/goah-testkit/dist/index.d.ts +13 -16
- package/node_modules/goah-testkit/dist/index.d.ts.map +1 -1
- package/node_modules/goah-testkit/dist/index.js +27 -44
- package/node_modules/goah-testkit/dist/index.js.map +1 -1
- package/node_modules/goah-testkit/package.json +5 -5
- package/package.json +7 -8
- package/dist/console/assets/index-BJTGvlCH.js +0 -52
- package/dist/console/assets/index-BJTGvlCH.js.map +0 -1
- package/dist/console/assets/index-msBn41Cl.css +0 -1
- package/dist/inspect.d.ts +0 -61
- package/dist/inspect.d.ts.map +0 -1
- package/dist/inspect.js +0 -110
- package/dist/inspect.js.map +0 -1
- package/dist/metrics.d.ts +0 -2
- package/dist/metrics.d.ts.map +0 -1
- package/dist/metrics.js +0 -2
- package/dist/metrics.js.map +0 -1
- package/dist/session.d.ts +0 -2
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -2
- package/dist/session.js.map +0 -1
- package/node_modules/goah-ledger-contract/dist/metrics.d.ts +0 -40
- package/node_modules/goah-ledger-contract/dist/metrics.d.ts.map +0 -1
- package/node_modules/goah-ledger-contract/dist/metrics.js +0 -25
- package/node_modules/goah-ledger-contract/dist/metrics.js.map +0 -1
- package/node_modules/goah-ledger-contract/dist/session.d.ts +0 -63
- package/node_modules/goah-ledger-contract/dist/session.d.ts.map +0 -1
- package/node_modules/goah-ledger-contract/dist/session.js +0 -115
- package/node_modules/goah-ledger-contract/dist/session.js.map +0 -1
- package/node_modules/goah-testkit/dist/mock-connector-worker.d.ts +0 -2
- package/node_modules/goah-testkit/dist/mock-connector-worker.d.ts.map +0 -1
- package/node_modules/goah-testkit/dist/mock-connector-worker.js +0 -29
- package/node_modules/goah-testkit/dist/mock-connector-worker.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { goalRoute, humanInboxRoute, specialistInboxRoute } from "goah-ledger-contract";
|
|
2
3
|
import { spawn } from "node:child_process";
|
|
3
4
|
export class ProcessVerifierModel {
|
|
4
5
|
spec;
|
|
5
6
|
constructor(spec) {
|
|
6
7
|
this.spec = spec;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
+
verifyTurn(input) { return this.#call("verify_turn", input); }
|
|
9
10
|
blindAudit(facts) { return this.#call("blind_audit", { facts }); }
|
|
10
|
-
reasonAudit(input) { return this.#call("reason_audit", input); }
|
|
11
11
|
async #call(operation, input) {
|
|
12
12
|
const env = {};
|
|
13
13
|
for (const name of ["PATH", "TMPDIR", "TMP", "TEMP", "SYSTEMROOT"])
|
|
@@ -17,17 +17,33 @@ export class ProcessVerifierModel {
|
|
|
17
17
|
let stdout = "";
|
|
18
18
|
let stderr = "";
|
|
19
19
|
let timedOut = false;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
child.stdin.end(`${JSON.stringify({ operation, input })}\n`);
|
|
23
|
-
const timer = setTimeout(() => { timedOut = true; if (child.pid) {
|
|
20
|
+
let outputOverflow = false;
|
|
21
|
+
const kill = () => { if (child.pid) {
|
|
24
22
|
try {
|
|
25
23
|
process.kill(process.platform === "win32" ? child.pid : -child.pid, "SIGKILL");
|
|
26
24
|
}
|
|
27
25
|
catch { }
|
|
28
|
-
} }
|
|
29
|
-
const
|
|
30
|
-
|
|
26
|
+
} };
|
|
27
|
+
const append = (channel, chunk) => { const text = chunk.toString(); const remaining = Math.max(0, 1_000_000 - stdout.length - stderr.length); if (channel === "stdout")
|
|
28
|
+
stdout += text.slice(0, remaining);
|
|
29
|
+
else
|
|
30
|
+
stderr += text.slice(0, remaining); if (text.length > remaining && !outputOverflow) {
|
|
31
|
+
outputOverflow = true;
|
|
32
|
+
kill();
|
|
33
|
+
} };
|
|
34
|
+
child.stdout.on("data", (chunk) => append("stdout", chunk));
|
|
35
|
+
child.stderr.on("data", (chunk) => append("stderr", chunk));
|
|
36
|
+
child.stdin.end(`${JSON.stringify({ operation, input })}\n`);
|
|
37
|
+
const timer = setTimeout(() => { timedOut = true; kill(); }, this.spec.timeoutMs ?? 60_000);
|
|
38
|
+
let code;
|
|
39
|
+
try {
|
|
40
|
+
code = await new Promise((resolve, reject) => { child.once("error", reject); child.once("close", resolve); });
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
}
|
|
45
|
+
if (outputOverflow)
|
|
46
|
+
throw new Error("verifier output exceeded 1 MB");
|
|
31
47
|
if (code !== 0)
|
|
32
48
|
throw new Error(timedOut ? "verifier process timed out" : stderr.trim() || `verifier exited ${code}`);
|
|
33
49
|
return JSON.parse(stdout);
|
|
@@ -42,33 +58,56 @@ export class VerificationPlane {
|
|
|
42
58
|
this.supervisor = supervisor;
|
|
43
59
|
this.model = model;
|
|
44
60
|
}
|
|
45
|
-
async
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this
|
|
52
|
-
|
|
61
|
+
async verifyTurn(turnId) {
|
|
62
|
+
const turn = this.ledger.turn(turnId);
|
|
63
|
+
if (!turn)
|
|
64
|
+
throw new Error(`Turn not found: ${turnId}`);
|
|
65
|
+
if (turn.status === "in_progress")
|
|
66
|
+
throw new Error("cannot verify an in-progress Turn");
|
|
67
|
+
const trace = this.ledger.readStream(`turn:${turnId}`);
|
|
68
|
+
const handoff = this.ledger.turnItems(turnId).findLast((item) => item.type === "handoff")?.data ?? null;
|
|
69
|
+
const result = await this.model.verifyTurn({ turnId, handoff, trace });
|
|
70
|
+
this.#validate(result);
|
|
71
|
+
const thread = this.ledger.thread(turn.threadId);
|
|
72
|
+
if (!thread)
|
|
73
|
+
throw new Error("verified Turn has no Thread");
|
|
74
|
+
const level = result.findings.length ? "decision" : "fyi";
|
|
75
|
+
const body = { type: "verification_result", turnId, agent: thread.agent, findings: result.findings, tokensUsed: result.tokensUsed };
|
|
76
|
+
let route;
|
|
77
|
+
if (turn.bindingKind === "goal") {
|
|
78
|
+
const goal = this.ledger.goal(turn.goalId);
|
|
79
|
+
if (!goal || goal.owner !== thread.agent)
|
|
80
|
+
throw new Error("verified Goal Turn no longer matches its owner");
|
|
81
|
+
route = goalRoute(turn.goalId);
|
|
82
|
+
}
|
|
83
|
+
else if (turn.bindingKind === "human") {
|
|
84
|
+
if (thread.agent !== "ceo")
|
|
85
|
+
throw new Error("verified Human Turn is not owned by CEO");
|
|
86
|
+
route = humanInboxRoute();
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
if (this.supervisor.agentRole(thread.agent) !== turn.specialistRole)
|
|
90
|
+
throw new Error("verified Specialist Turn does not match its Agent profile");
|
|
91
|
+
route = specialistInboxRoute(turn.specialistRole);
|
|
92
|
+
}
|
|
93
|
+
const mail = { id: this.#mailId("verification", turnId, thread.agent, result), to: thread.agent, from: "verifier", level, ...route, body, readAt: null };
|
|
94
|
+
this.ledger.putMail(mail, "verifier");
|
|
53
95
|
return result;
|
|
54
96
|
}
|
|
55
97
|
async auditGlobal(sinceSeq = 0) {
|
|
56
|
-
const facts = this.ledger.eventsSince(sinceSeq).filter((event) => !["handoff.recorded", "runner.note"].includes(event.type))
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.#apply(reasoned, "audit");
|
|
62
|
-
this.ledger.appendEvent({ streamId: controlStream("audit"), ts: this.supervisor.clock.now().toISOString(), actor: "audit", type: "audit.completed", data: { sinceSeq, blindFindings: blind.findings.length, reasonedFindings: reasoned.findings.length, tokensUsed: blind.tokensUsed + reasoned.tokensUsed } });
|
|
63
|
-
return { blind, reasoned };
|
|
98
|
+
const facts = this.ledger.eventsSince(sinceSeq).filter((event) => !["handoff.recorded", "runner.note"].includes(event.type));
|
|
99
|
+
const result = await this.model.blindAudit(facts);
|
|
100
|
+
this.#validate(result);
|
|
101
|
+
this.ledger.putMail({ id: this.#mailId("audit", String(sinceSeq), "ceo", result), to: "ceo", from: "audit", level: result.findings.length ? "decision" : "fyi", ...humanInboxRoute(), body: { type: "audit_result", sinceSeq, findings: result.findings, tokensUsed: result.tokensUsed }, readAt: null }, "audit");
|
|
102
|
+
return result;
|
|
64
103
|
}
|
|
65
|
-
#
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
104
|
+
#validate(result) {
|
|
105
|
+
const evidence = new Set(this.ledger.events().map((event) => event.seq));
|
|
106
|
+
for (const finding of result.findings)
|
|
107
|
+
if (!finding.id.trim() || finding.evidence.length === 0 || finding.evidence.some((seq) => !evidence.has(seq)))
|
|
108
|
+
throw new Error("verification finding requires an id and existing evidence");
|
|
71
109
|
}
|
|
110
|
+
#mailId(kind, source, recipient, result) { const digest = createHash("sha256").update(JSON.stringify(result)).digest("hex").slice(0, 16); return `${kind}:${source}:${recipient}:${digest}`; }
|
|
72
111
|
}
|
|
73
112
|
export function evaluateVerification(labels, predictedIds) {
|
|
74
113
|
const predicted = new Set(predictedIds);
|
|
@@ -93,18 +132,4 @@ export function calibrateVerificationThreshold(labels, predictions, minimumPreci
|
|
|
93
132
|
}
|
|
94
133
|
return selected;
|
|
95
134
|
}
|
|
96
|
-
function blindFact(event) {
|
|
97
|
-
if (!event.type.startsWith("action."))
|
|
98
|
-
return event;
|
|
99
|
-
const data = structuredClone(event.data);
|
|
100
|
-
const snapshot = data.snapshot;
|
|
101
|
-
if (snapshot) {
|
|
102
|
-
delete snapshot.reason;
|
|
103
|
-
delete snapshot.evidence;
|
|
104
|
-
delete snapshot.auditAdvice;
|
|
105
|
-
}
|
|
106
|
-
delete data.reason;
|
|
107
|
-
delete data.evidence;
|
|
108
|
-
return { ...event, data: data };
|
|
109
|
-
}
|
|
110
135
|
//# sourceMappingURL=verification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "goah-supervisor",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.13.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -21,6 +21,6 @@
|
|
|
21
21
|
"types": "./dist/index.d.ts",
|
|
22
22
|
"exports": "./dist/index.js",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"goah-ledger-contract": "0.
|
|
24
|
+
"goah-ledger-contract": "0.13.0"
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -6,8 +6,8 @@ await runProcessWorker(async (request, emit, rpc) => {
|
|
|
6
6
|
writeFileSync(process.env.GOAH_FAUX_CONTEXT_FILE, JSON.stringify(request.context));
|
|
7
7
|
const byAgent = JSON.parse(process.env.GOAH_FAUX_STEPS_BY_AGENT ?? "{}");
|
|
8
8
|
const byTrigger = JSON.parse(process.env.GOAH_FAUX_STEPS_BY_TRIGGER ?? "{}");
|
|
9
|
-
const triggerSteps = Object.entries(byTrigger).find(([
|
|
10
|
-
const steps = triggerSteps ?? byAgent[request.
|
|
9
|
+
const triggerSteps = Object.entries(byTrigger).find(([selector]) => { const separator = selector.indexOf("|"); const agent = separator < 0 ? null : selector.slice(0, separator); const prefix = separator < 0 ? selector : selector.slice(separator + 1); return (!agent || agent === request.agent) && request.sourceWakeTriggers?.some((trigger) => trigger.triggerRef.startsWith(prefix)); })?.[1];
|
|
10
|
+
const steps = triggerSteps ?? byAgent[request.agent] ?? JSON.parse(process.env.GOAH_FAUX_STEPS ?? "[]");
|
|
11
11
|
let goalBinding = request.turn?.goalBinding;
|
|
12
12
|
let recordUpdated = false;
|
|
13
13
|
for (const step of steps) {
|
|
@@ -35,13 +35,23 @@ await runProcessWorker(async (request, emit, rpc) => {
|
|
|
35
35
|
if (step.response !== undefined)
|
|
36
36
|
return { outcome: "response", response: { content: step.response } };
|
|
37
37
|
if (step.handoff) {
|
|
38
|
+
const draft = step.handoff;
|
|
38
39
|
if (goalBinding && !recordUpdated) {
|
|
39
40
|
const current = await rpc("work_record.read", { goalId: goalBinding.goalId });
|
|
40
41
|
const record = current && typeof current === "object" && !Array.isArray(current) ? current : {};
|
|
41
42
|
const evidence = sourceSeqs(request.context);
|
|
42
|
-
await rpc("work_record.update", { expectedRevision: Number(record.recordRevision ?? 0), content: handoffRecord(
|
|
43
|
+
await rpc("work_record.update", { expectedRevision: Number(record.recordRevision ?? 0), content: handoffRecord(draft.handoff, request.execution.id), reason: "record faux Goal progress", evidence: evidence.length ? [Math.max(...evidence)] : [] });
|
|
43
44
|
}
|
|
44
|
-
|
|
45
|
+
const validation = await rpc("goal.handoff.validate", { handoff: draft.handoff, candidateMessage: draft.response.content });
|
|
46
|
+
emit({ type: "message.assistant.completed", data: { message: { id: `faux:${request.execution.id}:handoff:${validation.attemptId}`, role: "assistant", content: [{ type: "text", text: draft.response.content }], stopReason: "toolUse" }, completionIntent: "handoff", commitState: "provisional" } });
|
|
47
|
+
if (!validation.accepted) {
|
|
48
|
+
emit({ type: "runner.handoff_rejected", data: { attemptId: validation.attemptId, issues: validation.issues } });
|
|
49
|
+
if (validation.fatal)
|
|
50
|
+
return { outcome: "abnormal", reason: validation.issues.map((issue) => issue.message).join("; ") };
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const output = { validationAttemptId: validation.attemptId, validationToken: validation.token, handoff: draft.handoff };
|
|
54
|
+
return { outcome: "handoff", output };
|
|
45
55
|
}
|
|
46
56
|
}
|
|
47
57
|
return { outcome: "abnormal", reason: "faux worker stopped without handoff" };
|
|
@@ -66,10 +76,7 @@ function bindingFrom(value) {
|
|
|
66
76
|
const binding = value.goalBinding;
|
|
67
77
|
return typeof binding.goalId === "string" && typeof binding.goalRevision === "number" ? { goalId: binding.goalId, goalRevision: binding.goalRevision } : undefined;
|
|
68
78
|
}
|
|
69
|
-
function handoffRecord(
|
|
70
|
-
|
|
71
|
-
return `# Current State\n\nGoal outcome: ${output.handoff.outcome}.\n\n# Observations\n\nSee Ledger evidence ${output.handoff.evidence.join(", ") || "none"}.\n\n# Work Completed\n\nRecorded Goal progress.\n\n# Decisions\n\nRecorded by the faux Goal runner in ${wakeId}.\n\n# Blockers\n\n${output.handoff.outcome === "blocked" ? "Blocked." : "None."}\n\n# Next Steps\n\nContinue from the current Goal state.\n`;
|
|
72
|
-
const list = (values) => values.length ? values.map((value) => `- ${value}`).join("\n") : "None.";
|
|
73
|
-
return `# Current State\n\n${output.handoff.blocker ?? "Work progressed."}\n\n# Observations\n\n${list(output.handoff.observations)}\n\n# Work Completed\n\n${list(output.handoff.results)}\n\n# Decisions\n\nRecorded by the faux Goal runner in ${wakeId}.\n\n# Blockers\n\n${output.handoff.blocker ?? "None."}\n\n# Next Steps\n\n${list(output.handoff.nextSteps)}\n`;
|
|
79
|
+
function handoffRecord(handoff, turnId) {
|
|
80
|
+
return `# Current State\n\nGoal outcome: ${handoff.outcome}.\n\n# Observations\n\nSee Ledger evidence ${handoff.evidence.join(", ") || "none"}.\n\n# Work Completed\n\nRecorded Goal progress.\n\n# Decisions\n\nRecorded by the faux Goal runner in ${turnId}.\n\n# Blockers\n\n${handoff.outcome === "blocked" ? "Blocked." : "None."}\n\n# Next Steps\n\nContinue from the current Goal state.\n`;
|
|
74
81
|
}
|
|
75
82
|
//# sourceMappingURL=faux-runner-worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faux-runner-worker.js","sourceRoot":"","sources":["../src/faux-runner-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"faux-runner-worker.js","sourceRoot":"","sources":["../src/faux-runner-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type AgentHandoff, type Clock, type JsonValue, type HandoffValidationResult, type Ledger, type RunRequest } from "goah-ledger-contract";
|
|
2
2
|
import { SqliteLedger, type SqliteLedgerOptions } from "goah-ledger-sqlite";
|
|
3
|
-
import type { PiDriver,
|
|
3
|
+
import type { PiDriver, PiRunnerSession } from "goah-runner-pi";
|
|
4
4
|
export declare class SimulatedClock implements Clock {
|
|
5
5
|
#private;
|
|
6
6
|
constructor(value?: string);
|
|
@@ -20,29 +20,26 @@ export interface FauxStep {
|
|
|
20
20
|
path: string;
|
|
21
21
|
content: string;
|
|
22
22
|
};
|
|
23
|
-
handoff?:
|
|
23
|
+
handoff?: {
|
|
24
|
+
response: {
|
|
25
|
+
content: string;
|
|
26
|
+
};
|
|
27
|
+
handoff: AgentHandoff;
|
|
28
|
+
};
|
|
24
29
|
stop?: boolean;
|
|
25
30
|
crash?: string;
|
|
26
|
-
effect?: (request: RunRequest
|
|
31
|
+
effect?: (request: RunRequest, feedback: Exclude<HandoffValidationResult, {
|
|
32
|
+
accepted: true;
|
|
33
|
+
}> | null) => void;
|
|
27
34
|
}
|
|
28
35
|
export declare class FauxPiDriver implements PiDriver {
|
|
29
36
|
#private;
|
|
30
37
|
readonly clock: SimulatedClock;
|
|
31
38
|
readonly directory: string;
|
|
32
39
|
readonly requests: RunRequest[];
|
|
33
|
-
constructor(clock: SimulatedClock,
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
export declare class MockConnector {
|
|
37
|
-
#private;
|
|
38
|
-
readonly statePath: string;
|
|
39
|
-
readonly manifest: ConnectorManifest;
|
|
40
|
-
readonly spec: ConnectorProcessSpec;
|
|
41
|
-
constructor(connector?: string, kind?: string);
|
|
42
|
-
get dispatched(): string[];
|
|
43
|
-
set failAfterEffect(value: boolean);
|
|
40
|
+
constructor(clock: SimulatedClock, runnerSessions: FauxStep[][], directory?: string);
|
|
41
|
+
createRunnerSession(request: RunRequest): Promise<PiRunnerSession>;
|
|
44
42
|
}
|
|
45
|
-
export declare function mockConnectorWorkerPath(): string;
|
|
46
43
|
export declare function fauxRunnerWorkerPath(): string;
|
|
47
44
|
export interface LedgerConformanceFactory {
|
|
48
45
|
(clock: Clock): Ledger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC5B,KAAK,MAAM,EACX,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEhE,qBAAa,cAAe,YAAW,KAAK;;gBAE9B,KAAK,SAA6B;IAC9C,GAAG,IAAI,IAAI;IACX,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IACzB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CACzB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAAkD;AAErI,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,OAAO,CAAC,EAAE;QAAC,QAAQ,EAAC;YAAC,OAAO,EAAC,MAAM,CAAA;SAAC,CAAC;QAAA,OAAO,EAAC,YAAY,CAAA;KAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAC,QAAQ,EAAC,OAAO,CAAC,uBAAuB,EAAC;QAAC,QAAQ,EAAC,IAAI,CAAA;KAAC,CAAC,GAAC,IAAI,KAAK,IAAI,CAAC;CACvG;AAED,qBAAa,YAAa,YAAW,QAAQ;;IAG/B,QAAQ,CAAC,KAAK,EAAE,cAAc;IAAgC,QAAQ,CAAC,SAAS;IAF5F,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAM;gBAEhB,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAW,SAAS,SAAgB;IACtG,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC;CAoBzE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAA+E;AAE7H,MAAM,WAAW,wBAAwB;IAAG,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE;AAEpE,0FAA0F;AAC1F,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CA2B9E"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { mkdirSync,
|
|
2
|
-
import { tmpdir } from "node:os";
|
|
1
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
3
2
|
import { dirname, join } from "node:path";
|
|
4
3
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import {
|
|
4
|
+
import { specialistBinding, } from "goah-ledger-contract";
|
|
6
5
|
import { SqliteLedger } from "goah-ledger-sqlite";
|
|
7
6
|
export class SimulatedClock {
|
|
8
7
|
#value;
|
|
@@ -16,15 +15,16 @@ export class FauxPiDriver {
|
|
|
16
15
|
clock;
|
|
17
16
|
directory;
|
|
18
17
|
requests = [];
|
|
19
|
-
#
|
|
20
|
-
constructor(clock,
|
|
18
|
+
#runnerSessions;
|
|
19
|
+
constructor(clock, runnerSessions, directory = process.cwd()) {
|
|
21
20
|
this.clock = clock;
|
|
22
21
|
this.directory = directory;
|
|
23
|
-
this.#
|
|
22
|
+
this.#runnerSessions = runnerSessions.map((steps) => [...steps]);
|
|
24
23
|
}
|
|
25
|
-
async
|
|
24
|
+
async createRunnerSession(request) {
|
|
26
25
|
this.requests.push(request);
|
|
27
|
-
const steps = this.#
|
|
26
|
+
const steps = this.#runnerSessions.shift() ?? [];
|
|
27
|
+
let validationFeedback = null;
|
|
28
28
|
return {
|
|
29
29
|
step: async () => {
|
|
30
30
|
const step = steps.shift();
|
|
@@ -37,34 +37,17 @@ export class FauxPiDriver {
|
|
|
37
37
|
mkdirSync(dirname(path), { recursive: true });
|
|
38
38
|
writeFileSync(path, step.write.content);
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
const feedback = validationFeedback;
|
|
41
|
+
validationFeedback = null;
|
|
42
|
+
step.effect?.(request, feedback);
|
|
41
43
|
if (step.crash)
|
|
42
44
|
throw new Error(step.crash);
|
|
43
45
|
return { ...(step.trace ? { trace: step.trace } : {}), ...(step.response !== undefined ? { response: { content: step.response } } : {}), ...(step.handoff ? { handoff: step.handoff } : {}), ...(step.stop ? { stopped: true } : {}) };
|
|
44
46
|
},
|
|
45
|
-
close: async () => undefined,
|
|
47
|
+
feedback: async (value) => { validationFeedback = value; }, close: async () => undefined,
|
|
46
48
|
};
|
|
47
49
|
}
|
|
48
50
|
}
|
|
49
|
-
export class MockConnector {
|
|
50
|
-
statePath = join(tmpdir(), `goah-mock-connector-${crypto.randomUUID()}.json`);
|
|
51
|
-
manifest;
|
|
52
|
-
spec;
|
|
53
|
-
constructor(connector = "mock", kind = "mock.write") {
|
|
54
|
-
this.manifest = {
|
|
55
|
-
contractVersion: CONTRACT_VERSION,
|
|
56
|
-
connector,
|
|
57
|
-
dryRun: true,
|
|
58
|
-
capabilities: [{ kind, nativeIdempotency: true, query: "by_idempotency_key", automaticRetry: false, risk: "reversible" }],
|
|
59
|
-
};
|
|
60
|
-
writeFileSync(this.statePath, JSON.stringify({ dispatched: [], failAfterEffect: false }));
|
|
61
|
-
this.spec = { manifest: this.manifest, command: process.execPath, args: [mockConnectorWorkerPath()], env: { GOAH_MOCK_CONNECTOR_STATE: this.statePath }, timeoutMs: 2_000 };
|
|
62
|
-
}
|
|
63
|
-
get dispatched() { return this.#state().dispatched; }
|
|
64
|
-
set failAfterEffect(value) { const state = this.#state(); state.failAfterEffect = value; writeFileSync(this.statePath, JSON.stringify(state)); }
|
|
65
|
-
#state() { return JSON.parse(readFileSync(this.statePath, "utf8")); }
|
|
66
|
-
}
|
|
67
|
-
export function mockConnectorWorkerPath() { return fileURLToPath(new URL("./mock-connector-worker.js", import.meta.url)); }
|
|
68
51
|
export function fauxRunnerWorkerPath() { return fileURLToPath(new URL("./faux-runner-worker.js", import.meta.url)); }
|
|
69
52
|
/** Public, storage-independent contract checks for third-party Ledger implementations. */
|
|
70
53
|
export function assertLedgerConformance(create) {
|
|
@@ -85,28 +68,28 @@ export function assertLedgerConformance(create) {
|
|
|
85
68
|
}
|
|
86
69
|
if (!reopened)
|
|
87
70
|
throw new Error("ledger conformance: completed goal was reopened");
|
|
88
|
-
const first = ledger.enqueueWake({ id: "z",
|
|
89
|
-
ledger.
|
|
90
|
-
|
|
71
|
+
const first = ledger.enqueueWake({ id: "z", ...specialistBinding("a", "verifier"), triggerRef: "first", status: "queued", attempt: 0, enqueuedSeq: 0, claimedAt: null, consumedAt: null, turnId: null }, "supervisor");
|
|
72
|
+
if (ledger.wakeTriggers("z").length !== 1 || ledger.wakeTriggers("z")[0]?.status !== "pending")
|
|
73
|
+
throw new Error("ledger conformance: initial Wake trigger is missing");
|
|
74
|
+
ledger.enqueueWake({ id: "a", ...specialistBinding("b", "audit"), triggerRef: "second", status: "queued", attempt: 0, enqueuedSeq: 0, claimedAt: null, consumedAt: null, turnId: null }, "supervisor");
|
|
75
|
+
const claimed = ledger.claimNextWake(clock.now().toISOString());
|
|
91
76
|
if (claimed?.id !== "z")
|
|
92
77
|
throw new Error("ledger conformance: wakes are not FIFO");
|
|
78
|
+
ledger.putThread({ id: "thread:a", agent: "a", parentThreadId: null, createdAt: clock.now().toISOString(), updatedAt: clock.now().toISOString() }, "supervisor");
|
|
79
|
+
const turn = { id: "turn:a", threadId: "thread:a", source: "system", bindingKind: "specialist", goalId: null, goalRevision: null, specialistRole: "verifier", status: "in_progress", attempt: 1, error: null, startedAt: clock.now().toISOString(), endedAt: null, leaseUntil: "2030-01-01T00:10:00.000Z", leaseToken: "lease", runnerPid: null };
|
|
80
|
+
ledger.startTurnFromWake("z", turn, clock.now().toISOString());
|
|
81
|
+
if (ledger.wake("z")?.turnId !== turn.id)
|
|
82
|
+
throw new Error("ledger conformance: consumed Wake did not link its Turn");
|
|
83
|
+
if (ledger.wakeTriggers("z").some((trigger) => trigger.status !== "resolved"))
|
|
84
|
+
throw new Error("ledger conformance: consumed Wake retained pending triggers");
|
|
93
85
|
if (first.event.ts !== clock.now().toISOString())
|
|
94
86
|
throw new Error("ledger conformance: injected clock was ignored");
|
|
95
|
-
|
|
96
|
-
try {
|
|
97
|
-
ledger.requestAction({ id: "bad", agent: "a", kind: "mock", connector: "mock", payload: {}, reason: "bad", evidence: [999_999], gated: false, status: "requested", reconciledAt: null, externalRef: null, auditAdvice: null, adviceAcked: false }, "a");
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
rejected = true;
|
|
101
|
-
}
|
|
102
|
-
if (!rejected)
|
|
103
|
-
throw new Error("ledger conformance: nonexistent evidence was accepted");
|
|
104
|
-
const informational = ledger.appendEvent({ streamId: "conformance:events", ts: clock.now().toISOString(), actor: "a", type: "session.conformance_info", data: {}, ignorable: true });
|
|
87
|
+
const informational = ledger.appendEvent({ streamId: "conformance:events", ts: clock.now().toISOString(), actor: "a", type: "transcript.conformance_info", data: {}, ignorable: true });
|
|
105
88
|
if (ledger.latestEvent()?.seq !== informational.seq)
|
|
106
89
|
throw new Error("ledger conformance: latest event was not the globally last append");
|
|
107
|
-
const before = JSON.stringify({ goals: ledger.goals(), wakes: ledger.wakes() });
|
|
90
|
+
const before = JSON.stringify({ goals: ledger.goals(), wakes: ledger.wakes(), triggers: ledger.wakeTriggers("z") });
|
|
108
91
|
ledger.rebuildProjections();
|
|
109
|
-
if (JSON.stringify({ goals: ledger.goals(), wakes: ledger.wakes() }) !== before)
|
|
92
|
+
if (JSON.stringify({ goals: ledger.goals(), wakes: ledger.wakes(), triggers: ledger.wakeTriggers("z") }) !== before)
|
|
110
93
|
throw new Error("ledger conformance: projection replay changed state");
|
|
111
94
|
ledger.close();
|
|
112
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "goah-testkit",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.13.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"types": "./dist/index.d.ts",
|
|
22
22
|
"exports": "./dist/index.js",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"goah-ledger-contract": "0.
|
|
25
|
-
"goah-ledger-sqlite": "0.
|
|
26
|
-
"goah-runner-pi": "0.
|
|
27
|
-
"goah-supervisor": "0.
|
|
24
|
+
"goah-ledger-contract": "0.13.0",
|
|
25
|
+
"goah-ledger-sqlite": "0.13.0",
|
|
26
|
+
"goah-runner-pi": "0.13.0",
|
|
27
|
+
"goah-supervisor": "0.13.0"
|
|
28
28
|
}
|
|
29
29
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goah/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,9 +24,8 @@
|
|
|
24
24
|
"exports": {
|
|
25
25
|
".": "./dist/index.js",
|
|
26
26
|
"./kernel": "./dist/kernel.js",
|
|
27
|
-
"./
|
|
27
|
+
"./transcript": "./dist/transcript.js",
|
|
28
28
|
"./execution": "./dist/execution.js",
|
|
29
|
-
"./metrics": "./dist/metrics.js",
|
|
30
29
|
"./sqlite": "./dist/sqlite.js",
|
|
31
30
|
"./supervisor": "./dist/supervisor.js",
|
|
32
31
|
"./runner-pi": "./dist/runner-pi.js",
|
|
@@ -43,11 +42,11 @@
|
|
|
43
42
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
44
43
|
"@earendil-works/pi-ai": "0.84.2",
|
|
45
44
|
"@earendil-works/pi-tui": "^0.84.2",
|
|
46
|
-
"goah-ledger-contract": "0.
|
|
47
|
-
"goah-ledger-sqlite": "0.
|
|
48
|
-
"goah-runner-pi": "0.
|
|
49
|
-
"goah-supervisor": "0.
|
|
50
|
-
"goah-testkit": "0.
|
|
45
|
+
"goah-ledger-contract": "0.13.0",
|
|
46
|
+
"goah-ledger-sqlite": "0.13.0",
|
|
47
|
+
"goah-runner-pi": "0.13.0",
|
|
48
|
+
"goah-supervisor": "0.13.0",
|
|
49
|
+
"goah-testkit": "0.13.0"
|
|
51
50
|
},
|
|
52
51
|
"bundledDependencies": [
|
|
53
52
|
"goah-ledger-contract",
|