@mobrienv/autoloop-harness 0.8.0 → 0.9.2
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/acceptance.d.ts +31 -0
- package/dist/acceptance.js +69 -0
- package/dist/acceptance.js.map +1 -0
- package/dist/ask.d.ts +16 -0
- package/dist/ask.js +47 -0
- package/dist/ask.js.map +1 -0
- package/dist/backend/types.d.ts +3 -0
- package/dist/backend/types.js +3 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/circuit-breaker.d.ts +27 -0
- package/dist/circuit-breaker.js +41 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/completion-lint.d.ts +29 -0
- package/dist/completion-lint.js +51 -0
- package/dist/completion-lint.js.map +1 -0
- package/dist/config-helpers.js +141 -8
- package/dist/config-helpers.js.map +1 -1
- package/dist/control/command-adapter.d.ts +19 -0
- package/dist/control/command-adapter.js +57 -0
- package/dist/control/command-adapter.js.map +1 -0
- package/dist/control/dispatch.js +14 -0
- package/dist/control/dispatch.js.map +1 -1
- package/dist/control/types.d.ts +11 -2
- package/dist/display.d.ts +9 -2
- package/dist/display.js +37 -1
- package/dist/display.js.map +1 -1
- package/dist/emit.d.ts +27 -0
- package/dist/emit.js +321 -2
- package/dist/emit.js.map +1 -1
- package/dist/events.d.ts +36 -3
- package/dist/fanout-runner.d.ts +25 -0
- package/dist/fanout-runner.js +54 -0
- package/dist/fanout-runner.js.map +1 -0
- package/dist/file-mod-audit.d.ts +29 -0
- package/dist/file-mod-audit.js +63 -0
- package/dist/file-mod-audit.js.map +1 -0
- package/dist/git-diff.d.ts +19 -0
- package/dist/git-diff.js +74 -0
- package/dist/git-diff.js.map +1 -0
- package/dist/hooks.d.ts +78 -0
- package/dist/hooks.js +239 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +15 -2
- package/dist/index.js +181 -5
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +45 -0
- package/dist/intent.js +127 -0
- package/dist/intent.js.map +1 -0
- package/dist/iteration-diff.d.ts +32 -0
- package/dist/iteration-diff.js +92 -0
- package/dist/iteration-diff.js.map +1 -0
- package/dist/iteration.d.ts +20 -0
- package/dist/iteration.js +383 -16
- package/dist/iteration.js.map +1 -1
- package/dist/metareview.d.ts +9 -1
- package/dist/metareview.js +68 -30
- package/dist/metareview.js.map +1 -1
- package/dist/notify.d.ts +9 -2
- package/dist/notify.js +16 -4
- package/dist/notify.js.map +1 -1
- package/dist/parallel.d.ts +16 -0
- package/dist/parallel.js +28 -1
- package/dist/parallel.js.map +1 -1
- package/dist/postconditions.d.ts +25 -0
- package/dist/postconditions.js +107 -0
- package/dist/postconditions.js.map +1 -0
- package/dist/postfire-verify.d.ts +31 -0
- package/dist/postfire-verify.js +64 -0
- package/dist/postfire-verify.js.map +1 -0
- package/dist/premature-quit.d.ts +25 -0
- package/dist/premature-quit.js +54 -0
- package/dist/premature-quit.js.map +1 -0
- package/dist/progress.d.ts +20 -0
- package/dist/progress.js +56 -0
- package/dist/progress.js.map +1 -0
- package/dist/prompt.js +8 -2
- package/dist/prompt.js.map +1 -1
- package/dist/provisional.d.ts +42 -0
- package/dist/provisional.js +92 -0
- package/dist/provisional.js.map +1 -0
- package/dist/registry-bridge.js +25 -0
- package/dist/registry-bridge.js.map +1 -1
- package/dist/resume.d.ts +61 -0
- package/dist/resume.js +226 -0
- package/dist/resume.js.map +1 -0
- package/dist/scratchpad.js +27 -8
- package/dist/scratchpad.js.map +1 -1
- package/dist/stage.d.ts +21 -0
- package/dist/stage.js +131 -0
- package/dist/stage.js.map +1 -0
- package/dist/stop.d.ts +29 -2
- package/dist/stop.js +106 -0
- package/dist/stop.js.map +1 -1
- package/dist/suspend-state.d.ts +32 -0
- package/dist/suspend-state.js +104 -0
- package/dist/suspend-state.js.map +1 -0
- package/dist/tamper.d.ts +21 -0
- package/dist/tamper.js +88 -0
- package/dist/tamper.js.map +1 -0
- package/dist/types.d.ts +247 -2
- package/dist/types.js +91 -1
- package/dist/types.js.map +1 -1
- package/dist/wave/finalize-wave.d.ts +15 -5
- package/dist/wave/finalize-wave.js +56 -2
- package/dist/wave/finalize-wave.js.map +1 -1
- package/dist/wave/launch-branches.d.ts +23 -2
- package/dist/wave/launch-branches.js +56 -3
- package/dist/wave/launch-branches.js.map +1 -1
- package/dist/wave/stage-branch-runner.d.ts +12 -0
- package/dist/wave/stage-branch-runner.js +130 -0
- package/dist/wave/stage-branch-runner.js.map +1 -0
- package/dist/wave/types.d.ts +40 -2
- package/dist/wave.d.ts +32 -1
- package/dist/wave.js +163 -34
- package/dist/wave.js.map +1 -1
- package/package.json +83 -3
package/dist/display.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"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"}
|
package/dist/emit.d.ts
CHANGED
|
@@ -11,6 +11,33 @@ export interface EmitResult {
|
|
|
11
11
|
error?: string;
|
|
12
12
|
}
|
|
13
13
|
export declare function emit(projectDir: string, topic: string, payload: string): EmitResult;
|
|
14
|
+
/**
|
|
15
|
+
* Parse `payload` as a JSON object, returning its fields if (and only if) the
|
|
16
|
+
* whole payload is a well-formed JSON object literal. This is the ONE
|
|
17
|
+
* definition of "structured branch output": the evidence-gate keys check
|
|
18
|
+
* (`payloadEvidenceKeys`) and the fan-out stage branch runner both parse
|
|
19
|
+
* through this function, so "a branch emitted structured data" means the same
|
|
20
|
+
* thing everywhere. A branch whose payload does not parse as a JSON object
|
|
21
|
+
* (free prose, a bare string, an array, ...) is not structured — callers treat
|
|
22
|
+
* that as a dead/schema-invalid branch rather than guessing at fields.
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseJsonObjectPayload(payload: string): Record<string, unknown> | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Evidence keys present in a payload. A key is "present" only when it carries a
|
|
27
|
+
* *machine-checkable* value:
|
|
28
|
+
*
|
|
29
|
+
* - a `key=value` token (the value must immediately follow `=`), or
|
|
30
|
+
* - a top-level key in a JSON object payload with a non-empty scalar value.
|
|
31
|
+
*
|
|
32
|
+
* The `=` (or JSON) requirement is deliberate: a free-prose `key: value` form
|
|
33
|
+
* would let ordinary English that merely mentions a required word satisfy the
|
|
34
|
+
* gate (e.g. "tests: all green, coverage: looks good"), defeating the point of
|
|
35
|
+
* requiring proof. So colon-prose does NOT count — agents must emit structured
|
|
36
|
+
* `key=value` pairs or a JSON object. Matching is case-sensitive on the key.
|
|
37
|
+
*/
|
|
38
|
+
export declare function payloadEvidenceKeys(payload: string): Set<string>;
|
|
39
|
+
/** Required evidence keys absent from the payload, in declaration order. */
|
|
40
|
+
export declare function missingEvidence(requires: string[], payload: string): string[];
|
|
14
41
|
export declare function invalidEvent(emittedTopic: string, allowedEvents: string[], parallelEnabled: boolean, completionEvent: string): boolean;
|
|
15
42
|
export declare function parallelDispatchBase(topic: string): string;
|
|
16
43
|
export declare function parallelJoinedTopic(topic: string): string;
|
package/dist/emit.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
1
2
|
import { mkdirSync } from "node:fs";
|
|
2
3
|
import { dirname } from "node:path";
|
|
3
4
|
import { joinCsv, jsonField, listText, splitCsv, } from "@mobrienv/autoloop-core";
|
|
4
5
|
import * as config from "@mobrienv/autoloop-core/config";
|
|
6
|
+
import { classifyGateOutcome, validateEvidenceRequirement, } from "@mobrienv/autoloop-core/evidence";
|
|
5
7
|
import { appendAgentEvent, appendEvent, latestIterationForRun, latestRunId, } from "@mobrienv/autoloop-core/journal";
|
|
6
|
-
import { materializeOpenFrom } from "@mobrienv/autoloop-core/tasks";
|
|
8
|
+
import { materializeOpenFrom, resolveFile, } from "@mobrienv/autoloop-core/tasks";
|
|
7
9
|
import * as topology from "@mobrienv/autoloop-core/topology";
|
|
10
|
+
import { printHookOutput } from "./display.js";
|
|
11
|
+
import { parseMutationDirective } from "./hooks.js";
|
|
12
|
+
import { writeSuspendState } from "./suspend-state.js";
|
|
8
13
|
const COORDINATION_TOPICS = new Set([
|
|
9
14
|
"issue.discovered",
|
|
10
15
|
"issue.resolved",
|
|
@@ -61,10 +66,152 @@ function dispatchParallelTopic(topic) {
|
|
|
61
66
|
export function reservedParallelJoinedTopic(topic) {
|
|
62
67
|
return topic.endsWith(".parallel.joined");
|
|
63
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Run pre_emit/post_emit hooks. `emit()` runs out-of-process (the agent
|
|
71
|
+
* invokes the `autoloops emit` tool script, which spawns a fresh CLI process
|
|
72
|
+
* calling `harness.emit()`) so there is no live `LoopContext` to drive
|
|
73
|
+
* `runPhaseHooks` through — this is a disk/config-driven parallel
|
|
74
|
+
* implementation reading `HookSpec`s straight from the project's raw TOML.
|
|
75
|
+
*
|
|
76
|
+
* `on_error = "suspend"` is honored as `block` here (see design note: the
|
|
77
|
+
* emit subprocess cannot itself block the harness's iteration loop) but ALSO
|
|
78
|
+
* writes durable suspend state, so the harness detects it at the next
|
|
79
|
+
* iteration boundary (`runIteration` start) and halts there instead of
|
|
80
|
+
* silently continuing.
|
|
81
|
+
*/
|
|
82
|
+
function runEmitPhaseHooks(projectDir, journalFile, phase, runId, iteration, topic, payload) {
|
|
83
|
+
const specs = config
|
|
84
|
+
.loadHookSpecs(projectDir)
|
|
85
|
+
.filter((s) => s.phase === phase);
|
|
86
|
+
const outcome = { blocked: false };
|
|
87
|
+
for (const spec of specs) {
|
|
88
|
+
if (!spec.command)
|
|
89
|
+
continue;
|
|
90
|
+
const env = {
|
|
91
|
+
...process.env,
|
|
92
|
+
AUTOLOOP_PROJECT_DIR: projectDir,
|
|
93
|
+
AUTOLOOP_RUN_ID: runId,
|
|
94
|
+
AUTOLOOP_ITERATION: iteration,
|
|
95
|
+
AUTOLOOP_EMIT_TOPIC: outcome.mutatedTopic ?? topic,
|
|
96
|
+
AUTOLOOP_EMIT_PAYLOAD: outcome.mutatedPayload ?? payload,
|
|
97
|
+
};
|
|
98
|
+
const result = spawnSync(spec.command, {
|
|
99
|
+
shell: true,
|
|
100
|
+
cwd: projectDir,
|
|
101
|
+
encoding: "utf-8",
|
|
102
|
+
env,
|
|
103
|
+
});
|
|
104
|
+
const combined = (result.stdout ?? "") +
|
|
105
|
+
(result.stderr ? `\n[stderr]\n${result.stderr}` : "");
|
|
106
|
+
const status = result.status ?? -1;
|
|
107
|
+
const failed = status !== 0 || Boolean(result.error);
|
|
108
|
+
appendEvent(journalFile, runId, iteration, "hook.output", `"hook": ${JSON.stringify(phase)}, "exit_code": ${status}, "output": ${JSON.stringify(combined.trim())}`);
|
|
109
|
+
printHookOutput(phase, status, combined.trim(), failed);
|
|
110
|
+
if (!failed && spec.mutate === "event") {
|
|
111
|
+
const directive = parseMutationDirective(combined.split("\n[stderr]\n")[0], "event");
|
|
112
|
+
if (directive) {
|
|
113
|
+
if (directive.topic !== undefined)
|
|
114
|
+
outcome.mutatedTopic = directive.topic;
|
|
115
|
+
if (directive.payload !== undefined)
|
|
116
|
+
outcome.mutatedPayload = directive.payload;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (!failed)
|
|
120
|
+
continue;
|
|
121
|
+
const detail = (result.stderr ?? "").trim() || (result.stdout ?? "").trim() || "";
|
|
122
|
+
const msg = `hook ${phase} failed (exit ${status}): ${detail.split("\n")[0] ?? ""}`;
|
|
123
|
+
if (spec.onError === "warn")
|
|
124
|
+
continue;
|
|
125
|
+
outcome.blocked = true;
|
|
126
|
+
outcome.blockedMessage = msg;
|
|
127
|
+
if (spec.onError === "suspend") {
|
|
128
|
+
const stateDir = process.env.AUTOLOOP_STATE_DIR || config.stateDirPath(projectDir);
|
|
129
|
+
writeSuspendState(stateDir, {
|
|
130
|
+
runId,
|
|
131
|
+
phase,
|
|
132
|
+
iteration: Number(iteration) || 0,
|
|
133
|
+
reason: msg,
|
|
134
|
+
hookCommand: spec.command,
|
|
135
|
+
createdAt: new Date().toISOString(),
|
|
136
|
+
resumeIteration: Number(iteration) || 0,
|
|
137
|
+
}, journalFile);
|
|
138
|
+
}
|
|
139
|
+
return outcome;
|
|
140
|
+
}
|
|
141
|
+
return outcome;
|
|
142
|
+
}
|
|
64
143
|
export function emit(projectDir, topic, payload) {
|
|
144
|
+
const result = emitCore(projectDir, topic, payload);
|
|
145
|
+
if (!result.ok)
|
|
146
|
+
return result;
|
|
147
|
+
// post_emit hooks run after a successful accept. They cannot un-journal the
|
|
148
|
+
// already-accepted event, but a `block` policy still surfaces as a failed
|
|
149
|
+
// result (visible to the agent/CLI caller) and a `suspend` policy writes
|
|
150
|
+
// durable suspend state for the harness to catch at the next iteration
|
|
151
|
+
// boundary.
|
|
152
|
+
const journalFile = resolveEmitJournalFile(projectDir);
|
|
153
|
+
const validation = emitValidationContext(projectDir, journalFile);
|
|
154
|
+
const postEmit = runEmitPhaseHooks(projectDir, journalFile, "post_emit", validation.runId, validation.iteration, result.topic ?? topic, payload);
|
|
155
|
+
if (postEmit.blocked) {
|
|
156
|
+
return {
|
|
157
|
+
ok: false,
|
|
158
|
+
topic: result.topic,
|
|
159
|
+
error: postEmit.blockedMessage ?? "post_emit hook blocked this event",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
function emitCore(projectDir, topic, payload) {
|
|
65
165
|
const journalFile = resolveEmitJournalFile(projectDir);
|
|
66
166
|
mkdirSync(dirname(journalFile), { recursive: true });
|
|
67
167
|
const validation = emitValidationContext(projectDir, journalFile);
|
|
168
|
+
// pre_emit hooks: run before any gating so a configured mutation can steer
|
|
169
|
+
// routing/gate decisions too. Runs disk/config-driven (see
|
|
170
|
+
// `runEmitPhaseHooks`) since this call is out-of-process from the harness.
|
|
171
|
+
const preEmit = runEmitPhaseHooks(projectDir, journalFile, "pre_emit", validation.runId, validation.iteration, topic, payload);
|
|
172
|
+
if (preEmit.mutatedTopic !== undefined)
|
|
173
|
+
topic = preEmit.mutatedTopic;
|
|
174
|
+
if (preEmit.mutatedPayload !== undefined)
|
|
175
|
+
payload = preEmit.mutatedPayload;
|
|
176
|
+
if (preEmit.blocked) {
|
|
177
|
+
return {
|
|
178
|
+
ok: false,
|
|
179
|
+
topic,
|
|
180
|
+
error: preEmit.blockedMessage ?? "pre_emit hook blocked this event",
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// Evidence gate (opt-in): applies to ANY configured event, BEFORE routing /
|
|
184
|
+
// coordination / completion handling, so a declared gate is never silently
|
|
185
|
+
// bypassed (e.g. on a coordination/operator topic). A success event must
|
|
186
|
+
// carry its required evidence in the payload, else it is rejected and the
|
|
187
|
+
// typed `blocked` event is journaled instead — preserving an evidence-bearing
|
|
188
|
+
// quality gate over a topology that otherwise only checks routing. No
|
|
189
|
+
// `[[gate]]` for this topic => no-op.
|
|
190
|
+
const gate = topology.gateForEvent(validation.topo, topic);
|
|
191
|
+
if (gate && gate.requires.length > 0) {
|
|
192
|
+
const missing = missingEvidence(gate.requires, payload);
|
|
193
|
+
if (missing.length > 0) {
|
|
194
|
+
return rejectEvidenceGate(journalFile, topic, gate, missing, payload, validation);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Typed evidence gate (opt-in, additive to `requires` above): each
|
|
198
|
+
// `evidence` rule is validated for presence plus (per-type) a status/
|
|
199
|
+
// threshold check. Any shortfall rejects the emit and journals the routed
|
|
200
|
+
// typed event — `blocked` for missing evidence (soft retry), `failed` (or
|
|
201
|
+
// `blocked` as a fallback) for evidence that was supplied but did not pass.
|
|
202
|
+
if (gate && gate.evidence.length > 0) {
|
|
203
|
+
const shortfalls = gate.evidence
|
|
204
|
+
.map((req) => validateEvidenceRequirement(req, payload))
|
|
205
|
+
.filter((s) => s !== null);
|
|
206
|
+
if (shortfalls.length > 0) {
|
|
207
|
+
return rejectTypedEvidenceGate(journalFile, topic, gate, shortfalls, payload, validation);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// The human-ask event is always accepted regardless of routing — it pauses
|
|
211
|
+
// the loop for a human answer; the harness owns the block, not `[handoff]`.
|
|
212
|
+
if (validation.askEvent !== "" && topic === validation.askEvent) {
|
|
213
|
+
return acceptEmit(journalFile, topic, payload, validation);
|
|
214
|
+
}
|
|
68
215
|
if (coordinationTopic(topic)) {
|
|
69
216
|
return acceptEmit(journalFile, topic, payload, validation);
|
|
70
217
|
}
|
|
@@ -73,8 +220,16 @@ export function emit(projectDir, topic, payload) {
|
|
|
73
220
|
}
|
|
74
221
|
// Task completion gate: block completion if open blocking tasks remain.
|
|
75
222
|
// Soft tasks (soft === true) are advisory and never block completion.
|
|
223
|
+
//
|
|
224
|
+
// Resolve via tasks.resolveFile (NOT config.resolveTasksFile) so the gate
|
|
225
|
+
// honors the AUTOLOOP_TASKS_FILE env override — the same resolver the task
|
|
226
|
+
// CLI and the agent's `task add`/`task complete` use (tools.ts exports
|
|
227
|
+
// AUTOLOOP_TASKS_FILE into the agent env). This keeps the gate reading the
|
|
228
|
+
// exact store the tasks are written to, including when an external parent
|
|
229
|
+
// (e.g. ralph) points autoloop at a canonical store. Using the config path
|
|
230
|
+
// here would silently read a different file and miss open tasks.
|
|
76
231
|
if (topic === validation.completionEvent) {
|
|
77
|
-
const tasksFile =
|
|
232
|
+
const tasksFile = resolveFile(projectDir);
|
|
78
233
|
const blockingTasks = materializeOpenFrom(tasksFile).filter((t) => t.soft !== true);
|
|
79
234
|
if (blockingTasks.length > 0) {
|
|
80
235
|
return rejectTaskGate(journalFile, topic, blockingTasks, validation);
|
|
@@ -85,6 +240,91 @@ export function emit(projectDir, topic, payload) {
|
|
|
85
240
|
}
|
|
86
241
|
return acceptEmit(journalFile, topic, payload, validation);
|
|
87
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Whether a JSON value counts as evidence: a non-empty string, a finite number
|
|
245
|
+
* (incl. 0, e.g. `errors=0`), or `true`. Empty strings, `false`, `null`,
|
|
246
|
+
* objects, and arrays do NOT count — they are vacuous and must not satisfy a
|
|
247
|
+
* gate.
|
|
248
|
+
*/
|
|
249
|
+
function isEvidenceValue(v) {
|
|
250
|
+
if (typeof v === "string")
|
|
251
|
+
return v.trim() !== "";
|
|
252
|
+
if (typeof v === "number")
|
|
253
|
+
return Number.isFinite(v);
|
|
254
|
+
if (typeof v === "boolean")
|
|
255
|
+
return v === true;
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Parse `payload` as a JSON object, returning its fields if (and only if) the
|
|
260
|
+
* whole payload is a well-formed JSON object literal. This is the ONE
|
|
261
|
+
* definition of "structured branch output": the evidence-gate keys check
|
|
262
|
+
* (`payloadEvidenceKeys`) and the fan-out stage branch runner both parse
|
|
263
|
+
* through this function, so "a branch emitted structured data" means the same
|
|
264
|
+
* thing everywhere. A branch whose payload does not parse as a JSON object
|
|
265
|
+
* (free prose, a bare string, an array, ...) is not structured — callers treat
|
|
266
|
+
* that as a dead/schema-invalid branch rather than guessing at fields.
|
|
267
|
+
*/
|
|
268
|
+
export function parseJsonObjectPayload(payload) {
|
|
269
|
+
if (!payload)
|
|
270
|
+
return undefined;
|
|
271
|
+
const trimmed = payload.trim();
|
|
272
|
+
if (!trimmed.startsWith("{"))
|
|
273
|
+
return undefined;
|
|
274
|
+
try {
|
|
275
|
+
const obj = JSON.parse(trimmed);
|
|
276
|
+
if (obj === null || typeof obj !== "object" || Array.isArray(obj)) {
|
|
277
|
+
return undefined;
|
|
278
|
+
}
|
|
279
|
+
return obj;
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Evidence keys present in a payload. A key is "present" only when it carries a
|
|
287
|
+
* *machine-checkable* value:
|
|
288
|
+
*
|
|
289
|
+
* - a `key=value` token (the value must immediately follow `=`), or
|
|
290
|
+
* - a top-level key in a JSON object payload with a non-empty scalar value.
|
|
291
|
+
*
|
|
292
|
+
* The `=` (or JSON) requirement is deliberate: a free-prose `key: value` form
|
|
293
|
+
* would let ordinary English that merely mentions a required word satisfy the
|
|
294
|
+
* gate (e.g. "tests: all green, coverage: looks good"), defeating the point of
|
|
295
|
+
* requiring proof. So colon-prose does NOT count — agents must emit structured
|
|
296
|
+
* `key=value` pairs or a JSON object. Matching is case-sensitive on the key.
|
|
297
|
+
*/
|
|
298
|
+
export function payloadEvidenceKeys(payload) {
|
|
299
|
+
const present = new Set();
|
|
300
|
+
if (!payload)
|
|
301
|
+
return present;
|
|
302
|
+
// JSON object payloads: top-level keys with a non-empty scalar value.
|
|
303
|
+
const obj = parseJsonObjectPayload(payload);
|
|
304
|
+
if (obj) {
|
|
305
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
306
|
+
if (isEvidenceValue(v))
|
|
307
|
+
present.add(k);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// Structured `key=value` tokens. The value must immediately follow `=` (no
|
|
311
|
+
// space skip), so a trailing `key=` with no value is absent, and free prose
|
|
312
|
+
// is not matched. Values may be quoted.
|
|
313
|
+
const re = /([A-Za-z_][\w.-]*)=("[^"]*"|'[^']*'|[^\s,;]+)/g;
|
|
314
|
+
let m = re.exec(payload);
|
|
315
|
+
while (m !== null) {
|
|
316
|
+
const value = m[2].replace(/^["']|["']$/g, "").trim();
|
|
317
|
+
if (value !== "")
|
|
318
|
+
present.add(m[1]);
|
|
319
|
+
m = re.exec(payload);
|
|
320
|
+
}
|
|
321
|
+
return present;
|
|
322
|
+
}
|
|
323
|
+
/** Required evidence keys absent from the payload, in declaration order. */
|
|
324
|
+
export function missingEvidence(requires, payload) {
|
|
325
|
+
const present = payloadEvidenceKeys(payload);
|
|
326
|
+
return requires.filter((key) => !present.has(key));
|
|
327
|
+
}
|
|
88
328
|
export function invalidEvent(emittedTopic, allowedEvents, parallelEnabled, completionEvent) {
|
|
89
329
|
if (!emittedTopic)
|
|
90
330
|
return false;
|
|
@@ -152,9 +392,25 @@ export function routingTopic(topic) {
|
|
|
152
392
|
"review.finish",
|
|
153
393
|
"backend.start",
|
|
154
394
|
"backend.finish",
|
|
395
|
+
// Telemetry/observability emits, NOT routing. Without these the per-iteration
|
|
396
|
+
// `backend.usage` (and any `hook.output`) would clobber the routing position every
|
|
397
|
+
// cycle, collapsing topology backpressure to all-roles freedom after iteration 1 —
|
|
398
|
+
// letting the agent self-route and skip required intermediate steps.
|
|
399
|
+
"backend.usage",
|
|
400
|
+
"hook.output",
|
|
401
|
+
"hook.suspend",
|
|
155
402
|
"event.invalid",
|
|
156
403
|
"operator.guidance",
|
|
157
404
|
"operator.guidance.consumed",
|
|
405
|
+
// Human-in-the-loop topics are not routing: a `human.ask` pause must not
|
|
406
|
+
// move the routing position, or the iteration after an ask would have an
|
|
407
|
+
// empty allowed-event set (no topology transition) and the agent would be
|
|
408
|
+
// unconstrained for that cycle. The ask.* topics are harness-written with
|
|
409
|
+
// fixed names; `human.ask` is the default ask event.
|
|
410
|
+
"human.ask",
|
|
411
|
+
"ask.pending",
|
|
412
|
+
"ask.answered",
|
|
413
|
+
"ask.timeout",
|
|
158
414
|
"",
|
|
159
415
|
]);
|
|
160
416
|
if (nonRouting.has(topic))
|
|
@@ -175,6 +431,8 @@ function emitValidationContext(projectDir, journalFile) {
|
|
|
175
431
|
allowedEvents: envCsvList("AUTOLOOP_ALLOWED_EVENTS"),
|
|
176
432
|
parallelEnabled,
|
|
177
433
|
completionEvent: compEvent,
|
|
434
|
+
topo,
|
|
435
|
+
askEvent: config.get(cfg, "event_loop.ask_event", "human.ask"),
|
|
178
436
|
};
|
|
179
437
|
}
|
|
180
438
|
function resolveEmitRunId(journalFile) {
|
|
@@ -231,6 +489,67 @@ export function resolveEmitJournalFile(projectDir) {
|
|
|
231
489
|
return envEvents;
|
|
232
490
|
return config.resolveJournalFile(projectDir);
|
|
233
491
|
}
|
|
492
|
+
function rejectEvidenceGate(journalFile, topic, gate, missing, payload, validation) {
|
|
493
|
+
// Journal the typed blocked event with the evidence shortfall + the original
|
|
494
|
+
// summary, so an observer (and the next iteration's prompt) sees why it was
|
|
495
|
+
// blocked and what is still needed.
|
|
496
|
+
appendEvent(journalFile, validation.runId, validation.iteration, gate.blocked, jsonField("gated_event", topic) +
|
|
497
|
+
", " +
|
|
498
|
+
jsonField("missing_evidence", joinCsv(missing)) +
|
|
499
|
+
", " +
|
|
500
|
+
jsonField("required_evidence", joinCsv(gate.requires)) +
|
|
501
|
+
", " +
|
|
502
|
+
jsonField("summary", payload));
|
|
503
|
+
return {
|
|
504
|
+
ok: false,
|
|
505
|
+
topic,
|
|
506
|
+
error: "`" +
|
|
507
|
+
topic +
|
|
508
|
+
"` requires evidence " +
|
|
509
|
+
listText(gate.requires) +
|
|
510
|
+
"; missing: " +
|
|
511
|
+
listText(missing) +
|
|
512
|
+
". Emitted `" +
|
|
513
|
+
gate.blocked +
|
|
514
|
+
"` instead. Include the evidence in the payload (e.g. `key=value`) and emit `" +
|
|
515
|
+
topic +
|
|
516
|
+
"` again.",
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
function rejectTypedEvidenceGate(journalFile, topic, gate, shortfalls, payload, validation) {
|
|
520
|
+
const target = classifyGateOutcome(shortfalls, gate);
|
|
521
|
+
const missingKeys = shortfalls
|
|
522
|
+
.filter((s) => s.reason === "missing")
|
|
523
|
+
.map((s) => s.key);
|
|
524
|
+
const thresholdShortfalls = shortfalls.filter((s) => s.reason === "threshold" || s.reason === "status");
|
|
525
|
+
const evidenceTypes = joinCsv(Array.from(new Set(shortfalls.map((s) => s.type))));
|
|
526
|
+
const requiredEvidence = joinCsv(gate.evidence.map((e) => e.key));
|
|
527
|
+
const fields = [
|
|
528
|
+
jsonField("gated_event", topic),
|
|
529
|
+
jsonField("missing_evidence", joinCsv(missingKeys)),
|
|
530
|
+
jsonField("evidence_type", evidenceTypes),
|
|
531
|
+
jsonField("required_evidence", requiredEvidence),
|
|
532
|
+
];
|
|
533
|
+
if (thresholdShortfalls.length > 0) {
|
|
534
|
+
fields.push(jsonField("threshold_failure", joinCsv(thresholdShortfalls.map((s) => `${s.key}:${s.detail}`))));
|
|
535
|
+
}
|
|
536
|
+
fields.push(jsonField("summary", payload));
|
|
537
|
+
appendEvent(journalFile, validation.runId, validation.iteration, target, fields.join(", "));
|
|
538
|
+
const shortfallText = shortfalls
|
|
539
|
+
.map((s) => `${s.key} (${s.reason}: ${s.detail})`)
|
|
540
|
+
.join("; ");
|
|
541
|
+
return {
|
|
542
|
+
ok: false,
|
|
543
|
+
topic,
|
|
544
|
+
error: "`" +
|
|
545
|
+
topic +
|
|
546
|
+
"` failed typed evidence validation: " +
|
|
547
|
+
shortfallText +
|
|
548
|
+
". Emitted `" +
|
|
549
|
+
target +
|
|
550
|
+
"` instead.",
|
|
551
|
+
};
|
|
552
|
+
}
|
|
234
553
|
function rejectTaskGate(journalFile, topic, openTasks, validation) {
|
|
235
554
|
appendEvent(journalFile, validation.runId, validation.iteration, "task.gate", jsonField("blocked_topic", topic) +
|
|
236
555
|
", " +
|
package/dist/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
|
+
import type { StopReason } from "./types.js";
|
|
1
2
|
export type LoopEvent = {
|
|
2
3
|
type: "log";
|
|
3
4
|
level: string;
|
|
4
5
|
message: string;
|
|
6
|
+
} | {
|
|
7
|
+
type: "loop.start";
|
|
8
|
+
runId: string;
|
|
9
|
+
prompt: string;
|
|
10
|
+
workDir: string;
|
|
11
|
+
projectDir: string;
|
|
12
|
+
preset: string;
|
|
13
|
+
backend: string;
|
|
14
|
+
maxIterations: number;
|
|
15
|
+
completionEvent: string;
|
|
16
|
+
completionPromise: string;
|
|
5
17
|
} | {
|
|
6
18
|
type: "iteration.start";
|
|
7
19
|
iteration: number;
|
|
@@ -10,8 +22,9 @@ export type LoopEvent = {
|
|
|
10
22
|
} | {
|
|
11
23
|
type: "loop.finish";
|
|
12
24
|
iterations: number;
|
|
13
|
-
stopReason:
|
|
25
|
+
stopReason: StopReason;
|
|
14
26
|
runId: string;
|
|
27
|
+
costUsd: number;
|
|
15
28
|
} | {
|
|
16
29
|
type: "iteration.banner";
|
|
17
30
|
iteration: number;
|
|
@@ -35,6 +48,18 @@ export type LoopEvent = {
|
|
|
35
48
|
} | {
|
|
36
49
|
type: "review.banner";
|
|
37
50
|
iteration: number;
|
|
51
|
+
} | {
|
|
52
|
+
type: "ask.pending";
|
|
53
|
+
runId: string;
|
|
54
|
+
iteration: number;
|
|
55
|
+
questionId: string;
|
|
56
|
+
question: string;
|
|
57
|
+
} | {
|
|
58
|
+
type: "ask.answered";
|
|
59
|
+
runId: string;
|
|
60
|
+
iteration: number;
|
|
61
|
+
questionId: string;
|
|
62
|
+
answer: string;
|
|
38
63
|
} | {
|
|
39
64
|
type: "backend.output";
|
|
40
65
|
output: string;
|
|
@@ -42,12 +67,20 @@ export type LoopEvent = {
|
|
|
42
67
|
} | {
|
|
43
68
|
type: "failure.diagnostic";
|
|
44
69
|
output: string;
|
|
45
|
-
stopReason:
|
|
70
|
+
stopReason: StopReason;
|
|
71
|
+
} | {
|
|
72
|
+
type: "policy.file_modification_violation";
|
|
73
|
+
runId: string;
|
|
74
|
+
iteration: number;
|
|
75
|
+
role: string;
|
|
76
|
+
files: string[];
|
|
77
|
+
reason: "disallowed_tools" | "read_only";
|
|
46
78
|
} | {
|
|
47
79
|
type: "summary";
|
|
48
80
|
runId: string;
|
|
49
81
|
iterations: number;
|
|
50
|
-
stopReason:
|
|
82
|
+
stopReason: StopReason;
|
|
83
|
+
costUsd: number;
|
|
51
84
|
journalFile: string;
|
|
52
85
|
memoryFile: string;
|
|
53
86
|
reviewEvery: number;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type BranchResult, type FanoutStage, type StageOutcome } from "@mobrienv/autoloop-core/fanout";
|
|
2
|
+
/** One branch to run: which role/prompt, with which objective, at which index. */
|
|
3
|
+
export interface BranchSpec {
|
|
4
|
+
branchId: string;
|
|
5
|
+
stageId: string;
|
|
6
|
+
/** The role this branch runs (for K-identical) or the distinct sub-role. */
|
|
7
|
+
role: string;
|
|
8
|
+
/** Per-branch objective/lens (distinct panels vary this). */
|
|
9
|
+
objective: string;
|
|
10
|
+
index: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Expand a stage into branch specs. A K-identical panel (`role` + `branches`)
|
|
14
|
+
* produces N copies of the same role; an N-distinct panel (`roles`) produces one
|
|
15
|
+
* branch per sub-role. Distinct wins when both are set.
|
|
16
|
+
*/
|
|
17
|
+
export declare function expandStageBranches(stage: FanoutStage): BranchSpec[];
|
|
18
|
+
export type BranchRunner = (spec: BranchSpec) => Promise<BranchResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Run a fan-out stage: expand branches, execute up to `concurrency` at once,
|
|
21
|
+
* convert a thrown/rejected branch into a dead branch (so one failure never
|
|
22
|
+
* sinks the wave), then reduce to a routing decision. `reduceStage` applies the
|
|
23
|
+
* branch schema, quorum, and vote/dedup.
|
|
24
|
+
*/
|
|
25
|
+
export declare function runFanoutStage(stage: FanoutStage, runBranch: BranchRunner, concurrency: number): Promise<StageOutcome>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Fan-out stage orchestrator.
|
|
2
|
+
//
|
|
3
|
+
// Expands a FanoutStage into its branch specs, runs them concurrency-bounded
|
|
4
|
+
// (run-wide semaphore via mapLimit), isolates per-branch failure to a dead
|
|
5
|
+
// branch, and reduces the results with reduceStage. The actual branch executor
|
|
6
|
+
// (`runBranch`) is INJECTED: the orchestration here is pure and deterministically
|
|
7
|
+
// testable, while the real executor — spawning a backend CLI subprocess per
|
|
8
|
+
// branch — is a single seam wired into the iteration loop separately.
|
|
9
|
+
import { mapLimit } from "@mobrienv/autoloop-core/concurrency";
|
|
10
|
+
import { reduceStage, } from "@mobrienv/autoloop-core/fanout";
|
|
11
|
+
/**
|
|
12
|
+
* Expand a stage into branch specs. A K-identical panel (`role` + `branches`)
|
|
13
|
+
* produces N copies of the same role; an N-distinct panel (`roles`) produces one
|
|
14
|
+
* branch per sub-role. Distinct wins when both are set.
|
|
15
|
+
*/
|
|
16
|
+
export function expandStageBranches(stage) {
|
|
17
|
+
if (stage.roles.length > 0) {
|
|
18
|
+
return stage.roles.map((role, index) => ({
|
|
19
|
+
branchId: `${stage.id}.${index}`,
|
|
20
|
+
stageId: stage.id,
|
|
21
|
+
role,
|
|
22
|
+
objective: role,
|
|
23
|
+
index,
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
const n = Math.max(0, stage.branches);
|
|
27
|
+
return Array.from({ length: n }, (_, index) => ({
|
|
28
|
+
branchId: `${stage.id}.${index}`,
|
|
29
|
+
stageId: stage.id,
|
|
30
|
+
role: stage.role,
|
|
31
|
+
objective: stage.role,
|
|
32
|
+
index,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Run a fan-out stage: expand branches, execute up to `concurrency` at once,
|
|
37
|
+
* convert a thrown/rejected branch into a dead branch (so one failure never
|
|
38
|
+
* sinks the wave), then reduce to a routing decision. `reduceStage` applies the
|
|
39
|
+
* branch schema, quorum, and vote/dedup.
|
|
40
|
+
*/
|
|
41
|
+
export async function runFanoutStage(stage, runBranch, concurrency) {
|
|
42
|
+
const specs = expandStageBranches(stage);
|
|
43
|
+
const results = await mapLimit(specs, concurrency, async (spec) => {
|
|
44
|
+
try {
|
|
45
|
+
return await runBranch(spec);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
49
|
+
return { branchId: spec.branchId, ok: false, error: msg };
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
return reduceStage(stage, results);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=fanout-runner.js.map
|