@eidra-umain/greenlight 0.3.0 → 0.4.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 (87) hide show
  1. package/README.md +265 -22
  2. package/dist/browser/browser.d.ts.map +1 -1
  3. package/dist/browser/browser.js +50 -14
  4. package/dist/browser/browser.js.map +1 -1
  5. package/dist/cli/index.js +2 -2
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/run.d.ts.map +1 -1
  8. package/dist/cli/run.js +151 -38
  9. package/dist/cli/run.js.map +1 -1
  10. package/dist/parser/loader.d.ts +12 -3
  11. package/dist/parser/loader.d.ts.map +1 -1
  12. package/dist/parser/loader.js +53 -5
  13. package/dist/parser/loader.js.map +1 -1
  14. package/dist/parser/schema.d.ts +24 -3
  15. package/dist/parser/schema.d.ts.map +1 -1
  16. package/dist/parser/schema.js +12 -2
  17. package/dist/parser/schema.js.map +1 -1
  18. package/dist/pilot/a11y-parser.d.ts +6 -1
  19. package/dist/pilot/a11y-parser.d.ts.map +1 -1
  20. package/dist/pilot/a11y-parser.js +19 -1
  21. package/dist/pilot/a11y-parser.js.map +1 -1
  22. package/dist/pilot/assertions.d.ts.map +1 -1
  23. package/dist/pilot/assertions.js +15 -0
  24. package/dist/pilot/assertions.js.map +1 -1
  25. package/dist/pilot/conditions.d.ts +15 -0
  26. package/dist/pilot/conditions.d.ts.map +1 -0
  27. package/dist/pilot/conditions.js +77 -0
  28. package/dist/pilot/conditions.js.map +1 -0
  29. package/dist/pilot/datepick.d.ts +21 -0
  30. package/dist/pilot/datepick.d.ts.map +1 -0
  31. package/dist/pilot/datepick.js +187 -0
  32. package/dist/pilot/datepick.js.map +1 -0
  33. package/dist/pilot/executor.d.ts.map +1 -1
  34. package/dist/pilot/executor.js +108 -48
  35. package/dist/pilot/executor.js.map +1 -1
  36. package/dist/pilot/llm.d.ts +2 -0
  37. package/dist/pilot/llm.d.ts.map +1 -1
  38. package/dist/pilot/llm.js +59 -3
  39. package/dist/pilot/llm.js.map +1 -1
  40. package/dist/pilot/locator.d.ts.map +1 -1
  41. package/dist/pilot/locator.js +43 -0
  42. package/dist/pilot/locator.js.map +1 -1
  43. package/dist/pilot/message-builder.d.ts +7 -1
  44. package/dist/pilot/message-builder.d.ts.map +1 -1
  45. package/dist/pilot/message-builder.js +18 -5
  46. package/dist/pilot/message-builder.js.map +1 -1
  47. package/dist/pilot/pilot.d.ts +2 -0
  48. package/dist/pilot/pilot.d.ts.map +1 -1
  49. package/dist/pilot/pilot.js +167 -8
  50. package/dist/pilot/pilot.js.map +1 -1
  51. package/dist/pilot/prompts.d.ts +3 -2
  52. package/dist/pilot/prompts.d.ts.map +1 -1
  53. package/dist/pilot/prompts.js +156 -27
  54. package/dist/pilot/prompts.js.map +1 -1
  55. package/dist/pilot/random.d.ts +37 -0
  56. package/dist/pilot/random.d.ts.map +1 -0
  57. package/dist/pilot/random.js +55 -0
  58. package/dist/pilot/random.js.map +1 -0
  59. package/dist/pilot/response-parser.d.ts +19 -1
  60. package/dist/pilot/response-parser.d.ts.map +1 -1
  61. package/dist/pilot/response-parser.js +148 -62
  62. package/dist/pilot/response-parser.js.map +1 -1
  63. package/dist/pilot/state.d.ts +1 -1
  64. package/dist/pilot/state.d.ts.map +1 -1
  65. package/dist/pilot/state.js +170 -38
  66. package/dist/pilot/state.js.map +1 -1
  67. package/dist/planner/plan-generator.d.ts +6 -0
  68. package/dist/planner/plan-generator.d.ts.map +1 -1
  69. package/dist/planner/plan-generator.js +26 -0
  70. package/dist/planner/plan-generator.js.map +1 -1
  71. package/dist/planner/plan-runner.d.ts +1 -0
  72. package/dist/planner/plan-runner.d.ts.map +1 -1
  73. package/dist/planner/plan-runner.js +104 -4
  74. package/dist/planner/plan-runner.js.map +1 -1
  75. package/dist/planner/plan-store.d.ts +6 -0
  76. package/dist/planner/plan-store.d.ts.map +1 -1
  77. package/dist/planner/plan-store.js +27 -0
  78. package/dist/planner/plan-store.js.map +1 -1
  79. package/dist/planner/plan-types.d.ts +17 -2
  80. package/dist/planner/plan-types.d.ts.map +1 -1
  81. package/dist/reporter/types.d.ts +15 -2
  82. package/dist/reporter/types.d.ts.map +1 -1
  83. package/dist/types.d.ts +3 -3
  84. package/dist/types.d.ts.map +1 -1
  85. package/dist/types.js +1 -1
  86. package/dist/types.js.map +1 -1
  87. package/package.json +4 -1
package/dist/cli/run.js CHANGED
@@ -4,7 +4,7 @@ import { attachConsoleCollector, attachNetworkTracker, } from "../pilot/network.
4
4
  import { resolveLLMConfig, createLLMClient, } from "../pilot/llm.js";
5
5
  import { runTestCase } from "../pilot/pilot.js";
6
6
  import { computeTestHash, slugify } from "../planner/hasher.js";
7
- import { loadHashIndex, saveHashIndex, loadPlan, savePlan, ensureGitignore, } from "../planner/plan-store.js";
7
+ import { loadHashIndex, saveHashIndex, loadPlan, savePlan, loadPartialPlan, savePartialPlan, deletePartialPlan, ensureGitignore, } from "../planner/plan-store.js";
8
8
  import { createPlanRecorder } from "../planner/plan-generator.js";
9
9
  import { runCachedPlan } from "../planner/plan-runner.js";
10
10
  import { resolveModelConfig } from "../types.js";
@@ -20,7 +20,12 @@ function printStepResult(stepResult) {
20
20
  const phases = t
21
21
  ? ` \x1b[90m[capture:${String(Math.round(t.capture))} llm:${String(Math.round(t.llm))} exec:${String(Math.round(t.execute))} post:${String(Math.round(t.postCapture))}ms]\x1b[0m`
22
22
  : "";
23
- console.log(` ${icon} ${stepResult.step} (${dur})${phases}`);
23
+ // Strip internal "||" separator from datepick step names
24
+ const stepName = stepResult.step.includes("||") ? stepResult.step.split("||")[0] : stepResult.step;
25
+ const condTag = stepResult.conditionResult
26
+ ? ` \x1b[90m[${stepResult.conditionResult.branch}]\x1b[0m`
27
+ : "";
28
+ console.log(` ${icon} ${stepName} (${dur})${phases}${condTag}`);
24
29
  if (stepResult.error) {
25
30
  console.log(` \x1b[31m${stepResult.error}\x1b[0m`);
26
31
  }
@@ -97,13 +102,12 @@ export async function runCommand(config, resolvedFiles) {
97
102
  console.error(err.message);
98
103
  process.exit(1);
99
104
  }
100
- // Resolve base URL: CLI flag > deployment/config > suite
101
- const baseUrl = config.baseUrl ?? suite.base_url;
105
+ // Resolve base URL: CLI flag > deployment config
106
+ const baseUrl = config.baseUrl;
102
107
  if (!baseUrl) {
103
- console.error(`No base_url for suite "${suite.suite}". Set it in the suite YAML, greenlight.yaml, or pass --base-url.`);
108
+ console.error(`No base_url for suite "${suite.suite}". Set it in greenlight.yaml or pass --base-url.`);
104
109
  process.exit(1);
105
110
  }
106
- suite.base_url = baseUrl;
107
111
  // Apply suite-level model override
108
112
  const effectiveModel = suite.model ?? config.model;
109
113
  const suiteSlug = slugify(suite.suite);
@@ -119,22 +123,36 @@ export async function runCommand(config, resolvedFiles) {
119
123
  }
120
124
  // Load hash index for plan caching
121
125
  const hashIndex = await loadHashIndex(cwd);
122
- // LLM client — created lazily, only when a test needs discovery
126
+ // LLM client — created lazily, only when a test needs pilot mode
123
127
  let llm;
124
128
  function getOrCreateLLM() {
125
129
  if (!llm) {
126
- const llmConfig = resolveLLMConfig({
127
- ...config,
128
- model: effectiveModel,
129
- });
130
- llm = createLLMClient(llmConfig);
130
+ try {
131
+ const llmConfig = resolveLLMConfig({
132
+ ...config,
133
+ model: effectiveModel,
134
+ });
135
+ llm = createLLMClient(llmConfig);
136
+ }
137
+ catch (err) {
138
+ const msg = err instanceof Error ? err.message : String(err);
139
+ console.error(`\n \x1b[31m${msg}\x1b[0m`);
140
+ console.error(` Set it in a .env file or export it in your shell:`);
141
+ console.error(` $ export LLM_API_KEY=sk-...`);
142
+ process.exit(1);
143
+ }
131
144
  }
132
145
  return llm;
133
146
  }
134
147
  // Launch browser — in headed mode use a persistent context with the
135
- // zoom extension for real 75% browser zoom. In headless mode use the
148
+ // zoom extension for real 50% browser zoom. In headless mode use the
136
149
  // normal browser + context flow.
137
- const browserOpts = toBrowserOptions(config);
150
+ // Suite-level viewport overrides the project/default viewport.
151
+ const effectiveViewport = suite.viewport ?? config.viewport;
152
+ const browserOpts = toBrowserOptions({
153
+ ...config,
154
+ viewport: effectiveViewport,
155
+ });
138
156
  let browser = null;
139
157
  let persistentContext = null;
140
158
  try {
@@ -166,7 +184,7 @@ export async function runCommand(config, resolvedFiles) {
166
184
  // Determine execution mode
167
185
  let useCachedPlan = false;
168
186
  let cachedPlan = null;
169
- if (!config.discover && cachedHash === testHash) {
187
+ if (!config.pilot && cachedHash === testHash) {
170
188
  cachedPlan = await loadPlan(cwd, suiteSlug, testSlug);
171
189
  if (cachedPlan) {
172
190
  useCachedPlan = true;
@@ -174,27 +192,25 @@ export async function runCommand(config, resolvedFiles) {
174
192
  }
175
193
  const modeLabel = useCachedPlan
176
194
  ? "\x1b[36mcached\x1b[0m"
177
- : "\x1b[33mdiscovery\x1b[0m";
195
+ : "\x1b[33mpilot\x1b[0m";
178
196
  console.log(`\n Test: ${test.name} [${modeLabel}]`);
179
- if (!config.discover &&
180
- cachedHash &&
181
- cachedHash !== testHash) {
182
- console.log(` \x1b[33mPlan stale, re-discovering\x1b[0m`);
197
+ if (!config.pilot && cachedHash && cachedHash !== testHash) {
198
+ console.log(` \x1b[33mPlan stale, running pilot\x1b[0m`);
183
199
  }
184
200
  // Fresh context per test case (reuse persistent context in headed mode)
185
201
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
186
- const context = persistentContext ?? await createContext(browser, browserOpts);
202
+ const context = persistentContext ?? (await createContext(browser, browserOpts));
187
203
  const page = await createPage(context, { headed: browserOpts.headed });
188
204
  const { drain } = attachConsoleCollector(page);
189
205
  const { waitForNetworkIdle } = attachNetworkTracker(page);
190
206
  globals.trace.attachToPage(page);
191
207
  try {
192
- globals.trace.log("goto", suite.base_url);
193
- await page.goto(suite.base_url);
208
+ globals.trace.log("goto", baseUrl);
209
+ await page.goto(baseUrl);
194
210
  }
195
211
  catch (err) {
196
212
  const msg = err instanceof Error ? err.message : String(err);
197
- console.error(`\n \x1b[31m\u2717\x1b[0m Failed to navigate to ${suite.base_url}: ${msg}`);
213
+ console.error(`\n \x1b[31m\u2717\x1b[0m Failed to navigate to ${baseUrl}: ${msg}`);
198
214
  globals.trace.detachFromPage(page);
199
215
  if (persistentContext) {
200
216
  // Persistent context is shared — close pages only
@@ -209,7 +225,11 @@ export async function runCommand(config, resolvedFiles) {
209
225
  let result;
210
226
  if (useCachedPlan && cachedPlan) {
211
227
  // Fast run — replay cached plan
212
- result = await runCachedPlan(page, cachedPlan, test.name, { waitForNetworkIdle, onStepComplete: printStepResult });
228
+ result = await runCachedPlan(page, cachedPlan, test.name, {
229
+ waitForNetworkIdle,
230
+ onStepComplete: printStepResult,
231
+ consoleDrain: drain,
232
+ });
213
233
  // Handle plan drift
214
234
  if (result.drifted && config.onDrift === "rerun") {
215
235
  console.log(` \x1b[33mPlan drift detected, re-running with LLM\x1b[0m`);
@@ -218,19 +238,24 @@ export async function runCommand(config, resolvedFiles) {
218
238
  if (persistentContext) {
219
239
  // Persistent context is shared — close pages only
220
240
  for (const p of context.pages())
221
- await p.close().catch(() => { });
241
+ await p.close().catch(() => {
242
+ /* ignore */
243
+ });
222
244
  }
223
245
  else {
224
246
  await context.close();
225
247
  }
226
- const ctx2 = persistentContext ?? await createContext(
227
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
228
- browser, browserOpts);
229
- const page2 = await createPage(ctx2, { headed: browserOpts.headed });
248
+ const ctx2 = persistentContext ??
249
+ (await createContext(
250
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
251
+ browser, browserOpts));
252
+ const page2 = await createPage(ctx2, {
253
+ headed: browserOpts.headed,
254
+ });
230
255
  const { drain: drain2 } = attachConsoleCollector(page2);
231
256
  const { waitForNetworkIdle: waitForNetworkIdle2 } = attachNetworkTracker(page2);
232
257
  globals.trace.attachToPage(page2);
233
- await page2.goto(suite.base_url);
258
+ await page2.goto(baseUrl);
234
259
  const modelLabel = typeof effectiveModel === "string"
235
260
  ? effectiveModel
236
261
  : `${effectiveModel.planner}/${effectiveModel.pilot}`;
@@ -242,7 +267,7 @@ export async function runCommand(config, resolvedFiles) {
242
267
  waitForNetworkIdle: waitForNetworkIdle2,
243
268
  onStepComplete: printStepResult,
244
269
  });
245
- result.mode = "discovery";
270
+ result.mode = "pilot";
246
271
  if (result.status === "passed") {
247
272
  const plan = recorder.finalize();
248
273
  await savePlan(cwd, plan);
@@ -261,28 +286,116 @@ export async function runCommand(config, resolvedFiles) {
261
286
  }
262
287
  }
263
288
  else {
264
- // Discovery run — full LLM loop with recorder
265
- const discoveryModelLabel = typeof effectiveModel === "string"
289
+ // Pilot run — check for partial plan to resume from
290
+ const partialPlan = config.pilot
291
+ ? await loadPartialPlan(cwd, suiteSlug, testSlug)
292
+ : null;
293
+ const hasPartial = partialPlan && partialPlan.sourceHash === testHash && partialPlan.steps.length > 0;
294
+ let resumeSteps = test.steps;
295
+ if (hasPartial && partialPlan.remainingSteps) {
296
+ // Replay cached steps from previous partial run
297
+ console.log(` \x1b[36mResuming from partial plan (${String(partialPlan.steps.length)} cached steps)\x1b[0m`);
298
+ const partialResult = await runCachedPlan(page, partialPlan, test.name, {
299
+ waitForNetworkIdle,
300
+ onStepComplete: printStepResult,
301
+ consoleDrain: drain,
302
+ });
303
+ if (partialResult.drifted || partialResult.status === "failed") {
304
+ // Partial plan drifted — fall back to full pilot run
305
+ console.log(` \x1b[33mPartial plan drifted, running full pilot\x1b[0m`);
306
+ await deletePartialPlan(cwd, suiteSlug, testSlug);
307
+ // Re-create page for clean state
308
+ globals.trace.detachFromPage(page);
309
+ if (persistentContext) {
310
+ for (const p of context.pages())
311
+ await p.close().catch(() => { });
312
+ }
313
+ else {
314
+ await context.close();
315
+ }
316
+ const ctx3 = persistentContext ?? (await createContext(browser, browserOpts));
317
+ const page3 = await createPage(ctx3, { headed: browserOpts.headed });
318
+ const { drain: drain3 } = attachConsoleCollector(page3);
319
+ const { waitForNetworkIdle: wni3 } = attachNetworkTracker(page3);
320
+ globals.trace.attachToPage(page3);
321
+ await page3.goto(baseUrl);
322
+ // Fall through to normal pilot below with full steps
323
+ // (can't reassign page/drain/waitForNetworkIdle, so recurse would be complex —
324
+ // for now just re-run the whole test)
325
+ resumeSteps = test.steps;
326
+ const modelLabel3 = typeof effectiveModel === "string" ? effectiveModel : `${effectiveModel.planner}/${effectiveModel.pilot}`;
327
+ const recorder3 = createPlanRecorder(suiteSlug, testSlug, testHash, modelLabel3);
328
+ result = await runTestCase(page3, { name: test.name, steps: resumeSteps }, getOrCreateLLM(), {
329
+ timeout: config.timeout,
330
+ consoleDrain: drain3,
331
+ recorder: recorder3,
332
+ waitForNetworkIdle: wni3,
333
+ onStepComplete: printStepResult,
334
+ });
335
+ result.mode = "pilot";
336
+ if (result.status === "passed") {
337
+ const plan = recorder3.finalize();
338
+ await savePlan(cwd, plan);
339
+ hashIndex[hashKey] = testHash;
340
+ hashIndexDirty = true;
341
+ await deletePartialPlan(cwd, suiteSlug, testSlug);
342
+ await ensureGitignore(cwd);
343
+ console.log(` \x1b[32mCached plan generated for: ${test.name}\x1b[0m`);
344
+ }
345
+ else {
346
+ const completed3 = result.completedInputSteps ?? 0;
347
+ const remaining3 = resumeSteps.slice(completed3);
348
+ if (remaining3.length > 0 && completed3 > 0) {
349
+ const partial = recorder3.finalizePartial(remaining3);
350
+ await savePartialPlan(cwd, partial);
351
+ await ensureGitignore(cwd);
352
+ }
353
+ }
354
+ globals.trace.detachFromPage(page3);
355
+ if (!persistentContext)
356
+ await ctx3.close();
357
+ printTestSummary(result);
358
+ if (config.headed)
359
+ await new Promise((r) => setTimeout(r, 2000));
360
+ continue;
361
+ }
362
+ // Partial replay succeeded — continue with remaining steps
363
+ resumeSteps = partialPlan.remainingSteps;
364
+ console.log(` \x1b[33mSwitching to pilot for ${String(resumeSteps.length)} remaining steps\x1b[0m`);
365
+ }
366
+ const modelLabel = typeof effectiveModel === "string"
266
367
  ? effectiveModel
267
368
  : `${effectiveModel.planner}/${effectiveModel.pilot}`;
268
- const recorder = createPlanRecorder(suiteSlug, testSlug, testHash, discoveryModelLabel);
269
- result = await runTestCase(page, test, getOrCreateLLM(), {
369
+ const recorder = createPlanRecorder(suiteSlug, testSlug, testHash, modelLabel);
370
+ const pilotResult = await runTestCase(page, { name: test.name, steps: resumeSteps }, getOrCreateLLM(), {
270
371
  timeout: config.timeout,
271
372
  consoleDrain: drain,
272
373
  recorder,
273
374
  waitForNetworkIdle,
274
375
  onStepComplete: printStepResult,
275
376
  });
276
- result.mode = "discovery";
277
- // Save plan only if the test passed
377
+ result = pilotResult;
378
+ result.mode = "pilot";
278
379
  if (result.status === "passed") {
279
380
  const plan = recorder.finalize();
280
381
  await savePlan(cwd, plan);
281
382
  hashIndex[hashKey] = testHash;
282
383
  hashIndexDirty = true;
384
+ await deletePartialPlan(cwd, suiteSlug, testSlug);
283
385
  await ensureGitignore(cwd);
284
386
  console.log(` \x1b[32mCached plan generated for: ${test.name}\x1b[0m`);
285
387
  }
388
+ else {
389
+ // Save partial plan so next run can resume from here
390
+ const completed = result.completedInputSteps ?? 0;
391
+ const remaining = resumeSteps.slice(completed);
392
+ if (remaining.length > 0 && completed > 0) {
393
+ const partial = recorder.finalizePartial(remaining);
394
+ await savePartialPlan(cwd, partial);
395
+ await ensureGitignore(cwd);
396
+ console.log(` \x1b[33mPartial plan saved (${String(completed)}/${String(resumeSteps.length)} steps cached for next run)\x1b[0m`);
397
+ }
398
+ }
286
399
  }
287
400
  printTestSummary(result);
288
401
  if (config.headed) {
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,16 @@
1
1
  import { type Suite } from "./schema.js";
2
+ /** Resolved suite with steps flattened to plain strings. */
3
+ export interface ResolvedSuite extends Omit<Suite, "tests"> {
4
+ tests: {
5
+ name: string;
6
+ description?: string;
7
+ steps: string[];
8
+ }[];
9
+ }
2
10
  /**
3
- * Load a suite YAML file: parse, validate, expand reusable steps, interpolate variables.
4
- * Returns a fully resolved Suite ready for execution.
11
+ * Load a suite YAML file: parse, validate, expand reusable steps,
12
+ * flatten block conditionals, and interpolate variables.
13
+ * Returns a fully resolved Suite with all steps as plain strings.
5
14
  */
6
- export declare function loadSuite(filePath: string): Promise<Suite>;
15
+ export declare function loadSuite(filePath: string): Promise<ResolvedSuite>;
7
16
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/parser/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,KAAK,EAAiB,MAAM,aAAa,CAAA;AAGpE;;;GAGG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAkBhE"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/parser/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,KAAK,EAAmC,MAAM,aAAa,CAAA;AAGtF,4DAA4D;AAC5D,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;IAC1D,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CAChE;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmBxE"}
@@ -3,8 +3,9 @@ import { parse as parseYaml } from "yaml";
3
3
  import { SuiteSchema } from "./schema.js";
4
4
  import { interpolateSteps } from "./variables.js";
5
5
  /**
6
- * Load a suite YAML file: parse, validate, expand reusable steps, interpolate variables.
7
- * Returns a fully resolved Suite ready for execution.
6
+ * Load a suite YAML file: parse, validate, expand reusable steps,
7
+ * flatten block conditionals, and interpolate variables.
8
+ * Returns a fully resolved Suite with all steps as plain strings.
8
9
  */
9
10
  export async function loadSuite(filePath) {
10
11
  const raw = await readFile(filePath, "utf-8");
@@ -13,14 +14,62 @@ export async function loadSuite(filePath) {
13
14
  const suite = SuiteSchema.parse(parsed);
14
15
  const variables = suite.variables ?? {};
15
16
  const reusableSteps = suite.reusable_steps ?? {};
16
- // Expand reusable steps and interpolate variables for each test case
17
+ // Expand reusable steps, flatten conditionals, and interpolate variables
17
18
  const resolvedTests = suite.tests.map((test) => {
18
- const expanded = expandReusableSteps(test.steps, reusableSteps);
19
+ const flattened = flattenSteps(test.steps);
20
+ const expanded = expandReusableSteps(flattened, reusableSteps);
19
21
  const interpolated = interpolateSteps(expanded, variables);
20
22
  return { ...test, steps: interpolated };
21
23
  });
22
24
  return { ...suite, tests: resolvedTests };
23
25
  }
26
+ /**
27
+ * Flatten block conditionals into inline conditional strings.
28
+ *
29
+ * Converts:
30
+ * { if: "cookie banner visible", then: ["click Accept", "wait"], else: ["check list"] }
31
+ * Into:
32
+ * "if cookie banner visible then click Accept"
33
+ * "if cookie banner visible then wait"
34
+ * (else branch not yet supported for multi-step — see below)
35
+ *
36
+ * For single-step branches, produces a proper inline conditional:
37
+ * "if cookie banner visible then click Accept else check list"
38
+ */
39
+ function flattenSteps(steps) {
40
+ const result = [];
41
+ for (const step of steps) {
42
+ if (typeof step === "string") {
43
+ result.push(step);
44
+ }
45
+ else {
46
+ // Block conditional → convert to inline conditional string(s)
47
+ const cond = step;
48
+ if (cond.then.length === 1 && (!cond.else || cond.else.length <= 1)) {
49
+ // Simple case: single-step branches → one inline conditional
50
+ let inline = `if ${cond.if} then ${cond.then[0]}`;
51
+ if (cond.else && cond.else.length === 1) {
52
+ inline += ` else ${cond.else[0]}`;
53
+ }
54
+ result.push(inline);
55
+ }
56
+ else {
57
+ // Multi-step then branch: emit one conditional per then-step
58
+ for (const thenStep of cond.then) {
59
+ result.push(`if ${cond.if} then ${thenStep}`);
60
+ }
61
+ // Multi-step else branch: emit one conditional per else-step
62
+ // using negated condition (if NOT condition then else-step)
63
+ if (cond.else) {
64
+ for (const elseStep of cond.else) {
65
+ result.push(`if not ${cond.if} then ${elseStep}`);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ return result;
72
+ }
24
73
  /**
25
74
  * Expand reusable step references.
26
75
  * If a step string exactly matches a reusable step name, replace it
@@ -30,7 +79,6 @@ function expandReusableSteps(steps, reusableSteps) {
30
79
  const result = [];
31
80
  for (const step of steps) {
32
81
  if (step in reusableSteps) {
33
- // Recurse in case reusable steps reference other reusable steps
34
82
  const expanded = expandReusableSteps(reusableSteps[step], reusableSteps);
35
83
  result.push(...expanded);
36
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/parser/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,WAAW,EAA6B,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAY,SAAS,CAAC,GAAG,CAAC,CAAA;IAEtC,0BAA0B;IAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAEvC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAA;IACvC,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,CAAA;IAEhD,qEAAqE;IACrE,MAAM,aAAa,GAAe,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;QAC/D,MAAM,YAAY,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC1D,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAC3B,KAAe,EACf,aAAuC;IAEvC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;YAC3B,gEAAgE;YAChE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAA;YACxE,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/parser/loader.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,27 @@ export declare const ViewportSchema: z.ZodObject<{
4
4
  width: z.ZodNumber;
5
5
  height: z.ZodNumber;
6
6
  }, z.core.$strip>;
7
+ /** A block conditional step: if/then/else with multi-step branches. */
8
+ export declare const ConditionalStepSchema: z.ZodObject<{
9
+ if: z.ZodString;
10
+ then: z.ZodArray<z.ZodString>;
11
+ else: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
+ }, z.core.$strip>;
13
+ /** A step is either a plain string or a block conditional. */
14
+ export declare const StepSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
15
+ if: z.ZodString;
16
+ then: z.ZodArray<z.ZodString>;
17
+ else: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ }, z.core.$strip>]>;
7
19
  /** A single test case: a name and ordered list of plain-English steps. */
8
20
  export declare const TestCaseSchema: z.ZodObject<{
9
21
  name: z.ZodString;
10
22
  description: z.ZodOptional<z.ZodString>;
11
- steps: z.ZodArray<z.ZodString>;
23
+ steps: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
24
+ if: z.ZodString;
25
+ then: z.ZodArray<z.ZodString>;
26
+ else: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ }, z.core.$strip>]>>;
12
28
  }, z.core.$strip>;
13
29
  /**
14
30
  * Top-level suite definition — matches the YAML format from the spec.
@@ -18,7 +34,6 @@ export declare const TestCaseSchema: z.ZodObject<{
18
34
  */
19
35
  export declare const SuiteSchema: z.ZodObject<{
20
36
  suite: z.ZodString;
21
- base_url: z.ZodOptional<z.ZodURL>;
22
37
  viewport: z.ZodOptional<z.ZodObject<{
23
38
  width: z.ZodNumber;
24
39
  height: z.ZodNumber;
@@ -32,11 +47,17 @@ export declare const SuiteSchema: z.ZodObject<{
32
47
  tests: z.ZodArray<z.ZodObject<{
33
48
  name: z.ZodString;
34
49
  description: z.ZodOptional<z.ZodString>;
35
- steps: z.ZodArray<z.ZodString>;
50
+ steps: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
51
+ if: z.ZodString;
52
+ then: z.ZodArray<z.ZodString>;
53
+ else: z.ZodOptional<z.ZodArray<z.ZodString>>;
54
+ }, z.core.$strip>]>>;
36
55
  }, z.core.$strip>>;
37
56
  }, z.core.$strip>;
38
57
  /** Inferred TypeScript types from the schemas. */
39
58
  export type Suite = z.infer<typeof SuiteSchema>;
40
59
  export type TestCase = z.infer<typeof TestCaseSchema>;
60
+ export type ConditionalStep = z.infer<typeof ConditionalStepSchema>;
61
+ export type Step = z.infer<typeof StepSchema>;
41
62
  export type Viewport = z.infer<typeof ViewportSchema>;
42
63
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/parser/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,2BAA2B;AAC3B,eAAO,MAAM,cAAc;;;iBAGzB,CAAA;AAEF,0EAA0E;AAC1E,eAAO,MAAM,cAAc;;;;iBAIzB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;iBAatB,CAAA;AAEF,kDAAkD;AAClD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAC/C,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AACrD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/parser/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,2BAA2B;AAC3B,eAAO,MAAM,cAAc;;;iBAGzB,CAAA;AAEF,uEAAuE;AACvE,eAAO,MAAM,qBAAqB;;;;iBAIhC,CAAA;AAEF,8DAA8D;AAC9D,eAAO,MAAM,UAAU;;;;mBAGrB,CAAA;AAEF,0EAA0E;AAC1E,eAAO,MAAM,cAAc;;;;;;;;iBAIzB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;iBAYtB,CAAA;AAEF,kDAAkD;AAClD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAC/C,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AACrD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAC7C,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA"}
@@ -4,11 +4,22 @@ export const ViewportSchema = z.object({
4
4
  width: z.number().int().positive(),
5
5
  height: z.number().int().positive(),
6
6
  });
7
+ /** A block conditional step: if/then/else with multi-step branches. */
8
+ export const ConditionalStepSchema = z.object({
9
+ if: z.string().min(1),
10
+ then: z.array(z.string().min(1)).min(1),
11
+ else: z.array(z.string().min(1)).optional(),
12
+ });
13
+ /** A step is either a plain string or a block conditional. */
14
+ export const StepSchema = z.union([
15
+ z.string().min(1),
16
+ ConditionalStepSchema,
17
+ ]);
7
18
  /** A single test case: a name and ordered list of plain-English steps. */
8
19
  export const TestCaseSchema = z.object({
9
20
  name: z.string().min(1),
10
21
  description: z.string().optional(),
11
- steps: z.array(z.string().min(1)).min(1),
22
+ steps: z.array(StepSchema).min(1),
12
23
  });
13
24
  /**
14
25
  * Top-level suite definition — matches the YAML format from the spec.
@@ -18,7 +29,6 @@ export const TestCaseSchema = z.object({
18
29
  */
19
30
  export const SuiteSchema = z.object({
20
31
  suite: z.string().min(1),
21
- base_url: z.url().optional(),
22
32
  viewport: ViewportSchema.optional(),
23
33
  model: z
24
34
  .union([
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/parser/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACxC,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC;SACN,KAAK,CAAC;QACN,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;SACD,QAAQ,EAAE;IACZ,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3E,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACrC,CAAC,CAAA"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/parser/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAA;AAEF,uEAAuE;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAA;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;IACjC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjB,qBAAqB;CACrB,CAAC,CAAA;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACjC,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC;SACN,KAAK,CAAC;QACN,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KAClE,CAAC;SACD,QAAQ,EAAE;IACZ,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3E,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACrC,CAAC,CAAA"}
@@ -20,7 +20,12 @@ export interface ParsedLine {
20
20
  */
21
21
  export declare function parseA11ySnapshot(raw: string): A11yNode[];
22
22
  /**
23
- * Format the a11y tree as a readable string with refs, for display and LLM consumption.
23
+ * Format the a11y tree as a readable string with refs and enrichment data,
24
+ * for display and LLM consumption.
25
+ *
26
+ * Enrichment sub-lines (text, placeholder, value) appear indented below
27
+ * each node, giving the LLM a single correlated view of each element's
28
+ * identity and content.
24
29
  */
25
30
  export declare function formatA11yTree(nodes: A11yNode[], indent?: number): string;
26
31
  //# sourceMappingURL=a11y-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-parser.d.ts","sourceRoot":"","sources":["../../src/pilot/a11y-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAsBpD,2DAA2D;AAC3D,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AA0CD,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACX;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuEzD;AA4DD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,SAAI,GAAG,MAAM,CAkBpE"}
1
+ {"version":3,"file":"a11y-parser.d.ts","sourceRoot":"","sources":["../../src/pilot/a11y-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAsBpD,2DAA2D;AAC3D,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AA0CD,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACX;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuEzD;AA4DD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,SAAI,GAAG,MAAM,CAgCpE"}