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
@@ -1,222 +0,0 @@
1
- /** Tests for ReplayBackend — time-travel queries. */
2
- import { describe, it, beforeEach } from "node:test";
3
- import assert from "node:assert/strict";
4
- import { ReplayBackend } from "../replay.js";
5
- import { MemoryBackend } from "./_helpers.js";
6
- function makeEntry(overrides = {}) {
7
- return {
8
- task_id: "loop:test:r1",
9
- loop_lineage: {
10
- loop_id: "test",
11
- round: 1,
12
- goal_id: "audit",
13
- recompile_level: "l2",
14
- task: "Audit contract",
15
- constraints_active: ["check ownership"],
16
- },
17
- technique_used: "few-shot-cot",
18
- success: true,
19
- ...overrides,
20
- };
21
- }
22
- describe("ReplayBackend — getRound", () => {
23
- let backend;
24
- let replay;
25
- beforeEach(() => {
26
- backend = new MemoryBackend();
27
- replay = new ReplayBackend(backend);
28
- });
29
- it("returns entry for existing round", () => {
30
- backend.appendEntry(makeEntry());
31
- const result = replay.getRound("test", 1);
32
- assert.notEqual(result, null);
33
- assert.equal(result.task_id, "loop:test:r1");
34
- });
35
- it("returns null for missing round", () => {
36
- const result = replay.getRound("test", 99);
37
- assert.equal(result, null);
38
- });
39
- it("enriches with full_prompt from markdown", () => {
40
- backend.appendEntry(makeEntry());
41
- backend.markdownFiles.set("test:r1", "## Compiled Prompt\n\nAudit the contract.");
42
- const result = replay.getRound("test", 1);
43
- assert.equal(result.full_prompt, "## Compiled Prompt\n\nAudit the contract.");
44
- });
45
- it("falls back to markdown scan when JSON vault empty", () => {
46
- backend.markdownScans.set("test", [
47
- {
48
- task_id: "loop:test:r1",
49
- loop_lineage: { round: 1, goal_id: "audit", loop_id: "test" },
50
- full_prompt: "## From Markdown",
51
- },
52
- ]);
53
- const result = replay.getRound("test", 1);
54
- assert.notEqual(result, null);
55
- assert.equal(result.full_prompt, "## From Markdown");
56
- });
57
- it("merges feedback success flag", () => {
58
- backend.appendEntry(makeEntry({ success: false }));
59
- backend.appendEntry({
60
- task_id: "loop:test:r1:feedback",
61
- success: true,
62
- });
63
- const result = replay.getRound("test", 1);
64
- assert.equal(result.success, true);
65
- });
66
- });
67
- describe("ReplayBackend — replay", () => {
68
- it("returns all rounds in range", () => {
69
- const backend = new MemoryBackend();
70
- backend.appendEntry(makeEntry({ task_id: "loop:test:r1", loop_lineage: { loop_id: "test", round: 1 } }));
71
- backend.appendEntry(makeEntry({ task_id: "loop:test:r2", loop_lineage: { loop_id: "test", round: 2 } }));
72
- backend.appendEntry(makeEntry({ task_id: "loop:test:r3", loop_lineage: { loop_id: "test", round: 3 } }));
73
- const replay = new ReplayBackend(backend);
74
- const results = replay.replay("test");
75
- assert.equal(results.length, 3);
76
- });
77
- it("respects start/end range", () => {
78
- const backend = new MemoryBackend();
79
- for (let i = 1; i <= 5; i++) {
80
- backend.appendEntry(makeEntry({
81
- task_id: `loop:test:r${i}`,
82
- loop_lineage: { loop_id: "test", round: i },
83
- }));
84
- }
85
- const replay = new ReplayBackend(backend);
86
- const results = replay.replay("test", { start: 2, end: 4 });
87
- assert.equal(results.length, 3);
88
- });
89
- it("returns empty array for empty loop", () => {
90
- const backend = new MemoryBackend();
91
- const replay = new ReplayBackend(backend);
92
- assert.deepEqual(replay.replay("nonexistent"), []);
93
- });
94
- });
95
- describe("ReplayBackend — timeline", () => {
96
- it("returns sorted summary entries", () => {
97
- const backend = new MemoryBackend();
98
- backend.appendEntry(makeEntry({
99
- task_id: "loop:test:r3",
100
- loop_lineage: { loop_id: "test", round: 3, recompile_level: "l1", goal_id: "audit", task: "Fix bugs" },
101
- technique_used: "few-shot",
102
- success: false,
103
- }));
104
- backend.appendEntry(makeEntry({
105
- task_id: "loop:test:r1",
106
- loop_lineage: { loop_id: "test", round: 1, recompile_level: "l2", goal_id: "audit", task: "Audit" },
107
- technique_used: "few-shot-cot",
108
- success: true,
109
- }));
110
- const replay = new ReplayBackend(backend);
111
- const tl = replay.timeline("test");
112
- assert.equal(tl.length, 2);
113
- assert.equal(tl[0].round, 1);
114
- assert.equal(tl[1].round, 3);
115
- assert.equal(tl[0].recompile_level, "l2");
116
- assert.equal(tl[1].recompile_level, "l1");
117
- });
118
- it("returns empty array for unknown loop", () => {
119
- const backend = new MemoryBackend();
120
- const replay = new ReplayBackend(backend);
121
- const tl = replay.timeline("nonexistent");
122
- assert.deepEqual(tl, []);
123
- });
124
- it("falls back to markdown scan for maxRound detection", () => {
125
- const backend = new MemoryBackend();
126
- // Provide all 5 rounds via markdown scan (simulating a loop with
127
- // no JSON vault entries — all data from markdown lineage)
128
- const mdEntries = [];
129
- for (let r = 1; r <= 5; r++) {
130
- mdEntries.push({
131
- task_id: `loop:test:r${r}`,
132
- loop_lineage: { round: r, loop_id: "test", goal_id: "audit" },
133
- });
134
- }
135
- backend.markdownScans.set("test", mdEntries);
136
- const replay = new ReplayBackend(backend);
137
- const results = replay.replay("test");
138
- assert.equal(results.length, 5); // rounds 1-5, all from markdown
139
- assert.equal(results[4]?.loop_lineage?.round, 5);
140
- });
141
- });
142
- describe("ReplayBackend — diff", () => {
143
- it("detects changes between rounds", () => {
144
- const backend = new MemoryBackend();
145
- backend.appendEntry(makeEntry({
146
- task_id: "loop:test:r1",
147
- loop_lineage: { loop_id: "test", round: 1, recompile_level: "l2", goal_id: "audit", task: "Audit ERC20", constraints_active: ["check ownership"] },
148
- technique_used: "few-shot-cot",
149
- success: true,
150
- }));
151
- backend.appendEntry(makeEntry({
152
- task_id: "loop:test:r3",
153
- loop_lineage: { loop_id: "test", round: 3, recompile_level: "l1", goal_id: "audit", task: "Check flash loans", constraints_active: ["check ownership", "check flash loans"] },
154
- technique_used: "few-shot",
155
- success: false,
156
- }));
157
- const replay = new ReplayBackend(backend);
158
- const diff = replay.diff("test", 1, 3);
159
- assert.equal(diff.missing, null);
160
- assert.ok(diff.changes.length > 0);
161
- assert.ok(diff.unchanged.includes("goal_id"));
162
- });
163
- it("handles missing rounds", () => {
164
- const backend = new MemoryBackend();
165
- backend.appendEntry(makeEntry({ task_id: "loop:test:r1" }));
166
- const replay = new ReplayBackend(backend);
167
- const diff = replay.diff("test", 1, 99);
168
- assert.equal(diff.missing, "round_b");
169
- });
170
- it("handles both missing", () => {
171
- const backend = new MemoryBackend();
172
- const replay = new ReplayBackend(backend);
173
- const diff = replay.diff("test", 1, 2);
174
- assert.equal(diff.missing, "both");
175
- });
176
- it("reports added and removed constraints", () => {
177
- const backend = new MemoryBackend();
178
- backend.appendEntry(makeEntry({
179
- task_id: "loop:test:r1",
180
- loop_lineage: {
181
- loop_id: "test", round: 1, recompile_level: "l2", goal_id: "audit",
182
- task: "Initial", constraints_active: ["A", "B"],
183
- },
184
- }));
185
- backend.appendEntry(makeEntry({
186
- task_id: "loop:test:r2",
187
- loop_lineage: {
188
- loop_id: "test", round: 2, recompile_level: "l1", goal_id: "audit",
189
- task: "Updated", constraints_active: ["B", "C"],
190
- },
191
- }));
192
- const replay = new ReplayBackend(backend);
193
- const diff = replay.diff("test", 1, 2);
194
- const changes = diff.changes;
195
- const constraintChange = changes.find((c) => c.field === "constraints_active");
196
- assert.notEqual(constraintChange, undefined);
197
- assert.deepEqual(constraintChange.added, ["C"]);
198
- assert.deepEqual(constraintChange.removed, ["A"]);
199
- });
200
- it("does not report constraints_active as changed when identical", () => {
201
- const backend = new MemoryBackend();
202
- backend.appendEntry(makeEntry({
203
- task_id: "loop:test:r1",
204
- loop_lineage: {
205
- loop_id: "test", round: 1, recompile_level: "l2", goal_id: "x",
206
- constraints_active: ["A"],
207
- },
208
- }));
209
- backend.appendEntry(makeEntry({
210
- task_id: "loop:test:r2",
211
- loop_lineage: {
212
- loop_id: "test", round: 2, recompile_level: "l0", goal_id: "x",
213
- constraints_active: ["A"],
214
- },
215
- }));
216
- const replay = new ReplayBackend(backend);
217
- const diff = replay.diff("test", 1, 2);
218
- const unchanged = diff.unchanged;
219
- assert.ok(unchanged.includes("constraints_active"));
220
- });
221
- });
222
- //# sourceMappingURL=replay.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replay.test.js","sourceRoot":"","sources":["../../src/tests/replay.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /** LoopForge — Runtime tests (v1.2).
2
- *
3
- * Tests: LoopRuntime lifecycle, run() convenience function,
4
- * heartbeat, timeout, stall, stop(), error handling.
5
- */
6
- export {};
7
- //# sourceMappingURL=runtime.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.test.d.ts","sourceRoot":"","sources":["../../src/tests/runtime.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,323 +0,0 @@
1
- /** LoopForge — Runtime tests (v1.2).
2
- *
3
- * Tests: LoopRuntime lifecycle, run() convenience function,
4
- * heartbeat, timeout, stall, stop(), error handling.
5
- */
6
- import { describe, it } from "node:test";
7
- import assert from "node:assert/strict";
8
- import { LoopRuntime, run } from "../runtime.js";
9
- import { RuntimeStatus, makeSelfEvaluation } from "../protocol.js";
10
- // ═══════════════════════════════════════════════════════════════════════════
11
- // Helpers
12
- // ═══════════════════════════════════════════════════════════════════════════
13
- function makeAgentOutput(opts = {}) {
14
- const se = makeSelfEvaluation({
15
- success: true,
16
- output_summary: "Task completed successfully.",
17
- constraint_violations: [],
18
- should_continue: true,
19
- ...opts,
20
- });
21
- return [
22
- "## Result",
23
- "",
24
- "I completed the task as requested.",
25
- "",
26
- "---loopforge-eval",
27
- JSON.stringify(se, null, 2),
28
- "---end-loopforge-eval",
29
- "",
30
- ].join("\n");
31
- }
32
- function makeFailingOutput(violations) {
33
- return makeAgentOutput({
34
- success: false,
35
- output_summary: "Task partially completed.",
36
- constraint_violations: violations,
37
- should_continue: true,
38
- });
39
- }
40
- function mockExecutor(responses) {
41
- let idx = 0;
42
- return async (_prompt, _ctx) => {
43
- if (idx >= responses.length) {
44
- throw new Error("mockExecutor: no more responses");
45
- }
46
- return responses[idx++];
47
- };
48
- }
49
- function slowExecutor(responses, delayMs) {
50
- let idx = 0;
51
- return async (_prompt, _ctx) => {
52
- if (idx >= responses.length) {
53
- throw new Error("slowExecutor: no more responses");
54
- }
55
- await new Promise((r) => setTimeout(r, delayMs));
56
- return responses[idx++];
57
- };
58
- }
59
- // ═══════════════════════════════════════════════════════════════════════════
60
- // run() convenience function
61
- // ═══════════════════════════════════════════════════════════════════════════
62
- describe("run() — convenience function", () => {
63
- it("completes 3-round loop with auto-generated loopId", async () => {
64
- const responses = [
65
- makeAgentOutput({ should_continue: true }),
66
- makeAgentOutput({ should_continue: true }),
67
- makeAgentOutput({ should_continue: false }),
68
- ];
69
- const result = await run({
70
- task: "Test task for minimal config",
71
- execute: mockExecutor(responses),
72
- maxRounds: 10,
73
- });
74
- assert.equal(result.stopReason, "task_complete");
75
- assert.equal(result.success, true);
76
- assert.equal(result.roundsCompleted, 3);
77
- assert.equal(result.successTrajectory.length, 3);
78
- // All rounds should have success true
79
- for (const s of result.successTrajectory) {
80
- assert.equal(s, true);
81
- }
82
- });
83
- it("stops on task_complete when should_continue=false", async () => {
84
- const result = await run({
85
- task: "Test task complete",
86
- execute: mockExecutor([
87
- makeAgentOutput({ should_continue: false }),
88
- ]),
89
- maxRounds: 10,
90
- });
91
- assert.equal(result.stopReason, "task_complete");
92
- assert.equal(result.roundsCompleted, 1);
93
- });
94
- it("stops on max_rounds when agent always continues", async () => {
95
- // Use ascending quality to avoid circuit breaker (flat 5,5,5 fires breaker)
96
- const responses = [
97
- makeAgentOutput({ success: false, constraint_violations: [], should_continue: true }), // quality 1
98
- makeAgentOutput({ success: true, constraint_violations: [], should_continue: true }), // quality 5
99
- makeAgentOutput({ success: true, constraint_violations: [], should_continue: true }), // quality 5
100
- ];
101
- const result = await run({
102
- task: "Test max rounds",
103
- execute: mockExecutor(responses),
104
- maxRounds: 3,
105
- });
106
- assert.equal(result.stopReason, "max_rounds");
107
- assert.equal(result.roundsCompleted, 3);
108
- });
109
- it("stops on executor_failure after consecutive errors", async () => {
110
- let calls = 0;
111
- const result = await run({
112
- task: "Test executor failure",
113
- execute: async () => {
114
- calls++;
115
- throw new Error("API key expired");
116
- },
117
- maxRounds: 10,
118
- maxConsecutiveErrors: 3,
119
- });
120
- assert.equal(result.stopReason, "executor_failure");
121
- assert.equal(calls, 3);
122
- });
123
- it("recovers from a single execute error", async () => {
124
- let calls = 0;
125
- const result = await run({
126
- task: "Test recover from error",
127
- execute: async () => {
128
- calls++;
129
- if (calls === 1)
130
- throw new Error("transient error");
131
- return makeAgentOutput({ should_continue: false });
132
- },
133
- maxRounds: 10,
134
- });
135
- // Should succeed — only 1 error, not 3 consecutive
136
- assert.equal(result.stopReason, "task_complete");
137
- assert.equal(calls, 2);
138
- });
139
- });
140
- // ═══════════════════════════════════════════════════════════════════════════
141
- // LoopRuntime class
142
- // ═══════════════════════════════════════════════════════════════════════════
143
- describe("LoopRuntime", () => {
144
- it("status transitions: IDLE → RUNNING → STOPPED", async () => {
145
- const rt = new LoopRuntime({
146
- task: "Test status transitions",
147
- execute: mockExecutor([
148
- makeAgentOutput({ should_continue: false }),
149
- ]),
150
- });
151
- assert.equal(rt.status, "idle");
152
- const result = await rt.start();
153
- assert.equal(result.stopReason, "task_complete");
154
- // After start() resolves, runtime is stopped
155
- const finalStatus = rt.status;
156
- assert.notEqual(finalStatus, RuntimeStatus.RUNNING);
157
- assert.notEqual(finalStatus, RuntimeStatus.IDLE);
158
- });
159
- it("stop() mid-loop stops gracefully", async () => {
160
- const rt = new LoopRuntime({
161
- task: "Test stop mid-loop",
162
- execute: mockExecutor([
163
- makeAgentOutput({ should_continue: true }),
164
- makeAgentOutput({ should_continue: true }),
165
- makeAgentOutput({ should_continue: true }),
166
- ]),
167
- maxRounds: 10,
168
- onRoundComplete: (info) => {
169
- if (info.round === 2) {
170
- rt.stop();
171
- }
172
- },
173
- });
174
- const result = await rt.start();
175
- assert.equal(result.stopReason, "stopped");
176
- // stop() is called in round 2's onRoundComplete; the for-loop
177
- // increments to round 3 before checking status, so roundsCompleted
178
- // reflects the incremented counter
179
- assert.ok(result.roundsCompleted <= 3);
180
- });
181
- it("getCurrentRound and getSuccessTrajectory work", async () => {
182
- const rt = new LoopRuntime({
183
- task: "Test accessors",
184
- execute: mockExecutor([
185
- makeAgentOutput({ should_continue: true }),
186
- makeAgentOutput({ should_continue: false }),
187
- ]),
188
- maxRounds: 10,
189
- });
190
- assert.equal(rt.getCurrentRound(), 1); // before start
191
- assert.equal(rt.getSuccessTrajectory().length, 0);
192
- await rt.start();
193
- assert.equal(rt.getSuccessTrajectory().length, 2);
194
- });
195
- });
196
- // ═══════════════════════════════════════════════════════════════════════════
197
- // Heartbeat & timeout
198
- // ═══════════════════════════════════════════════════════════════════════════
199
- describe("Heartbeat & timeout", () => {
200
- it("heartbeat events fire during slow execute", async () => {
201
- const heartbeats = [];
202
- const result = await run({
203
- task: "Test heartbeat",
204
- execute: slowExecutor([makeAgentOutput({ should_continue: false })], 150),
205
- heartbeatIntervalMs: 50,
206
- roundTimeoutMs: 5000,
207
- maxRounds: 10,
208
- onHeartbeat: (info) => {
209
- heartbeats.push(info);
210
- },
211
- });
212
- assert.equal(result.stopReason, "task_complete");
213
- // Should have received at least one heartbeat during the 150ms delay
214
- assert.ok(heartbeats.length >= 1, `expected >=1 heartbeats, got ${heartbeats.length}`);
215
- });
216
- it("timeout sets signal.aborted", async () => {
217
- let signalWasAborted = false;
218
- const result = await run({
219
- task: "Test timeout",
220
- execute: async (_prompt, ctx) => {
221
- // Sleep past the timeout
222
- await new Promise((r) => setTimeout(r, 200));
223
- if (ctx && ctx.signal.aborted) {
224
- signalWasAborted = true;
225
- }
226
- return makeAgentOutput({ should_continue: false });
227
- },
228
- roundTimeoutMs: 50,
229
- heartbeatIntervalMs: 25,
230
- stallGraceMs: 5000,
231
- maxRounds: 10,
232
- });
233
- assert.equal(result.stopReason, "task_complete");
234
- assert.ok(signalWasAborted, "signal.aborted should be true after timeout");
235
- });
236
- it("interactive mode does not trigger timeout", async () => {
237
- let timeoutFired = false;
238
- const result = await run({
239
- task: "Test interactive",
240
- execute: async (_prompt, _ctx) => {
241
- await new Promise((r) => setTimeout(r, 150));
242
- return makeAgentOutput({ should_continue: false });
243
- },
244
- interactive: true,
245
- roundTimeoutMs: 50,
246
- heartbeatIntervalMs: 25,
247
- maxRounds: 10,
248
- onTimeout: () => {
249
- timeoutFired = true;
250
- },
251
- });
252
- assert.equal(result.stopReason, "task_complete");
253
- assert.equal(timeoutFired, false);
254
- });
255
- it("reportProgress resets stall timer", async () => {
256
- let reported = false;
257
- const result = await run({
258
- task: "Test reportProgress",
259
- execute: async (_prompt, ctx) => {
260
- ctx?.reportProgress("still working...");
261
- reported = true;
262
- await new Promise((r) => setTimeout(r, 50));
263
- return makeAgentOutput({ should_continue: false });
264
- },
265
- roundTimeoutMs: 5000,
266
- heartbeatIntervalMs: 20,
267
- maxRounds: 10,
268
- });
269
- assert.equal(result.stopReason, "task_complete");
270
- assert.ok(reported);
271
- });
272
- });
273
- // ═══════════════════════════════════════════════════════════════════════════
274
- // Circuit breaker & extraction failure
275
- // ═══════════════════════════════════════════════════════════════════════════
276
- describe("Circuit breaker & extraction", () => {
277
- it("circuit breaker triggers after consecutive failures", async () => {
278
- // Generate failing outputs for 5+ rounds to trigger circuit breaker
279
- const responses = Array.from({ length: 10 }, () => makeFailingOutput(["violated constraint X"]));
280
- const result = await run({
281
- task: "Test circuit breaker",
282
- execute: mockExecutor(responses),
283
- maxRounds: 10,
284
- });
285
- // Either circuit_breaker or max_rounds — depends on policy
286
- assert.ok(result.stopReason === "circuit_breaker" ||
287
- result.stopReason === "max_rounds", `expected circuit_breaker or max_rounds, got ${result.stopReason}`);
288
- });
289
- it("stops on extraction failure (no eval block)", async () => {
290
- const result = await run({
291
- task: "Test extraction failure",
292
- execute: mockExecutor([
293
- makeAgentOutput({ should_continue: true }),
294
- "No structured eval block here, still need to continue working on more tasks.", // heuristic will detect "remaining" → should_continue=true, but extraction is heuristic → stalled
295
- ]),
296
- maxRounds: 10,
297
- });
298
- // Extraction via heuristic → extractionSucceeded=false → stalled
299
- assert.equal(result.stopReason, "stalled");
300
- });
301
- });
302
- // ═══════════════════════════════════════════════════════════════════════════
303
- // Stall detection
304
- // ═══════════════════════════════════════════════════════════════════════════
305
- describe("Stall detection", () => {
306
- it("stalls when execute exceeds timeout + stall grace", async () => {
307
- const result = await run({
308
- task: "Test stall",
309
- execute: async (_prompt, _ctx) => {
310
- // Sleep past timeout + stall grace
311
- await new Promise((r) => setTimeout(r, 300));
312
- return makeAgentOutput({ should_continue: false });
313
- },
314
- roundTimeoutMs: 50,
315
- heartbeatIntervalMs: 25,
316
- stallGraceMs: 50,
317
- maxRounds: 10,
318
- });
319
- // Should be stalled (status was set to STALLED but execute returned)
320
- assert.ok(["stalled", "task_complete"].includes(result.stopReason), `expected stalled or task_complete, got ${result.stopReason}`);
321
- });
322
- });
323
- //# sourceMappingURL=runtime.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.test.js","sourceRoot":"","sources":["../../src/tests/runtime.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=verification-gate.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verification-gate.test.d.ts","sourceRoot":"","sources":["../../src/tests/verification-gate.test.ts"],"names":[],"mappings":""}