loopforge 3.0.0 → 3.6.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 +126 -143
- package/dist/audit.d.ts +50 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +131 -0
- package/dist/audit.js.map +1 -0
- package/dist/canonical-state.d.ts +98 -23
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +257 -181
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -33
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-facts.d.ts +17 -0
- package/dist/cognitive-facts.d.ts.map +1 -0
- package/dist/cognitive-facts.js +99 -0
- package/dist/cognitive-facts.js.map +1 -0
- package/dist/cognitive-governance.d.ts +25 -33
- package/dist/cognitive-governance.d.ts.map +1 -1
- package/dist/cognitive-governance.js +38 -138
- package/dist/cognitive-governance.js.map +1 -1
- package/dist/committed-round.d.ts +59 -0
- package/dist/committed-round.d.ts.map +1 -0
- package/dist/committed-round.js +222 -0
- package/dist/committed-round.js.map +1 -0
- package/dist/enforcement-gate.d.ts +78 -0
- package/dist/enforcement-gate.d.ts.map +1 -0
- package/dist/enforcement-gate.js +1109 -0
- package/dist/enforcement-gate.js.map +1 -0
- package/dist/engine.d.ts +111 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +887 -0
- package/dist/engine.js.map +1 -0
- package/dist/evidence-claims.d.ts +50 -0
- package/dist/evidence-claims.d.ts.map +1 -0
- package/dist/evidence-claims.js +116 -0
- package/dist/evidence-claims.js.map +1 -0
- package/dist/evidence-provider.d.ts +50 -23
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +167 -50
- package/dist/evidence-provider.js.map +1 -1
- package/dist/generate-schema.js +1 -84
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +19 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -15
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +58 -3
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +841 -304
- 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-projection.d.ts +6 -0
- package/dist/loop-projection.d.ts.map +1 -0
- package/dist/loop-projection.js +26 -0
- package/dist/loop-projection.js.map +1 -0
- package/dist/loop-store.d.ts +115 -24
- package/dist/loop-store.d.ts.map +1 -1
- package/dist/loop-store.js +365 -218
- package/dist/loop-store.js.map +1 -1
- package/dist/mcp/round-lifecycle.d.ts +214 -0
- package/dist/mcp/round-lifecycle.d.ts.map +1 -0
- package/dist/mcp/round-lifecycle.js +935 -0
- package/dist/mcp/round-lifecycle.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +29 -43
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +64 -101
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +433 -1110
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +20 -11
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +587 -413
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.d.ts +12 -24
- package/dist/policy-metrics.d.ts.map +1 -1
- package/dist/policy-metrics.js +78 -184
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +61 -50
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +48 -146
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +37 -6
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +487 -278
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-policy.d.ts +1 -8
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +8 -26
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +398 -236
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +147 -17
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts +5 -13
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +32 -69
- package/dist/replay.js.map +1 -1
- package/dist/round-contract.d.ts +64 -0
- package/dist/round-contract.d.ts.map +1 -0
- package/dist/round-contract.js +80 -0
- package/dist/round-contract.js.map +1 -0
- package/dist/round-coordinator.d.ts +23 -25
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +103 -92
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +13 -13
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +25 -14
- package/dist/round-driver.js.map +1 -1
- package/dist/round-transaction.d.ts +14 -18
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +37 -47
- package/dist/round-transaction.js.map +1 -1
- package/dist/self-eval.d.ts +48 -0
- package/dist/self-eval.d.ts.map +1 -0
- package/dist/self-eval.js +248 -0
- package/dist/self-eval.js.map +1 -0
- package/dist/storage.d.ts +9 -4
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +18 -6
- package/dist/storage.js.map +1 -1
- package/dist/token-utils.d.ts +15 -3
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +24 -5
- package/dist/token-utils.js.map +1 -1
- package/dist/verification-gate.d.ts +149 -0
- package/dist/verification-gate.d.ts.map +1 -0
- package/dist/verification-gate.js +1343 -0
- package/dist/verification-gate.js.map +1 -0
- package/dist/workspace.d.ts +29 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +61 -0
- package/dist/workspace.js.map +1 -0
- package/loop_policy.json +37 -16
- package/package.json +5 -10
- package/skills/perception/SKILL.md +184 -202
- package/dist/canonical-event-writer.d.ts +0 -20
- package/dist/canonical-event-writer.d.ts.map +0 -1
- package/dist/canonical-event-writer.js +0 -131
- package/dist/canonical-event-writer.js.map +0 -1
- package/dist/compiler-subgoals.d.ts +0 -7
- package/dist/compiler-subgoals.d.ts.map +0 -1
- package/dist/compiler-subgoals.js +0 -93
- package/dist/compiler-subgoals.js.map +0 -1
- package/dist/derive-id.d.ts +0 -12
- package/dist/derive-id.d.ts.map +0 -1
- package/dist/derive-id.js +0 -31
- package/dist/derive-id.js.map +0 -1
- package/dist/mcp/session-projection.d.ts +0 -5
- package/dist/mcp/session-projection.d.ts.map +0 -1
- package/dist/mcp/session-projection.js +0 -18
- package/dist/mcp/session-projection.js.map +0 -1
- package/dist/mcp/session-queue.d.ts +0 -3
- package/dist/mcp/session-queue.d.ts.map +0 -1
- package/dist/mcp/session-queue.js +0 -18
- package/dist/mcp/session-queue.js.map +0 -1
- package/dist/mcp/session-types.d.ts +0 -72
- package/dist/mcp/session-types.d.ts.map +0 -1
- package/dist/mcp/session-types.js +0 -2
- package/dist/mcp/session-types.js.map +0 -1
- package/dist/round-commit-store.d.ts +0 -12
- package/dist/round-commit-store.d.ts.map +0 -1
- package/dist/round-commit-store.js +0 -13
- package/dist/round-commit-store.js.map +0 -1
- package/dist/round-gate.d.ts +0 -31
- package/dist/round-gate.d.ts.map +0 -1
- package/dist/round-gate.js +0 -259
- package/dist/round-gate.js.map +0 -1
- package/dist/round-recovery.d.ts +0 -17
- package/dist/round-recovery.d.ts.map +0 -1
- package/dist/round-recovery.js +0 -117
- package/dist/round-recovery.js.map +0 -1
- package/dist/round-report.d.ts +0 -16
- package/dist/round-report.d.ts.map +0 -1
- package/dist/round-report.js +0 -401
- package/dist/round-report.js.map +0 -1
- package/dist/runtime-services.d.ts +0 -59
- package/dist/runtime-services.d.ts.map +0 -1
- package/dist/runtime-services.js +0 -460
- package/dist/runtime-services.js.map +0 -1
- package/dist/vault-format.d.ts +0 -4
- package/dist/vault-format.d.ts.map +0 -1
- package/dist/vault-format.js +0 -4
- package/dist/vault-format.js.map +0 -1
- package/dist/vault-types.d.ts +0 -24
- package/dist/vault-types.d.ts.map +0 -1
- package/dist/vault-types.js +0 -2
- package/dist/vault-types.js.map +0 -1
- package/loopforge-policy.json +0 -340
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,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;IAsBlE,OAAO,CAAC,QAAQ,EAAE,wBAAwB,GAAG,uBAAuB,GAAG,IAAI;IAO3E,OAAO,CAAC,eAAe;CAMxB"}
|
package/dist/round-driver.js
CHANGED
|
@@ -6,20 +6,34 @@
|
|
|
6
6
|
* in their adapters.
|
|
7
7
|
*/
|
|
8
8
|
import { EvidenceCollector } from "./evidence-provider.js";
|
|
9
|
-
import { writeStateFile } from "./policy.js";
|
|
9
|
+
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
|
+
// 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
|
+
]);
|
|
26
|
+
if (!response)
|
|
27
|
+
return null;
|
|
28
|
+
return this.finishPrepare(response, loopId, round, evidenceBaseline);
|
|
29
|
+
}
|
|
30
|
+
/** Synchronous fallback for legacy embedding APIs. Async evidence providers
|
|
31
|
+
* are deliberately skipped by EvidenceCollector.collect(). */
|
|
32
|
+
prepareSync(request, loopId, round) {
|
|
19
33
|
const response = this.compile(request, loopId, true);
|
|
20
34
|
if (!response)
|
|
21
35
|
return null;
|
|
22
|
-
const evidenceBaseline =
|
|
36
|
+
const evidenceBaseline = EvidenceCollector.fromProviderNames(getPolicy().evidence.providers).collect({ loopId });
|
|
23
37
|
return this.finishPrepare(response, loopId, round, evidenceBaseline);
|
|
24
38
|
}
|
|
25
39
|
compile(request, loopId, persistLineage) {
|
|
@@ -53,7 +67,7 @@ export class RoundDriver {
|
|
|
53
67
|
snapshot,
|
|
54
68
|
stateFileContent: response.state_file_content,
|
|
55
69
|
warnings: response.warnings,
|
|
56
|
-
|
|
70
|
+
compileResponse: response,
|
|
57
71
|
};
|
|
58
72
|
}
|
|
59
73
|
finishPrepare(response, loopId, round, evidenceBaseline) {
|
|
@@ -67,32 +81,29 @@ export class RoundDriver {
|
|
|
67
81
|
snapshot,
|
|
68
82
|
stateFileContent: response.state_file_content,
|
|
69
83
|
warnings: response.warnings,
|
|
70
|
-
|
|
84
|
+
compileResponse: response,
|
|
71
85
|
};
|
|
72
86
|
}
|
|
73
87
|
async complete(input) {
|
|
74
88
|
const actualEvidence = await this.collectEvidence(input.loopId, "after");
|
|
75
|
-
const transaction = new RoundTransactionCoordinator(this.engine, this.
|
|
89
|
+
const transaction = new RoundTransactionCoordinator(this.engine, this.store);
|
|
76
90
|
const outcome = transaction.process({
|
|
77
91
|
snapshot: input.snapshot,
|
|
78
92
|
task: input.task,
|
|
79
93
|
maxRounds: input.maxRounds,
|
|
80
|
-
|
|
81
|
-
|
|
94
|
+
selfEval: input.selfEval,
|
|
95
|
+
lastSelfEval: input.lastSelfEval,
|
|
82
96
|
consecutiveRejections: input.consecutiveRejections,
|
|
83
97
|
successTrajectory: input.successTrajectory,
|
|
84
98
|
actualEvidence,
|
|
85
99
|
driftClarificationStreak: input.driftClarificationStreak,
|
|
86
100
|
backtrackSkippedFiles: input.backtrackSkippedFiles,
|
|
87
101
|
backtrackTargetGitHead: input.backtrackTargetGitHead,
|
|
88
|
-
expectedAction: input.expectedAction,
|
|
89
|
-
escalatedRejectionChecks: input.escalatedRejectionChecks,
|
|
90
|
-
remainingCriteria: input.remainingCriteria,
|
|
91
102
|
});
|
|
92
103
|
return { outcome, actualEvidence };
|
|
93
104
|
}
|
|
94
105
|
recover(snapshot) {
|
|
95
|
-
return new RoundTransactionCoordinator(this.engine, this.
|
|
106
|
+
return new RoundTransactionCoordinator(this.engine, this.store).recover(snapshot);
|
|
96
107
|
}
|
|
97
108
|
collectEvidence(loopId, phase) {
|
|
98
109
|
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,
|
|
1
|
+
{"version":3,"file":"round-driver.js","sourceRoot":"","sources":["../src/round-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
*
|
|
3
3
|
* A logical round has one deterministic roundId. Rejected attempts keep the
|
|
4
4
|
* same identity and before snapshot; only accepted decisions are committed to
|
|
5
|
-
*
|
|
5
|
+
* feedback storage. The committed feedback embeds the decision so replay after
|
|
6
6
|
* a process crash is idempotent.
|
|
7
7
|
*/
|
|
8
8
|
import type { LoopStore } from "./loop-store.js";
|
|
9
|
-
import {
|
|
9
|
+
import { LoopForgeEngine } from "./engine.js";
|
|
10
10
|
import type { ProviderSnapshot } from "./evidence-provider.js";
|
|
11
|
-
import type {
|
|
11
|
+
import type { SelfEvaluation } from "./protocol.js";
|
|
12
12
|
import type { PromptArtifact } from "./protocol.js";
|
|
13
13
|
import { type RoundProcessResult } from "./round-coordinator.js";
|
|
14
|
-
import type { RoundCommitStore } from "./
|
|
15
|
-
export declare const
|
|
14
|
+
import type { RoundCommitStore } from "./storage.js";
|
|
15
|
+
export declare const ROUND_TRANSACTION_SCHEMA_VERSION: 1;
|
|
16
16
|
export type RoundTransactionPhase = "prepared" | "prompted" | "evaluated" | "rejected" | "committed" | "terminated";
|
|
17
17
|
export interface RoundTransactionSnapshot {
|
|
18
|
-
|
|
18
|
+
schemaVersion: typeof ROUND_TRANSACTION_SCHEMA_VERSION;
|
|
19
19
|
roundId: string;
|
|
20
20
|
loopId: string;
|
|
21
21
|
round: number;
|
|
@@ -24,7 +24,7 @@ export interface RoundTransactionSnapshot {
|
|
|
24
24
|
beforeEvidence: ProviderSnapshot[];
|
|
25
25
|
afterEvidence?: ProviderSnapshot[];
|
|
26
26
|
roundEvidence?: ProviderSnapshot[];
|
|
27
|
-
|
|
27
|
+
evaluation?: SelfEvaluation;
|
|
28
28
|
result?: RoundProcessResult;
|
|
29
29
|
createdAt: number;
|
|
30
30
|
updatedAt: number;
|
|
@@ -35,22 +35,17 @@ export interface RoundTransactionInput {
|
|
|
35
35
|
snapshot: RoundTransactionSnapshot;
|
|
36
36
|
task: string;
|
|
37
37
|
maxRounds: number;
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
selfEval: SelfEvaluation;
|
|
39
|
+
lastSelfEval?: SelfEvaluation;
|
|
40
40
|
consecutiveRejections: number;
|
|
41
41
|
successTrajectory: boolean[];
|
|
42
42
|
/** v2.12: Current clarification streak for R7 escalation. */
|
|
43
43
|
driftClarificationStreak?: number;
|
|
44
|
-
/** Terminal enforcement checks that already consumed their guided retry. */
|
|
45
|
-
escalatedRejectionChecks?: string[];
|
|
46
44
|
/** v2.13: Files from skipped backtrack rounds for restore check. */
|
|
47
45
|
backtrackSkippedFiles?: string[];
|
|
48
|
-
/** v2.
|
|
49
|
-
*
|
|
46
|
+
/** v2.12: Git HEAD of the backtrack restore point. The verification gate
|
|
47
|
+
* checks the workspace returns to this commit before accepting work. */
|
|
50
48
|
backtrackTargetGitHead?: string;
|
|
51
|
-
expectedAction?: string;
|
|
52
|
-
/** Criteria still open when this prompt was compiled. */
|
|
53
|
-
remainingCriteria?: string[];
|
|
54
49
|
actualEvidence: ProviderSnapshot[];
|
|
55
50
|
}
|
|
56
51
|
export interface RoundTransactionOutcome {
|
|
@@ -65,13 +60,14 @@ export declare function prepareRoundTransaction(loopId: string, round: number, b
|
|
|
65
60
|
* its identity or evidence baseline. Evaluation fields belong to the previous
|
|
66
61
|
* attempt and are cleared before the Agent receives the retry prompt. */
|
|
67
62
|
export declare function prepareRejectedAttempt(rejected: RoundTransactionSnapshot, promptArtifact: PromptArtifact): RoundTransactionSnapshot;
|
|
63
|
+
export declare function isProcessResult(value: unknown): value is RoundProcessResult;
|
|
68
64
|
/** Parse a persisted snapshot without trusting arbitrary vault data. */
|
|
69
65
|
export declare function parseRoundTransactionSnapshot(value: unknown): RoundTransactionSnapshot | null;
|
|
70
66
|
export declare class RoundTransactionCoordinator {
|
|
71
67
|
private readonly engine;
|
|
72
|
-
private readonly
|
|
68
|
+
private readonly store;
|
|
73
69
|
private readonly commitStore;
|
|
74
|
-
constructor(engine:
|
|
70
|
+
constructor(engine: LoopForgeEngine, store?: LoopStore, commitStore?: RoundCommitStore);
|
|
75
71
|
process(input: RoundTransactionInput): RoundTransactionOutcome;
|
|
76
72
|
/** Recover an already committed decision without evaluating or writing. */
|
|
77
73
|
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;
|
|
1
|
+
{"version":3,"file":"round-transaction.d.ts","sourceRoot":"","sources":["../src/round-transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
*
|
|
3
3
|
* A logical round has one deterministic roundId. Rejected attempts keep the
|
|
4
4
|
* same identity and before snapshot; only accepted decisions are committed to
|
|
5
|
-
*
|
|
5
|
+
* feedback storage. The committed feedback embeds the decision so replay after
|
|
6
6
|
* a process crash is idempotent.
|
|
7
7
|
*/
|
|
8
8
|
import { diffSnapshotCollections } from "./evidence-provider.js";
|
|
@@ -10,10 +10,8 @@ import { RoundCoordinator, } from "./round-coordinator.js";
|
|
|
10
10
|
import { logEvent } from "./observability.js";
|
|
11
11
|
import { isRecord } from "./token-utils.js";
|
|
12
12
|
import { policyMetrics } from "./policy-metrics.js";
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
import { validateLoopId } from "./policy.js";
|
|
16
|
-
export const ROUND_TRANSACTION_FORMAT = "loopforge.round-transaction";
|
|
13
|
+
import { VaultRoundCommitStore } from "./storage.js";
|
|
14
|
+
export const ROUND_TRANSACTION_SCHEMA_VERSION = 1;
|
|
17
15
|
export function makeRoundId(loopId, round) {
|
|
18
16
|
if (!Number.isInteger(round) || round < 1) {
|
|
19
17
|
throw new Error(`Invalid round number: ${round}`);
|
|
@@ -23,7 +21,7 @@ export function makeRoundId(loopId, round) {
|
|
|
23
21
|
export function prepareRoundTransaction(loopId, round, beforeEvidence, promptArtifact) {
|
|
24
22
|
const now = Date.now();
|
|
25
23
|
return {
|
|
26
|
-
|
|
24
|
+
schemaVersion: ROUND_TRANSACTION_SCHEMA_VERSION,
|
|
27
25
|
roundId: makeRoundId(loopId, round),
|
|
28
26
|
loopId,
|
|
29
27
|
round,
|
|
@@ -54,13 +52,13 @@ export function prepareRejectedAttempt(rejected, promptArtifact) {
|
|
|
54
52
|
phase: "prompted",
|
|
55
53
|
afterEvidence: undefined,
|
|
56
54
|
roundEvidence: undefined,
|
|
57
|
-
|
|
55
|
+
evaluation: undefined,
|
|
58
56
|
result: undefined,
|
|
59
57
|
promptArtifact,
|
|
60
58
|
updatedAt: Date.now(),
|
|
61
59
|
};
|
|
62
60
|
}
|
|
63
|
-
function isProcessResult(value) {
|
|
61
|
+
export function isProcessResult(value) {
|
|
64
62
|
if (!isRecord(value))
|
|
65
63
|
return false;
|
|
66
64
|
return ["continue", "stop", "reject", "terminate", "backtrack"].includes(String(value.action)) && Array.isArray(value.verificationFlags);
|
|
@@ -73,9 +71,7 @@ function parseProviderSnapshots(value) {
|
|
|
73
71
|
if (!isRecord(item))
|
|
74
72
|
return null;
|
|
75
73
|
if (typeof item.provider !== "string" ||
|
|
76
|
-
!item.provider.trim() ||
|
|
77
74
|
typeof item.timestamp !== "number" ||
|
|
78
|
-
!Number.isFinite(item.timestamp) ||
|
|
79
75
|
!Array.isArray(item.files) ||
|
|
80
76
|
!item.files.every((file) => typeof file === "string") ||
|
|
81
77
|
!isRecord(item.data))
|
|
@@ -88,19 +84,11 @@ function parseProviderSnapshots(value) {
|
|
|
88
84
|
export function parseRoundTransactionSnapshot(value) {
|
|
89
85
|
if (!isRecord(value))
|
|
90
86
|
return null;
|
|
91
|
-
if (
|
|
92
|
-
return null;
|
|
93
|
-
if (value.format !== ROUND_TRANSACTION_FORMAT)
|
|
87
|
+
if (value.schemaVersion !== ROUND_TRANSACTION_SCHEMA_VERSION)
|
|
94
88
|
return null;
|
|
95
89
|
if (typeof value.roundId !== "string" || typeof value.loopId !== "string") {
|
|
96
90
|
return null;
|
|
97
91
|
}
|
|
98
|
-
try {
|
|
99
|
-
validateLoopId(value.loopId);
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
92
|
if (!Number.isInteger(value.round) || value.round < 1)
|
|
105
93
|
return null;
|
|
106
94
|
if (!Number.isInteger(value.attempt) || value.attempt < 1)
|
|
@@ -123,18 +111,12 @@ export function parseRoundTransactionSnapshot(value) {
|
|
|
123
111
|
return null;
|
|
124
112
|
if (value.result !== undefined && !isProcessResult(value.result))
|
|
125
113
|
return null;
|
|
126
|
-
if (value.roundReport !== undefined && !parseRoundReport(value.roundReport))
|
|
127
|
-
return null;
|
|
128
114
|
if (value.promptArtifact !== undefined) {
|
|
129
115
|
if (!isRecord(value.promptArtifact))
|
|
130
116
|
return null;
|
|
131
117
|
const artifact = value.promptArtifact;
|
|
132
|
-
if (artifact.
|
|
118
|
+
if (artifact.schemaVersion !== 1 ||
|
|
133
119
|
typeof artifact.roundId !== "string" ||
|
|
134
|
-
artifact.roundId !== value.roundId ||
|
|
135
|
-
!Number.isInteger(artifact.attempt) ||
|
|
136
|
-
artifact.attempt < 1 ||
|
|
137
|
-
artifact.attempt !== value.attempt ||
|
|
138
120
|
typeof artifact.renderedPrompt !== "string" ||
|
|
139
121
|
typeof artifact.promptHash !== "string" ||
|
|
140
122
|
typeof artifact.stateHash !== "string" ||
|
|
@@ -154,12 +136,12 @@ export function parseRoundTransactionSnapshot(value) {
|
|
|
154
136
|
}
|
|
155
137
|
export class RoundTransactionCoordinator {
|
|
156
138
|
engine;
|
|
157
|
-
|
|
139
|
+
store;
|
|
158
140
|
commitStore;
|
|
159
|
-
constructor(engine,
|
|
141
|
+
constructor(engine, store, commitStore) {
|
|
160
142
|
this.engine = engine;
|
|
161
|
-
this.
|
|
162
|
-
this.commitStore = commitStore ?? new VaultRoundCommitStore(this.
|
|
143
|
+
this.store = store ?? engine.getStore();
|
|
144
|
+
this.commitStore = commitStore ?? new VaultRoundCommitStore(this.store);
|
|
163
145
|
}
|
|
164
146
|
process(input) {
|
|
165
147
|
const { snapshot } = input;
|
|
@@ -171,7 +153,11 @@ export class RoundTransactionCoordinator {
|
|
|
171
153
|
if (snapshot.roundId !== expectedRoundId) {
|
|
172
154
|
throw new Error(`Round snapshot identity mismatch: ${snapshot.roundId} !== ${expectedRoundId}`);
|
|
173
155
|
}
|
|
174
|
-
|
|
156
|
+
// v3.2.1: idempotency replay skips committed backtrack decisions — a
|
|
157
|
+
// backtrack rolls the round back for a redo; the redo submission carries
|
|
158
|
+
// the same roundId and must be evaluated, not replayed as the old
|
|
159
|
+
// roll-back directive (which would discard the agent's fix forever).
|
|
160
|
+
const committed = this.readCommitted(snapshot, { skipBacktrack: true });
|
|
175
161
|
if (committed) {
|
|
176
162
|
logEvent("round_transaction_replay", {
|
|
177
163
|
loopId: snapshot.loopId,
|
|
@@ -184,25 +170,19 @@ export class RoundTransactionCoordinator {
|
|
|
184
170
|
? snapshot.attempt + 1
|
|
185
171
|
: snapshot.attempt;
|
|
186
172
|
const roundEvidence = diffSnapshotCollections(snapshot.beforeEvidence, input.actualEvidence);
|
|
187
|
-
const
|
|
188
|
-
if (!sourceReport)
|
|
189
|
-
throw new Error("RoundTransaction requires a canonical RoundReport");
|
|
190
|
-
const verifiedReport = verifyRoundReportEvidence(sourceReport, roundEvidence);
|
|
191
|
-
const coordinator = new RoundCoordinator(this.backend);
|
|
173
|
+
const coordinator = new RoundCoordinator(this.store);
|
|
192
174
|
const result = coordinator.processRound({
|
|
193
175
|
loopId: snapshot.loopId,
|
|
194
176
|
task: input.task,
|
|
195
177
|
currentRound: snapshot.round,
|
|
196
178
|
maxRounds: input.maxRounds,
|
|
197
|
-
|
|
198
|
-
|
|
179
|
+
selfEval: input.selfEval,
|
|
180
|
+
lastSelfEval: input.lastSelfEval,
|
|
199
181
|
consecutiveRejections: input.consecutiveRejections,
|
|
200
182
|
evidenceSnapshots: roundEvidence,
|
|
201
183
|
successTrajectory: input.successTrajectory,
|
|
202
184
|
backtrackSkippedFiles: input.backtrackSkippedFiles,
|
|
203
185
|
backtrackTargetGitHead: input.backtrackTargetGitHead,
|
|
204
|
-
expectedAction: input.expectedAction,
|
|
205
|
-
escalatedRejectionChecks: input.escalatedRejectionChecks,
|
|
206
186
|
}, input.driftClarificationStreak ?? 0);
|
|
207
187
|
const evaluated = {
|
|
208
188
|
...snapshot,
|
|
@@ -210,7 +190,7 @@ export class RoundTransactionCoordinator {
|
|
|
210
190
|
phase: "evaluated",
|
|
211
191
|
afterEvidence: input.actualEvidence,
|
|
212
192
|
roundEvidence,
|
|
213
|
-
|
|
193
|
+
evaluation: input.selfEval,
|
|
214
194
|
result,
|
|
215
195
|
updatedAt: Date.now(),
|
|
216
196
|
};
|
|
@@ -228,12 +208,12 @@ export class RoundTransactionCoordinator {
|
|
|
228
208
|
updatedAt: Date.now(),
|
|
229
209
|
};
|
|
230
210
|
const metadata = {
|
|
231
|
-
|
|
211
|
+
schema_version: ROUND_TRANSACTION_SCHEMA_VERSION,
|
|
232
212
|
round_id: snapshot.roundId,
|
|
233
213
|
snapshot: committedSnapshot,
|
|
234
214
|
result,
|
|
235
215
|
};
|
|
236
|
-
this.engine.
|
|
216
|
+
this.engine.autoFeedback(input.selfEval, snapshot.loopId, snapshot.round, input.task, metadata);
|
|
237
217
|
const persisted = this.readCommitted(committedSnapshot);
|
|
238
218
|
if (!persisted) {
|
|
239
219
|
throw new Error(`Round transaction commit failed: ${snapshot.roundId}`);
|
|
@@ -254,19 +234,19 @@ export class RoundTransactionCoordinator {
|
|
|
254
234
|
}
|
|
255
235
|
return outcome;
|
|
256
236
|
}
|
|
257
|
-
readCommitted(expected) {
|
|
258
|
-
const taskId = `loop:${expected.loopId}:r${expected.round}:
|
|
237
|
+
readCommitted(expected, opts) {
|
|
238
|
+
const taskId = `loop:${expected.loopId}:r${expected.round}:feedback`;
|
|
259
239
|
const entries = this.commitStore.find(expected.loopId, expected.round);
|
|
260
240
|
for (const entry of entries) {
|
|
261
241
|
if (entry.task_id !== taskId)
|
|
262
242
|
continue;
|
|
263
|
-
const outcome = this.outcomeFromEntry(entry, expected.roundId);
|
|
243
|
+
const outcome = this.outcomeFromEntry(entry, expected.roundId, opts?.skipBacktrack === true);
|
|
264
244
|
if (outcome)
|
|
265
245
|
return outcome;
|
|
266
246
|
}
|
|
267
247
|
return null;
|
|
268
248
|
}
|
|
269
|
-
outcomeFromEntry(entry, expectedRoundId) {
|
|
249
|
+
outcomeFromEntry(entry, expectedRoundId, skipBacktrack = false) {
|
|
270
250
|
const lineage = isRecord(entry.loop_lineage) ? entry.loop_lineage : null;
|
|
271
251
|
const transaction = lineage && isRecord(lineage.round_transaction)
|
|
272
252
|
? lineage.round_transaction
|
|
@@ -277,6 +257,16 @@ export class RoundTransactionCoordinator {
|
|
|
277
257
|
const result = transaction.result;
|
|
278
258
|
if (!snapshot || !isProcessResult(result))
|
|
279
259
|
return null;
|
|
260
|
+
// v3.2.1: a committed backtrack is a roll-back directive, not a terminal
|
|
261
|
+
// decision. The restored round reuses the same roundId, so replaying it
|
|
262
|
+
// would silently discard the agent's redo submission and re-emit the
|
|
263
|
+
// backtrack prompt forever (the redo's work is never evaluated, and the
|
|
264
|
+
// R4/R9 terminate guards never run because evaluation is short-circuited).
|
|
265
|
+
// Crash recovery still replays backtracks (recover() → reconcileCommittedRound
|
|
266
|
+
// resets the round counter from the committed decision); only the advance
|
|
267
|
+
// path skips them so the redo is evaluated normally.
|
|
268
|
+
if (skipBacktrack && result.action === "backtrack")
|
|
269
|
+
return null;
|
|
280
270
|
return { snapshot, result, replayed: true };
|
|
281
271
|
}
|
|
282
272
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-transaction.js","sourceRoot":"","sources":["../src/round-transaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"round-transaction.js","sourceRoot":"","sources":["../src/round-transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** Structured self-evaluation parsing and normalization — pure functions.
|
|
2
|
+
* The MCP boundary validates required fields before these helpers run.
|
|
3
|
+
*/
|
|
4
|
+
import { type CriterionRevision, type ExecutionEvidence, type PromptRequests, type RoundContract, type RoundOutcome, type SelfEvaluation } from "./protocol.js";
|
|
5
|
+
/** Parse ExecutionEvidence from a raw JSON object. */
|
|
6
|
+
export declare function parseExecutionEvidence(raw: Record<string, unknown> | undefined | null): ExecutionEvidence | undefined;
|
|
7
|
+
/** Parse CriterionRevision[] from a raw JSON array. */
|
|
8
|
+
export declare function parseCriterionRevisions(raw: unknown): CriterionRevision[];
|
|
9
|
+
/** Parse WorkerResult[] from a raw JSON array. */
|
|
10
|
+
export declare function parseWorkerResults(raw: unknown): import("./protocol.js").WorkerResult[];
|
|
11
|
+
/** v2.12: The effective round outcome — declared outcome wins, otherwise
|
|
12
|
+
* derived from `success`. "partial" can only be declared explicitly (never
|
|
13
|
+
* silently derived from success=false, which would quietly change the
|
|
14
|
+
* success-class enforcement surface). */
|
|
15
|
+
export declare function effectiveOutcome(selfEval: SelfEvaluation): RoundOutcome;
|
|
16
|
+
/** v2.12: Whether the effective outcome is a success claim. Shared by the
|
|
17
|
+
* verification gate (success-class checks) and enforcement gate (R3). */
|
|
18
|
+
export declare function effectiveSuccess(selfEval: SelfEvaluation): boolean;
|
|
19
|
+
/** Required evaluation fields are the only format boundary. Optional fields
|
|
20
|
+
* are deliberately normalized by buildSelfEvaluation instead of rejecting a
|
|
21
|
+
* round for a non-authoritative reporting detail. */
|
|
22
|
+
export interface EvaluationValidation {
|
|
23
|
+
missing: string[];
|
|
24
|
+
invalid: Array<{
|
|
25
|
+
field: string;
|
|
26
|
+
expected: string;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
export declare function validateCoreSelfEvaluation(raw: Record<string, unknown>): EvaluationValidation;
|
|
30
|
+
/** Build a SelfEvaluation from a parsed JSON object.
|
|
31
|
+
* Lenient parsing: missing optional fields get sensible defaults. */
|
|
32
|
+
export declare function buildSelfEvaluation(raw: Record<string, unknown>): SelfEvaluation;
|
|
33
|
+
/** Parse a RoundContract object from raw JSON input. Lenient: non-string
|
|
34
|
+
* entries are dropped, strings are trimmed and capped. An object that IS
|
|
35
|
+
* present is returned even with empty arrays — an empty contract is a
|
|
36
|
+
* real declaration the round_underspecified check must see. Returns
|
|
37
|
+
* undefined only when the raw value is absent or not an object. */
|
|
38
|
+
export declare function parseRoundContract(raw: unknown): RoundContract | undefined;
|
|
39
|
+
/** Parse a PromptRequests object from raw JSON input.
|
|
40
|
+
* Lenient: missing or invalid fields get sensible defaults.
|
|
41
|
+
* Returns undefined if the raw value is absent or not an object,
|
|
42
|
+
* so makeSelfEvaluation can distinguish "not set" from "empty".
|
|
43
|
+
* Exported for the engine's last_round_result rebuild — the MCP
|
|
44
|
+
* lifecycle assembles prompt_requests into the request, but every
|
|
45
|
+
* compile path funnels through engine.invokeLoopCompile, whose
|
|
46
|
+
* field-by-field reconstruction must preserve them (v3.3.1). */
|
|
47
|
+
export declare function parsePromptRequests(raw: unknown): PromptRequests | undefined;
|
|
48
|
+
//# sourceMappingURL=self-eval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-eval.d.ts","sourceRoot":"","sources":["../src/self-eval.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AA8CvB,sDAAsD;AACtD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GAC9C,iBAAiB,GAAG,SAAS,CAuB/B;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,GACX,iBAAiB,EAAE,CAYrB;AAED,kDAAkD;AAClD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,GACX,OAAO,eAAe,EAAE,YAAY,EAAE,CA0BxC;AAED;;;0CAG0C;AAC1C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,YAAY,CAMvE;AAED;0EAC0E;AAC1E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAElE;AAED;;qDAEqD;AACrD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,oBAAoB,CAsBtB;AAED;sEACsE;AACtE,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,cAAc,CAsDhB;AAED;;;;oEAIoE;AACpE,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,GACX,aAAa,GAAG,SAAS,CAoB3B;AAED;;;;;;;iEAOiE;AACjE,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,GACX,cAAc,GAAG,SAAS,CAW5B"}
|