ralphy-spec 0.1.1 → 0.2.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 (176) hide show
  1. package/README.ja.md +74 -130
  2. package/README.ko.md +74 -130
  3. package/README.md +75 -133
  4. package/README.zh.md +74 -130
  5. package/bin/ralphy-spec.js +0 -0
  6. package/dist/cli/checkpoint.d.ts +3 -0
  7. package/dist/cli/checkpoint.d.ts.map +1 -0
  8. package/dist/cli/checkpoint.js +23 -0
  9. package/dist/cli/checkpoint.js.map +1 -0
  10. package/dist/cli/init.d.ts +3 -0
  11. package/dist/cli/init.d.ts.map +1 -0
  12. package/dist/cli/init.js +66 -0
  13. package/dist/cli/init.js.map +1 -0
  14. package/dist/cli/report.d.ts +3 -0
  15. package/dist/cli/report.d.ts.map +1 -0
  16. package/dist/cli/report.js +53 -0
  17. package/dist/cli/report.js.map +1 -0
  18. package/dist/cli/run.d.ts +3 -0
  19. package/dist/cli/run.d.ts.map +1 -0
  20. package/dist/cli/run.js +79 -0
  21. package/dist/cli/run.js.map +1 -0
  22. package/dist/cli/status.d.ts +3 -0
  23. package/dist/cli/status.d.ts.map +1 -0
  24. package/dist/cli/status.js +45 -0
  25. package/dist/cli/status.js.map +1 -0
  26. package/dist/cli/tail.d.ts +3 -0
  27. package/dist/cli/tail.d.ts.map +1 -0
  28. package/dist/cli/tail.js +46 -0
  29. package/dist/cli/tail.js.map +1 -0
  30. package/dist/cli/update.d.ts +3 -0
  31. package/dist/cli/update.d.ts.map +1 -0
  32. package/dist/cli/update.js +62 -0
  33. package/dist/cli/update.js.map +1 -0
  34. package/dist/cli/validate.d.ts +3 -0
  35. package/dist/cli/validate.d.ts.map +1 -0
  36. package/dist/cli/validate.js +83 -0
  37. package/dist/cli/validate.js.map +1 -0
  38. package/dist/core/backends/claude-code.d.ts +17 -0
  39. package/dist/core/backends/claude-code.d.ts.map +1 -0
  40. package/dist/core/backends/claude-code.js +75 -0
  41. package/dist/core/backends/claude-code.js.map +1 -0
  42. package/dist/core/backends/cursor.d.ts +17 -0
  43. package/dist/core/backends/cursor.d.ts.map +1 -0
  44. package/dist/core/backends/cursor.js +75 -0
  45. package/dist/core/backends/cursor.js.map +1 -0
  46. package/dist/core/backends/noop.d.ts +10 -0
  47. package/dist/core/backends/noop.d.ts.map +1 -0
  48. package/dist/core/backends/noop.js +17 -0
  49. package/dist/core/backends/noop.js.map +1 -0
  50. package/dist/core/backends/opencode.d.ts +16 -0
  51. package/dist/core/backends/opencode.d.ts.map +1 -0
  52. package/dist/core/backends/opencode.js +73 -0
  53. package/dist/core/backends/opencode.js.map +1 -0
  54. package/dist/core/backends/types.d.ts +21 -0
  55. package/dist/core/backends/types.d.ts.map +1 -0
  56. package/dist/core/backends/types.js +3 -0
  57. package/dist/core/backends/types.js.map +1 -0
  58. package/dist/core/budgets/manager.d.ts +21 -0
  59. package/dist/core/budgets/manager.d.ts.map +1 -0
  60. package/dist/core/budgets/manager.js +48 -0
  61. package/dist/core/budgets/manager.js.map +1 -0
  62. package/dist/core/budgets/state.d.ts +25 -0
  63. package/dist/core/budgets/state.d.ts.map +1 -0
  64. package/dist/core/budgets/state.js +33 -0
  65. package/dist/core/budgets/state.js.map +1 -0
  66. package/dist/core/budgets/tiers.d.ts +32 -0
  67. package/dist/core/budgets/tiers.d.ts.map +1 -0
  68. package/dist/core/budgets/tiers.js +67 -0
  69. package/dist/core/budgets/tiers.js.map +1 -0
  70. package/dist/core/engine/context-pack.d.ts +12 -0
  71. package/dist/core/engine/context-pack.d.ts.map +1 -0
  72. package/dist/core/engine/context-pack.js +45 -0
  73. package/dist/core/engine/context-pack.js.map +1 -0
  74. package/dist/core/engine/loop.d.ts +28 -0
  75. package/dist/core/engine/loop.d.ts.map +1 -0
  76. package/dist/core/engine/loop.js +366 -0
  77. package/dist/core/engine/loop.js.map +1 -0
  78. package/dist/core/engine/phases.d.ts +2 -0
  79. package/dist/core/engine/phases.d.ts.map +1 -0
  80. package/dist/core/engine/phases.js +3 -0
  81. package/dist/core/engine/phases.js.map +1 -0
  82. package/dist/core/engine/repair.d.ts +6 -0
  83. package/dist/core/engine/repair.d.ts.map +1 -0
  84. package/dist/core/engine/repair.js +23 -0
  85. package/dist/core/engine/repair.js.map +1 -0
  86. package/dist/core/folders.d.ts +26 -0
  87. package/dist/core/folders.d.ts.map +1 -0
  88. package/dist/core/folders.js +58 -0
  89. package/dist/core/folders.js.map +1 -0
  90. package/dist/core/memory/ledger.d.ts +13 -0
  91. package/dist/core/memory/ledger.d.ts.map +1 -0
  92. package/dist/core/memory/ledger.js +24 -0
  93. package/dist/core/memory/ledger.js.map +1 -0
  94. package/dist/core/memory/persistence.d.ts +45 -0
  95. package/dist/core/memory/persistence.d.ts.map +1 -0
  96. package/dist/core/memory/persistence.js +162 -0
  97. package/dist/core/memory/persistence.js.map +1 -0
  98. package/dist/core/reporting/spend.d.ts +40 -0
  99. package/dist/core/reporting/spend.d.ts.map +1 -0
  100. package/dist/core/reporting/spend.js +157 -0
  101. package/dist/core/reporting/spend.js.map +1 -0
  102. package/dist/core/spec/dag.d.ts +7 -0
  103. package/dist/core/spec/dag.d.ts.map +1 -0
  104. package/dist/core/spec/dag.js +65 -0
  105. package/dist/core/spec/dag.js.map +1 -0
  106. package/dist/core/spec/file-contract.d.ts +13 -0
  107. package/dist/core/spec/file-contract.d.ts.map +1 -0
  108. package/dist/core/spec/file-contract.js +29 -0
  109. package/dist/core/spec/file-contract.js.map +1 -0
  110. package/dist/core/spec/loader.d.ts +8 -0
  111. package/dist/core/spec/loader.d.ts.map +1 -0
  112. package/dist/core/spec/loader.js +51 -0
  113. package/dist/core/spec/loader.js.map +1 -0
  114. package/dist/core/spec/schemas.d.ts +278 -0
  115. package/dist/core/spec/schemas.d.ts.map +1 -0
  116. package/dist/core/spec/schemas.js +207 -0
  117. package/dist/core/spec/schemas.js.map +1 -0
  118. package/dist/core/spec/types.d.ts +71 -0
  119. package/dist/core/spec/types.d.ts.map +1 -0
  120. package/dist/core/spec/types.js +3 -0
  121. package/dist/core/spec/types.js.map +1 -0
  122. package/dist/core/validators/parsers/eslint.d.ts +3 -0
  123. package/dist/core/validators/parsers/eslint.d.ts.map +1 -0
  124. package/dist/core/validators/parsers/eslint.js +35 -0
  125. package/dist/core/validators/parsers/eslint.js.map +1 -0
  126. package/dist/core/validators/parsers/jest.d.ts +3 -0
  127. package/dist/core/validators/parsers/jest.d.ts.map +1 -0
  128. package/dist/core/validators/parsers/jest.js +16 -0
  129. package/dist/core/validators/parsers/jest.js.map +1 -0
  130. package/dist/core/validators/parsers/tsc.d.ts +3 -0
  131. package/dist/core/validators/parsers/tsc.d.ts.map +1 -0
  132. package/dist/core/validators/parsers/tsc.js +32 -0
  133. package/dist/core/validators/parsers/tsc.js.map +1 -0
  134. package/dist/core/validators/runner.d.ts +8 -0
  135. package/dist/core/validators/runner.d.ts.map +1 -0
  136. package/dist/core/validators/runner.js +85 -0
  137. package/dist/core/validators/runner.js.map +1 -0
  138. package/dist/core/validators/signatures.d.ts +3 -0
  139. package/dist/core/validators/signatures.d.ts.map +1 -0
  140. package/dist/core/validators/signatures.js +10 -0
  141. package/dist/core/validators/signatures.js.map +1 -0
  142. package/dist/core/validators/types.d.ts +27 -0
  143. package/dist/core/validators/types.d.ts.map +1 -0
  144. package/dist/core/validators/types.js +3 -0
  145. package/dist/core/validators/types.js.map +1 -0
  146. package/dist/core/workspace/contract-enforcer.d.ts +54 -0
  147. package/dist/core/workspace/contract-enforcer.d.ts.map +1 -0
  148. package/dist/core/workspace/contract-enforcer.js +128 -0
  149. package/dist/core/workspace/contract-enforcer.js.map +1 -0
  150. package/dist/core/workspace/manager.d.ts +28 -0
  151. package/dist/core/workspace/manager.d.ts.map +1 -0
  152. package/dist/core/workspace/manager.js +3 -0
  153. package/dist/core/workspace/manager.js.map +1 -0
  154. package/dist/core/workspace/merge.d.ts +38 -0
  155. package/dist/core/workspace/merge.d.ts.map +1 -0
  156. package/dist/core/workspace/merge.js +92 -0
  157. package/dist/core/workspace/merge.js.map +1 -0
  158. package/dist/core/workspace/patch-mode.d.ts +22 -0
  159. package/dist/core/workspace/patch-mode.d.ts.map +1 -0
  160. package/dist/core/workspace/patch-mode.js +91 -0
  161. package/dist/core/workspace/patch-mode.js.map +1 -0
  162. package/dist/core/workspace/worktree-mode.d.ts +28 -0
  163. package/dist/core/workspace/worktree-mode.d.ts.map +1 -0
  164. package/dist/core/workspace/worktree-mode.js +156 -0
  165. package/dist/core/workspace/worktree-mode.js.map +1 -0
  166. package/dist/index.js +14 -4
  167. package/dist/index.js.map +1 -1
  168. package/dist/templates/shared/openspec-tasks-template.md +23 -3
  169. package/dist/templates/shared/project-template.yml +232 -0
  170. package/dist/utils/installer.d.ts.map +1 -1
  171. package/dist/utils/installer.js +31 -1
  172. package/dist/utils/installer.js.map +1 -1
  173. package/dist/utils/validator.d.ts.map +1 -1
  174. package/dist/utils/validator.js +10 -0
  175. package/dist/utils/validator.js.map +1 -1
  176. package/package.json +11 -4
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EngineLoop = void 0;
7
+ const node_crypto_1 = __importDefault(require("node:crypto"));
8
+ const dag_1 = require("../spec/dag");
9
+ const persistence_1 = require("../memory/persistence");
10
+ const ledger_1 = require("../memory/ledger");
11
+ const runner_1 = require("../validators/runner");
12
+ const signatures_1 = require("../validators/signatures");
13
+ const manager_1 = require("../budgets/manager");
14
+ const state_1 = require("../budgets/state");
15
+ const context_pack_1 = require("./context-pack");
16
+ const repair_1 = require("./repair");
17
+ function createRunId() {
18
+ return `run_${new Date().toISOString().replace(/[:.]/g, "-")}_${node_crypto_1.default
19
+ .randomBytes(4)
20
+ .toString("hex")}`;
21
+ }
22
+ class EngineLoop {
23
+ async run(opts) {
24
+ const runId = createRunId();
25
+ const persistence = await persistence_1.PersistenceLayer.openForRepo(opts.repoRoot);
26
+ const ledger = new ledger_1.LedgerLogger(persistence, runId);
27
+ const runBudget = opts.spec.budgets?.run;
28
+ const budgetState = new state_1.BudgetState({
29
+ usd: runBudget?.moneyUsd,
30
+ tokens: runBudget?.tokens,
31
+ wallTimeMs: runBudget?.wallTimeMinutes !== undefined
32
+ ? runBudget.wallTimeMinutes * 60_000
33
+ : undefined,
34
+ maxIterations: runBudget?.maxIterationsTotal,
35
+ });
36
+ const budgetManager = new manager_1.BudgetManager(budgetState);
37
+ persistence.createRun({
38
+ runId,
39
+ repoRoot: opts.repoRoot,
40
+ backendId: opts.backend.id,
41
+ workspaceMode: opts.workspace.mode,
42
+ });
43
+ ledger.event({ kind: "run_started", message: "Run started", data: { runId } });
44
+ try {
45
+ const tasks = opts.spec.tasks ?? [];
46
+ const dag = (0, dag_1.buildTaskDAG)(tasks);
47
+ const planOrder = opts.taskId ? [opts.taskId] : dag.order;
48
+ if (opts.dryRun) {
49
+ ledger.event({
50
+ kind: "dry_run",
51
+ message: "Dry run plan generated",
52
+ data: { tasks: planOrder },
53
+ });
54
+ persistence.finishRun({ runId, status: "success" });
55
+ return { ok: true, runId };
56
+ }
57
+ for (const taskId of planOrder) {
58
+ const task = dag.tasksById.get(taskId) ?? tasks.find((t) => t.id === taskId);
59
+ if (!task) {
60
+ persistence.finishRun({ runId, status: "error" });
61
+ return {
62
+ ok: false,
63
+ runId,
64
+ exitCode: 4,
65
+ reason: `Unknown task id: ${taskId}`,
66
+ };
67
+ }
68
+ const outcome = await this.runOneTask({
69
+ runId,
70
+ task,
71
+ repoRoot: opts.repoRoot,
72
+ spec: opts.spec,
73
+ backend: opts.backend,
74
+ workspace: opts.workspace,
75
+ persistence,
76
+ ledger,
77
+ budgetManager,
78
+ });
79
+ if (!outcome.ok) {
80
+ persistence.finishRun({
81
+ runId,
82
+ status: outcome.exitCode === 2 || outcome.exitCode === 3 ? "stopped" : "error",
83
+ });
84
+ return outcome;
85
+ }
86
+ }
87
+ ledger.event({ kind: "run_done", message: "All tasks done" });
88
+ persistence.finishRun({ runId, status: "success" });
89
+ return { ok: true, runId };
90
+ }
91
+ catch (err) {
92
+ ledger.event({
93
+ kind: "run_error",
94
+ message: err?.message ? String(err.message) : String(err),
95
+ });
96
+ persistence.finishRun({ runId, status: "error" });
97
+ return {
98
+ ok: false,
99
+ runId,
100
+ exitCode: 4,
101
+ reason: err?.message ? String(err.message) : String(err),
102
+ };
103
+ }
104
+ finally {
105
+ persistence.close();
106
+ }
107
+ }
108
+ async runOneTask(args) {
109
+ const { task, runId, persistence, ledger, budgetManager } = args;
110
+ let phase = "PLAN";
111
+ persistence.upsertTaskState({ runId, taskId: task.id, status: "running", phase });
112
+ ledger.event({ taskId: task.id, kind: "task_started", message: "Task started" });
113
+ const maxIter = task.budget?.hard?.maxIterations ??
114
+ args.spec.budgets?.run?.maxIterationsTotal ??
115
+ 12;
116
+ const lastSignatures = [];
117
+ await args.workspace.prepare(task.id);
118
+ const cwd = args.workspace.getWorkingDir(task.id);
119
+ const taskBudgetConfig = this.toTaskBudgetConfig(task) ?? null;
120
+ let pendingRepairNotes;
121
+ let lastValidatorResults = null;
122
+ let lastIssues = null;
123
+ for (let iter = 1; iter <= maxIter; iter++) {
124
+ const iterStarted = Date.now();
125
+ try {
126
+ budgetManager.preflightOrThrow({ estimatedUsd: 0, estimatedTokens: 0 });
127
+ }
128
+ catch (e) {
129
+ ledger.event({
130
+ taskId: task.id,
131
+ kind: "budget_exceeded",
132
+ message: e?.message ? String(e.message) : "Budget exceeded",
133
+ });
134
+ persistence.upsertTaskState({
135
+ runId,
136
+ taskId: task.id,
137
+ status: "blocked",
138
+ phase: "DIAGNOSE",
139
+ iteration: iter,
140
+ lastError: "Budget exceeded",
141
+ });
142
+ return { ok: false, runId, exitCode: 2, reason: "Budget limit" };
143
+ }
144
+ const tier = taskBudgetConfig ? budgetManager.getTier(taskBudgetConfig) : "optimal";
145
+ const shouldDegrade = taskBudgetConfig
146
+ ? budgetManager.shouldApplyDegrade(taskBudgetConfig)
147
+ : false;
148
+ if (shouldDegrade) {
149
+ ledger.event({
150
+ taskId: task.id,
151
+ kind: "degrade",
152
+ message: "WARNING tier: degrade behaviors enabled",
153
+ });
154
+ }
155
+ if (shouldDegrade && lastValidatorResults && lastIssues) {
156
+ const ctx = (0, context_pack_1.buildContextPack)({
157
+ tier: "warning",
158
+ taskId: task.id,
159
+ validatorResults: lastValidatorResults,
160
+ issues: lastIssues,
161
+ });
162
+ ledger.event({
163
+ taskId: task.id,
164
+ kind: "context_pack",
165
+ message: `Context pack built (${ctx.size})`,
166
+ });
167
+ // Optional calls disabling (MVP: only logs, as we don't have optional calls yet).
168
+ ledger.event({
169
+ taskId: task.id,
170
+ kind: "optional_calls_skipped",
171
+ message: "WARNING tier: skipping optional calls (self-review / plan regen)",
172
+ });
173
+ }
174
+ phase = "EXEC";
175
+ persistence.upsertTaskState({
176
+ runId,
177
+ taskId: task.id,
178
+ status: "running",
179
+ phase,
180
+ iteration: iter,
181
+ });
182
+ ledger.event({ taskId: task.id, kind: "exec", message: `EXEC iteration ${iter}` });
183
+ const backendRes = await args.backend.implement({ cwd, backendId: args.backend.id }, {
184
+ task,
185
+ iteration: iter,
186
+ repairNotes: pendingRepairNotes ??
187
+ (shouldDegrade
188
+ ? "WARNING tier active (repair-only mode will be enforced on failures)."
189
+ : undefined),
190
+ });
191
+ if (!backendRes.ok) {
192
+ persistence.upsertTaskState({
193
+ runId,
194
+ taskId: task.id,
195
+ status: "error",
196
+ phase: "EXEC",
197
+ iteration: iter,
198
+ lastError: backendRes.message,
199
+ });
200
+ ledger.event({
201
+ taskId: task.id,
202
+ kind: "backend_error",
203
+ message: backendRes.message,
204
+ });
205
+ return { ok: false, runId, exitCode: 5, reason: "Backend invocation error" };
206
+ }
207
+ phase = "VALIDATE";
208
+ const validators = this.resolveValidators(args.spec, task).map((v) => ({
209
+ ...v,
210
+ timeoutMs: v.timeoutMs ?? (args.spec.budgets?.limits?.commandTimeoutSeconds ?? 900) * 1000,
211
+ }));
212
+ const runner = new runner_1.ValidatorRunner({
213
+ cwd,
214
+ commandTimeoutMs: (args.spec.budgets?.limits?.commandTimeoutSeconds ?? 900) * 1000,
215
+ });
216
+ const results = await runner.runAll(validators);
217
+ const allIssues = Object.entries(results).flatMap(([id, r]) => {
218
+ // If a validator failed but produced no parsed issues, create a generic one.
219
+ const issues = !r.ok && r.issues.length === 0
220
+ ? [
221
+ {
222
+ kind: "unknown",
223
+ level: "error",
224
+ message: `Validator "${id}" failed (exit=${r.exitCode ?? "?"})`,
225
+ raw: { validatorId: id },
226
+ },
227
+ ]
228
+ : r.issues;
229
+ return issues.map((i) => ({
230
+ ...i,
231
+ raw: i.raw ?? { validatorId: id },
232
+ }));
233
+ });
234
+ // Contract enforcement after EXEC
235
+ if (task.filesContract) {
236
+ const violations = await args.workspace.enforceContract(task.id, task.filesContract);
237
+ if (violations.length) {
238
+ allIssues.push(...violations.map((v) => ({
239
+ kind: "contract_violation",
240
+ level: "error",
241
+ message: `File contract violation: ${v.reason} (${v.file})`,
242
+ file: v.file,
243
+ raw: v,
244
+ })));
245
+ }
246
+ }
247
+ const ok = Object.values(results).every((r) => r.ok) && allIssues.every((i) => i.level !== "error");
248
+ ledger.event({
249
+ taskId: task.id,
250
+ kind: "validate",
251
+ message: ok ? "VALIDATE passed" : "VALIDATE failed",
252
+ data: { ok, issues: allIssues.length },
253
+ });
254
+ const signatures = allIssues.map(signatures_1.issueSignature);
255
+ lastSignatures.push(...signatures);
256
+ while (lastSignatures.length > 50)
257
+ lastSignatures.shift();
258
+ const recent = lastSignatures.slice(-signatures.length);
259
+ const stuck = signatures.length > 0 &&
260
+ recent.length === signatures.length &&
261
+ iter >= 3 &&
262
+ signatures.every((s) => lastSignatures.slice(-signatures.length * 3).includes(s));
263
+ if (ok) {
264
+ phase = "CHECKPOINT";
265
+ await args.workspace.checkpoint(task.id, "Task completed");
266
+ persistence.upsertTaskState({
267
+ runId,
268
+ taskId: task.id,
269
+ status: "done",
270
+ phase: "DONE",
271
+ iteration: iter,
272
+ });
273
+ ledger.event({ taskId: task.id, kind: "task_done", message: "Task done" });
274
+ budgetManager.recordIteration(Date.now() - iterStarted);
275
+ return { ok: true, runId };
276
+ }
277
+ // Save failure context for next iteration.
278
+ lastValidatorResults = results;
279
+ lastIssues = allIssues;
280
+ pendingRepairNotes = undefined;
281
+ phase = "DIAGNOSE";
282
+ persistence.upsertTaskState({
283
+ runId,
284
+ taskId: task.id,
285
+ status: "running",
286
+ phase,
287
+ iteration: iter,
288
+ lastError: "Validation failed",
289
+ });
290
+ if (stuck) {
291
+ ledger.event({
292
+ taskId: task.id,
293
+ kind: "stuck",
294
+ message: "Stuck detected (same issues repeated)",
295
+ });
296
+ return { ok: false, runId, exitCode: 3, reason: "Stuck / max iterations" };
297
+ }
298
+ phase = "REPAIR";
299
+ const tierAfter = taskBudgetConfig ? budgetManager.getTier(taskBudgetConfig) : "optimal";
300
+ const repairNotes = (0, repair_1.buildRepairNotes)({
301
+ tier: tierAfter === "warning" ? "warning" : "optimal",
302
+ issues: allIssues,
303
+ });
304
+ ledger.event({ taskId: task.id, kind: "repair", message: "Retrying (repair loop)" });
305
+ pendingRepairNotes = repairNotes;
306
+ budgetManager.recordIteration(Date.now() - iterStarted);
307
+ }
308
+ ledger.event({
309
+ taskId: task.id,
310
+ kind: "max_iterations",
311
+ message: `Max iterations reached (${maxIter})`,
312
+ });
313
+ persistence.upsertTaskState({
314
+ runId,
315
+ taskId: task.id,
316
+ status: "blocked",
317
+ phase: "DIAGNOSE",
318
+ iteration: maxIter,
319
+ lastError: "Max iterations reached",
320
+ });
321
+ return { ok: false, runId, exitCode: 3, reason: "Max iterations reached" };
322
+ }
323
+ toTaskBudgetConfig(task) {
324
+ const b = task.budget;
325
+ const hardIter = b?.hard?.maxIterations;
326
+ if (!b || hardIter === undefined)
327
+ return null;
328
+ return {
329
+ optimal: {
330
+ usd: b.optimal?.usd,
331
+ tokens: b.optimal?.tokens,
332
+ timeMinutes: b.optimal?.timeMinutes,
333
+ },
334
+ warning: {
335
+ usd: b.warning?.usd,
336
+ tokens: b.warning?.tokens,
337
+ timeMinutes: b.warning?.timeMinutes,
338
+ },
339
+ hard: {
340
+ usd: b.hard?.usd,
341
+ tokens: b.hard?.tokens,
342
+ timeMinutes: b.hard?.timeMinutes,
343
+ maxIterations: hardIter,
344
+ },
345
+ };
346
+ }
347
+ resolveValidators(spec, task) {
348
+ const ids = task.validators ?? spec.defaults.validators ?? [];
349
+ const byId = new Map((spec.validators ?? []).map((v) => [v.id, v]));
350
+ const validators = [];
351
+ for (const id of ids) {
352
+ const v = byId.get(id);
353
+ if (!v)
354
+ continue;
355
+ validators.push({
356
+ id: v.id,
357
+ run: v.run,
358
+ timeoutMs: v.timeoutSeconds ? v.timeoutSeconds * 1000 : undefined,
359
+ parser: v.parser ?? undefined,
360
+ });
361
+ }
362
+ return validators;
363
+ }
364
+ }
365
+ exports.EngineLoop = EngineLoop;
366
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/core/engine/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type Phase = "PLAN" | "PREP" | "EXEC" | "VALIDATE" | "DIAGNOSE" | "REPAIR" | "CHECKPOINT" | "DONE";
2
+ //# sourceMappingURL=phases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phases.d.ts","sourceRoot":"","sources":["../../../src/core/engine/phases.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GACb,MAAM,GACN,MAAM,GACN,MAAM,GACN,UAAU,GACV,UAAU,GACV,QAAQ,GACR,YAAY,GACZ,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=phases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phases.js","sourceRoot":"","sources":["../../../src/core/engine/phases.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { Issue } from "../validators/types";
2
+ export declare function buildRepairNotes(args: {
3
+ tier: "optimal" | "warning" | "hard";
4
+ issues: Issue[];
5
+ }): string;
6
+ //# sourceMappingURL=repair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.d.ts","sourceRoot":"","sources":["../../../src/core/engine/repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACrC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,GAAG,MAAM,CAsBT"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildRepairNotes = buildRepairNotes;
4
+ function buildRepairNotes(args) {
5
+ const lines = [];
6
+ lines.push(`# Repair notes`);
7
+ lines.push(``);
8
+ if (args.tier === "warning") {
9
+ lines.push(`## Constraints (WARNING tier)`);
10
+ lines.push(`- Fix only failing validators`);
11
+ lines.push(`- Do NOT refactor unrelated code`);
12
+ lines.push(`- Do NOT add new features`);
13
+ lines.push(``);
14
+ }
15
+ lines.push(`## Issues`);
16
+ for (const i of args.issues) {
17
+ const loc = i.file ? `${i.file}${i.line ? `:${i.line}` : ""}` : "";
18
+ lines.push(`- [${i.level}] ${i.kind}${loc ? ` (${loc})` : ""}: ${i.message}`);
19
+ }
20
+ lines.push(``);
21
+ return lines.join("\n");
22
+ }
23
+ //# sourceMappingURL=repair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair.js","sourceRoot":"","sources":["../../../src/core/engine/repair.ts"],"names":[],"mappings":";;AAEA,4CAyBC;AAzBD,SAAgB,gBAAgB,CAAC,IAGhC;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,26 @@
1
+ export declare const LEGACY_ROOT_DIR = ".ralphy";
2
+ export declare const DEFAULT_ROOT_DIR = "ralphy-spec";
3
+ export declare const FOLDERS: {
4
+ readonly runs: "runs";
5
+ readonly logs: "logs";
6
+ readonly worktrees: "worktrees";
7
+ readonly tasks: "tasks";
8
+ };
9
+ export declare const FILES: {
10
+ readonly db: "state.db";
11
+ readonly status: "STATUS.md";
12
+ readonly tasks: "TASKS.md";
13
+ readonly budget: "BUDGET.md";
14
+ };
15
+ export declare function getRalphyRoot(repoRoot: string, overrideDir?: string): string;
16
+ export declare function ensureRalphyFolders(repoRoot: string, overrideDir?: string): Promise<string>;
17
+ export declare function migrateLegacyIfNeeded(repoRoot: string, overrideDir?: string): Promise<{
18
+ migrated: false;
19
+ from?: undefined;
20
+ to?: undefined;
21
+ } | {
22
+ migrated: true;
23
+ from: string;
24
+ to: string;
25
+ }>;
26
+ //# sourceMappingURL=folders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.d.ts","sourceRoot":"","sources":["../../src/core/folders.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAE9C,eAAO,MAAM,OAAO;;;;;CAKV,CAAC;AAEX,eAAO,MAAM,KAAK;;;;;CAKR,CAAC;AAEX,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,mBAQ/E;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;;;;;;;;GAWjF"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FILES = exports.FOLDERS = exports.DEFAULT_ROOT_DIR = exports.LEGACY_ROOT_DIR = void 0;
7
+ exports.getRalphyRoot = getRalphyRoot;
8
+ exports.ensureRalphyFolders = ensureRalphyFolders;
9
+ exports.migrateLegacyIfNeeded = migrateLegacyIfNeeded;
10
+ const promises_1 = __importDefault(require("node:fs/promises"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const fs_extra_1 = __importDefault(require("fs-extra"));
13
+ exports.LEGACY_ROOT_DIR = ".ralphy";
14
+ exports.DEFAULT_ROOT_DIR = "ralphy-spec";
15
+ exports.FOLDERS = {
16
+ runs: "runs",
17
+ logs: "logs",
18
+ worktrees: "worktrees",
19
+ tasks: "tasks",
20
+ };
21
+ exports.FILES = {
22
+ db: "state.db",
23
+ status: "STATUS.md",
24
+ tasks: "TASKS.md",
25
+ budget: "BUDGET.md",
26
+ };
27
+ function getRalphyRoot(repoRoot, overrideDir) {
28
+ return node_path_1.default.join(repoRoot, overrideDir ?? exports.DEFAULT_ROOT_DIR);
29
+ }
30
+ async function ensureRalphyFolders(repoRoot, overrideDir) {
31
+ const root = getRalphyRoot(repoRoot, overrideDir);
32
+ await promises_1.default.mkdir(root, { recursive: true });
33
+ await promises_1.default.mkdir(node_path_1.default.join(root, exports.FOLDERS.runs), { recursive: true });
34
+ await promises_1.default.mkdir(node_path_1.default.join(root, exports.FOLDERS.logs), { recursive: true });
35
+ await promises_1.default.mkdir(node_path_1.default.join(root, exports.FOLDERS.worktrees), { recursive: true });
36
+ await promises_1.default.mkdir(node_path_1.default.join(root, exports.FOLDERS.tasks), { recursive: true });
37
+ return root;
38
+ }
39
+ async function migrateLegacyIfNeeded(repoRoot, overrideDir) {
40
+ const legacy = node_path_1.default.join(repoRoot, exports.LEGACY_ROOT_DIR);
41
+ const next = getRalphyRoot(repoRoot, overrideDir);
42
+ const legacyExists = await exists(legacy);
43
+ const nextExists = await exists(next);
44
+ if (!legacyExists || nextExists)
45
+ return { migrated: false };
46
+ await fs_extra_1.default.copy(legacy, next, { overwrite: false, errorOnExist: false });
47
+ return { migrated: true, from: legacy, to: next };
48
+ }
49
+ async function exists(p) {
50
+ try {
51
+ await promises_1.default.access(p);
52
+ return true;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ //# sourceMappingURL=folders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.js","sourceRoot":"","sources":["../../src/core/folders.ts"],"names":[],"mappings":";;;;;;AAqBA,sCAEC;AAED,kDAQC;AAED,sDAWC;AA9CD,gEAAkC;AAClC,0DAA6B;AAC7B,wDAA2B;AAEd,QAAA,eAAe,GAAG,SAAS,CAAC;AAC5B,QAAA,gBAAgB,GAAG,aAAa,CAAC;AAEjC,QAAA,OAAO,GAAG;IACrB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;CACN,CAAC;AAEE,QAAA,KAAK,GAAG;IACnB,EAAE,EAAE,UAAU;IACd,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,WAAW;CACX,CAAC;AAEX,SAAgB,aAAa,CAAC,QAAgB,EAAE,WAAoB;IAClE,OAAO,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,wBAAgB,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,QAAgB,EAAE,WAAoB;IAC9E,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,kBAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAO,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,QAAgB,EAAE,WAAoB;IAChF,MAAM,MAAM,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAe,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAElD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,YAAY,IAAI,UAAU;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAc,EAAE,CAAC;IAErE,MAAM,kBAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,OAAO,EAAE,QAAQ,EAAE,IAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,CAAS;IAC7B,IAAI,CAAC;QACH,MAAM,kBAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { PersistenceLayer } from "./persistence";
2
+ export declare class LedgerLogger {
3
+ private readonly persistence;
4
+ private readonly runId;
5
+ constructor(persistence: PersistenceLayer, runId: string);
6
+ event(args: {
7
+ taskId?: string;
8
+ kind: string;
9
+ message: string;
10
+ data?: unknown;
11
+ }): void;
12
+ }
13
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/core/memory/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnE,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,WAAW,EAAE,gBAAgB,EAC7B,KAAK,EAAE,MAAM;IAGhC,KAAK,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;CAWtF"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LedgerLogger = void 0;
4
+ class LedgerLogger {
5
+ persistence;
6
+ runId;
7
+ constructor(persistence, runId) {
8
+ this.persistence = persistence;
9
+ this.runId = runId;
10
+ }
11
+ event(args) {
12
+ const ev = {
13
+ runId: this.runId,
14
+ taskId: args.taskId,
15
+ ts: new Date().toISOString(),
16
+ kind: args.kind,
17
+ message: args.message,
18
+ data: args.data,
19
+ };
20
+ this.persistence.appendLedger(ev);
21
+ }
22
+ }
23
+ exports.LedgerLogger = LedgerLogger;
24
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/core/memory/ledger.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IAEJ;IACA;IAFnB,YACmB,WAA6B,EAC7B,KAAa;QADb,gBAAW,GAAX,WAAW,CAAkB;QAC7B,UAAK,GAAL,KAAK,CAAQ;IAC7B,CAAC;IAEJ,KAAK,CAAC,IAAwE;QAC5E,MAAM,EAAE,GAAgB;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;CACF;AAjBD,oCAiBC"}
@@ -0,0 +1,45 @@
1
+ export type RunStatus = "active" | "success" | "stopped" | "error";
2
+ export type TaskStatus = "pending" | "running" | "done" | "blocked" | "error";
3
+ export type LedgerEvent = {
4
+ runId: string;
5
+ taskId?: string;
6
+ ts: string;
7
+ kind: string;
8
+ message: string;
9
+ data?: unknown;
10
+ };
11
+ export declare class PersistenceLayer {
12
+ private readonly db;
13
+ constructor(dbPath: string);
14
+ static openForRepo(repoRoot: string): Promise<PersistenceLayer>;
15
+ close(): void;
16
+ createRun(args: {
17
+ runId: string;
18
+ repoRoot: string;
19
+ backendId?: string;
20
+ workspaceMode?: string;
21
+ }): void;
22
+ finishRun(args: {
23
+ runId: string;
24
+ status: RunStatus;
25
+ }): void;
26
+ upsertTaskState(args: {
27
+ runId: string;
28
+ taskId: string;
29
+ status: TaskStatus;
30
+ phase?: string;
31
+ iteration?: number;
32
+ lastError?: string;
33
+ }): void;
34
+ appendLedger(event: LedgerEvent): void;
35
+ listLedger(args: {
36
+ runId: string;
37
+ limit?: number;
38
+ }): LedgerEvent[];
39
+ getLatestRun(): {
40
+ runId: string;
41
+ status: RunStatus;
42
+ startedAt: string;
43
+ } | null;
44
+ }
45
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/core/memory/persistence.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9E,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AA0DF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;gBAE3B,MAAM,EAAE,MAAM;WAMb,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOrE,KAAK,IAAI,IAAI;IAIb,SAAS,CAAC,IAAI,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI;IAeR,SAAS,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI;IAU3D,eAAe,CAAC,IAAI,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,UAAU,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI;IAsBR,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAgBtC,UAAU,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,EAAE;IAuBlE,YAAY,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAW/E"}