loopforge 2.7.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 +136 -182
- 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 +211 -64
- 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 +26 -26
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +45 -71
- 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 +23 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -26
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +2 -2
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +321 -315
- 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 -311
- 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 +123 -19
- 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 +65 -84
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +667 -224
- 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 +401 -254
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.d.ts +24 -0
- package/dist/policy-metrics.d.ts.map +1 -1
- package/dist/policy-metrics.js +174 -0
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +74 -12
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +124 -19
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +8 -4
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +533 -86
- 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 +259 -173
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +17 -96
- 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 +53 -22
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +140 -44
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +18 -10
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +11 -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 +23 -12
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +104 -91
- 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/{engine.js → runtime-services.js} +157 -275
- 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 +12 -8
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +56 -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 +13 -7
- package/skills/perception/SKILL.md +200 -90
- 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 -50
- package/dist/enforcement-gate.d.ts.map +0 -1
- package/dist/enforcement-gate.js +0 -501
- 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.map +0 -1
- package/dist/interop.d.ts +0 -35
- package/dist/interop.d.ts.map +0 -1
- package/dist/interop.js +0 -34
- package/dist/interop.js.map +0 -1
- package/dist/run.d.ts +0 -51
- package/dist/run.d.ts.map +0 -1
- package/dist/run.js +0 -200
- package/dist/run.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 -151
- package/dist/self-eval.js.map +0 -1
- package/dist/verification-gate.d.ts +0 -52
- package/dist/verification-gate.d.ts.map +0 -1
- package/dist/verification-gate.js +0 -527
- 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,16 +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";
|
|
21
|
+
import { getPolicy } from "./policy.js";
|
|
22
|
+
import { deriveCompilerProjection } from "./round-report.js";
|
|
23
23
|
// ── RoundCoordinator ───────────────────────────────────────────────────────
|
|
24
24
|
export class RoundCoordinator {
|
|
25
25
|
backend;
|
|
26
26
|
constructor(backend) {
|
|
27
27
|
this.backend = backend;
|
|
28
28
|
}
|
|
29
|
-
/** Process a single round's
|
|
29
|
+
/** Process a single round's round report through the decision pipeline:
|
|
30
30
|
* verify → enforce → stop decision.
|
|
31
31
|
*
|
|
32
32
|
* This is the single entry point called by SessionManager.
|
|
@@ -34,20 +34,36 @@ export class RoundCoordinator {
|
|
|
34
34
|
* - Compiling the next prompt (if action is "continue")
|
|
35
35
|
* - Managing heartbeat / signal handlers (runtime only)
|
|
36
36
|
* - Memory injection (both paths, before calling processRound)
|
|
37
|
-
* - Transactional
|
|
37
|
+
* - Transactional round-event commit (accepted rounds only)
|
|
38
38
|
* - State file I/O (both paths, after compiling)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
*
|
|
40
|
+
* @param driftClarificationStreak v2.12: Current clarification streak
|
|
41
|
+
* from session state. Passed through to enforceRound for R7 escalation. */
|
|
42
|
+
processRound(input, driftClarificationStreak = 0) {
|
|
43
|
+
const { loopId, task, currentRound, maxRounds, roundReport: suppliedReport, previousProjection, consecutiveRejections, evidenceSnapshots, } = input;
|
|
44
|
+
const roundReport = suppliedReport;
|
|
45
|
+
const roundSuccess = roundReport.outcome === "success";
|
|
43
46
|
// ── 1. Query vault entries ──────────────────────────────────────────
|
|
47
|
+
// Merge lineage and canonical RoundEvent entries for replayable checks.
|
|
48
|
+
const prefix = `loop:${loopId}:r`;
|
|
44
49
|
const vaultEntries = this.backend
|
|
45
|
-
? this.backend.
|
|
50
|
+
? this.backend.queryLoopEvents(loopId).filter((entry) => String(entry.task_id ?? "").startsWith(prefix))
|
|
46
51
|
: [];
|
|
47
52
|
// ── 2. Verification gate ────────────────────────────────────────────
|
|
48
|
-
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);
|
|
49
64
|
const verificationFlags = verifyResult.flags;
|
|
50
65
|
const gateContradicted = verifyResult.verdict === "contradicted";
|
|
66
|
+
const clarificationAccepted = verificationFlags.some((item) => item.check === "intent_drift" && item.severity === "warn");
|
|
51
67
|
if (gateContradicted) {
|
|
52
68
|
logEvent("gate_contradicted", {
|
|
53
69
|
loopId,
|
|
@@ -56,10 +72,8 @@ export class RoundCoordinator {
|
|
|
56
72
|
});
|
|
57
73
|
}
|
|
58
74
|
// ── 3. Enforcement gate ──────────────────────────────────────────
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
// missing. Rules that don't need evidence (R1/R2/R6/R7) always run.
|
|
62
|
-
const enforceResult = enforceRound(selfEval, verifyResult, currentRound, vaultEntries, consecutiveRejections, !extractionSucceeded);
|
|
75
|
+
// Enforcement consumes the same normalized Gate context as verification.
|
|
76
|
+
const enforceResult = enforceRoundReport(gateContext, verifyResult);
|
|
63
77
|
if (enforceResult.action === "reject") {
|
|
64
78
|
const newRejections = consecutiveRejections + 1;
|
|
65
79
|
const rejectionPrompt = buildRejectionPrompt(currentRound, task, enforceResult, verificationFlags);
|
|
@@ -80,9 +94,10 @@ export class RoundCoordinator {
|
|
|
80
94
|
roundSuccess,
|
|
81
95
|
gateContradicted,
|
|
82
96
|
newConsecutiveRejections: newRejections,
|
|
83
|
-
// Don't update
|
|
84
|
-
|
|
97
|
+
// Don't update lastRoundView on reject — the agent redoes the same round
|
|
98
|
+
newRoundProjection: undefined,
|
|
85
99
|
shouldPushSuccessTrajectory: false,
|
|
100
|
+
escalationIssued: enforceResult.escalation_issued ?? false,
|
|
86
101
|
};
|
|
87
102
|
}
|
|
88
103
|
if (enforceResult.action === "terminate") {
|
|
@@ -101,34 +116,84 @@ export class RoundCoordinator {
|
|
|
101
116
|
roundSuccess,
|
|
102
117
|
gateContradicted,
|
|
103
118
|
newConsecutiveRejections: 0,
|
|
104
|
-
|
|
119
|
+
newRoundProjection: currentProjection,
|
|
105
120
|
shouldPushSuccessTrajectory: false,
|
|
106
121
|
};
|
|
107
122
|
}
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
123
|
+
// ── v2.10: Backtrack ──────────────────────────────────────────────────
|
|
124
|
+
if (enforceResult.action === "backtrack") {
|
|
125
|
+
const maxDepth = getPolicy().engine.backtrack_max_depth;
|
|
126
|
+
const restorePoint = findSafeRestorePoint(currentRound, vaultEntries, maxDepth);
|
|
127
|
+
if (!restorePoint) {
|
|
128
|
+
// No clean round found within maxDepth — fall through to terminate
|
|
129
|
+
logEvent("session_end", {
|
|
130
|
+
loopId,
|
|
131
|
+
stopReason: "enforcement_terminated",
|
|
132
|
+
round: currentRound,
|
|
133
|
+
});
|
|
134
|
+
return {
|
|
135
|
+
action: "terminate",
|
|
136
|
+
stopReason: "enforcement_terminated",
|
|
137
|
+
verificationFlags,
|
|
138
|
+
enforcementAction: "terminate",
|
|
139
|
+
enforcementReason: `${enforceResult.reason} (backtrack failed: no clean restore point within ${maxDepth} rounds)`,
|
|
140
|
+
rejectionCheck: enforceResult.check,
|
|
141
|
+
roundSuccess,
|
|
142
|
+
gateContradicted,
|
|
143
|
+
newConsecutiveRejections: 0,
|
|
144
|
+
newRoundProjection: currentProjection,
|
|
145
|
+
shouldPushSuccessTrajectory: false,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
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);
|
|
153
|
+
const backtrackPrompt = buildBacktrackPrompt(currentRound, restorePoint.round, enforceResult.check ?? "progress_stall", getPolicy().engine.backtrack_preserve_discoveries
|
|
154
|
+
? restorePoint.skippedDiscoveries
|
|
155
|
+
: [], skippedFiles);
|
|
156
|
+
logEvent("enforcement_backtrack", {
|
|
157
|
+
loopId,
|
|
158
|
+
round: currentRound,
|
|
159
|
+
reason: enforceResult.reason.slice(0, 120),
|
|
160
|
+
check: enforceResult.check ?? "",
|
|
161
|
+
backtrackTarget: restorePoint.round,
|
|
162
|
+
skippedDiscoveries: restorePoint.skippedDiscoveries.length,
|
|
163
|
+
});
|
|
114
164
|
return {
|
|
115
|
-
action: "
|
|
116
|
-
|
|
165
|
+
action: "backtrack",
|
|
166
|
+
backtrackPrompt,
|
|
167
|
+
backtrackTarget: restorePoint.round,
|
|
168
|
+
backtrackTargetGitHead,
|
|
169
|
+
backtrackSkippedDiscoveries: getPolicy().engine.backtrack_preserve_discoveries
|
|
170
|
+
? restorePoint.skippedDiscoveries
|
|
171
|
+
: [],
|
|
172
|
+
backtrackSkippedFiles: skippedFiles,
|
|
173
|
+
backtrackTriggerRule: enforceResult.check,
|
|
117
174
|
verificationFlags,
|
|
175
|
+
enforcementAction: "backtrack",
|
|
176
|
+
enforcementReason: enforceResult.reason,
|
|
177
|
+
rejectionCheck: enforceResult.check,
|
|
118
178
|
roundSuccess,
|
|
119
179
|
gateContradicted,
|
|
120
|
-
newConsecutiveRejections: 0,
|
|
121
|
-
|
|
122
|
-
shouldPushSuccessTrajectory:
|
|
180
|
+
newConsecutiveRejections: 0, // reset — fresh start
|
|
181
|
+
newRoundProjection: undefined,
|
|
182
|
+
shouldPushSuccessTrajectory: false,
|
|
123
183
|
};
|
|
124
184
|
}
|
|
125
|
-
//
|
|
126
|
-
|
|
185
|
+
// Accept: reset rejection counter
|
|
186
|
+
// (consecutiveRejections reset to 0 — caller persists)
|
|
187
|
+
// ── 4. Canonical round-report commit (AFTER enforcement) ────────────
|
|
188
|
+
// ── 5. Stop condition checks ────────────────────────────────────────
|
|
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") {
|
|
127
192
|
let reason;
|
|
128
193
|
if (roundSuccess) {
|
|
129
194
|
reason = "completed";
|
|
130
195
|
}
|
|
131
|
-
else if (
|
|
196
|
+
else if (roundReport.outcome === "blocked") {
|
|
132
197
|
reason = "blocked";
|
|
133
198
|
}
|
|
134
199
|
else {
|
|
@@ -141,18 +206,47 @@ export class RoundCoordinator {
|
|
|
141
206
|
roundSuccess,
|
|
142
207
|
gateContradicted,
|
|
143
208
|
newConsecutiveRejections: 0,
|
|
144
|
-
|
|
209
|
+
newRoundProjection: currentProjection,
|
|
210
|
+
clarificationAccepted,
|
|
145
211
|
shouldPushSuccessTrajectory: !gateContradicted,
|
|
146
212
|
};
|
|
147
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
|
+
}
|
|
148
245
|
// 5c. Max rounds reached
|
|
149
246
|
//
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
// and enforceProgressStallTerminal (R5: delta = 0 for N rounds → terminate).
|
|
154
|
-
// These use progress_estimate, not the binary success flag, so they
|
|
155
|
-
// 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.
|
|
156
250
|
if (currentRound >= maxRounds) {
|
|
157
251
|
return {
|
|
158
252
|
action: "stop",
|
|
@@ -161,7 +255,8 @@ export class RoundCoordinator {
|
|
|
161
255
|
roundSuccess,
|
|
162
256
|
gateContradicted,
|
|
163
257
|
newConsecutiveRejections: 0,
|
|
164
|
-
|
|
258
|
+
newRoundProjection: currentProjection,
|
|
259
|
+
clarificationAccepted,
|
|
165
260
|
shouldPushSuccessTrajectory: !gateContradicted,
|
|
166
261
|
};
|
|
167
262
|
}
|
|
@@ -173,8 +268,9 @@ export class RoundCoordinator {
|
|
|
173
268
|
roundSuccess,
|
|
174
269
|
gateContradicted,
|
|
175
270
|
newConsecutiveRejections: 0,
|
|
176
|
-
|
|
271
|
+
newRoundProjection: currentProjection,
|
|
177
272
|
shouldPushSuccessTrajectory: !gateContradicted,
|
|
273
|
+
clarificationAccepted,
|
|
178
274
|
};
|
|
179
275
|
}
|
|
180
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,17 +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
|
+
/** v2.12: Current clarification streak for R7 escalation. */
|
|
33
|
+
driftClarificationStreak?: number;
|
|
34
|
+
/** Terminal enforcement checks that already consumed their guided retry. */
|
|
35
|
+
escalatedRejectionChecks?: string[];
|
|
36
|
+
/** v2.13: Files from skipped backtrack rounds for restore check. */
|
|
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[];
|
|
32
43
|
}
|
|
33
44
|
export interface CompletedRound {
|
|
34
45
|
outcome: RoundTransactionOutcome;
|
|
@@ -37,11 +48,8 @@ export interface CompletedRound {
|
|
|
37
48
|
export declare class RoundDriver {
|
|
38
49
|
private readonly engine;
|
|
39
50
|
private readonly backend;
|
|
40
|
-
constructor(engine:
|
|
51
|
+
constructor(engine: RuntimeServices, backend?: LoopStore);
|
|
41
52
|
prepare(request: LoopForgeRequest, loopId: string, round: number): Promise<PreparedRound | null>;
|
|
42
|
-
/** Synchronous fallback for legacy embedding APIs. Async evidence providers
|
|
43
|
-
* are deliberately skipped by EvidenceCollector.collect(). */
|
|
44
|
-
prepareSync(request: LoopForgeRequest, loopId: string, round: number): PreparedRound | null;
|
|
45
53
|
private compile;
|
|
46
54
|
/** Compile a fresh prompt for a zero-commit enforcement retry. The logical
|
|
47
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,12 +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,
|
|
85
|
+
driftClarificationStreak: input.driftClarificationStreak,
|
|
86
|
+
backtrackSkippedFiles: input.backtrackSkippedFiles,
|
|
87
|
+
backtrackTargetGitHead: input.backtrackTargetGitHead,
|
|
88
|
+
expectedAction: input.expectedAction,
|
|
89
|
+
escalatedRejectionChecks: input.escalatedRejectionChecks,
|
|
90
|
+
remainingCriteria: input.remainingCriteria,
|
|
93
91
|
});
|
|
94
92
|
return { outcome, actualEvidence };
|
|
95
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"}
|