@blockspool/cli 0.4.0 → 0.4.1

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 (149) hide show
  1. package/package.json +1 -1
  2. package/dist/bin/blockspool.d.ts +0 -16
  3. package/dist/bin/blockspool.d.ts.map +0 -1
  4. package/dist/bin/blockspool.js +0 -45
  5. package/dist/bin/blockspool.js.map +0 -1
  6. package/dist/commands/solo-auto.d.ts +0 -6
  7. package/dist/commands/solo-auto.d.ts.map +0 -1
  8. package/dist/commands/solo-auto.js +0 -418
  9. package/dist/commands/solo-auto.js.map +0 -1
  10. package/dist/commands/solo-exec.d.ts +0 -6
  11. package/dist/commands/solo-exec.d.ts.map +0 -1
  12. package/dist/commands/solo-exec.js +0 -656
  13. package/dist/commands/solo-exec.js.map +0 -1
  14. package/dist/commands/solo-inspect.d.ts +0 -6
  15. package/dist/commands/solo-inspect.d.ts.map +0 -1
  16. package/dist/commands/solo-inspect.js +0 -690
  17. package/dist/commands/solo-inspect.js.map +0 -1
  18. package/dist/commands/solo-lifecycle.d.ts +0 -6
  19. package/dist/commands/solo-lifecycle.d.ts.map +0 -1
  20. package/dist/commands/solo-lifecycle.js +0 -188
  21. package/dist/commands/solo-lifecycle.js.map +0 -1
  22. package/dist/commands/solo-nudge.d.ts +0 -6
  23. package/dist/commands/solo-nudge.d.ts.map +0 -1
  24. package/dist/commands/solo-nudge.js +0 -49
  25. package/dist/commands/solo-nudge.js.map +0 -1
  26. package/dist/commands/solo-qa.d.ts +0 -6
  27. package/dist/commands/solo-qa.d.ts.map +0 -1
  28. package/dist/commands/solo-qa.js +0 -254
  29. package/dist/commands/solo-qa.js.map +0 -1
  30. package/dist/commands/solo.d.ts +0 -11
  31. package/dist/commands/solo.d.ts.map +0 -1
  32. package/dist/commands/solo.js +0 -43
  33. package/dist/commands/solo.js.map +0 -1
  34. package/dist/index.d.ts +0 -18
  35. package/dist/index.d.ts.map +0 -1
  36. package/dist/index.js +0 -18
  37. package/dist/index.js.map +0 -1
  38. package/dist/lib/artifacts.d.ts +0 -136
  39. package/dist/lib/artifacts.d.ts.map +0 -1
  40. package/dist/lib/artifacts.js +0 -146
  41. package/dist/lib/artifacts.js.map +0 -1
  42. package/dist/lib/doctor.d.ts +0 -45
  43. package/dist/lib/doctor.d.ts.map +0 -1
  44. package/dist/lib/doctor.js +0 -383
  45. package/dist/lib/doctor.js.map +0 -1
  46. package/dist/lib/exec.d.ts +0 -24
  47. package/dist/lib/exec.d.ts.map +0 -1
  48. package/dist/lib/exec.js +0 -295
  49. package/dist/lib/exec.js.map +0 -1
  50. package/dist/lib/formulas.d.ts +0 -78
  51. package/dist/lib/formulas.d.ts.map +0 -1
  52. package/dist/lib/formulas.js +0 -295
  53. package/dist/lib/formulas.js.map +0 -1
  54. package/dist/lib/git.d.ts +0 -9
  55. package/dist/lib/git.d.ts.map +0 -1
  56. package/dist/lib/git.js +0 -60
  57. package/dist/lib/git.js.map +0 -1
  58. package/dist/lib/guidelines.d.ts +0 -43
  59. package/dist/lib/guidelines.d.ts.map +0 -1
  60. package/dist/lib/guidelines.js +0 -195
  61. package/dist/lib/guidelines.js.map +0 -1
  62. package/dist/lib/logger.d.ts +0 -17
  63. package/dist/lib/logger.d.ts.map +0 -1
  64. package/dist/lib/logger.js +0 -42
  65. package/dist/lib/logger.js.map +0 -1
  66. package/dist/lib/retention.d.ts +0 -62
  67. package/dist/lib/retention.d.ts.map +0 -1
  68. package/dist/lib/retention.js +0 -285
  69. package/dist/lib/retention.js.map +0 -1
  70. package/dist/lib/run-history.d.ts +0 -52
  71. package/dist/lib/run-history.d.ts.map +0 -1
  72. package/dist/lib/run-history.js +0 -116
  73. package/dist/lib/run-history.js.map +0 -1
  74. package/dist/lib/run-state.d.ts +0 -58
  75. package/dist/lib/run-state.d.ts.map +0 -1
  76. package/dist/lib/run-state.js +0 -119
  77. package/dist/lib/run-state.js.map +0 -1
  78. package/dist/lib/scope.d.ts +0 -95
  79. package/dist/lib/scope.d.ts.map +0 -1
  80. package/dist/lib/scope.js +0 -291
  81. package/dist/lib/scope.js.map +0 -1
  82. package/dist/lib/selection.d.ts +0 -35
  83. package/dist/lib/selection.d.ts.map +0 -1
  84. package/dist/lib/selection.js +0 -110
  85. package/dist/lib/selection.js.map +0 -1
  86. package/dist/lib/solo-auto.d.ts +0 -87
  87. package/dist/lib/solo-auto.d.ts.map +0 -1
  88. package/dist/lib/solo-auto.js +0 -1230
  89. package/dist/lib/solo-auto.js.map +0 -1
  90. package/dist/lib/solo-ci.d.ts +0 -84
  91. package/dist/lib/solo-ci.d.ts.map +0 -1
  92. package/dist/lib/solo-ci.js +0 -300
  93. package/dist/lib/solo-ci.js.map +0 -1
  94. package/dist/lib/solo-config.d.ts +0 -155
  95. package/dist/lib/solo-config.d.ts.map +0 -1
  96. package/dist/lib/solo-config.js +0 -236
  97. package/dist/lib/solo-config.js.map +0 -1
  98. package/dist/lib/solo-git.d.ts +0 -44
  99. package/dist/lib/solo-git.d.ts.map +0 -1
  100. package/dist/lib/solo-git.js +0 -174
  101. package/dist/lib/solo-git.js.map +0 -1
  102. package/dist/lib/solo-hints.d.ts +0 -32
  103. package/dist/lib/solo-hints.d.ts.map +0 -1
  104. package/dist/lib/solo-hints.js +0 -98
  105. package/dist/lib/solo-hints.js.map +0 -1
  106. package/dist/lib/solo-remote.d.ts +0 -14
  107. package/dist/lib/solo-remote.d.ts.map +0 -1
  108. package/dist/lib/solo-remote.js +0 -48
  109. package/dist/lib/solo-remote.js.map +0 -1
  110. package/dist/lib/solo-stdin.d.ts +0 -13
  111. package/dist/lib/solo-stdin.d.ts.map +0 -1
  112. package/dist/lib/solo-stdin.js +0 -33
  113. package/dist/lib/solo-stdin.js.map +0 -1
  114. package/dist/lib/solo-ticket.d.ts +0 -213
  115. package/dist/lib/solo-ticket.d.ts.map +0 -1
  116. package/dist/lib/solo-ticket.js +0 -850
  117. package/dist/lib/solo-ticket.js.map +0 -1
  118. package/dist/lib/solo-utils.d.ts +0 -133
  119. package/dist/lib/solo-utils.d.ts.map +0 -1
  120. package/dist/lib/solo-utils.js +0 -300
  121. package/dist/lib/solo-utils.js.map +0 -1
  122. package/dist/lib/spindle.d.ts +0 -144
  123. package/dist/lib/spindle.d.ts.map +0 -1
  124. package/dist/lib/spindle.js +0 -388
  125. package/dist/lib/spindle.js.map +0 -1
  126. package/dist/tui/app.d.ts +0 -17
  127. package/dist/tui/app.d.ts.map +0 -1
  128. package/dist/tui/app.js +0 -139
  129. package/dist/tui/app.js.map +0 -1
  130. package/dist/tui/index.d.ts +0 -8
  131. package/dist/tui/index.d.ts.map +0 -1
  132. package/dist/tui/index.js +0 -7
  133. package/dist/tui/index.js.map +0 -1
  134. package/dist/tui/poller.d.ts +0 -42
  135. package/dist/tui/poller.d.ts.map +0 -1
  136. package/dist/tui/poller.js +0 -62
  137. package/dist/tui/poller.js.map +0 -1
  138. package/dist/tui/screens/overview.d.ts +0 -9
  139. package/dist/tui/screens/overview.d.ts.map +0 -1
  140. package/dist/tui/screens/overview.js +0 -189
  141. package/dist/tui/screens/overview.js.map +0 -1
  142. package/dist/tui/state.d.ts +0 -93
  143. package/dist/tui/state.d.ts.map +0 -1
  144. package/dist/tui/state.js +0 -169
  145. package/dist/tui/state.js.map +0 -1
  146. package/dist/tui/types.d.ts +0 -18
  147. package/dist/tui/types.d.ts.map +0 -1
  148. package/dist/tui/types.js +0 -5
  149. package/dist/tui/types.js.map +0 -1
package/dist/lib/exec.js DELETED
@@ -1,295 +0,0 @@
1
- /**
2
- * Node.js ExecRunner implementation
3
- *
4
- * Spawns commands, captures output to artifact files,
5
- * handles timeout/cancellation, and returns structured results.
6
- */
7
- import { spawn } from 'node:child_process';
8
- import * as fs from 'node:fs';
9
- import * as path from 'node:path';
10
- /**
11
- * Configuration constants for ExecRunner
12
- */
13
- /** Maximum bytes to write per output stream (stdout/stderr). Prevents runaway disk usage. */
14
- const DEFAULT_MAX_LOG_BYTES = 200_000; // 200KB per stream
15
- /** Bytes to retain in memory for the tail buffer, used for fast UI display. */
16
- const DEFAULT_TAIL_BYTES = 16_384; // 16KB tail for fast UI
17
- /** Grace period in ms between SIGTERM and SIGKILL when killing a child process. */
18
- const DEFAULT_KILL_GRACE_MS = 1_500;
19
- /** Maximum length for sanitized file name segments. Prevents overly long artifact paths. */
20
- const MAX_FILE_SEGMENT_LENGTH = 64;
21
- function isProbablyAbsolute(p) {
22
- return path.isAbsolute(p);
23
- }
24
- function sanitizeFileSegment(s) {
25
- return s
26
- .trim()
27
- .toLowerCase()
28
- .replace(/[^a-z0-9._-]+/g, '-')
29
- .replace(/-+/g, '-')
30
- .replace(/^-+|-+$/g, '')
31
- .slice(0, MAX_FILE_SEGMENT_LENGTH) || 'step';
32
- }
33
- function pad2(n) {
34
- return n < 10 ? `0${n}` : `${n}`;
35
- }
36
- function appendTail(current, chunk, tailBytes) {
37
- if (tailBytes <= 0)
38
- return Buffer.alloc(0);
39
- if (chunk.length >= tailBytes) {
40
- return Buffer.from(chunk.subarray(chunk.length - tailBytes));
41
- }
42
- if (current.length === 0)
43
- return Buffer.from(chunk);
44
- const combined = Buffer.concat([current, chunk]);
45
- if (combined.length <= tailBytes)
46
- return combined;
47
- return Buffer.from(combined.subarray(combined.length - tailBytes));
48
- }
49
- async function ensureDir(absDir) {
50
- await fs.promises.mkdir(absDir, { recursive: true });
51
- }
52
- function writeCapped(stream, chunk, state, maxBytes) {
53
- if (maxBytes <= 0) {
54
- state.truncated = true;
55
- return;
56
- }
57
- if (state.truncated)
58
- return;
59
- const remaining = maxBytes - state.bytesWritten;
60
- if (remaining <= 0) {
61
- state.truncated = true;
62
- return;
63
- }
64
- if (chunk.length <= remaining) {
65
- stream.write(chunk);
66
- state.bytesWritten += chunk.length;
67
- return;
68
- }
69
- // partial write, then truncate
70
- stream.write(chunk.subarray(0, remaining));
71
- state.bytesWritten += remaining;
72
- state.truncated = true;
73
- }
74
- function waitForStreamClose(stream) {
75
- return new Promise((resolve, reject) => {
76
- stream.once('close', () => resolve());
77
- stream.once('error', (err) => reject(err));
78
- });
79
- }
80
- export class NodeExecRunner {
81
- defaultMaxLogBytes;
82
- defaultTailBytes;
83
- killGraceMs;
84
- constructor(opts = {}) {
85
- this.defaultMaxLogBytes = opts.defaultMaxLogBytes ?? DEFAULT_MAX_LOG_BYTES;
86
- this.defaultTailBytes = opts.defaultTailBytes ?? DEFAULT_TAIL_BYTES;
87
- this.killGraceMs = opts.killGraceMs ?? DEFAULT_KILL_GRACE_MS;
88
- }
89
- async run(spec) {
90
- const startedAtMs = Date.now();
91
- const maxLogBytes = spec.maxLogBytes ?? this.defaultMaxLogBytes;
92
- const tailBytes = spec.tailBytes ?? this.defaultTailBytes;
93
- const repoRoot = spec.repoRoot;
94
- const artifactsDirAbs = isProbablyAbsolute(spec.artifactsDir)
95
- ? spec.artifactsDir
96
- : path.join(repoRoot, spec.artifactsDir);
97
- // Layout: .blockspool/artifacts/<runId>/attempt-<n>/
98
- const attemptDirAbs = path.join(artifactsDirAbs, spec.runId, `attempt-${spec.attempt}`);
99
- await ensureDir(attemptDirAbs);
100
- const safeName = sanitizeFileSegment(spec.stepName);
101
- const base = `${pad2(spec.ordinal)}-${safeName}`;
102
- const stdoutAbs = path.join(attemptDirAbs, `${base}.stdout.log`);
103
- const stderrAbs = path.join(attemptDirAbs, `${base}.stderr.log`);
104
- const stdoutPathDb = isProbablyAbsolute(spec.artifactsDir)
105
- ? stdoutAbs
106
- : path.join(spec.artifactsDir, spec.runId, `attempt-${spec.attempt}`, `${base}.stdout.log`);
107
- const stderrPathDb = isProbablyAbsolute(spec.artifactsDir)
108
- ? stderrAbs
109
- : path.join(spec.artifactsDir, spec.runId, `attempt-${spec.attempt}`, `${base}.stderr.log`);
110
- const stdoutStream = fs.createWriteStream(stdoutAbs, { flags: 'w' });
111
- const stderrStream = fs.createWriteStream(stderrAbs, { flags: 'w' });
112
- let stdoutTail = Buffer.alloc(0);
113
- let stderrTail = Buffer.alloc(0);
114
- const stdoutState = { bytesWritten: 0, truncated: false };
115
- const stderrState = { bytesWritten: 0, truncated: false };
116
- let timedOut = false;
117
- let canceled = false;
118
- let errorMessage;
119
- let exitCode = null;
120
- let signal = null;
121
- let pid = null;
122
- let timeoutHandle;
123
- const endAndWaitStreams = async () => {
124
- try {
125
- stdoutStream.end();
126
- }
127
- catch { /* ignore */ }
128
- try {
129
- stderrStream.end();
130
- }
131
- catch { /* ignore */ }
132
- await Promise.allSettled([
133
- waitForStreamClose(stdoutStream),
134
- waitForStreamClose(stderrStream),
135
- ]);
136
- };
137
- const makeOutput = (stream) => {
138
- const isStdout = stream === 'stdout';
139
- const absPath = isStdout ? stdoutAbs : stderrAbs;
140
- const pathDb = isStdout ? stdoutPathDb : stderrPathDb;
141
- const bytes = isStdout ? stdoutState.bytesWritten : stderrState.bytesWritten;
142
- const truncated = isStdout ? stdoutState.truncated : stderrState.truncated;
143
- const tailBuf = isStdout ? stdoutTail : stderrTail;
144
- return {
145
- absPath,
146
- path: pathDb,
147
- bytes,
148
- truncated,
149
- tail: tailBuf.toString('utf8'),
150
- };
151
- };
152
- const finalize = async (status) => {
153
- const endedAtMs = Date.now();
154
- await endAndWaitStreams();
155
- return {
156
- status,
157
- exitCode,
158
- signal,
159
- errorMessage,
160
- pid,
161
- startedAtMs,
162
- endedAtMs,
163
- durationMs: Math.max(0, endedAtMs - startedAtMs),
164
- stdout: makeOutput('stdout'),
165
- stderr: makeOutput('stderr'),
166
- };
167
- };
168
- let child;
169
- const killChild = (_why) => {
170
- if (!child || child.killed)
171
- return;
172
- try {
173
- child.kill('SIGTERM');
174
- }
175
- catch { /* ignore */ }
176
- // Escalate after grace period
177
- setTimeout(() => {
178
- if (!child || child.killed)
179
- return;
180
- try {
181
- child.kill('SIGKILL');
182
- }
183
- catch { /* ignore */ }
184
- }, this.killGraceMs);
185
- };
186
- const onAbort = () => {
187
- canceled = true;
188
- errorMessage = errorMessage ?? 'Canceled';
189
- killChild('canceled');
190
- };
191
- // Shared cleanup: clears timeout, removes abort listener, then finalizes
192
- const cleanupAndFinalize = async (status) => {
193
- if (timeoutHandle)
194
- clearTimeout(timeoutHandle);
195
- if (spec.signal)
196
- spec.signal.removeEventListener('abort', onAbort);
197
- return await finalize(status);
198
- };
199
- try {
200
- const env = { ...process.env, ...(spec.env ?? {}) };
201
- const cwd = spec.cwd ?? repoRoot;
202
- // If already aborted, short-circuit
203
- if (spec.signal?.aborted) {
204
- canceled = true;
205
- errorMessage = 'Canceled (signal already aborted)';
206
- return await finalize('canceled');
207
- }
208
- if (spec.signal) {
209
- spec.signal.addEventListener('abort', onAbort, { once: true });
210
- }
211
- child = spawn(spec.cmd, {
212
- cwd,
213
- env,
214
- shell: spec.shell ?? true,
215
- stdio: ['ignore', 'pipe', 'pipe'],
216
- });
217
- pid = child.pid ?? null;
218
- // Timeout handling
219
- if (spec.timeoutMs && spec.timeoutMs > 0) {
220
- timeoutHandle = setTimeout(() => {
221
- timedOut = true;
222
- errorMessage = errorMessage ?? `Timed out after ${spec.timeoutMs}ms`;
223
- killChild('timeout');
224
- }, spec.timeoutMs);
225
- }
226
- // Stream piping + tail capture
227
- if (child.stdout) {
228
- child.stdout.on('data', (chunk) => {
229
- const buf = Buffer.from(chunk);
230
- spec.onStdoutChunk?.(buf);
231
- stdoutTail = appendTail(stdoutTail, buf, tailBytes);
232
- writeCapped(stdoutStream, buf, stdoutState, maxLogBytes);
233
- });
234
- }
235
- if (child.stderr) {
236
- child.stderr.on('data', (chunk) => {
237
- const buf = Buffer.from(chunk);
238
- spec.onStderrChunk?.(buf);
239
- stderrTail = appendTail(stderrTail, buf, tailBytes);
240
- writeCapped(stderrStream, buf, stderrState, maxLogBytes);
241
- });
242
- }
243
- // Spawn error (ENOENT, permissions, etc.)
244
- const spawnErrorPromise = new Promise((resolve) => {
245
- child.once('error', async (err) => {
246
- errorMessage = errorMessage ?? err.message;
247
- exitCode = null;
248
- signal = null;
249
- killChild('error');
250
- resolve(await cleanupAndFinalize('failed'));
251
- });
252
- });
253
- // Normal close path
254
- const closePromise = new Promise((resolve) => {
255
- child.once('close', async (code, sig) => {
256
- exitCode = code;
257
- signal = sig ?? null;
258
- let status;
259
- if (canceled)
260
- status = 'canceled';
261
- else if (timedOut)
262
- status = 'timeout';
263
- else if (code === 0)
264
- status = 'success';
265
- else
266
- status = 'failed';
267
- resolve(await cleanupAndFinalize(status));
268
- });
269
- });
270
- // Write stream error (disk issue)
271
- const writeErrorPromise = new Promise((resolve) => {
272
- const onWriteError = async (err) => {
273
- errorMessage = errorMessage ?? `Artifact write error: ${err.message}`;
274
- killChild('error');
275
- resolve(await cleanupAndFinalize('failed'));
276
- };
277
- stdoutStream.once('error', onWriteError);
278
- stderrStream.once('error', onWriteError);
279
- });
280
- // First one wins
281
- return await Promise.race([spawnErrorPromise, closePromise, writeErrorPromise]);
282
- }
283
- catch (err) {
284
- errorMessage = errorMessage ?? (err instanceof Error ? err.message : String(err));
285
- return await cleanupAndFinalize('failed');
286
- }
287
- }
288
- }
289
- /**
290
- * Create a Node exec runner with default options
291
- */
292
- export function createExecRunner(opts) {
293
- return new NodeExecRunner(opts);
294
- }
295
- //# sourceMappingURL=exec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/lib/exec.ts"],"names":[],"mappings":"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"}
@@ -1,78 +0,0 @@
1
- /**
2
- * Formulas - User-defined repeatable sweep recipes
3
- *
4
- * A formula is a YAML config that defines what an auto run should
5
- * look for and how to fix it. Formulas live in .blockspool/formulas/
6
- * and can be invoked with --formula <name>.
7
- *
8
- * Example:
9
- * blockspool solo auto --formula security-audit
10
- */
11
- import type { ProposalCategory } from '@blockspool/core/scout';
12
- export interface Formula {
13
- /** Unique name (derived from filename) */
14
- name: string;
15
- /** Human-readable description */
16
- description: string;
17
- /** Scope glob pattern (e.g., "src/") */
18
- scope?: string;
19
- /** Proposal categories to include */
20
- categories?: ProposalCategory[];
21
- /** Minimum confidence threshold (0-100) */
22
- minConfidence?: number;
23
- /** Custom prompt for the scout — tells the AI what to look for */
24
- prompt?: string;
25
- /** Max PRs to create */
26
- maxPrs?: number;
27
- /** Max time for the run (e.g., "2h", "30m") */
28
- maxTime?: string;
29
- /** Focus areas for guided mode */
30
- focusAreas?: string[];
31
- /** Patterns to exclude */
32
- exclude?: string[];
33
- /** Whether to use roadmap mode (default: true) */
34
- useRoadmap?: boolean;
35
- /** Tags for organizing formulas */
36
- tags?: string[];
37
- /** Model to use for scouting */
38
- model?: 'haiku' | 'sonnet' | 'opus';
39
- }
40
- export declare const BUILTIN_FORMULAS: Formula[];
41
- /**
42
- * Load a formula by name.
43
- *
44
- * Search order:
45
- * 1. .blockspool/formulas/<name>.yaml (or .yml)
46
- * 2. Built-in formulas
47
- *
48
- * @returns The formula, or null if not found
49
- */
50
- export declare function loadFormula(name: string, repoPath?: string): Formula | null;
51
- /**
52
- * List all available formulas (built-in + user-defined)
53
- */
54
- export declare function listFormulas(repoPath?: string): Formula[];
55
- /**
56
- * Apply a formula's settings to auto options.
57
- * Formula values override defaults but CLI flags take precedence.
58
- */
59
- export declare function applyFormula(formula: Formula, cliOptions: {
60
- scope?: string;
61
- types?: ProposalCategory[];
62
- minConfidence?: number;
63
- maxPrs?: number;
64
- maxTime?: string;
65
- exclude?: string[];
66
- noRoadmap?: boolean;
67
- }): {
68
- scope: string;
69
- types?: ProposalCategory[];
70
- minConfidence?: number;
71
- maxPrs?: number;
72
- maxTime?: string;
73
- exclude?: string[];
74
- noRoadmap?: boolean;
75
- prompt?: string;
76
- focusAreas?: string[];
77
- };
78
- //# sourceMappingURL=formulas.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formulas.d.ts","sourceRoot":"","sources":["../../src/lib/formulas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/D,MAAM,WAAW,OAAO;IACtB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IAEb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qCAAqC;IACrC,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEhC,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CACrC;AAMD,eAAO,MAAM,gBAAgB,EAAE,OAAO,EAwGrC,CAAC;AAMF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAO3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAQzD;AA0ID;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GACA;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAcA"}