loopforge 1.3.0 → 1.3.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/LICENSE +1 -1
- package/README.md +2 -0
- package/dist/backends/fs.d.ts.map +1 -1
- package/dist/backends/fs.js +1 -0
- package/dist/backends/fs.js.map +1 -1
- package/dist/cli.js +36 -0
- package/dist/cli.js.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +4 -0
- package/dist/engine.js.map +1 -1
- package/dist/loop-compiler.js +1 -1
- package/dist/loop-compiler.js.map +1 -1
- package/dist/mcp/session.d.ts +11 -0
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +173 -7
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +20 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +46 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js.map +1 -1
- package/dist/tests/loop-compiler.test.js +21 -0
- package/dist/tests/loop-compiler.test.js.map +1 -1
- package/dist/tests/mcp.test.js +186 -0
- package/dist/tests/mcp.test.js.map +1 -1
- package/package.json +1 -1
- package/skills/perception/SKILL.md +10 -2
- 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/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
package/dist/tests/mcp.test.js
CHANGED
|
@@ -148,6 +148,117 @@ describe("MCP — multi-round lifecycle", () => {
|
|
|
148
148
|
assert.equal(r2.round, 2);
|
|
149
149
|
});
|
|
150
150
|
});
|
|
151
|
+
describe("MCP — session persistence (save / resume)", () => {
|
|
152
|
+
let backend;
|
|
153
|
+
let mgr;
|
|
154
|
+
beforeEach(() => {
|
|
155
|
+
resetPolicy();
|
|
156
|
+
backend = new MemoryBackend();
|
|
157
|
+
mgr = new SessionManager(backend);
|
|
158
|
+
});
|
|
159
|
+
it("create() persists session to vault as session_state entry", () => {
|
|
160
|
+
const r1 = mgr.create({ task: "Test task", loopId: "persist-test" });
|
|
161
|
+
assert.ok(r1.prompt !== null);
|
|
162
|
+
const entries = backend.queryEntries({ prefix: "loop:persist-test:session" });
|
|
163
|
+
const sessionEntry = entries.find((e) => e.task_type === "session_state");
|
|
164
|
+
assert.ok(sessionEntry !== undefined);
|
|
165
|
+
assert.equal(sessionEntry.loop_id, "persist-test");
|
|
166
|
+
const lineage = sessionEntry.loop_lineage;
|
|
167
|
+
assert.equal(lineage.current_round, 1);
|
|
168
|
+
assert.equal(lineage.status, "running");
|
|
169
|
+
});
|
|
170
|
+
it("advance() updates session_state after each round", () => {
|
|
171
|
+
const r1 = mgr.create({ task: "Test task", loopId: "advance-persist" });
|
|
172
|
+
const sessionId = r1.sessionId;
|
|
173
|
+
// Advance round 1 → compiles round 2
|
|
174
|
+
const r2 = mgr.advance(sessionId, agentOutput({
|
|
175
|
+
success: true, shouldContinue: true,
|
|
176
|
+
}));
|
|
177
|
+
assert.ok(r2.prompt !== null);
|
|
178
|
+
assert.equal(r2.round, 2);
|
|
179
|
+
const entries = backend.queryEntries({ prefix: "loop:advance-persist:session" });
|
|
180
|
+
const sessionEntry = entries.find((e) => e.task_type === "session_state");
|
|
181
|
+
assert.ok(sessionEntry !== undefined);
|
|
182
|
+
const lineage = sessionEntry.loop_lineage;
|
|
183
|
+
assert.equal(lineage.current_round, 2);
|
|
184
|
+
const qt = lineage.quality_trajectory;
|
|
185
|
+
assert.ok(qt.length >= 1, "quality trajectory should have at least 1 entry");
|
|
186
|
+
});
|
|
187
|
+
it("advance() saves stopped status when task_complete", () => {
|
|
188
|
+
const r1 = mgr.create({ task: "Test task", loopId: "complete-persist" });
|
|
189
|
+
const sessionId = r1.sessionId;
|
|
190
|
+
mgr.advance(sessionId, agentOutput({
|
|
191
|
+
success: true, shouldContinue: false,
|
|
192
|
+
}));
|
|
193
|
+
const entries = backend.queryEntries({ prefix: "loop:complete-persist:session" });
|
|
194
|
+
const sessionEntry = entries.find((e) => e.task_type === "session_state");
|
|
195
|
+
assert.ok(sessionEntry !== undefined);
|
|
196
|
+
const lineage = sessionEntry.loop_lineage;
|
|
197
|
+
assert.equal(lineage.status, "stopped");
|
|
198
|
+
});
|
|
199
|
+
it("advance() saves stalled status when no eval block", () => {
|
|
200
|
+
const r1 = mgr.create({ task: "Test task", loopId: "stall-persist" });
|
|
201
|
+
const sessionId = r1.sessionId;
|
|
202
|
+
mgr.advance(sessionId, agentOutputNoEval("Just some text"));
|
|
203
|
+
const entries = backend.queryEntries({ prefix: "loop:stall-persist:session" });
|
|
204
|
+
const sessionEntry = entries.find((e) => e.task_type === "session_state");
|
|
205
|
+
assert.ok(sessionEntry !== undefined);
|
|
206
|
+
const lineage = sessionEntry.loop_lineage;
|
|
207
|
+
assert.equal(lineage.status, "stalled");
|
|
208
|
+
});
|
|
209
|
+
it("resume() returns prompt for next round after create", () => {
|
|
210
|
+
// Create session → simulates process dying after round 1 compile
|
|
211
|
+
const r1 = mgr.create({ task: "Test task", loopId: "resume-after-create" });
|
|
212
|
+
assert.ok(r1.prompt !== null);
|
|
213
|
+
// New SessionManager (simulating process restart)
|
|
214
|
+
const mgr2 = new SessionManager(backend);
|
|
215
|
+
const resumed = mgr2.resume("resume-after-create");
|
|
216
|
+
assert.ok(resumed !== null, "resume should return a result");
|
|
217
|
+
assert.ok(resumed.prompt !== null, "resume should return a compiled prompt");
|
|
218
|
+
assert.equal(resumed.round, 1, "should compile round 1 again");
|
|
219
|
+
});
|
|
220
|
+
it("resume() recovers mid-loop state after advance", () => {
|
|
221
|
+
// Create and advance one round → simulates process dying after round 2 compile
|
|
222
|
+
const r1 = mgr.create({ task: "Test task", loopId: "resume-mid" });
|
|
223
|
+
const r2 = mgr.advance(r1.sessionId, agentOutput({
|
|
224
|
+
success: true, shouldContinue: true,
|
|
225
|
+
}));
|
|
226
|
+
assert.equal(r2.round, 2);
|
|
227
|
+
assert.ok(r2.prompt !== null);
|
|
228
|
+
// New SessionManager (process restart)
|
|
229
|
+
const mgr2 = new SessionManager(backend);
|
|
230
|
+
const resumed = mgr2.resume("resume-mid");
|
|
231
|
+
assert.ok(resumed !== null);
|
|
232
|
+
assert.equal(resumed.round, 2, "should pick up at round 2");
|
|
233
|
+
assert.ok(resumed.prompt !== null);
|
|
234
|
+
assert.ok(resumed.prompt.length > 0);
|
|
235
|
+
});
|
|
236
|
+
it("resume() returns stopped result for completed loop", () => {
|
|
237
|
+
const r1 = mgr.create({ task: "Test task", loopId: "resume-done" });
|
|
238
|
+
mgr.advance(r1.sessionId, agentOutput({
|
|
239
|
+
success: true, shouldContinue: false,
|
|
240
|
+
}));
|
|
241
|
+
const mgr2 = new SessionManager(backend);
|
|
242
|
+
const resumed = mgr2.resume("resume-done");
|
|
243
|
+
assert.ok(resumed !== null);
|
|
244
|
+
assert.equal(resumed.prompt, null);
|
|
245
|
+
assert.ok(resumed.stopReason === "stopped" || resumed.stopReason === "task_complete");
|
|
246
|
+
});
|
|
247
|
+
it("resume() returns null for unknown loop", () => {
|
|
248
|
+
const mgr2 = new SessionManager(backend);
|
|
249
|
+
const result = mgr2.resume("nonexistent-loop");
|
|
250
|
+
assert.equal(result, null);
|
|
251
|
+
});
|
|
252
|
+
it("save() upserts — only one session_state entry per loop", () => {
|
|
253
|
+
mgr.create({ task: "Test task", loopId: "upsert-test" });
|
|
254
|
+
// Create another session for the same loop (simulating multiple sessions)
|
|
255
|
+
const mgr2 = new SessionManager(backend);
|
|
256
|
+
mgr2.create({ task: "Test task", loopId: "upsert-test" });
|
|
257
|
+
const entries = backend.queryEntries({ prefix: "loop:upsert-test:session" });
|
|
258
|
+
const sessionEntries = entries.filter((e) => e.task_type === "session_state");
|
|
259
|
+
assert.equal(sessionEntries.length, 1, "should only have one session_state entry per loop");
|
|
260
|
+
});
|
|
261
|
+
});
|
|
151
262
|
describe("MCP — status / list / stop / replay", () => {
|
|
152
263
|
let backend;
|
|
153
264
|
let mgr;
|
|
@@ -209,4 +320,79 @@ describe("MCP — status / list / stop / replay", () => {
|
|
|
209
320
|
assert.equal(typeof timeline[0].technique_used, "string");
|
|
210
321
|
});
|
|
211
322
|
});
|
|
323
|
+
describe("MCP — resume / list-vault / health", () => {
|
|
324
|
+
let backend;
|
|
325
|
+
let mgr;
|
|
326
|
+
beforeEach(() => {
|
|
327
|
+
resetPolicy();
|
|
328
|
+
backend = new MemoryBackend();
|
|
329
|
+
mgr = new SessionManager(backend);
|
|
330
|
+
});
|
|
331
|
+
it("loopforge_resume returns prompt via MCP handler", () => {
|
|
332
|
+
// Create session → save persists to vault
|
|
333
|
+
const start = TOOL_HANDLERS.loopforge_start(mgr, {
|
|
334
|
+
task: "Resume handler test",
|
|
335
|
+
loopId: "resume-hdl-test",
|
|
336
|
+
});
|
|
337
|
+
assert.ok("sessionId" in start);
|
|
338
|
+
// Simulate new SessionManager (process restart)
|
|
339
|
+
const mgr2 = new SessionManager(backend);
|
|
340
|
+
const result = TOOL_HANDLERS.loopforge_resume(mgr2, {
|
|
341
|
+
loopId: "resume-hdl-test",
|
|
342
|
+
});
|
|
343
|
+
assert.ok("prompt" in result, `expected prompt, got: ${JSON.stringify(result)}`);
|
|
344
|
+
assert.ok(result.prompt !== null);
|
|
345
|
+
});
|
|
346
|
+
it("loopforge_resume returns error for unknown loop", () => {
|
|
347
|
+
const result = TOOL_HANDLERS.loopforge_resume(mgr, {
|
|
348
|
+
loopId: "nonexistent",
|
|
349
|
+
});
|
|
350
|
+
assert.ok("error" in result);
|
|
351
|
+
});
|
|
352
|
+
it("loopforge_list includes vault-persisted sessions after restart", () => {
|
|
353
|
+
// Create a session on mgr → saved to vault
|
|
354
|
+
TOOL_HANDLERS.loopforge_start(mgr, {
|
|
355
|
+
task: "Vault list test",
|
|
356
|
+
loopId: "vault-list-loop",
|
|
357
|
+
});
|
|
358
|
+
// Fresh SessionManager (process restart)
|
|
359
|
+
const mgr2 = new SessionManager(backend);
|
|
360
|
+
const result = TOOL_HANDLERS.loopforge_list(mgr2, {});
|
|
361
|
+
const sessions = result.sessions;
|
|
362
|
+
const found = sessions.find((s) => s.loopId === "vault-list-loop");
|
|
363
|
+
assert.ok(found !== undefined, "vault-persisted session should appear in list");
|
|
364
|
+
});
|
|
365
|
+
it("loopforge_health returns health data for a started loop", () => {
|
|
366
|
+
TOOL_HANDLERS.loopforge_start(mgr, {
|
|
367
|
+
task: "Health test task",
|
|
368
|
+
loopId: "health-test",
|
|
369
|
+
constraints: ["Must use TypeScript"],
|
|
370
|
+
});
|
|
371
|
+
const result = TOOL_HANDLERS.loopforge_health(mgr, {
|
|
372
|
+
loopId: "health-test",
|
|
373
|
+
});
|
|
374
|
+
assert.ok("goal_alignment" in result, `expected goal_alignment, got: ${JSON.stringify(result)}`);
|
|
375
|
+
assert.ok("constraint_integrity" in result);
|
|
376
|
+
assert.ok("drift_detected" in result);
|
|
377
|
+
assert.ok("strategy_stability" in result);
|
|
378
|
+
assert.ok("task_continuity" in result);
|
|
379
|
+
});
|
|
380
|
+
it("loopforge_health returns error for unknown loop", () => {
|
|
381
|
+
const result = TOOL_HANDLERS.loopforge_health(mgr, {
|
|
382
|
+
loopId: "nonexistent",
|
|
383
|
+
});
|
|
384
|
+
assert.ok("error" in result);
|
|
385
|
+
});
|
|
386
|
+
it("loopforge_status shows technique after compiling", () => {
|
|
387
|
+
const start = TOOL_HANDLERS.loopforge_start(mgr, {
|
|
388
|
+
task: "Technique status test",
|
|
389
|
+
loopId: "technique-status",
|
|
390
|
+
});
|
|
391
|
+
const sessionId = String(start.sessionId);
|
|
392
|
+
const status = TOOL_HANDLERS.loopforge_status(mgr, { sessionId });
|
|
393
|
+
const technique = status.technique;
|
|
394
|
+
assert.ok(typeof technique === "string", "technique should be a string");
|
|
395
|
+
assert.ok(technique.length > 0, "technique should not be empty");
|
|
396
|
+
});
|
|
397
|
+
});
|
|
212
398
|
//# sourceMappingURL=mcp.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.test.js","sourceRoot":"","sources":["../../src/tests/mcp.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp.test.js","sourceRoot":"","sources":["../../src/tests/mcp.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loopforge",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"description": "Loop-Time Intelligence Layer for AI coding agents — per-iteration prompt compiler with structured memory, constraint inheritance, and drift correction.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -36,6 +36,9 @@ round (e.g. "audit the entire codebase and fix every issue").
|
|
|
36
36
|
│ 3. loopforge_next(sessionId, output) │
|
|
37
37
|
│ → if prompt: go to step 2 │
|
|
38
38
|
│ → if prompt=null: loop ended, read stopReason │
|
|
39
|
+
│ │
|
|
40
|
+
│ After restart: loopforge_resume(loopId) │
|
|
41
|
+
│ → picks up from last saved round │
|
|
39
42
|
└─────────────────────────────────────────────────────┘
|
|
40
43
|
```
|
|
41
44
|
|
|
@@ -104,10 +107,12 @@ If the result has a non-null `prompt`, execute it and repeat from Step 2.
|
|
|
104
107
|
|------|-------------|-----------|------------|
|
|
105
108
|
| `loopforge_start` | Beginning of every loop | `task`, `maxRounds?`, `constraints?` | `sessionId`, round 1 `prompt` |
|
|
106
109
|
| `loopforge_next` | After executing every round | `sessionId`, `output` (with eval block) | next `prompt` or `null` + `stopReason` |
|
|
107
|
-
| `loopforge_status` | Mid-loop checkpoint, user asks "how's it going" | `sessionId` | `round`, `qualityTrajectory`, `status` |
|
|
110
|
+
| `loopforge_status` | Mid-loop checkpoint, user asks "how's it going" | `sessionId` | `round`, `qualityTrajectory`, `status`, `technique` |
|
|
108
111
|
| `loopforge_stop` | User wants to abort, fatal error | `sessionId` | `roundsCompleted`, final trajectory |
|
|
109
|
-
| `loopforge_list` | User asks "what loops are running" | — | `sessions[]` |
|
|
112
|
+
| `loopforge_list` | User asks "what loops are running" | — | `sessions[]` (includes vault-persisted) |
|
|
110
113
|
| `loopforge_replay` | After loop ends, user asks "show me what happened" | `sessionId` | `timeline[]` with all rounds |
|
|
114
|
+
| `loopforge_resume` | Resume a loop after process restart | `loopId` | next `prompt` or `null` + `stopReason` |
|
|
115
|
+
| `loopforge_health` | Check loop health mid-run | `loopId` | goal alignment, constraint integrity, drift, strategy |
|
|
111
116
|
|
|
112
117
|
## Quality Signals (Read the Room)
|
|
113
118
|
|
|
@@ -142,6 +147,9 @@ The prompt changes between rounds based on your trajectory. Pay attention to:
|
|
|
142
147
|
narrow scope between rounds. Trust it — it sees the trajectory.
|
|
143
148
|
5. **Call loopforge_next within the same turn.** Don't leave a round hanging
|
|
144
149
|
across conversation turns. The MCP server is in-memory.
|
|
150
|
+
6. **After process restart, use loopforge_resume.** The session state is saved
|
|
151
|
+
to vault every round. Call `loopforge_resume` with the original `loopId` to
|
|
152
|
+
pick up where you left off — no need to restart from round 1.
|
|
145
153
|
|
|
146
154
|
## Example
|
|
147
155
|
|
package/dist/autonomous.d.ts
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/** LoopForge — Autonomous loop driver (v1.1).
|
|
2
|
-
*
|
|
3
|
-
* Closes the feedback loop: compile → agent executes → extract self-eval →
|
|
4
|
-
* auto-feedback → compile next → ... until task complete or circuit breaker.
|
|
5
|
-
*
|
|
6
|
-
* Zero API dependencies — LoopForge does NOT call AI APIs. The caller
|
|
7
|
-
* provides an execute callback or feeds agent output round by round.
|
|
8
|
-
*/
|
|
9
|
-
import { type LoopHealth, type SelfEvaluation } from "./protocol.js";
|
|
10
|
-
import { LoopForgeEngine } from "./engine.js";
|
|
11
|
-
export interface AutonomousConfig {
|
|
12
|
-
/** The task description — becomes the loop objective. */
|
|
13
|
-
task: string;
|
|
14
|
-
/** Kebab-case loop identifier. */
|
|
15
|
-
loopId: string;
|
|
16
|
-
/** Optional explicit goal ID. Derived from task if omitted. */
|
|
17
|
-
goalId?: string;
|
|
18
|
-
/** Maximum rounds before forced stop. Default 20. */
|
|
19
|
-
maxRounds?: number;
|
|
20
|
-
/** Health check interval (rounds). Default 3. */
|
|
21
|
-
healthCheckInterval?: number;
|
|
22
|
-
/** Optional path to a plan/spec file for constraint extraction. */
|
|
23
|
-
planSource?: string;
|
|
24
|
-
/** Constraints extracted from the plan (provided by caller). */
|
|
25
|
-
constraintsFromPlan?: string[];
|
|
26
|
-
/** Domain hint for technique routing. */
|
|
27
|
-
domain?: string;
|
|
28
|
-
}
|
|
29
|
-
export interface RoundOutput {
|
|
30
|
-
round: number;
|
|
31
|
-
/** The compiled prompt — ready for agent execution. */
|
|
32
|
-
prompt: string;
|
|
33
|
-
/** L0 | L1 | L2 */
|
|
34
|
-
recompileLevel: string;
|
|
35
|
-
/** Selected prompting technique. */
|
|
36
|
-
techniqueUsed: string;
|
|
37
|
-
/** Cross-round health snapshot (null on round 1 if no prior data). */
|
|
38
|
-
health: LoopHealth | null;
|
|
39
|
-
/** Quality score from the PREVIOUS round (null on round 1). */
|
|
40
|
-
lastQualityScore: number | null;
|
|
41
|
-
}
|
|
42
|
-
export type StopReason = "task_complete" | "circuit_breaker" | "max_rounds" | "stalled" | "extraction_failed";
|
|
43
|
-
export interface AutonomousResult {
|
|
44
|
-
/** Total rounds completed. */
|
|
45
|
-
roundsCompleted: number;
|
|
46
|
-
/** Why the loop stopped. */
|
|
47
|
-
stopReason: StopReason;
|
|
48
|
-
/** Health snapshot at stop. */
|
|
49
|
-
healthAtStop: LoopHealth | null;
|
|
50
|
-
/** Quality trajectory [round1_score, round2_score, ...]. */
|
|
51
|
-
qualityTrajectory: number[];
|
|
52
|
-
/** Whether the loop achieved its objective. */
|
|
53
|
-
success: boolean;
|
|
54
|
-
}
|
|
55
|
-
export interface RunOneRoundResult {
|
|
56
|
-
/** If stopNow is true, the loop should terminate. */
|
|
57
|
-
stopNow: boolean;
|
|
58
|
-
stopReason: StopReason | null;
|
|
59
|
-
/** The compiled prompt (null if stopping). */
|
|
60
|
-
roundOutput: RoundOutput | null;
|
|
61
|
-
/** Extracted self-evaluation (null on round 1 or if extraction failed). */
|
|
62
|
-
selfEval: SelfEvaluation | null;
|
|
63
|
-
/** Whether structured extraction succeeded. */
|
|
64
|
-
extractionSucceeded: boolean;
|
|
65
|
-
}
|
|
66
|
-
/** Run one round of the autonomous loop.
|
|
67
|
-
*
|
|
68
|
-
* Round 1 (agentOutput = null): compile the first prompt (L2 full build).
|
|
69
|
-
* Round N (agentOutput = string): extract self-eval, record auto-feedback,
|
|
70
|
-
* compile next prompt (L0/L1/L2 decided by the 4-gate router).
|
|
71
|
-
*
|
|
72
|
-
* Returns stopNow = true when the loop should terminate. */
|
|
73
|
-
export declare function runOneRound(engine: LoopForgeEngine, config: AutonomousConfig, currentRound: number, agentOutput: string | null): RunOneRoundResult;
|
|
74
|
-
/** Execute callback: takes a compiled prompt, returns the agent's output. */
|
|
75
|
-
export type AgentExecutor = (prompt: string, round: number) => Promise<string>;
|
|
76
|
-
/** Run a fully autonomous loop from start to finish.
|
|
77
|
-
*
|
|
78
|
-
* The `execute` callback is called with each compiled prompt.
|
|
79
|
-
* LoopForge does NOT call any AI API — the caller provides execution.
|
|
80
|
-
*
|
|
81
|
-
* Stops when: task complete, circuit breaker triggered, max rounds
|
|
82
|
-
* reached, or self-eval extraction fails. */
|
|
83
|
-
export declare function runAutonomousLoop(engine: LoopForgeEngine, config: AutonomousConfig, execute: AgentExecutor): Promise<AutonomousResult>;
|
|
84
|
-
//# sourceMappingURL=autonomous.d.ts.map
|
package/dist/autonomous.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autonomous.d.ts","sourceRoot":"","sources":["../src/autonomous.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EAIhB,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,iBAAiB,GACjB,YAAY,GACZ,SAAS,GACT,mBAAmB,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,4BAA4B;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,+BAA+B;IAC/B,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,8CAA8C;IAC9C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,+CAA+C;IAC/C,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;6DAM6D;AAC7D,wBAAgB,WAAW,CACzB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,iBAAiB,CAwLnB;AAMD,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE/E;;;;;;8CAM8C;AAC9C,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAiE3B"}
|
package/dist/autonomous.js
DELETED
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
/** LoopForge — Autonomous loop driver (v1.1).
|
|
2
|
-
*
|
|
3
|
-
* Closes the feedback loop: compile → agent executes → extract self-eval →
|
|
4
|
-
* auto-feedback → compile next → ... until task complete or circuit breaker.
|
|
5
|
-
*
|
|
6
|
-
* Zero API dependencies — LoopForge does NOT call AI APIs. The caller
|
|
7
|
-
* provides an execute callback or feeds agent output round by round.
|
|
8
|
-
*/
|
|
9
|
-
import { makeLoopCompileRequest, makeLoopRoundResult, makeVaultConfig, } from "./protocol.js";
|
|
10
|
-
import { extractSelfEvaluation, heuristicSelfEvaluation, } from "./engine.js";
|
|
11
|
-
/** Run one round of the autonomous loop.
|
|
12
|
-
*
|
|
13
|
-
* Round 1 (agentOutput = null): compile the first prompt (L2 full build).
|
|
14
|
-
* Round N (agentOutput = string): extract self-eval, record auto-feedback,
|
|
15
|
-
* compile next prompt (L0/L1/L2 decided by the 4-gate router).
|
|
16
|
-
*
|
|
17
|
-
* Returns stopNow = true when the loop should terminate. */
|
|
18
|
-
export function runOneRound(engine, config, currentRound, agentOutput) {
|
|
19
|
-
const maxRounds = config.maxRounds ?? 20;
|
|
20
|
-
const healthInterval = config.healthCheckInterval ?? 3;
|
|
21
|
-
// ── Check max rounds before doing anything ──────────────────────────
|
|
22
|
-
if (currentRound > maxRounds) {
|
|
23
|
-
return {
|
|
24
|
-
stopNow: true,
|
|
25
|
-
stopReason: "max_rounds",
|
|
26
|
-
roundOutput: null,
|
|
27
|
-
selfEval: null,
|
|
28
|
-
extractionSucceeded: false,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
// ── Round N (N > 1): Extract self-eval and record feedback ──────────
|
|
32
|
-
let selfEval = null;
|
|
33
|
-
let extractionSucceeded = false;
|
|
34
|
-
if (agentOutput !== null && currentRound > 1) {
|
|
35
|
-
// Try structured extraction first
|
|
36
|
-
selfEval = extractSelfEvaluation(agentOutput);
|
|
37
|
-
extractionSucceeded = selfEval !== null;
|
|
38
|
-
// Fallback to heuristic if structured extraction failed
|
|
39
|
-
const usedHeuristic = selfEval === null;
|
|
40
|
-
if (selfEval === null) {
|
|
41
|
-
selfEval = heuristicSelfEvaluation(agentOutput);
|
|
42
|
-
}
|
|
43
|
-
// Record auto-feedback (even heuristic — best effort for vault audit trail)
|
|
44
|
-
if (selfEval !== null) {
|
|
45
|
-
engine.autoFeedback(selfEval, config.loopId, currentRound - 1, // feedback is for the PREVIOUS round
|
|
46
|
-
config.task);
|
|
47
|
-
}
|
|
48
|
-
// Stop if structured extraction failed — heuristic is too low-confidence
|
|
49
|
-
// to continue the loop autonomously
|
|
50
|
-
if (usedHeuristic) {
|
|
51
|
-
return {
|
|
52
|
-
stopNow: true,
|
|
53
|
-
stopReason: "extraction_failed",
|
|
54
|
-
roundOutput: null,
|
|
55
|
-
selfEval,
|
|
56
|
-
extractionSucceeded: false,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
// Check stop conditions from agent's self-eval (structured only)
|
|
60
|
-
if (selfEval !== null && !selfEval.should_continue) {
|
|
61
|
-
return {
|
|
62
|
-
stopNow: true,
|
|
63
|
-
stopReason: "task_complete",
|
|
64
|
-
roundOutput: null,
|
|
65
|
-
selfEval,
|
|
66
|
-
extractionSucceeded,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
// Check circuit breaker after recording feedback
|
|
70
|
-
if (engine.shouldBreak()) {
|
|
71
|
-
return {
|
|
72
|
-
stopNow: true,
|
|
73
|
-
stopReason: "circuit_breaker",
|
|
74
|
-
roundOutput: null,
|
|
75
|
-
selfEval,
|
|
76
|
-
extractionSucceeded,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
// Check if extraction failed entirely
|
|
80
|
-
if (selfEval === null) {
|
|
81
|
-
return {
|
|
82
|
-
stopNow: true,
|
|
83
|
-
stopReason: "extraction_failed",
|
|
84
|
-
roundOutput: null,
|
|
85
|
-
selfEval: null,
|
|
86
|
-
extractionSucceeded: false,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// ── Compile the next prompt ────────────────────────────────────────
|
|
91
|
-
const lcr = makeLoopCompileRequest({
|
|
92
|
-
loop_id: config.loopId,
|
|
93
|
-
round: currentRound,
|
|
94
|
-
goal_id: config.goalId ?? "",
|
|
95
|
-
task: config.task,
|
|
96
|
-
domain: config.domain ?? "",
|
|
97
|
-
plan_source: config.planSource ?? null,
|
|
98
|
-
constraints_from_plan: config.constraintsFromPlan ?? [],
|
|
99
|
-
health_check_interval: healthInterval,
|
|
100
|
-
vault_config: makeVaultConfig(),
|
|
101
|
-
});
|
|
102
|
-
// Attach last round result if we have self-eval data
|
|
103
|
-
if (selfEval !== null && currentRound > 1) {
|
|
104
|
-
lcr.last_round_result = makeLoopRoundResult({
|
|
105
|
-
round: currentRound - 1,
|
|
106
|
-
success: selfEval.success,
|
|
107
|
-
output_summary: selfEval.output_summary,
|
|
108
|
-
constraint_violations: selfEval.constraint_violations,
|
|
109
|
-
manual_fixes_needed: "",
|
|
110
|
-
quality_score: 0, // Will be backfilled from vault
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
const result = engine.invokeLoopCompile({
|
|
114
|
-
task: config.task,
|
|
115
|
-
mode: "loop_compile",
|
|
116
|
-
vault_config: makeVaultConfig(),
|
|
117
|
-
feedback: null,
|
|
118
|
-
skill_name: null,
|
|
119
|
-
task_id: null,
|
|
120
|
-
loop_id: config.loopId,
|
|
121
|
-
round: currentRound,
|
|
122
|
-
goal_id: config.goalId ?? "",
|
|
123
|
-
domain: config.domain ?? "",
|
|
124
|
-
plan_source: config.planSource ?? null,
|
|
125
|
-
constraints_from_plan: config.constraintsFromPlan ?? [],
|
|
126
|
-
health_check_interval: healthInterval,
|
|
127
|
-
last_round_result: lcr.last_round_result ?? undefined,
|
|
128
|
-
});
|
|
129
|
-
if (result.status === "error" || !result.response?.prompt) {
|
|
130
|
-
return {
|
|
131
|
-
stopNow: true,
|
|
132
|
-
stopReason: "stalled",
|
|
133
|
-
roundOutput: null,
|
|
134
|
-
selfEval,
|
|
135
|
-
extractionSucceeded,
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
// Extract health from the response (it's embedded in the prompt text as markdown)
|
|
139
|
-
// The health data is in the LoopCompileResponse, but we need to get it from the engine
|
|
140
|
-
const context = engine.hydrateLoopContext(config.loopId);
|
|
141
|
-
let health = null;
|
|
142
|
-
if (context) {
|
|
143
|
-
const results = context.results ?? [];
|
|
144
|
-
const latest = results[results.length - 1];
|
|
145
|
-
if (latest) {
|
|
146
|
-
const lineage = (latest.loop_lineage ?? {});
|
|
147
|
-
// Health is computed per-round, not stored directly in lineage
|
|
148
|
-
// We'll report null for simplicity — the prompt text contains health info
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
// Determine last quality score
|
|
152
|
-
let lastQuality = null;
|
|
153
|
-
if (selfEval !== null) {
|
|
154
|
-
const fb = selfEval;
|
|
155
|
-
// Recompute using the same formula as scoreQuality
|
|
156
|
-
if (fb.success && fb.constraint_violations.length === 0)
|
|
157
|
-
lastQuality = 5;
|
|
158
|
-
else if (fb.success && fb.constraint_violations.length === 0)
|
|
159
|
-
lastQuality = 4;
|
|
160
|
-
else if (fb.success)
|
|
161
|
-
lastQuality = 3;
|
|
162
|
-
else if (fb.constraint_violations.length > 0)
|
|
163
|
-
lastQuality = 2;
|
|
164
|
-
else
|
|
165
|
-
lastQuality = 1;
|
|
166
|
-
}
|
|
167
|
-
return {
|
|
168
|
-
stopNow: false,
|
|
169
|
-
stopReason: null,
|
|
170
|
-
roundOutput: {
|
|
171
|
-
round: currentRound,
|
|
172
|
-
prompt: result.response.prompt,
|
|
173
|
-
recompileLevel: result.response.analysis?.rationale?.includes("l0")
|
|
174
|
-
? "l0"
|
|
175
|
-
: result.response.analysis?.rationale?.includes("l1")
|
|
176
|
-
? "l1"
|
|
177
|
-
: "l2",
|
|
178
|
-
techniqueUsed: result.response.analysis?.technique ?? "unknown",
|
|
179
|
-
health,
|
|
180
|
-
lastQualityScore: lastQuality,
|
|
181
|
-
},
|
|
182
|
-
selfEval,
|
|
183
|
-
extractionSucceeded,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
/** Run a fully autonomous loop from start to finish.
|
|
187
|
-
*
|
|
188
|
-
* The `execute` callback is called with each compiled prompt.
|
|
189
|
-
* LoopForge does NOT call any AI API — the caller provides execution.
|
|
190
|
-
*
|
|
191
|
-
* Stops when: task complete, circuit breaker triggered, max rounds
|
|
192
|
-
* reached, or self-eval extraction fails. */
|
|
193
|
-
export async function runAutonomousLoop(engine, config, execute) {
|
|
194
|
-
const maxRounds = config.maxRounds ?? 20;
|
|
195
|
-
const qualityTrajectory = [];
|
|
196
|
-
let agentOutput = null;
|
|
197
|
-
let finalStopReason = "max_rounds";
|
|
198
|
-
for (let round = 1; round <= maxRounds; round++) {
|
|
199
|
-
const roundResult = runOneRound(engine, config, round, agentOutput);
|
|
200
|
-
if (roundResult.stopNow) {
|
|
201
|
-
finalStopReason = roundResult.stopReason ?? "stalled";
|
|
202
|
-
break;
|
|
203
|
-
}
|
|
204
|
-
if (!roundResult.roundOutput) {
|
|
205
|
-
finalStopReason = "stalled";
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
// Track quality
|
|
209
|
-
if (roundResult.roundOutput.lastQualityScore !== null) {
|
|
210
|
-
qualityTrajectory.push(roundResult.roundOutput.lastQualityScore);
|
|
211
|
-
}
|
|
212
|
-
// Execute the prompt
|
|
213
|
-
try {
|
|
214
|
-
agentOutput = await execute(roundResult.roundOutput.prompt, round);
|
|
215
|
-
}
|
|
216
|
-
catch {
|
|
217
|
-
finalStopReason = "stalled";
|
|
218
|
-
break;
|
|
219
|
-
}
|
|
220
|
-
// If this was the last round and we didn't stop earlier
|
|
221
|
-
if (round === maxRounds) {
|
|
222
|
-
finalStopReason = "max_rounds";
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
// Get final health snapshot
|
|
226
|
-
let healthAtStop = null;
|
|
227
|
-
try {
|
|
228
|
-
const context = engine.hydrateLoopContext(config.loopId);
|
|
229
|
-
if (context) {
|
|
230
|
-
const results = context.results ?? [];
|
|
231
|
-
if (results.length > 0) {
|
|
232
|
-
const latest = results[results.length - 1];
|
|
233
|
-
const lineage = (latest.loop_lineage ?? {});
|
|
234
|
-
// Health is in the lineage if it was stored
|
|
235
|
-
healthAtStop = lineage.loop_health ?? null;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
// Best effort
|
|
241
|
-
}
|
|
242
|
-
return {
|
|
243
|
-
roundsCompleted: qualityTrajectory.length,
|
|
244
|
-
stopReason: finalStopReason,
|
|
245
|
-
healthAtStop,
|
|
246
|
-
qualityTrajectory,
|
|
247
|
-
success: finalStopReason === "task_complete",
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
//# sourceMappingURL=autonomous.js.map
|
package/dist/autonomous.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autonomous.js","sourceRoot":"","sources":["../src/autonomous.ts"],"names":[],"mappings":"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"}
|