loopforge 2.11.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -128
- package/dist/canonical-event-writer.d.ts +20 -0
- package/dist/canonical-event-writer.d.ts.map +1 -0
- package/dist/canonical-event-writer.js +131 -0
- package/dist/canonical-event-writer.js.map +1 -0
- package/dist/canonical-state.d.ts +20 -16
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +170 -61
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +11 -10
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-governance.d.ts +48 -0
- package/dist/cognitive-governance.d.ts.map +1 -0
- package/dist/cognitive-governance.js +226 -0
- package/dist/cognitive-governance.js.map +1 -0
- package/dist/compiler-subgoals.d.ts +7 -0
- package/dist/compiler-subgoals.d.ts.map +1 -0
- package/dist/compiler-subgoals.js +93 -0
- package/dist/compiler-subgoals.js.map +1 -0
- package/dist/derive-id.d.ts +12 -0
- package/dist/derive-id.d.ts.map +1 -0
- package/dist/derive-id.js +31 -0
- package/dist/derive-id.js.map +1 -0
- package/dist/evidence-provider.d.ts +23 -21
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +34 -74
- package/dist/evidence-provider.js.map +1 -1
- package/dist/generate-schema.js +90 -2
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +22 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -16
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +1 -1
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +250 -337
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-extras-parser.d.ts +2 -2
- package/dist/loop-extras-parser.d.ts.map +1 -1
- package/dist/loop-extras-parser.js +2 -2
- package/dist/loop-extras-parser.js.map +1 -1
- package/dist/loop-store.d.ts +20 -58
- package/dist/loop-store.d.ts.map +1 -1
- package/dist/loop-store.js +232 -309
- package/dist/loop-store.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -3
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +83 -13
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session-projection.d.ts +5 -0
- package/dist/mcp/session-projection.d.ts.map +1 -0
- package/dist/mcp/session-projection.js +18 -0
- package/dist/mcp/session-projection.js.map +1 -0
- package/dist/mcp/session-queue.d.ts +3 -0
- package/dist/mcp/session-queue.d.ts.map +1 -0
- package/dist/mcp/session-queue.js +18 -0
- package/dist/mcp/session-queue.js.map +1 -0
- package/dist/mcp/session-types.d.ts +72 -0
- package/dist/mcp/session-types.d.ts.map +1 -0
- package/dist/mcp/session-types.js +2 -0
- package/dist/mcp/session-types.js.map +1 -0
- package/dist/mcp/session.d.ts +49 -93
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +544 -245
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +26 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +399 -274
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.d.ts +17 -1
- package/dist/policy-metrics.d.ts.map +1 -1
- package/dist/policy-metrics.js +164 -1
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +34 -18
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +113 -18
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +5 -3
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +126 -77
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-policy.d.ts +8 -1
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +26 -8
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +232 -192
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +15 -100
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts +11 -3
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +51 -14
- package/dist/replay.js.map +1 -1
- package/dist/round-commit-store.d.ts +12 -0
- package/dist/round-commit-store.d.ts.map +1 -0
- package/dist/round-commit-store.js +13 -0
- package/dist/round-commit-store.js.map +1 -0
- package/dist/round-coordinator.d.ts +25 -18
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +83 -71
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +14 -10
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +9 -13
- package/dist/round-driver.js.map +1 -1
- package/dist/round-gate.d.ts +31 -0
- package/dist/round-gate.d.ts.map +1 -0
- package/dist/round-gate.js +259 -0
- package/dist/round-gate.js.map +1 -0
- package/dist/round-recovery.d.ts +17 -0
- package/dist/round-recovery.d.ts.map +1 -0
- package/dist/round-recovery.js +117 -0
- package/dist/round-recovery.js.map +1 -0
- package/dist/round-report.d.ts +16 -0
- package/dist/round-report.d.ts.map +1 -0
- package/dist/round-report.js +401 -0
- package/dist/round-report.js.map +1 -0
- package/dist/round-transaction.d.ts +19 -12
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +102 -88
- package/dist/round-transaction.js.map +1 -1
- package/dist/runtime-services.d.ts +59 -0
- package/dist/runtime-services.d.ts.map +1 -0
- package/dist/runtime-services.js +460 -0
- package/dist/runtime-services.js.map +1 -0
- package/dist/storage.d.ts +3 -9
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +6 -17
- package/dist/storage.js.map +1 -1
- package/dist/token-utils.d.ts +9 -8
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +50 -10
- package/dist/token-utils.js.map +1 -1
- package/dist/vault-format.d.ts +4 -0
- package/dist/vault-format.d.ts.map +1 -0
- package/dist/vault-format.js +4 -0
- package/dist/vault-format.js.map +1 -0
- package/dist/vault-types.d.ts +24 -0
- package/dist/vault-types.d.ts.map +1 -0
- package/dist/vault-types.js +2 -0
- package/dist/vault-types.js.map +1 -0
- package/loop_policy.json +10 -12
- package/loopforge-policy.json +340 -0
- package/package.json +12 -6
- package/skills/perception/SKILL.md +199 -164
- package/dist/backends/interface.d.ts +0 -39
- package/dist/backends/interface.d.ts.map +0 -1
- package/dist/backends/interface.js +0 -6
- package/dist/backends/interface.js.map +0 -1
- package/dist/enforcement-gate.d.ts +0 -71
- package/dist/enforcement-gate.d.ts.map +0 -1
- package/dist/enforcement-gate.js +0 -744
- package/dist/enforcement-gate.js.map +0 -1
- package/dist/engine.d.ts +0 -59
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js +0 -596
- package/dist/engine.js.map +0 -1
- package/dist/self-eval.d.ts +0 -23
- package/dist/self-eval.d.ts.map +0 -1
- package/dist/self-eval.js +0 -181
- package/dist/self-eval.js.map +0 -1
- package/dist/verification-gate.d.ts +0 -56
- package/dist/verification-gate.d.ts.map +0 -1
- package/dist/verification-gate.js +0 -563
- package/dist/verification-gate.js.map +0 -1
|
@@ -5,10 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* verify → enforce → stop decision
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* paths (e.g. git verification only wired into one side) was a known
|
|
11
|
-
* risk. The RoundCoordinator is the single source of truth.
|
|
8
|
+
* The RoundCoordinator is the single source of truth for this pipeline;
|
|
9
|
+
* transport adapters only prepare input and route the resulting decision.
|
|
12
10
|
*
|
|
13
11
|
* State transitions:
|
|
14
12
|
* RoundStarted → EvidenceCaptured → EvaluationSubmitted
|
|
@@ -17,17 +15,18 @@
|
|
|
17
15
|
* Persistence is owned by round-transaction.ts so reject paths remain
|
|
18
16
|
* side-effect free and accepted decisions can be replayed idempotently.
|
|
19
17
|
*/
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
18
|
+
import { makeRoundGateContext, verifyRoundReport, enforceRoundReport } from "./round-gate.js";
|
|
19
|
+
import { buildRejectionPrompt, collectSkippedRoundFiles, findSafeRestorePoint, buildBacktrackPrompt, findBacktrackTargetGitHead, } from "./round-recovery.js";
|
|
22
20
|
import { logEvent } from "./observability.js";
|
|
23
21
|
import { getPolicy } from "./policy.js";
|
|
22
|
+
import { deriveCompilerProjection } from "./round-report.js";
|
|
24
23
|
// ── RoundCoordinator ───────────────────────────────────────────────────────
|
|
25
24
|
export class RoundCoordinator {
|
|
26
25
|
backend;
|
|
27
26
|
constructor(backend) {
|
|
28
27
|
this.backend = backend;
|
|
29
28
|
}
|
|
30
|
-
/** Process a single round's
|
|
29
|
+
/** Process a single round's round report through the decision pipeline:
|
|
31
30
|
* verify → enforce → stop decision.
|
|
32
31
|
*
|
|
33
32
|
* This is the single entry point called by SessionManager.
|
|
@@ -35,30 +34,36 @@ export class RoundCoordinator {
|
|
|
35
34
|
* - Compiling the next prompt (if action is "continue")
|
|
36
35
|
* - Managing heartbeat / signal handlers (runtime only)
|
|
37
36
|
* - Memory injection (both paths, before calling processRound)
|
|
38
|
-
* - Transactional
|
|
37
|
+
* - Transactional round-event commit (accepted rounds only)
|
|
39
38
|
* - State file I/O (both paths, after compiling)
|
|
40
39
|
*
|
|
41
40
|
* @param driftClarificationStreak v2.12: Current clarification streak
|
|
42
41
|
* from session state. Passed through to enforceRound for R7 escalation. */
|
|
43
42
|
processRound(input, driftClarificationStreak = 0) {
|
|
44
|
-
const { loopId, task, currentRound, maxRounds,
|
|
45
|
-
const
|
|
43
|
+
const { loopId, task, currentRound, maxRounds, roundReport: suppliedReport, previousProjection, consecutiveRejections, evidenceSnapshots, } = input;
|
|
44
|
+
const roundReport = suppliedReport;
|
|
45
|
+
const roundSuccess = roundReport.outcome === "success";
|
|
46
46
|
// ── 1. Query vault entries ──────────────────────────────────────────
|
|
47
|
-
//
|
|
48
|
-
// entries (execution_evidence, progress estimates) are both needed by
|
|
49
|
-
// the enforcement gate. queryEntries excludes feedback by default, so
|
|
50
|
-
// we issue a second query and merge both result sets.
|
|
47
|
+
// Merge lineage and canonical RoundEvent entries for replayable checks.
|
|
51
48
|
const prefix = `loop:${loopId}:r`;
|
|
52
49
|
const vaultEntries = this.backend
|
|
53
|
-
?
|
|
54
|
-
...this.backend.queryEntries({ prefix }),
|
|
55
|
-
...this.backend.queryEntries({ prefix, feedbackOnly: true }),
|
|
56
|
-
]
|
|
50
|
+
? this.backend.queryLoopEvents(loopId).filter((entry) => String(entry.task_id ?? "").startsWith(prefix))
|
|
57
51
|
: [];
|
|
58
52
|
// ── 2. Verification gate ────────────────────────────────────────────
|
|
59
|
-
const
|
|
53
|
+
const gateContext = makeRoundGateContext(roundReport, currentRound, vaultEntries, evidenceSnapshots ?? [], input.remainingCriteria ?? [], {
|
|
54
|
+
previous: previousProjection ?? null,
|
|
55
|
+
expectedAction: input.expectedAction,
|
|
56
|
+
backtrackSkippedFiles: input.backtrackSkippedFiles,
|
|
57
|
+
backtrackTargetGitHead: input.backtrackTargetGitHead,
|
|
58
|
+
consecutiveRejections,
|
|
59
|
+
driftClarificationStreak,
|
|
60
|
+
escalatedRejectionChecks: input.escalatedRejectionChecks,
|
|
61
|
+
});
|
|
62
|
+
const currentProjection = deriveCompilerProjection(roundReport, currentRound, input.remainingCriteria ?? [], evidenceSnapshots ?? []);
|
|
63
|
+
const verifyResult = verifyRoundReport(gateContext);
|
|
60
64
|
const verificationFlags = verifyResult.flags;
|
|
61
65
|
const gateContradicted = verifyResult.verdict === "contradicted";
|
|
66
|
+
const clarificationAccepted = verificationFlags.some((item) => item.check === "intent_drift" && item.severity === "warn");
|
|
62
67
|
if (gateContradicted) {
|
|
63
68
|
logEvent("gate_contradicted", {
|
|
64
69
|
loopId,
|
|
@@ -67,10 +72,8 @@ export class RoundCoordinator {
|
|
|
67
72
|
});
|
|
68
73
|
}
|
|
69
74
|
// ── 3. Enforcement gate ──────────────────────────────────────────
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
// missing. Rules that don't need evidence (R1/R2/R6/R7) always run.
|
|
73
|
-
const enforceResult = enforceRound(selfEval, verifyResult, currentRound, vaultEntries, consecutiveRejections, !extractionSucceeded, driftClarificationStreak);
|
|
75
|
+
// Enforcement consumes the same normalized Gate context as verification.
|
|
76
|
+
const enforceResult = enforceRoundReport(gateContext, verifyResult);
|
|
74
77
|
if (enforceResult.action === "reject") {
|
|
75
78
|
const newRejections = consecutiveRejections + 1;
|
|
76
79
|
const rejectionPrompt = buildRejectionPrompt(currentRound, task, enforceResult, verificationFlags);
|
|
@@ -91,9 +94,10 @@ export class RoundCoordinator {
|
|
|
91
94
|
roundSuccess,
|
|
92
95
|
gateContradicted,
|
|
93
96
|
newConsecutiveRejections: newRejections,
|
|
94
|
-
// Don't update
|
|
95
|
-
|
|
97
|
+
// Don't update lastRoundView on reject — the agent redoes the same round
|
|
98
|
+
newRoundProjection: undefined,
|
|
96
99
|
shouldPushSuccessTrajectory: false,
|
|
100
|
+
escalationIssued: enforceResult.escalation_issued ?? false,
|
|
97
101
|
};
|
|
98
102
|
}
|
|
99
103
|
if (enforceResult.action === "terminate") {
|
|
@@ -112,7 +116,7 @@ export class RoundCoordinator {
|
|
|
112
116
|
roundSuccess,
|
|
113
117
|
gateContradicted,
|
|
114
118
|
newConsecutiveRejections: 0,
|
|
115
|
-
|
|
119
|
+
newRoundProjection: currentProjection,
|
|
116
120
|
shouldPushSuccessTrajectory: false,
|
|
117
121
|
};
|
|
118
122
|
}
|
|
@@ -137,25 +141,15 @@ export class RoundCoordinator {
|
|
|
137
141
|
roundSuccess,
|
|
138
142
|
gateContradicted,
|
|
139
143
|
newConsecutiveRejections: 0,
|
|
140
|
-
|
|
144
|
+
newRoundProjection: currentProjection,
|
|
141
145
|
shouldPushSuccessTrajectory: false,
|
|
142
146
|
};
|
|
143
147
|
}
|
|
144
|
-
//
|
|
145
|
-
const skippedFiles =
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const ev = entry.execution_evidence;
|
|
150
|
-
const files = Array.isArray(ev.files_changed)
|
|
151
|
-
? ev.files_changed.filter((f) => typeof f === "string")
|
|
152
|
-
: [];
|
|
153
|
-
for (const f of files) {
|
|
154
|
-
if (!skippedFiles.includes(f))
|
|
155
|
-
skippedFiles.push(f);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
148
|
+
// Collect files changed in skipped rounds for the restore prompt.
|
|
149
|
+
const skippedFiles = collectSkippedRoundFiles(restorePoint.round, currentRound, vaultEntries);
|
|
150
|
+
// v2.13: Git HEAD the workspace must be restored to. Taken from the
|
|
151
|
+
// restore round's committed transaction snapshot.
|
|
152
|
+
const backtrackTargetGitHead = findBacktrackTargetGitHead(restorePoint.round, vaultEntries);
|
|
159
153
|
const backtrackPrompt = buildBacktrackPrompt(currentRound, restorePoint.round, enforceResult.check ?? "progress_stall", getPolicy().engine.backtrack_preserve_discoveries
|
|
160
154
|
? restorePoint.skippedDiscoveries
|
|
161
155
|
: [], skippedFiles);
|
|
@@ -171,6 +165,7 @@ export class RoundCoordinator {
|
|
|
171
165
|
action: "backtrack",
|
|
172
166
|
backtrackPrompt,
|
|
173
167
|
backtrackTarget: restorePoint.round,
|
|
168
|
+
backtrackTargetGitHead,
|
|
174
169
|
backtrackSkippedDiscoveries: getPolicy().engine.backtrack_preserve_discoveries
|
|
175
170
|
? restorePoint.skippedDiscoveries
|
|
176
171
|
: [],
|
|
@@ -183,34 +178,22 @@ export class RoundCoordinator {
|
|
|
183
178
|
roundSuccess,
|
|
184
179
|
gateContradicted,
|
|
185
180
|
newConsecutiveRejections: 0, // reset — fresh start
|
|
186
|
-
|
|
181
|
+
newRoundProjection: undefined,
|
|
187
182
|
shouldPushSuccessTrajectory: false,
|
|
188
183
|
};
|
|
189
184
|
}
|
|
190
185
|
// Accept: reset rejection counter
|
|
191
186
|
// (consecutiveRejections reset to 0 — caller persists)
|
|
192
|
-
// ── 4.
|
|
187
|
+
// ── 4. Canonical round-report commit (AFTER enforcement) ────────────
|
|
193
188
|
// ── 5. Stop condition checks ────────────────────────────────────────
|
|
194
|
-
// 5a.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
action: "stop",
|
|
198
|
-
stopReason: "stalled",
|
|
199
|
-
verificationFlags,
|
|
200
|
-
roundSuccess,
|
|
201
|
-
gateContradicted,
|
|
202
|
-
newConsecutiveRejections: 0,
|
|
203
|
-
newLastSelfEval: selfEval,
|
|
204
|
-
shouldPushSuccessTrajectory: !gateContradicted,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
// 5b. Agent says stop
|
|
208
|
-
if (!selfEval.should_continue) {
|
|
189
|
+
// 5a. The Agent requests a stop. Runtime evidence and gate checks have
|
|
190
|
+
// already decided whether that stop can be accepted as completion.
|
|
191
|
+
if (roundReport.continuation === "stop") {
|
|
209
192
|
let reason;
|
|
210
193
|
if (roundSuccess) {
|
|
211
194
|
reason = "completed";
|
|
212
195
|
}
|
|
213
|
-
else if (
|
|
196
|
+
else if (roundReport.outcome === "blocked") {
|
|
214
197
|
reason = "blocked";
|
|
215
198
|
}
|
|
216
199
|
else {
|
|
@@ -223,18 +206,47 @@ export class RoundCoordinator {
|
|
|
223
206
|
roundSuccess,
|
|
224
207
|
gateContradicted,
|
|
225
208
|
newConsecutiveRejections: 0,
|
|
226
|
-
|
|
209
|
+
newRoundProjection: currentProjection,
|
|
210
|
+
clarificationAccepted,
|
|
227
211
|
shouldPushSuccessTrajectory: !gateContradicted,
|
|
228
212
|
};
|
|
229
213
|
}
|
|
214
|
+
// 5b. Circuit breaker — max consecutive failed rounds.
|
|
215
|
+
//
|
|
216
|
+
// When the last N accepted rounds (including this one) all reported
|
|
217
|
+
// failure with no recovery, the loop is failing faster than it can
|
|
218
|
+
// self-correct. Stop before errors compound (p^N). The trajectory only
|
|
219
|
+
// contains committed, non-contradicted rounds, so this never fires on
|
|
220
|
+
// an enforcement-rejected round (those never reach this point).
|
|
221
|
+
const breakerMax = getPolicy().engine.max_circuit_breaker;
|
|
222
|
+
if (breakerMax > 0) {
|
|
223
|
+
const breakerWindow = [...(input.successTrajectory ?? []), roundSuccess]
|
|
224
|
+
.slice(-breakerMax);
|
|
225
|
+
if (breakerWindow.length === breakerMax &&
|
|
226
|
+
breakerWindow.every((value) => value === false)) {
|
|
227
|
+
logEvent("session_end", {
|
|
228
|
+
loopId,
|
|
229
|
+
stopReason: "circuit_breaker",
|
|
230
|
+
round: currentRound,
|
|
231
|
+
});
|
|
232
|
+
return {
|
|
233
|
+
action: "stop",
|
|
234
|
+
stopReason: "circuit_breaker",
|
|
235
|
+
verificationFlags,
|
|
236
|
+
roundSuccess,
|
|
237
|
+
gateContradicted,
|
|
238
|
+
newConsecutiveRejections: 0,
|
|
239
|
+
newRoundProjection: currentProjection,
|
|
240
|
+
clarificationAccepted,
|
|
241
|
+
shouldPushSuccessTrajectory: false,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
}
|
|
230
245
|
// 5c. Max rounds reached
|
|
231
246
|
//
|
|
232
|
-
//
|
|
233
|
-
//
|
|
234
|
-
//
|
|
235
|
-
// and enforceProgressStallTerminal (R5: delta = 0 for N rounds → terminate).
|
|
236
|
-
// These use progress_estimate, not the binary success flag, so they
|
|
237
|
-
// correctly distinguish "task not done yet" from "agent is stuck".
|
|
247
|
+
// Genuine agent stalls are detected by the enforcement gate. The
|
|
248
|
+
// coordinator deliberately does not infer completion from a binary
|
|
249
|
+
// success flag or from an agent-supplied progress estimate.
|
|
238
250
|
if (currentRound >= maxRounds) {
|
|
239
251
|
return {
|
|
240
252
|
action: "stop",
|
|
@@ -243,7 +255,8 @@ export class RoundCoordinator {
|
|
|
243
255
|
roundSuccess,
|
|
244
256
|
gateContradicted,
|
|
245
257
|
newConsecutiveRejections: 0,
|
|
246
|
-
|
|
258
|
+
newRoundProjection: currentProjection,
|
|
259
|
+
clarificationAccepted,
|
|
247
260
|
shouldPushSuccessTrajectory: !gateContradicted,
|
|
248
261
|
};
|
|
249
262
|
}
|
|
@@ -255,10 +268,9 @@ export class RoundCoordinator {
|
|
|
255
268
|
roundSuccess,
|
|
256
269
|
gateContradicted,
|
|
257
270
|
newConsecutiveRejections: 0,
|
|
258
|
-
|
|
271
|
+
newRoundProjection: currentProjection,
|
|
259
272
|
shouldPushSuccessTrajectory: !gateContradicted,
|
|
260
|
-
|
|
261
|
-
clarificationAccepted: enforceResult.clarification_accepted ?? false,
|
|
273
|
+
clarificationAccepted,
|
|
262
274
|
};
|
|
263
275
|
}
|
|
264
276
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-coordinator.js","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"round-coordinator.js","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"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"}
|
package/dist/round-driver.d.ts
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* as heartbeats, executor deadlines, MCP leases, and response formatting stay
|
|
6
6
|
* in their adapters.
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
9
|
-
import {
|
|
8
|
+
import type { LoopStore } from "./loop-store.js";
|
|
9
|
+
import { RuntimeServices } from "./runtime-services.js";
|
|
10
10
|
import type { ProviderSnapshot } from "./evidence-provider.js";
|
|
11
|
-
import type { LoopForgeRequest, PromptArtifact,
|
|
11
|
+
import type { CompilerRoundProjection, LoopForgeRequest, PromptArtifact, RoundReport } from "./protocol.js";
|
|
12
12
|
import type { RoundTransactionOutcome, RoundTransactionSnapshot } from "./round-transaction.js";
|
|
13
13
|
export interface PreparedRound {
|
|
14
14
|
prompt: string;
|
|
@@ -18,21 +18,28 @@ export interface PreparedRound {
|
|
|
18
18
|
snapshot: RoundTransactionSnapshot;
|
|
19
19
|
stateFileContent?: string;
|
|
20
20
|
warnings?: string[];
|
|
21
|
+
canonicalState?: unknown;
|
|
21
22
|
}
|
|
22
23
|
export interface CompleteRoundInput {
|
|
23
24
|
snapshot: RoundTransactionSnapshot;
|
|
24
25
|
loopId: string;
|
|
25
26
|
task: string;
|
|
26
27
|
maxRounds: number;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
lastSelfEval?: SelfEvaluation;
|
|
28
|
+
roundReport: RoundReport;
|
|
29
|
+
previousProjection?: CompilerRoundProjection;
|
|
30
30
|
consecutiveRejections: number;
|
|
31
31
|
successTrajectory: boolean[];
|
|
32
32
|
/** v2.12: Current clarification streak for R7 escalation. */
|
|
33
33
|
driftClarificationStreak?: number;
|
|
34
|
+
/** Terminal enforcement checks that already consumed their guided retry. */
|
|
35
|
+
escalatedRejectionChecks?: string[];
|
|
34
36
|
/** v2.13: Files from skipped backtrack rounds for restore check. */
|
|
35
37
|
backtrackSkippedFiles?: string[];
|
|
38
|
+
/** v2.13: Git HEAD of the active backtrack restore point. Passed to the
|
|
39
|
+
* verification gate; the post-backtrack round must match it. */
|
|
40
|
+
backtrackTargetGitHead?: string;
|
|
41
|
+
expectedAction?: string;
|
|
42
|
+
remainingCriteria?: string[];
|
|
36
43
|
}
|
|
37
44
|
export interface CompletedRound {
|
|
38
45
|
outcome: RoundTransactionOutcome;
|
|
@@ -41,11 +48,8 @@ export interface CompletedRound {
|
|
|
41
48
|
export declare class RoundDriver {
|
|
42
49
|
private readonly engine;
|
|
43
50
|
private readonly backend;
|
|
44
|
-
constructor(engine:
|
|
51
|
+
constructor(engine: RuntimeServices, backend?: LoopStore);
|
|
45
52
|
prepare(request: LoopForgeRequest, loopId: string, round: number): Promise<PreparedRound | null>;
|
|
46
|
-
/** Synchronous fallback for legacy embedding APIs. Async evidence providers
|
|
47
|
-
* are deliberately skipped by EvidenceCollector.collect(). */
|
|
48
|
-
prepareSync(request: LoopForgeRequest, loopId: string, round: number): PreparedRound | null;
|
|
49
53
|
private compile;
|
|
50
54
|
/** Compile a fresh prompt for a zero-commit enforcement retry. The logical
|
|
51
55
|
* round ID and before-evidence snapshot remain stable; only attempt changes. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-driver.d.ts","sourceRoot":"","sources":["../src/round-driver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"round-driver.d.ts","sourceRoot":"","sources":["../src/round-driver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAEhB,cAAc,EACd,WAAW,EACZ,MAAM,eAAe,CAAC;AAMvB,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAC7C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,6DAA6D;IAC7D,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,4EAA4E;IAC5E,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;qEACiE;IACjE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,uBAAuB,CAAC;IACjC,cAAc,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAED,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;gBAEP,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,SAAS;IAInE,OAAO,CACX,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAOhC,OAAO,CAAC,OAAO;IAgBf;oFACgF;IAC1E,YAAY,CAChB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,wBAAwB,EAClC,eAAe,EAAE,MAAM,EACvB,qBAAqB,EAAE,MAAM,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAwBhC,OAAO,CAAC,aAAa;IAyBf,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAyBlE,OAAO,CAAC,QAAQ,EAAE,wBAAwB,GAAG,uBAAuB,GAAG,IAAI;IAO3E,OAAO,CAAC,eAAe;CAMxB"}
|
package/dist/round-driver.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* in their adapters.
|
|
7
7
|
*/
|
|
8
8
|
import { EvidenceCollector } from "./evidence-provider.js";
|
|
9
|
-
import {
|
|
9
|
+
import { writeStateFile } from "./policy.js";
|
|
10
10
|
import { prepareRejectedAttempt, prepareRoundTransaction, RoundTransactionCoordinator, } from "./round-transaction.js";
|
|
11
11
|
export class RoundDriver {
|
|
12
12
|
engine;
|
|
@@ -22,15 +22,6 @@ export class RoundDriver {
|
|
|
22
22
|
const evidenceBaseline = await this.collectEvidence(loopId, "before");
|
|
23
23
|
return this.finishPrepare(response, loopId, round, evidenceBaseline);
|
|
24
24
|
}
|
|
25
|
-
/** Synchronous fallback for legacy embedding APIs. Async evidence providers
|
|
26
|
-
* are deliberately skipped by EvidenceCollector.collect(). */
|
|
27
|
-
prepareSync(request, loopId, round) {
|
|
28
|
-
const response = this.compile(request, loopId, true);
|
|
29
|
-
if (!response)
|
|
30
|
-
return null;
|
|
31
|
-
const evidenceBaseline = EvidenceCollector.fromProviderNames(getPolicy().evidence.providers).collect({ loopId });
|
|
32
|
-
return this.finishPrepare(response, loopId, round, evidenceBaseline);
|
|
33
|
-
}
|
|
34
25
|
compile(request, loopId, persistLineage) {
|
|
35
26
|
const compiled = this.engine.invokeLoopCompile(request, undefined, { persistLineage });
|
|
36
27
|
const response = compiled.response;
|
|
@@ -62,6 +53,7 @@ export class RoundDriver {
|
|
|
62
53
|
snapshot,
|
|
63
54
|
stateFileContent: response.state_file_content,
|
|
64
55
|
warnings: response.warnings,
|
|
56
|
+
canonicalState: response.canonical_state,
|
|
65
57
|
};
|
|
66
58
|
}
|
|
67
59
|
finishPrepare(response, loopId, round, evidenceBaseline) {
|
|
@@ -75,6 +67,7 @@ export class RoundDriver {
|
|
|
75
67
|
snapshot,
|
|
76
68
|
stateFileContent: response.state_file_content,
|
|
77
69
|
warnings: response.warnings,
|
|
70
|
+
canonicalState: response.canonical_state,
|
|
78
71
|
};
|
|
79
72
|
}
|
|
80
73
|
async complete(input) {
|
|
@@ -84,14 +77,17 @@ export class RoundDriver {
|
|
|
84
77
|
snapshot: input.snapshot,
|
|
85
78
|
task: input.task,
|
|
86
79
|
maxRounds: input.maxRounds,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
lastSelfEval: input.lastSelfEval,
|
|
80
|
+
roundReport: input.roundReport,
|
|
81
|
+
previousProjection: input.previousProjection,
|
|
90
82
|
consecutiveRejections: input.consecutiveRejections,
|
|
91
83
|
successTrajectory: input.successTrajectory,
|
|
92
84
|
actualEvidence,
|
|
93
85
|
driftClarificationStreak: input.driftClarificationStreak,
|
|
94
86
|
backtrackSkippedFiles: input.backtrackSkippedFiles,
|
|
87
|
+
backtrackTargetGitHead: input.backtrackTargetGitHead,
|
|
88
|
+
expectedAction: input.expectedAction,
|
|
89
|
+
escalatedRejectionChecks: input.escalatedRejectionChecks,
|
|
90
|
+
remainingCriteria: input.remainingCriteria,
|
|
95
91
|
});
|
|
96
92
|
return { outcome, actualEvidence };
|
|
97
93
|
}
|
package/dist/round-driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-driver.js","sourceRoot":"","sources":["../src/round-driver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,
|
|
1
|
+
{"version":3,"file":"round-driver.js","sourceRoot":"","sources":["../src/round-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { VaultEntry } from "./vault-types.js";
|
|
2
|
+
import type { ProviderSnapshot } from "./evidence-provider.js";
|
|
3
|
+
import type { CompilerRoundProjection, EvidenceDerivedView, EnforcementResult, RoundReport, VerificationResult } from "./protocol.js";
|
|
4
|
+
/** The only input accepted by the runtime verification and enforcement gates. */
|
|
5
|
+
export interface RoundGateContext {
|
|
6
|
+
report: RoundReport;
|
|
7
|
+
evidence: EvidenceDerivedView;
|
|
8
|
+
previous?: CompilerRoundProjection | null;
|
|
9
|
+
history: VaultEntry[];
|
|
10
|
+
currentRound: number;
|
|
11
|
+
providerSnapshots: ProviderSnapshot[];
|
|
12
|
+
expectedAction?: string;
|
|
13
|
+
backtrackSkippedFiles?: string[];
|
|
14
|
+
/** v2.13: Git HEAD commit of the backtrack restore point. When set, the
|
|
15
|
+
* current round's git evidence must match it — the post-backtrack round
|
|
16
|
+
* is a pure verification round, so any HEAD movement means the workspace
|
|
17
|
+
* was not restored before working. */
|
|
18
|
+
backtrackTargetGitHead?: string;
|
|
19
|
+
consecutiveRejections?: number;
|
|
20
|
+
driftClarificationStreak?: number;
|
|
21
|
+
/** Terminal enforcement checks that have already issued their one guided
|
|
22
|
+
* retry. Tracked per rule so unrelated failures do not consume each
|
|
23
|
+
* other's escalation budget. */
|
|
24
|
+
escalatedRejectionChecks?: string[];
|
|
25
|
+
}
|
|
26
|
+
/** Verify a normalized report without creating a legacy round projection. */
|
|
27
|
+
export declare function verifyRoundReport(context: RoundGateContext): VerificationResult;
|
|
28
|
+
/** Enforcement consumes the same normalized context and never re-extracts evidence. */
|
|
29
|
+
export declare function enforceRoundReport(context: RoundGateContext, verification: VerificationResult): EnforcementResult;
|
|
30
|
+
export declare function makeRoundGateContext(report: RoundReport, currentRound: number, history: VaultEntry[], providerSnapshots: ProviderSnapshot[], remainingCriteria?: string[], options?: Omit<RoundGateContext, "report" | "evidence" | "currentRound" | "history" | "providerSnapshots">): RoundGateContext;
|
|
31
|
+
//# sourceMappingURL=round-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round-gate.d.ts","sourceRoot":"","sources":["../src/round-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EAEX,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAcvB,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;;;2CAGuC;IACvC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;qCAEiC;IACjC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CACrC;AA2FD,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,CA4L/E;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,kBAAkB,GAC/B,iBAAiB,CA0EnB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,UAAU,EAAE,EACrB,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,iBAAiB,GAAE,MAAM,EAAO,EAChC,OAAO,GAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,mBAAmB,CAAM,GAC7G,gBAAgB,CASlB"}
|