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