loopforge 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +75 -0
  3. package/dist/adapter.d.ts +17 -0
  4. package/dist/adapter.d.ts.map +1 -0
  5. package/dist/adapter.js +228 -0
  6. package/dist/adapter.js.map +1 -0
  7. package/dist/backends/fs.d.ts +31 -0
  8. package/dist/backends/fs.d.ts.map +1 -0
  9. package/dist/backends/fs.js +308 -0
  10. package/dist/backends/fs.js.map +1 -0
  11. package/dist/backends/interface.d.ts +42 -0
  12. package/dist/backends/interface.d.ts.map +1 -0
  13. package/dist/backends/interface.js +7 -0
  14. package/dist/backends/interface.js.map +1 -0
  15. package/dist/builder.d.ts +17 -0
  16. package/dist/builder.d.ts.map +1 -0
  17. package/dist/builder.js +205 -0
  18. package/dist/builder.js.map +1 -0
  19. package/dist/cli.d.ts +7 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +360 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/engine.d.ts +42 -0
  24. package/dist/engine.d.ts.map +1 -0
  25. package/dist/engine.js +595 -0
  26. package/dist/engine.js.map +1 -0
  27. package/dist/generate-schema.d.ts +12 -0
  28. package/dist/generate-schema.d.ts.map +1 -0
  29. package/dist/generate-schema.js +278 -0
  30. package/dist/generate-schema.js.map +1 -0
  31. package/dist/index.d.ts +27 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +30 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/loop-compiler.d.ts +37 -0
  36. package/dist/loop-compiler.d.ts.map +1 -0
  37. package/dist/loop-compiler.js +1232 -0
  38. package/dist/loop-compiler.js.map +1 -0
  39. package/dist/policy.d.ts +44 -0
  40. package/dist/policy.d.ts.map +1 -0
  41. package/dist/policy.js +111 -0
  42. package/dist/policy.js.map +1 -0
  43. package/dist/protocol.d.ts +167 -0
  44. package/dist/protocol.d.ts.map +1 -0
  45. package/dist/protocol.js +198 -0
  46. package/dist/protocol.js.map +1 -0
  47. package/dist/replay.d.ts +19 -0
  48. package/dist/replay.d.ts.map +1 -0
  49. package/dist/replay.js +198 -0
  50. package/dist/replay.js.map +1 -0
  51. package/dist/tests/adapter.test.d.ts +2 -0
  52. package/dist/tests/adapter.test.d.ts.map +1 -0
  53. package/dist/tests/adapter.test.js +104 -0
  54. package/dist/tests/adapter.test.js.map +1 -0
  55. package/dist/tests/builder.test.d.ts +2 -0
  56. package/dist/tests/builder.test.d.ts.map +1 -0
  57. package/dist/tests/builder.test.js +122 -0
  58. package/dist/tests/builder.test.js.map +1 -0
  59. package/dist/tests/engine.test.d.ts +2 -0
  60. package/dist/tests/engine.test.d.ts.map +1 -0
  61. package/dist/tests/engine.test.js +200 -0
  62. package/dist/tests/engine.test.js.map +1 -0
  63. package/dist/tests/generate-schema.test.d.ts +8 -0
  64. package/dist/tests/generate-schema.test.d.ts.map +1 -0
  65. package/dist/tests/generate-schema.test.js +196 -0
  66. package/dist/tests/generate-schema.test.js.map +1 -0
  67. package/dist/tests/loop-compiler.test.d.ts +2 -0
  68. package/dist/tests/loop-compiler.test.d.ts.map +1 -0
  69. package/dist/tests/loop-compiler.test.js +387 -0
  70. package/dist/tests/loop-compiler.test.js.map +1 -0
  71. package/dist/tests/policy.test.d.ts +2 -0
  72. package/dist/tests/policy.test.d.ts.map +1 -0
  73. package/dist/tests/policy.test.js +59 -0
  74. package/dist/tests/policy.test.js.map +1 -0
  75. package/dist/tests/protocol.test.d.ts +2 -0
  76. package/dist/tests/protocol.test.d.ts.map +1 -0
  77. package/dist/tests/protocol.test.js +63 -0
  78. package/dist/tests/protocol.test.js.map +1 -0
  79. package/dist/tests/replay.test.d.ts +2 -0
  80. package/dist/tests/replay.test.d.ts.map +1 -0
  81. package/dist/tests/replay.test.js +194 -0
  82. package/dist/tests/replay.test.js.map +1 -0
  83. package/loop_policy.json +44 -0
  84. package/package.json +58 -0
package/dist/cli.js ADDED
@@ -0,0 +1,360 @@
1
+ #!/usr/bin/env node
2
+ /** LoopForge CLI — command-line interface for the loop compiler.
3
+ *
4
+ * v1.0 — npm install loopforge
5
+ */
6
+ import { createEngine } from "./engine.js";
7
+ import { FSBackend } from "./backends/fs.js";
8
+ import { ReplayBackend } from "./replay.js";
9
+ import { makeExecutionFeedback, } from "./protocol.js";
10
+ // ═══════════════════════════════════════════════════════════════════════════
11
+ // Constants
12
+ // ═══════════════════════════════════════════════════════════════════════════
13
+ const VERSION = "1.0.0";
14
+ const VAULT_CONFIG = {
15
+ project_vault: ".promptcraft/prompt_vault.json",
16
+ global_vault: "~/.promptcraft/global_vault.json",
17
+ skills_dir: "skills",
18
+ no_global: false,
19
+ };
20
+ const USAGE = `LoopForge v${VERSION} — Loop-Time Intelligence Layer
21
+
22
+ Usage:
23
+ loopforge init Initialise .promptcraft vault
24
+ loopforge compile [json] Compile a loop prompt
25
+ loopforge feedback [json] Record execution feedback
26
+ loopforge replay <loop-id> Show loop timeline
27
+ loopforge diff <loop-id> <a> <b> Diff two rounds
28
+ loopforge review <loop-id> <rN> Audit stored prompt
29
+ loopforge status Vault health summary
30
+
31
+ Flags:
32
+ --help, -h Show this help
33
+ --version, -V Show version
34
+
35
+ Pipe JSON via stdin: echo '{"task":"..."}' | loopforge compile
36
+ `;
37
+ const CMD_HELP = {
38
+ init: "loopforge init — create .promptcraft/prompt_vault.json if it doesn't exist.",
39
+ compile: "loopforge compile '<json>' — run loop_compile (L0/L1/L2).\n Required: task, loop_id, goal_id. Optional: round, domain, constraints_from_plan, new_since_last_round, force_level.",
40
+ feedback: "loopforge feedback '<json>' — record execution result.\n Flat: {loop_id, round, success, score, output}\n Nested: {loop_id, round, feedback: {success, score, output}}",
41
+ replay: "loopforge replay <loop-id> — show timeline: round, recompile level, quality, technique, task.",
42
+ diff: "loopforge diff <loop-id> <round-a> <round-b> — field-level comparison between two rounds.",
43
+ review: "loopforge review <loop-id> <round-num> — structural audit of a stored prompt.",
44
+ status: "loopforge status — vault health: entry counts, active loops.",
45
+ };
46
+ // ═══════════════════════════════════════════════════════════════════════════
47
+ // Helpers
48
+ // ═══════════════════════════════════════════════════════════════════════════
49
+ function die(msg) {
50
+ process.stderr.write(`loopforge: ${msg}\n`);
51
+ process.exit(1);
52
+ }
53
+ function showHelp(cmd) {
54
+ if (cmd && CMD_HELP[cmd]) {
55
+ console.log(CMD_HELP[cmd]);
56
+ }
57
+ else {
58
+ console.log(USAGE);
59
+ }
60
+ }
61
+ async function readStdin() {
62
+ return new Promise((resolve) => {
63
+ const chunks = [];
64
+ process.stdin.on("data", (chunk) => chunks.push(chunk));
65
+ process.stdin.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
66
+ if (process.stdin.isTTY)
67
+ resolve("");
68
+ });
69
+ }
70
+ function parseJson(raw) {
71
+ try {
72
+ const data = JSON.parse(raw);
73
+ if (typeof data !== "object" || Array.isArray(data) || data === null) {
74
+ die("input must be a JSON object");
75
+ }
76
+ return data;
77
+ }
78
+ catch (e) {
79
+ die(`invalid JSON: ${e instanceof Error ? e.message : e}`);
80
+ }
81
+ }
82
+ /** Normalise flat fields into feedback payload — accepts both formats. */
83
+ function normaliseFeedbackPayload(data) {
84
+ // Already nested: { feedback: { success, score, ... } }
85
+ if (data.feedback && typeof data.feedback === "object") {
86
+ return data.feedback;
87
+ }
88
+ // Flat format: { success, score, output, ... } — auto-nest
89
+ if (data.success !== undefined || data.score !== undefined) {
90
+ return {
91
+ output: data.output ?? "",
92
+ success: data.success ?? false,
93
+ constraint_violations: data.constraint_violations ?? [],
94
+ manual_fixes_needed: data.manual_fixes_needed ?? "",
95
+ };
96
+ }
97
+ return null;
98
+ }
99
+ // ═══════════════════════════════════════════════════════════════════════════
100
+ // Commands
101
+ // ═══════════════════════════════════════════════════════════════════════════
102
+ async function cmdInit() {
103
+ const backend = new FSBackend();
104
+ const vault = backend.readVault();
105
+ if (!vault.entries || !Array.isArray(vault.entries)) {
106
+ backend.writeVault({ entries: [] });
107
+ console.log("Initialised .promptcraft/prompt_vault.json");
108
+ }
109
+ else {
110
+ const count = vault.entries.length;
111
+ console.log(`Vault already exists (${count} entries). Nothing to do.`);
112
+ }
113
+ }
114
+ async function cmdCompile(engine, jsonArg) {
115
+ let raw;
116
+ if (jsonArg === "--help" || jsonArg === "-h") {
117
+ showHelp("compile");
118
+ return;
119
+ }
120
+ if (jsonArg) {
121
+ raw = jsonArg;
122
+ }
123
+ else {
124
+ raw = await readStdin();
125
+ }
126
+ if (!raw.trim())
127
+ die("compile requires JSON input (argument or stdin)");
128
+ const data = parseJson(raw);
129
+ const result = engine.invokeLoopCompile({
130
+ task: data.task ?? "",
131
+ mode: "loop_compile",
132
+ vault_config: { ...VAULT_CONFIG },
133
+ feedback: null,
134
+ skill_name: null,
135
+ task_id: null,
136
+ ...data,
137
+ });
138
+ const prompt = result.response?.prompt ?? "Error: no prompt generated";
139
+ console.log(prompt);
140
+ }
141
+ async function cmdFeedback(engine, jsonArg) {
142
+ if (jsonArg === "--help" || jsonArg === "-h") {
143
+ showHelp("feedback");
144
+ return;
145
+ }
146
+ let raw;
147
+ if (jsonArg) {
148
+ raw = jsonArg;
149
+ }
150
+ else {
151
+ raw = await readStdin();
152
+ }
153
+ if (!raw.trim())
154
+ die("feedback requires JSON input (argument or stdin)");
155
+ const data = parseJson(raw);
156
+ const fbPayload = normaliseFeedbackPayload(data);
157
+ if (!fbPayload) {
158
+ die("feedback requires one of: {feedback:{success,score}} or {success,score} at top level");
159
+ }
160
+ const result = engine.invokeFeedback({
161
+ task: data.task ?? "",
162
+ mode: "feedback",
163
+ vault_config: { ...VAULT_CONFIG },
164
+ feedback: makeExecutionFeedback({
165
+ output: fbPayload.output ?? "",
166
+ success: fbPayload.success ?? false,
167
+ constraint_violations: fbPayload.constraint_violations ?? [],
168
+ manual_fixes_needed: fbPayload.manual_fixes_needed ?? "",
169
+ }),
170
+ skill_name: null,
171
+ task_id: null,
172
+ ...data,
173
+ });
174
+ console.log(result.response?.prompt ?? result.response?.error ?? "Error");
175
+ }
176
+ function cmdReplay(loopId) {
177
+ if (loopId === "--help" || loopId === "-h") {
178
+ showHelp("replay");
179
+ return;
180
+ }
181
+ if (!loopId)
182
+ die("replay requires a loop-id");
183
+ const backend = new FSBackend();
184
+ const replay = new ReplayBackend(backend);
185
+ const tl = replay.timeline(loopId);
186
+ if (!tl.length) {
187
+ console.log(`No rounds found for loop "${loopId}".`);
188
+ return;
189
+ }
190
+ console.log(`Loop: ${loopId} (${tl.length} rounds)\n`);
191
+ console.log("Round Level Quality Technique Task");
192
+ console.log("----- ----- ------- -------------- ----");
193
+ for (const entry of tl) {
194
+ const rnd = String(entry.round).padStart(5);
195
+ const level = String(entry.recompile_level).padEnd(6);
196
+ const q = String(entry.quality_score ?? "-").padEnd(8);
197
+ const tech = String(entry.technique_used || "-").padEnd(15);
198
+ const task = String(entry.task || "").slice(0, 50);
199
+ console.log(`${rnd} ${level} ${q} ${tech} ${task}`);
200
+ }
201
+ }
202
+ function cmdDiff(loopId, roundA, roundB) {
203
+ if (loopId === "--help" || loopId === "-h") {
204
+ showHelp("diff");
205
+ return;
206
+ }
207
+ if (!loopId || !roundA || !roundB) {
208
+ die("diff requires <loop-id> <round-a> <round-b>");
209
+ }
210
+ const backend = new FSBackend();
211
+ const replay = new ReplayBackend(backend);
212
+ const diff = replay.diff(loopId, parseInt(roundA, 10), parseInt(roundB, 10));
213
+ if (diff.missing) {
214
+ console.log(`Cannot diff: ${diff.missing} not found.`);
215
+ return;
216
+ }
217
+ console.log(`Diff: ${loopId} round ${diff.round_a} → round ${diff.round_b}\n`);
218
+ const changes = diff.changes;
219
+ if (!changes.length) {
220
+ console.log("No changes detected.");
221
+ }
222
+ else {
223
+ for (const c of changes) {
224
+ console.log(` ${c.label}:`);
225
+ if (c.field === "constraints_active") {
226
+ const added = c.added;
227
+ const removed = c.removed;
228
+ if (added?.length)
229
+ console.log(` + added: [${added.join(", ")}]`);
230
+ if (removed?.length)
231
+ console.log(` - removed: [${removed.join(", ")}]`);
232
+ }
233
+ else {
234
+ console.log(` before: ${c.before}`);
235
+ console.log(` after: ${c.after}`);
236
+ }
237
+ }
238
+ }
239
+ const unchanged = diff.unchanged;
240
+ if (unchanged?.length) {
241
+ console.log(`\nUnchanged: ${unchanged.join(", ")}`);
242
+ }
243
+ }
244
+ function cmdReview(loopId, roundStr) {
245
+ if (loopId === "--help" || loopId === "-h") {
246
+ showHelp("review");
247
+ return;
248
+ }
249
+ if (!loopId || !roundStr)
250
+ die("review requires <loop-id> <round-num>");
251
+ const roundNum = parseInt(roundStr, 10);
252
+ if (Number.isNaN(roundNum))
253
+ die(`invalid round number: ${roundStr}`);
254
+ const backend = new FSBackend();
255
+ const engine = createEngine("skills", backend);
256
+ const context = engine.hydrateLoopContext(loopId);
257
+ if (!context) {
258
+ console.log(`No entries found for loop "${loopId}".`);
259
+ return;
260
+ }
261
+ const results = context.results ?? [];
262
+ const target = results.find((r) => {
263
+ const lineage = (r.loop_lineage ?? {});
264
+ return lineage.round === roundNum;
265
+ });
266
+ if (!target) {
267
+ console.log(`Round ${roundNum} not found in loop "${loopId}".`);
268
+ return;
269
+ }
270
+ const result = engine.handleReview({
271
+ task: target.task ?? "review",
272
+ mode: "review",
273
+ vault_config: { ...VAULT_CONFIG },
274
+ feedback: null,
275
+ skill_name: null,
276
+ task_id: null,
277
+ }, { results: [target], global_entries: [] });
278
+ console.log(result.response?.prompt ?? "Review produced no output.");
279
+ }
280
+ function cmdStatus() {
281
+ const backend = new FSBackend();
282
+ const vault = backend.readVault();
283
+ const entries = vault.entries ?? [];
284
+ const loops = new Set();
285
+ let lineageCount = 0;
286
+ let feedbackCount = 0;
287
+ for (const e of entries) {
288
+ const taskId = String(e.task_id ?? "");
289
+ if (taskId.endsWith(":feedback")) {
290
+ feedbackCount++;
291
+ }
292
+ else if (taskId.startsWith("loop:")) {
293
+ lineageCount++;
294
+ }
295
+ const lid = e.loop_id ?? e.loop_lineage?.loop_id;
296
+ if (lid)
297
+ loops.add(String(lid));
298
+ }
299
+ console.log("LoopForge Vault Status");
300
+ console.log("=======================");
301
+ console.log(`Total entries: ${entries.length}`);
302
+ console.log(`Lineage entries: ${lineageCount}`);
303
+ console.log(`Feedback entries: ${feedbackCount}`);
304
+ console.log(`Active loops: ${loops.size}`);
305
+ if (loops.size > 0) {
306
+ console.log(`\nLoops: ${[...loops].sort().join(", ")}`);
307
+ }
308
+ }
309
+ // ═══════════════════════════════════════════════════════════════════════════
310
+ // Main
311
+ // ═══════════════════════════════════════════════════════════════════════════
312
+ async function main() {
313
+ const args = process.argv.slice(2);
314
+ const cmd = args[0];
315
+ if (!cmd || cmd === "--help" || cmd === "-h") {
316
+ showHelp(args[1]); // "loopforge --help compile" shows compile help
317
+ process.exit(0);
318
+ }
319
+ if (cmd === "--version" || cmd === "-V") {
320
+ console.log(`loopforge v${VERSION}`);
321
+ process.exit(0);
322
+ }
323
+ const engine = createEngine("skills");
324
+ switch (cmd) {
325
+ case "init":
326
+ if (args[1] === "--help" || args[1] === "-h")
327
+ showHelp("init");
328
+ else
329
+ await cmdInit();
330
+ break;
331
+ case "compile":
332
+ await cmdCompile(engine, args[1]);
333
+ break;
334
+ case "feedback":
335
+ await cmdFeedback(engine, args[1]);
336
+ break;
337
+ case "replay":
338
+ cmdReplay(args[1]);
339
+ break;
340
+ case "diff":
341
+ cmdDiff(args[1], args[2], args[3]);
342
+ break;
343
+ case "review":
344
+ cmdReview(args[1], args[2]);
345
+ break;
346
+ case "status":
347
+ if (args[1] === "--help" || args[1] === "-h")
348
+ showHelp("status");
349
+ else
350
+ cmdStatus();
351
+ break;
352
+ default:
353
+ die(`unknown command: ${cmd}\nUse --help for usage.`);
354
+ }
355
+ }
356
+ main().catch((err) => {
357
+ process.stderr.write(`loopforge: fatal: ${err.message ?? err}\n`);
358
+ process.exit(1);
359
+ });
360
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /** LoopForge-loop_compile — Engine (outer loop manager).
2
+ *
3
+ * v1.0: 3-mode engine with vault-backed loop lineage persistence.
4
+ * invokeLoopCompile (primary), invokeBuild (internal), invokeFeedback.
5
+ * Circuit breaker prevents infinite stall loops.
6
+ * EngineMetrics tracks silent-failure counters for observability.
7
+ */
8
+ import type { VaultBackend } from "./backends/interface.js";
9
+ import { type AgentLoopResult, type LoopForgeRequest, type SessionState } from "./protocol.js";
10
+ export interface EngineMetrics {
11
+ vaultWriteErrors: number;
12
+ vaultWriteTimeouts: number;
13
+ vaultWriteBytes: number;
14
+ silentAnalysisErrors: number;
15
+ hydrateCacheMisses: number;
16
+ feedbackBufferFlushes: number;
17
+ feedbackBufferMaxSize: number;
18
+ sessionStart: number;
19
+ }
20
+ export declare class LoopForgeEngine {
21
+ skillsDir: string;
22
+ state: SessionState | null;
23
+ private backend;
24
+ private metrics;
25
+ private feedbackWriteBuffer;
26
+ lastTask: string | null;
27
+ private seenConstraints;
28
+ constructor(skillsDir?: string, backend?: VaultBackend);
29
+ private resolveBackend;
30
+ private ensureInit;
31
+ private persistFeedbackToVault;
32
+ flushFeedbackBuffer(): number;
33
+ private persistLoopLineage;
34
+ hydrateLoopContext(loopId: string): Record<string, unknown> | null;
35
+ invokeBuild(request: LoopForgeRequest, _hydrateResults?: Record<string, unknown> | null): AgentLoopResult;
36
+ invokeFeedback(request: LoopForgeRequest, _hydrateResults?: Record<string, unknown> | null): AgentLoopResult;
37
+ invokeLoopCompile(request: LoopForgeRequest, hydrateResults?: Record<string, unknown> | null): AgentLoopResult;
38
+ handleReview(request: LoopForgeRequest, hydrateResults?: Record<string, unknown> | null): AgentLoopResult;
39
+ shouldBreak(): boolean;
40
+ }
41
+ export declare function createEngine(skillsDir?: string, backend?: VaultBackend): LoopForgeEngine;
42
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAQL,KAAK,eAAe,EAGpB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AASvB,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB;AAmBD,qBAAa,eAAe;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAQ;IAClC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,mBAAmB,CAAoB;IAC/C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/B,OAAO,CAAC,eAAe,CAAqB;gBAEhC,SAAS,SAAW,EAAE,OAAO,CAAC,EAAE,YAAY;IAKxD,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,sBAAsB;IAkB9B,mBAAmB,IAAI,MAAM;IA4D7B,OAAO,CAAC,kBAAkB;IA0F1B,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqFlE,WAAW,CACT,OAAO,EAAE,gBAAgB,EACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC/C,eAAe;IAoClB,cAAc,CACZ,OAAO,EAAE,gBAAgB,EACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC/C,eAAe;IA0FlB,iBAAiB,CACf,OAAO,EAAE,gBAAgB,EACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC9C,eAAe;IA6JlB,YAAY,CACV,OAAO,EAAE,gBAAgB,EACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC9C,eAAe;IAsElB,WAAW,IAAI,OAAO;CAYvB;AAMD,wBAAgB,YAAY,CAC1B,SAAS,SAAW,EACpB,OAAO,CAAC,EAAE,YAAY,GACrB,eAAe,CAEjB"}