ralph-starter 0.1.1-beta.5 → 0.1.1-beta.6
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/README.md +20 -1
- package/dist/cli.js +22 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +88 -13
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/template.d.ts +7 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +355 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/loop/__tests__/agents.test.js +60 -36
- package/dist/loop/__tests__/agents.test.js.map +1 -1
- package/dist/loop/agents.d.ts.map +1 -1
- package/dist/loop/agents.js +101 -71
- package/dist/loop/agents.js.map +1 -1
- package/dist/loop/executor.d.ts.map +1 -1
- package/dist/loop/executor.js +99 -11
- package/dist/loop/executor.js.map +1 -1
- package/dist/loop/task-counter.d.ts +6 -1
- package/dist/loop/task-counter.d.ts.map +1 -1
- package/dist/loop/task-counter.js +58 -14
- package/dist/loop/task-counter.js.map +1 -1
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +5 -3
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/llm.d.ts +4 -1
- package/dist/wizard/llm.d.ts.map +1 -1
- package/dist/wizard/llm.js +52 -27
- package/dist/wizard/llm.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { runCommand } from './run.js';
|
|
8
|
+
const TEMPLATES_REPO_URL = 'https://raw.githubusercontent.com/rubenmarcus/ralph-templates/main';
|
|
9
|
+
const TEMPLATES_JSON_URL = `${TEMPLATES_REPO_URL}/templates.json`;
|
|
10
|
+
const CACHE_DIR = join(homedir(), '.ralph-starter', 'templates-cache');
|
|
11
|
+
const CACHE_DURATION_MS = 1000 * 60 * 60; // 1 hour
|
|
12
|
+
function ensureCacheDir() {
|
|
13
|
+
if (!existsSync(CACHE_DIR)) {
|
|
14
|
+
mkdirSync(CACHE_DIR, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function getCacheMetadataPath() {
|
|
18
|
+
return join(CACHE_DIR, 'metadata.json');
|
|
19
|
+
}
|
|
20
|
+
function getTemplateCachePath(templateId) {
|
|
21
|
+
return join(CACHE_DIR, `${templateId}.md`);
|
|
22
|
+
}
|
|
23
|
+
function getRegistryCachePath() {
|
|
24
|
+
return join(CACHE_DIR, 'templates.json');
|
|
25
|
+
}
|
|
26
|
+
function isCacheValid() {
|
|
27
|
+
const metadataPath = getCacheMetadataPath();
|
|
28
|
+
if (!existsSync(metadataPath)) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
|
|
33
|
+
const age = Date.now() - metadata.fetchedAt;
|
|
34
|
+
return age < CACHE_DURATION_MS;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function saveCacheMetadata(version) {
|
|
41
|
+
ensureCacheDir();
|
|
42
|
+
const metadata = {
|
|
43
|
+
fetchedAt: Date.now(),
|
|
44
|
+
version,
|
|
45
|
+
};
|
|
46
|
+
writeFileSync(getCacheMetadataPath(), JSON.stringify(metadata, null, 2));
|
|
47
|
+
}
|
|
48
|
+
async function fetchRegistry(useCache = true) {
|
|
49
|
+
const cachePath = getRegistryCachePath();
|
|
50
|
+
// Check cache first
|
|
51
|
+
if (useCache && isCacheValid() && existsSync(cachePath)) {
|
|
52
|
+
try {
|
|
53
|
+
return JSON.parse(readFileSync(cachePath, 'utf-8'));
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Cache corrupted, fetch fresh
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Fetch from remote
|
|
60
|
+
const response = await fetch(TEMPLATES_JSON_URL);
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
throw new Error(`Failed to fetch templates registry: ${response.statusText}`);
|
|
63
|
+
}
|
|
64
|
+
const registry = await response.json();
|
|
65
|
+
// Save to cache
|
|
66
|
+
ensureCacheDir();
|
|
67
|
+
writeFileSync(cachePath, JSON.stringify(registry, null, 2));
|
|
68
|
+
saveCacheMetadata(registry.version);
|
|
69
|
+
return registry;
|
|
70
|
+
}
|
|
71
|
+
async function fetchTemplateContent(template, useCache = true) {
|
|
72
|
+
const cachePath = getTemplateCachePath(template.id);
|
|
73
|
+
// Check cache first
|
|
74
|
+
if (useCache && isCacheValid() && existsSync(cachePath)) {
|
|
75
|
+
try {
|
|
76
|
+
return readFileSync(cachePath, 'utf-8');
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Cache corrupted, fetch fresh
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Fetch from remote
|
|
83
|
+
const templateUrl = `${TEMPLATES_REPO_URL}/${template.path}`;
|
|
84
|
+
const response = await fetch(templateUrl);
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
throw new Error(`Failed to fetch template: ${response.statusText}`);
|
|
87
|
+
}
|
|
88
|
+
const content = await response.text();
|
|
89
|
+
// Save to cache
|
|
90
|
+
ensureCacheDir();
|
|
91
|
+
writeFileSync(cachePath, content);
|
|
92
|
+
return content;
|
|
93
|
+
}
|
|
94
|
+
function getDifficultyBadge(difficulty) {
|
|
95
|
+
switch (difficulty) {
|
|
96
|
+
case 'beginner':
|
|
97
|
+
return chalk.green(`[${difficulty}]`);
|
|
98
|
+
case 'intermediate':
|
|
99
|
+
return chalk.yellow(`[${difficulty}]`);
|
|
100
|
+
case 'advanced':
|
|
101
|
+
return chalk.red(`[${difficulty}]`);
|
|
102
|
+
default:
|
|
103
|
+
return chalk.white(`[${difficulty}]`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function listTemplates(options) {
|
|
107
|
+
const spinner = ora('Fetching templates...').start();
|
|
108
|
+
try {
|
|
109
|
+
const registry = await fetchRegistry(!options.refresh);
|
|
110
|
+
spinner.stop();
|
|
111
|
+
console.log();
|
|
112
|
+
console.log(chalk.cyan.bold('Available Templates'));
|
|
113
|
+
console.log(chalk.dim(`v${registry.version}`));
|
|
114
|
+
console.log();
|
|
115
|
+
// Group templates by category
|
|
116
|
+
const templatesByCategory = new Map();
|
|
117
|
+
for (const template of registry.templates) {
|
|
118
|
+
if (options.category && template.category !== options.category) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const existing = templatesByCategory.get(template.category) || [];
|
|
122
|
+
existing.push(template);
|
|
123
|
+
templatesByCategory.set(template.category, existing);
|
|
124
|
+
}
|
|
125
|
+
if (templatesByCategory.size === 0) {
|
|
126
|
+
if (options.category) {
|
|
127
|
+
console.log(chalk.yellow(`No templates found in category: ${options.category}`));
|
|
128
|
+
console.log(chalk.dim('\nAvailable categories:'));
|
|
129
|
+
for (const cat of registry.categories) {
|
|
130
|
+
console.log(chalk.dim(` - ${cat.id}: ${cat.name}`));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
console.log(chalk.yellow('No templates available.'));
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
// Display by category
|
|
139
|
+
for (const category of registry.categories) {
|
|
140
|
+
const templates = templatesByCategory.get(category.id);
|
|
141
|
+
if (!templates || templates.length === 0)
|
|
142
|
+
continue;
|
|
143
|
+
console.log(chalk.white.bold(`${category.name}`));
|
|
144
|
+
console.log(chalk.dim(` ${category.description}`));
|
|
145
|
+
console.log();
|
|
146
|
+
for (const template of templates) {
|
|
147
|
+
const difficultyBadge = getDifficultyBadge(template.difficulty);
|
|
148
|
+
console.log(` ${chalk.cyan.bold(template.id)} ${difficultyBadge}`);
|
|
149
|
+
console.log(` ${template.description}`);
|
|
150
|
+
console.log(chalk.dim(` Tags: ${template.tags.join(', ')}`));
|
|
151
|
+
console.log();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
155
|
+
console.log(chalk.dim('Commands:'));
|
|
156
|
+
console.log(chalk.dim(' ralph-starter template preview <name> Preview a template'));
|
|
157
|
+
console.log(chalk.dim(' ralph-starter template use <name> Use a template'));
|
|
158
|
+
console.log(chalk.dim(' ralph-starter template list --refresh Refresh cache'));
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
spinner.fail('Failed to fetch templates');
|
|
162
|
+
console.error(chalk.red(error.message));
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function previewTemplate(templateId) {
|
|
167
|
+
const spinner = ora('Fetching template...').start();
|
|
168
|
+
try {
|
|
169
|
+
const registry = await fetchRegistry();
|
|
170
|
+
const template = registry.templates.find((t) => t.id === templateId);
|
|
171
|
+
if (!template) {
|
|
172
|
+
spinner.fail(`Template not found: ${templateId}`);
|
|
173
|
+
console.log();
|
|
174
|
+
console.log(chalk.dim('Use "ralph-starter template list" to see available templates'));
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
const content = await fetchTemplateContent(template);
|
|
178
|
+
spinner.stop();
|
|
179
|
+
console.log();
|
|
180
|
+
console.log(chalk.cyan.bold(template.name));
|
|
181
|
+
console.log(chalk.dim(template.description));
|
|
182
|
+
console.log();
|
|
183
|
+
// Show metadata
|
|
184
|
+
console.log(chalk.white('Category:'), template.category);
|
|
185
|
+
console.log(chalk.white('Difficulty:'), getDifficultyBadge(template.difficulty));
|
|
186
|
+
console.log(chalk.white('Tags:'), template.tags.join(', '));
|
|
187
|
+
console.log();
|
|
188
|
+
// Show content
|
|
189
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
190
|
+
console.log(content);
|
|
191
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
192
|
+
console.log();
|
|
193
|
+
console.log(chalk.dim(`To use this template: ralph-starter template use ${templateId}`));
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
spinner.fail('Failed to fetch template');
|
|
197
|
+
console.error(chalk.red(error.message));
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async function useTemplate(templateId, options) {
|
|
202
|
+
const spinner = ora('Fetching template...').start();
|
|
203
|
+
try {
|
|
204
|
+
const registry = await fetchRegistry();
|
|
205
|
+
const template = registry.templates.find((t) => t.id === templateId);
|
|
206
|
+
if (!template) {
|
|
207
|
+
spinner.fail(`Template not found: ${templateId}`);
|
|
208
|
+
console.log();
|
|
209
|
+
console.log(chalk.dim('Use "ralph-starter template list" to see available templates'));
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
const content = await fetchTemplateContent(template);
|
|
213
|
+
spinner.succeed(`Fetched template: ${template.name}`);
|
|
214
|
+
console.log();
|
|
215
|
+
console.log(chalk.cyan.bold(template.name));
|
|
216
|
+
console.log(chalk.dim(template.description));
|
|
217
|
+
console.log();
|
|
218
|
+
// Ask for confirmation before proceeding
|
|
219
|
+
if (!options.auto) {
|
|
220
|
+
const { confirm } = await inquirer.prompt([
|
|
221
|
+
{
|
|
222
|
+
type: 'confirm',
|
|
223
|
+
name: 'confirm',
|
|
224
|
+
message: `Use this template to build a new project?`,
|
|
225
|
+
default: true,
|
|
226
|
+
},
|
|
227
|
+
]);
|
|
228
|
+
if (!confirm) {
|
|
229
|
+
console.log(chalk.dim('Cancelled.'));
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Write spec to temp location and pass to run command
|
|
234
|
+
ensureCacheDir();
|
|
235
|
+
const tempSpecPath = join(CACHE_DIR, `_active_${templateId}.md`);
|
|
236
|
+
writeFileSync(tempSpecPath, content);
|
|
237
|
+
// Run with the template spec
|
|
238
|
+
// We pass the spec content directly as the task
|
|
239
|
+
await runCommand(undefined, {
|
|
240
|
+
...options,
|
|
241
|
+
from: 'file',
|
|
242
|
+
project: tempSpecPath,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
spinner.fail('Failed to use template');
|
|
247
|
+
console.error(chalk.red(error.message));
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async function browseTemplates(options) {
|
|
252
|
+
const spinner = ora('Fetching templates...').start();
|
|
253
|
+
try {
|
|
254
|
+
const registry = await fetchRegistry();
|
|
255
|
+
spinner.stop();
|
|
256
|
+
// Build choices grouped by category
|
|
257
|
+
// biome-ignore lint: Using any for inquirer choices array
|
|
258
|
+
const choices = [];
|
|
259
|
+
for (const category of registry.categories) {
|
|
260
|
+
const templates = registry.templates.filter((t) => t.category === category.id);
|
|
261
|
+
if (templates.length === 0)
|
|
262
|
+
continue;
|
|
263
|
+
choices.push(new inquirer.Separator(chalk.cyan.bold(`\n${category.name}`)));
|
|
264
|
+
for (const template of templates) {
|
|
265
|
+
const badge = getDifficultyBadge(template.difficulty);
|
|
266
|
+
choices.push({
|
|
267
|
+
name: `${template.id} ${badge} - ${template.description}`,
|
|
268
|
+
value: template.id,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
choices.push(new inquirer.Separator());
|
|
273
|
+
choices.push({ name: chalk.dim('Cancel'), value: '' });
|
|
274
|
+
const { templateId } = await inquirer.prompt([
|
|
275
|
+
{
|
|
276
|
+
type: 'select',
|
|
277
|
+
name: 'templateId',
|
|
278
|
+
message: 'Select a template:',
|
|
279
|
+
choices,
|
|
280
|
+
pageSize: 20,
|
|
281
|
+
},
|
|
282
|
+
]);
|
|
283
|
+
if (templateId) {
|
|
284
|
+
await useTemplate(templateId, options);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
spinner.fail('Failed to fetch templates');
|
|
289
|
+
console.error(chalk.red(error.message));
|
|
290
|
+
process.exit(1);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function showHelp() {
|
|
294
|
+
console.log(`
|
|
295
|
+
${chalk.cyan.bold('ralph-starter template')} - Browse and use project templates
|
|
296
|
+
|
|
297
|
+
${chalk.bold('Commands:')}
|
|
298
|
+
list List all available templates
|
|
299
|
+
preview <name> Preview a template's content
|
|
300
|
+
use <name> Use a template to start a new project
|
|
301
|
+
browse Interactive template browser
|
|
302
|
+
|
|
303
|
+
${chalk.bold('Options:')}
|
|
304
|
+
--category <name> Filter by category (web-dev, blockchain, devops, mobile, tools)
|
|
305
|
+
--refresh Force refresh the cache
|
|
306
|
+
--auto Skip confirmation prompts
|
|
307
|
+
--output-dir <path> Directory to create the project in
|
|
308
|
+
|
|
309
|
+
${chalk.bold('Examples:')}
|
|
310
|
+
ralph-starter template list
|
|
311
|
+
ralph-starter template list --category web-dev
|
|
312
|
+
ralph-starter template preview nextjs-saas
|
|
313
|
+
ralph-starter template use landing-page
|
|
314
|
+
ralph-starter template use cli-tool --output-dir ~/projects/my-cli
|
|
315
|
+
ralph-starter template browse
|
|
316
|
+
|
|
317
|
+
${chalk.bold('Template Source:')}
|
|
318
|
+
Templates are fetched from: ${chalk.dim('github.com/rubenmarcus/ralph-templates')}
|
|
319
|
+
Cached locally at: ${chalk.dim(CACHE_DIR)}
|
|
320
|
+
`);
|
|
321
|
+
}
|
|
322
|
+
export async function templateCommand(action, args, options = {}) {
|
|
323
|
+
switch (action) {
|
|
324
|
+
case 'list':
|
|
325
|
+
case 'ls':
|
|
326
|
+
await listTemplates({ category: options.category, refresh: options.refresh });
|
|
327
|
+
break;
|
|
328
|
+
case 'preview':
|
|
329
|
+
if (args.length < 1) {
|
|
330
|
+
console.error(chalk.red('Usage: ralph-starter template preview <name>'));
|
|
331
|
+
process.exit(1);
|
|
332
|
+
}
|
|
333
|
+
await previewTemplate(args[0]);
|
|
334
|
+
break;
|
|
335
|
+
case 'use':
|
|
336
|
+
if (args.length < 1) {
|
|
337
|
+
console.error(chalk.red('Usage: ralph-starter template use <name>'));
|
|
338
|
+
process.exit(1);
|
|
339
|
+
}
|
|
340
|
+
await useTemplate(args[0], options);
|
|
341
|
+
break;
|
|
342
|
+
case 'browse':
|
|
343
|
+
await browseTemplates(options);
|
|
344
|
+
break;
|
|
345
|
+
case 'help':
|
|
346
|
+
case undefined:
|
|
347
|
+
showHelp();
|
|
348
|
+
break;
|
|
349
|
+
default:
|
|
350
|
+
// Treat as template name for quick use
|
|
351
|
+
await useTemplate(action, options);
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAA0B,UAAU,EAAE,MAAM,UAAU,CAAC;AAE9D,MAAM,kBAAkB,GAAG,oEAAoE,CAAC;AAChG,MAAM,kBAAkB,GAAG,GAAG,kBAAkB,iBAAiB,CAAC;AAClE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;AACvE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;AA6BnD,SAAS,cAAc;IACrB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,UAAU,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAkB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC5C,OAAO,GAAG,GAAG,iBAAiB,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,cAAc,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAkB;QAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,OAAO;KACR,CAAC;IACF,aAAa,CAAC,oBAAoB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAQ,GAAG,IAAI;IAC1C,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IAEzC,oBAAoB;IACpB,IAAI,QAAQ,IAAI,YAAY,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,QAAQ,GAAsB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE1D,gBAAgB;IAChB,cAAc,EAAE,CAAC;IACjB,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEpC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,QAAkB,EAAE,QAAQ,GAAG,IAAI;IACrE,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEpD,oBAAoB;IACpB,IAAI,QAAQ,IAAI,YAAY,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,GAAG,kBAAkB,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtC,gBAAgB;IAChB,cAAc,EAAE,CAAC;IACjB,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAElC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;QACxC,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;QACzC,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;QACtC;YACE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAAiD;IAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,8BAA8B;QAC9B,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC1D,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC/D,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,mBAAmB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBAClD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACvD,CAAC;YACD,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,UAAkB;IAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAErE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,UAAkB,EAAE,OAA0B;IACvE,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAErE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACrD,OAAO,CAAC,OAAO,CAAC,qBAAqB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,yCAAyC;QACzC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,2CAA2C;oBACpD,OAAO,EAAE,IAAI;iBACd;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,cAAc,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,UAAU,KAAK,CAAC,CAAC;QACjE,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAErC,6BAA6B;QAC7B,gDAAgD;QAChD,MAAM,UAAU,CAAC,SAAS,EAAE;YAC1B,GAAG,OAAO;YACV,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA0B;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,oCAAoC;QACpC,0DAA0D;QAC1D,MAAM,OAAO,GAAU,EAAE,CAAC;QAE1B,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC/E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAErC,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE5E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,IAAI,KAAK,MAAM,QAAQ,CAAC,WAAW,EAAE;oBACzD,KAAK,EAAE,QAAQ,CAAC,EAAE;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAEvD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC3C;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,oBAAoB;gBAC7B,OAAO;gBACP,QAAQ,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;EACZ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC;;EAEzC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;;EAMvB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;;;;;;EAMtB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;;;;EAQvB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;gCACA,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC;uBAC5D,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;CAC1C,CAAC,CAAC;AACH,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA0B,EAC1B,IAAc,EACd,UAAkC,EAAE;IAEpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACP,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,MAAM;QAER,KAAK,SAAS;YACZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;gBACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM;QAER,KAAK,KAAK;YACR,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpC,MAAM;QAER,KAAK,QAAQ;YACX,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;YAC/B,MAAM;QAER,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS;YACZ,QAAQ,EAAE,CAAC;YACX,MAAM;QAER;YACE,uCAAuC;YACvC,MAAM,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,MAAM;IACV,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,38 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { EventEmitter } from 'node:events';
|
|
1
3
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
4
|
import { checkAgentAvailable, detectAvailableAgents, detectBestAgent, runAgent, } from '../agents.js';
|
|
3
5
|
// Mock execa
|
|
4
6
|
vi.mock('execa', () => ({
|
|
5
7
|
execa: vi.fn(),
|
|
6
8
|
}));
|
|
9
|
+
// Mock spawn from node:child_process
|
|
10
|
+
vi.mock('node:child_process', () => ({
|
|
11
|
+
spawn: vi.fn(),
|
|
12
|
+
}));
|
|
7
13
|
import { execa } from 'execa';
|
|
8
14
|
const mockExeca = vi.mocked(execa);
|
|
15
|
+
const mockSpawn = vi.mocked(spawn);
|
|
16
|
+
// Helper to create a mock child process
|
|
17
|
+
function createMockChildProcess(exitCode, stdout = '', stderr = '') {
|
|
18
|
+
const proc = new EventEmitter();
|
|
19
|
+
const stdoutEmitter = new EventEmitter();
|
|
20
|
+
const stderrEmitter = new EventEmitter();
|
|
21
|
+
proc.stdout = stdoutEmitter;
|
|
22
|
+
proc.stderr = stderrEmitter;
|
|
23
|
+
proc.kill = vi.fn();
|
|
24
|
+
// Schedule emitting data and close
|
|
25
|
+
setTimeout(() => {
|
|
26
|
+
if (stdout) {
|
|
27
|
+
stdoutEmitter.emit('data', Buffer.from(stdout));
|
|
28
|
+
}
|
|
29
|
+
if (stderr) {
|
|
30
|
+
stderrEmitter.emit('data', Buffer.from(stderr));
|
|
31
|
+
}
|
|
32
|
+
proc.emit('close', exitCode);
|
|
33
|
+
}, 0);
|
|
34
|
+
return proc;
|
|
35
|
+
}
|
|
9
36
|
describe('agents', () => {
|
|
10
37
|
beforeEach(() => {
|
|
11
38
|
vi.clearAllMocks();
|
|
@@ -23,7 +50,7 @@ describe('agents', () => {
|
|
|
23
50
|
});
|
|
24
51
|
const result = await checkAgentAvailable('claude-code');
|
|
25
52
|
expect(result).toBe(true);
|
|
26
|
-
expect(mockExeca).toHaveBeenCalledWith('claude', ['--version']);
|
|
53
|
+
expect(mockExeca).toHaveBeenCalledWith('claude', ['--version'], { timeout: 5000 });
|
|
27
54
|
});
|
|
28
55
|
it('should return false when agent command fails', async () => {
|
|
29
56
|
mockExeca.mockRejectedValueOnce(new Error('Command not found'));
|
|
@@ -80,48 +107,41 @@ describe('agents', () => {
|
|
|
80
107
|
available: true,
|
|
81
108
|
};
|
|
82
109
|
it('should run claude-code with correct arguments', async () => {
|
|
83
|
-
|
|
84
|
-
stdout: 'Task completed',
|
|
85
|
-
stderr: '',
|
|
86
|
-
exitCode: 0,
|
|
87
|
-
});
|
|
110
|
+
mockSpawn.mockReturnValueOnce(createMockChildProcess(0, 'Task completed\n'));
|
|
88
111
|
const result = await runAgent(mockAgent, {
|
|
89
112
|
task: 'Fix the bug',
|
|
90
113
|
cwd: '/test/dir',
|
|
91
114
|
});
|
|
92
|
-
// Claude Code uses
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
115
|
+
// Claude Code uses -p for prompt, --verbose, --output-format stream-json
|
|
116
|
+
expect(mockSpawn).toHaveBeenCalledWith('claude', expect.arrayContaining([
|
|
117
|
+
'-p',
|
|
118
|
+
'Fix the bug',
|
|
119
|
+
'--verbose',
|
|
120
|
+
'--output-format',
|
|
121
|
+
'stream-json',
|
|
122
|
+
]), expect.objectContaining({
|
|
123
|
+
cwd: '/test/dir',
|
|
96
124
|
}));
|
|
97
125
|
expect(result.output).toContain('Task completed');
|
|
98
126
|
expect(result.exitCode).toBe(0);
|
|
99
127
|
});
|
|
100
128
|
it('should add auto flag when specified', async () => {
|
|
101
|
-
|
|
102
|
-
stdout: '',
|
|
103
|
-
stderr: '',
|
|
104
|
-
exitCode: 0,
|
|
105
|
-
});
|
|
129
|
+
mockSpawn.mockReturnValueOnce(createMockChildProcess(0));
|
|
106
130
|
await runAgent(mockAgent, {
|
|
107
131
|
task: 'Task',
|
|
108
132
|
cwd: '/test',
|
|
109
133
|
auto: true,
|
|
110
134
|
});
|
|
111
|
-
expect(
|
|
135
|
+
expect(mockSpawn).toHaveBeenCalledWith('claude', expect.arrayContaining(['--dangerously-skip-permissions']), expect.any(Object));
|
|
112
136
|
});
|
|
113
137
|
it('should add max-turns flag when specified', async () => {
|
|
114
|
-
|
|
115
|
-
stdout: '',
|
|
116
|
-
stderr: '',
|
|
117
|
-
exitCode: 0,
|
|
118
|
-
});
|
|
138
|
+
mockSpawn.mockReturnValueOnce(createMockChildProcess(0));
|
|
119
139
|
await runAgent(mockAgent, {
|
|
120
140
|
task: 'Task',
|
|
121
141
|
cwd: '/test',
|
|
122
142
|
maxTurns: 10,
|
|
123
143
|
});
|
|
124
|
-
expect(
|
|
144
|
+
expect(mockSpawn).toHaveBeenCalledWith('claude', expect.arrayContaining(['--max-turns', '10']), expect.any(Object));
|
|
125
145
|
});
|
|
126
146
|
it('should handle cursor agent arguments', async () => {
|
|
127
147
|
const cursorAgent = {
|
|
@@ -130,16 +150,12 @@ describe('agents', () => {
|
|
|
130
150
|
command: 'cursor',
|
|
131
151
|
available: true,
|
|
132
152
|
};
|
|
133
|
-
|
|
134
|
-
stdout: '',
|
|
135
|
-
stderr: '',
|
|
136
|
-
exitCode: 0,
|
|
137
|
-
});
|
|
153
|
+
mockSpawn.mockReturnValueOnce(createMockChildProcess(0));
|
|
138
154
|
await runAgent(cursorAgent, {
|
|
139
155
|
task: 'Task',
|
|
140
156
|
cwd: '/test',
|
|
141
157
|
});
|
|
142
|
-
expect(
|
|
158
|
+
expect(mockSpawn).toHaveBeenCalledWith('cursor', ['--agent', 'Task'], expect.any(Object));
|
|
143
159
|
});
|
|
144
160
|
it('should handle codex agent arguments', async () => {
|
|
145
161
|
const codexAgent = {
|
|
@@ -148,24 +164,32 @@ describe('agents', () => {
|
|
|
148
164
|
command: 'codex',
|
|
149
165
|
available: true,
|
|
150
166
|
};
|
|
151
|
-
|
|
152
|
-
stdout: '',
|
|
153
|
-
stderr: '',
|
|
154
|
-
exitCode: 0,
|
|
155
|
-
});
|
|
167
|
+
mockSpawn.mockReturnValueOnce(createMockChildProcess(0));
|
|
156
168
|
await runAgent(codexAgent, {
|
|
157
169
|
task: 'Task',
|
|
158
170
|
cwd: '/test',
|
|
159
171
|
auto: true,
|
|
160
172
|
});
|
|
161
|
-
expect(
|
|
173
|
+
expect(mockSpawn).toHaveBeenCalledWith('codex', expect.arrayContaining(['-p', 'Task', '--auto-approve']), expect.any(Object));
|
|
162
174
|
});
|
|
163
175
|
it('should handle execution errors', async () => {
|
|
164
|
-
|
|
165
|
-
const
|
|
176
|
+
// Create a mock process that emits an error
|
|
177
|
+
const proc = new EventEmitter();
|
|
178
|
+
const stdoutEmitter = new EventEmitter();
|
|
179
|
+
const stderrEmitter = new EventEmitter();
|
|
180
|
+
proc.stdout = stdoutEmitter;
|
|
181
|
+
proc.stderr = stderrEmitter;
|
|
182
|
+
proc.kill = vi.fn();
|
|
183
|
+
mockSpawn.mockReturnValueOnce(proc);
|
|
184
|
+
const resultPromise = runAgent(mockAgent, {
|
|
166
185
|
task: 'Task',
|
|
167
186
|
cwd: '/test',
|
|
168
187
|
});
|
|
188
|
+
// Emit error after a short delay
|
|
189
|
+
setTimeout(() => {
|
|
190
|
+
proc.emit('error', new Error('Command failed'));
|
|
191
|
+
}, 0);
|
|
192
|
+
const result = await resultPromise;
|
|
169
193
|
expect(result.exitCode).toBe(1);
|
|
170
194
|
expect(result.output).toContain('Command failed');
|
|
171
195
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.test.js","sourceRoot":"","sources":["../../../src/loop/__tests__/agents.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAEL,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,QAAQ,GACT,MAAM,cAAc,CAAC;AAEtB,aAAa;AACb,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEnC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,SAAS,CAAC,qBAAqB,CAAC;gBAC9B,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,CAAC;aACL,CAAC,CAAC;YAEV,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.test.js","sourceRoot":"","sources":["../../../src/loop/__tests__/agents.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/loop/agents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/loop/agents.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AA8BD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAU3E;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAgB9D;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAc7D;AAED,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA4J/C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAUtD"}
|