loopforge 1.15.1 → 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 (185) 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.map +1 -1
  15. package/dist/enforcement-gate.js +28 -10
  16. package/dist/enforcement-gate.js.map +1 -1
  17. package/dist/engine.d.ts +7 -4
  18. package/dist/engine.d.ts.map +1 -1
  19. package/dist/engine.js +78 -138
  20. package/dist/engine.js.map +1 -1
  21. package/dist/evidence-provider.d.ts +113 -0
  22. package/dist/evidence-provider.d.ts.map +1 -0
  23. package/dist/evidence-provider.js +419 -0
  24. package/dist/evidence-provider.js.map +1 -0
  25. package/dist/index.d.ts +18 -10
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +15 -9
  28. package/dist/index.js.map +1 -1
  29. package/dist/init.d.ts +15 -0
  30. package/dist/init.d.ts.map +1 -0
  31. package/dist/init.js +49 -0
  32. package/dist/init.js.map +1 -0
  33. package/dist/interop.d.ts +30 -0
  34. package/dist/interop.d.ts.map +1 -0
  35. package/dist/interop.js +29 -0
  36. package/dist/interop.js.map +1 -0
  37. package/dist/loop-compiler.d.ts +14 -64
  38. package/dist/loop-compiler.d.ts.map +1 -1
  39. package/dist/loop-compiler.js +303 -2206
  40. package/dist/loop-compiler.js.map +1 -1
  41. package/dist/loop-store.d.ts +82 -0
  42. package/dist/loop-store.d.ts.map +1 -0
  43. package/dist/loop-store.js +332 -0
  44. package/dist/loop-store.js.map +1 -0
  45. package/dist/mcp/server.d.ts +9 -6
  46. package/dist/mcp/server.d.ts.map +1 -1
  47. package/dist/mcp/server.js +109 -73
  48. package/dist/mcp/server.js.map +1 -1
  49. package/dist/mcp/session.d.ts +75 -19
  50. package/dist/mcp/session.d.ts.map +1 -1
  51. package/dist/mcp/session.js +707 -361
  52. package/dist/mcp/session.js.map +1 -1
  53. package/dist/mcp/tools.d.ts +18 -268
  54. package/dist/mcp/tools.d.ts.map +1 -1
  55. package/dist/mcp/tools.js +225 -12
  56. package/dist/mcp/tools.js.map +1 -1
  57. package/dist/observability.d.ts +36 -16
  58. package/dist/observability.d.ts.map +1 -1
  59. package/dist/observability.js +82 -23
  60. package/dist/observability.js.map +1 -1
  61. package/dist/policy-metrics.d.ts +46 -0
  62. package/dist/policy-metrics.d.ts.map +1 -0
  63. package/dist/policy-metrics.js +146 -0
  64. package/dist/policy-metrics.js.map +1 -0
  65. package/dist/policy.d.ts +53 -140
  66. package/dist/policy.d.ts.map +1 -1
  67. package/dist/policy.js +119 -184
  68. package/dist/policy.js.map +1 -1
  69. package/dist/prompt-assembler.d.ts +30 -0
  70. package/dist/prompt-assembler.d.ts.map +1 -0
  71. package/dist/prompt-assembler.js +257 -0
  72. package/dist/prompt-assembler.js.map +1 -0
  73. package/dist/prompt-policy.d.ts +29 -0
  74. package/dist/prompt-policy.d.ts.map +1 -0
  75. package/dist/prompt-policy.js +51 -0
  76. package/dist/prompt-policy.js.map +1 -0
  77. package/dist/protocol.d.ts +88 -93
  78. package/dist/protocol.d.ts.map +1 -1
  79. package/dist/protocol.js +23 -39
  80. package/dist/protocol.js.map +1 -1
  81. package/dist/replay.d.ts.map +1 -1
  82. package/dist/replay.js +1 -27
  83. package/dist/replay.js.map +1 -1
  84. package/dist/round-coordinator.d.ts +90 -0
  85. package/dist/round-coordinator.d.ts.map +1 -0
  86. package/dist/round-coordinator.js +186 -0
  87. package/dist/round-coordinator.js.map +1 -0
  88. package/dist/round-driver.d.ts +53 -0
  89. package/dist/round-driver.d.ts.map +1 -0
  90. package/dist/round-driver.js +101 -0
  91. package/dist/round-driver.js.map +1 -0
  92. package/dist/round-transaction.d.ts +70 -0
  93. package/dist/round-transaction.d.ts.map +1 -0
  94. package/dist/round-transaction.js +290 -0
  95. package/dist/round-transaction.js.map +1 -0
  96. package/dist/runtime.d.ts +33 -19
  97. package/dist/runtime.d.ts.map +1 -1
  98. package/dist/runtime.js +355 -336
  99. package/dist/runtime.js.map +1 -1
  100. package/dist/storage.d.ts +38 -0
  101. package/dist/storage.d.ts.map +1 -0
  102. package/dist/storage.js +201 -0
  103. package/dist/storage.js.map +1 -0
  104. package/dist/verification-gate.d.ts +33 -7
  105. package/dist/verification-gate.d.ts.map +1 -1
  106. package/dist/verification-gate.js +195 -7
  107. package/dist/verification-gate.js.map +1 -1
  108. package/loop_policy.json +22 -48
  109. package/package.json +13 -10
  110. package/skills/perception/SKILL.md +80 -267
  111. package/dist/backends/fs.d.ts +0 -36
  112. package/dist/backends/fs.d.ts.map +0 -1
  113. package/dist/backends/fs.js +0 -362
  114. package/dist/backends/fs.js.map +0 -1
  115. package/dist/builder.d.ts +0 -19
  116. package/dist/builder.d.ts.map +0 -1
  117. package/dist/builder.js +0 -215
  118. package/dist/builder.js.map +0 -1
  119. package/dist/mcp-server.d.ts +0 -12
  120. package/dist/mcp-server.d.ts.map +0 -1
  121. package/dist/mcp-server.js +0 -14
  122. package/dist/mcp-server.js.map +0 -1
  123. package/dist/memory-bridge.d.ts +0 -47
  124. package/dist/memory-bridge.d.ts.map +0 -1
  125. package/dist/memory-bridge.js +0 -290
  126. package/dist/memory-bridge.js.map +0 -1
  127. package/dist/tests/_helpers.d.ts +0 -25
  128. package/dist/tests/_helpers.d.ts.map +0 -1
  129. package/dist/tests/_helpers.js +0 -47
  130. package/dist/tests/_helpers.js.map +0 -1
  131. package/dist/tests/builder.test.d.ts +0 -2
  132. package/dist/tests/builder.test.d.ts.map +0 -1
  133. package/dist/tests/builder.test.js +0 -112
  134. package/dist/tests/builder.test.js.map +0 -1
  135. package/dist/tests/enforcement-gate.test.d.ts +0 -2
  136. package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
  137. package/dist/tests/enforcement-gate.test.js +0 -328
  138. package/dist/tests/enforcement-gate.test.js.map +0 -1
  139. package/dist/tests/engine.test.d.ts +0 -2
  140. package/dist/tests/engine.test.d.ts.map +0 -1
  141. package/dist/tests/engine.test.js +0 -375
  142. package/dist/tests/engine.test.js.map +0 -1
  143. package/dist/tests/generate-schema.test.d.ts +0 -8
  144. package/dist/tests/generate-schema.test.d.ts.map +0 -1
  145. package/dist/tests/generate-schema.test.js +0 -199
  146. package/dist/tests/generate-schema.test.js.map +0 -1
  147. package/dist/tests/loop-compiler.test.d.ts +0 -2
  148. package/dist/tests/loop-compiler.test.d.ts.map +0 -1
  149. package/dist/tests/loop-compiler.test.js +0 -1059
  150. package/dist/tests/loop-compiler.test.js.map +0 -1
  151. package/dist/tests/mcp.test.d.ts +0 -7
  152. package/dist/tests/mcp.test.d.ts.map +0 -1
  153. package/dist/tests/mcp.test.js +0 -505
  154. package/dist/tests/mcp.test.js.map +0 -1
  155. package/dist/tests/memory-bridge.test.d.ts +0 -8
  156. package/dist/tests/memory-bridge.test.d.ts.map +0 -1
  157. package/dist/tests/memory-bridge.test.js +0 -383
  158. package/dist/tests/memory-bridge.test.js.map +0 -1
  159. package/dist/tests/policy.test.d.ts +0 -2
  160. package/dist/tests/policy.test.d.ts.map +0 -1
  161. package/dist/tests/policy.test.js +0 -49
  162. package/dist/tests/policy.test.js.map +0 -1
  163. package/dist/tests/protocol.test.d.ts +0 -2
  164. package/dist/tests/protocol.test.d.ts.map +0 -1
  165. package/dist/tests/protocol.test.js +0 -73
  166. package/dist/tests/protocol.test.js.map +0 -1
  167. package/dist/tests/replay.test.d.ts +0 -2
  168. package/dist/tests/replay.test.d.ts.map +0 -1
  169. package/dist/tests/replay.test.js +0 -222
  170. package/dist/tests/replay.test.js.map +0 -1
  171. package/dist/tests/runtime.test.d.ts +0 -7
  172. package/dist/tests/runtime.test.d.ts.map +0 -1
  173. package/dist/tests/runtime.test.js +0 -337
  174. package/dist/tests/runtime.test.js.map +0 -1
  175. package/dist/tests/verification-gate.test.d.ts +0 -2
  176. package/dist/tests/verification-gate.test.d.ts.map +0 -1
  177. package/dist/tests/verification-gate.test.js +0 -407
  178. package/dist/tests/verification-gate.test.js.map +0 -1
  179. package/skills/prompt-techniques/SKILL.md +0 -52
  180. package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
  181. package/skills/prompt-techniques/references/few-shot.md +0 -174
  182. package/skills/prompt-techniques/references/least-to-most.md +0 -182
  183. package/skills/prompt-techniques/references/step-back.md +0 -160
  184. package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
  185. package/skills/prompt-techniques/references/zero-shot.md +0 -97
@@ -1,375 +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.state, null);
29
- assert.equal(engine.lastTask, 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
- // v1.14 Thin Prompt: progress dashboard lives in state file, not in prompt
263
- const stateFile = r2.response.state_file_content;
264
- assert.ok(stateFile, "P4: state_file_content should be set for L2 compile");
265
- assert.ok(stateFile.includes("Progress Dashboard"), "P4: progress dashboard in state file");
266
- assert.ok(stateFile.includes("1/3"), "P4: criteria count in state file");
267
- assert.ok(stateFile.includes("Token.sol"), "P4: files_changed in state file");
268
- // Thin prompt: progress dashboard should NOT be in the prompt text
269
- const prompt = r2.response.prompt;
270
- assert.ok(!prompt.includes("Progress Dashboard"), "P4: thin prompt — dashboard in state file only");
271
- });
272
- it("P5: wrong_assumptions are forwarded to compiler as key lessons", () => {
273
- const engine = createEngine();
274
- engine.invokeLoopCompile(makeRequest({
275
- mode: Mode.LOOP_COMPILE,
276
- loop_id: "p5-test",
277
- round: 1,
278
- goal_id: "audit",
279
- task: "Audit ERC20",
280
- }));
281
- const r2 = engine.invokeLoopCompile({
282
- ...makeRequest({
283
- mode: Mode.LOOP_COMPILE,
284
- loop_id: "p5-test",
285
- round: 2,
286
- goal_id: "audit",
287
- task: "Audit ERC20",
288
- }),
289
- last_round_result: {
290
- round: 1,
291
- success: false,
292
- output_summary: "Found missing access control",
293
- constraint_violations: [],
294
- manual_fixes_needed: "",
295
- wrong_assumptions: ["Assumed OZ v4.0 has no known issues"],
296
- retracted_constraints: [],
297
- revised_success_criteria: [],
298
- },
299
- });
300
- assert.equal(r2.status, AgentStatus.OK);
301
- const prompt = r2.response.prompt;
302
- // Wrong assumptions should appear in the prompt
303
- assert.ok(prompt.includes("wrong assumption") || prompt.includes("Wrong assumption") ||
304
- prompt.includes("assumed") || prompt.includes("Assumed"), "P5: wrong_assumptions not reflected in prompt");
305
- });
306
- it("P5: retracted_constraints are removed from active set", () => {
307
- const engine = createEngine();
308
- engine.invokeLoopCompile(makeRequest({
309
- mode: Mode.LOOP_COMPILE,
310
- loop_id: "p5b-test",
311
- round: 1,
312
- goal_id: "audit",
313
- task: "Audit ERC20",
314
- }));
315
- const r2 = engine.invokeLoopCompile({
316
- ...makeRequest({
317
- mode: Mode.LOOP_COMPILE,
318
- loop_id: "p5b-test",
319
- round: 2,
320
- goal_id: "audit",
321
- task: "Audit ERC20",
322
- }),
323
- last_round_result: {
324
- round: 1,
325
- success: true,
326
- output_summary: "Audited contracts",
327
- constraint_violations: [],
328
- manual_fixes_needed: "",
329
- discovered_constraints: ["No external deps"],
330
- retracted_constraints: ["No external deps"],
331
- wrong_assumptions: [],
332
- revised_success_criteria: [],
333
- },
334
- });
335
- assert.equal(r2.status, AgentStatus.OK);
336
- // The retracted constraint was discovered then immediately retracted — it should
337
- // NOT appear in the active constraints section of the prompt.
338
- const prompt = r2.response.prompt;
339
- // If Active Constraints section exists, it shouldn't contain the retracted item
340
- if (prompt.includes("Active Constraints")) {
341
- const activeStart = prompt.indexOf("Active Constraints");
342
- const nextSection = prompt.indexOf("###", activeStart + 10);
343
- const activeBlock = nextSection >= 0
344
- ? prompt.slice(activeStart, nextSection)
345
- : prompt.slice(activeStart);
346
- assert.ok(!activeBlock.includes("No external deps"), "P5: retracted constraint still in active constraints block");
347
- }
348
- });
349
- it("verification_flags are rendered as Verification Gate section in prompt", () => {
350
- const engine = createEngine();
351
- const req = makeRequest({
352
- mode: Mode.LOOP_COMPILE,
353
- loop_id: "vg-test",
354
- round: 2,
355
- goal_id: "audit",
356
- task: "Audit ERC20",
357
- });
358
- const result = engine.invokeLoopCompile({
359
- ...req,
360
- verification_flags: [
361
- { severity: "error", field: "success", check: "success_with_remaining_criteria",
362
- detail: "Agent claims success but 2 criteria remain unmet: Access control, Overflow" },
363
- { severity: "warn", field: "progress_estimate", check: "progress_regression",
364
- detail: "Progress dropped from 0.50 to 0.20" },
365
- ],
366
- });
367
- assert.equal(result.status, AgentStatus.OK);
368
- const prompt = result.response.prompt;
369
- assert.ok(prompt.includes("Verification Gate"), "Gate section missing");
370
- assert.ok(prompt.includes("🚫"), "Error flag icon missing");
371
- assert.ok(prompt.includes("CONTRADICTED"), "Contradicted verdict message missing");
372
- assert.ok(prompt.includes("progress_regression"), "Warn flag check name missing");
373
- });
374
- });
375
- //# 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 40 $defs (4 enums + 35 interfaces + 1 type alias)", () => {
37
- const names = Object.keys(defs);
38
- assert.equal(names.length, 40, `expected 40, 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":""}