loopforge 2.11.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +4 -4
  2. package/dist/audit.d.ts +50 -0
  3. package/dist/audit.d.ts.map +1 -0
  4. package/dist/audit.js +158 -0
  5. package/dist/audit.js.map +1 -0
  6. package/dist/canonical-state.d.ts +21 -9
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +34 -16
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +16 -6
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +40 -0
  14. package/dist/cognitive-governance.d.ts.map +1 -0
  15. package/dist/cognitive-governance.js +126 -0
  16. package/dist/cognitive-governance.js.map +1 -0
  17. package/dist/enforcement-gate.d.ts +8 -3
  18. package/dist/enforcement-gate.d.ts.map +1 -1
  19. package/dist/enforcement-gate.js +419 -92
  20. package/dist/enforcement-gate.js.map +1 -1
  21. package/dist/engine.d.ts +47 -7
  22. package/dist/engine.d.ts.map +1 -1
  23. package/dist/engine.js +303 -60
  24. package/dist/engine.js.map +1 -1
  25. package/dist/evidence-claims.d.ts +50 -0
  26. package/dist/evidence-claims.d.ts.map +1 -0
  27. package/dist/evidence-claims.js +134 -0
  28. package/dist/evidence-claims.js.map +1 -0
  29. package/dist/generate-schema.js +6 -1
  30. package/dist/generate-schema.js.map +1 -1
  31. package/dist/index.d.ts +3 -3
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/loop-compiler.d.ts +41 -3
  36. package/dist/loop-compiler.d.ts.map +1 -1
  37. package/dist/loop-compiler.js +310 -38
  38. package/dist/loop-compiler.js.map +1 -1
  39. package/dist/loop-projection.d.ts +26 -0
  40. package/dist/loop-projection.d.ts.map +1 -0
  41. package/dist/loop-projection.js +142 -0
  42. package/dist/loop-projection.js.map +1 -0
  43. package/dist/loop-store.d.ts +91 -41
  44. package/dist/loop-store.d.ts.map +1 -1
  45. package/dist/loop-store.js +243 -173
  46. package/dist/loop-store.js.map +1 -1
  47. package/dist/mcp/round-lifecycle.d.ts +216 -0
  48. package/dist/mcp/round-lifecycle.d.ts.map +1 -0
  49. package/dist/mcp/round-lifecycle.js +926 -0
  50. package/dist/mcp/round-lifecycle.js.map +1 -0
  51. package/dist/mcp/server.d.ts +3 -2
  52. package/dist/mcp/server.d.ts.map +1 -1
  53. package/dist/mcp/server.js +65 -9
  54. package/dist/mcp/server.js.map +1 -1
  55. package/dist/mcp/session.d.ts +47 -139
  56. package/dist/mcp/session.d.ts.map +1 -1
  57. package/dist/mcp/session.js +284 -784
  58. package/dist/mcp/session.js.map +1 -1
  59. package/dist/mcp/tools.d.ts +23 -1
  60. package/dist/mcp/tools.d.ts.map +1 -1
  61. package/dist/mcp/tools.js +270 -79
  62. package/dist/mcp/tools.js.map +1 -1
  63. package/dist/policy-metrics.d.ts +11 -0
  64. package/dist/policy-metrics.d.ts.map +1 -1
  65. package/dist/policy-metrics.js +118 -21
  66. package/dist/policy-metrics.js.map +1 -1
  67. package/dist/policy.d.ts +26 -1
  68. package/dist/policy.d.ts.map +1 -1
  69. package/dist/policy.js +13 -2
  70. package/dist/policy.js.map +1 -1
  71. package/dist/prompt-assembler.d.ts +34 -1
  72. package/dist/prompt-assembler.d.ts.map +1 -1
  73. package/dist/prompt-assembler.js +320 -42
  74. package/dist/prompt-assembler.js.map +1 -1
  75. package/dist/protocol.d.ts +169 -1
  76. package/dist/protocol.d.ts.map +1 -1
  77. package/dist/protocol.js +39 -0
  78. package/dist/protocol.js.map +1 -1
  79. package/dist/replay.d.ts +5 -5
  80. package/dist/replay.d.ts.map +1 -1
  81. package/dist/replay.js +9 -8
  82. package/dist/replay.js.map +1 -1
  83. package/dist/round-coordinator.d.ts +6 -3
  84. package/dist/round-coordinator.d.ts.map +1 -1
  85. package/dist/round-coordinator.js +38 -19
  86. package/dist/round-coordinator.js.map +1 -1
  87. package/dist/round-driver.d.ts +9 -4
  88. package/dist/round-driver.d.ts.map +1 -1
  89. package/dist/round-driver.js +15 -7
  90. package/dist/round-driver.js.map +1 -1
  91. package/dist/round-transaction.d.ts +7 -3
  92. package/dist/round-transaction.d.ts.map +1 -1
  93. package/dist/round-transaction.js +93 -88
  94. package/dist/round-transaction.js.map +1 -1
  95. package/dist/self-eval.d.ts +31 -1
  96. package/dist/self-eval.d.ts.map +1 -1
  97. package/dist/self-eval.js +115 -12
  98. package/dist/self-eval.js.map +1 -1
  99. package/dist/storage.d.ts +3 -4
  100. package/dist/storage.d.ts.map +1 -1
  101. package/dist/storage.js +5 -4
  102. package/dist/storage.js.map +1 -1
  103. package/dist/token-utils.d.ts +20 -7
  104. package/dist/token-utils.d.ts.map +1 -1
  105. package/dist/token-utils.js +68 -9
  106. package/dist/token-utils.js.map +1 -1
  107. package/dist/verification-gate.d.ts +54 -2
  108. package/dist/verification-gate.d.ts.map +1 -1
  109. package/dist/verification-gate.js +433 -25
  110. package/dist/verification-gate.js.map +1 -1
  111. package/loop_policy.json +35 -8
  112. package/package.json +3 -2
  113. package/skills/perception/SKILL.md +24 -6
  114. package/dist/backends/interface.d.ts +0 -39
  115. package/dist/backends/interface.d.ts.map +0 -1
  116. package/dist/backends/interface.js +0 -6
  117. package/dist/backends/interface.js.map +0 -1
@@ -14,6 +14,109 @@ import { parseRoundTransactionSnapshot } from "./round-transaction.js";
14
14
  import { validateLoopId } from "./policy.js";
15
15
  import { isRecord } from "./token-utils.js";
16
16
  export const LOOP_STORE_SCHEMA_VERSION = 1;
17
+ const SEVERITY_MAP = {
18
+ sequence_gap: "recoverable",
19
+ sequence_duplicate: "recoverable",
20
+ invalid_json: "corrupted",
21
+ invalid_format: "corrupted",
22
+ sequence_cross_loop: "corrupted",
23
+ sequence_invalid: "corrupted",
24
+ };
25
+ /** v2.12: Typed corruption error carrying a severity class. Callers may
26
+ * recover from `recoverable` errors (record and continue) but must surface
27
+ * `corrupted` errors — the runtime never silently repairs storage. */
28
+ export class StorageCorruptionError extends Error {
29
+ code = "storage_corruption";
30
+ kind;
31
+ severity;
32
+ constructor(kind, message) {
33
+ super(message);
34
+ this.name = "StorageCorruptionError";
35
+ this.kind = kind;
36
+ this.severity = SEVERITY_MAP[kind];
37
+ }
38
+ get recoverable() {
39
+ return this.severity === "recoverable";
40
+ }
41
+ }
42
+ /** Zero-dependency synchronous sleep (Atomics.wait on a shared slot). */
43
+ function sleepSync(ms) {
44
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
45
+ }
46
+ /** Filter a loop's flat entry view with the legacy VaultBackend query
47
+ * options. Derived read-only view over the single durable truth (typed
48
+ * session/round documents) — never a separate write path. Feedback
49
+ * entries are excluded by default, mirroring the historical
50
+ * queryEntries({ feedbackOnly }) semantics. */
51
+ export function queryLoopEntries(store, loopId, opts) {
52
+ return store.listEntries(loopId, { sinceRound: opts?.sinceRound }).filter((entry) => {
53
+ const taskId = String(entry.task_id ?? "");
54
+ if (opts?.feedbackOnly && !taskId.endsWith(":feedback"))
55
+ return false;
56
+ if (!opts?.feedbackOnly && taskId.endsWith(":feedback"))
57
+ return false;
58
+ if (opts?.prefix) {
59
+ if (!taskId.startsWith(opts.prefix))
60
+ return false;
61
+ // Guard against ambiguous prefix matches: "loop:x:r1" must not
62
+ // match "loop:x:r10" or "loop:x:r11". Only check when the prefix
63
+ // itself ends with a digit (indicating a specific round number).
64
+ // Prefixes ending in non-digits (e.g. "loop:x:r") match any round
65
+ // and should NOT be filtered.
66
+ const lastChar = opts.prefix[opts.prefix.length - 1];
67
+ if (lastChar !== undefined && /^\d$/.test(lastChar)) {
68
+ const after = taskId[opts.prefix.length];
69
+ if (after !== undefined && /^\d$/.test(after))
70
+ return false;
71
+ }
72
+ }
73
+ return true;
74
+ });
75
+ }
76
+ /** v2.12: Ordered round sequence for a loop. Throws StorageCorruptionError
77
+ * on gaps (recoverable) or mixed-format corruption; returns [] for loops
78
+ * with no rounds. Consumed by audit (sequenceComplete) and resume. */
79
+ export function eventSequence(store, loopId) {
80
+ checkRoundSequence(store, loopId);
81
+ return store.listRoundSequences(loopId).map((doc) => doc.round);
82
+ }
83
+ /** v2.12: Validate that a loop's round documents form a contiguous sequence
84
+ * from 1 to max. Legacy loops (no sequence stamps at all) are exempt.
85
+ * Mixed stamping is allowed only monotonically: rounds below the first
86
+ * stamped round are treated as legacy; once stamping begins it must not
87
+ * stop. Throws StorageCorruptionError on violation. */
88
+ export function checkRoundSequence(store, loopId) {
89
+ const docs = store.listRoundSequences(loopId);
90
+ const stamped = docs.filter((doc) => doc.sequence !== undefined);
91
+ if (stamped.length === 0)
92
+ return { complete: true, legacy: true };
93
+ const firstStamped = Math.min(...stamped.map((doc) => doc.round));
94
+ // Any round at or after the first stamped round must itself be stamped.
95
+ for (const doc of docs) {
96
+ if (doc.round >= firstStamped && doc.sequence === undefined) {
97
+ throw new StorageCorruptionError("sequence_invalid", `Loop ${loopId}: round ${doc.round} is missing its sequence stamp ` +
98
+ `while round ${firstStamped} is stamped (mixed format)`);
99
+ }
100
+ }
101
+ const stampedRounds = stamped.map((doc) => doc.round);
102
+ const max = Math.max(...stampedRounds);
103
+ const present = new Set(docs.filter((doc) => doc.round >= firstStamped).map((doc) => doc.round));
104
+ for (let round = firstStamped; round <= max; round++) {
105
+ if (!present.has(round)) {
106
+ throw new StorageCorruptionError("sequence_gap", `Loop ${loopId}: round sequence gap at ${round} (max ${max})`);
107
+ }
108
+ }
109
+ // v2.14: rounds below the first stamped round are exempt ONLY for loops
110
+ // without a runtime session document — migration imports may legitimately
111
+ // start at any round, but migration never writes session documents.
112
+ // A stamped loop WITH a session always began at round 1 (write-time
113
+ // continuity), so missing rounds 1..N-1 mean deletion, not import.
114
+ if (firstStamped > 1 && store.readSession(loopId)) {
115
+ throw new StorageCorruptionError("sequence_gap", `Loop ${loopId}: rounds 1..${firstStamped - 1} are missing ` +
116
+ `(first stamped round is ${firstStamped})`);
117
+ }
118
+ return { complete: true, legacy: false };
119
+ }
17
120
  function loopIdFromEntry(entry) {
18
121
  if (typeof entry.loop_id === "string" && entry.loop_id)
19
122
  return entry.loop_id;
@@ -66,24 +169,35 @@ export class FileLoopStore {
66
169
  }
67
170
  catch {
68
171
  let stale = false;
172
+ let age = 0;
69
173
  try {
70
- const owner = JSON.parse(readFileSync(ownerPath, "utf8"));
71
- const age = Date.now() - statSync(lockPath).mtimeMs;
72
- if (age > 5000 && typeof owner.pid === "number") {
73
- try {
74
- process.kill(owner.pid, 0);
75
- }
76
- catch (error) {
77
- // On Windows, EPERM may be returned for dead cross-user
78
- // processes. Treat as stale when the lock is old regardless.
79
- const code = error.code;
80
- stale = code === "ESRCH"
81
- || (code === "EPERM" && age > 10_000); // Windows safety: EPERM + old lock → stale
82
- }
83
- }
174
+ age = Date.now() - statSync(lockPath).mtimeMs;
175
+ }
176
+ catch {
177
+ age = 0;
178
+ }
179
+ let owner = null;
180
+ try {
181
+ owner = JSON.parse(readFileSync(ownerPath, "utf8"));
84
182
  }
85
183
  catch {
86
- stale = false;
184
+ // v2.14: a crash between mkdir(lock) and write(owner.json) leaves
185
+ // a lock directory without an owner. That window is microseconds,
186
+ // so after a short grace the lock is provably stale — previously
187
+ // this state caused a permanent lock until manual deletion.
188
+ stale = age > 500;
189
+ }
190
+ if (!stale && owner && age > 5000 && typeof owner.pid === "number") {
191
+ try {
192
+ process.kill(owner.pid, 0);
193
+ }
194
+ catch (error) {
195
+ // On Windows, EPERM may be returned for dead cross-user
196
+ // processes. Treat as stale when the lock is old regardless.
197
+ const code = error.code;
198
+ stale = code === "ESRCH"
199
+ || (code === "EPERM" && age > 10_000); // Windows safety: EPERM + old lock → stale
200
+ }
87
201
  }
88
202
  if (stale) {
89
203
  try {
@@ -116,9 +230,17 @@ export class FileLoopStore {
116
230
  return [];
117
231
  const result = [];
118
232
  for (const name of readdirSync(loops)) {
119
- const metadata = this.readJson(join(loops, name, "metadata.json"));
233
+ const dir = join(loops, name);
234
+ const metadata = this.readJson(join(dir, "metadata.json"));
120
235
  if (isRecord(metadata) && typeof metadata.loopId === "string") {
121
236
  result.push(metadata.loopId);
237
+ continue;
238
+ }
239
+ // v2.14: orphaned loop dirs (sessions written before metadata
240
+ // stamping) recover their loopId from the session document itself.
241
+ const session = this.readJson(join(dir, "session.json"));
242
+ if (isRecord(session) && typeof session.loopId === "string") {
243
+ result.push(session.loopId);
122
244
  }
123
245
  }
124
246
  return result.sort();
@@ -126,23 +248,48 @@ export class FileLoopStore {
126
248
  readSession(loopId) {
127
249
  validateLoopId(loopId);
128
250
  const value = this.readJson(join(this.loopDir(loopId), "session.json"));
129
- if (!isRecord(value) || value.schemaVersion !== LOOP_STORE_SCHEMA_VERSION ||
130
- value.loopId !== loopId || !isRecord(value.entry))
251
+ // readJson returns null only for a missing file; an existing document
252
+ // with an unexpected shape is structural corruption, never silently
253
+ // treated as "missing" (which would let a later write overwrite it).
254
+ if (value === null)
131
255
  return null;
256
+ if (!isRecord(value) || value.schemaVersion !== LOOP_STORE_SCHEMA_VERSION ||
257
+ value.loopId !== loopId || !isRecord(value.entry)) {
258
+ throw new StorageCorruptionError("invalid_format", `Loop ${loopId}: session.json has an unexpected document shape`);
259
+ }
132
260
  return value;
133
261
  }
134
262
  writeSession(loopId, document) {
135
263
  validateLoopId(loopId);
136
- this.atomicWrite(join(this.loopDir(loopId), "session.json"), document);
264
+ const dir = this.loopDir(loopId);
265
+ // v2.14: stamp metadata alongside the session document — a session with
266
+ // no committed rounds yet (created, then crashed before round 1) must
267
+ // still be discoverable via listLoopIds / auto-resume.
268
+ this.atomicWrite(join(dir, "metadata.json"), {
269
+ schemaVersion: LOOP_STORE_SCHEMA_VERSION,
270
+ loopId,
271
+ });
272
+ this.atomicWrite(join(dir, "session.json"), document);
137
273
  }
138
274
  readRound(loopId, round) {
139
275
  validateLoopId(loopId);
140
276
  if (!Number.isInteger(round) || round < 1)
141
277
  return null;
142
278
  const value = this.readJson(join(this.loopDir(loopId), "rounds", `${round}.json`));
143
- if (!isRecord(value) || value.schemaVersion !== LOOP_STORE_SCHEMA_VERSION ||
144
- value.loopId !== loopId || value.round !== round)
279
+ // readJson returns null only for a missing file; an existing document
280
+ // with an unexpected shape is structural corruption — surfacing it
281
+ // (rather than returning null) prevents silent overwrite by writeEntry.
282
+ if (value === null)
145
283
  return null;
284
+ if (!isRecord(value) || value.schemaVersion !== LOOP_STORE_SCHEMA_VERSION ||
285
+ value.loopId !== loopId || value.round !== round) {
286
+ throw new StorageCorruptionError("invalid_format", `Loop ${loopId}: round ${round} document has an unexpected shape`);
287
+ }
288
+ // v2.12: a stamped document whose stamp disagrees with its filename is
289
+ // structural corruption, never silently repaired.
290
+ if (typeof value.sequence === "number" && value.sequence !== round) {
291
+ throw new StorageCorruptionError("sequence_invalid", `Loop ${loopId}: round ${round} document carries sequence ${value.sequence}`);
292
+ }
146
293
  const events = Array.isArray(value.events)
147
294
  ? value.events.filter(isRecord)
148
295
  : [];
@@ -151,6 +298,7 @@ export class FileLoopStore {
151
298
  schemaVersion: LOOP_STORE_SCHEMA_VERSION,
152
299
  loopId,
153
300
  round,
301
+ sequence: typeof value.sequence === "number" ? value.sequence : undefined,
154
302
  updatedAt: typeof value.updatedAt === "string" ? value.updatedAt : "",
155
303
  lineage: isRecord(value.lineage) ? value.lineage : undefined,
156
304
  feedback: isRecord(value.feedback) ? value.feedback : undefined,
@@ -159,7 +307,25 @@ export class FileLoopStore {
159
307
  events,
160
308
  };
161
309
  }
162
- listEntries(loopId) {
310
+ listRoundSequences(loopId) {
311
+ validateLoopId(loopId);
312
+ const roundsDir = join(this.loopDir(loopId), "rounds");
313
+ if (!existsSync(roundsDir))
314
+ return [];
315
+ const result = [];
316
+ for (const file of readdirSync(roundsDir).filter((name) => /^\d+\.json$/.test(name))) {
317
+ const round = Number(file.slice(0, -5));
318
+ const value = this.readJson(join(roundsDir, file));
319
+ if (!isRecord(value) || value.loopId !== loopId || value.round !== round)
320
+ continue;
321
+ result.push({
322
+ round,
323
+ sequence: typeof value.sequence === "number" ? value.sequence : undefined,
324
+ });
325
+ }
326
+ return result.sort((a, b) => a.round - b.round);
327
+ }
328
+ listEntries(loopId, opts) {
163
329
  const ids = loopId ? [loopId] : this.listLoopIds();
164
330
  const result = [];
165
331
  for (const id of ids) {
@@ -169,19 +335,28 @@ export class FileLoopStore {
169
335
  const roundsDir = join(this.loopDir(id), "rounds");
170
336
  if (!existsSync(roundsDir))
171
337
  continue;
172
- for (const file of readdirSync(roundsDir).filter((name) => /^\d+\.json$/.test(name))) {
173
- const round = this.readRound(id, Number(file.slice(0, -5)));
174
- if (!round)
338
+ // Numeric sort — readdirSync order is filesystem-dependent and must
339
+ // not leak into the flat entry view (rounds 1, 10, 2 … would be).
340
+ for (const file of readdirSync(roundsDir)
341
+ .filter((name) => /^\d+\.json$/.test(name))
342
+ .sort((a, b) => Number(a.slice(0, -5)) - Number(b.slice(0, -5)))) {
343
+ const round = Number(file.slice(0, -5));
344
+ // v3.0.1: incremental reads skip older round documents entirely —
345
+ // this is what bounds per-compile I/O in long loops.
346
+ if (opts?.sinceRound !== undefined && round < opts.sinceRound)
175
347
  continue;
176
- if (round.lineage) {
348
+ const doc = this.readRound(id, round);
349
+ if (!doc)
350
+ continue;
351
+ if (doc.lineage) {
177
352
  result.push({
178
- ...round.lineage,
179
- full_prompt: round.promptArtifact?.renderedPrompt ?? round.lineage.full_prompt,
353
+ ...doc.lineage,
354
+ full_prompt: doc.promptArtifact?.renderedPrompt ?? doc.lineage.full_prompt,
180
355
  });
181
356
  }
182
- if (round.feedback)
183
- result.push(round.feedback);
184
- result.push(...round.events);
357
+ if (doc.feedback)
358
+ result.push(doc.feedback);
359
+ result.push(...doc.events);
185
360
  }
186
361
  }
187
362
  return result;
@@ -196,12 +371,6 @@ export class FileLoopStore {
196
371
  return entries.length;
197
372
  });
198
373
  }
199
- replaceEntries(entries) {
200
- this.withLock(() => {
201
- for (const entry of entries)
202
- this.writeEntry(entry);
203
- });
204
- }
205
374
  migrateLegacyVault(path = ".promptcraft/prompt_vault.json") {
206
375
  const source = resolve(path);
207
376
  const marker = join(this.root, "migrations", "promptcraft-v1.json");
@@ -221,7 +390,7 @@ export class FileLoopStore {
221
390
  skipped++;
222
391
  continue;
223
392
  }
224
- this.writeEntry(entry);
393
+ this.writeEntry(entry, { allowGap: true });
225
394
  imported++;
226
395
  }
227
396
  this.atomicWrite(marker, {
@@ -234,7 +403,7 @@ export class FileLoopStore {
234
403
  });
235
404
  return { source, imported, skipped, alreadyMigrated: false };
236
405
  }
237
- writeEntry(entry) {
406
+ writeEntry(entry, opts) {
238
407
  const loopId = loopIdFromEntry(entry);
239
408
  if (!loopId)
240
409
  throw new Error("LoopStore only accepts loop-scoped entries");
@@ -257,13 +426,25 @@ export class FileLoopStore {
257
426
  const round = roundFromEntry(entry);
258
427
  if (!round)
259
428
  throw new Error(`Loop entry has no round: ${entry.task_id ?? "unknown"}`);
429
+ // v2.12: monotonic write-time check — a stamped loop may not skip its
430
+ // predecessor. Legacy imports (allowGap) bypass this; the load-time
431
+ // scan in checkRoundSequence remains the backstop.
432
+ if (!opts?.allowGap && round > 1) {
433
+ const previous = this.readRound(loopId, round - 1);
434
+ if (!previous && this.listRoundSequences(loopId).some((doc) => doc.sequence !== undefined)) {
435
+ throw new StorageCorruptionError("sequence_gap", `Loop ${loopId}: cannot write round ${round}; round ${round - 1} is missing`);
436
+ }
437
+ }
260
438
  const current = this.readRound(loopId, round) ?? {
261
439
  schemaVersion: LOOP_STORE_SCHEMA_VERSION,
262
440
  loopId,
263
441
  round,
442
+ sequence: round,
264
443
  updatedAt: now,
265
444
  events: [],
266
445
  };
446
+ if (current.sequence === undefined)
447
+ current.sequence = round;
267
448
  const taskId = String(entry.task_id ?? "");
268
449
  if (taskId.endsWith(":feedback"))
269
450
  current.feedback = entry;
@@ -290,151 +471,40 @@ export class FileLoopStore {
290
471
  const hash = createHash("sha256").update(loopId).digest("hex");
291
472
  return join(this.root, "loops", hash);
292
473
  }
474
+ /** Read a JSON document, distinguishing missing from corrupt.
475
+ * ENOENT → null (missing); parse failure → StorageCorruptionError
476
+ * (corrupted) — the runtime never silently repairs storage. */
293
477
  readJson(path) {
294
478
  try {
295
479
  return JSON.parse(readFileSync(path, "utf8"));
296
480
  }
297
- catch {
298
- return null;
481
+ catch (error) {
482
+ if (error.code === "ENOENT")
483
+ return null;
484
+ throw new StorageCorruptionError("invalid_json", `Corrupt JSON at ${path}: ${error.message}`);
299
485
  }
300
486
  }
301
487
  atomicWrite(path, value) {
302
488
  mkdirSync(dirname(path), { recursive: true });
303
- const temporary = `${path}.tmp.${randomUUID().slice(0, 8)}`;
304
- writeFileSync(temporary, JSON.stringify(value, null, 2), "utf8");
305
- renameSync(temporary, path);
306
- }
307
- }
308
- /** @deprecated Use LoopStore directly.
309
- *
310
- * Compatibility adapter so modules that still accept VaultBackend can
311
- * operate on a LoopStore. Persistent truth is the typed per-loop
312
- * documents; no Markdown lineage is written. */
313
- export class LoopStoreBackend {
314
- store;
315
- constructor(store = new FileLoopStore()) {
316
- this.store = store;
317
- }
318
- withLock(fn) { return this.store.withLock(fn); }
319
- queryEntries(opts) {
320
- return this.store.listEntries().filter((entry) => {
321
- const taskId = String(entry.task_id ?? "");
322
- if (opts?.feedbackOnly && !taskId.endsWith(":feedback"))
323
- return false;
324
- if (!opts?.feedbackOnly && taskId.endsWith(":feedback"))
325
- return false;
326
- if (opts?.prefix && !taskId.startsWith(opts.prefix))
327
- return false;
328
- if (opts?.taskIdPattern && !taskId.includes(opts.taskIdPattern))
329
- return false;
330
- return true;
331
- });
332
- }
333
- appendEntry(entry) { this.store.appendEntry(entry); }
334
- appendEntries(entries) { return this.store.appendEntries(entries); }
335
- }
336
- /** Adapter that wraps a VaultBackend as a LoopStore for backward compat.
337
- *
338
- * SessionManager uses this when a VaultBackend is provided directly so
339
- * VaultSessionStateStore can operate on typed session documents while
340
- * the underlying storage remains VaultBackend entries. */
341
- export class VaultBackendLoopStore {
342
- backend;
343
- constructor(backend) {
344
- this.backend = backend;
345
- }
346
- withLock(fn) {
347
- return typeof this.backend.withLock === "function"
348
- ? this.backend.withLock(fn)
349
- : fn();
350
- }
351
- listLoopIds() {
352
- return [...new Set(this.backend.queryEntries()
353
- .filter((e) => typeof e.loop_id === "string")
354
- .map((e) => e.loop_id))].sort();
355
- }
356
- listEntries(loopId) {
357
- if (loopId)
358
- return this.backend.queryEntries({ prefix: `loop:${loopId}` });
359
- return this.backend.queryEntries();
360
- }
361
- appendEntry(entry) { this.backend.appendEntry(entry); }
362
- appendEntries(entries) { return this.backend.appendEntries(entries); }
363
- replaceEntries(_entries) {
364
- throw new Error("VaultBackendLoopStore.replaceEntries is not supported. " +
365
- "Use LoopStore (FileLoopStore) directly for bulk replace operations.");
366
- }
367
- readSession(loopId) {
368
- const entry = this.backend.queryEntries({ prefix: `loop:${loopId}:session` })
369
- .find((e) => e.task_type === "session_state" && e.loop_id === loopId);
370
- if (!entry)
371
- return null;
372
- return {
373
- schemaVersion: LOOP_STORE_SCHEMA_VERSION,
374
- loopId,
375
- updatedAt: typeof entry.timestamp === "string"
376
- ? entry.timestamp
377
- : new Date().toISOString(),
378
- entry,
489
+ const writeOnce = () => {
490
+ const temporary = `${path}.tmp.${randomUUID().slice(0, 8)}`;
491
+ writeFileSync(temporary, JSON.stringify(value, null, 2), "utf8");
492
+ renameSync(temporary, path);
379
493
  };
380
- }
381
- writeSession(loopId, document) {
382
- const entry = document.entry;
383
- // Ensure the entry carries identifying fields expected by queryEntries.
384
- entry.task_type = "session_state";
385
- entry.loop_id = loopId;
386
- entry.task_id = `loop:${loopId}:session`;
387
- // Session state lives in the vault entries list. The backend may
388
- // provide readVault/writeVault as optional compat methods; if not,
389
- // we fall back to appendEntry (which may create duplicates, but
390
- // VaultSessionStateStore.load returns the first match).
391
- const be = this.backend;
392
- if (typeof be.readVault === "function" &&
393
- typeof be.writeVault === "function") {
394
- // Call via .call(be) so methods that reference `this` (e.g.
395
- // MemoryBackend.readVault) keep their receiver.
396
- const data = be.readVault.call(be);
397
- const entries = Array.isArray(data.entries)
398
- ? data.entries
399
- : [];
400
- const filtered = entries.filter((item) => !(item.task_type === "session_state" && item.loop_id === loopId));
401
- be.writeVault.call(be, { entries: [...filtered, entry] });
402
- return;
494
+ // v2.12: transient I/O failures (Windows rename EPERM/EACCES) are
495
+ // retried once after a short backoff; a second failure bubbles.
496
+ try {
497
+ writeOnce();
403
498
  }
404
- this.backend.appendEntry(entry);
405
- }
406
- readRound(loopId, round) {
407
- const prefix = `loop:${loopId}:r${round}:`;
408
- const entries = this.backend.queryEntries({ prefix });
409
- if (entries.length === 0)
410
- return null;
411
- // Separate lineage, feedback, and raw events — same structure as
412
- // FileLoopStore.readRound so callers get consistent round documents
413
- // regardless of backend.
414
- const lineage = entries.find((e) => e.task_type === "loop_lineage" || e.task_id === `loop:${loopId}:r${round}`);
415
- const feedback = entries.find((e) => String(e.task_id ?? "").endsWith(":feedback"));
416
- const events = entries.filter((e) => e !== lineage && e !== feedback);
417
- let transaction;
418
- const transactionRaw = feedback?.loop_lineage?.round_transaction ??
419
- lineage?.loop_lineage?.round_transaction;
420
- const transactionParsed = parseRoundTransactionSnapshot(isRecord(transactionRaw) ? transactionRaw.snapshot : undefined);
421
- if (transactionParsed) {
422
- transaction = transactionParsed;
499
+ catch (first) {
500
+ sleepSync(500);
501
+ try {
502
+ writeOnce();
503
+ }
504
+ catch (second) {
505
+ throw second;
506
+ }
423
507
  }
424
- return {
425
- schemaVersion: LOOP_STORE_SCHEMA_VERSION,
426
- loopId,
427
- round,
428
- updatedAt: entries[0].timestamp ?? new Date().toISOString(),
429
- lineage: lineage,
430
- feedback: feedback,
431
- transaction,
432
- promptArtifact: transaction?.promptArtifact,
433
- events,
434
- };
435
- }
436
- migrateLegacyVault(_path) {
437
- return { source: _path ?? "vault", imported: 0, skipped: 0, alreadyMigrated: true };
438
508
  }
439
509
  }
440
510
  //# sourceMappingURL=loop-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop-store.js","sourceRoot":"","sources":["../src/loop-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop-store.js","sourceRoot":"","sources":["../src/loop-store.ts"],"names":[],"mappings":"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"}