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.
@@ -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
- mockExeca.mockResolvedValueOnce({
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 --print, --verbose, --output-format stream-json
93
- // and passes prompt via stdin (input option)
94
- expect(mockExeca).toHaveBeenCalledWith('claude', expect.arrayContaining(['--print', '--verbose', '--output-format', 'stream-json']), expect.objectContaining({
95
- input: 'Fix the bug',
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
- mockExeca.mockResolvedValueOnce({
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(mockExeca).toHaveBeenCalledWith('claude', expect.arrayContaining(['--dangerously-skip-permissions']), expect.any(Object));
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
- mockExeca.mockResolvedValueOnce({
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(mockExeca).toHaveBeenCalledWith('claude', expect.arrayContaining(['--max-turns', '10']), expect.any(Object));
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
- mockExeca.mockResolvedValueOnce({
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(mockExeca).toHaveBeenCalledWith('cursor', ['--agent', 'Task'], expect.any(Object));
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
- mockExeca.mockResolvedValueOnce({
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(mockExeca).toHaveBeenCalledWith('codex', expect.arrayContaining(['-p', 'Task', '--auto-approve']), expect.any(Object));
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
- mockExeca.mockRejectedValueOnce(new Error('Command failed'));
165
- const result = await runAgent(mockAgent, {
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":"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"}
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":"AAGA,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,CAkH/C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAUtD"}
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"}