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,371 +0,0 @@
1
- /** Tests for engine: lifecycle, feedback, circuit breaker, metrics. */
2
- import { describe, it, beforeEach } from "node:test";
3
- import assert from "node:assert/strict";
4
- import { LoopForgeEngine, createEngine, } from "../engine.js";
5
- import { AgentStatus, Mode, makeExecutionFeedback, } from "../protocol.js";
6
- import { resetPolicy } from "../policy.js";
7
- function makeRequest(overrides = {}) {
8
- return {
9
- task: "Audit ERC20 token",
10
- mode: Mode.LOOP_COMPILE,
11
- vault_config: {
12
- project_vault: ".promptcraft/prompt_vault.json",
13
- global_vault: "~/.promptcraft/global_vault.json",
14
- skills_dir: "skills",
15
- no_global: false,
16
- },
17
- feedback: null,
18
- skill_name: null,
19
- task_id: null,
20
- ...overrides,
21
- };
22
- }
23
- describe("Engine — Initialisation", () => {
24
- beforeEach(() => resetPolicy());
25
- it("createEngine returns LoopForgeEngine instance", () => {
26
- const engine = createEngine("skills");
27
- assert.ok(engine instanceof LoopForgeEngine);
28
- assert.equal(engine.skillsDir, "skills");
29
- assert.equal(engine.state, null);
30
- });
31
- it("engine lazy-inits state on first invocation", () => {
32
- const engine = createEngine();
33
- engine.invokeLoopCompile(makeRequest({
34
- loop_id: "test",
35
- round: 1,
36
- goal_id: "audit",
37
- }));
38
- assert.notEqual(engine.state, null);
39
- assert.equal(engine.state.call_count, 0);
40
- });
41
- });
42
- describe("Engine — Feedback mode", () => {
43
- beforeEach(() => resetPolicy());
44
- it("returns error when no feedback payload", () => {
45
- const engine = createEngine();
46
- const result = engine.invokeFeedback(makeRequest());
47
- assert.equal(result.status, AgentStatus.ERROR);
48
- assert.ok(result.response.error.includes("feedback payload"));
49
- });
50
- it("returns OK with success flag when feedback provided", () => {
51
- const engine = createEngine();
52
- const req = makeRequest({
53
- mode: Mode.FEEDBACK,
54
- feedback: makeExecutionFeedback({
55
- success: true,
56
- constraint_violations: [],
57
- manual_fixes_needed: "",
58
- output: "All tests passed",
59
- }),
60
- });
61
- const result = engine.invokeFeedback(req);
62
- assert.equal(result.status, AgentStatus.OK);
63
- assert.ok(result.response.prompt.includes("Success: true"));
64
- });
65
- it("returns OK with success=false for failures", () => {
66
- const engine = createEngine();
67
- const req = makeRequest({
68
- mode: Mode.FEEDBACK,
69
- feedback: makeExecutionFeedback({
70
- success: false,
71
- constraint_violations: [],
72
- manual_fixes_needed: "formatting",
73
- output: "Works with manual tweaks",
74
- }),
75
- });
76
- const result = engine.invokeFeedback(req);
77
- assert.ok(result.response.prompt.includes("Success: false"));
78
- });
79
- it("updates success trend in state", () => {
80
- const engine = createEngine();
81
- const req = makeRequest({
82
- mode: Mode.FEEDBACK,
83
- feedback: makeExecutionFeedback({ success: true, output: "ok" }),
84
- });
85
- engine.invokeFeedback(req);
86
- assert.equal(engine.state.success_trend.length, 1);
87
- assert.equal(engine.state.success_trend[0], true);
88
- });
89
- });
90
- describe("Engine — Circuit breaker", () => {
91
- beforeEach(() => resetPolicy());
92
- it("returns false when no state", () => {
93
- const engine = createEngine();
94
- assert.equal(engine.shouldBreak(), false);
95
- });
96
- it("returns false when not enough data points", () => {
97
- const engine = createEngine();
98
- engine.invokeFeedback(makeRequest({
99
- mode: Mode.FEEDBACK,
100
- feedback: makeExecutionFeedback({ success: true, output: "ok" }),
101
- })); // init state
102
- engine.state.success_trend = [true, true];
103
- assert.equal(engine.shouldBreak(), false);
104
- });
105
- it("returns true when 3 consecutive failures", () => {
106
- const engine = createEngine();
107
- engine.invokeFeedback(makeRequest({
108
- mode: Mode.FEEDBACK,
109
- feedback: makeExecutionFeedback({ success: true, output: "ok" }),
110
- }));
111
- engine.state.success_trend = [false, false, false];
112
- assert.equal(engine.shouldBreak(), true);
113
- });
114
- it("returns false when all successes (no longer trips on flat success)", () => {
115
- const engine = createEngine();
116
- engine.invokeFeedback(makeRequest({
117
- mode: Mode.FEEDBACK,
118
- feedback: makeExecutionFeedback({ success: true, output: "ok" }),
119
- }));
120
- engine.state.success_trend = [true, true, true];
121
- assert.equal(engine.shouldBreak(), false);
122
- });
123
- });
124
- describe("Engine — Loop Compile mode", () => {
125
- beforeEach(() => resetPolicy());
126
- it("returns OK with compiled prompt for round 1", () => {
127
- const engine = createEngine();
128
- const req = makeRequest({
129
- mode: Mode.LOOP_COMPILE,
130
- loop_id: "test",
131
- round: 1,
132
- goal_id: "audit",
133
- task: "Audit ERC20 token",
134
- });
135
- const result = engine.invokeLoopCompile(req);
136
- assert.equal(result.status, AgentStatus.OK);
137
- assert.ok(result.response.prompt.includes("L2 Compile"));
138
- });
139
- it("includes loop health in prompt", () => {
140
- const engine = createEngine();
141
- const req = makeRequest({
142
- mode: Mode.LOOP_COMPILE,
143
- loop_id: "test",
144
- round: 1,
145
- goal_id: "audit",
146
- task: "Audit ERC20 token",
147
- loop_objective: {
148
- objective: "Full security audit",
149
- success_criteria: ["All tests pass"],
150
- hard_constraints: [],
151
- created_at_round: 1,
152
- loop_id: "test",
153
- },
154
- });
155
- const result = engine.invokeLoopCompile(req);
156
- assert.ok(result.response.prompt.includes("Loop Objective"));
157
- });
158
- it("handles round 2 with existing vault context", () => {
159
- const engine = createEngine();
160
- const req = makeRequest({
161
- mode: Mode.LOOP_COMPILE,
162
- loop_id: "test-r2",
163
- round: 2,
164
- goal_id: "audit",
165
- task: "Check approve race condition",
166
- });
167
- // Compiles at L2 when no prior lineage found
168
- const result = engine.invokeLoopCompile(req);
169
- assert.equal(result.status, AgentStatus.OK);
170
- });
171
- });
172
- describe("Engine — P0-P5 Cognitive Evolution (v1.7 E2E)", () => {
173
- beforeEach(() => resetPolicy());
174
- it("P0: discovered_constraints survive engine boundary and reach compiler", () => {
175
- const engine = createEngine();
176
- // First round: establish loop objective
177
- const r1 = engine.invokeLoopCompile(makeRequest({
178
- mode: Mode.LOOP_COMPILE,
179
- loop_id: "p0-test",
180
- round: 1,
181
- goal_id: "audit",
182
- task: "Audit ERC20 token",
183
- }));
184
- assert.equal(r1.status, AgentStatus.OK);
185
- // Round 2: pass discovered_constraints via last_round_result
186
- const r2 = engine.invokeLoopCompile({
187
- ...makeRequest({
188
- mode: Mode.LOOP_COMPILE,
189
- loop_id: "p0-test",
190
- round: 2,
191
- goal_id: "audit",
192
- task: "Audit ERC20 token",
193
- }),
194
- last_round_result: {
195
- round: 1,
196
- success: true,
197
- output_summary: "Found 2 reentrancy bugs",
198
- constraint_violations: [],
199
- manual_fixes_needed: "",
200
- discovered_constraints: ["Use SafeERC20 for all external calls"],
201
- objective_refinement: "Scope includes upgradeable proxy patterns",
202
- emerged_subtasks: ["Audit proxy init", "Verify timelock"],
203
- },
204
- });
205
- assert.equal(r2.status, AgentStatus.OK);
206
- const prompt = r2.response.prompt;
207
- // P0: discovered constraint should appear in active constraints
208
- assert.ok(prompt.includes("SafeERC20"), "P0: discovered constraint not in prompt");
209
- // P2: emerged subtasks → suggested next task
210
- assert.ok(prompt.includes("proxy init") || prompt.includes("timelock"), "P2: emerged subtasks not forwarded");
211
- });
212
- it("P4: execution_evidence survives engine boundary and generates progress dashboard", () => {
213
- const engine = createEngine();
214
- // Round 1
215
- engine.invokeLoopCompile(makeRequest({
216
- mode: Mode.LOOP_COMPILE,
217
- loop_id: "p4-test",
218
- round: 1,
219
- goal_id: "audit",
220
- task: "Fix security bugs",
221
- loop_objective: {
222
- objective: "Fix all security bugs",
223
- success_criteria: ["No reentrancy", "Access control OK", "Overflow checks"],
224
- hard_constraints: [],
225
- created_at_round: 1,
226
- loop_id: "p4-test",
227
- },
228
- }));
229
- // Round 2 with execution evidence — force L2 so progress dashboard is rendered
230
- const r2 = engine.invokeLoopCompile({
231
- ...makeRequest({
232
- mode: Mode.LOOP_COMPILE,
233
- loop_id: "p4-test",
234
- round: 2,
235
- goal_id: "audit",
236
- task: "Fix security bugs",
237
- force_level: "l2", // trigger full recompile for P4 processing
238
- loop_objective: {
239
- objective: "Fix all security bugs",
240
- success_criteria: ["No reentrancy", "Access control OK", "Overflow checks"],
241
- hard_constraints: [],
242
- created_at_round: 1,
243
- loop_id: "p4-test",
244
- },
245
- }),
246
- last_round_result: {
247
- round: 1,
248
- success: true,
249
- output_summary: "Fixed reentrancy in withdraw()",
250
- constraint_violations: [],
251
- manual_fixes_needed: "",
252
- execution_evidence: {
253
- files_changed: ["contracts/Token.sol", "test/Token.test.ts"],
254
- test_results: { passed: 24, failed: 0, skipped: 0 },
255
- success_criteria_met: ["No reentrancy"],
256
- success_criteria_remaining: ["Access control OK", "Overflow checks"],
257
- progress_estimate: 0.33,
258
- },
259
- },
260
- });
261
- assert.equal(r2.status, AgentStatus.OK);
262
- const prompt = r2.response.prompt;
263
- // P4: Progress dashboard should appear (L2 recompile)
264
- assert.ok(prompt.includes("Progress Dashboard"), "P4: progress dashboard missing");
265
- assert.ok(prompt.includes("1/3"), "P4: criteria count missing");
266
- assert.ok(prompt.includes("Token.sol"), "P4: files_changed missing");
267
- });
268
- it("P5: wrong_assumptions are forwarded to compiler as key lessons", () => {
269
- const engine = createEngine();
270
- engine.invokeLoopCompile(makeRequest({
271
- mode: Mode.LOOP_COMPILE,
272
- loop_id: "p5-test",
273
- round: 1,
274
- goal_id: "audit",
275
- task: "Audit ERC20",
276
- }));
277
- const r2 = engine.invokeLoopCompile({
278
- ...makeRequest({
279
- mode: Mode.LOOP_COMPILE,
280
- loop_id: "p5-test",
281
- round: 2,
282
- goal_id: "audit",
283
- task: "Audit ERC20",
284
- }),
285
- last_round_result: {
286
- round: 1,
287
- success: false,
288
- output_summary: "Found missing access control",
289
- constraint_violations: [],
290
- manual_fixes_needed: "",
291
- wrong_assumptions: ["Assumed OZ v4.0 has no known issues"],
292
- retracted_constraints: [],
293
- revised_success_criteria: [],
294
- },
295
- });
296
- assert.equal(r2.status, AgentStatus.OK);
297
- const prompt = r2.response.prompt;
298
- // Wrong assumptions should appear in the prompt
299
- assert.ok(prompt.includes("wrong assumption") || prompt.includes("Wrong assumption") ||
300
- prompt.includes("assumed") || prompt.includes("Assumed"), "P5: wrong_assumptions not reflected in prompt");
301
- });
302
- it("P5: retracted_constraints are removed from active set", () => {
303
- const engine = createEngine();
304
- engine.invokeLoopCompile(makeRequest({
305
- mode: Mode.LOOP_COMPILE,
306
- loop_id: "p5b-test",
307
- round: 1,
308
- goal_id: "audit",
309
- task: "Audit ERC20",
310
- }));
311
- const r2 = engine.invokeLoopCompile({
312
- ...makeRequest({
313
- mode: Mode.LOOP_COMPILE,
314
- loop_id: "p5b-test",
315
- round: 2,
316
- goal_id: "audit",
317
- task: "Audit ERC20",
318
- }),
319
- last_round_result: {
320
- round: 1,
321
- success: true,
322
- output_summary: "Audited contracts",
323
- constraint_violations: [],
324
- manual_fixes_needed: "",
325
- discovered_constraints: ["No external deps"],
326
- retracted_constraints: ["No external deps"],
327
- wrong_assumptions: [],
328
- revised_success_criteria: [],
329
- },
330
- });
331
- assert.equal(r2.status, AgentStatus.OK);
332
- // The retracted constraint was discovered then immediately retracted — it should
333
- // NOT appear in the active constraints section of the prompt.
334
- const prompt = r2.response.prompt;
335
- // If Active Constraints section exists, it shouldn't contain the retracted item
336
- if (prompt.includes("Active Constraints")) {
337
- const activeStart = prompt.indexOf("Active Constraints");
338
- const nextSection = prompt.indexOf("###", activeStart + 10);
339
- const activeBlock = nextSection >= 0
340
- ? prompt.slice(activeStart, nextSection)
341
- : prompt.slice(activeStart);
342
- assert.ok(!activeBlock.includes("No external deps"), "P5: retracted constraint still in active constraints block");
343
- }
344
- });
345
- it("verification_flags are rendered as Verification Gate section in prompt", () => {
346
- const engine = createEngine();
347
- const req = makeRequest({
348
- mode: Mode.LOOP_COMPILE,
349
- loop_id: "vg-test",
350
- round: 2,
351
- goal_id: "audit",
352
- task: "Audit ERC20",
353
- });
354
- const result = engine.invokeLoopCompile({
355
- ...req,
356
- verification_flags: [
357
- { severity: "error", field: "success", check: "success_with_remaining_criteria",
358
- detail: "Agent claims success but 2 criteria remain unmet: Access control, Overflow" },
359
- { severity: "warn", field: "progress_estimate", check: "progress_regression",
360
- detail: "Progress dropped from 0.50 to 0.20" },
361
- ],
362
- });
363
- assert.equal(result.status, AgentStatus.OK);
364
- const prompt = result.response.prompt;
365
- assert.ok(prompt.includes("Verification Gate"), "Gate section missing");
366
- assert.ok(prompt.includes("🚫"), "Error flag icon missing");
367
- assert.ok(prompt.includes("CONTRADICTED"), "Contradicted verdict message missing");
368
- assert.ok(prompt.includes("progress_regression"), "Warn flag check name missing");
369
- });
370
- });
371
- //# sourceMappingURL=engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/tests/engine.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /** Tests for auto-generated JSON Schema.
2
- *
3
- * Validates that the schema generated from protocol.ts is structurally correct,
4
- * has proper type mappings (boolean, number, array, $ref), and includes all
5
- * expected $defs.
6
- */
7
- export {};
8
- //# sourceMappingURL=generate-schema.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-schema.test.d.ts","sourceRoot":"","sources":["../../src/tests/generate-schema.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,199 +0,0 @@
1
- /** Tests for auto-generated JSON Schema.
2
- *
3
- * Validates that the schema generated from protocol.ts is structurally correct,
4
- * has proper type mappings (boolean, number, array, $ref), and includes all
5
- * expected $defs.
6
- */
7
- import { describe, it } from "node:test";
8
- import assert from "node:assert/strict";
9
- import { readFileSync } from "node:fs";
10
- import { resolve } from "node:path";
11
- // In npm scripts, process.cwd() is the package root (loopforge/).
12
- // The generated schema is written to the repo root (../loopforge-protocol.json).
13
- const schema = JSON.parse(readFileSync(resolve(process.cwd(), "..", "loopforge-protocol.json"), "utf-8"));
14
- const defs = (schema.$defs ?? {});
15
- // Helper: typed access to defs + properties
16
- function def(name) {
17
- return defs[name];
18
- }
19
- function props(name) {
20
- return (def(name).properties ?? {});
21
- }
22
- function required(name) {
23
- return (def(name).required ?? []);
24
- }
25
- // ═══════════════════════════════════════════════════════════════════════════
26
- // Top-level structure
27
- // ═══════════════════════════════════════════════════════════════════════════
28
- describe("Generated JSON Schema — top-level", () => {
29
- it("is draft 2020-12", () => {
30
- assert.equal(schema.$schema, "https://json-schema.org/draft/2020-12/schema");
31
- });
32
- it("has $id and title", () => {
33
- assert.ok(String(schema.$id ?? "").includes("loopforge"));
34
- assert.ok(String(schema.title ?? "").includes("LoopForge"));
35
- });
36
- it("has 39 $defs (4 enums + 34 interfaces + 1 type alias)", () => {
37
- const names = Object.keys(defs);
38
- assert.equal(names.length, 39, `expected 39, got ${names.length}: ${names.join(", ")}`);
39
- });
40
- });
41
- // ═══════════════════════════════════════════════════════════════════════════
42
- // Enums
43
- // ═══════════════════════════════════════════════════════════════════════════
44
- describe("Enums", () => {
45
- it("Mode — 2 values", () => {
46
- assert.equal(def("Mode").type, "string");
47
- assert.deepEqual(def("Mode").enum, [
48
- "loop_compile", "feedback",
49
- ]);
50
- });
51
- it("AgentStatus — 3 values", () => {
52
- assert.equal(def("AgentStatus").type, "string");
53
- assert.deepEqual(def("AgentStatus").enum, ["ok", "error", "stalled"]);
54
- });
55
- it("Technique — 7 values", () => {
56
- assert.equal(def("Technique").type, "string");
57
- assert.deepEqual(def("Technique").enum, [
58
- "zero-shot", "few-shot", "zero-shot-cot", "few-shot-cot",
59
- "step-back", "least-to-most", "tree-of-thought",
60
- ]);
61
- });
62
- });
63
- // ═══════════════════════════════════════════════════════════════════════════
64
- // Interfaces — type correctness (fixes hand-written schema bugs)
65
- // ═══════════════════════════════════════════════════════════════════════════
66
- describe("Interface type correctness", () => {
67
- it("Analysis — booleans are boolean, not string", () => {
68
- assert.equal(def("Analysis").type, "object");
69
- assert.equal(props("Analysis").was_rotated.type, "boolean", "was_rotated should be boolean (hand-written schema had it as string)");
70
- });
71
- it("LoopHealth — numbers are number, booleans are boolean", () => {
72
- const p = props("LoopHealth");
73
- assert.equal(p.goal_alignment.type, "number");
74
- assert.equal(p.constraint_integrity.type, "number");
75
- assert.equal(p.task_continuity.type, "number");
76
- assert.equal(p.drift_detected.type, "boolean");
77
- assert.equal(p.strategy_stability.type, "boolean");
78
- });
79
- it("LoopCompileRequest — numbers are number", () => {
80
- const p = props("LoopCompileRequest");
81
- assert.equal(p.round.type, "number");
82
- assert.equal(p.health_check_interval.type, "number");
83
- });
84
- it("TaskAlignment — is_aligned is boolean, alignment_score is number", () => {
85
- const p = props("TaskAlignment");
86
- assert.equal(p.is_aligned.type, "boolean");
87
- assert.equal(p.alignment_score.type, "number");
88
- });
89
- it("LoopRoundResult — round is number, success is boolean (quality_score removed v1.12)", () => {
90
- const p = props("LoopRoundResult");
91
- assert.equal(p.round.type, "number");
92
- assert.equal(p.success.type, "boolean");
93
- // quality_score field has been removed — verify it's gone
94
- assert.equal(p.quality_score, undefined);
95
- });
96
- });
97
- // ═══════════════════════════════════════════════════════════════════════════
98
- // Array properties
99
- // ═══════════════════════════════════════════════════════════════════════════
100
- describe("Array properties", () => {
101
- it("LoopObjective — success_criteria and hard_constraints are string arrays", () => {
102
- const p = props("LoopObjective");
103
- assert.equal(p.success_criteria.type, "array");
104
- assert.equal(p.success_criteria.items.type, "string");
105
- assert.equal(p.hard_constraints.type, "array");
106
- assert.equal(p.hard_constraints.items.type, "string");
107
- });
108
- it("LoopCompileResponse — warnings and lineage are string arrays", () => {
109
- const p = props("LoopCompileResponse");
110
- assert.equal(p.warnings.type, "array");
111
- assert.equal(p.warnings.items.type, "string");
112
- assert.equal(p.lineage.type, "array");
113
- });
114
- it("RollingSummary — key_outcomes is string array", () => {
115
- const p = props("RollingSummary");
116
- assert.equal(p.key_outcomes.type, "array");
117
- assert.equal(p.key_outcomes.items.type, "string");
118
- // quality_trajectory and trajectory_direction removed in v1.12
119
- assert.equal(p.quality_trajectory, undefined);
120
- });
121
- });
122
- // ═══════════════════════════════════════════════════════════════════════════
123
- // $ref links (interface/enum references)
124
- // ═══════════════════════════════════════════════════════════════════════════
125
- describe("$ref links", () => {
126
- it("LoopCompileRequest.loop_objective → LoopObjective | null (anyOf)", () => {
127
- const loProp = props("LoopCompileRequest").loop_objective;
128
- assert.ok(loProp.anyOf, "loop_objective should use anyOf for T | null");
129
- const refs = loProp.anyOf.map((x) => x.$ref).filter(Boolean);
130
- const nulls = loProp.anyOf.filter((x) => x.type === "null");
131
- assert.ok(refs.includes("#/$defs/LoopObjective"));
132
- assert.equal(nulls.length, 1);
133
- });
134
- it("LoopCompileRequest.vault_config → VaultConfig ($ref)", () => {
135
- assert.equal(props("LoopCompileRequest").vault_config.$ref, "#/$defs/VaultConfig");
136
- });
137
- it("LoopForgeResponse.status → AgentStatus ($ref)", () => {
138
- assert.equal(props("LoopForgeResponse").status.$ref, "#/$defs/AgentStatus");
139
- });
140
- it("LoopForgeResponse.analysis → Analysis | null (anyOf)", () => {
141
- const aProp = props("LoopForgeResponse").analysis;
142
- assert.ok(aProp.anyOf);
143
- const refs = aProp.anyOf.map((x) => x.$ref).filter(Boolean);
144
- assert.ok(refs.includes("#/$defs/Analysis"));
145
- });
146
- it("AgentLoopResult.response → LoopForgeResponse | null (anyOf)", () => {
147
- const rProp = props("AgentLoopResult").response;
148
- assert.ok(rProp.anyOf);
149
- const refs = rProp.anyOf.map((x) => x.$ref).filter(Boolean);
150
- assert.ok(refs.includes("#/$defs/LoopForgeResponse"));
151
- });
152
- });
153
- // ═══════════════════════════════════════════════════════════════════════════
154
- // Index signature → additionalProperties
155
- // ═══════════════════════════════════════════════════════════════════════════
156
- describe("Index signature handling", () => {
157
- it("LoopForgeRequest has additionalProperties: true (index signature)", () => {
158
- assert.equal(def("LoopForgeRequest").additionalProperties, true, "LoopForgeRequest has [key: string]: unknown → additionalProperties");
159
- });
160
- });
161
- // ═══════════════════════════════════════════════════════════════════════════
162
- // required arrays
163
- // ═══════════════════════════════════════════════════════════════════════════
164
- describe("required arrays", () => {
165
- it("LoopForgeRequest — task is required", () => {
166
- assert.ok(required("LoopForgeRequest").includes("task"));
167
- });
168
- it("LoopCompileRequest — all non-optional fields are required, nullable not", () => {
169
- const req = required("LoopCompileRequest");
170
- assert.ok(req.includes("mode"));
171
- assert.ok(req.includes("loop_id"));
172
- assert.ok(req.includes("round"));
173
- assert.ok(req.includes("task"));
174
- assert.ok(req.includes("vault_config"));
175
- // Optional (nullable) fields should NOT be in required
176
- assert.ok(!req.includes("loop_objective"));
177
- assert.ok(!req.includes("plan_source"));
178
- assert.ok(!req.includes("last_round_result"));
179
- });
180
- it("Analysis — 6 required fields", () => {
181
- const req = required("Analysis");
182
- assert.equal(req.length, 6);
183
- assert.ok(req.includes("was_rotated"));
184
- assert.ok(req.includes("reference_file"));
185
- });
186
- });
187
- // ═══════════════════════════════════════════════════════════════════════════
188
- // Record<string, unknown> special case
189
- // ═══════════════════════════════════════════════════════════════════════════
190
- describe("Record<string, unknown> handling", () => {
191
- it("SessionState.feedback_buffer is array of objects with additionalProperties", () => {
192
- const fb = props("SessionState").feedback_buffer;
193
- assert.equal(fb.type, "array");
194
- const items = fb.items;
195
- assert.equal(items.type, "object");
196
- assert.equal(items.additionalProperties, true);
197
- });
198
- });
199
- //# sourceMappingURL=generate-schema.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-schema.test.js","sourceRoot":"","sources":["../../src/tests/generate-schema.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=loop-compiler.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loop-compiler.test.d.ts","sourceRoot":"","sources":["../../src/tests/loop-compiler.test.ts"],"names":[],"mappings":""}