loopforge 1.3.0 → 1.7.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.
- package/LICENSE +1 -1
- package/README.md +2 -0
- package/dist/backends/fs.d.ts +5 -0
- package/dist/backends/fs.d.ts.map +1 -1
- package/dist/backends/fs.js +67 -16
- package/dist/backends/fs.js.map +1 -1
- package/dist/builder.d.ts +0 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +14 -25
- package/dist/builder.js.map +1 -1
- package/dist/engine.d.ts +14 -5
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +206 -105
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +4 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -9
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +5 -2
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +533 -19
- package/dist/loop-compiler.js.map +1 -1
- package/dist/mcp/session.d.ts +21 -2
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +257 -16
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +153 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +162 -6
- package/dist/mcp/tools.js.map +1 -1
- package/dist/observability.d.ts +23 -0
- package/dist/observability.d.ts.map +1 -0
- package/dist/observability.js +29 -0
- package/dist/observability.js.map +1 -0
- package/dist/policy.d.ts +15 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +8 -0
- package/dist/policy.js.map +1 -1
- package/dist/protocol.d.ts +114 -5
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +44 -3
- package/dist/protocol.js.map +1 -1
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +51 -3
- package/dist/runtime.js.map +1 -1
- package/dist/tests/builder.test.js +1 -25
- package/dist/tests/builder.test.js.map +1 -1
- package/dist/tests/engine.test.js +213 -38
- package/dist/tests/engine.test.js.map +1 -1
- package/dist/tests/generate-schema.test.js +4 -4
- package/dist/tests/generate-schema.test.js.map +1 -1
- package/dist/tests/loop-compiler.test.js +212 -2
- package/dist/tests/loop-compiler.test.js.map +1 -1
- package/dist/tests/mcp.test.js +273 -0
- package/dist/tests/mcp.test.js.map +1 -1
- package/dist/tests/protocol.test.js +2 -4
- package/dist/tests/protocol.test.js.map +1 -1
- package/dist/tests/verification-gate.test.d.ts +2 -0
- package/dist/tests/verification-gate.test.d.ts.map +1 -0
- package/dist/tests/verification-gate.test.js +407 -0
- package/dist/tests/verification-gate.test.js.map +1 -0
- package/dist/verification-gate.d.ts +26 -0
- package/dist/verification-gate.d.ts.map +1 -0
- package/dist/verification-gate.js +232 -0
- package/dist/verification-gate.js.map +1 -0
- package/loop_policy.json +8 -0
- package/package.json +1 -2
- package/skills/perception/SKILL.md +102 -53
- package/dist/autonomous.d.ts +0 -84
- package/dist/autonomous.d.ts.map +0 -1
- package/dist/autonomous.js +0 -250
- package/dist/autonomous.js.map +0 -1
- package/dist/backends/ai.d.ts +0 -37
- package/dist/backends/ai.d.ts.map +0 -1
- package/dist/backends/ai.js +0 -98
- package/dist/backends/ai.js.map +0 -1
- package/dist/cli.d.ts +0 -7
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -422
- package/dist/cli.js.map +0 -1
- package/dist/tests/adapter.test.js +0 -104
- package/dist/tests/adapter.test.js.map +0 -1
- package/dist/tests/autonomous.test.d.ts +0 -7
- package/dist/tests/autonomous.test.d.ts.map +0 -1
- package/dist/tests/autonomous.test.js +0 -294
- package/dist/tests/autonomous.test.js.map +0 -1
|
@@ -1,294 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autonomous.test.js","sourceRoot":"","sources":["../../src/tests/autonomous.test.ts"],"names":[],"mappings":"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"}
|