loopforge 2.11.0 → 3.2.1
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 +4 -4
- package/dist/audit.d.ts +50 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +158 -0
- package/dist/audit.js.map +1 -0
- package/dist/canonical-state.d.ts +21 -9
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +34 -16
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -6
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-governance.d.ts +40 -0
- package/dist/cognitive-governance.d.ts.map +1 -0
- package/dist/cognitive-governance.js +126 -0
- package/dist/cognitive-governance.js.map +1 -0
- package/dist/enforcement-gate.d.ts +8 -3
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +419 -92
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +47 -7
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +303 -60
- package/dist/engine.js.map +1 -1
- package/dist/evidence-claims.d.ts +50 -0
- package/dist/evidence-claims.d.ts.map +1 -0
- package/dist/evidence-claims.js +134 -0
- package/dist/evidence-claims.js.map +1 -0
- package/dist/generate-schema.js +6 -1
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +41 -3
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +310 -38
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-projection.d.ts +26 -0
- package/dist/loop-projection.d.ts.map +1 -0
- package/dist/loop-projection.js +142 -0
- package/dist/loop-projection.js.map +1 -0
- package/dist/loop-store.d.ts +91 -41
- package/dist/loop-store.d.ts.map +1 -1
- package/dist/loop-store.js +243 -173
- package/dist/loop-store.js.map +1 -1
- package/dist/mcp/round-lifecycle.d.ts +216 -0
- package/dist/mcp/round-lifecycle.d.ts.map +1 -0
- package/dist/mcp/round-lifecycle.js +926 -0
- package/dist/mcp/round-lifecycle.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +65 -9
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +47 -139
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +284 -784
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +23 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +270 -79
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.d.ts +11 -0
- package/dist/policy-metrics.d.ts.map +1 -1
- package/dist/policy-metrics.js +118 -21
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +26 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +13 -2
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +34 -1
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +320 -42
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/protocol.d.ts +169 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +39 -0
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts +5 -5
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +9 -8
- package/dist/replay.js.map +1 -1
- package/dist/round-coordinator.d.ts +6 -3
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +38 -19
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +9 -4
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +15 -7
- package/dist/round-driver.js.map +1 -1
- package/dist/round-transaction.d.ts +7 -3
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +93 -88
- package/dist/round-transaction.js.map +1 -1
- package/dist/self-eval.d.ts +31 -1
- package/dist/self-eval.d.ts.map +1 -1
- package/dist/self-eval.js +115 -12
- package/dist/self-eval.js.map +1 -1
- package/dist/storage.d.ts +3 -4
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +5 -4
- package/dist/storage.js.map +1 -1
- package/dist/token-utils.d.ts +20 -7
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +68 -9
- package/dist/token-utils.js.map +1 -1
- package/dist/verification-gate.d.ts +54 -2
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +433 -25
- package/dist/verification-gate.js.map +1 -1
- package/loop_policy.json +35 -8
- package/package.json +3 -2
- package/skills/perception/SKILL.md +24 -6
- 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/replay.js
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
/** ReplayBackend — time-travel queries over
|
|
1
|
+
/** ReplayBackend — time-travel queries over loop lineage.
|
|
2
2
|
*
|
|
3
|
-
* Depends on
|
|
3
|
+
* Depends on LoopStore interface — no direct filesystem access.
|
|
4
4
|
* Enables audit, comparison, and timeline analysis of loop rounds.
|
|
5
5
|
*/
|
|
6
|
+
import { queryLoopEntries } from "./loop-store.js";
|
|
6
7
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
7
8
|
// ReplayBackend
|
|
8
9
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
9
10
|
export class ReplayBackend {
|
|
10
|
-
|
|
11
|
-
constructor(
|
|
12
|
-
this.
|
|
11
|
+
store;
|
|
12
|
+
constructor(store) {
|
|
13
|
+
this.store = store;
|
|
13
14
|
}
|
|
14
15
|
// ── Single-round lookup ────────────────────────────────────────────────
|
|
15
16
|
getRound(loopId, roundNum) {
|
|
16
17
|
const prefix = `loop:${loopId}:r${roundNum}`;
|
|
17
|
-
const entries = this.
|
|
18
|
+
const entries = queryLoopEntries(this.store, loopId, { prefix });
|
|
18
19
|
const lineageEntries = entries.filter((e) => !String(e.task_id ?? "").endsWith(":feedback"));
|
|
19
20
|
if (!lineageEntries.length)
|
|
20
21
|
return null;
|
|
21
22
|
const entry = { ...lineageEntries[0] };
|
|
22
23
|
// Merge feedback success flag
|
|
23
|
-
const fbEntries = this.
|
|
24
|
+
const fbEntries = queryLoopEntries(this.store, loopId, {
|
|
24
25
|
prefix,
|
|
25
26
|
feedbackOnly: true,
|
|
26
27
|
});
|
|
@@ -72,7 +73,7 @@ export class ReplayBackend {
|
|
|
72
73
|
// ── Helpers ─────────────────────────────────────────────────────────────
|
|
73
74
|
maxRound(loopId) {
|
|
74
75
|
const prefix = `loop:${loopId}:r`;
|
|
75
|
-
const entries = this.
|
|
76
|
+
const entries = queryLoopEntries(this.store, loopId, { prefix });
|
|
76
77
|
let maxR = 0;
|
|
77
78
|
for (const e of entries) {
|
|
78
79
|
const lineage = (e.loop_lineage ?? {});
|
package/dist/replay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* Persistence is owned by round-transaction.ts so reject paths remain
|
|
18
18
|
* side-effect free and accepted decisions can be replayed idempotently.
|
|
19
19
|
*/
|
|
20
|
-
import type {
|
|
20
|
+
import type { LoopStore } from "./loop-store.js";
|
|
21
21
|
import type { ProviderSnapshot } from "./evidence-provider.js";
|
|
22
22
|
import type { SelfEvaluation, StopReason, VerificationFlag } from "./protocol.js";
|
|
23
23
|
/** Input to a single round processing step. */
|
|
@@ -41,6 +41,9 @@ export interface RoundProcessInput {
|
|
|
41
41
|
/** v2.13: Files from skipped backtrack rounds. Passed to verification
|
|
42
42
|
* gate for post-backtrack workspace restore check. */
|
|
43
43
|
backtrackSkippedFiles?: string[];
|
|
44
|
+
/** v2.12: Git HEAD of the backtrack restore point. The verification gate
|
|
45
|
+
* checks the workspace returns to this commit before accepting work. */
|
|
46
|
+
backtrackTargetGitHead?: string;
|
|
44
47
|
}
|
|
45
48
|
/** Result of processing a round through the coordinator. */
|
|
46
49
|
export interface RoundProcessResult {
|
|
@@ -92,8 +95,8 @@ export interface RoundProcessResult {
|
|
|
92
95
|
backtrackSkippedFiles?: string[];
|
|
93
96
|
}
|
|
94
97
|
export declare class RoundCoordinator {
|
|
95
|
-
private
|
|
96
|
-
constructor(
|
|
98
|
+
private store;
|
|
99
|
+
constructor(store?: LoopStore);
|
|
97
100
|
/** Process a single round's self-evaluation through the decision pipeline:
|
|
98
101
|
* verify → enforce → stop decision.
|
|
99
102
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-coordinator.d.ts","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"round-coordinator.d.ts","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAEV,cAAc,EACd,UAAU,EACV,gBAAgB,EAEjB,MAAM,eAAe,CAAC;AAgBvB,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,QAAQ,EAAE,cAAc,CAAC;IACzB,4EAA4E;IAC5E,mBAAmB,EAAE,OAAO,CAAC;IAC7B,wEAAwE;IACxE,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,qEAAqE;IACrE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,oDAAoD;IACpD,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC9B;2DACuD;IACvD,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;6EACyE;IACzE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;IACnE,kEAAkE;IAClE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;IACvC,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,2EAA2E;IAC3E,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;IACpE,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,YAAY,EAAE,OAAO,CAAC;IACtB,6DAA6D;IAC7D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iEAAiE;IACjE,wBAAwB,EAAE,MAAM,CAAC;IACjC;gEAC4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;0EACsE;IACtE,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC;kEAC8D;IAC9D,2BAA2B,EAAE,OAAO,CAAC;IACrC;oFACgF;IAChF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;yEAEqE;IACrE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;gEAE4D;IAC5D,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAkBD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAwB;gBAEzB,KAAK,CAAC,EAAE,SAAS;IAI7B;;;;;;;;;;;;gFAY4E;IAC5E,YAAY,CACV,KAAK,EAAE,iBAAiB,EACxB,wBAAwB,GAAE,MAAU,GACnC,kBAAkB;CAuRtB"}
|
|
@@ -17,15 +17,26 @@
|
|
|
17
17
|
* Persistence is owned by round-transaction.ts so reject paths remain
|
|
18
18
|
* side-effect free and accepted decisions can be replayed idempotently.
|
|
19
19
|
*/
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
20
|
+
import { queryLoopEntries } from "./loop-store.js";
|
|
21
|
+
import { CHECK_SUCCESS_UNVERIFIED, verifySelfEvaluation, entryRound } from "./verification-gate.js";
|
|
22
|
+
import { effectiveSuccess } from "./self-eval.js";
|
|
23
|
+
import { enforceRound, buildRejectionPrompt, findSafeRestorePoint, buildBacktrackPrompt, findBacktrackTargetGitHead, } from "./enforcement-gate.js";
|
|
22
24
|
import { logEvent } from "./observability.js";
|
|
23
25
|
import { getPolicy } from "./policy.js";
|
|
26
|
+
/** v3.2: Whether a round's success enters the success trajectory. Excluded
|
|
27
|
+
* when the gate contradicted the round, or when the success claim carries no
|
|
28
|
+
* machine-verified observation (success_unverified warn) — an
|
|
29
|
+
* accepted-but-unverified round is not evidence of progress. */
|
|
30
|
+
function shouldPushSuccess(gateContradicted, verificationFlags) {
|
|
31
|
+
if (gateContradicted)
|
|
32
|
+
return false;
|
|
33
|
+
return !verificationFlags.some((flag) => flag.severity === "warn" && flag.check === CHECK_SUCCESS_UNVERIFIED);
|
|
34
|
+
}
|
|
24
35
|
// ── RoundCoordinator ───────────────────────────────────────────────────────
|
|
25
36
|
export class RoundCoordinator {
|
|
26
|
-
|
|
27
|
-
constructor(
|
|
28
|
-
this.
|
|
37
|
+
store;
|
|
38
|
+
constructor(store) {
|
|
39
|
+
this.store = store;
|
|
29
40
|
}
|
|
30
41
|
/** Process a single round's self-evaluation through the decision pipeline:
|
|
31
42
|
* verify → enforce → stop decision.
|
|
@@ -46,17 +57,17 @@ export class RoundCoordinator {
|
|
|
46
57
|
// ── 1. Query vault entries ──────────────────────────────────────────
|
|
47
58
|
// Lineage entries (constraint violations, output summaries) and feedback
|
|
48
59
|
// entries (execution_evidence, progress estimates) are both needed by
|
|
49
|
-
// the enforcement gate.
|
|
50
|
-
// we issue a second query and merge both result sets.
|
|
60
|
+
// the enforcement gate. queryLoopEntries excludes feedback by default,
|
|
61
|
+
// so we issue a second query and merge both result sets.
|
|
51
62
|
const prefix = `loop:${loopId}:r`;
|
|
52
|
-
const vaultEntries = this.
|
|
63
|
+
const vaultEntries = this.store
|
|
53
64
|
? [
|
|
54
|
-
...this.
|
|
55
|
-
...this.
|
|
65
|
+
...queryLoopEntries(this.store, loopId, { prefix }),
|
|
66
|
+
...queryLoopEntries(this.store, loopId, { prefix, feedbackOnly: true }),
|
|
56
67
|
]
|
|
57
68
|
: [];
|
|
58
69
|
// ── 2. Verification gate ────────────────────────────────────────────
|
|
59
|
-
const verifyResult = verifySelfEvaluation(selfEval, currentRound, vaultEntries, lastSelfEval ?? null, evidenceSnapshots ?? [], input.backtrackSkippedFiles ?? []);
|
|
70
|
+
const verifyResult = verifySelfEvaluation(selfEval, currentRound, vaultEntries, lastSelfEval ?? null, evidenceSnapshots ?? [], input.backtrackSkippedFiles ?? [], input.backtrackTargetGitHead);
|
|
60
71
|
const verificationFlags = verifyResult.flags;
|
|
61
72
|
const gateContradicted = verifyResult.verdict === "contradicted";
|
|
62
73
|
if (gateContradicted) {
|
|
@@ -144,7 +155,10 @@ export class RoundCoordinator {
|
|
|
144
155
|
// v2.13: Collect files changed in skipped rounds for the restore prompt
|
|
145
156
|
const skippedFiles = [];
|
|
146
157
|
for (let r = restorePoint.round + 1; r < currentRound; r++) {
|
|
147
|
-
|
|
158
|
+
// v3.2.1: match the feedback entry (execution_evidence lives there) —
|
|
159
|
+
// the compile-time lineage entry for the same round precedes it in
|
|
160
|
+
// the flat view and carries no evidence.
|
|
161
|
+
const entry = vaultEntries.find((e) => entryRound(e) === r && e.task_type !== "loop_lineage");
|
|
148
162
|
if (entry?.execution_evidence) {
|
|
149
163
|
const ev = entry.execution_evidence;
|
|
150
164
|
const files = Array.isArray(ev.files_changed)
|
|
@@ -156,9 +170,12 @@ export class RoundCoordinator {
|
|
|
156
170
|
}
|
|
157
171
|
}
|
|
158
172
|
}
|
|
173
|
+
// v2.12: Capture the restore point's git HEAD so the next round's
|
|
174
|
+
// verification can confirm the workspace returned to this commit.
|
|
175
|
+
const targetGitHead = findBacktrackTargetGitHead(restorePoint.round, vaultEntries);
|
|
159
176
|
const backtrackPrompt = buildBacktrackPrompt(currentRound, restorePoint.round, enforceResult.check ?? "progress_stall", getPolicy().engine.backtrack_preserve_discoveries
|
|
160
177
|
? restorePoint.skippedDiscoveries
|
|
161
|
-
: [], skippedFiles);
|
|
178
|
+
: [], skippedFiles, targetGitHead ?? undefined);
|
|
162
179
|
logEvent("enforcement_backtrack", {
|
|
163
180
|
loopId,
|
|
164
181
|
round: currentRound,
|
|
@@ -175,6 +192,7 @@ export class RoundCoordinator {
|
|
|
175
192
|
? restorePoint.skippedDiscoveries
|
|
176
193
|
: [],
|
|
177
194
|
backtrackSkippedFiles: skippedFiles,
|
|
195
|
+
backtrackTargetGitHead: targetGitHead ?? undefined,
|
|
178
196
|
backtrackTriggerRule: enforceResult.check,
|
|
179
197
|
verificationFlags,
|
|
180
198
|
enforcementAction: "backtrack",
|
|
@@ -201,16 +219,17 @@ export class RoundCoordinator {
|
|
|
201
219
|
gateContradicted,
|
|
202
220
|
newConsecutiveRejections: 0,
|
|
203
221
|
newLastSelfEval: selfEval,
|
|
204
|
-
shouldPushSuccessTrajectory:
|
|
222
|
+
shouldPushSuccessTrajectory: shouldPushSuccess(gateContradicted, verificationFlags),
|
|
205
223
|
};
|
|
206
224
|
}
|
|
207
225
|
// 5b. Agent says stop
|
|
208
226
|
if (!selfEval.should_continue) {
|
|
209
227
|
let reason;
|
|
210
|
-
if (
|
|
228
|
+
if (effectiveSuccess(selfEval)) {
|
|
211
229
|
reason = "completed";
|
|
212
230
|
}
|
|
213
|
-
else if (selfEval.
|
|
231
|
+
else if (selfEval.outcome === "blocked" ||
|
|
232
|
+
selfEval.stop_reason === "blocked" || selfEval.stop_reason === "needs_human_input") {
|
|
214
233
|
reason = "blocked";
|
|
215
234
|
}
|
|
216
235
|
else {
|
|
@@ -224,7 +243,7 @@ export class RoundCoordinator {
|
|
|
224
243
|
gateContradicted,
|
|
225
244
|
newConsecutiveRejections: 0,
|
|
226
245
|
newLastSelfEval: selfEval,
|
|
227
|
-
shouldPushSuccessTrajectory:
|
|
246
|
+
shouldPushSuccessTrajectory: shouldPushSuccess(gateContradicted, verificationFlags),
|
|
228
247
|
};
|
|
229
248
|
}
|
|
230
249
|
// 5c. Max rounds reached
|
|
@@ -244,7 +263,7 @@ export class RoundCoordinator {
|
|
|
244
263
|
gateContradicted,
|
|
245
264
|
newConsecutiveRejections: 0,
|
|
246
265
|
newLastSelfEval: selfEval,
|
|
247
|
-
shouldPushSuccessTrajectory:
|
|
266
|
+
shouldPushSuccessTrajectory: shouldPushSuccess(gateContradicted, verificationFlags),
|
|
248
267
|
};
|
|
249
268
|
}
|
|
250
269
|
// ── 6. Continue — caller compiles next round ────────────────────────
|
|
@@ -256,7 +275,7 @@ export class RoundCoordinator {
|
|
|
256
275
|
gateContradicted,
|
|
257
276
|
newConsecutiveRejections: 0,
|
|
258
277
|
newLastSelfEval: selfEval,
|
|
259
|
-
shouldPushSuccessTrajectory:
|
|
278
|
+
shouldPushSuccessTrajectory: shouldPushSuccess(gateContradicted, verificationFlags),
|
|
260
279
|
// v2.12: Propagate clarification acceptance signal for streak tracking
|
|
261
280
|
clarificationAccepted: enforceResult.clarification_accepted ?? false,
|
|
262
281
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-coordinator.js","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
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 {
|
|
8
|
+
import type { LoopStore } from "./loop-store.js";
|
|
9
9
|
import { LoopForgeEngine } from "./engine.js";
|
|
10
10
|
import type { ProviderSnapshot } from "./evidence-provider.js";
|
|
11
|
-
import type { LoopForgeRequest, PromptArtifact, SelfEvaluation } from "./protocol.js";
|
|
11
|
+
import type { LoopForgeRequest, LoopForgeResponse, PromptArtifact, SelfEvaluation } from "./protocol.js";
|
|
12
12
|
import type { RoundTransactionOutcome, RoundTransactionSnapshot } from "./round-transaction.js";
|
|
13
13
|
export interface PreparedRound {
|
|
14
14
|
prompt: string;
|
|
@@ -18,6 +18,9 @@ export interface PreparedRound {
|
|
|
18
18
|
snapshot: RoundTransactionSnapshot;
|
|
19
19
|
stateFileContent?: string;
|
|
20
20
|
warnings?: string[];
|
|
21
|
+
/** v3.0.1: The full compile response. Callers may cache it (e.g. for the
|
|
22
|
+
* typed projection) instead of recompiling for derived views. */
|
|
23
|
+
compileResponse?: LoopForgeResponse;
|
|
21
24
|
}
|
|
22
25
|
export interface CompleteRoundInput {
|
|
23
26
|
snapshot: RoundTransactionSnapshot;
|
|
@@ -33,6 +36,8 @@ export interface CompleteRoundInput {
|
|
|
33
36
|
driftClarificationStreak?: number;
|
|
34
37
|
/** v2.13: Files from skipped backtrack rounds for restore check. */
|
|
35
38
|
backtrackSkippedFiles?: string[];
|
|
39
|
+
/** v2.12: Git HEAD of the backtrack restore point (workspace restore check). */
|
|
40
|
+
backtrackTargetGitHead?: string;
|
|
36
41
|
}
|
|
37
42
|
export interface CompletedRound {
|
|
38
43
|
outcome: RoundTransactionOutcome;
|
|
@@ -40,8 +45,8 @@ export interface CompletedRound {
|
|
|
40
45
|
}
|
|
41
46
|
export declare class RoundDriver {
|
|
42
47
|
private readonly engine;
|
|
43
|
-
private readonly
|
|
44
|
-
constructor(engine: LoopForgeEngine,
|
|
48
|
+
private readonly store;
|
|
49
|
+
constructor(engine: LoopForgeEngine, store?: LoopStore);
|
|
45
50
|
prepare(request: LoopForgeRequest, loopId: string, round: number): Promise<PreparedRound | null>;
|
|
46
51
|
/** Synchronous fallback for legacy embedding APIs. Async evidence providers
|
|
47
52
|
* are deliberately skipped by EvidenceCollector.collect(). */
|
|
@@ -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,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACf,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;sEACkE;IAClE,eAAe,CAAC,EAAE,iBAAiB,CAAC;CACrC;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,QAAQ,EAAE,cAAc,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,6DAA6D;IAC7D,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oEAAoE;IACpE,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,gFAAgF;IAChF,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;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,KAAK,CAAY;gBAEL,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,SAAS;IAIjE,OAAO,CACX,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAYhC;kEAC8D;IAC9D,WAAW,CACT,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,aAAa,GAAG,IAAI;IASvB,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;IAuBlE,OAAO,CAAC,QAAQ,EAAE,wBAAwB,GAAG,uBAAuB,GAAG,IAAI;IAO3E,OAAO,CAAC,eAAe;CAMxB"}
|
package/dist/round-driver.js
CHANGED
|
@@ -10,16 +10,21 @@ import { getPolicy, writeStateFile } from "./policy.js";
|
|
|
10
10
|
import { prepareRejectedAttempt, prepareRoundTransaction, RoundTransactionCoordinator, } from "./round-transaction.js";
|
|
11
11
|
export class RoundDriver {
|
|
12
12
|
engine;
|
|
13
|
-
|
|
14
|
-
constructor(engine,
|
|
13
|
+
store;
|
|
14
|
+
constructor(engine, store) {
|
|
15
15
|
this.engine = engine;
|
|
16
|
-
this.
|
|
16
|
+
this.store = store ?? engine.getStore();
|
|
17
17
|
}
|
|
18
18
|
async prepare(request, loopId, round) {
|
|
19
|
-
|
|
19
|
+
// v3.0.1: compile (CPU-bound) and before-evidence collection (external
|
|
20
|
+
// process spawns) run concurrently — the git/command spawns were the
|
|
21
|
+
// latency tail behind the old compile-first, evidence-second order.
|
|
22
|
+
const [response, evidenceBaseline] = await Promise.all([
|
|
23
|
+
Promise.resolve().then(() => this.compile(request, loopId, true)),
|
|
24
|
+
this.collectEvidence(loopId, "before"),
|
|
25
|
+
]);
|
|
20
26
|
if (!response)
|
|
21
27
|
return null;
|
|
22
|
-
const evidenceBaseline = await this.collectEvidence(loopId, "before");
|
|
23
28
|
return this.finishPrepare(response, loopId, round, evidenceBaseline);
|
|
24
29
|
}
|
|
25
30
|
/** Synchronous fallback for legacy embedding APIs. Async evidence providers
|
|
@@ -62,6 +67,7 @@ export class RoundDriver {
|
|
|
62
67
|
snapshot,
|
|
63
68
|
stateFileContent: response.state_file_content,
|
|
64
69
|
warnings: response.warnings,
|
|
70
|
+
compileResponse: response,
|
|
65
71
|
};
|
|
66
72
|
}
|
|
67
73
|
finishPrepare(response, loopId, round, evidenceBaseline) {
|
|
@@ -75,11 +81,12 @@ export class RoundDriver {
|
|
|
75
81
|
snapshot,
|
|
76
82
|
stateFileContent: response.state_file_content,
|
|
77
83
|
warnings: response.warnings,
|
|
84
|
+
compileResponse: response,
|
|
78
85
|
};
|
|
79
86
|
}
|
|
80
87
|
async complete(input) {
|
|
81
88
|
const actualEvidence = await this.collectEvidence(input.loopId, "after");
|
|
82
|
-
const transaction = new RoundTransactionCoordinator(this.engine, this.
|
|
89
|
+
const transaction = new RoundTransactionCoordinator(this.engine, this.store);
|
|
83
90
|
const outcome = transaction.process({
|
|
84
91
|
snapshot: input.snapshot,
|
|
85
92
|
task: input.task,
|
|
@@ -92,11 +99,12 @@ export class RoundDriver {
|
|
|
92
99
|
actualEvidence,
|
|
93
100
|
driftClarificationStreak: input.driftClarificationStreak,
|
|
94
101
|
backtrackSkippedFiles: input.backtrackSkippedFiles,
|
|
102
|
+
backtrackTargetGitHead: input.backtrackTargetGitHead,
|
|
95
103
|
});
|
|
96
104
|
return { outcome, actualEvidence };
|
|
97
105
|
}
|
|
98
106
|
recover(snapshot) {
|
|
99
|
-
return new RoundTransactionCoordinator(this.engine, this.
|
|
107
|
+
return new RoundTransactionCoordinator(this.engine, this.store).recover(snapshot);
|
|
100
108
|
}
|
|
101
109
|
collectEvidence(loopId, phase) {
|
|
102
110
|
return EvidenceCollector.fromPolicy().collectAsync({ loopId, phase });
|
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,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOxD,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"round-driver.js","sourceRoot":"","sources":["../src/round-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* feedback storage. The committed feedback embeds the decision so replay after
|
|
6
6
|
* a process crash is idempotent.
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
8
|
+
import type { LoopStore } from "./loop-store.js";
|
|
9
9
|
import { LoopForgeEngine } from "./engine.js";
|
|
10
10
|
import type { ProviderSnapshot } from "./evidence-provider.js";
|
|
11
11
|
import type { SelfEvaluation } from "./protocol.js";
|
|
@@ -44,6 +44,9 @@ export interface RoundTransactionInput {
|
|
|
44
44
|
driftClarificationStreak?: number;
|
|
45
45
|
/** v2.13: Files from skipped backtrack rounds for restore check. */
|
|
46
46
|
backtrackSkippedFiles?: string[];
|
|
47
|
+
/** v2.12: Git HEAD of the backtrack restore point. The verification gate
|
|
48
|
+
* checks the workspace returns to this commit before accepting work. */
|
|
49
|
+
backtrackTargetGitHead?: string;
|
|
47
50
|
actualEvidence: ProviderSnapshot[];
|
|
48
51
|
}
|
|
49
52
|
export interface RoundTransactionOutcome {
|
|
@@ -58,13 +61,14 @@ export declare function prepareRoundTransaction(loopId: string, round: number, b
|
|
|
58
61
|
* its identity or evidence baseline. Evaluation fields belong to the previous
|
|
59
62
|
* attempt and are cleared before the Agent receives the retry prompt. */
|
|
60
63
|
export declare function prepareRejectedAttempt(rejected: RoundTransactionSnapshot, promptArtifact: PromptArtifact): RoundTransactionSnapshot;
|
|
64
|
+
export declare function isProcessResult(value: unknown): value is RoundProcessResult;
|
|
61
65
|
/** Parse a persisted snapshot without trusting arbitrary vault data. */
|
|
62
66
|
export declare function parseRoundTransactionSnapshot(value: unknown): RoundTransactionSnapshot | null;
|
|
63
67
|
export declare class RoundTransactionCoordinator {
|
|
64
68
|
private readonly engine;
|
|
65
|
-
private readonly
|
|
69
|
+
private readonly store;
|
|
66
70
|
private readonly commitStore;
|
|
67
|
-
constructor(engine: LoopForgeEngine,
|
|
71
|
+
constructor(engine: LoopForgeEngine, store?: LoopStore, commitStore?: RoundCommitStore);
|
|
68
72
|
process(input: RoundTransactionInput): RoundTransactionOutcome;
|
|
69
73
|
/** Recover an already committed decision without evaluating or writing. */
|
|
70
74
|
recover(snapshot: RoundTransactionSnapshot): RoundTransactionOutcome | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-transaction.d.ts","sourceRoot":"","sources":["../src/round-transaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"round-transaction.d.ts","sourceRoot":"","sources":["../src/round-transaction.ts"],"names":[],"mappings":"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"}
|