loopforge 1.3.1 → 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/dist/backends/fs.d.ts +5 -0
- package/dist/backends/fs.d.ts.map +1 -1
- package/dist/backends/fs.js +66 -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 +202 -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 +11 -3
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +106 -31
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +133 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +116 -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 +191 -2
- package/dist/tests/loop-compiler.test.js.map +1 -1
- package/dist/tests/mcp.test.js +87 -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 +95 -54
- package/dist/cli.d.ts +0 -7
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -458
- package/dist/cli.js.map +0 -1
- package/dist/tests/adapter.test.js +0 -104
- package/dist/tests/adapter.test.js.map +0 -1
|
@@ -7,7 +7,7 @@ import { resetPolicy } from "../policy.js";
|
|
|
7
7
|
function makeRequest(overrides = {}) {
|
|
8
8
|
return {
|
|
9
9
|
task: "Audit ERC20 token",
|
|
10
|
-
mode: Mode.
|
|
10
|
+
mode: Mode.LOOP_COMPILE,
|
|
11
11
|
vault_config: {
|
|
12
12
|
project_vault: ".promptcraft/prompt_vault.json",
|
|
13
13
|
global_vault: "~/.promptcraft/global_vault.json",
|
|
@@ -30,29 +30,15 @@ describe("Engine — Initialisation", () => {
|
|
|
30
30
|
});
|
|
31
31
|
it("engine lazy-inits state on first invocation", () => {
|
|
32
32
|
const engine = createEngine();
|
|
33
|
-
engine.
|
|
33
|
+
engine.invokeLoopCompile(makeRequest({
|
|
34
|
+
loop_id: "test",
|
|
35
|
+
round: 1,
|
|
36
|
+
goal_id: "audit",
|
|
37
|
+
}));
|
|
34
38
|
assert.notEqual(engine.state, null);
|
|
35
39
|
assert.equal(engine.state.call_count, 0);
|
|
36
40
|
});
|
|
37
41
|
});
|
|
38
|
-
describe("Engine — Build mode (internal)", () => {
|
|
39
|
-
beforeEach(() => resetPolicy());
|
|
40
|
-
it("returns OK with generated prompt", () => {
|
|
41
|
-
const engine = createEngine();
|
|
42
|
-
const result = engine.invokeBuild(makeRequest({ task: "Audit ERC20" }));
|
|
43
|
-
assert.equal(result.status, AgentStatus.OK);
|
|
44
|
-
assert.ok(result.response.prompt.includes("LoopForge Build"));
|
|
45
|
-
assert.ok(result.response.prompt.includes("Audit ERC20"));
|
|
46
|
-
assert.notEqual(result.response.analysis, null);
|
|
47
|
-
});
|
|
48
|
-
it("sets technique in analysis", () => {
|
|
49
|
-
const engine = createEngine();
|
|
50
|
-
const result = engine.invokeBuild(makeRequest({
|
|
51
|
-
task: "Rename getCwd to getCurrentWorkingDirectory",
|
|
52
|
-
}));
|
|
53
|
-
assert.equal(result.response.analysis.technique, "zero-shot");
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
42
|
describe("Engine — Feedback mode", () => {
|
|
57
43
|
beforeEach(() => resetPolicy());
|
|
58
44
|
it("returns error when no feedback payload", () => {
|
|
@@ -109,19 +95,28 @@ describe("Engine — Circuit breaker", () => {
|
|
|
109
95
|
});
|
|
110
96
|
it("returns false when not enough data points", () => {
|
|
111
97
|
const engine = createEngine();
|
|
112
|
-
engine.
|
|
98
|
+
engine.invokeFeedback(makeRequest({
|
|
99
|
+
mode: Mode.FEEDBACK,
|
|
100
|
+
feedback: makeExecutionFeedback({ success: true, output: "ok" }),
|
|
101
|
+
})); // init state
|
|
113
102
|
engine.state.quality_trend = [5, 4];
|
|
114
103
|
assert.equal(engine.shouldBreak(), false);
|
|
115
104
|
});
|
|
116
105
|
it("returns true when quality is non-increasing for 3 rounds", () => {
|
|
117
106
|
const engine = createEngine();
|
|
118
|
-
engine.
|
|
107
|
+
engine.invokeFeedback(makeRequest({
|
|
108
|
+
mode: Mode.FEEDBACK,
|
|
109
|
+
feedback: makeExecutionFeedback({ success: true, output: "ok" }),
|
|
110
|
+
}));
|
|
119
111
|
engine.state.quality_trend = [3, 3, 3];
|
|
120
112
|
assert.equal(engine.shouldBreak(), true);
|
|
121
113
|
});
|
|
122
114
|
it("returns false when quality is improving", () => {
|
|
123
115
|
const engine = createEngine();
|
|
124
|
-
engine.
|
|
116
|
+
engine.invokeFeedback(makeRequest({
|
|
117
|
+
mode: Mode.FEEDBACK,
|
|
118
|
+
feedback: makeExecutionFeedback({ success: true, output: "ok" }),
|
|
119
|
+
}));
|
|
125
120
|
engine.state.quality_trend = [3, 4, 5];
|
|
126
121
|
assert.equal(engine.shouldBreak(), false);
|
|
127
122
|
});
|
|
@@ -169,32 +164,212 @@ describe("Engine — Loop Compile mode", () => {
|
|
|
169
164
|
goal_id: "audit",
|
|
170
165
|
task: "Check approve race condition",
|
|
171
166
|
});
|
|
172
|
-
//
|
|
167
|
+
// Compiles at L2 when no prior lineage found
|
|
173
168
|
const result = engine.invokeLoopCompile(req);
|
|
174
169
|
assert.equal(result.status, AgentStatus.OK);
|
|
175
170
|
});
|
|
176
171
|
});
|
|
177
|
-
describe("Engine —
|
|
172
|
+
describe("Engine — P0-P5 Cognitive Evolution (v1.7 E2E)", () => {
|
|
178
173
|
beforeEach(() => resetPolicy());
|
|
179
|
-
it("
|
|
174
|
+
it("P0: discovered_constraints survive engine boundary and reach compiler", () => {
|
|
180
175
|
const engine = createEngine();
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
+
quality_score: 5,
|
|
201
|
+
discovered_constraints: ["Use SafeERC20 for all external calls"],
|
|
202
|
+
objective_refinement: "Scope includes upgradeable proxy patterns",
|
|
203
|
+
emerged_subtasks: ["Audit proxy init", "Verify timelock"],
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
assert.equal(r2.status, AgentStatus.OK);
|
|
207
|
+
const prompt = r2.response.prompt;
|
|
208
|
+
// P0: discovered constraint should appear in active constraints
|
|
209
|
+
assert.ok(prompt.includes("SafeERC20"), "P0: discovered constraint not in prompt");
|
|
210
|
+
// P2: emerged subtasks → suggested next task
|
|
211
|
+
assert.ok(prompt.includes("proxy init") || prompt.includes("timelock"), "P2: emerged subtasks not forwarded");
|
|
184
212
|
});
|
|
185
|
-
it("
|
|
213
|
+
it("P4: execution_evidence survives engine boundary and generates progress dashboard", () => {
|
|
186
214
|
const engine = createEngine();
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
215
|
+
// Round 1
|
|
216
|
+
engine.invokeLoopCompile(makeRequest({
|
|
217
|
+
mode: Mode.LOOP_COMPILE,
|
|
218
|
+
loop_id: "p4-test",
|
|
219
|
+
round: 1,
|
|
220
|
+
goal_id: "audit",
|
|
221
|
+
task: "Fix security bugs",
|
|
222
|
+
loop_objective: {
|
|
223
|
+
objective: "Fix all security bugs",
|
|
224
|
+
success_criteria: ["No reentrancy", "Access control OK", "Overflow checks"],
|
|
225
|
+
hard_constraints: [],
|
|
226
|
+
created_at_round: 1,
|
|
227
|
+
loop_id: "p4-test",
|
|
228
|
+
},
|
|
229
|
+
}));
|
|
230
|
+
// Round 2 with execution evidence — force L2 so progress dashboard is rendered
|
|
231
|
+
const r2 = engine.invokeLoopCompile({
|
|
232
|
+
...makeRequest({
|
|
233
|
+
mode: Mode.LOOP_COMPILE,
|
|
234
|
+
loop_id: "p4-test",
|
|
235
|
+
round: 2,
|
|
236
|
+
goal_id: "audit",
|
|
237
|
+
task: "Fix security bugs",
|
|
238
|
+
force_level: "l2", // trigger full recompile for P4 processing
|
|
239
|
+
loop_objective: {
|
|
240
|
+
objective: "Fix all security bugs",
|
|
241
|
+
success_criteria: ["No reentrancy", "Access control OK", "Overflow checks"],
|
|
242
|
+
hard_constraints: [],
|
|
243
|
+
created_at_round: 1,
|
|
244
|
+
loop_id: "p4-test",
|
|
245
|
+
},
|
|
246
|
+
}),
|
|
247
|
+
last_round_result: {
|
|
248
|
+
round: 1,
|
|
249
|
+
success: true,
|
|
250
|
+
output_summary: "Fixed reentrancy in withdraw()",
|
|
251
|
+
constraint_violations: [],
|
|
252
|
+
manual_fixes_needed: "",
|
|
253
|
+
quality_score: 5,
|
|
254
|
+
execution_evidence: {
|
|
255
|
+
files_changed: ["contracts/Token.sol", "test/Token.test.ts"],
|
|
256
|
+
test_results: { passed: 24, failed: 0, skipped: 0 },
|
|
257
|
+
success_criteria_met: ["No reentrancy"],
|
|
258
|
+
success_criteria_remaining: ["Access control OK", "Overflow checks"],
|
|
259
|
+
progress_estimate: 0.33,
|
|
191
260
|
},
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
assert.equal(r2.status, AgentStatus.OK);
|
|
264
|
+
const prompt = r2.response.prompt;
|
|
265
|
+
// P4: Progress dashboard should appear (L2 recompile)
|
|
266
|
+
assert.ok(prompt.includes("Progress Dashboard"), "P4: progress dashboard missing");
|
|
267
|
+
assert.ok(prompt.includes("1/3"), "P4: criteria count missing");
|
|
268
|
+
assert.ok(prompt.includes("Token.sol"), "P4: files_changed missing");
|
|
269
|
+
});
|
|
270
|
+
it("P5: wrong_assumptions are forwarded to compiler as key lessons", () => {
|
|
271
|
+
const engine = createEngine();
|
|
272
|
+
engine.invokeLoopCompile(makeRequest({
|
|
273
|
+
mode: Mode.LOOP_COMPILE,
|
|
274
|
+
loop_id: "p5-test",
|
|
275
|
+
round: 1,
|
|
276
|
+
goal_id: "audit",
|
|
277
|
+
task: "Audit ERC20",
|
|
278
|
+
}));
|
|
279
|
+
const r2 = engine.invokeLoopCompile({
|
|
280
|
+
...makeRequest({
|
|
281
|
+
mode: Mode.LOOP_COMPILE,
|
|
282
|
+
loop_id: "p5-test",
|
|
283
|
+
round: 2,
|
|
284
|
+
goal_id: "audit",
|
|
285
|
+
task: "Audit ERC20",
|
|
286
|
+
}),
|
|
287
|
+
last_round_result: {
|
|
288
|
+
round: 1,
|
|
289
|
+
success: false,
|
|
290
|
+
output_summary: "Found missing access control",
|
|
291
|
+
constraint_violations: [],
|
|
292
|
+
manual_fixes_needed: "",
|
|
293
|
+
quality_score: 2,
|
|
294
|
+
wrong_assumptions: ["Assumed OZ v4.0 has no known issues"],
|
|
295
|
+
retracted_constraints: [],
|
|
296
|
+
revised_success_criteria: [],
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
assert.equal(r2.status, AgentStatus.OK);
|
|
300
|
+
const prompt = r2.response.prompt;
|
|
301
|
+
// Wrong assumptions should appear in the prompt
|
|
302
|
+
assert.ok(prompt.includes("wrong assumption") || prompt.includes("Wrong assumption") ||
|
|
303
|
+
prompt.includes("assumed") || prompt.includes("Assumed"), "P5: wrong_assumptions not reflected in prompt");
|
|
304
|
+
});
|
|
305
|
+
it("P5: retracted_constraints are removed from active set", () => {
|
|
306
|
+
const engine = createEngine();
|
|
307
|
+
engine.invokeLoopCompile(makeRequest({
|
|
308
|
+
mode: Mode.LOOP_COMPILE,
|
|
309
|
+
loop_id: "p5b-test",
|
|
310
|
+
round: 1,
|
|
311
|
+
goal_id: "audit",
|
|
312
|
+
task: "Audit ERC20",
|
|
313
|
+
}));
|
|
314
|
+
const r2 = engine.invokeLoopCompile({
|
|
315
|
+
...makeRequest({
|
|
316
|
+
mode: Mode.LOOP_COMPILE,
|
|
317
|
+
loop_id: "p5b-test",
|
|
318
|
+
round: 2,
|
|
319
|
+
goal_id: "audit",
|
|
320
|
+
task: "Audit ERC20",
|
|
321
|
+
}),
|
|
322
|
+
last_round_result: {
|
|
323
|
+
round: 1,
|
|
324
|
+
success: true,
|
|
325
|
+
output_summary: "Audited contracts",
|
|
326
|
+
constraint_violations: [],
|
|
327
|
+
manual_fixes_needed: "",
|
|
328
|
+
quality_score: 5,
|
|
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" },
|
|
192
365
|
],
|
|
193
|
-
|
|
194
|
-
};
|
|
195
|
-
const result = engine.handleReview(makeRequest({ mode: Mode.REVIEW }), hydrateResults);
|
|
366
|
+
});
|
|
196
367
|
assert.equal(result.status, AgentStatus.OK);
|
|
197
|
-
|
|
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");
|
|
198
373
|
});
|
|
199
374
|
});
|
|
200
375
|
//# sourceMappingURL=engine.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/tests/engine.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/tests/engine.test.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACL,eAAe,EACf,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,EACX,IAAI,EACJ,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,SAAS,WAAW,CAAC,YAAqC,EAAE;IAC1D,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,IAAI,CAAC,YAAY;QACvB,YAAY,EAAE;YACZ,aAAa,EAAE,gCAAgC;YAC/C,YAAY,EAAE,kCAAkC;YAChD,UAAU,EAAE,QAAQ;YACpB,SAAS,EAAE,KAAK;SACjB;QACD,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,IAAI;QACb,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,YAAY,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC;YACnC,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAS,CAAC,KAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,QAAQ,EAAE,qBAAqB,CAAC;gBAC9B,OAAO,EAAE,IAAI;gBACb,qBAAqB,EAAE,EAAE;gBACzB,mBAAmB,EAAE,EAAE;gBACvB,MAAM,EAAE,kBAAkB;aAC3B,CAAC;SACH,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAS,CAAC,MAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,QAAQ,EAAE,qBAAqB,CAAC;gBAC9B,OAAO,EAAE,IAAI;gBACb,qBAAqB,EAAE,EAAE;gBACzB,mBAAmB,EAAE,YAAY;gBACjC,MAAM,EAAE,0BAA0B;aACnC,CAAC;SACH,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAS,CAAC,MAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,QAAQ,EAAE,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACjE,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,QAAQ,EAAE,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACjE,CAAC,CAAC,CAAC,CAAC,aAAa;QAClB,MAAM,CAAC,KAAM,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,QAAQ,EAAE,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACjE,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,KAAM,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,QAAQ,EAAE,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACjE,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,KAAM,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAS,CAAC,MAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,mBAAmB;YACzB,cAAc,EAAE;gBACd,SAAS,EAAE,qBAAqB;gBAChC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC;gBACpC,gBAAgB,EAAE,EAAE;gBACpB,gBAAgB,EAAE,CAAC;gBACnB,OAAO,EAAE,MAAM;aAChB;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAS,CAAC,MAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,8BAA8B;SACrC,CAAC,CAAC;QACH,6CAA6C;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,wCAAwC;QACxC,MAAM,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC;YAC9C,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,mBAAmB;SAC1B,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,6DAA6D;QAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAClC,GAAG,WAAW,CAAC;gBACb,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,mBAAmB;aAC1B,CAAC;YACF,iBAAiB,EAAE;gBACjB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,yBAAyB;gBACzC,qBAAqB,EAAE,EAAE;gBACzB,mBAAmB,EAAE,EAAE;gBACvB,aAAa,EAAE,CAAC;gBAChB,sBAAsB,EAAE,CAAC,sCAAsC,CAAC;gBAChE,oBAAoB,EAAE,2CAA2C;gBACjE,gBAAgB,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;aAC1D;SAC6B,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,EAAE,CAAC,QAAS,CAAC,MAAO,CAAC;QACpC,gEAAgE;QAChE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,yCAAyC,CAAC,CAAC;QACnF,6CAA6C;QAC7C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EACpE,oCAAoC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,UAAU;QACV,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,mBAAmB;YACzB,cAAc,EAAE;gBACd,SAAS,EAAE,uBAAuB;gBAClC,gBAAgB,EAAE,CAAC,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,CAAC;gBAC3E,gBAAgB,EAAE,EAAE;gBACpB,gBAAgB,EAAE,CAAC;gBACnB,OAAO,EAAE,SAAS;aACnB;SACF,CAAC,CAAC,CAAC;QACJ,+EAA+E;QAC/E,MAAM,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAClC,GAAG,WAAW,CAAC;gBACb,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,IAAI,EAAG,2CAA2C;gBAC/D,cAAc,EAAE;oBACd,SAAS,EAAE,uBAAuB;oBAClC,gBAAgB,EAAE,CAAC,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,CAAC;oBAC3E,gBAAgB,EAAE,EAAE;oBACpB,gBAAgB,EAAE,CAAC;oBACnB,OAAO,EAAE,SAAS;iBACnB;aACF,CAAC;YACF,iBAAiB,EAAE;gBACjB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,gCAAgC;gBAChD,qBAAqB,EAAE,EAAE;gBACzB,mBAAmB,EAAE,EAAE;gBACvB,aAAa,EAAE,CAAC;gBAChB,kBAAkB,EAAE;oBAClB,aAAa,EAAE,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;oBAC5D,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;oBACnD,oBAAoB,EAAE,CAAC,eAAe,CAAC;oBACvC,0BAA0B,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;oBACpE,iBAAiB,EAAE,IAAI;iBACxB;aACF;SAC6B,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,EAAE,CAAC,QAAS,CAAC,MAAO,CAAC;QACpC,sDAAsD;QACtD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,gCAAgC,CAAC,CAAC;QACnF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,4BAA4B,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,2BAA2B,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC,CAAC;QACJ,MAAM,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAClC,GAAG,WAAW,CAAC;gBACb,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,aAAa;aACpB,CAAC;YACF,iBAAiB,EAAE;gBACjB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,8BAA8B;gBAC9C,qBAAqB,EAAE,EAAE;gBACzB,mBAAmB,EAAE,EAAE;gBACvB,aAAa,EAAE,CAAC;gBAChB,iBAAiB,EAAE,CAAC,qCAAqC,CAAC;gBAC1D,qBAAqB,EAAE,EAAE;gBACzB,wBAAwB,EAAE,EAAE;aAC7B;SAC6B,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,EAAE,CAAC,QAAS,CAAC,MAAO,CAAC;QACpC,gDAAgD;QAChD,MAAM,CAAC,EAAE,CACP,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC1E,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EACxD,+CAA+C,CAChD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC;YACnC,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,OAAO,EAAE,UAAU;YACnB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC,CAAC;QACJ,MAAM,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC;YAClC,GAAG,WAAW,CAAC;gBACb,IAAI,EAAE,IAAI,CAAC,YAAY;gBACvB,OAAO,EAAE,UAAU;gBACnB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,aAAa;aACpB,CAAC;YACF,iBAAiB,EAAE;gBACjB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,mBAAmB;gBACnC,qBAAqB,EAAE,EAAE;gBACzB,mBAAmB,EAAE,EAAE;gBACvB,aAAa,EAAE,CAAC;gBAChB,sBAAsB,EAAE,CAAC,kBAAkB,CAAC;gBAC5C,qBAAqB,EAAE,CAAC,kBAAkB,CAAC;gBAC3C,iBAAiB,EAAE,EAAE;gBACrB,wBAAwB,EAAE,EAAE;aAC7B;SAC6B,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACxC,iFAAiF;QACjF,8DAA8D;QAC9D,MAAM,MAAM,GAAG,EAAE,CAAC,QAAS,CAAC,MAAO,CAAC;QACpC,gFAAgF;QAChF,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACzD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,WAAW,IAAI,CAAC;gBAClC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC;gBACxC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9B,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACjD,4DAA4D,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;YACtC,GAAG,GAAG;YACN,kBAAkB,EAAE;gBAClB,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,iCAAiC;oBAC7E,MAAM,EAAE,4EAA4E,EAAE;gBACxF,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,qBAAqB;oBAC1E,MAAM,EAAE,oCAAoC,EAAE;aACjD;SAC6B,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAS,CAAC,MAAO,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACxE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAC5D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,sCAAsC,CAAC,CAAC;QACnF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,8BAA8B,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -33,19 +33,19 @@ describe("Generated JSON Schema — top-level", () => {
|
|
|
33
33
|
assert.ok(String(schema.$id ?? "").includes("loopforge"));
|
|
34
34
|
assert.ok(String(schema.title ?? "").includes("LoopForge"));
|
|
35
35
|
});
|
|
36
|
-
it("has
|
|
36
|
+
it("has 32 $defs (4 enums + 27 interfaces + 1 type alias)", () => {
|
|
37
37
|
const names = Object.keys(defs);
|
|
38
|
-
assert.equal(names.length,
|
|
38
|
+
assert.equal(names.length, 32, `expected 32, got ${names.length}: ${names.join(", ")}`);
|
|
39
39
|
});
|
|
40
40
|
});
|
|
41
41
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
42
42
|
// Enums
|
|
43
43
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
44
44
|
describe("Enums", () => {
|
|
45
|
-
it("Mode —
|
|
45
|
+
it("Mode — 2 values", () => {
|
|
46
46
|
assert.equal(def("Mode").type, "string");
|
|
47
47
|
assert.deepEqual(def("Mode").enum, [
|
|
48
|
-
"loop_compile", "feedback",
|
|
48
|
+
"loop_compile", "feedback",
|
|
49
49
|
]);
|
|
50
50
|
});
|
|
51
51
|
it("AgentStatus — 3 values", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-schema.test.js","sourceRoot":"","sources":["../../src/tests/generate-schema.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,kEAAkE;AAClE,iFAAiF;AACjF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,yBAAyB,CAAC,EAAE,OAAO,CAAC,CACpD,CAAC;AAE7B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAA4C,CAAC;AAE7E,4CAA4C;AAC5C,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,IAAI,CAAC,IAAI,CAA4B,CAAC;AAC/C,CAAC;AACD,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,CAA4C,CAAC;AACjF,CAAC;AACD,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAa,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,oBAAoB,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;YACjC,cAAc,EAAE,UAAU
|
|
1
|
+
{"version":3,"file":"generate-schema.test.js","sourceRoot":"","sources":["../../src/tests/generate-schema.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,kEAAkE;AAClE,iFAAiF;AACjF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,yBAAyB,CAAC,EAAE,OAAO,CAAC,CACpD,CAAC;AAE7B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAA4C,CAAC;AAE7E,4CAA4C;AAC5C,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,IAAI,CAAC,IAAI,CAA4B,CAAC;AAC/C,CAAC;AACD,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,CAA4C,CAAC;AACjF,CAAC;AACD,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAa,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,8CAA8C,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,oBAAoB,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;YACjC,cAAc,EAAE,UAAU;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;YACtC,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc;YACxD,WAAW,EAAE,eAAe,EAAE,iBAAiB;SAChD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAE9E,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EACxD,sEAAsE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,gBAAgB,CAAC,KAAiC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,gBAAgB,CAAC,KAAiC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,QAAQ,CAAC,KAAiC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,kBAAkB,CAAC,KAAiC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC,cAAc,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,8CAA8C,CAAC,CAAC;QACxE,MAAM,IAAI,GAAI,MAAM,CAAC,KAAmC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5F,MAAM,KAAK,GAAI,MAAM,CAAC,KAAmC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC3F,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,IAAI,GAAI,KAAK,CAAC,KAAmC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3F,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,IAAI,GAAI,KAAK,CAAC,KAAmC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3F,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,KAAK,CACV,GAAG,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,EAC5C,IAAI,EACJ,oEAAoE,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,GAAG,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QACxC,uDAAuD;QACvD,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,KAAgC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** Tests for loop compiler core: gates, advisories, L0/L1/L2 compilation. */
|
|
2
2
|
import { describe, it, beforeEach } from "node:test";
|
|
3
3
|
import assert from "node:assert/strict";
|
|
4
|
-
import { decideLevel, compileLoop, computeGoalTextHash, deriveGoalId, alignTask, compileL2, } from "../loop-compiler.js";
|
|
5
|
-
import { makeLoopCompileRequest, makeLoopRoundResult, makeLoopObjective, } from "../protocol.js";
|
|
4
|
+
import { decideLevel, compileLoop, computeGoalTextHash, deriveGoalId, alignTask, compileL2, buildRollingSummary, formatRollingSummaryForPrompt, } from "../loop-compiler.js";
|
|
5
|
+
import { makeLoopCompileRequest, makeLoopRoundResult, makeLoopObjective, makeRollingSummary, } from "../protocol.js";
|
|
6
6
|
import { resetPolicy } from "../policy.js";
|
|
7
7
|
describe("Loop Compiler — Goal Identity", () => {
|
|
8
8
|
it("computeGoalTextHash produces a 12-char hex string", () => {
|
|
@@ -405,4 +405,193 @@ describe("Loop Compiler — Cross-Round Scenarios", () => {
|
|
|
405
405
|
assert.equal(level, "l0");
|
|
406
406
|
});
|
|
407
407
|
});
|
|
408
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
409
|
+
// Failure Lineage Weighting (v1.7)
|
|
410
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
411
|
+
function makeVaultResult(loopId, round, qualityScore, task, outputSummary = "", techniqueUsed = "zero-shot", constraintViolations = []) {
|
|
412
|
+
return {
|
|
413
|
+
task,
|
|
414
|
+
output_summary: outputSummary,
|
|
415
|
+
constraint_violations: constraintViolations,
|
|
416
|
+
technique_used: techniqueUsed,
|
|
417
|
+
quality_score: qualityScore,
|
|
418
|
+
loop_lineage: {
|
|
419
|
+
loop_id: loopId,
|
|
420
|
+
round,
|
|
421
|
+
quality_score: qualityScore,
|
|
422
|
+
task,
|
|
423
|
+
technique_used: techniqueUsed,
|
|
424
|
+
},
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
describe("Failure Lineage Weighting — buildRollingSummary", () => {
|
|
428
|
+
it("no failure patterns when all rounds score >= 4", () => {
|
|
429
|
+
const vault = {
|
|
430
|
+
results: [
|
|
431
|
+
makeVaultResult("loop-1", 1, 5, "fix auth bug", "Fixed auth by updating middleware"),
|
|
432
|
+
makeVaultResult("loop-1", 2, 4, "add tests for auth", "Added 12 test cases"),
|
|
433
|
+
makeVaultResult("loop-1", 3, 5, "refactor auth module", "Cleaned up auth module"),
|
|
434
|
+
],
|
|
435
|
+
global_entries: [],
|
|
436
|
+
};
|
|
437
|
+
const rs = buildRollingSummary("loop-1", 4, vault);
|
|
438
|
+
assert.ok(rs !== null);
|
|
439
|
+
assert.equal(rs.failed_patterns?.length ?? 0, 0);
|
|
440
|
+
// key_lessons should not have [Consider alternatives] marker
|
|
441
|
+
for (const kl of rs.key_lessons) {
|
|
442
|
+
assert.ok(!kl.includes("[Consider alternatives]"));
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
it("detects 2 consecutive low-quality rounds with same technique and similar task", () => {
|
|
446
|
+
const vault = {
|
|
447
|
+
results: [
|
|
448
|
+
makeVaultResult("loop-1", 1, 2, "fix cache bug", "Tried cache fix A", "zero-shot"),
|
|
449
|
+
makeVaultResult("loop-1", 2, 2, "fix cache problem", "Tried cache fix B", "zero-shot"),
|
|
450
|
+
makeVaultResult("loop-1", 3, 5, "found auth root cause", "Auth middleware was the issue", "step-back"),
|
|
451
|
+
],
|
|
452
|
+
global_entries: [],
|
|
453
|
+
};
|
|
454
|
+
const rs = buildRollingSummary("loop-1", 4, vault);
|
|
455
|
+
assert.ok(rs !== null);
|
|
456
|
+
assert.ok((rs.failed_patterns?.length ?? 0) >= 1);
|
|
457
|
+
const fp = rs.failed_patterns[0];
|
|
458
|
+
assert.ok(fp.includes("zero-shot"));
|
|
459
|
+
assert.ok(fp.includes("cache"));
|
|
460
|
+
assert.ok(fp.includes("2 consecutive rounds"));
|
|
461
|
+
});
|
|
462
|
+
it("detects 3 consecutive low-quality rounds", () => {
|
|
463
|
+
const vault = {
|
|
464
|
+
results: [
|
|
465
|
+
makeVaultResult("loop-1", 1, 2, "fix memory leak", "Attempt 1", "few-shot"),
|
|
466
|
+
makeVaultResult("loop-1", 2, 1, "fix memory leak in parser", "Attempt 2", "few-shot"),
|
|
467
|
+
makeVaultResult("loop-1", 3, 2, "fix memory leak - retry", "Attempt 3", "few-shot"),
|
|
468
|
+
],
|
|
469
|
+
global_entries: [],
|
|
470
|
+
};
|
|
471
|
+
const rs = buildRollingSummary("loop-1", 4, vault);
|
|
472
|
+
assert.ok(rs !== null);
|
|
473
|
+
assert.ok((rs.failed_patterns?.length ?? 0) >= 1);
|
|
474
|
+
assert.ok(rs.failed_patterns[0].includes("3 consecutive rounds"));
|
|
475
|
+
});
|
|
476
|
+
it("no pattern when low-quality rounds use different techniques", () => {
|
|
477
|
+
const vault = {
|
|
478
|
+
results: [
|
|
479
|
+
makeVaultResult("loop-1", 1, 2, "fix cache bug", "Attempt", "zero-shot"),
|
|
480
|
+
makeVaultResult("loop-1", 2, 2, "fix cache bug", "Attempt", "tree-of-thought"),
|
|
481
|
+
],
|
|
482
|
+
global_entries: [],
|
|
483
|
+
};
|
|
484
|
+
const rs = buildRollingSummary("loop-1", 3, vault);
|
|
485
|
+
assert.ok(rs !== null);
|
|
486
|
+
assert.equal(rs.failed_patterns?.length ?? 0, 0);
|
|
487
|
+
});
|
|
488
|
+
it("no pattern when low-quality tasks are completely different (Jaccard < 0.4)", () => {
|
|
489
|
+
const vault = {
|
|
490
|
+
results: [
|
|
491
|
+
makeVaultResult("loop-1", 1, 2, "fix cache bug in Redis layer", "Attempt", "zero-shot"),
|
|
492
|
+
makeVaultResult("loop-1", 2, 2, "rewrite authentication module entirely", "Attempt", "zero-shot"),
|
|
493
|
+
],
|
|
494
|
+
global_entries: [],
|
|
495
|
+
};
|
|
496
|
+
const rs = buildRollingSummary("loop-1", 3, vault);
|
|
497
|
+
assert.ok(rs !== null);
|
|
498
|
+
assert.equal(rs.failed_patterns?.length ?? 0, 0);
|
|
499
|
+
});
|
|
500
|
+
it("key_lessons from failure-pattern rounds are demoted to end with [Consider alternatives]", () => {
|
|
501
|
+
const vault = {
|
|
502
|
+
results: [
|
|
503
|
+
makeVaultResult("loop-1", 1, 2, "fix cache bug", "Tried cache approach", "zero-shot"),
|
|
504
|
+
makeVaultResult("loop-1", 2, 2, "fix cache problem", "Tried another cache fix", "zero-shot"),
|
|
505
|
+
makeVaultResult("loop-1", 3, 5, "found real issue in auth", "Auth was the real problem — fixed", "step-back", ["Auth bug resolved"]),
|
|
506
|
+
],
|
|
507
|
+
global_entries: [],
|
|
508
|
+
};
|
|
509
|
+
const rs = buildRollingSummary("loop-1", 4, vault);
|
|
510
|
+
assert.ok(rs !== null);
|
|
511
|
+
// key_lessons should have the successful round first, then demoted ones
|
|
512
|
+
// (but since score >= 4 for key_lessons, rounds 1-2 with score=2 won't appear at all)
|
|
513
|
+
// The real test is: no false positives in key_lessons
|
|
514
|
+
for (const kl of rs.key_lessons) {
|
|
515
|
+
if (kl.includes("cache")) {
|
|
516
|
+
assert.ok(kl.includes("[Consider alternatives]"));
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
it("recurring_issues from failure-only rounds marked as [Possible dead end]", () => {
|
|
521
|
+
const vault = {
|
|
522
|
+
results: [
|
|
523
|
+
makeVaultResult("loop-1", 1, 2, "fix cache bug", "Attempt 1", "zero-shot", ["missed edge case"]),
|
|
524
|
+
makeVaultResult("loop-1", 2, 2, "fix cache problem", "Attempt 2", "zero-shot", ["missed edge case"]),
|
|
525
|
+
makeVaultResult("loop-1", 3, 5, "found auth root cause", "Fixed auth", "step-back", ["auth constraint missed"]),
|
|
526
|
+
makeVaultResult("loop-1", 4, 4, "add auth tests", "Added tests", "least-to-most", ["auth constraint missed"]),
|
|
527
|
+
],
|
|
528
|
+
global_entries: [],
|
|
529
|
+
};
|
|
530
|
+
const rs = buildRollingSummary("loop-1", 5, vault);
|
|
531
|
+
assert.ok(rs !== null);
|
|
532
|
+
// "missed edge case" only appears in failed rounds (1,2) → should be marked
|
|
533
|
+
const edgeCaseIssue = rs.recurring_issues.find((ri) => ri.includes("missed edge case"));
|
|
534
|
+
assert.ok(edgeCaseIssue !== undefined);
|
|
535
|
+
assert.ok(edgeCaseIssue.includes("[Possible dead end"));
|
|
536
|
+
// "auth constraint missed" appears in both failed (3) and successful (4) → NOT marked
|
|
537
|
+
const authIssue = rs.recurring_issues.find((ri) => ri.includes("auth constraint missed"));
|
|
538
|
+
assert.ok(authIssue !== undefined);
|
|
539
|
+
assert.ok(!authIssue.includes("[Possible dead end"));
|
|
540
|
+
});
|
|
541
|
+
it("empty vault returns null", () => {
|
|
542
|
+
const rs = buildRollingSummary("loop-1", 1, { results: [], global_entries: [] });
|
|
543
|
+
assert.equal(rs, null);
|
|
544
|
+
});
|
|
545
|
+
it("single round returns no failure patterns", () => {
|
|
546
|
+
const vault = {
|
|
547
|
+
results: [
|
|
548
|
+
makeVaultResult("loop-1", 1, 2, "fix cache bug", "Attempt", "zero-shot"),
|
|
549
|
+
],
|
|
550
|
+
global_entries: [],
|
|
551
|
+
};
|
|
552
|
+
const rs = buildRollingSummary("loop-1", 2, vault);
|
|
553
|
+
assert.ok(rs !== null);
|
|
554
|
+
assert.equal(rs.failed_patterns?.length ?? 0, 0);
|
|
555
|
+
});
|
|
556
|
+
});
|
|
557
|
+
describe("Failure Lineage Weighting — formatRollingSummaryForPrompt", () => {
|
|
558
|
+
it("renders failure patterns section when present", () => {
|
|
559
|
+
const rs = makeRollingSummary({
|
|
560
|
+
quality_trajectory: [2, 2, 5],
|
|
561
|
+
trajectory_direction: "improving",
|
|
562
|
+
what_worked: ["R3 (score=5): Fixed auth"],
|
|
563
|
+
recurring_issues: [],
|
|
564
|
+
key_lessons: ["[R3] Fixed auth bug"],
|
|
565
|
+
rounds_sampled: 3,
|
|
566
|
+
generated_at_round: 4,
|
|
567
|
+
failed_patterns: [
|
|
568
|
+
"technique 'zero-shot' on task 'fix cache bug' failed 2 consecutive rounds (R1-R2, avg score 2.0) — consider strategy change",
|
|
569
|
+
],
|
|
570
|
+
});
|
|
571
|
+
const text = formatRollingSummaryForPrompt(rs);
|
|
572
|
+
assert.ok(text.includes("### ⚠️ Failure Patterns"));
|
|
573
|
+
assert.ok(text.includes("Consider Strategy Change"));
|
|
574
|
+
assert.ok(text.includes("fix cache bug"));
|
|
575
|
+
assert.ok(text.includes("🚫"));
|
|
576
|
+
});
|
|
577
|
+
it("no failure patterns section when empty", () => {
|
|
578
|
+
const rs = makeRollingSummary({
|
|
579
|
+
quality_trajectory: [5, 4],
|
|
580
|
+
trajectory_direction: "stable",
|
|
581
|
+
what_worked: [],
|
|
582
|
+
recurring_issues: [],
|
|
583
|
+
key_lessons: [],
|
|
584
|
+
rounds_sampled: 2,
|
|
585
|
+
generated_at_round: 3,
|
|
586
|
+
failed_patterns: [],
|
|
587
|
+
});
|
|
588
|
+
const text = formatRollingSummaryForPrompt(rs);
|
|
589
|
+
assert.ok(!text.includes("Failure Patterns"));
|
|
590
|
+
});
|
|
591
|
+
it("returns empty string for null or empty summary", () => {
|
|
592
|
+
assert.equal(formatRollingSummaryForPrompt(null), "");
|
|
593
|
+
const empty = makeRollingSummary({ rounds_sampled: 0 });
|
|
594
|
+
assert.equal(formatRollingSummaryForPrompt(empty), "");
|
|
595
|
+
});
|
|
596
|
+
});
|
|
408
597
|
//# sourceMappingURL=loop-compiler.test.js.map
|