@calliopelabs/cli 0.1.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.
package/dist/cli.js ADDED
@@ -0,0 +1,446 @@
1
+ /**
2
+ * Calliope CLI - Interactive REPL
3
+ *
4
+ * Main interactive command-line interface.
5
+ */
6
+ import * as readline from 'readline';
7
+ import * as config from './config.js';
8
+ import { chat, getAvailableProviders, selectProvider } from './providers.js';
9
+ import { TOOLS, executeTool } from './tools.js';
10
+ import { getSystemPrompt, DEFAULT_MODELS } from './types.js';
11
+ // ANSI colors
12
+ const c = {
13
+ reset: '\x1b[0m',
14
+ bold: '\x1b[1m',
15
+ dim: '\x1b[2m',
16
+ cyan: '\x1b[36m',
17
+ green: '\x1b[32m',
18
+ yellow: '\x1b[33m',
19
+ red: '\x1b[31m',
20
+ blue: '\x1b[34m',
21
+ magenta: '\x1b[35m',
22
+ brightCyan: '\x1b[96m',
23
+ };
24
+ function color(text, style) {
25
+ return `${c[style]}${text}${c.reset}`;
26
+ }
27
+ // Spinner frames
28
+ const SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
29
+ const BANNER = `
30
+ ${color(' ╭─────────────────────────────────────────────────────────────────╮', 'cyan')}
31
+ ${color(' │', 'cyan')} ${color('│', 'cyan')}
32
+ ${color(' │', 'cyan')} ${color(' ██████╗ █████╗ ██╗ ██╗ ██╗ ██████╗ ██████╗ ███████╗', 'brightCyan')} ${color('│', 'cyan')}
33
+ ${color(' │', 'cyan')} ${color('██╔════╝██╔══██╗██║ ██║ ██║██╔═══██╗██╔══██╗██╔════╝', 'brightCyan')} ${color('│', 'cyan')}
34
+ ${color(' │', 'cyan')} ${color('██║ ███████║██║ ██║ ██║██║ ██║██████╔╝█████╗ ', 'cyan')} ${color('│', 'cyan')}
35
+ ${color(' │', 'cyan')} ${color('██║ ██╔══██║██║ ██║ ██║██║ ██║██╔═══╝ ██╔══╝ ', 'cyan')} ${color('│', 'cyan')}
36
+ ${color(' │', 'cyan')} ${color('╚██████╗██║ ██║███████╗███████╗██║╚██████╔╝██║ ███████╗', 'brightCyan')} ${color('│', 'cyan')}
37
+ ${color(' │', 'cyan')} ${color(' ╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚══════╝', 'cyan')} ${color('│', 'cyan')}
38
+ ${color(' │', 'cyan')} ${color('│', 'cyan')}
39
+ ${color(' │', 'cyan')} ${color('The Muse of Digital Eloquence', 'dim')} ${color('│', 'cyan')}
40
+ ${color(' │', 'cyan')} ${color('│', 'cyan')}
41
+ ${color(' ╰─────────────────────────────────────────────────────────────────╯', 'cyan')}
42
+ `;
43
+ // Slash commands
44
+ const COMMANDS = [
45
+ '/help', '/h', '/provider', '/p', '/model', '/m', '/persona',
46
+ '/clear', '/c', '/status', '/s', '/loop', '/cancel-loop',
47
+ '/setup', '/config', '/exit', '/quit', '/q',
48
+ ];
49
+ /**
50
+ * Start the CLI
51
+ */
52
+ export async function startCLI(options = {}) {
53
+ const state = {
54
+ provider: config.get('defaultProvider'),
55
+ model: config.get('defaultModel'),
56
+ persona: config.get('persona'),
57
+ messages: [],
58
+ cwd: process.cwd(),
59
+ running: true,
60
+ skipPermissions: options.skipPermissions ?? false,
61
+ loopActive: false,
62
+ loopPrompt: '',
63
+ loopIteration: 0,
64
+ loopMaxIterations: 50,
65
+ };
66
+ // Add system message
67
+ state.messages.push({
68
+ role: 'system',
69
+ content: getSystemPrompt(state.persona),
70
+ });
71
+ // Setup readline
72
+ const rl = readline.createInterface({
73
+ input: process.stdin,
74
+ output: process.stdout,
75
+ terminal: true,
76
+ completer: (line) => {
77
+ if (line.startsWith('/')) {
78
+ const hits = COMMANDS.filter(cmd => cmd.startsWith(line));
79
+ return [hits.length ? hits : COMMANDS, line];
80
+ }
81
+ return [[], line];
82
+ },
83
+ });
84
+ // Print welcome
85
+ if (config.get('fancyOutput')) {
86
+ console.log(BANNER);
87
+ const actualProvider = selectProvider(state.provider);
88
+ const model = state.model || DEFAULT_MODELS[actualProvider];
89
+ console.log(` ${color('Provider:', 'dim')} ${color(actualProvider, 'cyan')} (${color(model, 'dim')})`);
90
+ console.log(` ${color('Persona:', 'dim')} ${color(state.persona, 'cyan')}`);
91
+ console.log(` ${color('Directory:', 'dim')} ${color(state.cwd, 'dim')}`);
92
+ console.log();
93
+ console.log(color(' ─────────────────────────────────────────────────────────────────', 'dim'));
94
+ console.log(` ${color('TAB', 'cyan')} ${color('autocomplete', 'dim')} ${color('│', 'dim')} ${color('/help', 'cyan')} ${color('│', 'dim')} ${color('/loop', 'cyan')} ${color('│', 'dim')} ${color('/provider', 'cyan')} ${color('│', 'dim')} ${color('ESC', 'cyan')} ${color('stop', 'dim')}`);
95
+ console.log(color(' ─────────────────────────────────────────────────────────────────', 'dim'));
96
+ }
97
+ else {
98
+ console.log('Calliope CLI');
99
+ console.log(`Provider: ${selectProvider(state.provider)}`);
100
+ console.log('/help for commands');
101
+ }
102
+ console.log();
103
+ // Prompt function
104
+ const promptUser = () => {
105
+ const promptStr = `${color('calliope', 'cyan')}${color('>', 'dim')} `;
106
+ rl.question(promptStr, async (input) => {
107
+ input = input.trim();
108
+ if (!input) {
109
+ promptUser();
110
+ return;
111
+ }
112
+ // Handle commands
113
+ if (input.startsWith('/')) {
114
+ await handleCommand(input, state, rl);
115
+ if (state.running)
116
+ promptUser();
117
+ return;
118
+ }
119
+ // Run agent
120
+ await runAgent(input, state);
121
+ if (state.running)
122
+ promptUser();
123
+ });
124
+ };
125
+ // Handle Ctrl+C
126
+ rl.on('close', () => {
127
+ console.log();
128
+ console.log(color(' Farewell...', 'cyan'));
129
+ console.log();
130
+ process.exit(0);
131
+ });
132
+ promptUser();
133
+ }
134
+ /**
135
+ * Handle slash commands
136
+ */
137
+ async function handleCommand(input, state, rl) {
138
+ const parts = input.split(/\s+/);
139
+ const cmd = parts[0].toLowerCase();
140
+ switch (cmd) {
141
+ case '/help':
142
+ case '/h':
143
+ printHelp();
144
+ break;
145
+ case '/provider':
146
+ case '/p':
147
+ if (parts[1]) {
148
+ const validProviders = ['anthropic', 'google', 'openai', 'together', 'openrouter', 'groq', 'fireworks', 'mistral', 'ollama', 'ai21', 'huggingface', 'litellm', 'auto'];
149
+ const requested = parts[1].toLowerCase();
150
+ if (validProviders.includes(requested)) {
151
+ state.provider = requested;
152
+ console.log(color(`Provider set to: ${requested}`, 'green'));
153
+ }
154
+ else {
155
+ console.log(color(`Invalid provider: ${parts[1]}`, 'red'));
156
+ console.log(`Available: ${validProviders.join(', ')}`);
157
+ }
158
+ }
159
+ else {
160
+ const available = getAvailableProviders();
161
+ console.log(`Current: ${color(selectProvider(state.provider), 'green')}`);
162
+ console.log(`Available: ${available.join(', ')}`);
163
+ }
164
+ console.log();
165
+ break;
166
+ case '/model':
167
+ case '/m':
168
+ if (parts[1]) {
169
+ state.model = parts[1];
170
+ console.log(color(`Model set to: ${parts[1]}`, 'green'));
171
+ }
172
+ else {
173
+ const actualProvider = selectProvider(state.provider);
174
+ console.log(`Model: ${state.model || DEFAULT_MODELS[actualProvider]}`);
175
+ }
176
+ console.log();
177
+ break;
178
+ case '/persona':
179
+ if (parts[1] && ['calliope', 'professional', 'minimal'].includes(parts[1])) {
180
+ state.persona = parts[1];
181
+ state.messages = [{ role: 'system', content: getSystemPrompt(state.persona) }];
182
+ console.log(color(`Persona set to: ${parts[1]}`, 'green'));
183
+ }
184
+ else {
185
+ console.log(`Current: ${color(state.persona, 'magenta')}`);
186
+ console.log('Options: calliope, professional, minimal');
187
+ }
188
+ console.log();
189
+ break;
190
+ case '/clear':
191
+ case '/c':
192
+ state.messages = [{ role: 'system', content: getSystemPrompt(state.persona) }];
193
+ console.log(color('Conversation cleared.', 'green'));
194
+ console.log();
195
+ break;
196
+ case '/status':
197
+ case '/s':
198
+ console.log(`Provider: ${color(selectProvider(state.provider), 'green')}`);
199
+ console.log(`Model: ${state.model || DEFAULT_MODELS[selectProvider(state.provider)]}`);
200
+ console.log(`Persona: ${color(state.persona, 'magenta')}`);
201
+ console.log(`Messages: ${state.messages.length}`);
202
+ console.log(`Directory: ${state.cwd}`);
203
+ console.log();
204
+ break;
205
+ case '/loop':
206
+ await startLoop(parts.slice(1).join(' '), state);
207
+ break;
208
+ case '/cancel-loop':
209
+ if (state.loopActive) {
210
+ state.loopActive = false;
211
+ console.log(color('Loop cancelled.', 'yellow'));
212
+ }
213
+ else {
214
+ console.log(color('No active loop.', 'dim'));
215
+ }
216
+ console.log();
217
+ break;
218
+ case '/setup':
219
+ const { reconfigure } = await import('./setup.js');
220
+ await reconfigure();
221
+ break;
222
+ case '/config':
223
+ console.log(`Config: ${config.getConfigPath()}`);
224
+ console.log(`Providers: ${config.getConfiguredProviders().join(', ') || 'none'}`);
225
+ console.log();
226
+ break;
227
+ case '/exit':
228
+ case '/quit':
229
+ case '/q':
230
+ console.log();
231
+ console.log(color(' Until we meet again...', 'cyan'));
232
+ console.log();
233
+ state.running = false;
234
+ rl.close();
235
+ process.exit(0);
236
+ break;
237
+ default:
238
+ console.log(color(`Unknown command: ${cmd}. Type /help for help.`, 'red'));
239
+ console.log();
240
+ }
241
+ }
242
+ /**
243
+ * Print help
244
+ */
245
+ function printHelp() {
246
+ console.log();
247
+ console.log(color('Commands:', 'bold'));
248
+ console.log(' /help, /h Show this help');
249
+ console.log(' /provider <name> Switch AI provider');
250
+ console.log(' /model <name> Set model');
251
+ console.log(' /persona <name> Switch persona (calliope, professional, minimal)');
252
+ console.log(' /clear Clear conversation');
253
+ console.log(' /status Show current status');
254
+ console.log();
255
+ console.log(color('Ralph Wiggum Loop:', 'bold'));
256
+ console.log(' /loop "<prompt>" Start autonomous loop');
257
+ console.log(' --max-iterations N');
258
+ console.log(' --completion-promise "text"');
259
+ console.log(' /cancel-loop Stop active loop');
260
+ console.log();
261
+ console.log(color('Config:', 'bold'));
262
+ console.log(' /setup Reconfigure');
263
+ console.log(' /config Show config path');
264
+ console.log(' /exit Exit');
265
+ console.log();
266
+ }
267
+ /**
268
+ * Run the agent with a prompt
269
+ */
270
+ async function runAgent(prompt, state) {
271
+ // Add user message
272
+ state.messages.push({ role: 'user', content: prompt });
273
+ // Spinner setup
274
+ let spinnerIdx = 0;
275
+ const spinnerInterval = setInterval(() => {
276
+ process.stdout.write(`\r${color(SPINNER[spinnerIdx], 'cyan')} ${color('Thinking...', 'dim')}`);
277
+ spinnerIdx = (spinnerIdx + 1) % SPINNER.length;
278
+ }, 80);
279
+ // Helper to clean up spinner
280
+ const clearSpinner = () => {
281
+ clearInterval(spinnerInterval);
282
+ process.stdout.write('\r\x1b[K'); // Clear line
283
+ };
284
+ try {
285
+ const maxIterations = config.get('maxIterations');
286
+ let iteration = 0;
287
+ let finalResponse = '';
288
+ while (iteration < maxIterations) {
289
+ iteration++;
290
+ // Call LLM
291
+ const response = await chat(state.provider, state.messages, TOOLS, state.model);
292
+ // Handle tool calls
293
+ if (response.toolCalls && response.toolCalls.length > 0) {
294
+ clearSpinner();
295
+ // Add assistant message with tool calls
296
+ state.messages.push({
297
+ role: 'assistant',
298
+ content: response.content,
299
+ toolCalls: response.toolCalls,
300
+ });
301
+ // Execute tools
302
+ for (const toolCall of response.toolCalls) {
303
+ printToolCall(toolCall);
304
+ const result = await executeTool(toolCall, state.cwd);
305
+ printToolResult(toolCall.name, result.result);
306
+ state.messages.push({
307
+ role: 'tool',
308
+ content: result.result,
309
+ toolCallId: toolCall.id,
310
+ });
311
+ }
312
+ // Continue loop for next response
313
+ continue;
314
+ }
315
+ // No tool calls - final response
316
+ clearSpinner();
317
+ state.messages.push({
318
+ role: 'assistant',
319
+ content: response.content,
320
+ });
321
+ finalResponse = response.content;
322
+ console.log();
323
+ console.log(`${color('✧', 'cyan')} ${color('Calliope:', 'dim')}`);
324
+ console.log();
325
+ printOutput(response.content);
326
+ console.log();
327
+ break;
328
+ }
329
+ return finalResponse;
330
+ }
331
+ catch (error) {
332
+ const msg = error instanceof Error ? error.message : String(error);
333
+ console.log();
334
+ console.log(`${color('✗', 'red')} ${color(`Error: ${msg}`, 'red')}`);
335
+ console.log();
336
+ return '';
337
+ }
338
+ finally {
339
+ // Ensure spinner is always cleaned up
340
+ clearInterval(spinnerInterval);
341
+ }
342
+ }
343
+ /**
344
+ * Start an autonomous loop
345
+ */
346
+ async function startLoop(args, state) {
347
+ // Parse args
348
+ const maxIterMatch = args.match(/--max-iterations\s+(\d+)/);
349
+ const completionMatch = args.match(/--completion-promise\s+"([^"]+)"/);
350
+ let prompt = args
351
+ .replace(/--max-iterations\s+\d+/, '')
352
+ .replace(/--completion-promise\s+"[^"]+"/, '')
353
+ .trim();
354
+ const quotedMatch = prompt.match(/^"([^"]+)"$/);
355
+ if (quotedMatch)
356
+ prompt = quotedMatch[1];
357
+ if (!prompt) {
358
+ console.log(color('Usage: /loop "<prompt>" [--max-iterations N] [--completion-promise "text"]', 'red'));
359
+ console.log();
360
+ return;
361
+ }
362
+ state.loopActive = true;
363
+ state.loopPrompt = prompt;
364
+ state.loopIteration = 0;
365
+ state.loopMaxIterations = maxIterMatch ? parseInt(maxIterMatch[1], 10) : 50;
366
+ state.loopCompletionPromise = completionMatch ? completionMatch[1] : undefined;
367
+ console.log();
368
+ console.log(`${color('╭─', 'dim')} ${color('🔄 Ralph Loop Started', 'bold')}`);
369
+ console.log(`${color('│', 'dim')} ${color('Max:', 'dim')} ${color(String(state.loopMaxIterations), 'cyan')}`);
370
+ if (state.loopCompletionPromise) {
371
+ console.log(`${color('│', 'dim')} ${color('Promise:', 'dim')} ${color(state.loopCompletionPromise, 'green')}`);
372
+ }
373
+ console.log(`${color('╰─', 'dim')} ${color('/cancel-loop to stop', 'dim')}`);
374
+ console.log();
375
+ // Run loop
376
+ while (state.loopActive && state.loopIteration < state.loopMaxIterations) {
377
+ state.loopIteration++;
378
+ console.log(`${color('╭─', 'cyan')} ${color(`Iteration ${state.loopIteration}/${state.loopMaxIterations}`, 'bold')}`);
379
+ const result = await runAgent(state.loopPrompt, state);
380
+ // Check completion promise
381
+ if (state.loopCompletionPromise && result.includes(state.loopCompletionPromise)) {
382
+ console.log(`${color('🎉 Completion promise detected!', 'green')}`);
383
+ state.loopActive = false;
384
+ break;
385
+ }
386
+ if (!state.loopActive)
387
+ break;
388
+ // Delay between iterations
389
+ await new Promise(r => setTimeout(r, 1000));
390
+ }
391
+ if (state.loopIteration >= state.loopMaxIterations) {
392
+ console.log(`${color('⚠️ Max iterations reached', 'yellow')}`);
393
+ }
394
+ state.loopActive = false;
395
+ console.log();
396
+ }
397
+ /**
398
+ * Print tool call
399
+ */
400
+ function printToolCall(toolCall) {
401
+ const icons = {
402
+ shell: '⚡',
403
+ read_file: '📄',
404
+ write_file: '✍️',
405
+ list_files: '📁',
406
+ think: '💭',
407
+ };
408
+ console.log();
409
+ console.log(`${color('╭─', 'dim')} ${icons[toolCall.name] || '⚙️'} ${color(toolCall.name, 'yellow')}`);
410
+ if (toolCall.name === 'shell' && toolCall.arguments.command) {
411
+ console.log(`${color('│', 'dim')} ${color('$', 'green')} ${toolCall.arguments.command}`);
412
+ }
413
+ else if (toolCall.name === 'think' && toolCall.arguments.thought) {
414
+ const thought = String(toolCall.arguments.thought);
415
+ const preview = thought.length > 80 ? thought.substring(0, 80) + '...' : thought;
416
+ console.log(`${color('│', 'dim')} ${color(preview, 'dim')}`);
417
+ }
418
+ }
419
+ /**
420
+ * Print tool result
421
+ */
422
+ function printToolResult(name, result) {
423
+ if (name === 'think') {
424
+ console.log(`${color('╰─', 'dim')} ${color('✓', 'green')}`);
425
+ return;
426
+ }
427
+ const lines = result.split('\n').slice(0, 10);
428
+ for (const line of lines) {
429
+ console.log(`${color('│', 'dim')} ${color(line.substring(0, 100), 'dim')}`);
430
+ }
431
+ if (result.split('\n').length > 10) {
432
+ console.log(`${color('│', 'dim')} ${color(`... (${result.split('\n').length - 10} more lines)`, 'dim')}`);
433
+ }
434
+ const success = !result.toLowerCase().includes('error');
435
+ console.log(`${color('╰─', 'dim')} ${success ? color('✓', 'green') : color('✗', 'red')}`);
436
+ }
437
+ /**
438
+ * Print output with indentation
439
+ */
440
+ function printOutput(text) {
441
+ const lines = text.split('\n');
442
+ for (const line of lines) {
443
+ console.log(`${color('│', 'blue')} ${line}`);
444
+ }
445
+ }
446
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Calliope CLI Configuration
3
+ *
4
+ * Manages user preferences and API keys using the conf package.
5
+ * Config is stored in ~/.config/calliope/config.json (or platform equivalent)
6
+ */
7
+ import Conf from 'conf';
8
+ export type LLMProvider = 'anthropic' | 'google' | 'openai' | 'together' | 'openrouter' | 'groq' | 'fireworks' | 'mistral' | 'ollama' | 'ai21' | 'huggingface' | 'litellm' | 'auto';
9
+ export type AgentPersona = 'calliope' | 'professional' | 'minimal';
10
+ export interface CalliopeConfig {
11
+ setupComplete: boolean;
12
+ defaultProvider: LLMProvider;
13
+ defaultModel?: string;
14
+ anthropicApiKey?: string;
15
+ googleApiKey?: string;
16
+ openaiApiKey?: string;
17
+ togetherApiKey?: string;
18
+ openrouterApiKey?: string;
19
+ groqApiKey?: string;
20
+ fireworksApiKey?: string;
21
+ mistralApiKey?: string;
22
+ ollamaBaseUrl?: string;
23
+ ai21ApiKey?: string;
24
+ huggingfaceApiKey?: string;
25
+ litellmBaseUrl?: string;
26
+ litellmApiKey?: string;
27
+ persona: AgentPersona;
28
+ maxIterations: number;
29
+ fancyOutput: boolean;
30
+ autoSaveHistory: boolean;
31
+ workspaceRoot?: string;
32
+ }
33
+ declare const config: Conf<CalliopeConfig>;
34
+ /**
35
+ * Get the full config object
36
+ */
37
+ export declare function getConfig(): CalliopeConfig;
38
+ /**
39
+ * Get a specific config value
40
+ */
41
+ export declare function get<K extends keyof CalliopeConfig>(key: K): CalliopeConfig[K];
42
+ /**
43
+ * Set a config value
44
+ */
45
+ export declare function set<K extends keyof CalliopeConfig>(key: K, value: CalliopeConfig[K]): void;
46
+ /**
47
+ * Set multiple config values
48
+ */
49
+ export declare function setMultiple(values: Partial<CalliopeConfig>): void;
50
+ /**
51
+ * Check if setup is complete
52
+ */
53
+ export declare function isSetupComplete(): boolean;
54
+ /**
55
+ * Mark setup as complete
56
+ */
57
+ export declare function markSetupComplete(): void;
58
+ /**
59
+ * Get config file path (for display to user)
60
+ */
61
+ export declare function getConfigPath(): string;
62
+ /**
63
+ * Reset config to defaults
64
+ */
65
+ export declare function resetConfig(): void;
66
+ /**
67
+ * Check which providers have API keys configured
68
+ */
69
+ export declare function getConfiguredProviders(): LLMProvider[];
70
+ /**
71
+ * Get API key for a provider
72
+ */
73
+ export declare function getApiKey(provider: LLMProvider): string | undefined;
74
+ /**
75
+ * Get base URL for a provider (for Ollama/LiteLLM)
76
+ */
77
+ export declare function getBaseUrl(provider: LLMProvider): string | undefined;
78
+ export default config;
79
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AACpL,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,cAAc;IAE7B,aAAa,EAAE,OAAO,CAAC;IAGvB,eAAe,EAAE,WAAW,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,OAAO,EAAE,YAAY,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IAGrB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAYD,QAAA,MAAM,MAAM,sBA0BV,CAAC;AAEH;;GAEG;AACH,wBAAgB,SAAS,IAAI,cAAc,CAE1C;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAE7E;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAE1F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAIjE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,WAAW,EAAE,CAiBtD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CA0CnE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAQpE;AAED,eAAe,MAAM,CAAC"}