loopforge 3.9.2 → 4.0.7

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 (285) hide show
  1. package/README.md +236 -112
  2. package/dist/audit.d.ts +73 -15
  3. package/dist/audit.d.ts.map +1 -1
  4. package/dist/audit.js +131 -61
  5. package/dist/audit.js.map +1 -1
  6. package/dist/canonical-state.d.ts +152 -40
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +382 -206
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +41 -12
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +0 -2
  14. package/dist/cognitive-governance.d.ts.map +1 -1
  15. package/dist/cognitive-governance.js +0 -4
  16. package/dist/cognitive-governance.js.map +1 -1
  17. package/dist/committed-round.d.ts +105 -141
  18. package/dist/committed-round.d.ts.map +1 -1
  19. package/dist/committed-round.js +249 -372
  20. package/dist/committed-round.js.map +1 -1
  21. package/dist/constraint-lifecycle.d.ts +73 -0
  22. package/dist/constraint-lifecycle.d.ts.map +1 -0
  23. package/dist/constraint-lifecycle.js +174 -0
  24. package/dist/constraint-lifecycle.js.map +1 -0
  25. package/dist/context-boundary.d.ts +83 -0
  26. package/dist/context-boundary.d.ts.map +1 -0
  27. package/dist/context-boundary.js +101 -0
  28. package/dist/context-boundary.js.map +1 -0
  29. package/dist/contract-items.d.ts +12 -8
  30. package/dist/contract-items.d.ts.map +1 -1
  31. package/dist/contract-items.js +31 -26
  32. package/dist/contract-items.js.map +1 -1
  33. package/dist/contract-requirement.d.ts +47 -0
  34. package/dist/contract-requirement.d.ts.map +1 -0
  35. package/dist/contract-requirement.js +51 -0
  36. package/dist/contract-requirement.js.map +1 -0
  37. package/dist/criterion-status.d.ts +35 -0
  38. package/dist/criterion-status.d.ts.map +1 -0
  39. package/dist/criterion-status.js +89 -0
  40. package/dist/criterion-status.js.map +1 -0
  41. package/dist/enforcement-gate.d.ts +32 -67
  42. package/dist/enforcement-gate.d.ts.map +1 -1
  43. package/dist/enforcement-gate.js +203 -439
  44. package/dist/enforcement-gate.js.map +1 -1
  45. package/dist/engine.d.ts +9 -103
  46. package/dist/engine.d.ts.map +1 -1
  47. package/dist/engine.js +28 -887
  48. package/dist/engine.js.map +1 -1
  49. package/dist/errors.d.ts +41 -0
  50. package/dist/errors.d.ts.map +1 -0
  51. package/dist/errors.js +69 -0
  52. package/dist/errors.js.map +1 -0
  53. package/dist/evidence-claims.d.ts +33 -31
  54. package/dist/evidence-claims.d.ts.map +1 -1
  55. package/dist/evidence-claims.js +58 -72
  56. package/dist/evidence-claims.js.map +1 -1
  57. package/dist/evidence-posture-view.d.ts +19 -0
  58. package/dist/evidence-posture-view.d.ts.map +1 -0
  59. package/dist/evidence-posture-view.js +116 -0
  60. package/dist/evidence-posture-view.js.map +1 -0
  61. package/dist/evidence-posture.d.ts +73 -0
  62. package/dist/evidence-posture.d.ts.map +1 -0
  63. package/dist/evidence-posture.js +281 -0
  64. package/dist/evidence-posture.js.map +1 -0
  65. package/dist/evidence-provider.d.ts +55 -37
  66. package/dist/evidence-provider.d.ts.map +1 -1
  67. package/dist/evidence-provider.js +182 -332
  68. package/dist/evidence-provider.js.map +1 -1
  69. package/dist/explain.d.ts +167 -27
  70. package/dist/explain.d.ts.map +1 -1
  71. package/dist/explain.js +373 -58
  72. package/dist/explain.js.map +1 -1
  73. package/dist/field-accounting.d.ts.map +1 -1
  74. package/dist/field-accounting.js +3 -22
  75. package/dist/field-accounting.js.map +1 -1
  76. package/dist/generate-schema.js +13 -8
  77. package/dist/generate-schema.js.map +1 -1
  78. package/dist/git-boundary.d.ts +128 -0
  79. package/dist/git-boundary.d.ts.map +1 -0
  80. package/dist/git-boundary.js +625 -0
  81. package/dist/git-boundary.js.map +1 -0
  82. package/dist/git-facts.d.ts +22 -0
  83. package/dist/git-facts.d.ts.map +1 -0
  84. package/dist/git-facts.js +29 -0
  85. package/dist/git-facts.js.map +1 -0
  86. package/dist/git-motion.d.ts +37 -0
  87. package/dist/git-motion.d.ts.map +1 -0
  88. package/dist/git-motion.js +59 -0
  89. package/dist/git-motion.js.map +1 -0
  90. package/dist/history.d.ts +44 -0
  91. package/dist/history.d.ts.map +1 -0
  92. package/dist/history.js +77 -0
  93. package/dist/history.js.map +1 -0
  94. package/dist/index.d.ts +19 -9
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +12 -4
  97. package/dist/index.js.map +1 -1
  98. package/dist/init.d.ts +16 -0
  99. package/dist/init.d.ts.map +1 -1
  100. package/dist/init.js +80 -14
  101. package/dist/init.js.map +1 -1
  102. package/dist/loop-compiler.d.ts +51 -19
  103. package/dist/loop-compiler.d.ts.map +1 -1
  104. package/dist/loop-compiler.js +423 -507
  105. package/dist/loop-compiler.js.map +1 -1
  106. package/dist/loop-store.d.ts +6 -5
  107. package/dist/loop-store.d.ts.map +1 -1
  108. package/dist/loop-store.js +153 -35
  109. package/dist/loop-store.js.map +1 -1
  110. package/dist/mcp/round-lifecycle.d.ts +285 -81
  111. package/dist/mcp/round-lifecycle.d.ts.map +1 -1
  112. package/dist/mcp/round-lifecycle.js +1629 -574
  113. package/dist/mcp/round-lifecycle.js.map +1 -1
  114. package/dist/mcp/server.d.ts +5 -0
  115. package/dist/mcp/server.d.ts.map +1 -1
  116. package/dist/mcp/server.js +61 -19
  117. package/dist/mcp/server.js.map +1 -1
  118. package/dist/mcp/session.d.ts +81 -39
  119. package/dist/mcp/session.d.ts.map +1 -1
  120. package/dist/mcp/session.js +963 -271
  121. package/dist/mcp/session.js.map +1 -1
  122. package/dist/mcp/submission-boundary.d.ts +23 -31
  123. package/dist/mcp/submission-boundary.d.ts.map +1 -1
  124. package/dist/mcp/submission-boundary.js +242 -82
  125. package/dist/mcp/submission-boundary.js.map +1 -1
  126. package/dist/mcp/submission-handle.d.ts +66 -0
  127. package/dist/mcp/submission-handle.d.ts.map +1 -0
  128. package/dist/mcp/submission-handle.js +173 -0
  129. package/dist/mcp/submission-handle.js.map +1 -0
  130. package/dist/mcp/tools.d.ts +17 -7
  131. package/dist/mcp/tools.d.ts.map +1 -1
  132. package/dist/mcp/tools.js +763 -244
  133. package/dist/mcp/tools.js.map +1 -1
  134. package/dist/open-question.d.ts +7 -0
  135. package/dist/open-question.d.ts.map +1 -0
  136. package/dist/open-question.js +14 -0
  137. package/dist/open-question.js.map +1 -0
  138. package/dist/policy-metrics.d.ts +31 -21
  139. package/dist/policy-metrics.d.ts.map +1 -1
  140. package/dist/policy-metrics.js +117 -64
  141. package/dist/policy-metrics.js.map +1 -1
  142. package/dist/policy.d.ts +15 -40
  143. package/dist/policy.d.ts.map +1 -1
  144. package/dist/policy.js +13 -13
  145. package/dist/policy.js.map +1 -1
  146. package/dist/progress.d.ts +45 -0
  147. package/dist/progress.d.ts.map +1 -0
  148. package/dist/progress.js +136 -0
  149. package/dist/progress.js.map +1 -0
  150. package/dist/prompt-assembler.d.ts +28 -9
  151. package/dist/prompt-assembler.d.ts.map +1 -1
  152. package/dist/prompt-assembler.js +592 -603
  153. package/dist/prompt-assembler.js.map +1 -1
  154. package/dist/prompt-coverage.d.ts +39 -0
  155. package/dist/prompt-coverage.d.ts.map +1 -0
  156. package/dist/prompt-coverage.js +80 -0
  157. package/dist/prompt-coverage.js.map +1 -0
  158. package/dist/prompt-freshness.d.ts +25 -0
  159. package/dist/prompt-freshness.d.ts.map +1 -0
  160. package/dist/prompt-freshness.js +88 -0
  161. package/dist/prompt-freshness.js.map +1 -0
  162. package/dist/prompt-policy.d.ts +14 -4
  163. package/dist/prompt-policy.d.ts.map +1 -1
  164. package/dist/prompt-policy.js +29 -10
  165. package/dist/prompt-policy.js.map +1 -1
  166. package/dist/protocol.d.ts +875 -419
  167. package/dist/protocol.d.ts.map +1 -1
  168. package/dist/protocol.js +73 -99
  169. package/dist/protocol.js.map +1 -1
  170. package/dist/recovery-guidance.d.ts +13 -0
  171. package/dist/recovery-guidance.d.ts.map +1 -0
  172. package/dist/recovery-guidance.js +15 -0
  173. package/dist/recovery-guidance.js.map +1 -0
  174. package/dist/recovery.d.ts +68 -0
  175. package/dist/recovery.d.ts.map +1 -0
  176. package/dist/recovery.js +234 -0
  177. package/dist/recovery.js.map +1 -0
  178. package/dist/replay.d.ts +42 -8
  179. package/dist/replay.d.ts.map +1 -1
  180. package/dist/replay.js +311 -84
  181. package/dist/replay.js.map +1 -1
  182. package/dist/result-facts.d.ts +45 -0
  183. package/dist/result-facts.d.ts.map +1 -0
  184. package/dist/result-facts.js +86 -0
  185. package/dist/result-facts.js.map +1 -0
  186. package/dist/round-contract.d.ts +38 -8
  187. package/dist/round-contract.d.ts.map +1 -1
  188. package/dist/round-contract.js +71 -31
  189. package/dist/round-contract.js.map +1 -1
  190. package/dist/round-coordinator.d.ts +45 -91
  191. package/dist/round-coordinator.d.ts.map +1 -1
  192. package/dist/round-coordinator.js +254 -271
  193. package/dist/round-coordinator.js.map +1 -1
  194. package/dist/round-driver.d.ts +56 -16
  195. package/dist/round-driver.d.ts.map +1 -1
  196. package/dist/round-driver.js +225 -39
  197. package/dist/round-driver.js.map +1 -1
  198. package/dist/round-facts.d.ts +33 -52
  199. package/dist/round-facts.d.ts.map +1 -1
  200. package/dist/round-facts.js +54 -157
  201. package/dist/round-facts.js.map +1 -1
  202. package/dist/round-guidance.d.ts +56 -0
  203. package/dist/round-guidance.d.ts.map +1 -0
  204. package/dist/round-guidance.js +161 -0
  205. package/dist/round-guidance.js.map +1 -0
  206. package/dist/round-outcome.d.ts +21 -0
  207. package/dist/round-outcome.d.ts.map +1 -0
  208. package/dist/round-outcome.js +31 -0
  209. package/dist/round-outcome.js.map +1 -0
  210. package/dist/round-transaction.d.ts +168 -21
  211. package/dist/round-transaction.d.ts.map +1 -1
  212. package/dist/round-transaction.js +856 -39
  213. package/dist/round-transaction.js.map +1 -1
  214. package/dist/self-eval.d.ts +40 -60
  215. package/dist/self-eval.d.ts.map +1 -1
  216. package/dist/self-eval.js +455 -384
  217. package/dist/self-eval.js.map +1 -1
  218. package/dist/storage.d.ts +16 -0
  219. package/dist/storage.d.ts.map +1 -1
  220. package/dist/storage.js +54 -4
  221. package/dist/storage.js.map +1 -1
  222. package/dist/subgoal-state.d.ts +2 -3
  223. package/dist/subgoal-state.d.ts.map +1 -1
  224. package/dist/subgoal-state.js +2 -3
  225. package/dist/subgoal-state.js.map +1 -1
  226. package/dist/submission-guidance.d.ts +43 -21
  227. package/dist/submission-guidance.d.ts.map +1 -1
  228. package/dist/submission-guidance.js +368 -262
  229. package/dist/submission-guidance.js.map +1 -1
  230. package/dist/submission-receipt.d.ts +16 -8
  231. package/dist/submission-receipt.d.ts.map +1 -1
  232. package/dist/submission-receipt.js +146 -51
  233. package/dist/submission-receipt.js.map +1 -1
  234. package/dist/token-utils.d.ts +47 -7
  235. package/dist/token-utils.d.ts.map +1 -1
  236. package/dist/token-utils.js +66 -15
  237. package/dist/token-utils.js.map +1 -1
  238. package/dist/transaction-identity.d.ts +9 -0
  239. package/dist/transaction-identity.d.ts.map +1 -0
  240. package/dist/transaction-identity.js +69 -0
  241. package/dist/transaction-identity.js.map +1 -0
  242. package/dist/verification-actions.d.ts +13 -0
  243. package/dist/verification-actions.d.ts.map +1 -0
  244. package/dist/verification-actions.js +44 -0
  245. package/dist/verification-actions.js.map +1 -0
  246. package/dist/verification-gate.d.ts +26 -46
  247. package/dist/verification-gate.d.ts.map +1 -1
  248. package/dist/verification-gate.js +218 -427
  249. package/dist/verification-gate.js.map +1 -1
  250. package/dist/version.d.ts +1 -1
  251. package/dist/version.js +1 -1
  252. package/dist/working-memory.d.ts +187 -0
  253. package/dist/working-memory.d.ts.map +1 -0
  254. package/dist/working-memory.js +767 -0
  255. package/dist/working-memory.js.map +1 -0
  256. package/dist/workspace-checkpoint.d.ts +88 -0
  257. package/dist/workspace-checkpoint.d.ts.map +1 -0
  258. package/dist/workspace-checkpoint.js +326 -0
  259. package/dist/workspace-checkpoint.js.map +1 -0
  260. package/dist/workspace-restore.d.ts +68 -0
  261. package/dist/workspace-restore.d.ts.map +1 -0
  262. package/dist/workspace-restore.js +604 -0
  263. package/dist/workspace-restore.js.map +1 -0
  264. package/dist/workspace.d.ts +0 -9
  265. package/dist/workspace.d.ts.map +1 -1
  266. package/dist/workspace.js +0 -17
  267. package/dist/workspace.js.map +1 -1
  268. package/loop_policy.json +5 -19
  269. package/package.json +2 -2
  270. package/skills/forge/SKILL.md +212 -0
  271. package/skills/forge/references/evidence-and-contracts.md +204 -0
  272. package/skills/forge/references/recovery-and-views.md +188 -0
  273. package/dist/cognitive-facts.d.ts +0 -30
  274. package/dist/cognitive-facts.d.ts.map +0 -1
  275. package/dist/cognitive-facts.js +0 -113
  276. package/dist/cognitive-facts.js.map +0 -1
  277. package/dist/loop-extras-parser.d.ts +0 -81
  278. package/dist/loop-extras-parser.d.ts.map +0 -1
  279. package/dist/loop-extras-parser.js +0 -213
  280. package/dist/loop-extras-parser.js.map +0 -1
  281. package/dist/loop-projection.d.ts +0 -6
  282. package/dist/loop-projection.d.ts.map +0 -1
  283. package/dist/loop-projection.js +0 -28
  284. package/dist/loop-projection.js.map +0 -1
  285. package/skills/perception/SKILL.md +0 -370
@@ -0,0 +1,234 @@
1
+ /** v3.9.7: checkpoint selection and committed rollback-directive facts.
2
+ *
3
+ * The Agent owns the decision to abandon a branch and the checkpoint it
4
+ * selects. This module only resolves a checkpoint reference against the
5
+ * current branch, validates the reference/manifest binding, and derives the
6
+ * rollback directive facts. It never chooses a target, never judges a reason,
7
+ * and never mutates the workspace. Restore execution lives in
8
+ * `workspace-restore.ts`.
9
+ */
10
+ import { deriveFindingId } from "./token-utils.js";
11
+ import { branchRounds, } from "./committed-round.js";
12
+ function invalid(reason, detail) {
13
+ return { ok: false, code: "recovery_invalid", reason, detail };
14
+ }
15
+ function unavailable(reason, detail) {
16
+ return { ok: false, code: "recovery_unavailable", reason, detail };
17
+ }
18
+ function refsOfSnapshot(snapshot) {
19
+ if (!snapshot)
20
+ return [];
21
+ const refs = [];
22
+ if (snapshot.beforeCheckpoint)
23
+ refs.push(snapshot.beforeCheckpoint);
24
+ for (const ref of snapshot.checkpoints ?? [])
25
+ refs.push(ref);
26
+ return refs;
27
+ }
28
+ function sameTarget(refs) {
29
+ if (refs.length <= 1)
30
+ return true;
31
+ const first = refs[0];
32
+ return refs.every((ref) => ref.role === first.role &&
33
+ ref.round === first.round &&
34
+ ref.redoRound === first.redoRound &&
35
+ ref.contentHash === first.contentHash);
36
+ }
37
+ /** Resolve a checkpoint id against the held transaction and the current
38
+ * branch's committed evaluation transactions. The held reference wins when
39
+ * the same state also appears in committed history (retry re-binding).
40
+ *
41
+ * This function is pure: it only uses committed read models and the held
42
+ * snapshot. The caller loads and validates the manifest. */
43
+ export function findCheckpointRef(input) {
44
+ const { checkpointId } = input;
45
+ if (!/^ck-[a-f0-9]{24}$/.test(checkpointId)) {
46
+ return invalid("invalid_checkpoint_id", "checkpoint id must be ck-<24 hex>");
47
+ }
48
+ const heldRefs = refsOfSnapshot(input.held).filter((ref) => ref.checkpointId === checkpointId);
49
+ const committedRefs = [];
50
+ for (const view of branchRounds(input.entries)) {
51
+ if (view.kind !== "evaluation")
52
+ continue;
53
+ for (const ref of [
54
+ ...(view.beforeCheckpoint ? [view.beforeCheckpoint] : []),
55
+ ...view.checkpoints,
56
+ ]) {
57
+ if (ref.checkpointId === checkpointId)
58
+ committedRefs.push(ref);
59
+ }
60
+ }
61
+ const all = [...heldRefs, ...committedRefs];
62
+ if (all.length === 0) {
63
+ return invalid("target_not_visible", `checkpoint ${checkpointId} is not referenced by the held transaction or a committed evaluation on the current branch`);
64
+ }
65
+ if (!sameTarget(all)) {
66
+ return invalid("ambiguous_checkpoint", `checkpoint ${checkpointId} resolves to conflicting role/round/contentHash references`);
67
+ }
68
+ return { ok: true, ref: heldRefs[0] ?? committedRefs[0] };
69
+ }
70
+ /** Validate the manifest against its reference. Content/blob/HEAD checks
71
+ * belong to the restore preflight (they need the workspace and object store). */
72
+ export function validateCheckpointManifest(ref, manifest) {
73
+ if (!manifest) {
74
+ return unavailable("manifest_missing", `manifest for ${ref.checkpointId} is missing or unreadable`);
75
+ }
76
+ if (manifest.checkpointId !== ref.checkpointId ||
77
+ manifest.contentHash !== ref.contentHash ||
78
+ manifest.role !== ref.role ||
79
+ manifest.round !== ref.round ||
80
+ manifest.loopId.length === 0) {
81
+ return unavailable("manifest_mismatch", `manifest for ${ref.checkpointId} does not match its transaction reference`);
82
+ }
83
+ const fingerprintPaths = new Set(Object.keys(manifest.fingerprints));
84
+ for (const path of manifest.contents) {
85
+ if (!fingerprintPaths.has(path)) {
86
+ return unavailable("manifest_mismatch", `manifest content path ${path} has no boundary fingerprint`);
87
+ }
88
+ }
89
+ return { ok: true, manifest };
90
+ }
91
+ /** The before-image that represents the state at the start of `redoRound`.
92
+ * Used by machine backtrack: the state after round T is the before-image of
93
+ * round T+1. Returns null when that image was never materialized. */
94
+ export function checkpointForRoundBoundary(input) {
95
+ const { redoRound } = input;
96
+ if (input.heldRound === redoRound && input.heldBeforeCheckpoint) {
97
+ return input.heldBeforeCheckpoint;
98
+ }
99
+ const view = branchRounds(input.entries).find((round) => round.round === redoRound && round.kind === "evaluation");
100
+ return view?.beforeCheckpoint ?? null;
101
+ }
102
+ function observationFingerprints(observation) {
103
+ if (!observation || observation.kind !== "git" || observation.status !== "observed") {
104
+ return null;
105
+ }
106
+ const data = observation.data;
107
+ return data && typeof data === "object" && data.fingerprints &&
108
+ typeof data.fingerprints === "object"
109
+ ? data.fingerprints
110
+ : null;
111
+ }
112
+ function firstObservedGit(observations) {
113
+ return observations.find((observation) => observation.kind === "git" && observation.status === "observed");
114
+ }
115
+ function arrayStrings(value) {
116
+ return Array.isArray(value)
117
+ ? value.filter((item) => typeof item === "string")
118
+ : [];
119
+ }
120
+ /** Union-key comparison against the target snapshot. Paths whose content or
121
+ * type differs — including additions and deletions — are the abandoned work
122
+ * seen since the checkpoint. A file changed and changed back is not a net
123
+ * difference, matching the round-delta semantics. */
124
+ function addBoundaryDiff(target, observation, into) {
125
+ const fingerprints = observationFingerprints(observation);
126
+ if (!fingerprints)
127
+ return;
128
+ const keys = new Set([...Object.keys(target), ...Object.keys(fingerprints)]);
129
+ for (const key of keys) {
130
+ if (target[key] !== fingerprints[key])
131
+ into.add(key);
132
+ }
133
+ }
134
+ /** Derive the committed directive. Pure: the caller has validated the target
135
+ * and collected the abandoned/current evidence. `skipped_files` is report
136
+ * data (never a restore gate); discoveries are preserved only from committed
137
+ * abandoned rounds, never from a rejected/in-flight trigger attempt. */
138
+ export function deriveRecoveryDirective(input) {
139
+ const observedSkippedFiles = new Set();
140
+ const reportedSkippedFiles = new Set();
141
+ const skippedDiscoveries = [];
142
+ const machineFailedRounds = [];
143
+ const approaches = [];
144
+ const wrongAssumptions = [];
145
+ const addDiscovery = (text) => {
146
+ if (text && !skippedDiscoveries.includes(text))
147
+ skippedDiscoveries.push(text);
148
+ };
149
+ const addAssumption = (text) => {
150
+ if (text && !wrongAssumptions.includes(text)) {
151
+ wrongAssumptions.push(text.slice(0, 500));
152
+ }
153
+ };
154
+ for (const view of input.abandonedRounds) {
155
+ addBoundaryDiff(input.targetManifest.fingerprints, firstObservedGit(view.afterEvidence), observedSkippedFiles);
156
+ for (const file of arrayStrings(view.executionReport?.files_changed)) {
157
+ reportedSkippedFiles.add(file);
158
+ }
159
+ // v4.0.3: only a MACHINE-detected failure is a failed round. An agent's
160
+ // output_summary is a report, even when the agent chose to abandon.
161
+ if (input.origin === "machine" &&
162
+ view.verificationFlags.some((flag) => flag.severity === "error")) {
163
+ machineFailedRounds.push(view.round);
164
+ }
165
+ if (view.outputSummary?.trim()) {
166
+ approaches.push(view.outputSummary.trim().slice(0, 200));
167
+ }
168
+ for (const assumption of arrayStrings(view.evaluation?.wrong_assumptions)) {
169
+ addAssumption(assumption);
170
+ }
171
+ for (const discovery of arrayStrings(view.evaluation?.discovered_constraints)) {
172
+ addDiscovery(discovery);
173
+ }
174
+ }
175
+ // The current in-flight transaction is not committed history: it can
176
+ // contribute its machine net-diff and its trigger assumptions, but never a
177
+ // discovery that would become an active constraint.
178
+ addBoundaryDiff(input.targetManifest.fingerprints, firstObservedGit(input.currentAfterEvidence), observedSkippedFiles);
179
+ if (input.triggerEvaluation) {
180
+ for (const assumption of arrayStrings(input.triggerEvaluation.wrong_assumptions)) {
181
+ addAssumption(assumption);
182
+ }
183
+ const summary = input.triggerEvaluation.output_summary?.trim() ?? "";
184
+ if (summary && input.triggerRound !== undefined) {
185
+ const approach = summary.slice(0, 200);
186
+ if (!approaches.includes(approach))
187
+ approaches.push(approach);
188
+ if (input.origin === "machine" &&
189
+ !machineFailedRounds.includes(input.triggerRound)) {
190
+ machineFailedRounds.push(input.triggerRound);
191
+ }
192
+ }
193
+ }
194
+ const findings = [];
195
+ const seenFindings = new Set();
196
+ for (const flag of input.triggerFindings ?? []) {
197
+ const id = deriveFindingId(flag);
198
+ if (seenFindings.has(id))
199
+ continue;
200
+ seenFindings.add(id);
201
+ findings.push({ ...flag, detail: flag.detail.slice(0, 500) });
202
+ if (findings.length >= 12)
203
+ break;
204
+ }
205
+ const target = {
206
+ checkpoint_id: input.targetRef.checkpointId,
207
+ content_hash: input.targetRef.contentHash,
208
+ role: input.targetRef.role,
209
+ round: input.targetRef.round,
210
+ round_id: input.targetRef.roundId,
211
+ transaction_id: input.targetRef.transactionId,
212
+ redo_round: input.targetRef.redoRound,
213
+ };
214
+ const observed = [...observedSkippedFiles].sort();
215
+ const reported = [...reportedSkippedFiles].sort();
216
+ const skipped = [...new Set([...observed, ...reported])].sort();
217
+ return {
218
+ origin: input.origin,
219
+ reason: input.reason.slice(0, 500),
220
+ ...(input.triggerRule ? { trigger_rule: input.triggerRule } : {}),
221
+ target,
222
+ skipped_files: skipped,
223
+ observed_skipped_files: observed,
224
+ reported_skipped_files: reported,
225
+ abandoned_rounds: input.abandonedRounds.map((view) => view.round),
226
+ skipped_discoveries: skippedDiscoveries,
227
+ failed_rounds: machineFailedRounds,
228
+ approaches,
229
+ wrong_assumptions: wrongAssumptions,
230
+ ...(findings.length > 0 ? { trigger_findings: findings } : {}),
231
+ transaction_id: input.transactionId,
232
+ };
233
+ }
234
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"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"}
package/dist/replay.d.ts CHANGED
@@ -1,21 +1,55 @@
1
- /** ReplayBackend — time-travel queries over loop lineage.
1
+ /** ReplayBackend — time-travel queries over committed rounds.
2
2
  *
3
3
  * Depends on LoopStore interface — no direct filesystem access.
4
- * Enables audit, comparison, and timeline analysis of loop rounds.
4
+ * Every query loads the same committed history once and reads the branch's
5
+ * `CommittedRoundView`s; there is no second decode pass and no synthesized
6
+ * lineage-shaped entry.
5
7
  */
6
- import type { LoopStore, VaultEntry } from "./loop-store.js";
7
- import type { LegacyRound } from "./committed-round.js";
8
+ import type { LoopStore } from "./loop-store.js";
9
+ import type { CommittedRoundView, LegacyRound } from "./committed-round.js";
10
+ export declare const REPLAY_DEFAULT_ROUNDS = 10;
11
+ export declare const REPLAY_MAX_WINDOW_ROUNDS = 50;
12
+ /** Invalid explicit replay window. The MCP boundary maps this to
13
+ * `invalid_argument`. */
14
+ export declare class ReplayWindowError extends Error {
15
+ readonly code = "invalid_argument";
16
+ constructor(message: string);
17
+ }
18
+ export interface ReplayWindowOptions {
19
+ start?: number;
20
+ end?: number;
21
+ }
22
+ export interface ReplayWindow {
23
+ /** First round POSITION returned (legacy rows included); 0 when empty. */
24
+ start: number;
25
+ /** Last round POSITION returned (legacy rows included); 0 when empty. */
26
+ end: number;
27
+ /** Distinct committed round positions on the branch, INCLUDING legacy
28
+ * envelopes that are not parseable history. The loss stays counted. */
29
+ totalRounds: number;
30
+ /** Round positions exist before this window. */
31
+ hasBefore: boolean;
32
+ /** Round positions exist after this window. */
33
+ hasAfter: boolean;
34
+ }
35
+ export interface ReplayPage {
36
+ timeline: Record<string, unknown>[];
37
+ window: ReplayWindow;
38
+ }
8
39
  export declare class ReplayBackend {
9
40
  private readonly store;
10
41
  constructor(store: LoopStore);
11
- getRound(loopId: string, roundNum: number): VaultEntry | null;
42
+ getRound(loopId: string, roundNum: number): CommittedRoundView | null;
12
43
  replay(loopId: string, opts?: {
13
44
  start?: number;
14
45
  end?: number;
15
- }): VaultEntry[];
16
- timeline(loopId: string): Record<string, unknown>[];
46
+ }): CommittedRoundView[];
47
+ /** v4.0.2: the paged timeline. The returned `window` tells the Agent
48
+ * whether more committed rounds exist before/after this page. */
49
+ page(loopId: string, opts?: ReplayWindowOptions): ReplayPage;
50
+ /** Backwards-compatible array view. Defaults to the same bounded page. */
51
+ timeline(loopId: string, opts?: ReplayWindowOptions): Record<string, unknown>[];
17
52
  /** v3.9.1: explicit legacy-envelope report for the tool envelope. */
18
53
  legacyRounds(loopId: string): LegacyRound[];
19
- private maxRound;
20
54
  }
21
55
  //# sourceMappingURL=replay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAO7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMxD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;gBAEtB,KAAK,EAAE,SAAS;IAM5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IA+B7D,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC,UAAU,EAAE;IAkBf,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IA0DnD,qEAAqE;IACrE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;IAS3C,OAAO,CAAC,QAAQ;CAMjB"}
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAO5E,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAY3C;0BAC0B;AAC1B,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,sBAAsB;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAC;IACZ;4EACwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,MAAM,EAAE,YAAY,CAAC;CACtB;AAsGD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;gBAEtB,KAAK,EAAE,SAAS;IAM5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IASrE,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC,kBAAkB,EAAE;IAUvB;sEACkE;IAClE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,UAAU;IA0N5D,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAI/E,qEAAqE;IACrE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;CAG5C"}