loopforge 2.11.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +145 -128
  2. package/dist/canonical-event-writer.d.ts +20 -0
  3. package/dist/canonical-event-writer.d.ts.map +1 -0
  4. package/dist/canonical-event-writer.js +131 -0
  5. package/dist/canonical-event-writer.js.map +1 -0
  6. package/dist/canonical-state.d.ts +20 -16
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +170 -61
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +11 -10
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +48 -0
  14. package/dist/cognitive-governance.d.ts.map +1 -0
  15. package/dist/cognitive-governance.js +226 -0
  16. package/dist/cognitive-governance.js.map +1 -0
  17. package/dist/compiler-subgoals.d.ts +7 -0
  18. package/dist/compiler-subgoals.d.ts.map +1 -0
  19. package/dist/compiler-subgoals.js +93 -0
  20. package/dist/compiler-subgoals.js.map +1 -0
  21. package/dist/derive-id.d.ts +12 -0
  22. package/dist/derive-id.d.ts.map +1 -0
  23. package/dist/derive-id.js +31 -0
  24. package/dist/derive-id.js.map +1 -0
  25. package/dist/evidence-provider.d.ts +23 -21
  26. package/dist/evidence-provider.d.ts.map +1 -1
  27. package/dist/evidence-provider.js +34 -74
  28. package/dist/evidence-provider.js.map +1 -1
  29. package/dist/generate-schema.js +90 -2
  30. package/dist/generate-schema.js.map +1 -1
  31. package/dist/index.d.ts +22 -19
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +15 -16
  34. package/dist/index.js.map +1 -1
  35. package/dist/loop-compiler.d.ts +1 -1
  36. package/dist/loop-compiler.d.ts.map +1 -1
  37. package/dist/loop-compiler.js +250 -337
  38. package/dist/loop-compiler.js.map +1 -1
  39. package/dist/loop-extras-parser.d.ts +2 -2
  40. package/dist/loop-extras-parser.d.ts.map +1 -1
  41. package/dist/loop-extras-parser.js +2 -2
  42. package/dist/loop-extras-parser.js.map +1 -1
  43. package/dist/loop-store.d.ts +20 -58
  44. package/dist/loop-store.d.ts.map +1 -1
  45. package/dist/loop-store.js +232 -309
  46. package/dist/loop-store.js.map +1 -1
  47. package/dist/mcp/server.d.ts +3 -3
  48. package/dist/mcp/server.d.ts.map +1 -1
  49. package/dist/mcp/server.js +83 -13
  50. package/dist/mcp/server.js.map +1 -1
  51. package/dist/mcp/session-projection.d.ts +5 -0
  52. package/dist/mcp/session-projection.d.ts.map +1 -0
  53. package/dist/mcp/session-projection.js +18 -0
  54. package/dist/mcp/session-projection.js.map +1 -0
  55. package/dist/mcp/session-queue.d.ts +3 -0
  56. package/dist/mcp/session-queue.d.ts.map +1 -0
  57. package/dist/mcp/session-queue.js +18 -0
  58. package/dist/mcp/session-queue.js.map +1 -0
  59. package/dist/mcp/session-types.d.ts +72 -0
  60. package/dist/mcp/session-types.d.ts.map +1 -0
  61. package/dist/mcp/session-types.js +2 -0
  62. package/dist/mcp/session-types.js.map +1 -0
  63. package/dist/mcp/session.d.ts +49 -93
  64. package/dist/mcp/session.d.ts.map +1 -1
  65. package/dist/mcp/session.js +544 -245
  66. package/dist/mcp/session.js.map +1 -1
  67. package/dist/mcp/tools.d.ts +26 -1
  68. package/dist/mcp/tools.d.ts.map +1 -1
  69. package/dist/mcp/tools.js +399 -274
  70. package/dist/mcp/tools.js.map +1 -1
  71. package/dist/policy-metrics.d.ts +17 -1
  72. package/dist/policy-metrics.d.ts.map +1 -1
  73. package/dist/policy-metrics.js +164 -1
  74. package/dist/policy-metrics.js.map +1 -1
  75. package/dist/policy.d.ts +34 -18
  76. package/dist/policy.d.ts.map +1 -1
  77. package/dist/policy.js +113 -18
  78. package/dist/policy.js.map +1 -1
  79. package/dist/prompt-assembler.d.ts +5 -3
  80. package/dist/prompt-assembler.d.ts.map +1 -1
  81. package/dist/prompt-assembler.js +126 -77
  82. package/dist/prompt-assembler.js.map +1 -1
  83. package/dist/prompt-policy.d.ts +8 -1
  84. package/dist/prompt-policy.d.ts.map +1 -1
  85. package/dist/prompt-policy.js +26 -8
  86. package/dist/prompt-policy.js.map +1 -1
  87. package/dist/protocol.d.ts +232 -192
  88. package/dist/protocol.d.ts.map +1 -1
  89. package/dist/protocol.js +15 -100
  90. package/dist/protocol.js.map +1 -1
  91. package/dist/replay.d.ts +11 -3
  92. package/dist/replay.d.ts.map +1 -1
  93. package/dist/replay.js +51 -14
  94. package/dist/replay.js.map +1 -1
  95. package/dist/round-commit-store.d.ts +12 -0
  96. package/dist/round-commit-store.d.ts.map +1 -0
  97. package/dist/round-commit-store.js +13 -0
  98. package/dist/round-commit-store.js.map +1 -0
  99. package/dist/round-coordinator.d.ts +25 -18
  100. package/dist/round-coordinator.d.ts.map +1 -1
  101. package/dist/round-coordinator.js +83 -71
  102. package/dist/round-coordinator.js.map +1 -1
  103. package/dist/round-driver.d.ts +14 -10
  104. package/dist/round-driver.d.ts.map +1 -1
  105. package/dist/round-driver.js +9 -13
  106. package/dist/round-driver.js.map +1 -1
  107. package/dist/round-gate.d.ts +31 -0
  108. package/dist/round-gate.d.ts.map +1 -0
  109. package/dist/round-gate.js +259 -0
  110. package/dist/round-gate.js.map +1 -0
  111. package/dist/round-recovery.d.ts +17 -0
  112. package/dist/round-recovery.d.ts.map +1 -0
  113. package/dist/round-recovery.js +117 -0
  114. package/dist/round-recovery.js.map +1 -0
  115. package/dist/round-report.d.ts +16 -0
  116. package/dist/round-report.d.ts.map +1 -0
  117. package/dist/round-report.js +401 -0
  118. package/dist/round-report.js.map +1 -0
  119. package/dist/round-transaction.d.ts +19 -12
  120. package/dist/round-transaction.d.ts.map +1 -1
  121. package/dist/round-transaction.js +102 -88
  122. package/dist/round-transaction.js.map +1 -1
  123. package/dist/runtime-services.d.ts +59 -0
  124. package/dist/runtime-services.d.ts.map +1 -0
  125. package/dist/runtime-services.js +460 -0
  126. package/dist/runtime-services.js.map +1 -0
  127. package/dist/storage.d.ts +3 -9
  128. package/dist/storage.d.ts.map +1 -1
  129. package/dist/storage.js +6 -17
  130. package/dist/storage.js.map +1 -1
  131. package/dist/token-utils.d.ts +9 -8
  132. package/dist/token-utils.d.ts.map +1 -1
  133. package/dist/token-utils.js +50 -10
  134. package/dist/token-utils.js.map +1 -1
  135. package/dist/vault-format.d.ts +4 -0
  136. package/dist/vault-format.d.ts.map +1 -0
  137. package/dist/vault-format.js +4 -0
  138. package/dist/vault-format.js.map +1 -0
  139. package/dist/vault-types.d.ts +24 -0
  140. package/dist/vault-types.d.ts.map +1 -0
  141. package/dist/vault-types.js +2 -0
  142. package/dist/vault-types.js.map +1 -0
  143. package/loop_policy.json +10 -12
  144. package/loopforge-policy.json +340 -0
  145. package/package.json +12 -6
  146. package/skills/perception/SKILL.md +199 -164
  147. package/dist/backends/interface.d.ts +0 -39
  148. package/dist/backends/interface.d.ts.map +0 -1
  149. package/dist/backends/interface.js +0 -6
  150. package/dist/backends/interface.js.map +0 -1
  151. package/dist/enforcement-gate.d.ts +0 -71
  152. package/dist/enforcement-gate.d.ts.map +0 -1
  153. package/dist/enforcement-gate.js +0 -744
  154. package/dist/enforcement-gate.js.map +0 -1
  155. package/dist/engine.d.ts +0 -59
  156. package/dist/engine.d.ts.map +0 -1
  157. package/dist/engine.js +0 -596
  158. package/dist/engine.js.map +0 -1
  159. package/dist/self-eval.d.ts +0 -23
  160. package/dist/self-eval.d.ts.map +0 -1
  161. package/dist/self-eval.js +0 -181
  162. package/dist/self-eval.js.map +0 -1
  163. package/dist/verification-gate.d.ts +0 -56
  164. package/dist/verification-gate.d.ts.map +0 -1
  165. package/dist/verification-gate.js +0 -563
  166. package/dist/verification-gate.js.map +0 -1
@@ -0,0 +1,259 @@
1
+ import { getPolicy } from "./policy.js";
2
+ import { makeEnforcementResult, makeVerificationFlag, makeVerificationResult, } from "./protocol.js";
3
+ import { deriveCompilerProjection, deriveEvidenceView, parseRoundReport, } from "./round-report.js";
4
+ import { jaccardSimilarity } from "./token-utils.js";
5
+ import { deriveConstraintId, deriveCriterionId } from "./derive-id.js";
6
+ function historyProjections(context) {
7
+ const byRound = new Map();
8
+ for (const entry of context.history) {
9
+ const report = parseRoundReport(entry.round_report);
10
+ const round = typeof entry.round === "number"
11
+ ? entry.round
12
+ : typeof entry.loop_lineage?.round === "number"
13
+ ? entry.loop_lineage.round
14
+ : 0;
15
+ if (report && round > 0 && !byRound.has(round)) {
16
+ byRound.set(round, deriveCompilerProjection(report, round));
17
+ }
18
+ }
19
+ return [...byRound.values()].sort((a, b) => (a.round ?? 0) - (b.round ?? 0));
20
+ }
21
+ function flag(severity, field, check, detail) {
22
+ return makeVerificationFlag({ severity, field, check, detail });
23
+ }
24
+ /** v2.13: Git HEAD from the current round's evidence snapshots, if any. */
25
+ function gitHead(snapshots) {
26
+ for (const snapshot of snapshots) {
27
+ if (snapshot.provider !== "git" || !snapshot.data || typeof snapshot.data !== "object") {
28
+ continue;
29
+ }
30
+ const head = snapshot.data.head;
31
+ if (typeof head === "string" && head)
32
+ return head;
33
+ }
34
+ return undefined;
35
+ }
36
+ function requiredCommandFailure(context) {
37
+ if (context.report.outcome !== "success")
38
+ return null;
39
+ const name = context.evidence.requiredCommandFailures[0];
40
+ if (!name)
41
+ return null;
42
+ return flag("error", "evidence.checks", "required_command_failed", `Round reports success but required command ${name} was not verified as passing.`);
43
+ }
44
+ function intentDrift(context) {
45
+ const intent = context.expectedAction?.trim() || context.previous?.agentIntent?.trim();
46
+ if (!intent)
47
+ return null;
48
+ const actual = [
49
+ context.report.summary,
50
+ ...context.evidence.observedFiles,
51
+ ...(context.report.subGoalEvents?.completed ?? []),
52
+ ].join(" ");
53
+ if (!actual.trim() ||
54
+ jaccardSimilarity(intent, actual) >= getPolicy().evolution.intent_drift_threshold) {
55
+ return null;
56
+ }
57
+ return flag("warn", "agentIntent", "intent_drift", "The previous non-authoritative Agent intent does not align with the runtime-observed result.");
58
+ }
59
+ function clarificationIsSubstantive(context) {
60
+ const clarification = context.report.driftClarification;
61
+ if (!clarification || clarification.explanation.trim().length < 20 || clarification.anchors.length === 0) {
62
+ return false;
63
+ }
64
+ const known = [
65
+ ...context.evidence.reportedFiles,
66
+ ...context.evidence.observedFiles,
67
+ ...context.evidence.criteriaMet,
68
+ ...context.evidence.criteriaRemaining,
69
+ ...(context.previous?.discoveries?.newConstraints ?? []),
70
+ ].map((item) => item.trim().toLowerCase().replace(/\\/g, "/"));
71
+ return clarification.anchors.some((anchor) => {
72
+ const normalized = anchor.trim().toLowerCase().replace(/\\/g, "/");
73
+ if (/^c-[0-9a-f]{8}$/i.test(normalized)) {
74
+ return known.some((item) => deriveConstraintId(item) === normalized);
75
+ }
76
+ if (/^cr-[0-9a-f]{8}$/i.test(normalized)) {
77
+ return known.some((item) => deriveCriterionId(item) === normalized);
78
+ }
79
+ return known.some((item) => item === normalized || item.endsWith(`/${normalized}`));
80
+ });
81
+ }
82
+ /** Verify a normalized report without creating a legacy round projection. */
83
+ export function verifyRoundReport(context) {
84
+ const flags = [];
85
+ const previous = context.previous;
86
+ const evidence = context.evidence;
87
+ const history = historyProjections(context);
88
+ if (previous?.evidence?.progressRatio !== null && evidence.progressRatio !== null &&
89
+ previous?.evidence?.progressRatio !== undefined &&
90
+ previous.evidence.progressRatio - evidence.progressRatio > 0.2 + 1e-10) {
91
+ flags.push(flag("warn", "evidence.progressRatio", "progress_regression", `Verified progress dropped from ${previous.evidence.progressRatio.toFixed(2)} to ${evidence.progressRatio.toFixed(2)}.`));
92
+ }
93
+ if (context.report.outcome === "success" && evidence.criteriaRemaining.length > 0) {
94
+ flags.push(flag("error", "evidence.criteriaRemaining", "success_with_remaining_criteria", `Round reports success while ${evidence.criteriaRemaining.length} criteria remain: ${evidence.criteriaRemaining.slice(0, 3).join("; ")}`));
95
+ }
96
+ if (context.report.outcome === "success" &&
97
+ evidence.verifiedClaims.length === 0 &&
98
+ evidence.testCounts === null &&
99
+ !context.report.evidence?.noChangeReason) {
100
+ flags.push(flag("error", "evidence.claims", "success_without_verified_evidence", "A successful round must include at least one provider-verified claim or an explicit no-change reason."));
101
+ }
102
+ if (context.report.outcome === "success" && evidence.observedFiles.length === 0 &&
103
+ evidence.testCounts && evidence.testCounts.failed === 0 && evidence.testCounts.passed > 0 &&
104
+ !context.report.evidence?.noChangeReason) {
105
+ flags.push(flag("warn", "evidence.observedFiles", "empty_change_with_passing", "Round reports success with passing checks but no observed file change or no-change reason."));
106
+ }
107
+ if (evidence.reportedFiles.length || evidence.observedFiles.length) {
108
+ const unconfirmed = evidence.reportedFiles.filter((file) => !evidence.observedFiles.includes(file));
109
+ const unreported = evidence.observedFiles.filter((file) => !evidence.reportedFiles.includes(file));
110
+ if (unconfirmed.length || unreported.length) {
111
+ flags.push(flag("warn", "evidence.files", "evidence_integrity", `Reported and observed files differ${unconfirmed.length ? `; unconfirmed: ${unconfirmed.join(", ")}` : ""}${unreported.length ? `; unreported: ${unreported.join(", ")}` : ""}.`));
112
+ }
113
+ }
114
+ if (evidence.contradictedClaims.length > 0) {
115
+ flags.push(flag("error", "evidence.claims", "evidence_contradiction", `Provider evidence contradicts: ${evidence.contradictedClaims.slice(0, 3).join("; ")}`));
116
+ }
117
+ if (context.report.outcome === "success" && evidence.unavailableClaims.length > 0) {
118
+ flags.push(flag("error", "evidence.claims", "evidence_unavailable", `Completion evidence is unavailable for: ${evidence.unavailableClaims.slice(0, 3).join("; ")}`));
119
+ }
120
+ if (context.report.outcome === "success" && context.report.continuation === "stop" &&
121
+ evidence.providerStatus !== "verified") {
122
+ flags.push(flag("error", "evidence.providerStatus", "completion_without_provider", evidence.providerStatus === "absent"
123
+ ? "A successful stopping report requires at least one runtime evidence provider."
124
+ : "A successful stopping report requires a provider that produced verifiable evidence."));
125
+ }
126
+ const commandFailure = requiredCommandFailure(context);
127
+ if (commandFailure)
128
+ flags.push(commandFailure);
129
+ const knownConstraints = new Set([...history, ...(previous ? [previous] : [])]
130
+ .flatMap((item) => [...(item.discoveries?.newConstraints ?? []), ...(item.violations ?? [])])
131
+ .map((item) => item.trim().toLowerCase()));
132
+ const duplicate = context.report.discoveries?.newConstraints.find((item) => knownConstraints.has(item.trim().toLowerCase()));
133
+ if (duplicate) {
134
+ flags.push(flag("warn", "discoveries.newConstraints", "duplicate_constraint_discovery", `Constraint "${duplicate}" was already known.`));
135
+ }
136
+ const recent = [...history.slice(-2), ...(previous ? [previous] : [])].slice(-2);
137
+ const recurring = context.report.violations.find((violation) => recent.length === 2 && recent.every((item) => (item.violations ?? []).some((prior) => prior.trim().toLowerCase() === violation.trim().toLowerCase())));
138
+ if (recurring) {
139
+ flags.push(flag("error", "violations", "recurring_violation", `Constraint violation "${recurring}" appeared in three consecutive rounds.`));
140
+ }
141
+ const previousConstraints = new Set((previous?.discoveries?.newConstraints ?? []).map((item) => item.trim().toLowerCase()));
142
+ const freshRetraction = context.report.constraintEvents?.retired.find((item) => previousConstraints.has(item.trim().toLowerCase()));
143
+ if (freshRetraction) {
144
+ flags.push(flag("warn", "constraintEvents.retired", "retract_fresh_constraint", `Constraint "${freshRetraction}" was retired immediately after discovery.`));
145
+ }
146
+ const drift = intentDrift(context);
147
+ if (drift) {
148
+ const accepted = clarificationIsSubstantive(context);
149
+ flags.push(flag(accepted ? "warn" : "error", drift.field, drift.check, accepted
150
+ ? `${drift.detail} A substantive runtime-anchored clarification was supplied.`
151
+ : `${drift.detail} Supply driftClarification with a concrete explanation and runtime-verifiable anchor.`));
152
+ const maxStreak = getPolicy().engine.drift_clarification_max_streak;
153
+ if (!accepted && maxStreak > 0 &&
154
+ (context.driftClarificationStreak ?? 0) + 1 >= maxStreak) {
155
+ flags.push(flag("error", "driftClarification", "intent_drift_escalated", `Intent drift remained unresolved for ${maxStreak} consecutive rounds.`));
156
+ }
157
+ }
158
+ const noCredibleProgress = (projection) => (projection.evidence?.verifiedClaims.length ?? 0) === 0 &&
159
+ (projection.evidence?.observedFiles.length ?? 0) === 0 &&
160
+ !projection.discoveries?.facts.length;
161
+ const recentAccepted = history.filter((item) => (item.round ?? 0) < context.currentRound).slice(-2);
162
+ if (recentAccepted.length === 2 && recentAccepted.every(noCredibleProgress) &&
163
+ noCredibleProgress(deriveCompilerProjection(context.report, context.currentRound, evidence.criteriaMet.concat(evidence.criteriaRemaining), context.providerSnapshots))) {
164
+ flags.push(flag("error", "evidence", "progress_stall", "Three consecutive accepted reports contain no new runtime-verified claim or observed workspace change."));
165
+ }
166
+ const staleFiles = (context.backtrackSkippedFiles ?? []).filter((file) => evidence.observedFiles.includes(file));
167
+ if (staleFiles.length > 0) {
168
+ flags.push(flag("error", "evidence.observedFiles", "backtrack_workspace_not_restored", `Post-backtrack evidence still includes skipped files: ${staleFiles.join(", ")}.`));
169
+ }
170
+ // v2.13: A backtracked round must leave the workspace at the restore
171
+ // commit. The post-backtrack round is a pure verification round, so a git
172
+ // HEAD that differs from the restore point means the agent worked without
173
+ // restoring (or restored somewhere else). Only compared when the current
174
+ // round actually produced git evidence — an absent provider cannot assert
175
+ // a mismatch.
176
+ if (context.backtrackTargetGitHead) {
177
+ const head = gitHead(context.providerSnapshots);
178
+ if (head && head !== context.backtrackTargetGitHead) {
179
+ flags.push(flag("error", "evidence.observedFiles", "backtrack_workspace_not_restored", `Git HEAD ${head.slice(0, 12)} does not match the backtrack restore point ${context.backtrackTargetGitHead.slice(0, 12)} — the workspace must be restored before working.`));
180
+ }
181
+ }
182
+ const verdict = flags.some((item) => item.severity === "error")
183
+ ? "contradicted"
184
+ : flags.some((item) => item.severity === "warn") ? "suspect" : "trusted";
185
+ return makeVerificationResult({ verdict, flags });
186
+ }
187
+ /** Enforcement consumes the same normalized context and never re-extracts evidence. */
188
+ export function enforceRoundReport(context, verification) {
189
+ const escalated = new Set(context.escalatedRejectionChecks ?? []);
190
+ const maybeEscalate = (check, reason, fixInstructions) => {
191
+ if (getPolicy().engine.enforcement_escalation_enabled && !escalated.has(check)) {
192
+ return makeEnforcementResult({
193
+ action: "reject",
194
+ check,
195
+ escalation_issued: true,
196
+ reason,
197
+ fix_instructions: fixInstructions,
198
+ });
199
+ }
200
+ return makeEnforcementResult({ action: "terminate", check, reason });
201
+ };
202
+ const driftEscalated = verification.flags.find((item) => item.check === "intent_drift_escalated");
203
+ if (driftEscalated) {
204
+ return makeEnforcementResult({
205
+ action: "terminate", check: driftEscalated.check, reason: driftEscalated.detail,
206
+ });
207
+ }
208
+ const drift = verification.flags.find((item) => item.check === "intent_drift");
209
+ if (drift && drift.severity === "error") {
210
+ return makeEnforcementResult({
211
+ action: "reject", check: drift.check, reason: drift.detail,
212
+ fix_instructions: "Explain the task pivot and anchor it to a verified criterion, constraint ID, or observed workspace path.",
213
+ });
214
+ }
215
+ const maxRejections = getPolicy().engine.max_rejections;
216
+ if (maxRejections > 0 && (context.consecutiveRejections ?? 0) >= maxRejections) {
217
+ return maybeEscalate("max_rejections", "The same logical round reached the rejection limit and requires one final human-guidance retry.", "Seek Human Guidance before retrying. Re-evaluate the reported evidence and submit a corrected canonical RoundReport.");
218
+ }
219
+ const recurring = verification.flags.find((item) => item.check === "recurring_violation");
220
+ if (recurring) {
221
+ return maybeEscalate(recurring.check, recurring.detail, "Seek Human Guidance before retrying. Address the recurring violation and provide runtime-verifiable evidence.");
222
+ }
223
+ const stall = verification.flags.find((item) => item.check === "progress_stall");
224
+ if (stall) {
225
+ return makeEnforcementResult({
226
+ action: (context.consecutiveRejections ?? 0) >= 1 && getPolicy().engine.backtrack_enabled
227
+ ? "backtrack"
228
+ : "reject",
229
+ check: stall.check,
230
+ reason: stall.detail,
231
+ fix_instructions: "Produce a new provider-verifiable fact or change the approach.",
232
+ });
233
+ }
234
+ const backtrack = verification.flags.find((item) => item.check === "backtrack_workspace_not_restored");
235
+ if (backtrack && getPolicy().engine.backtrack_enabled) {
236
+ return makeEnforcementResult({
237
+ action: "backtrack", check: backtrack.check, reason: backtrack.detail,
238
+ });
239
+ }
240
+ const blocking = verification.flags.find((item) => item.severity === "error");
241
+ if (blocking) {
242
+ return makeEnforcementResult({
243
+ action: "reject", check: blocking.check, reason: blocking.detail,
244
+ fix_instructions: "Submit a corrected RoundReport with runtime-verifiable evidence.",
245
+ });
246
+ }
247
+ return makeEnforcementResult({ action: "accept" });
248
+ }
249
+ export function makeRoundGateContext(report, currentRound, history, providerSnapshots, remainingCriteria = [], options = {}) {
250
+ return {
251
+ report,
252
+ evidence: deriveEvidenceView(report, remainingCriteria, providerSnapshots),
253
+ currentRound,
254
+ history,
255
+ providerSnapshots,
256
+ ...options,
257
+ };
258
+ }
259
+ //# sourceMappingURL=round-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round-gate.js","sourceRoot":"","sources":["../src/round-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { VaultEntry } from "./vault-types.js";
2
+ import type { EnforcementResult, VerificationFlag } from "./protocol.js";
3
+ export declare function findSafeRestorePoint(currentRound: number, entries: VaultEntry[], maxDepth: number): {
4
+ round: number;
5
+ skippedDiscoveries: string[];
6
+ } | null;
7
+ /** Collect files observed in rounds that will be skipped by a backtrack. */
8
+ export declare function collectSkippedRoundFiles(restoreRound: number, currentRound: number, entries: VaultEntry[]): string[];
9
+ /** v2.13: Extract the git HEAD of a restore point from the committed
10
+ * round transaction snapshot of that round. The committed snapshot carries
11
+ * the full provider snapshots (afterEvidence preferred — the workspace
12
+ * state the agent was asked to restore to — with beforeEvidence fallback).
13
+ * Returns undefined when git evidence is unavailable. */
14
+ export declare function findBacktrackTargetGitHead(restoreRound: number, entries: VaultEntry[]): string | undefined;
15
+ export declare function buildBacktrackPrompt(fromRound: number, toRound: number, triggerRule: string, skippedDiscoveries: string[], skippedFiles?: string[]): string;
16
+ export declare function buildRejectionPrompt(currentRound: number, task: string, enforcement: EnforcementResult, flags?: VerificationFlag[]): string;
17
+ //# sourceMappingURL=round-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round-recovery.d.ts","sourceRoot":"","sources":["../src/round-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAsBzE,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,UAAU,EAAE,EACrB,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAoBxD;AAED,4EAA4E;AAC5E,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,UAAU,EAAE,GACpB,MAAM,EAAE,CAcV;AAED;;;;0DAI0D;AAC1D,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,UAAU,EAAE,GACpB,MAAM,GAAG,SAAS,CA2BpB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,YAAY,GAAE,MAAM,EAAO,GAC1B,MAAM,CAYR;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,iBAAiB,EAC9B,KAAK,GAAE,gBAAgB,EAAO,GAC7B,MAAM,CAYR"}
@@ -0,0 +1,117 @@
1
+ import { deriveEvidenceView, parseRoundReport } from "./round-report.js";
2
+ import { entryRound } from "./token-utils.js";
3
+ function transactionResult(entry) {
4
+ const transaction = entry.loop_lineage?.round_transaction;
5
+ if (!transaction || typeof transaction !== "object" || Array.isArray(transaction))
6
+ return null;
7
+ const result = transaction.result;
8
+ return result && typeof result === "object" && !Array.isArray(result)
9
+ ? result
10
+ : null;
11
+ }
12
+ function isCleanRound(entry) {
13
+ const result = transactionResult(entry);
14
+ if (!result || !["continue", "stop"].includes(String(result.action)))
15
+ return false;
16
+ return !Array.isArray(result.verificationFlags) || !result.verificationFlags.some((flag) => flag && typeof flag === "object" && !Array.isArray(flag) &&
17
+ flag.severity === "error");
18
+ }
19
+ export function findSafeRestorePoint(currentRound, entries, maxDepth) {
20
+ const skippedDiscoveries = [];
21
+ for (let depth = 1; depth <= maxDepth; depth++) {
22
+ const target = currentRound - depth;
23
+ if (target < 1)
24
+ break;
25
+ if (depth > 1) {
26
+ const skipped = entries.find((entry) => entryRound(entry) === target + 1 &&
27
+ String(entry.task_id ?? "").endsWith(":event") &&
28
+ entry.round_report !== undefined);
29
+ const report = skipped ? parseRoundReport(skipped.round_report) : null;
30
+ for (const discovery of report?.discoveries?.newConstraints ?? []) {
31
+ if (!skippedDiscoveries.includes(discovery))
32
+ skippedDiscoveries.push(discovery);
33
+ }
34
+ }
35
+ const clean = entries.filter((entry) => entryRound(entry) === target).find(isCleanRound);
36
+ if (clean)
37
+ return { round: target, skippedDiscoveries };
38
+ }
39
+ return null;
40
+ }
41
+ /** Collect files observed in rounds that will be skipped by a backtrack. */
42
+ export function collectSkippedRoundFiles(restoreRound, currentRound, entries) {
43
+ const skippedFiles = new Set();
44
+ for (let round = restoreRound + 1; round < currentRound; round++) {
45
+ const roundEvent = entries.find((entry) => entryRound(entry) === round &&
46
+ String(entry.task_id ?? "").endsWith(":event") &&
47
+ entry.round_report !== undefined);
48
+ const report = roundEvent ? parseRoundReport(roundEvent.round_report) : null;
49
+ for (const file of report ? deriveEvidenceView(report).observedFiles : []) {
50
+ skippedFiles.add(file);
51
+ }
52
+ }
53
+ return [...skippedFiles].sort();
54
+ }
55
+ /** v2.13: Extract the git HEAD of a restore point from the committed
56
+ * round transaction snapshot of that round. The committed snapshot carries
57
+ * the full provider snapshots (afterEvidence preferred — the workspace
58
+ * state the agent was asked to restore to — with beforeEvidence fallback).
59
+ * Returns undefined when git evidence is unavailable. */
60
+ export function findBacktrackTargetGitHead(restoreRound, entries) {
61
+ const event = entries.find((entry) => entryRound(entry) === restoreRound &&
62
+ String(entry.task_id ?? "").endsWith(":event"));
63
+ const transaction = event?.loop_lineage?.round_transaction;
64
+ if (!transaction || typeof transaction !== "object" || Array.isArray(transaction)) {
65
+ return undefined;
66
+ }
67
+ const snapshot = transaction.snapshot;
68
+ if (!snapshot || typeof snapshot !== "object" || Array.isArray(snapshot)) {
69
+ return undefined;
70
+ }
71
+ const record = snapshot;
72
+ const candidates = [
73
+ ...(Array.isArray(record.afterEvidence) ? record.afterEvidence : []),
74
+ ...(Array.isArray(record.beforeEvidence) ? record.beforeEvidence : []),
75
+ ];
76
+ for (const raw of candidates) {
77
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
78
+ continue;
79
+ const provider = raw;
80
+ if (provider.provider !== "git" || !provider.data || typeof provider.data !== "object") {
81
+ continue;
82
+ }
83
+ const head = provider.data.head;
84
+ if (typeof head === "string" && head)
85
+ return head;
86
+ }
87
+ return undefined;
88
+ }
89
+ export function buildBacktrackPrompt(fromRound, toRound, triggerRule, skippedDiscoveries, skippedFiles = []) {
90
+ const lines = [
91
+ `## Backtrack: Round ${fromRound} to Round ${toRound}`,
92
+ "",
93
+ `Reason: ${triggerRule}`,
94
+ "",
95
+ "Restore only the listed scope to the verified state at the restore round. Inspect the workspace and obtain authorization before any destructive action.",
96
+ ];
97
+ if (skippedFiles.length)
98
+ lines.push("", "Affected files:", ...skippedFiles.slice(0, 50).map((file) => `- ${file}`));
99
+ if (skippedDiscoveries.length)
100
+ lines.push("", "Preserved discoveries:", ...skippedDiscoveries.map((item) => `- ${item}`));
101
+ lines.push("", "Required verification: confirm the affected files match the restore point before continuing.");
102
+ return lines.join("\n");
103
+ }
104
+ export function buildRejectionPrompt(currentRound, task, enforcement, flags = []) {
105
+ const findings = flags.map((flag) => `- [${flag.check}] ${flag.detail}`);
106
+ return [
107
+ `## Round ${currentRound}: REJECTED`,
108
+ "",
109
+ enforcement.reason,
110
+ findings.length ? `\n### Evidence Gap\n\n${findings.join("\n")}` : "",
111
+ enforcement.fix_instructions ? `\n### Required Fix\n\n${enforcement.fix_instructions}` : "",
112
+ `\n### Retry Round ${currentRound}\n\n${task}`,
113
+ "",
114
+ "Re-execute the same logical round and submit a corrected canonical RoundReport. Do not advance the round number.",
115
+ ].join("\n");
116
+ }
117
+ //# sourceMappingURL=round-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round-recovery.js","sourceRoot":"","sources":["../src/round-recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { RoundReport, EvidenceDerivedView, CompilerRoundProjection } from "./protocol.js";
2
+ import type { ProviderSnapshot } from "./evidence-provider.js";
3
+ import type { VaultEntry } from "./vault-types.js";
4
+ export declare function isSafeObjectiveRefinement(value: string): boolean;
5
+ export declare function parseRoundReport(value: unknown): RoundReport | null;
6
+ /** Derive normalized evidence once for all runtime consumers. */
7
+ export declare function deriveEvidenceView(report: RoundReport, requiredCriteria?: string[], snapshots?: ProviderSnapshot[]): EvidenceDerivedView;
8
+ /** Build the narrow compiler projection consumed by the compiler. */
9
+ export declare function deriveCompilerProjection(report: RoundReport, round: number, requiredCriteria?: string[], snapshots?: ProviderSnapshot[]): CompilerRoundProjection;
10
+ /** Rebuild the latest accepted compiler projection directly from events. */
11
+ export declare function latestCompilerProjection(entries: VaultEntry[], requiredCriteria?: string[]): CompilerRoundProjection | null;
12
+ /** Replace agent-supplied provenance with statuses observed by the runtime.
13
+ * Unknown agent references remain claims; missing provider references are
14
+ * explicitly unavailable rather than silently passing verification. */
15
+ export declare function verifyRoundReportEvidence(report: RoundReport, snapshots: ProviderSnapshot[]): RoundReport;
16
+ //# sourceMappingURL=round-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round-report.d.ts","sourceRoot":"","sources":["../src/round-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAoEnD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIhE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CA2HnE;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,gBAAgB,GAAE,MAAM,EAAO,EAC/B,SAAS,GAAE,gBAAgB,EAAO,GACjC,mBAAmB,CA6ErB;AAED,qEAAqE;AACrE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,gBAAgB,GAAE,MAAM,EAAO,EAC/B,SAAS,GAAE,gBAAgB,EAAO,GACjC,uBAAuB,CAiBzB;AAED,4EAA4E;AAC5E,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,UAAU,EAAE,EACrB,gBAAgB,GAAE,MAAM,EAAO,GAC9B,uBAAuB,GAAG,IAAI,CAahC;AAED;;uEAEuE;AACvE,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,gBAAgB,EAAE,GAC5B,WAAW,CAoFb"}