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
package/dist/replay.js CHANGED
@@ -1,10 +1,115 @@
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 { queryLoopEntries } from "./loop-store.js";
7
- import { decodeCommittedRound, legacyTransactionRounds, observedGitHead, readOnlyRounds, } from "./committed-round.js";
8
+ import { loadCommittedHistory } from "./history.js";
9
+ import { deriveRoundProgress } from "./progress.js";
10
+ import { deriveOpenQuestionId } from "./open-question.js";
11
+ import { gitRoundFacts } from "./git-facts.js";
12
+ import { deriveFindingId } from "./token-utils.js";
13
+ export const REPLAY_DEFAULT_ROUNDS = 10;
14
+ export const REPLAY_MAX_WINDOW_ROUNDS = 50;
15
+ const REPORT_DISPLAY_CHARS = 4000;
16
+ const ASSUMPTION_DISPLAY_CHARS = 500;
17
+ const QUESTION_DISPLAY_CHARS = 300;
18
+ const BLOCKER_DISPLAY_CHARS = 500;
19
+ const REDIRECT_REASON_DISPLAY_CHARS = 500;
20
+ const WORKER_DISPLAY_CHARS = 500;
21
+ const RETROACTIVE_DISPLAY_CHARS = 500;
22
+ const SUBTASK_LABEL_DISPLAY_CHARS = 200;
23
+ /** Invalid explicit replay window. The MCP boundary maps this to
24
+ * `invalid_argument`. */
25
+ export class ReplayWindowError extends Error {
26
+ code = "invalid_argument";
27
+ constructor(message) {
28
+ super(message);
29
+ this.name = "ReplayWindowError";
30
+ }
31
+ }
32
+ function displayed(value, maxChars) {
33
+ const text = value ?? "";
34
+ if (text.length <= maxChars)
35
+ return { text, truncated: false };
36
+ return { text: text.slice(0, maxChars), truncated: true };
37
+ }
38
+ function displayedList(values, maxChars) {
39
+ let truncated = false;
40
+ const out = (values ?? []).map((value) => {
41
+ const clipped = displayed(value, maxChars);
42
+ truncated ||= clipped.truncated;
43
+ return clipped.text;
44
+ });
45
+ return { values: out, truncated };
46
+ }
47
+ /** Resolve an explicit/default window over the committed evaluation rounds.
48
+ *
49
+ * - no start/end: the last 10 committed rounds;
50
+ * - both: the inclusive range, at most 50 rounds wide;
51
+ * - start only: start..latest, at most 50 rounds wide;
52
+ * - end only: the 50-round window ending at `end`.
53
+ */
54
+ function resolveWindow(rounds, legacyRounds, opts) {
55
+ const positions = [...new Set([
56
+ ...rounds.map((view) => view.round),
57
+ ...legacyRounds.map((round) => round.round),
58
+ ])].sort((a, b) => a - b);
59
+ const totalRounds = positions.length;
60
+ const latest = positions.length > 0 ? positions[positions.length - 1] : 0;
61
+ const validatePositive = (value, name) => {
62
+ if (value === undefined)
63
+ return;
64
+ if (!Number.isInteger(value) || value < 1) {
65
+ throw new ReplayWindowError(`${name} must be a positive integer`);
66
+ }
67
+ };
68
+ validatePositive(opts?.start, "start");
69
+ validatePositive(opts?.end, "end");
70
+ if (opts?.start !== undefined && opts?.end !== undefined &&
71
+ opts.start > opts.end) {
72
+ throw new ReplayWindowError("start must be <= end");
73
+ }
74
+ if (opts?.start !== undefined && opts?.end !== undefined &&
75
+ opts.end - opts.start + 1 > REPLAY_MAX_WINDOW_ROUNDS) {
76
+ throw new ReplayWindowError(`an explicit replay window may span at most ${REPLAY_MAX_WINDOW_ROUNDS} rounds`);
77
+ }
78
+ let from;
79
+ let to;
80
+ if (opts?.start === undefined && opts?.end === undefined) {
81
+ // Count-based default over the round POSITIONS that exist, including
82
+ // legacy envelopes: an unsupported schema must stay visible rather than
83
+ // fall outside a window derived only from parseable rounds.
84
+ const windowPositions = positions.slice(-REPLAY_DEFAULT_ROUNDS);
85
+ from = windowPositions[0] ?? 0;
86
+ to = windowPositions.at(-1) ?? 0;
87
+ }
88
+ else if (opts?.start !== undefined && opts?.end !== undefined) {
89
+ from = opts.start;
90
+ to = opts.end;
91
+ }
92
+ else if (opts?.start !== undefined) {
93
+ from = opts.start;
94
+ to = latest;
95
+ if (latest >= from && to - from + 1 > REPLAY_MAX_WINDOW_ROUNDS) {
96
+ throw new ReplayWindowError(`an explicit replay window may span at most ${REPLAY_MAX_WINDOW_ROUNDS} rounds`);
97
+ }
98
+ }
99
+ else {
100
+ to = opts.end;
101
+ from = Math.max(1, to - REPLAY_MAX_WINDOW_ROUNDS + 1);
102
+ }
103
+ const inWindowPositions = positions.filter((position) => position >= from && position <= to);
104
+ const window = {
105
+ start: inWindowPositions[0] ?? 0,
106
+ end: inWindowPositions.at(-1) ?? 0,
107
+ totalRounds,
108
+ hasBefore: positions.some((position) => position < from),
109
+ hasAfter: positions.some((position) => position > to),
110
+ };
111
+ return { from, to, window };
112
+ }
8
113
  // ═══════════════════════════════════════════════════════════════════════════
9
114
  // ReplayBackend
10
115
  // ═══════════════════════════════════════════════════════════════════════════
@@ -15,90 +120,216 @@ export class ReplayBackend {
15
120
  }
16
121
  // ── Single-round lookup ────────────────────────────────────────────────
17
122
  getRound(loopId, roundNum) {
18
- const prefix = `loop:${loopId}:r${roundNum}`;
19
- const entries = queryLoopEntries(this.store, loopId, { prefix });
20
- const lineageEntries = entries.filter((e) => !String(e.task_id ?? "").endsWith(":feedback"));
21
- const fbEntries = queryLoopEntries(this.store, loopId, {
22
- prefix,
23
- feedbackOnly: true,
24
- });
25
- const committed = fbEntries.map(decodeCommittedRound)
26
- .find((view) => view?.round === roundNum && view.action !== "backtrack");
27
- if (!committed)
28
- return null;
29
- const base = lineageEntries[0] ?? committed.sourceEntry;
30
- const entry = { ...base };
31
- entry.success = committed.success;
32
- entry.output_summary = committed.evaluation?.output_summary ?? entry.output_summary;
33
- entry.round_contract = committed.contractProposal ?? undefined;
34
- entry.loop_lineage = {
35
- ...(entry.loop_lineage ?? {}),
36
- success: committed.success,
37
- committed_action: committed.action,
38
- };
39
- return entry;
123
+ const history = loadCommittedHistory(this.store, loopId);
124
+ return history.rounds.find((view) => view.kind === "evaluation" && view.round === roundNum) ?? null;
40
125
  }
41
126
  // ── Multi-round replay ─────────────────────────────────────────────────
42
127
  replay(loopId, opts) {
43
128
  const start = opts?.start ?? 1;
44
- let end = opts?.end;
45
- if (end === undefined) {
46
- end = this.maxRound(loopId);
47
- if (end === 0)
48
- return [];
49
- }
50
- const results = [];
51
- for (let rnd = start; rnd <= end; rnd++) {
52
- const entry = this.getRound(loopId, rnd);
53
- if (entry)
54
- results.push(entry);
55
- }
56
- return results;
129
+ const end = opts?.end ?? Number.POSITIVE_INFINITY;
130
+ return loadCommittedHistory(this.store, loopId).rounds.filter((view) => view.kind === "evaluation" && view.round >= start && view.round <= end);
57
131
  }
58
132
  // ── Timeline ──────────────────────────────────────────────────────────
59
- timeline(loopId) {
60
- const prefix = `loop:${loopId}:r`;
61
- const feedback = queryLoopEntries(this.store, loopId, {
62
- prefix,
63
- feedbackOnly: true,
64
- });
65
- const views = new Map(readOnlyRounds(feedback).map((view) => [view.round, view]));
133
+ /** v4.0.2: the paged timeline. The returned `window` tells the Agent
134
+ * whether more committed rounds exist before/after this page. */
135
+ page(loopId, opts) {
136
+ const history = loadCommittedHistory(this.store, loopId);
137
+ const rounds = history.rounds.filter((view) => view.kind === "evaluation");
138
+ const { from, to, window } = resolveWindow(rounds, history.legacyRounds, opts);
66
139
  const timeline = [];
67
- // `replay()` keeps the lineage projection (task/goal/level/full_prompt)
68
- // while the derived delta comes from the same committed-round view.
69
- for (const entry of this.replay(loopId)) {
70
- const lineage = (entry.loop_lineage ?? {});
71
- const round = typeof lineage.round === "number" ? lineage.round : 0;
72
- const view = views.get(round);
73
- const gitDelta = view?.observationDelta.find((item) => item.kind === "git");
74
- const gitBefore = view?.beforeEvidence.find((item) => item.providerId === "git");
75
- const gitAfter = view?.afterEvidence.find((item) => item.providerId === "git");
140
+ for (const view of rounds) {
141
+ if (view.round < from || view.round > to)
142
+ continue;
143
+ // v4.0.3: ONE Git fact set per row, from the union selector.
144
+ const git = gitRoundFacts(view.observationDelta);
145
+ // v3.9.9: replay is a display surface, so it selects every fact. The
146
+ // per-fact list below makes the coverage of each fact visible.
147
+ const progress = deriveRoundProgress(view.observationDelta);
148
+ const progressFacts = view.observationDelta
149
+ .filter((delta) => delta.progress !== null)
150
+ .map((delta) => ({
151
+ kind: delta.progress.kind,
152
+ providerId: delta.providerId,
153
+ coverage: delta.progress.coverage,
154
+ state: delta.progress.state,
155
+ complete: delta.progress.complete,
156
+ }));
157
+ const report = displayed(view.evaluation?.output_summary, REPORT_DISPLAY_CHARS);
158
+ const wrongAssumptions = displayedList(view.evaluation?.wrong_assumptions, ASSUMPTION_DISPLAY_CHARS);
159
+ const retractedConstraints = displayedList(view.retractedConstraints, ASSUMPTION_DISPLAY_CHARS);
160
+ const openQuestions = displayedList(view.openQuestions, QUESTION_DISPLAY_CHARS);
161
+ const blocker = displayed(view.evaluation?.blocker, BLOCKER_DISPLAY_CHARS);
162
+ const redirectReason = displayed(view.contractRedirect?.reason, REDIRECT_REASON_DISPLAY_CHARS);
163
+ const objectiveRefinement = displayed(view.objectiveRefinement, REPORT_DISPLAY_CHARS);
164
+ const noChangeReason = displayed(view.evaluation?.no_change_reason, BLOCKER_DISPLAY_CHARS);
165
+ const subtaskLabel = displayed(view.evaluation?.subtask_boundary_label, SUBTASK_LABEL_DISPLAY_CHARS);
166
+ const constraintViolations = displayedList(view.constraintViolations, ASSUMPTION_DISPLAY_CHARS);
167
+ const discoveredConstraints = displayedList(view.discoveredConstraints, ASSUMPTION_DISPLAY_CHARS);
168
+ const emergedSubtasks = displayedList(view.emergedSubtasks, ASSUMPTION_DISPLAY_CHARS);
169
+ const workerResults = (view.evaluation?.worker_results ?? []).map((worker) => ({
170
+ agent_id: worker.agentId.slice(0, SUBTASK_LABEL_DISPLAY_CHARS),
171
+ sub_task: displayed(worker.subTask, WORKER_DISPLAY_CHARS).text,
172
+ result_summary: displayed(worker.resultSummary, WORKER_DISPLAY_CHARS).text,
173
+ outcome: worker.outcome,
174
+ }));
175
+ const retroactiveClaims = (view.evaluation?.retroactiveClaims ?? [])
176
+ .map((claim) => ({
177
+ round: claim.round,
178
+ claim: displayed(claim.claim, RETROACTIVE_DISPLAY_CHARS).text,
179
+ }));
180
+ const subgoalUpdates = (view.subgoalUpdates ?? []).map((update) => ({
181
+ id: update.id,
182
+ status: update.status,
183
+ ...(update.note !== undefined
184
+ ? { status_note: update.note.slice(0, 300) }
185
+ : {}),
186
+ }));
187
+ const commandStatuses = view.observationDelta
188
+ .filter((delta) => delta.kind === "command")
189
+ .map((delta) => ({
190
+ command_id: delta.after?.kind === "command"
191
+ ? delta.after.data.commandId
192
+ : delta.providerId,
193
+ status: delta.after?.status ?? null,
194
+ }));
195
+ const checkpoints = [
196
+ ...(view.beforeCheckpoint ? [view.beforeCheckpoint] : []),
197
+ ...view.checkpoints,
198
+ ].map((ref) => ({
199
+ checkpoint_id: ref.checkpointId,
200
+ role: ref.role,
201
+ round: ref.round,
202
+ content_hash: ref.contentHash,
203
+ }));
76
204
  timeline.push({
77
- round,
78
- recompile_level: lineage.recompile_level ?? view?.promptArtifact?.level ?? "l2",
79
- success: entry.success ?? view?.success ?? false,
80
- task: lineage.task ?? "",
81
- goal_id: lineage.goal_id ?? "",
82
- // v3.9.1: the shared round delta and Git boundary facts.
83
- files_changed: gitDelta?.changedFiles ?? null,
84
- git_change_state: gitDelta === undefined
85
- ? "not_applicable"
86
- : gitDelta.changedFiles === null ? "unknown" : "observed",
87
- head_before: observedGitHead(gitBefore),
88
- head_after: observedGitHead(gitAfter),
89
- git_status: gitAfter?.status ?? null,
205
+ round: view.round,
206
+ attempt: view.attempt,
207
+ // v4.0.4: LoopForge's terminal reason, from the ONE committed
208
+ // `result.stopReason`. It is not the Agent's stop reason.
209
+ loop_stop_reason: view.result?.stopReason ?? null,
210
+ recompile_level: view.promptArtifact?.level ?? "l2",
211
+ // v4.0.2: the context boundary is a committed artifact fact.
212
+ context_mode: view.promptArtifact?.contextMode ?? null,
213
+ context_reason: view.promptArtifact?.contextReason ?? null,
214
+ // v4.0.5: the host invocation instruction this round's prompt carried,
215
+ // projected from the artifact (never a second store).
216
+ current_user_instruction: view.promptArtifact?.currentUserInstruction ?? null,
217
+ // v4.0.3/v4.0.4: Agent claims are named as claims. The Agent's stop
218
+ // reason is a report; machine facts (including machineBackedSuccess)
219
+ // live only inside the persisted posture, so no duplicate top-level
220
+ // machine boolean is rendered here.
221
+ agent_success_claim: view.agentSuccessClaim,
222
+ agent_outcome: view.agentOutcome,
223
+ objective_refinement: objectiveRefinement.text || null,
224
+ evidence_posture: view.evidencePosture,
225
+ // v4.0.1: task and goal identity are compile facts stamped at commit.
226
+ task: view.compiled?.task ?? "",
227
+ goal_id: view.compiled?.goalId ?? "",
228
+ // v4.0.2/v4.0.3: the committed Agent report, bounded for display.
229
+ // `success` is not duplicated here: the row already names the claim.
230
+ report: view.evaluation
231
+ ? {
232
+ output_summary: report.text,
233
+ no_change_reason: noChangeReason.text || null,
234
+ blocker: view.evaluation.blocker ? blocker.text : null,
235
+ subtask_boundary_label: subtaskLabel.text || null,
236
+ worker_results: workerResults,
237
+ retroactive_claims: retroactiveClaims,
238
+ gate_ids: [...(view.evaluation.gate_ids ?? [])],
239
+ subgoal_updates: subgoalUpdates,
240
+ constraint_violations: constraintViolations.values,
241
+ discovered_constraints: discoveredConstraints.values,
242
+ emerged_subtasks: emergedSubtasks.values,
243
+ truncated: report.truncated ||
244
+ noChangeReason.truncated ||
245
+ blocker.truncated ||
246
+ subtaskLabel.truncated ||
247
+ constraintViolations.truncated ||
248
+ discoveredConstraints.truncated ||
249
+ emergedSubtasks.truncated,
250
+ }
251
+ : null,
252
+ wrong_assumptions: wrongAssumptions.values,
253
+ retracted_constraints: retractedConstraints.values,
254
+ open_questions: openQuestions.values,
255
+ open_question_ids: (view.openQuestions ?? []).map(deriveOpenQuestionId),
256
+ resolved_open_question_ids: view.resolvedOpenQuestionIds ?? [],
257
+ blocker: view.evaluation?.blocker ? blocker.text : null,
258
+ // v3.9.1/v4.0.3: the shared round delta and Git boundary facts, from
259
+ // the union selector (never the first Git delta).
260
+ files_changed: git.changedFiles,
261
+ git_change_state: git.state,
262
+ head_before: git.headBefore,
263
+ head_after: git.headAfter,
264
+ git_status: git.status,
265
+ // v4.0.3: finding ids are the stable repair handles.
266
+ verification_flag_ids: view.verificationFlags.map(deriveFindingId),
267
+ verification_checks: view.verificationFlags.map((flag) => ({
268
+ check: flag.check,
269
+ severity: flag.severity,
270
+ ref: flag.ref ?? null,
271
+ })),
272
+ command_statuses: commandStatuses,
273
+ checkpoints,
274
+ restore_verified: view.restore !== null,
275
+ restore: view.restore
276
+ ? {
277
+ directive_transaction_id: view.restore.directiveTransactionId,
278
+ redo_round: view.restore.redoRound,
279
+ verified_at: view.restore.verifiedAt,
280
+ }
281
+ : null,
282
+ // v3.9.7: the shared per-round progress verdict. Window verdicts are
283
+ // not committed facts; this is the only progress value a round owns.
284
+ machine_progress: progress?.state ?? null,
285
+ progress_providers: progress?.providers ?? [],
286
+ progress_coverages: progress?.coverages ?? [],
287
+ progress_facts: progressFacts,
90
288
  // v3.5: the round's declared contract (proposal for the next round),
91
289
  // when it committed one — lets replay show the contract arc.
92
- ...(entry.round_contract
93
- ? { proposal: entry.round_contract }
94
- : view?.contractProposal
95
- ? { proposal: view.contractProposal }
96
- : {}),
290
+ ...(view.contractProposal ? { proposal: view.contractProposal } : {}),
291
+ // v3.9.9/v4.0.2: the committed redirect, report-only.
292
+ contract_redirect: view.contractRedirect
293
+ ? {
294
+ contract_id: view.contractRedirect.contract_id,
295
+ ...(view.contractRedirect.reason !== undefined
296
+ ? { reason: redirectReason.text }
297
+ : {}),
298
+ }
299
+ : null,
300
+ // Display-only truncation facts for the bounded report lists.
301
+ report_truncated: report.truncated ||
302
+ wrongAssumptions.truncated ||
303
+ retractedConstraints.truncated ||
304
+ openQuestions.truncated ||
305
+ blocker.truncated ||
306
+ redirectReason.truncated ||
307
+ objectiveRefinement.truncated ||
308
+ noChangeReason.truncated ||
309
+ subtaskLabel.truncated ||
310
+ constraintViolations.truncated ||
311
+ discoveredConstraints.truncated ||
312
+ emergedSubtasks.truncated,
313
+ truncation: {
314
+ output_summary: report.truncated,
315
+ wrong_assumptions: wrongAssumptions.truncated,
316
+ retracted_constraints: retractedConstraints.truncated,
317
+ open_questions: openQuestions.truncated,
318
+ blocker: blocker.truncated,
319
+ redirect_reason: redirectReason.truncated,
320
+ no_change_reason: noChangeReason.truncated,
321
+ subtask_boundary_label: subtaskLabel.truncated,
322
+ constraint_violations: constraintViolations.truncated,
323
+ discovered_constraints: discoveredConstraints.truncated,
324
+ emerged_subtasks: emergedSubtasks.truncated,
325
+ },
97
326
  });
98
327
  }
99
328
  // Unsupported envelope versions are NOT history. Keep them visible in the
100
329
  // timeline instead of letting the loop look shorter than it was.
101
- for (const legacy of legacyTransactionRounds(feedback)) {
330
+ for (const legacy of history.legacyRounds) {
331
+ if (legacy.round < from || legacy.round > to)
332
+ continue;
102
333
  timeline.push({
103
334
  round: legacy.round,
104
335
  legacy: true,
@@ -107,19 +338,15 @@ export class ReplayBackend {
107
338
  });
108
339
  }
109
340
  timeline.sort((a, b) => a.round - b.round);
110
- return timeline;
341
+ return { timeline, window };
342
+ }
343
+ /** Backwards-compatible array view. Defaults to the same bounded page. */
344
+ timeline(loopId, opts) {
345
+ return this.page(loopId, opts).timeline;
111
346
  }
112
347
  /** v3.9.1: explicit legacy-envelope report for the tool envelope. */
113
348
  legacyRounds(loopId) {
114
- const prefix = `loop:${loopId}:r`;
115
- return legacyTransactionRounds(queryLoopEntries(this.store, loopId, { prefix, feedbackOnly: true }));
116
- }
117
- // ── Helpers ─────────────────────────────────────────────────────────────
118
- maxRound(loopId) {
119
- const prefix = `loop:${loopId}:r`;
120
- const feedback = queryLoopEntries(this.store, loopId, { prefix, feedbackOnly: true });
121
- const rounds = readOnlyRounds(feedback);
122
- return rounds.length > 0 ? rounds[rounds.length - 1].round : 0;
349
+ return loadCommittedHistory(this.store, loopId).legacyRounds;
123
350
  }
124
351
  }
125
352
  //# sourceMappingURL=replay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /** v4.0.4 / v4.0.6: the ONE presentation of a round's result facts.
2
+ *
3
+ * Three kinds of facts stay separate and always appear in this order:
4
+ * 1. Agent report — what the Agent claimed (never machine evidence).
5
+ * 2. LoopForge decision — the disposition and the loop terminal reason.
6
+ * 3. Machine evidence — the persisted EvidencePosture, rendered by the
7
+ * single `formatEvidencePostureLines` renderer.
8
+ *
9
+ * This module derives nothing. It formats facts that were already committed
10
+ * or are already computed by the runtime; it never re-derives `completed`,
11
+ * `machineBackedSuccess` or a "conflict"/"verdict" boolean.
12
+ *
13
+ * v4.0.6: `outcome` is always declared (there is no `success`-derived
14
+ * branch), so the `outcomeDeclared` projection and the Agent stop-reason
15
+ * field are gone; the Agent's blocker text replaces that report detail.
16
+ * The success claim remains a derived read projection.
17
+ */
18
+ import type { EvidencePosture, RoundOutcome, StopReason } from "./protocol.js";
19
+ export interface ResultFacts {
20
+ /** null = a rollback directive or no evaluation: there is no Agent report. */
21
+ agent: {
22
+ successClaim: boolean | null;
23
+ /** The Agent-declared outcome (`outcome` is required on an evaluation). */
24
+ outcome: RoundOutcome | null;
25
+ shouldContinue: boolean | null;
26
+ /** The Agent's blocker text; required by the boundary when blocked, null
27
+ * when the round declared none. */
28
+ blocker: string | null;
29
+ } | null;
30
+ loopforge: {
31
+ action: "continue" | "stop" | "reject" | "terminate" | "backtrack" | "recovery";
32
+ loopStopReason: StopReason | null;
33
+ enforcementReason: string | null;
34
+ };
35
+ machine: {
36
+ posture: EvidencePosture | null;
37
+ /** false = a transient rejected/terminated attempt, not committed history. */
38
+ committed: boolean;
39
+ };
40
+ }
41
+ /** Render the three fact blocks. The caller owns any heading above them.
42
+ * `density` selects the shared posture renderer's compact form for terminal
43
+ * responses; it never changes the facts. */
44
+ export declare function renderResultFacts(facts: ResultFacts, density: "explain" | "terminal"): string[];
45
+ //# sourceMappingURL=result-facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-facts.d.ts","sourceRoot":"","sources":["../src/result-facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACX,MAAM,eAAe,CAAC;AAGvB,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,KAAK,EAAE;QACL,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;QAC7B,2EAA2E;QAC3E,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;QAC7B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;QAC/B;4CACoC;QACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE;QACT,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;QAChF,cAAc,EAAE,UAAU,GAAG,IAAI,CAAC;QAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;QAChC,8EAA8E;QAC9E,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAiCD;;6CAE6C;AAC7C,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,SAAS,GAAG,UAAU,GAC9B,MAAM,EAAE,CA6CV"}
@@ -0,0 +1,86 @@
1
+ /** v4.0.4 / v4.0.6: the ONE presentation of a round's result facts.
2
+ *
3
+ * Three kinds of facts stay separate and always appear in this order:
4
+ * 1. Agent report — what the Agent claimed (never machine evidence).
5
+ * 2. LoopForge decision — the disposition and the loop terminal reason.
6
+ * 3. Machine evidence — the persisted EvidencePosture, rendered by the
7
+ * single `formatEvidencePostureLines` renderer.
8
+ *
9
+ * This module derives nothing. It formats facts that were already committed
10
+ * or are already computed by the runtime; it never re-derives `completed`,
11
+ * `machineBackedSuccess` or a "conflict"/"verdict" boolean.
12
+ *
13
+ * v4.0.6: `outcome` is always declared (there is no `success`-derived
14
+ * branch), so the `outcomeDeclared` projection and the Agent stop-reason
15
+ * field are gone; the Agent's blocker text replaces that report detail.
16
+ * The success claim remains a derived read projection.
17
+ */
18
+ import { formatEvidencePostureLines } from "./evidence-posture-view.js";
19
+ /** Neutral fact statements. They describe the committed trigger; they never
20
+ * restate "task success". */
21
+ const LOOP_STOP_REASON_FACTS = {
22
+ completed: "Agent declared should_continue=false and the active contract was closed or absent.",
23
+ failed: "Agent declared should_continue=false and the effective outcome was not success.",
24
+ blocked: "Agent declared a blocked stop.",
25
+ incomplete: "Agent stopped, but machine verification did not close the active contract " +
26
+ "(or observations were insufficient).",
27
+ max_rounds: "The configured maximum number of rounds was reached.",
28
+ enforcement_terminated: "The enforcement gate terminated the loop.",
29
+ stalled: "The next prompt could not be compiled; call loopforge_resume to retry.",
30
+ cancelled: "The loop was cancelled manually.",
31
+ paused: "Paused is a session status, not a committed loop terminal reason.",
32
+ };
33
+ function booleanText(value) {
34
+ return value === null ? "not available" : String(value);
35
+ }
36
+ /** Render the Agent's blocker as one fact line. A committed blocker is
37
+ * already normalized to ≤500 chars; collapse newlines so the block keeps
38
+ * its one-fact-per-line shape. */
39
+ function blockerText(blocker) {
40
+ const text = blocker?.replace(/\s+/g, " ").trim() ?? "";
41
+ return text.length > 0 ? text : "none";
42
+ }
43
+ /** Render the three fact blocks. The caller owns any heading above them.
44
+ * `density` selects the shared posture renderer's compact form for terminal
45
+ * responses; it never changes the facts. */
46
+ export function renderResultFacts(facts, density) {
47
+ const lines = ["Agent report"];
48
+ if (!facts.agent) {
49
+ const rollback = facts.loopforge.action === "backtrack" ||
50
+ facts.loopforge.action === "recovery";
51
+ lines.push(` none (${rollback ? "rollback directive" : "no evaluation"})`);
52
+ }
53
+ else {
54
+ lines.push(` success_claim: ${booleanText(facts.agent.successClaim)}`);
55
+ lines.push(` outcome: ${facts.agent.outcome ?? "not available"}`);
56
+ lines.push(` should_continue: ${booleanText(facts.agent.shouldContinue)}`);
57
+ lines.push(` blocker: ${blockerText(facts.agent.blocker)}`);
58
+ }
59
+ lines.push("", "LoopForge decision");
60
+ lines.push(` action: ${facts.loopforge.action}`);
61
+ if (facts.loopforge.loopStopReason === null) {
62
+ lines.push(" loop_stop_reason: none");
63
+ }
64
+ else {
65
+ lines.push(` loop_stop_reason: ${facts.loopforge.loopStopReason}`);
66
+ lines.push(` ${LOOP_STOP_REASON_FACTS[facts.loopforge.loopStopReason]}`);
67
+ }
68
+ lines.push(` enforcement_reason: ${facts.loopforge.enforcementReason ?? "none"}`);
69
+ lines.push("", facts.machine.committed
70
+ ? "Machine evidence"
71
+ : "Machine evidence (transient; not committed)");
72
+ if (!facts.machine.posture) {
73
+ // Never render a null posture as `machine_backed_success: false`: absence
74
+ // of a committed posture is not a machine denial.
75
+ lines.push(" not available in this projection");
76
+ }
77
+ else {
78
+ // The ONE posture renderer supplies the content; this formatter only
79
+ // aligns it under the block heading.
80
+ lines.push(...formatEvidencePostureLines(facts.machine.posture, {
81
+ compact: density === "terminal",
82
+ }).map((line) => ` ${line}`));
83
+ }
84
+ return lines;
85
+ }
86
+ //# sourceMappingURL=result-facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-facts.js","sourceRoot":"","sources":["../src/result-facts.ts"],"names":[],"mappings":"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"}