loopforge 1.12.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +172 -95
  2. package/dist/backends/interface.d.ts +3 -9
  3. package/dist/backends/interface.d.ts.map +1 -1
  4. package/dist/backends/interface.js +1 -5
  5. package/dist/backends/interface.js.map +1 -1
  6. package/dist/canonical-state.d.ts +53 -0
  7. package/dist/canonical-state.d.ts.map +1 -0
  8. package/dist/canonical-state.js +161 -0
  9. package/dist/canonical-state.js.map +1 -0
  10. package/dist/cli.d.ts +4 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +227 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/enforcement-gate.d.ts +44 -0
  15. package/dist/enforcement-gate.d.ts.map +1 -0
  16. package/dist/enforcement-gate.js +271 -0
  17. package/dist/enforcement-gate.js.map +1 -0
  18. package/dist/engine.d.ts +17 -7
  19. package/dist/engine.d.ts.map +1 -1
  20. package/dist/engine.js +158 -249
  21. package/dist/engine.js.map +1 -1
  22. package/dist/evidence-provider.d.ts +113 -0
  23. package/dist/evidence-provider.d.ts.map +1 -0
  24. package/dist/evidence-provider.js +419 -0
  25. package/dist/evidence-provider.js.map +1 -0
  26. package/dist/index.d.ts +19 -11
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +16 -10
  29. package/dist/index.js.map +1 -1
  30. package/dist/init.d.ts +15 -0
  31. package/dist/init.d.ts.map +1 -0
  32. package/dist/init.js +49 -0
  33. package/dist/init.js.map +1 -0
  34. package/dist/interop.d.ts +30 -0
  35. package/dist/interop.d.ts.map +1 -0
  36. package/dist/interop.js +29 -0
  37. package/dist/interop.js.map +1 -0
  38. package/dist/loop-compiler.d.ts +14 -64
  39. package/dist/loop-compiler.d.ts.map +1 -1
  40. package/dist/loop-compiler.js +307 -2001
  41. package/dist/loop-compiler.js.map +1 -1
  42. package/dist/loop-store.d.ts +82 -0
  43. package/dist/loop-store.d.ts.map +1 -0
  44. package/dist/loop-store.js +332 -0
  45. package/dist/loop-store.js.map +1 -0
  46. package/dist/mcp/server.d.ts +9 -6
  47. package/dist/mcp/server.d.ts.map +1 -1
  48. package/dist/mcp/server.js +109 -73
  49. package/dist/mcp/server.js.map +1 -1
  50. package/dist/mcp/session.d.ts +84 -20
  51. package/dist/mcp/session.d.ts.map +1 -1
  52. package/dist/mcp/session.js +718 -316
  53. package/dist/mcp/session.js.map +1 -1
  54. package/dist/mcp/tools.d.ts +18 -268
  55. package/dist/mcp/tools.d.ts.map +1 -1
  56. package/dist/mcp/tools.js +225 -12
  57. package/dist/mcp/tools.js.map +1 -1
  58. package/dist/observability.d.ts +36 -16
  59. package/dist/observability.d.ts.map +1 -1
  60. package/dist/observability.js +82 -23
  61. package/dist/observability.js.map +1 -1
  62. package/dist/policy-metrics.d.ts +46 -0
  63. package/dist/policy-metrics.d.ts.map +1 -0
  64. package/dist/policy-metrics.js +146 -0
  65. package/dist/policy-metrics.js.map +1 -0
  66. package/dist/policy.d.ts +58 -75
  67. package/dist/policy.d.ts.map +1 -1
  68. package/dist/policy.js +122 -93
  69. package/dist/policy.js.map +1 -1
  70. package/dist/prompt-assembler.d.ts +30 -0
  71. package/dist/prompt-assembler.d.ts.map +1 -0
  72. package/dist/prompt-assembler.js +257 -0
  73. package/dist/prompt-assembler.js.map +1 -0
  74. package/dist/prompt-policy.d.ts +29 -0
  75. package/dist/prompt-policy.d.ts.map +1 -0
  76. package/dist/prompt-policy.js +51 -0
  77. package/dist/prompt-policy.js.map +1 -0
  78. package/dist/protocol.d.ts +117 -91
  79. package/dist/protocol.d.ts.map +1 -1
  80. package/dist/protocol.js +40 -36
  81. package/dist/protocol.js.map +1 -1
  82. package/dist/replay.d.ts.map +1 -1
  83. package/dist/replay.js +1 -27
  84. package/dist/replay.js.map +1 -1
  85. package/dist/round-coordinator.d.ts +90 -0
  86. package/dist/round-coordinator.d.ts.map +1 -0
  87. package/dist/round-coordinator.js +186 -0
  88. package/dist/round-coordinator.js.map +1 -0
  89. package/dist/round-driver.d.ts +53 -0
  90. package/dist/round-driver.d.ts.map +1 -0
  91. package/dist/round-driver.js +101 -0
  92. package/dist/round-driver.js.map +1 -0
  93. package/dist/round-transaction.d.ts +70 -0
  94. package/dist/round-transaction.d.ts.map +1 -0
  95. package/dist/round-transaction.js +290 -0
  96. package/dist/round-transaction.js.map +1 -0
  97. package/dist/runtime.d.ts +35 -17
  98. package/dist/runtime.d.ts.map +1 -1
  99. package/dist/runtime.js +357 -344
  100. package/dist/runtime.js.map +1 -1
  101. package/dist/storage.d.ts +38 -0
  102. package/dist/storage.d.ts.map +1 -0
  103. package/dist/storage.js +201 -0
  104. package/dist/storage.js.map +1 -0
  105. package/dist/verification-gate.d.ts +39 -7
  106. package/dist/verification-gate.d.ts.map +1 -1
  107. package/dist/verification-gate.js +198 -9
  108. package/dist/verification-gate.js.map +1 -1
  109. package/loop_policy.json +26 -47
  110. package/package.json +13 -10
  111. package/skills/perception/SKILL.md +80 -249
  112. package/dist/backends/fs.d.ts +0 -36
  113. package/dist/backends/fs.d.ts.map +0 -1
  114. package/dist/backends/fs.js +0 -358
  115. package/dist/backends/fs.js.map +0 -1
  116. package/dist/builder.d.ts +0 -12
  117. package/dist/builder.d.ts.map +0 -1
  118. package/dist/builder.js +0 -259
  119. package/dist/builder.js.map +0 -1
  120. package/dist/mcp-server.d.ts +0 -12
  121. package/dist/mcp-server.d.ts.map +0 -1
  122. package/dist/mcp-server.js +0 -14
  123. package/dist/mcp-server.js.map +0 -1
  124. package/dist/memory-bridge.d.ts +0 -47
  125. package/dist/memory-bridge.d.ts.map +0 -1
  126. package/dist/memory-bridge.js +0 -290
  127. package/dist/memory-bridge.js.map +0 -1
  128. package/dist/tests/_helpers.d.ts +0 -25
  129. package/dist/tests/_helpers.d.ts.map +0 -1
  130. package/dist/tests/_helpers.js +0 -47
  131. package/dist/tests/_helpers.js.map +0 -1
  132. package/dist/tests/builder.test.d.ts +0 -2
  133. package/dist/tests/builder.test.d.ts.map +0 -1
  134. package/dist/tests/builder.test.js +0 -110
  135. package/dist/tests/builder.test.js.map +0 -1
  136. package/dist/tests/engine.test.d.ts +0 -2
  137. package/dist/tests/engine.test.d.ts.map +0 -1
  138. package/dist/tests/engine.test.js +0 -371
  139. package/dist/tests/engine.test.js.map +0 -1
  140. package/dist/tests/generate-schema.test.d.ts +0 -8
  141. package/dist/tests/generate-schema.test.d.ts.map +0 -1
  142. package/dist/tests/generate-schema.test.js +0 -199
  143. package/dist/tests/generate-schema.test.js.map +0 -1
  144. package/dist/tests/loop-compiler.test.d.ts +0 -2
  145. package/dist/tests/loop-compiler.test.d.ts.map +0 -1
  146. package/dist/tests/loop-compiler.test.js +0 -1051
  147. package/dist/tests/loop-compiler.test.js.map +0 -1
  148. package/dist/tests/mcp.test.d.ts +0 -7
  149. package/dist/tests/mcp.test.d.ts.map +0 -1
  150. package/dist/tests/mcp.test.js +0 -485
  151. package/dist/tests/mcp.test.js.map +0 -1
  152. package/dist/tests/memory-bridge.test.d.ts +0 -8
  153. package/dist/tests/memory-bridge.test.d.ts.map +0 -1
  154. package/dist/tests/memory-bridge.test.js +0 -383
  155. package/dist/tests/memory-bridge.test.js.map +0 -1
  156. package/dist/tests/policy.test.d.ts +0 -2
  157. package/dist/tests/policy.test.d.ts.map +0 -1
  158. package/dist/tests/policy.test.js +0 -49
  159. package/dist/tests/policy.test.js.map +0 -1
  160. package/dist/tests/protocol.test.d.ts +0 -2
  161. package/dist/tests/protocol.test.d.ts.map +0 -1
  162. package/dist/tests/protocol.test.js +0 -73
  163. package/dist/tests/protocol.test.js.map +0 -1
  164. package/dist/tests/replay.test.d.ts +0 -2
  165. package/dist/tests/replay.test.d.ts.map +0 -1
  166. package/dist/tests/replay.test.js +0 -222
  167. package/dist/tests/replay.test.js.map +0 -1
  168. package/dist/tests/runtime.test.d.ts +0 -7
  169. package/dist/tests/runtime.test.d.ts.map +0 -1
  170. package/dist/tests/runtime.test.js +0 -323
  171. package/dist/tests/runtime.test.js.map +0 -1
  172. package/dist/tests/verification-gate.test.d.ts +0 -2
  173. package/dist/tests/verification-gate.test.d.ts.map +0 -1
  174. package/dist/tests/verification-gate.test.js +0 -407
  175. package/dist/tests/verification-gate.test.js.map +0 -1
  176. package/skills/prompt-techniques/SKILL.md +0 -52
  177. package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
  178. package/skills/prompt-techniques/references/few-shot.md +0 -174
  179. package/skills/prompt-techniques/references/least-to-most.md +0 -182
  180. package/skills/prompt-techniques/references/step-back.md +0 -160
  181. package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
  182. package/skills/prompt-techniques/references/zero-shot.md +0 -97
@@ -0,0 +1,290 @@
1
+ /** Schema-versioned round transaction shared by Runtime and MCP.
2
+ *
3
+ * A logical round has one deterministic roundId. Rejected attempts keep the
4
+ * same identity and before snapshot; only accepted decisions are committed to
5
+ * feedback storage. The committed feedback embeds the decision so replay after
6
+ * a process crash is idempotent.
7
+ */
8
+ import { diffSnapshotCollections, extractFilesFromSnapshots, } from "./evidence-provider.js";
9
+ import { RoundCoordinator, } from "./round-coordinator.js";
10
+ import { logEvent, startSpan } from "./observability.js";
11
+ import { policyMetrics } from "./policy-metrics.js";
12
+ import { VaultRoundCommitStore } from "./storage.js";
13
+ export const ROUND_TRANSACTION_SCHEMA_VERSION = 1;
14
+ export function makeRoundId(loopId, round) {
15
+ if (!Number.isInteger(round) || round < 1) {
16
+ throw new Error(`Invalid round number: ${round}`);
17
+ }
18
+ return `loop:${loopId}:round:${round}`;
19
+ }
20
+ export function prepareRoundTransaction(loopId, round, beforeEvidence, promptArtifact) {
21
+ const now = Date.now();
22
+ return {
23
+ schemaVersion: ROUND_TRANSACTION_SCHEMA_VERSION,
24
+ roundId: makeRoundId(loopId, round),
25
+ loopId,
26
+ round,
27
+ attempt: 1,
28
+ phase: promptArtifact ? "prompted" : "prepared",
29
+ beforeEvidence,
30
+ createdAt: now,
31
+ updatedAt: now,
32
+ promptArtifact,
33
+ };
34
+ }
35
+ /** Attach the next prompt attempt to a rejected logical round without changing
36
+ * its identity or evidence baseline. Evaluation fields belong to the previous
37
+ * attempt and are cleared before the Agent receives the retry prompt. */
38
+ export function prepareRejectedAttempt(rejected, promptArtifact) {
39
+ if (rejected.phase !== "rejected") {
40
+ throw new Error(`Cannot retry transaction in phase ${rejected.phase}`);
41
+ }
42
+ if (promptArtifact.roundId !== rejected.roundId) {
43
+ throw new Error(`Retry prompt identity mismatch: ${promptArtifact.roundId} !== ${rejected.roundId}`);
44
+ }
45
+ if (promptArtifact.attempt !== rejected.attempt + 1) {
46
+ throw new Error(`Retry prompt attempt mismatch: ${promptArtifact.attempt} !== ${rejected.attempt + 1}`);
47
+ }
48
+ return {
49
+ ...rejected,
50
+ attempt: promptArtifact.attempt,
51
+ phase: "prompted",
52
+ afterEvidence: undefined,
53
+ roundEvidence: undefined,
54
+ evaluation: undefined,
55
+ result: undefined,
56
+ promptArtifact,
57
+ updatedAt: Date.now(),
58
+ };
59
+ }
60
+ function isRecord(value) {
61
+ return value !== null && typeof value === "object" && !Array.isArray(value);
62
+ }
63
+ function isProcessResult(value) {
64
+ if (!isRecord(value))
65
+ return false;
66
+ return ["continue", "stop", "reject", "terminate"].includes(String(value.action)) && Array.isArray(value.verificationFlags);
67
+ }
68
+ function parseProviderSnapshots(value) {
69
+ if (!Array.isArray(value))
70
+ return null;
71
+ const snapshots = [];
72
+ for (const item of value) {
73
+ if (!isRecord(item))
74
+ return null;
75
+ if (typeof item.provider !== "string" ||
76
+ typeof item.timestamp !== "number" ||
77
+ !Array.isArray(item.files) ||
78
+ !item.files.every((file) => typeof file === "string") ||
79
+ !isRecord(item.data))
80
+ return null;
81
+ snapshots.push(item);
82
+ }
83
+ return snapshots;
84
+ }
85
+ /** Parse a persisted snapshot without trusting arbitrary vault data. */
86
+ export function parseRoundTransactionSnapshot(value) {
87
+ if (!isRecord(value))
88
+ return null;
89
+ if (value.schemaVersion !== ROUND_TRANSACTION_SCHEMA_VERSION)
90
+ return null;
91
+ if (typeof value.roundId !== "string" || typeof value.loopId !== "string") {
92
+ return null;
93
+ }
94
+ if (!Number.isInteger(value.round) || value.round < 1)
95
+ return null;
96
+ if (!Number.isInteger(value.attempt) || value.attempt < 1)
97
+ return null;
98
+ if (!["prepared", "prompted", "evaluated", "rejected", "committed", "terminated"]
99
+ .includes(String(value.phase)))
100
+ return null;
101
+ const beforeEvidence = parseProviderSnapshots(value.beforeEvidence);
102
+ if (!beforeEvidence)
103
+ return null;
104
+ const afterEvidence = value.afterEvidence === undefined
105
+ ? undefined
106
+ : parseProviderSnapshots(value.afterEvidence);
107
+ if (value.afterEvidence !== undefined && !afterEvidence)
108
+ return null;
109
+ const roundEvidence = value.roundEvidence === undefined
110
+ ? undefined
111
+ : parseProviderSnapshots(value.roundEvidence);
112
+ if (value.roundEvidence !== undefined && !roundEvidence)
113
+ return null;
114
+ if (value.result !== undefined && !isProcessResult(value.result))
115
+ return null;
116
+ if (value.promptArtifact !== undefined) {
117
+ if (!isRecord(value.promptArtifact))
118
+ return null;
119
+ const artifact = value.promptArtifact;
120
+ if (artifact.schemaVersion !== 1 ||
121
+ typeof artifact.roundId !== "string" ||
122
+ typeof artifact.renderedPrompt !== "string" ||
123
+ typeof artifact.promptHash !== "string" ||
124
+ typeof artifact.stateHash !== "string" ||
125
+ !["l0", "l1", "l2"].includes(String(artifact.level)))
126
+ return null;
127
+ }
128
+ const snapshot = {
129
+ ...value,
130
+ beforeEvidence,
131
+ afterEvidence,
132
+ roundEvidence,
133
+ };
134
+ if (snapshot.roundId !== makeRoundId(snapshot.loopId, snapshot.round)) {
135
+ return null;
136
+ }
137
+ return snapshot;
138
+ }
139
+ export class RoundTransactionCoordinator {
140
+ engine;
141
+ backend;
142
+ commitStore;
143
+ constructor(engine, backend, commitStore) {
144
+ this.engine = engine;
145
+ this.backend = backend ?? engine.getBackend();
146
+ this.commitStore = commitStore ?? new VaultRoundCommitStore(this.backend);
147
+ }
148
+ process(input) {
149
+ const { snapshot } = input;
150
+ const span = startSpan("round.transaction", {
151
+ loopId: snapshot.loopId,
152
+ round: snapshot.round,
153
+ roundId: snapshot.roundId,
154
+ attempt: snapshot.attempt,
155
+ });
156
+ const finish = (outcome) => {
157
+ policyMetrics.recordRound(snapshot.loopId, outcome.result, outcome.replayed);
158
+ span.end("ok", {
159
+ action: outcome.result.action,
160
+ replayed: outcome.replayed,
161
+ phase: outcome.snapshot.phase,
162
+ });
163
+ return outcome;
164
+ };
165
+ try {
166
+ const expectedRoundId = makeRoundId(snapshot.loopId, snapshot.round);
167
+ if (snapshot.roundId !== expectedRoundId) {
168
+ throw new Error(`Round snapshot identity mismatch: ${snapshot.roundId} !== ${expectedRoundId}`);
169
+ }
170
+ const committed = this.readCommitted(snapshot);
171
+ if (committed) {
172
+ logEvent("round_transaction_replay", {
173
+ loopId: snapshot.loopId,
174
+ round: snapshot.round,
175
+ roundId: snapshot.roundId,
176
+ });
177
+ return finish(committed);
178
+ }
179
+ const attempt = snapshot.phase === "rejected"
180
+ ? snapshot.attempt + 1
181
+ : snapshot.attempt;
182
+ const roundEvidence = diffSnapshotCollections(snapshot.beforeEvidence, input.actualEvidence);
183
+ const coordinator = new RoundCoordinator(this.backend);
184
+ const result = coordinator.processRound({
185
+ loopId: snapshot.loopId,
186
+ task: input.task,
187
+ currentRound: snapshot.round,
188
+ maxRounds: input.maxRounds,
189
+ selfEval: input.selfEval,
190
+ extractionSucceeded: input.extractionSucceeded,
191
+ lastSelfEval: input.lastSelfEval,
192
+ consecutiveRejections: input.consecutiveRejections,
193
+ runtimeFilesChanged: extractFilesFromSnapshots(roundEvidence),
194
+ evidenceSnapshots: roundEvidence,
195
+ successTrajectory: input.successTrajectory,
196
+ });
197
+ const evaluated = {
198
+ ...snapshot,
199
+ attempt,
200
+ phase: "evaluated",
201
+ afterEvidence: input.actualEvidence,
202
+ roundEvidence,
203
+ evaluation: input.selfEval,
204
+ result,
205
+ updatedAt: Date.now(),
206
+ };
207
+ if (result.action === "reject" || result.action === "terminate") {
208
+ const terminalPhase = result.action === "reject" ? "rejected" : "terminated";
209
+ return finish({
210
+ snapshot: { ...evaluated, phase: terminalPhase, updatedAt: Date.now() },
211
+ result,
212
+ replayed: false,
213
+ });
214
+ }
215
+ const committedSnapshot = {
216
+ ...evaluated,
217
+ phase: "committed",
218
+ updatedAt: Date.now(),
219
+ };
220
+ const metadata = {
221
+ schema_version: ROUND_TRANSACTION_SCHEMA_VERSION,
222
+ round_id: snapshot.roundId,
223
+ snapshot: committedSnapshot,
224
+ result,
225
+ };
226
+ this.engine.autoFeedback(input.selfEval, snapshot.loopId, snapshot.round, input.task, metadata);
227
+ const persisted = this.readCommitted(committedSnapshot);
228
+ if (!persisted) {
229
+ throw new Error(`Round transaction commit failed: ${snapshot.roundId}`);
230
+ }
231
+ logEvent("round_transaction_commit", {
232
+ loopId: snapshot.loopId,
233
+ round: snapshot.round,
234
+ roundId: snapshot.roundId,
235
+ action: result.action,
236
+ });
237
+ return finish({ snapshot: committedSnapshot, result, replayed: false });
238
+ }
239
+ catch (error) {
240
+ span.end("error", { error: String(error) });
241
+ throw error;
242
+ }
243
+ }
244
+ /** Recover an already committed decision without evaluating or writing. */
245
+ recover(snapshot) {
246
+ const span = startSpan("round.transaction.recover", {
247
+ loopId: snapshot.loopId,
248
+ round: snapshot.round,
249
+ roundId: snapshot.roundId,
250
+ });
251
+ try {
252
+ const outcome = this.readCommitted(snapshot);
253
+ if (outcome) {
254
+ policyMetrics.recordRound(snapshot.loopId, outcome.result, true);
255
+ }
256
+ span.end("ok", { recovered: outcome !== null });
257
+ return outcome;
258
+ }
259
+ catch (error) {
260
+ span.end("error", { error: String(error) });
261
+ throw error;
262
+ }
263
+ }
264
+ readCommitted(expected) {
265
+ const taskId = `loop:${expected.loopId}:r${expected.round}:feedback`;
266
+ const entries = this.commitStore.find(expected.loopId, expected.round);
267
+ for (const entry of entries) {
268
+ if (entry.task_id !== taskId)
269
+ continue;
270
+ const outcome = this.outcomeFromEntry(entry, expected.roundId);
271
+ if (outcome)
272
+ return outcome;
273
+ }
274
+ return null;
275
+ }
276
+ outcomeFromEntry(entry, expectedRoundId) {
277
+ const lineage = isRecord(entry.loop_lineage) ? entry.loop_lineage : null;
278
+ const transaction = lineage && isRecord(lineage.round_transaction)
279
+ ? lineage.round_transaction
280
+ : null;
281
+ if (!transaction || transaction.round_id !== expectedRoundId)
282
+ return null;
283
+ const snapshot = parseRoundTransactionSnapshot(transaction.snapshot);
284
+ const result = transaction.result;
285
+ if (!snapshot || !isProcessResult(result))
286
+ return null;
287
+ return { snapshot, result, replayed: true };
288
+ }
289
+ }
290
+ //# sourceMappingURL=round-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round-transaction.js","sourceRoot":"","sources":["../src/round-transaction.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -17,6 +17,7 @@ import { RuntimeStatus, type RuntimeConfig, type RunResult } from "./protocol.js
17
17
  export declare class LoopRuntime extends EventEmitter {
18
18
  private config;
19
19
  private engine;
20
+ private roundDriver;
20
21
  private _status;
21
22
  private currentRound;
22
23
  private successTrajectory;
@@ -25,37 +26,54 @@ export declare class LoopRuntime extends EventEmitter {
25
26
  private sigtermHandler;
26
27
  private lastSelfEval;
27
28
  private pendingVerificationFlags;
28
- private injectionCount;
29
- private lastInjectionRound;
30
- private injectedContexts;
31
- private phase2Triggered;
32
- private phase3Triggered;
29
+ private consecutiveRejections;
30
+ /** Which enforcement check triggered the last rejection.
31
+ * Only same-check rejections accumulate; a different check resets the counter. */
32
+ private lastRejectionCheck;
33
+ private pendingRejectionNotice;
34
+ private roundSnapshot;
35
+ private pauseTimestamp;
36
+ private pauseRequested;
37
+ private driverPromise;
33
38
  private pendingExternalContext;
34
39
  private roundStartTime;
35
40
  private lastProgressTime;
36
41
  private activeCtx;
42
+ private activeAbortController;
37
43
  private timedOut;
38
44
  constructor(rawConfig: RuntimeConfig);
39
45
  get status(): RuntimeStatus;
40
46
  getCurrentRound(): number;
41
47
  getSuccessTrajectory(): boolean[];
42
- /** Derive the current progress estimate from the last self evaluation.
43
- * Returns -1 if no progress data is available. */
44
- private getCurrentProgress;
45
- /** Determine whether memory should be injected this round based on
46
- * tier-based allowed phases, progress thresholds, and round spacing. */
47
- private shouldInjectMemory;
48
- /** Build the accumulated context for constructing a targeted memory query. */
49
- private buildAccumulatedContext;
50
- /** Deduplicate external context against previously injected contexts.
51
- * Returns empty string if the new context is too similar to any prior. */
52
- private dedupAndStoreContext;
53
48
  /** Start the loop. Returns when the loop terminates (task complete,
54
- * circuit breaker, max rounds, stalled, or manual stop). */
49
+ * circuit breaker, max rounds, stalled, paused, or manual stop).
50
+ * Can only be called from IDLE state. */
55
51
  start(): Promise<RunResult>;
52
+ /** Start the one allowed loop driver and clear its ownership on exit. */
53
+ private launchDriver;
54
+ /** Internal loop driver. Called by both start() (isResume=false) and
55
+ * resume() (isResume=true). When resuming, skips the currentRound=1
56
+ * reset — the loop picks up exactly where it left off. */
57
+ private _continue;
58
+ /** Execute one round with a hard driver deadline. The AbortSignal lets a
59
+ * cooperative executor stop early; the race guarantees the runtime itself
60
+ * still resolves when an executor ignores cancellation. */
61
+ private executeWithDeadline;
62
+ private triggerTimeout;
63
+ private triggerStall;
56
64
  /** Stop the loop gracefully. Safe to call from any thread/timer. */
57
65
  stop(): void;
66
+ /** Pause the loop gracefully. Completes the current round, then suspends.
67
+ * Safe to call from signal handlers or callbacks.
68
+ * Only has effect when the loop is RUNNING. */
69
+ pause(): void;
70
+ /** Resume a paused loop. Re-enters the main loop from currentRound.
71
+ * The loop continues exactly where it was suspended. */
72
+ resume(): Promise<RunResult>;
58
73
  private buildCompileRequest;
74
+ /** Adapt the typed compiler request to the engine envelope once for both
75
+ * normal rounds and enforcement retry attempts. */
76
+ private buildEngineCompileRequest;
59
77
  private startHeartbeat;
60
78
  private heartbeatTick;
61
79
  private stopHeartbeat;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,OAAO,EAEL,aAAa,EAab,KAAK,aAAa,EAClB,KAAK,SAAS,EAKf,MAAM,eAAe,CAAC;AAuKvB,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,cAAc,CAA6B;IAGnD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,wBAAwB,CAA0B;IAG1D,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,sBAAsB,CAAM;IAGpC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAEb,SAAS,EAAE,aAAa;IAMpC,IAAI,MAAM,IAAI,aAAa,CAE1B;IAED,eAAe,IAAI,MAAM;IAIzB,oBAAoB,IAAI,OAAO,EAAE;IAMjC;uDACmD;IACnD,OAAO,CAAC,kBAAkB;IAM1B;6EACyE;IACzE,OAAO,CAAC,kBAAkB;IA+C1B,8EAA8E;IAC9E,OAAO,CAAC,uBAAuB;IAgC/B;+EAC2E;IAC3E,OAAO,CAAC,oBAAoB;IAmB5B;iEAC6D;IACvD,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;IA6TjC,oEAAoE;IACpE,IAAI,IAAI,IAAI;IAWZ,OAAO,CAAC,mBAAmB;IAqD3B,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IAiErB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,wBAAwB;CAUjC;AAMD;;;;;;;;;GASG;AACH,wBAAsB,GAAG,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAGtE"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3C,OAAO,EAEL,aAAa,EAab,KAAK,aAAa,EAClB,KAAK,SAAS,EAMf,MAAM,eAAe,CAAC;AAmFvB,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,cAAc,CAA6B;IAGnD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,wBAAwB,CAA0B;IAG1D,OAAO,CAAC,qBAAqB,CAAK;IAClC;uFACmF;IACnF,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,sBAAsB,CAAM;IACpC,OAAO,CAAC,aAAa,CAAyC;IAG9D,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAmC;IAGxD,OAAO,CAAC,sBAAsB,CAAM;IAGpC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,qBAAqB,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAS;gBAEb,SAAS,EAAE,aAAa;IAOpC,IAAI,MAAM,IAAI,aAAa,CAE1B;IAED,eAAe,IAAI,MAAM;IAIzB,oBAAoB,IAAI,OAAO,EAAE;IAMjC;;8CAE0C;IACpC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;IAWjC,yEAAyE;IACzE,OAAO,CAAC,YAAY;IAepB;;+DAE2D;YAC7C,SAAS;IA2UvB;;gEAE4D;YAC9C,mBAAmB;IA0BjC,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;IAYpB,oEAAoE;IACpE,IAAI,IAAI,IAAI;IAiBZ;;oDAEgD;IAChD,KAAK,IAAI,IAAI;IAQb;6DACyD;IACnD,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAuBlC,OAAO,CAAC,mBAAmB;IAoD3B;uDACmD;IACnD,OAAO,CAAC,yBAAyB;IA0BjC,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,aAAa;IAiDrB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,wBAAwB;CAUjC;AAMD;;;;;;;;;GASG;AACH,wBAAsB,GAAG,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAGtE"}