opencastle 0.27.2 → 0.28.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 (71) hide show
  1. package/bin/cli.mjs +13 -5
  2. package/dist/cli/convoy/engine.js +2 -2
  3. package/dist/cli/convoy/engine.js.map +1 -1
  4. package/dist/cli/convoy/engine.test.js +1 -1
  5. package/dist/cli/convoy/engine.test.js.map +1 -1
  6. package/dist/cli/convoy/issues.js +3 -3
  7. package/dist/cli/convoy/issues.js.map +1 -1
  8. package/dist/cli/convoy/issues.test.js +4 -3
  9. package/dist/cli/convoy/issues.test.js.map +1 -1
  10. package/dist/cli/pipeline.d.ts +3 -0
  11. package/dist/cli/pipeline.d.ts.map +1 -0
  12. package/dist/cli/pipeline.js +305 -0
  13. package/dist/cli/pipeline.js.map +1 -0
  14. package/dist/cli/plan.d.ts +37 -0
  15. package/dist/cli/plan.d.ts.map +1 -1
  16. package/dist/cli/plan.js +321 -161
  17. package/dist/cli/plan.js.map +1 -1
  18. package/dist/cli/run.d.ts.map +1 -1
  19. package/dist/cli/run.js +37 -1
  20. package/dist/cli/run.js.map +1 -1
  21. package/dist/cli/validate.d.ts +3 -0
  22. package/dist/cli/validate.d.ts.map +1 -0
  23. package/dist/cli/validate.js +60 -0
  24. package/dist/cli/validate.js.map +1 -0
  25. package/package.json +5 -3
  26. package/src/cli/convoy/engine.test.ts +1 -1
  27. package/src/cli/convoy/engine.ts +2 -2
  28. package/src/cli/convoy/issues.test.ts +3 -2
  29. package/src/cli/convoy/issues.ts +3 -3
  30. package/src/cli/pipeline.ts +343 -0
  31. package/src/cli/plan.ts +357 -153
  32. package/src/cli/run.ts +37 -1
  33. package/src/cli/validate.ts +65 -0
  34. package/src/dashboard/dist/data/convoy-list.json +65 -1
  35. package/src/dashboard/dist/data/convoys/demo-api-v2.json +177 -0
  36. package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +239 -0
  37. package/src/dashboard/dist/data/convoys/demo-convoy-1.json +111 -0
  38. package/src/dashboard/dist/data/convoys/demo-convoy-2.json +72 -0
  39. package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +328 -0
  40. package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +187 -0
  41. package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +153 -0
  42. package/src/dashboard/dist/data/convoys/demo-docs-update.json +154 -0
  43. package/src/dashboard/dist/data/convoys/demo-perf-opt.json +227 -0
  44. package/src/dashboard/dist/data/events.ndjson +115 -0
  45. package/src/dashboard/dist/data/overall-stats.json +67 -12
  46. package/src/dashboard/dist/data/pipelines.ndjson +5285 -0
  47. package/src/dashboard/dist/index.html +39 -16
  48. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  49. package/src/dashboard/public/data/convoy-list.json +65 -1
  50. package/src/dashboard/public/data/convoys/demo-api-v2.json +177 -0
  51. package/src/dashboard/public/data/convoys/demo-auth-revamp.json +239 -0
  52. package/src/dashboard/public/data/convoys/demo-convoy-1.json +111 -0
  53. package/src/dashboard/public/data/convoys/demo-convoy-2.json +72 -0
  54. package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +328 -0
  55. package/src/dashboard/public/data/convoys/demo-data-pipeline.json +187 -0
  56. package/src/dashboard/public/data/convoys/demo-deploy-ci.json +153 -0
  57. package/src/dashboard/public/data/convoys/demo-docs-update.json +154 -0
  58. package/src/dashboard/public/data/convoys/demo-perf-opt.json +227 -0
  59. package/src/dashboard/public/data/events.ndjson +115 -0
  60. package/src/dashboard/public/data/overall-stats.json +67 -12
  61. package/src/dashboard/public/data/pipelines.ndjson +5285 -0
  62. package/src/dashboard/scripts/etl.ts +38 -4
  63. package/src/dashboard/scripts/generate-demo-db.test.ts +30 -0
  64. package/src/dashboard/scripts/generate-demo-db.ts +507 -0
  65. package/src/dashboard/scripts/verify-demo-data.sh +51 -0
  66. package/src/dashboard/src/pages/index.astro +46 -23
  67. package/src/orchestrator/prompts/fix-convoy.prompt.md +79 -0
  68. package/src/orchestrator/prompts/generate-convoy.prompt.md +53 -58
  69. package/src/orchestrator/prompts/generate-prd.prompt.md +120 -0
  70. package/src/orchestrator/prompts/validate-convoy.prompt.md +89 -0
  71. package/src/orchestrator/prompts/validate-prd.prompt.md +83 -0
@@ -1,4 +1,4 @@
1
- import { mkdtempSync, rmSync, realpathSync, writeFileSync, readFileSync } from 'node:fs';
1
+ import { mkdtempSync, rmSync, realpathSync, writeFileSync, mkdirSync, readFileSync } from 'node:fs';
2
2
  import { tmpdir } from 'node:os';
3
3
  import { join } from 'node:path';
4
4
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
@@ -6,12 +6,13 @@ import { injectDiscoveredIssuesInstruction, checkDiscoveredIssues, consolidateIs
6
6
  vi.mock('./gates.js', () => ({
7
7
  scanForSecrets: vi.fn(() => ({ clean: true, findings: [] })),
8
8
  }));
9
- const DISCOVERED_REL = 'DISCOVERED-ISSUES.md';
10
- const KNOWN_REL = 'KNOWN-ISSUES.md';
9
+ const DISCOVERED_REL = '.opencastle/DISCOVERED-ISSUES.md';
10
+ const KNOWN_REL = '.opencastle/KNOWN-ISSUES.md';
11
11
  const DISCOVERED_HEADER = '# Discovered Issues\n\n';
12
12
  const KNOWN_HEADER = '# Known Issues\n\n';
13
13
  function makeBase() {
14
14
  const dir = realpathSync(mkdtempSync(join(tmpdir(), 'issues-test-')));
15
+ mkdirSync(join(dir, '.opencastle'), { recursive: true });
15
16
  return dir;
16
17
  }
17
18
  function makeEvents() {
@@ -1 +1 @@
1
- {"version":3,"file":"issues.test.js","sourceRoot":"","sources":["../../../src/cli/convoy/issues.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issues.test.js","sourceRoot":"","sources":["../../../src/cli/convoy/issues.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliContext } from './types.js';
2
+ export default function pipeline({ args, pkgRoot }: CliContext): Promise<void>;
3
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/cli/pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA2G5C,wBAA8B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0NnF"}
@@ -0,0 +1,305 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { c } from './prompt.js';
5
+ import { runPromptStep } from './plan.js';
6
+ const HELP = `
7
+ opencastle pipeline [options]
8
+
9
+ Run the full convoy generation pipeline from a feature prompt:
10
+
11
+ Step 1 — Generate PRD (generate-prd)
12
+ Step 2 — Validate PRD (validate-prd)
13
+ Step 3 — Generate convoy spec (generate-convoy, using PRD as BDO)
14
+ Step 4 — Validate convoy spec (validate-convoy)
15
+ Step 5 — Fix convoy spec (fix-convoy, up to 2 retries if invalid)
16
+
17
+ Options:
18
+ --text, -t <text> Feature prompt text (required, unless --prd is set)
19
+ --prd <path> Skip step 1 — use an existing PRD file
20
+ --output-prd <path> Override path for the generated PRD
21
+ --output-spec <path> Override path for the generated convoy spec
22
+ --adapter, -a <name> Override agent runtime adapter
23
+ --verbose Show full agent output for each step
24
+ --dry-run Generate and print the PRD prompt only, then stop
25
+ --skip-validation Skip steps 2 and 4 (PRD and convoy validation)
26
+ --help, -h Show this help
27
+ `;
28
+ function parseArgs(args) {
29
+ const opts = {
30
+ text: null,
31
+ prd: null,
32
+ outputPrd: null,
33
+ outputSpec: null,
34
+ adapter: null,
35
+ verbose: false,
36
+ dryRun: false,
37
+ skipValidation: false,
38
+ help: false,
39
+ };
40
+ for (let i = 0; i < args.length; i++) {
41
+ const arg = args[i];
42
+ switch (arg) {
43
+ case '--help':
44
+ case '-h':
45
+ opts.help = true;
46
+ break;
47
+ case '--text':
48
+ case '-t':
49
+ if (i + 1 >= args.length) {
50
+ console.error(' ✗ --text requires a value');
51
+ process.exit(1);
52
+ }
53
+ opts.text = args[++i];
54
+ break;
55
+ case '--prd':
56
+ if (i + 1 >= args.length) {
57
+ console.error(' ✗ --prd requires a path');
58
+ process.exit(1);
59
+ }
60
+ opts.prd = args[++i];
61
+ break;
62
+ case '--output-prd':
63
+ if (i + 1 >= args.length) {
64
+ console.error(' ✗ --output-prd requires a path');
65
+ process.exit(1);
66
+ }
67
+ opts.outputPrd = args[++i];
68
+ break;
69
+ case '--output-spec':
70
+ if (i + 1 >= args.length) {
71
+ console.error(' ✗ --output-spec requires a path');
72
+ process.exit(1);
73
+ }
74
+ opts.outputSpec = args[++i];
75
+ break;
76
+ case '--adapter':
77
+ case '-a':
78
+ if (i + 1 >= args.length) {
79
+ console.error(' ✗ --adapter requires a name');
80
+ process.exit(1);
81
+ }
82
+ opts.adapter = args[++i];
83
+ break;
84
+ case '--verbose':
85
+ opts.verbose = true;
86
+ break;
87
+ case '--dry-run':
88
+ case '--dryRun':
89
+ opts.dryRun = true;
90
+ break;
91
+ case '--skip-validation':
92
+ opts.skipValidation = true;
93
+ break;
94
+ default:
95
+ console.error(` ✗ Unknown option: ${arg}`);
96
+ console.log(HELP);
97
+ process.exit(1);
98
+ }
99
+ }
100
+ return opts;
101
+ }
102
+ function relPath(abs) {
103
+ return abs.startsWith(process.cwd()) ? abs.slice(process.cwd().length + 1) : abs;
104
+ }
105
+ function stepLabel(n, total, name) {
106
+ return c.bold(c.cyan(` [${n}/${total}] ${name}`));
107
+ }
108
+ export default async function pipeline({ args, pkgRoot }) {
109
+ const opts = parseArgs(args);
110
+ if (opts.help) {
111
+ console.log(HELP);
112
+ return;
113
+ }
114
+ if (!opts.text && !opts.prd) {
115
+ console.error(` ✗ Either --text or --prd is required.`);
116
+ console.log(HELP);
117
+ process.exit(1);
118
+ }
119
+ if (opts.text && opts.prd) {
120
+ console.error(` ✗ --text and --prd are mutually exclusive.`);
121
+ process.exit(1);
122
+ }
123
+ if (opts.prd) {
124
+ const resolvedPrd = resolve(process.cwd(), opts.prd);
125
+ if (!existsSync(resolvedPrd)) {
126
+ console.error(` ✗ PRD file not found: ${opts.prd}`);
127
+ process.exit(1);
128
+ }
129
+ }
130
+ const totalSteps = opts.skipValidation ? 3 : 5;
131
+ const sharedOpts = {
132
+ adapterName: opts.adapter ?? undefined,
133
+ verbose: opts.verbose,
134
+ pkgRoot,
135
+ };
136
+ console.log(c.bold('\n opencastle pipeline\n'));
137
+ // ── Step 1: Generate PRD ──────────────────────────────────────────────────
138
+ let prdPath;
139
+ if (opts.prd) {
140
+ prdPath = resolve(process.cwd(), opts.prd);
141
+ console.log(c.dim(` [−] Skipping PRD generation — using: ${relPath(prdPath)}`));
142
+ }
143
+ else {
144
+ console.log(stepLabel(1, totalSteps, 'Generating PRD…'));
145
+ let result;
146
+ try {
147
+ result = await runPromptStep({
148
+ ...sharedOpts,
149
+ template: 'generate-prd',
150
+ goalText: opts.text,
151
+ outputPath: opts.outputPrd ? resolve(process.cwd(), opts.outputPrd) : undefined,
152
+ dryRun: opts.dryRun,
153
+ });
154
+ }
155
+ catch (err) {
156
+ console.error(`\n ✗ Step 1 failed: ${err instanceof Error ? err.message : String(err)}`);
157
+ process.exit(1);
158
+ }
159
+ if (opts.dryRun) {
160
+ console.log(c.dim('\n [dry-run] Stopping after step 1. Remove --dry-run to run the full pipeline.'));
161
+ return;
162
+ }
163
+ prdPath = result.outputPath;
164
+ console.log(c.green(` ✓ PRD written to ${relPath(prdPath)}\n`));
165
+ }
166
+ // ── Step 2: Validate PRD ──────────────────────────────────────────────────
167
+ if (!opts.skipValidation) {
168
+ console.log(stepLabel(2, totalSteps, 'Validating PRD…'));
169
+ const prdContent = await readFile(prdPath, 'utf8');
170
+ let result;
171
+ try {
172
+ result = await runPromptStep({
173
+ ...sharedOpts,
174
+ template: 'validate-prd',
175
+ goalText: prdContent,
176
+ });
177
+ }
178
+ catch (err) {
179
+ console.error(`\n ✗ Step 2 failed: ${err instanceof Error ? err.message : String(err)}`);
180
+ process.exit(1);
181
+ }
182
+ if (!result.isValid) {
183
+ console.log(c.red(` ✗ PRD validation failed.\n`));
184
+ console.log(result.errors ?? result.rawOutput);
185
+ console.log(c.dim(`\n Fix the PRD at ${relPath(prdPath)} and re-run with:\n`) +
186
+ ` opencastle pipeline --prd ${relPath(prdPath)}${opts.adapter ? ` --adapter ${opts.adapter}` : ''}\n`);
187
+ process.exit(1);
188
+ }
189
+ console.log(c.green(` ✓ PRD is valid\n`));
190
+ }
191
+ // ── Step 3: Generate convoy spec ──────────────────────────────────────────
192
+ const genStep = opts.skipValidation ? 2 : 3;
193
+ console.log(stepLabel(genStep, totalSteps, 'Generating convoy spec…'));
194
+ let specPath;
195
+ try {
196
+ const result = await runPromptStep({
197
+ ...sharedOpts,
198
+ template: 'generate-convoy',
199
+ filePath: prdPath,
200
+ outputPath: opts.outputSpec ? resolve(process.cwd(), opts.outputSpec) : undefined,
201
+ });
202
+ specPath = result.outputPath;
203
+ }
204
+ catch (err) {
205
+ console.error(`\n ✗ Step ${genStep} failed: ${err instanceof Error ? err.message : String(err)}`);
206
+ process.exit(1);
207
+ }
208
+ console.log(c.green(` ✓ Convoy spec written to ${relPath(specPath)}\n`));
209
+ if (opts.skipValidation) {
210
+ printFinalSummary(prdPath, specPath);
211
+ return;
212
+ }
213
+ // ── Step 4: Validate convoy spec ──────────────────────────────────────────
214
+ console.log(stepLabel(4, totalSteps, 'Validating convoy spec…'));
215
+ const specContent = await readFile(specPath, 'utf8');
216
+ let validationErrors;
217
+ {
218
+ let result;
219
+ try {
220
+ result = await runPromptStep({
221
+ ...sharedOpts,
222
+ template: 'validate-convoy',
223
+ goalText: specContent,
224
+ });
225
+ }
226
+ catch (err) {
227
+ console.error(`\n ✗ Step 4 failed: ${err instanceof Error ? err.message : String(err)}`);
228
+ process.exit(1);
229
+ }
230
+ if (result.isValid) {
231
+ console.log(c.green(` ✓ Convoy spec is valid\n`));
232
+ printFinalSummary(prdPath, specPath);
233
+ return;
234
+ }
235
+ validationErrors = result.errors ?? result.rawOutput;
236
+ console.log(c.yellow(` ⚠ Spec has validation issues — attempting auto-fix…\n`));
237
+ console.log(c.dim(validationErrors));
238
+ console.log();
239
+ }
240
+ // ── Step 5: Fix convoy spec (up to 2 retries) ─────────────────────────────
241
+ const MAX_FIX_RETRIES = 2;
242
+ let fixedSpecContent = specContent;
243
+ for (let attempt = 1; attempt <= MAX_FIX_RETRIES; attempt++) {
244
+ const label = `Fix attempt ${attempt}/${MAX_FIX_RETRIES}…`;
245
+ console.log(stepLabel(5, totalSteps, label));
246
+ let fixResult;
247
+ try {
248
+ fixResult = await runPromptStep({
249
+ ...sharedOpts,
250
+ template: 'fix-convoy',
251
+ goalText: fixedSpecContent,
252
+ contextText: validationErrors,
253
+ outputPath: specPath, // overwrite in place
254
+ });
255
+ }
256
+ catch (err) {
257
+ console.error(`\n ✗ Step 5 (attempt ${attempt}) failed: ${err instanceof Error ? err.message : String(err)}`);
258
+ process.exit(1);
259
+ }
260
+ console.log(c.dim(` Re-validating after fix…`));
261
+ // Read the newly written spec
262
+ fixedSpecContent = await readFile(specPath, 'utf8');
263
+ let revalidation;
264
+ try {
265
+ revalidation = await runPromptStep({
266
+ ...sharedOpts,
267
+ template: 'validate-convoy',
268
+ goalText: fixedSpecContent,
269
+ });
270
+ }
271
+ catch (err) {
272
+ console.error(`\n ✗ Re-validation failed: ${err instanceof Error ? err.message : String(err)}`);
273
+ process.exit(1);
274
+ }
275
+ if (revalidation.isValid) {
276
+ console.log(c.green(` ✓ Spec fixed and validated\n`));
277
+ printFinalSummary(prdPath, specPath);
278
+ return;
279
+ }
280
+ validationErrors = revalidation.errors ?? revalidation.rawOutput;
281
+ if (attempt < MAX_FIX_RETRIES) {
282
+ console.log(c.yellow(` ⚠ Still has issues after fix attempt ${attempt} — retrying…\n`));
283
+ console.log(c.dim(validationErrors));
284
+ console.log();
285
+ }
286
+ }
287
+ // All retries exhausted
288
+ console.log(c.red(`\n ✗ Could not auto-fix the convoy spec after ${MAX_FIX_RETRIES} attempts.\n`));
289
+ console.log(` Remaining issues:\n`);
290
+ console.log(validationErrors);
291
+ console.log(c.dim(`\n The spec has been saved to ${relPath(specPath)} with the best available fixes.\n`) +
292
+ c.dim(` Review the remaining issues above and edit the file manually, then validate with:\n`) +
293
+ ` opencastle plan --file ${relPath(specPath)} --template validate-convoy\n`);
294
+ process.exit(1);
295
+ }
296
+ function printFinalSummary(prdPath, specPath) {
297
+ const prd = relPath(prdPath);
298
+ const spec = relPath(specPath);
299
+ console.log(c.bold(c.green(' Pipeline complete!\n')));
300
+ console.log(` PRD: ${prd}`);
301
+ console.log(` Convoy spec: ${spec}\n`);
302
+ console.log(` ${c.dim('Preview:')} npx opencastle run -f ${spec} --dry-run\n` +
303
+ ` ${c.dim('Execute:')} npx opencastle run -f ${spec}\n`);
304
+ }
305
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/cli/pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,40 @@
1
1
  import type { CliContext } from './types.js';
2
+ export interface PromptStepOptions {
3
+ /** Template name without extension. Default: 'generate-convoy' */
4
+ template?: string;
5
+ /** Absolute file path whose content fills {{goal}} */
6
+ filePath?: string;
7
+ /** Inline text that fills {{goal}} — alternative to filePath */
8
+ goalText?: string;
9
+ /** File path whose content fills {{context}} */
10
+ contextPath?: string;
11
+ /** Inline text that fills {{context}} — alternative to contextPath */
12
+ contextText?: string;
13
+ /** Explicit output path override */
14
+ outputPath?: string;
15
+ /** Adapter name override */
16
+ adapterName?: string;
17
+ verbose?: boolean;
18
+ dryRun?: boolean;
19
+ /** Absolute path to the opencastle package root (for locating prompt templates) */
20
+ pkgRoot: string;
21
+ }
22
+ export interface PromptStepResult {
23
+ /** Absolute path the output was written to. null for validation output or dry-run */
24
+ outputPath: string | null;
25
+ /** Raw text returned by the AI adapter (or assembled prompt on dry-run) */
26
+ rawOutput: string;
27
+ /** How the output was interpreted */
28
+ outputType: 'convoy-spec' | 'prd' | 'validation';
29
+ /** Set when outputType === 'validation' */
30
+ isValid?: boolean;
31
+ /** Set when outputType === 'validation' and isValid === false */
32
+ errors?: string;
33
+ }
34
+ /**
35
+ * Execute a single prompt template step via an AI adapter.
36
+ * Used by the pipeline command to chain steps programmatically.
37
+ */
38
+ export declare function runPromptStep(opts: PromptStepOptions): Promise<PromptStepResult>;
2
39
  export default function plan({ args, pkgRoot }: CliContext): Promise<void>;
3
40
  //# sourceMappingURL=plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/cli/plan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,YAAY,CAAA;AAmKlD,wBAA8B,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiJ/E"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/cli/plan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,YAAY,CAAA;AA0ClD,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,UAAU,EAAE,aAAa,GAAG,KAAK,GAAG,YAAY,CAAA;IAChD,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAgJD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8HtF;AA4ED,wBAA8B,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwF/E"}