loopforge 1.3.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +64 -3
  2. package/dist/backends/fs.d.ts +5 -0
  3. package/dist/backends/fs.d.ts.map +1 -1
  4. package/dist/backends/fs.js +66 -16
  5. package/dist/backends/fs.js.map +1 -1
  6. package/dist/builder.d.ts +0 -1
  7. package/dist/builder.d.ts.map +1 -1
  8. package/dist/builder.js +14 -25
  9. package/dist/builder.js.map +1 -1
  10. package/dist/engine.d.ts +28 -5
  11. package/dist/engine.d.ts.map +1 -1
  12. package/dist/engine.js +303 -105
  13. package/dist/engine.js.map +1 -1
  14. package/dist/index.d.ts +9 -12
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +7 -10
  17. package/dist/index.js.map +1 -1
  18. package/dist/loop-compiler.d.ts +28 -2
  19. package/dist/loop-compiler.d.ts.map +1 -1
  20. package/dist/loop-compiler.js +718 -38
  21. package/dist/loop-compiler.js.map +1 -1
  22. package/dist/mcp/server.d.ts.map +1 -1
  23. package/dist/mcp/server.js +6 -4
  24. package/dist/mcp/server.js.map +1 -1
  25. package/dist/mcp/session.d.ts +24 -4
  26. package/dist/mcp/session.d.ts.map +1 -1
  27. package/dist/mcp/session.js +303 -34
  28. package/dist/mcp/session.js.map +1 -1
  29. package/dist/mcp/tools.d.ts +165 -1
  30. package/dist/mcp/tools.d.ts.map +1 -1
  31. package/dist/mcp/tools.js +144 -15
  32. package/dist/mcp/tools.js.map +1 -1
  33. package/dist/memory-bridge.d.ts +47 -0
  34. package/dist/memory-bridge.d.ts.map +1 -0
  35. package/dist/memory-bridge.js +290 -0
  36. package/dist/memory-bridge.js.map +1 -0
  37. package/dist/observability.d.ts +23 -0
  38. package/dist/observability.d.ts.map +1 -0
  39. package/dist/observability.js +29 -0
  40. package/dist/observability.js.map +1 -0
  41. package/dist/policy.d.ts +72 -0
  42. package/dist/policy.d.ts.map +1 -1
  43. package/dist/policy.js +44 -0
  44. package/dist/policy.js.map +1 -1
  45. package/dist/protocol.d.ts +197 -7
  46. package/dist/protocol.d.ts.map +1 -1
  47. package/dist/protocol.js +48 -5
  48. package/dist/protocol.js.map +1 -1
  49. package/dist/runtime.d.ts +19 -0
  50. package/dist/runtime.d.ts.map +1 -1
  51. package/dist/runtime.js +446 -142
  52. package/dist/runtime.js.map +1 -1
  53. package/dist/tests/builder.test.js +1 -25
  54. package/dist/tests/builder.test.js.map +1 -1
  55. package/dist/tests/engine.test.js +213 -38
  56. package/dist/tests/engine.test.js.map +1 -1
  57. package/dist/tests/generate-schema.test.js +4 -4
  58. package/dist/tests/generate-schema.test.js.map +1 -1
  59. package/dist/tests/loop-compiler.test.js +427 -2
  60. package/dist/tests/loop-compiler.test.js.map +1 -1
  61. package/dist/tests/mcp.test.js +166 -79
  62. package/dist/tests/mcp.test.js.map +1 -1
  63. package/dist/tests/memory-bridge.test.d.ts +8 -0
  64. package/dist/tests/memory-bridge.test.d.ts.map +1 -0
  65. package/dist/tests/memory-bridge.test.js +384 -0
  66. package/dist/tests/memory-bridge.test.js.map +1 -0
  67. package/dist/tests/protocol.test.js +14 -5
  68. package/dist/tests/protocol.test.js.map +1 -1
  69. package/dist/tests/verification-gate.test.d.ts +2 -0
  70. package/dist/tests/verification-gate.test.d.ts.map +1 -0
  71. package/dist/tests/verification-gate.test.js +407 -0
  72. package/dist/tests/verification-gate.test.js.map +1 -0
  73. package/dist/verification-gate.d.ts +26 -0
  74. package/dist/verification-gate.d.ts.map +1 -0
  75. package/dist/verification-gate.js +232 -0
  76. package/dist/verification-gate.js.map +1 -0
  77. package/loop_policy.json +31 -0
  78. package/package.json +1 -2
  79. package/skills/perception/SKILL.md +147 -55
  80. package/dist/adapter.d.ts +0 -17
  81. package/dist/adapter.d.ts.map +0 -1
  82. package/dist/adapter.js +0 -228
  83. package/dist/adapter.js.map +0 -1
  84. package/dist/cli.d.ts +0 -7
  85. package/dist/cli.d.ts.map +0 -1
  86. package/dist/cli.js +0 -458
  87. package/dist/cli.js.map +0 -1
  88. package/dist/tests/adapter.test.d.ts +0 -2
  89. package/dist/tests/adapter.test.d.ts.map +0 -1
  90. package/dist/tests/adapter.test.js +0 -104
  91. package/dist/tests/adapter.test.js.map +0 -1
@@ -6,13 +6,15 @@
6
6
  */
7
7
  import { randomUUID } from "node:crypto";
8
8
  import { LoopForgeEngine, extractSelfEvaluation, heuristicSelfEvaluation } from "../engine.js";
9
- import { checkLoopHealth } from "../loop-compiler.js";
10
- import { getPolicy } from "../policy.js";
9
+ import { checkLoopHealth, tokenize, jaccard } from "../loop-compiler.js";
10
+ import { getPolicy, resolveAllowedPhases } from "../policy.js";
11
11
  import { Mode, makeLoopCompileRequest, makeVaultConfig } from "../protocol.js";
12
12
  import { ReplayBackend } from "../replay.js";
13
13
  import { FSBackend } from "../backends/fs.js";
14
+ import { verifySelfEvaluation } from "../verification-gate.js";
15
+ import { logEvent } from "../observability.js";
14
16
  // ── Helpers ────────────────────────────────────────────────────────────────
15
- function buildLoopRequest(session, lastEval, lastQuality) {
17
+ function buildLoopRequest(session, lastEval, lastQuality, verificationFlags) {
16
18
  const req = {
17
19
  task: session.task,
18
20
  mode: Mode.LOOP_COMPILE,
@@ -22,6 +24,7 @@ function buildLoopRequest(session, lastEval, lastQuality) {
22
24
  task_id: null,
23
25
  loop_id: session.loopId,
24
26
  round: session.currentRound,
27
+ verification_flags: verificationFlags ?? [],
25
28
  };
26
29
  if (lastEval && lastQuality !== undefined) {
27
30
  req.last_round_result = {
@@ -31,6 +34,24 @@ function buildLoopRequest(session, lastEval, lastQuality) {
31
34
  constraint_violations: lastEval.constraint_violations,
32
35
  manual_fixes_needed: "",
33
36
  quality_score: lastQuality,
37
+ // P0–P2: Forward evolution fields to next compile
38
+ // Merge sub-agent discovered constraints into the active set
39
+ discovered_constraints: [
40
+ ...new Set([
41
+ ...(lastEval.discovered_constraints ?? []),
42
+ ...(lastEval.worker_results ?? []).flatMap((w) => w.discoveredConstraints ?? []).filter((c) => c.length > 0),
43
+ ]),
44
+ ],
45
+ objective_refinement: lastEval.objective_refinement ?? "",
46
+ emerged_subtasks: lastEval.emerged_subtasks ?? [],
47
+ // P4: Execution evidence
48
+ execution_evidence: lastEval.execution_evidence ?? undefined,
49
+ // P5: Self-correction
50
+ retracted_constraints: lastEval.retracted_constraints ?? [],
51
+ revised_success_criteria: lastEval.revised_success_criteria ?? [],
52
+ wrong_assumptions: lastEval.wrong_assumptions ?? [],
53
+ // Multi-agent: Forward delegation results to next compile
54
+ worker_results: lastEval.worker_results ?? [],
34
55
  };
35
56
  }
36
57
  return req;
@@ -62,10 +83,14 @@ function parseWarnings(prompt) {
62
83
  export class SessionManager {
63
84
  sessions = new Map();
64
85
  backend;
86
+ /** Optional provider for long-term memory context retrieval. */
87
+ memoryProvider;
88
+ /** Optional writer for persisting loop knowledge back to long-term memory. */
89
+ memoryWriter;
65
90
  constructor(backend) {
66
91
  this.backend = backend;
67
92
  }
68
- create(input) {
93
+ async create(input) {
69
94
  const sessionId = randomUUID();
70
95
  const loopId = input.loopId ?? randomUUID();
71
96
  const engine = new LoopForgeEngine("skills", this.backend);
@@ -74,19 +99,67 @@ export class SessionManager {
74
99
  const request = buildLoopRequest({
75
100
  sessionId, loopId, task: input.task, engine, currentRound: 1,
76
101
  maxRounds, qualityTrajectory: [], status: "running", createdAt: Date.now(),
102
+ injectionCount: 0, lastInjectionRound: 0, injectedContexts: [],
103
+ phase2Triggered: false, phase3Triggered: false,
77
104
  });
78
105
  request.domain = input.domain ?? "";
79
106
  request.plan_source = input.planSource ?? null;
80
107
  request.constraints_from_plan = input.constraints ?? [];
108
+ // v1.8: Phase 1 memory injection (Round 1) — only if allowed by tier
109
+ const miPolicy = getPolicy().memory_injection;
110
+ const allowedPhases = new Set(resolveAllowedPhases(maxRounds, miPolicy.round_tiers));
111
+ if (miPolicy.enabled && this.memoryProvider && allowedPhases.has(1)) {
112
+ try {
113
+ const ctx = {
114
+ loopId,
115
+ round: 1,
116
+ task: input.task,
117
+ domain: input.domain ?? "",
118
+ phase: 1,
119
+ progressEstimate: 0,
120
+ accumulatedContext: {
121
+ recurringIssues: [],
122
+ failedPatterns: [],
123
+ keyLessons: [],
124
+ remainingCriteria: [],
125
+ },
126
+ };
127
+ const rawContext = await this.memoryProvider(ctx);
128
+ if (rawContext?.trim()) {
129
+ request.external_context = rawContext.trim().slice(0, miPolicy.max_context_length);
130
+ logEvent("memory_injected", {
131
+ loopId, round: 1, phase: 1, injectionCount: 1,
132
+ contextLength: request.external_context.length,
133
+ });
134
+ }
135
+ }
136
+ catch {
137
+ // memoryProvider failed — degrade gracefully
138
+ logEvent("memory_provider_error", { loopId, round: 1 });
139
+ }
140
+ }
81
141
  const result = engine.invokeLoopCompile(request);
142
+ const injectedCtx = request.external_context;
82
143
  const session = {
83
144
  sessionId, loopId, task: input.task, engine,
84
145
  currentRound: 1, maxRounds, qualityTrajectory: [],
85
146
  status: "running", createdAt: Date.now(),
147
+ // v1.7: Memory integration state
148
+ injectionCount: injectedCtx ? 1 : 0,
149
+ lastInjectionRound: injectedCtx ? 1 : 0,
150
+ injectedContexts: injectedCtx ? [injectedCtx] : [],
151
+ phase2Triggered: false,
152
+ phase3Triggered: false,
86
153
  };
87
154
  this.sessions.set(sessionId, session);
88
155
  // Persist to vault for cross-process recovery
89
156
  this.save(session);
157
+ logEvent("session_start", {
158
+ sessionId,
159
+ loopId,
160
+ task: input.task.slice(0, 80),
161
+ maxRounds,
162
+ });
90
163
  return {
91
164
  sessionId,
92
165
  round: 1,
@@ -105,36 +178,60 @@ export class SessionManager {
105
178
  if (!session)
106
179
  return false;
107
180
  session.status = "stopped";
181
+ void this.doWriteback(session, "stopped");
108
182
  this.sessions.delete(sessionId);
183
+ logEvent("session_end", {
184
+ sessionId,
185
+ loopId: session.loopId,
186
+ stopReason: "stopped",
187
+ roundsCompleted: session.currentRound,
188
+ });
109
189
  return true;
110
190
  }
111
191
  /** Persist session state to vault for cross-process recovery.
112
192
  * Uses upsert: removes any previous session_state entry for this loop,
113
- * then appends a new one with current state. */
193
+ * then appends a new one with current state.
194
+ * Entire read→filter→write→append is wrapped in a file lock to prevent
195
+ * lost updates from concurrent processes. */
114
196
  save(session) {
115
197
  if (!this.backend)
116
198
  return;
117
- // Upsert: remove old session_state entries for this loop
118
- const vault = this.backend.readVault();
119
- const entries = vault.entries || [];
120
- vault.entries = entries.filter((e) => !(e.task_type === "session_state" && e.loop_id === session.loopId));
121
- this.backend.writeVault(vault);
122
- // Append fresh session state
123
- this.backend.appendEntry({
124
- task_id: `loop:${session.loopId}:session`,
125
- task_type: "session_state",
126
- timestamp: new Date().toISOString(),
127
- loop_id: session.loopId,
128
- task: session.task,
129
- loop_lineage: {
130
- session_id: session.sessionId,
131
- current_round: session.currentRound,
132
- max_rounds: session.maxRounds,
133
- quality_trajectory: session.qualityTrajectory,
134
- status: session.status,
135
- created_at: session.createdAt,
136
- },
137
- });
199
+ const doSave = () => {
200
+ // Upsert: remove old session_state entries for this loop
201
+ const vault = this.backend.readVault();
202
+ const entries = vault.entries || [];
203
+ vault.entries = entries.filter((e) => !(e.task_type === "session_state" && e.loop_id === session.loopId));
204
+ this.backend.writeVault(vault);
205
+ // Append fresh session state
206
+ this.backend.appendEntry({
207
+ task_id: `loop:${session.loopId}:session`,
208
+ task_type: "session_state",
209
+ timestamp: new Date().toISOString(),
210
+ loop_id: session.loopId,
211
+ task: session.task,
212
+ loop_lineage: {
213
+ session_id: session.sessionId,
214
+ current_round: session.currentRound,
215
+ max_rounds: session.maxRounds,
216
+ quality_trajectory: session.qualityTrajectory,
217
+ status: session.status,
218
+ created_at: session.createdAt,
219
+ // v1.7: Memory integration state for cross-process recovery
220
+ injection_count: session.injectionCount,
221
+ last_injection_round: session.lastInjectionRound,
222
+ phase2_triggered: session.phase2Triggered,
223
+ phase3_triggered: session.phase3Triggered,
224
+ },
225
+ });
226
+ };
227
+ // Use FSBackend's file lock if available (only FSBackend implements withLock)
228
+ if ("withLock" in this.backend &&
229
+ typeof this.backend.withLock === "function") {
230
+ this.backend.withLock(doSave);
231
+ }
232
+ else {
233
+ doSave();
234
+ }
138
235
  }
139
236
  /** Resume a loop from vault state.
140
237
  * Reconstructs the session and compiles the prompt for the next round.
@@ -176,6 +273,12 @@ export class SessionManager {
176
273
  qualityTrajectory,
177
274
  status: "running",
178
275
  createdAt: lineage.created_at ?? Date.now(),
276
+ // v1.7: Memory integration state restored from vault
277
+ injectionCount: lineage.injection_count ?? 0,
278
+ lastInjectionRound: lineage.last_injection_round ?? 0,
279
+ injectedContexts: [],
280
+ phase2Triggered: lineage.phase2_triggered ?? false,
281
+ phase3Triggered: lineage.phase3_triggered ?? false,
179
282
  };
180
283
  this.sessions.set(sessionId, session);
181
284
  // Compile the next round's prompt from vault lineage
@@ -273,51 +376,170 @@ export class SessionManager {
273
376
  task_continuity: health.task_continuity,
274
377
  };
275
378
  }
276
- /** Core cycle: extract self-eval → record feedback → check stop → compile next. */
277
- advance(sessionId, output) {
379
+ /** Core cycle: extract self-eval → record feedback → check stop → compile next.
380
+ * @param preExtractedEval Optional pre-built SelfEvaluation from MCP tool parameter.
381
+ * When provided (MCP path with evaluation parameter), skips regex extraction.
382
+ * When undefined (runtime/CLI path), falls back to regex extraction from output. */
383
+ async advance(sessionId, output, preExtractedEval) {
278
384
  const session = this.sessions.get(sessionId);
279
385
  if (!session)
280
386
  return { sessionId, round: 0, prompt: null, stopReason: "session_not_found" };
281
387
  if (session.status !== "running") {
282
388
  return { sessionId, round: session.currentRound, prompt: null, stopReason: session.status };
283
389
  }
284
- // 1. Extract self-evaluation
285
- const structured = extractSelfEvaluation(output);
286
- const extractionFailed = structured === null;
287
- const selfEval = structured ?? heuristicSelfEvaluation(output);
390
+ // 1. Extract self-evaluation (structured param preferred → regex → heuristic)
391
+ let extractionFailed = false;
392
+ let selfEval;
393
+ if (preExtractedEval) {
394
+ selfEval = preExtractedEval;
395
+ extractionFailed = false;
396
+ }
397
+ else {
398
+ const structured = extractSelfEvaluation(output);
399
+ extractionFailed = structured === null;
400
+ selfEval = structured ?? heuristicSelfEvaluation(output);
401
+ }
288
402
  // Guard: if both extraction methods returned null, stop
289
403
  if (!selfEval) {
290
404
  session.status = "stalled";
291
405
  this.save(session);
406
+ void this.doWriteback(session, "stalled");
407
+ logEvent("session_end", { sessionId, loopId: session.loopId, stopReason: "stalled", round: session.currentRound });
292
408
  return { sessionId, round: session.currentRound, prompt: null, stopReason: "stalled", quality: 0 };
293
409
  }
410
+ // 1.5. Verification gate — cross-round consistency check (v1.6)
411
+ let verificationFlags = [];
412
+ let gateVerdict = "trusted";
413
+ {
414
+ const vaultEntries = this.backend
415
+ ? this.backend.queryEntries({ prefix: `loop:${session.loopId}:r` })
416
+ : [];
417
+ const verifyResult = verifySelfEvaluation(selfEval, session.currentRound, vaultEntries, session.lastSelfEval ?? null);
418
+ verificationFlags = verifyResult.flags;
419
+ gateVerdict = verifyResult.verdict;
420
+ }
294
421
  // 2. Record feedback (flushes immediately so next compile sees scores)
295
422
  const quality = session.engine.autoFeedback(selfEval, session.loopId, session.currentRound, session.task);
296
- session.qualityTrajectory.push(quality);
423
+ // Contradicted verdict: skip quality trend (quality score is unreliable)
424
+ if (gateVerdict !== "contradicted") {
425
+ session.qualityTrajectory.push(quality);
426
+ }
427
+ // Note: feedback vault entry is always persisted via autoFeedback above.
428
+ // Only the in-memory trend is skipped — the raw data stays for audit.
429
+ // Store selfEval for next round's verification gate.
430
+ // NOTE: lastSelfEval is intentionally NOT persisted to vault (save()).
431
+ // A resumed session starts with lastSelfEval=undefined, which means the
432
+ // first round after resumption runs with degraded verification (most
433
+ // checks skip without prevSelfEval). The gate recovers on the next round.
434
+ session.lastSelfEval = selfEval;
297
435
  // 3. Stop conditions (extraction-first order — see memory)
298
436
  if (extractionFailed) {
299
437
  session.status = "stalled";
300
438
  this.save(session);
439
+ void this.doWriteback(session, "stalled");
440
+ logEvent("session_end", { sessionId, loopId: session.loopId, stopReason: "stalled", round: session.currentRound });
301
441
  return { sessionId, round: session.currentRound, prompt: null, stopReason: "stalled", quality };
302
442
  }
303
443
  if (!selfEval.should_continue) {
304
444
  session.status = "stopped";
305
445
  this.save(session);
446
+ void this.doWriteback(session, "task_complete");
447
+ logEvent("session_end", { sessionId, loopId: session.loopId, stopReason: "task_complete", round: session.currentRound });
306
448
  return { sessionId, round: session.currentRound, prompt: null, stopReason: "task_complete", quality };
307
449
  }
308
450
  if (session.engine.shouldBreak()) {
309
451
  session.status = "stopped";
310
452
  this.save(session);
453
+ void this.doWriteback(session, "circuit_breaker");
454
+ logEvent("session_end", { sessionId, loopId: session.loopId, stopReason: "circuit_breaker", round: session.currentRound });
311
455
  return { sessionId, round: session.currentRound, prompt: null, stopReason: "circuit_breaker", quality };
312
456
  }
313
457
  if (session.currentRound >= session.maxRounds) {
314
458
  session.status = "stopped";
315
459
  this.save(session);
460
+ void this.doWriteback(session, "max_rounds");
461
+ logEvent("session_end", { sessionId, loopId: session.loopId, stopReason: "max_rounds", round: session.currentRound });
316
462
  return { sessionId, round: session.currentRound, prompt: null, stopReason: "max_rounds", quality };
317
463
  }
318
464
  // 4. Compile next round
319
465
  session.currentRound++;
320
- const request = buildLoopRequest(session, selfEval, quality);
466
+ // v1.8: Memory injection for phases 2/3 — tier-aware
467
+ let externalCtx = "";
468
+ const miPolicy = getPolicy().memory_injection;
469
+ if (miPolicy.enabled && this.memoryProvider) {
470
+ const allowedPhases = new Set(resolveAllowedPhases(session.maxRounds, miPolicy.round_tiers));
471
+ if (session.injectionCount < allowedPhases.size &&
472
+ session.currentRound - session.lastInjectionRound >= miPolicy.min_rounds_between_injections) {
473
+ const progress = selfEval.execution_evidence?.progress_estimate;
474
+ const hasProgress = typeof progress === "number" && progress >= 0;
475
+ let phase = null;
476
+ if (allowedPhases.has(2) &&
477
+ !session.phase2Triggered &&
478
+ hasProgress &&
479
+ progress >= miPolicy.phase_thresholds.phase2.threshold) {
480
+ phase = 2;
481
+ session.phase2Triggered = true;
482
+ }
483
+ else if (allowedPhases.has(3) &&
484
+ !session.phase3Triggered &&
485
+ hasProgress &&
486
+ progress >= miPolicy.phase_thresholds.phase3.threshold) {
487
+ phase = 3;
488
+ session.phase3Triggered = true;
489
+ }
490
+ if (phase !== null) {
491
+ try {
492
+ const accCtx = {
493
+ recurringIssues: selfEval.constraint_violations ?? [],
494
+ failedPatterns: [],
495
+ keyLessons: selfEval.emerged_subtasks ?? [],
496
+ remainingCriteria: selfEval.execution_evidence?.success_criteria_remaining ?? [],
497
+ };
498
+ const ctx = {
499
+ loopId: session.loopId,
500
+ round: session.currentRound,
501
+ task: session.task,
502
+ domain: "",
503
+ phase,
504
+ progressEstimate: hasProgress ? progress : -1,
505
+ accumulatedContext: accCtx,
506
+ };
507
+ const rawContext = await this.memoryProvider(ctx);
508
+ if (rawContext?.trim()) {
509
+ // Dedup
510
+ const newTokens = tokenize(rawContext);
511
+ let isDuplicate = false;
512
+ for (const old of session.injectedContexts) {
513
+ if (jaccard(newTokens, tokenize(old)) > miPolicy.dedup_threshold) {
514
+ isDuplicate = true;
515
+ break;
516
+ }
517
+ }
518
+ if (!isDuplicate) {
519
+ externalCtx = rawContext.trim().slice(0, miPolicy.max_context_length);
520
+ session.injectionCount++;
521
+ session.lastInjectionRound = session.currentRound;
522
+ session.injectedContexts.push(externalCtx);
523
+ logEvent("memory_injected", {
524
+ loopId: session.loopId, round: session.currentRound,
525
+ phase, injectionCount: session.injectionCount,
526
+ contextLength: externalCtx.length,
527
+ });
528
+ }
529
+ }
530
+ }
531
+ catch {
532
+ logEvent("memory_provider_error", {
533
+ loopId: session.loopId, round: session.currentRound,
534
+ });
535
+ }
536
+ }
537
+ }
538
+ }
539
+ const request = buildLoopRequest(session, selfEval, quality, verificationFlags);
540
+ if (externalCtx) {
541
+ request.external_context = externalCtx;
542
+ }
321
543
  const result = session.engine.invokeLoopCompile(request);
322
544
  this.save(session);
323
545
  return {
@@ -330,6 +552,53 @@ export class SessionManager {
330
552
  warnings: parseWarnings(result.response?.prompt ?? null),
331
553
  };
332
554
  }
555
+ /** Write back loop knowledge to long-term memory.
556
+ * Called when a loop terminates for any reason. */
557
+ async doWriteback(session, stopReason) {
558
+ if (!this.memoryWriter)
559
+ return;
560
+ const wp = getPolicy().memory_writeback;
561
+ if (!wp.enabled)
562
+ return;
563
+ if (wp.write_on_outcomes.length > 0 && !wp.write_on_outcomes.includes(stopReason))
564
+ return;
565
+ if (session.currentRound < 1)
566
+ return;
567
+ const outcome = ["completed", "circuit_breaker", "stalled", "max_rounds", "stopped"].find((o) => stopReason === o) ?? "stopped";
568
+ try {
569
+ const payload = {
570
+ loopId: session.loopId,
571
+ task: session.task,
572
+ outcome,
573
+ roundsCompleted: session.currentRound,
574
+ qualityTrajectory: [...session.qualityTrajectory],
575
+ projectEntry: {
576
+ title: `${session.task.slice(0, 80)} — ${outcome}`,
577
+ objective: session.task.slice(0, 200),
578
+ keyOutcome: outcome === "completed"
579
+ ? `Completed successfully in ${session.currentRound} rounds.`
580
+ : `Terminated with reason '${stopReason}' after ${session.currentRound} rounds.`,
581
+ keyDiscoveries: [],
582
+ date: new Date().toISOString().split("T")[0],
583
+ },
584
+ feedbackEntries: [],
585
+ referenceEntry: {
586
+ description: `LoopForge vault data for "${session.task.slice(0, 80)}"`,
587
+ vaultLocation: `.promptcraft/prompt_vault.json → loop:${session.loopId}:*`,
588
+ },
589
+ };
590
+ await this.memoryWriter(payload);
591
+ logEvent("memory_writeback", {
592
+ loopId: session.loopId, stopReason,
593
+ feedbackCount: payload.feedbackEntries.length,
594
+ });
595
+ }
596
+ catch {
597
+ logEvent("memory_writeback_error", {
598
+ loopId: session.loopId, stopReason,
599
+ });
600
+ }
601
+ }
333
602
  /** Replay timeline for a session — creates ReplayBackend from the stored backend. */
334
603
  replayTimeline(sessionId) {
335
604
  const session = this.sessions.get(sessionId);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}