loopforge 1.0.0 → 1.3.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 (83) hide show
  1. package/dist/autonomous.d.ts +84 -0
  2. package/dist/autonomous.d.ts.map +1 -0
  3. package/dist/autonomous.js +250 -0
  4. package/dist/autonomous.js.map +1 -0
  5. package/dist/backends/ai.d.ts +37 -0
  6. package/dist/backends/ai.d.ts.map +1 -0
  7. package/dist/backends/ai.js +98 -0
  8. package/dist/backends/ai.js.map +1 -0
  9. package/dist/cli.d.ts +1 -1
  10. package/dist/cli.js +68 -6
  11. package/dist/cli.js.map +1 -1
  12. package/dist/engine.d.ts +15 -1
  13. package/dist/engine.d.ts.map +1 -1
  14. package/dist/engine.js +102 -1
  15. package/dist/engine.js.map +1 -1
  16. package/dist/generate-schema.js +56 -4
  17. package/dist/generate-schema.js.map +1 -1
  18. package/dist/index.d.ts +23 -5
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +22 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/loop-compiler.d.ts +4 -0
  23. package/dist/loop-compiler.d.ts.map +1 -1
  24. package/dist/loop-compiler.js +43 -0
  25. package/dist/loop-compiler.js.map +1 -1
  26. package/dist/mcp/server.d.ts +14 -0
  27. package/dist/mcp/server.d.ts.map +1 -0
  28. package/dist/mcp/server.js +93 -0
  29. package/dist/mcp/server.js.map +1 -0
  30. package/dist/mcp/session.d.ts +57 -0
  31. package/dist/mcp/session.d.ts.map +1 -0
  32. package/dist/mcp/session.js +177 -0
  33. package/dist/mcp/session.js.map +1 -0
  34. package/dist/mcp/tools.d.ts +108 -0
  35. package/dist/mcp/tools.d.ts.map +1 -0
  36. package/dist/mcp/tools.js +191 -0
  37. package/dist/mcp/tools.js.map +1 -0
  38. package/dist/mcp-server.d.ts +12 -0
  39. package/dist/mcp-server.d.ts.map +1 -0
  40. package/dist/mcp-server.js +14 -0
  41. package/dist/mcp-server.js.map +1 -0
  42. package/dist/policy.d.ts +8 -0
  43. package/dist/policy.d.ts.map +1 -1
  44. package/dist/policy.js +7 -0
  45. package/dist/policy.js.map +1 -1
  46. package/dist/protocol.d.ts +89 -1
  47. package/dist/protocol.d.ts.map +1 -1
  48. package/dist/protocol.js +20 -1
  49. package/dist/protocol.js.map +1 -1
  50. package/dist/runtime.d.ts +57 -0
  51. package/dist/runtime.d.ts.map +1 -0
  52. package/dist/runtime.js +414 -0
  53. package/dist/runtime.js.map +1 -0
  54. package/dist/tests/_helpers.d.ts +25 -0
  55. package/dist/tests/_helpers.d.ts.map +1 -0
  56. package/dist/tests/_helpers.js +47 -0
  57. package/dist/tests/_helpers.js.map +1 -0
  58. package/dist/tests/autonomous.test.d.ts +7 -0
  59. package/dist/tests/autonomous.test.d.ts.map +1 -0
  60. package/dist/tests/autonomous.test.js +294 -0
  61. package/dist/tests/autonomous.test.js.map +1 -0
  62. package/dist/tests/generate-schema.test.js +2 -2
  63. package/dist/tests/generate-schema.test.js.map +1 -1
  64. package/dist/tests/mcp.test.d.ts +7 -0
  65. package/dist/tests/mcp.test.d.ts.map +1 -0
  66. package/dist/tests/mcp.test.js +212 -0
  67. package/dist/tests/mcp.test.js.map +1 -0
  68. package/dist/tests/replay.test.js +69 -41
  69. package/dist/tests/replay.test.js.map +1 -1
  70. package/dist/tests/runtime.test.d.ts +7 -0
  71. package/dist/tests/runtime.test.d.ts.map +1 -0
  72. package/dist/tests/runtime.test.js +323 -0
  73. package/dist/tests/runtime.test.js.map +1 -0
  74. package/loop_policy.json +7 -0
  75. package/package.json +9 -3
  76. package/skills/perception/SKILL.md +186 -0
  77. package/skills/prompt-techniques/SKILL.md +52 -0
  78. package/skills/prompt-techniques/references/chain-of-thought.md +207 -0
  79. package/skills/prompt-techniques/references/few-shot.md +174 -0
  80. package/skills/prompt-techniques/references/least-to-most.md +182 -0
  81. package/skills/prompt-techniques/references/step-back.md +160 -0
  82. package/skills/prompt-techniques/references/tree-of-thought.md +191 -0
  83. package/skills/prompt-techniques/references/zero-shot.md +97 -0
@@ -0,0 +1,294 @@
1
+ /** LoopForge — Autonomous loop tests (v1.1).
2
+ *
3
+ * Tests: extractSelfEvaluation, heuristicSelfEvaluation, buildSelfEvalBlock,
4
+ * autoFeedback, runOneRound.
5
+ */
6
+ import { describe, it } from "node:test";
7
+ import assert from "node:assert/strict";
8
+ import { tmpdir } from "node:os";
9
+ import { mkdtempSync } from "node:fs";
10
+ import { join } from "node:path";
11
+ import { extractSelfEvaluation, heuristicSelfEvaluation, createEngine, } from "../engine.js";
12
+ import { buildSelfEvalBlock } from "../loop-compiler.js";
13
+ import { makeSelfEvaluation } from "../protocol.js";
14
+ import { runOneRound } from "../autonomous.js";
15
+ // ═══════════════════════════════════════════════════════════════════════════
16
+ // Helpers
17
+ // ═══════════════════════════════════════════════════════════════════════════
18
+ function makeAgentOutput(evalOverrides = {}) {
19
+ const se = makeSelfEvaluation({
20
+ success: true,
21
+ output_summary: "Found 3 vulnerabilities in the ERC20 contract.",
22
+ constraint_violations: [],
23
+ should_continue: true,
24
+ ...evalOverrides,
25
+ });
26
+ return [
27
+ "## Security Audit Results",
28
+ "",
29
+ "I audited the ERC20 contract and found 3 issues:",
30
+ "- Reentrancy in withdraw()",
31
+ "- Integer overflow in transfer()",
32
+ "- Missing access control in mint()",
33
+ "",
34
+ "---loopforge-eval",
35
+ JSON.stringify(se, null, 2),
36
+ "---end-loopforge-eval",
37
+ "",
38
+ "All issues have been documented with PoC exploits.",
39
+ ].join("\n");
40
+ }
41
+ function makeTmpDir() {
42
+ const dir = mkdtempSync(join(tmpdir(), "loopforge-test-"));
43
+ return dir;
44
+ }
45
+ // ═══════════════════════════════════════════════════════════════════════════
46
+ // extractSelfEvaluation
47
+ // ═══════════════════════════════════════════════════════════════════════════
48
+ describe("extractSelfEvaluation", () => {
49
+ it("extracts valid self-evaluation from agent output", () => {
50
+ const output = makeAgentOutput({ success: true, should_continue: false });
51
+ const result = extractSelfEvaluation(output);
52
+ assert.ok(result !== null);
53
+ assert.equal(result.success, true);
54
+ assert.equal(result.should_continue, false);
55
+ assert.equal(result.constraint_violations.length, 0);
56
+ assert.ok(result.output_summary.includes("vulnerabilities"));
57
+ });
58
+ it("returns null when no eval block present", () => {
59
+ const output = "Just some regular text without any eval block.";
60
+ const result = extractSelfEvaluation(output);
61
+ assert.equal(result, null);
62
+ });
63
+ it("returns null for invalid JSON in eval block", () => {
64
+ const output = [
65
+ "---loopforge-eval",
66
+ "{invalid json here}",
67
+ "---end-loopforge-eval",
68
+ ].join("\n");
69
+ const result = extractSelfEvaluation(output);
70
+ assert.equal(result, null);
71
+ });
72
+ it("returns null when required fields are missing", () => {
73
+ const output = [
74
+ "---loopforge-eval",
75
+ JSON.stringify({ success: true }),
76
+ "---end-loopforge-eval",
77
+ ].join("\n");
78
+ const result = extractSelfEvaluation(output);
79
+ assert.equal(result, null);
80
+ });
81
+ it("returns null when success is not boolean", () => {
82
+ const output = [
83
+ "---loopforge-eval",
84
+ JSON.stringify({
85
+ success: "yes",
86
+ output_summary: "done",
87
+ constraint_violations: [],
88
+ should_continue: false,
89
+ }),
90
+ "---end-loopforge-eval",
91
+ ].join("\n");
92
+ const result = extractSelfEvaluation(output);
93
+ assert.equal(result, null);
94
+ });
95
+ it("extracts eval with constraint violations", () => {
96
+ const output = makeAgentOutput({
97
+ success: false,
98
+ constraint_violations: ["Modified file outside scope"],
99
+ should_continue: true,
100
+ });
101
+ const result = extractSelfEvaluation(output);
102
+ assert.ok(result !== null);
103
+ assert.equal(result.success, false);
104
+ assert.equal(result.constraint_violations.length, 1);
105
+ assert.equal(result.constraint_violations[0], "Modified file outside scope");
106
+ });
107
+ });
108
+ // ═══════════════════════════════════════════════════════════════════════════
109
+ // heuristicSelfEvaluation
110
+ // ═══════════════════════════════════════════════════════════════════════════
111
+ describe("heuristicSelfEvaluation", () => {
112
+ it("detects success from completion keywords", () => {
113
+ const output = "Task completed successfully. All tests pass. The module is ready.";
114
+ const result = heuristicSelfEvaluation(output);
115
+ assert.ok(result !== null);
116
+ assert.equal(result.success, true);
117
+ });
118
+ it("detects failure from error keywords", () => {
119
+ const output = "Failed to compile. Error: Cannot find module 'express'. Exception thrown.";
120
+ const result = heuristicSelfEvaluation(output);
121
+ assert.ok(result !== null);
122
+ assert.equal(result.success, false);
123
+ });
124
+ it("detects remaining work", () => {
125
+ const output = "Partially completed. Still need to implement the authentication module. Continue with step 3.";
126
+ const result = heuristicSelfEvaluation(output);
127
+ assert.ok(result !== null);
128
+ assert.equal(result.should_continue, true);
129
+ });
130
+ it("returns null for empty text", () => {
131
+ // heuristicSelfEvaluation never returns null — it always produces a best-effort result
132
+ const result = heuristicSelfEvaluation("");
133
+ assert.ok(result !== null);
134
+ });
135
+ });
136
+ // ═══════════════════════════════════════════════════════════════════════════
137
+ // buildSelfEvalBlock
138
+ // ═══════════════════════════════════════════════════════════════════════════
139
+ describe("buildSelfEvalBlock", () => {
140
+ it("includes the round number", () => {
141
+ const block = buildSelfEvalBlock(5);
142
+ assert.ok(block.includes("5"));
143
+ });
144
+ it("includes required markers", () => {
145
+ const block = buildSelfEvalBlock(1);
146
+ assert.ok(block.includes("---loopforge-eval"));
147
+ assert.ok(block.includes("---end-loopforge-eval"));
148
+ assert.ok(block.includes("success"));
149
+ assert.ok(block.includes("output_summary"));
150
+ assert.ok(block.includes("constraint_violations"));
151
+ assert.ok(block.includes("should_continue"));
152
+ });
153
+ it("includes field rules", () => {
154
+ const block = buildSelfEvalBlock(1);
155
+ assert.ok(block.includes("Field rules"));
156
+ assert.ok(block.includes("true ONLY if"));
157
+ });
158
+ it("produces different output for different rounds", () => {
159
+ const b1 = buildSelfEvalBlock(1);
160
+ const b2 = buildSelfEvalBlock(2);
161
+ assert.notEqual(b1, b2);
162
+ });
163
+ });
164
+ // ═══════════════════════════════════════════════════════════════════════════
165
+ // autoFeedback
166
+ // ═══════════════════════════════════════════════════════════════════════════
167
+ describe("Engine — autoFeedback", () => {
168
+ it("records self-evaluation without errors", () => {
169
+ const engine = createEngine();
170
+ const se = makeSelfEvaluation({
171
+ success: true,
172
+ output_summary: "Task completed successfully.",
173
+ constraint_violations: [],
174
+ should_continue: false,
175
+ });
176
+ const quality = engine.autoFeedback(se, "test-loop", 1, "Test task");
177
+ assert.equal(quality, 5);
178
+ });
179
+ it("scores quality=2 for failed round with violations", () => {
180
+ const engine = createEngine();
181
+ const se = makeSelfEvaluation({
182
+ success: false,
183
+ output_summary: "Failed to complete.",
184
+ constraint_violations: ["broke constraint X"],
185
+ should_continue: true,
186
+ });
187
+ const quality = engine.autoFeedback(se, "test-loop", 1, "Test task");
188
+ assert.equal(quality, 2);
189
+ });
190
+ it("updates quality trend", () => {
191
+ const engine = createEngine();
192
+ const se = makeSelfEvaluation({
193
+ success: true,
194
+ output_summary: "done",
195
+ constraint_violations: [],
196
+ should_continue: true,
197
+ });
198
+ engine.autoFeedback(se, "test-loop", 1, "Test task");
199
+ assert.ok(engine.state !== null);
200
+ assert.equal(engine.state.quality_trend.length, 1);
201
+ assert.equal(engine.state.quality_trend[0], 5);
202
+ });
203
+ });
204
+ // ═══════════════════════════════════════════════════════════════════════════
205
+ // runOneRound
206
+ // ═══════════════════════════════════════════════════════════════════════════
207
+ describe("runOneRound — autonomous loop", () => {
208
+ const baseConfig = {
209
+ task: "Audit ERC20 token for security vulnerabilities",
210
+ loopId: "audit-erc20",
211
+ goalId: "audit",
212
+ maxRounds: 10,
213
+ };
214
+ it("round 1 produces L2 prompt without stopping", () => {
215
+ const engine = createEngine();
216
+ const result = runOneRound(engine, baseConfig, 1, null);
217
+ assert.equal(result.stopNow, false);
218
+ assert.ok(result.roundOutput !== null);
219
+ assert.equal(result.roundOutput.round, 1);
220
+ assert.ok(result.roundOutput.prompt.length > 100);
221
+ // Round 1 prompt should include self-eval instructions
222
+ assert.ok(result.roundOutput.prompt.includes("---loopforge-eval"));
223
+ assert.ok(result.roundOutput.prompt.includes("Self-Evaluation"));
224
+ // No self-eval for round 1 (no prior agent output)
225
+ assert.equal(result.selfEval, null);
226
+ });
227
+ it("round 2 extracts self-eval from agent output and compiles", () => {
228
+ const engine = createEngine();
229
+ // First, establish round 1 lineage
230
+ const se1 = makeSelfEvaluation({
231
+ success: true,
232
+ output_summary: "Round 1: found 3 vulns.",
233
+ constraint_violations: [],
234
+ should_continue: true,
235
+ });
236
+ engine.autoFeedback(se1, "audit-erc20", 1, baseConfig.task);
237
+ // Now run round 2 with agent output
238
+ const agentOutput = makeAgentOutput({
239
+ success: true,
240
+ output_summary: "Round 1: found 3 vulns in ERC20.",
241
+ constraint_violations: [],
242
+ should_continue: true,
243
+ });
244
+ const result = runOneRound(engine, baseConfig, 2, agentOutput);
245
+ assert.equal(result.stopNow, false);
246
+ assert.ok(result.roundOutput !== null);
247
+ assert.equal(result.roundOutput.round, 2);
248
+ assert.ok(result.selfEval !== null);
249
+ assert.equal(result.selfEval.success, true);
250
+ assert.ok(result.extractionSucceeded);
251
+ });
252
+ it("stops when agent reports should_continue=false", () => {
253
+ const engine = createEngine();
254
+ // Round 1 lineage
255
+ engine.autoFeedback(makeSelfEvaluation({ success: true, output_summary: "r1", constraint_violations: [], should_continue: true }), "audit-erc20", 1, baseConfig.task);
256
+ // Round 2 agent output says task complete
257
+ const agentOutput = makeAgentOutput({
258
+ success: true,
259
+ output_summary: "All done.",
260
+ constraint_violations: [],
261
+ should_continue: false,
262
+ });
263
+ const result = runOneRound(engine, baseConfig, 2, agentOutput);
264
+ assert.equal(result.stopNow, true);
265
+ assert.equal(result.stopReason, "task_complete");
266
+ assert.equal(result.roundOutput, null);
267
+ });
268
+ it("stops when max rounds exceeded", () => {
269
+ const engine = createEngine();
270
+ const config = { ...baseConfig, maxRounds: 3 };
271
+ const result = runOneRound(engine, config, 4, null);
272
+ assert.equal(result.stopNow, true);
273
+ assert.equal(result.stopReason, "max_rounds");
274
+ });
275
+ it("stops on extraction failure (no eval block in output)", () => {
276
+ const engine = createEngine();
277
+ engine.autoFeedback(makeSelfEvaluation({ success: true, output_summary: "r1", constraint_violations: [], should_continue: true }), "audit-erc20", 1, baseConfig.task);
278
+ const badOutput = "Just some text without any eval block.";
279
+ const result = runOneRound(engine, baseConfig, 2, badOutput);
280
+ assert.equal(result.stopNow, true);
281
+ assert.equal(result.stopReason, "extraction_failed");
282
+ });
283
+ it("prompt includes self-eval block on every round", () => {
284
+ const engine = createEngine();
285
+ // Round 1
286
+ const r1 = runOneRound(engine, baseConfig, 1, null);
287
+ assert.ok(r1.roundOutput.prompt.includes("---loopforge-eval"));
288
+ // Round 2
289
+ engine.autoFeedback(makeSelfEvaluation({ success: true, output_summary: "r1 done", constraint_violations: [], should_continue: true }), "audit-erc20", 1, baseConfig.task);
290
+ const r2 = runOneRound(engine, baseConfig, 2, makeAgentOutput({ success: true, output_summary: "r1", constraint_violations: [], should_continue: true }));
291
+ assert.ok(r2.roundOutput.prompt.includes("---loopforge-eval"));
292
+ });
293
+ });
294
+ //# sourceMappingURL=autonomous.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomous.test.js","sourceRoot":"","sources":["../../src/tests/autonomous.test.ts"],"names":[],"mappings":"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"}
@@ -33,9 +33,9 @@ describe("Generated JSON Schema — top-level", () => {
33
33
  assert.ok(String(schema.$id ?? "").includes("loopforge"));
34
34
  assert.ok(String(schema.title ?? "").includes("LoopForge"));
35
35
  });
36
- it("has 17 $defs (3 enums + 14 interfaces)", () => {
36
+ it("has 28 $defs (4 enums + 23 interfaces + 1 type alias)", () => {
37
37
  const names = Object.keys(defs);
38
- assert.equal(names.length, 17, `expected 17, got ${names.length}: ${names.join(", ")}`);
38
+ assert.equal(names.length, 28, `expected 28, got ${names.length}: ${names.join(", ")}`);
39
39
  });
40
40
  });
41
41
  // ═══════════════════════════════════════════════════════════════════════════
@@ -1 +1 @@
1
- {"version":3,"file":"generate-schema.test.js","sourceRoot":"","sources":["../../src/tests/generate-schema.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-schema.test.js","sourceRoot":"","sources":["../../src/tests/generate-schema.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Tests for MCP server — session lifecycle and tool handlers.
2
+ *
3
+ * Process-inline: handlers are called directly (no stdio).
4
+ * Uses MemoryBackend from _helpers.ts — no disk I/O.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=mcp.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.test.d.ts","sourceRoot":"","sources":["../../src/tests/mcp.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,212 @@
1
+ /** Tests for MCP server — session lifecycle and tool handlers.
2
+ *
3
+ * Process-inline: handlers are called directly (no stdio).
4
+ * Uses MemoryBackend from _helpers.ts — no disk I/O.
5
+ */
6
+ import { describe, it, beforeEach } from "node:test";
7
+ import assert from "node:assert/strict";
8
+ import { MemoryBackend } from "./_helpers.js";
9
+ // ═══════════════════════════════════════════════════════════════════════════
10
+ // Helpers
11
+ // ═══════════════════════════════════════════════════════════════════════════
12
+ /** Build agent output with a valid self-eval block. */
13
+ function agentOutput(opts) {
14
+ const evalBlock = {
15
+ success: opts.success ?? true,
16
+ output_summary: opts.body ?? "Completed the task successfully.",
17
+ constraint_violations: opts.violations ?? [],
18
+ should_continue: opts.shouldContinue ?? true,
19
+ };
20
+ return [
21
+ opts.body ?? "## Round Output\n\nAll checks passed.",
22
+ "",
23
+ "---loopforge-eval",
24
+ JSON.stringify(evalBlock),
25
+ "---end-loopforge-eval",
26
+ ].join("\n");
27
+ }
28
+ /** Build agent output without a self-eval block (triggers stalled). */
29
+ function agentOutputNoEval(body) {
30
+ return body ?? "## Round Output\n\nTask done. No eval block here.";
31
+ }
32
+ import { SessionManager } from "../mcp/session.js";
33
+ import { TOOL_HANDLERS } from "../mcp/tools.js";
34
+ import { resetPolicy } from "../policy.js";
35
+ // ═══════════════════════════════════════════════════════════════════════════
36
+ // Tests
37
+ // ═══════════════════════════════════════════════════════════════════════════
38
+ describe("MCP — loopforge_start", () => {
39
+ let backend;
40
+ let mgr;
41
+ beforeEach(() => {
42
+ resetPolicy();
43
+ backend = new MemoryBackend();
44
+ mgr = new SessionManager(backend);
45
+ });
46
+ it("returns sessionId + Round 1 prompt (L2 compile)", () => {
47
+ const result = TOOL_HANDLERS.loopforge_start(mgr, { task: "Audit ERC20 token" });
48
+ assert.equal(typeof result.sessionId, "string");
49
+ assert.ok(result.sessionId.length > 0);
50
+ assert.equal(result.round, 1);
51
+ assert.equal(typeof result.prompt, "string");
52
+ assert.ok(result.prompt.length > 0);
53
+ assert.ok(result.prompt.includes("LoopForge"));
54
+ assert.equal(typeof result.technique, "string");
55
+ assert.equal(typeof result.level, "string");
56
+ });
57
+ });
58
+ describe("MCP — multi-round lifecycle", () => {
59
+ let backend;
60
+ let mgr;
61
+ beforeEach(() => {
62
+ resetPolicy();
63
+ backend = new MemoryBackend();
64
+ mgr = new SessionManager(backend);
65
+ });
66
+ it("start → next × 3 → task_complete", () => {
67
+ // Round 1
68
+ const start = TOOL_HANDLERS.loopforge_start(mgr, {
69
+ task: "Audit ERC20",
70
+ maxRounds: 20,
71
+ });
72
+ const sessionId = String(start.sessionId);
73
+ // Round 1 → 2 (ascending quality [2, ...] avoids breaker)
74
+ const r1 = TOOL_HANDLERS.loopforge_next(mgr, {
75
+ sessionId,
76
+ output: agentOutput({ success: false, violations: ["missed check"], shouldContinue: true }),
77
+ });
78
+ assert.equal(r1.stopReason, undefined, "round 2 should not stop");
79
+ assert.equal(r1.round, 2);
80
+ assert.ok(typeof r1.prompt === "string");
81
+ // Round 2 → 3 (quality 5)
82
+ const r2 = TOOL_HANDLERS.loopforge_next(mgr, {
83
+ sessionId,
84
+ output: agentOutput({ success: true, shouldContinue: true }),
85
+ });
86
+ assert.equal(r2.stopReason, undefined, "round 3 should not stop");
87
+ assert.equal(r2.round, 3);
88
+ // Round 3 → stop (should_continue: false)
89
+ const r3 = TOOL_HANDLERS.loopforge_next(mgr, {
90
+ sessionId,
91
+ output: agentOutput({ success: true, shouldContinue: false }),
92
+ });
93
+ assert.equal(r3.prompt, null);
94
+ assert.equal(r3.stopReason, "task_complete");
95
+ assert.equal(r3.round, 3);
96
+ });
97
+ it("next without eval block → stalled", () => {
98
+ const start = TOOL_HANDLERS.loopforge_start(mgr, { task: "Test stalled" });
99
+ const sessionId = String(start.sessionId);
100
+ const result = TOOL_HANDLERS.loopforge_next(mgr, {
101
+ sessionId,
102
+ output: agentOutputNoEval(),
103
+ });
104
+ assert.equal(result.prompt, null);
105
+ assert.equal(result.stopReason, "stalled");
106
+ });
107
+ it("next with consecutive flat quality → circuit_breaker", () => {
108
+ const start = TOOL_HANDLERS.loopforge_start(mgr, {
109
+ task: "Breaker test",
110
+ maxRounds: 20,
111
+ });
112
+ const sessionId = String(start.sessionId);
113
+ // 3 rounds of identical high quality = [5, 5, 5] → breaker fires
114
+ TOOL_HANDLERS.loopforge_next(mgr, {
115
+ sessionId,
116
+ output: agentOutput({ success: true, shouldContinue: true }),
117
+ });
118
+ TOOL_HANDLERS.loopforge_next(mgr, {
119
+ sessionId,
120
+ output: agentOutput({ success: true, shouldContinue: true }),
121
+ });
122
+ const r3 = TOOL_HANDLERS.loopforge_next(mgr, {
123
+ sessionId,
124
+ output: agentOutput({ success: true, shouldContinue: true }),
125
+ });
126
+ assert.equal(r3.prompt, null);
127
+ assert.equal(r3.stopReason, "circuit_breaker");
128
+ });
129
+ it("next at maxRounds stops", () => {
130
+ const start = TOOL_HANDLERS.loopforge_start(mgr, {
131
+ task: "Short loop",
132
+ maxRounds: 2,
133
+ });
134
+ const sessionId = String(start.sessionId);
135
+ // Round 1 → 2 (use ascending quality to avoid breaker)
136
+ const r1 = TOOL_HANDLERS.loopforge_next(mgr, {
137
+ sessionId,
138
+ output: agentOutput({ success: false, violations: ["x"], shouldContinue: true }),
139
+ });
140
+ assert.equal(r1.stopReason, undefined);
141
+ // Round 2 → stop (maxRounds reached)
142
+ const r2 = TOOL_HANDLERS.loopforge_next(mgr, {
143
+ sessionId,
144
+ output: agentOutput({ success: true, shouldContinue: true }),
145
+ });
146
+ assert.equal(r2.prompt, null);
147
+ assert.equal(r2.stopReason, "max_rounds");
148
+ assert.equal(r2.round, 2);
149
+ });
150
+ });
151
+ describe("MCP — status / list / stop / replay", () => {
152
+ let backend;
153
+ let mgr;
154
+ beforeEach(() => {
155
+ resetPolicy();
156
+ backend = new MemoryBackend();
157
+ mgr = new SessionManager(backend);
158
+ });
159
+ it("status returns correct round, quality, status", () => {
160
+ const start = TOOL_HANDLERS.loopforge_start(mgr, { task: "Status test" });
161
+ const sessionId = String(start.sessionId);
162
+ // Advance once to populate quality
163
+ TOOL_HANDLERS.loopforge_next(mgr, {
164
+ sessionId,
165
+ output: agentOutput({ success: true, shouldContinue: true }),
166
+ });
167
+ const status = TOOL_HANDLERS.loopforge_status(mgr, { sessionId });
168
+ assert.equal(status.sessionId, sessionId);
169
+ assert.equal(status.round, 2);
170
+ assert.equal(status.status, "running");
171
+ assert.ok(status.qualityTrajectory.length >= 1);
172
+ });
173
+ it("list returns multiple sessions", () => {
174
+ TOOL_HANDLERS.loopforge_start(mgr, { task: "Task A" });
175
+ TOOL_HANDLERS.loopforge_start(mgr, { task: "Task B" });
176
+ const result = TOOL_HANDLERS.loopforge_list(mgr, {});
177
+ const sessions = result.sessions;
178
+ assert.equal(sessions.length, 2);
179
+ assert.ok(sessions.every((s) => typeof s.sessionId === "string"));
180
+ });
181
+ it("stop manually returns final trajectory", () => {
182
+ const start = TOOL_HANDLERS.loopforge_start(mgr, { task: "Stop test" });
183
+ const sessionId = String(start.sessionId);
184
+ // Advance once
185
+ TOOL_HANDLERS.loopforge_next(mgr, {
186
+ sessionId,
187
+ output: agentOutput({ success: true, shouldContinue: true }),
188
+ });
189
+ const result = TOOL_HANDLERS.loopforge_stop(mgr, { sessionId });
190
+ assert.equal(result.success, true);
191
+ assert.equal(result.roundsCompleted, 2);
192
+ assert.ok(result.qualityTrajectory.length >= 1);
193
+ // Session should be gone
194
+ const status = TOOL_HANDLERS.loopforge_status(mgr, { sessionId });
195
+ assert.ok("error" in status);
196
+ });
197
+ it("replay returns timeline", () => {
198
+ const start = TOOL_HANDLERS.loopforge_start(mgr, { task: "Replay test" });
199
+ const sessionId = String(start.sessionId);
200
+ // Advance once to create lineage data
201
+ TOOL_HANDLERS.loopforge_next(mgr, {
202
+ sessionId,
203
+ output: agentOutput({ success: true, shouldContinue: true }),
204
+ });
205
+ const result = TOOL_HANDLERS.loopforge_replay(mgr, { sessionId });
206
+ const timeline = result.timeline;
207
+ assert.ok(timeline.length >= 1, "timeline should have entries");
208
+ assert.equal(typeof timeline[0].round, "number");
209
+ assert.equal(typeof timeline[0].technique_used, "string");
210
+ });
211
+ });
212
+ //# sourceMappingURL=mcp.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.test.js","sourceRoot":"","sources":["../../src/tests/mcp.test.ts"],"names":[],"mappings":"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"}