@bradygaster/squad-cli 0.9.5-insider.1 → 0.9.5-insider.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/cli/commands/preset.d.ts +24 -0
  2. package/dist/cli/commands/preset.d.ts.map +1 -0
  3. package/dist/cli/commands/preset.js +352 -0
  4. package/dist/cli/commands/preset.js.map +1 -0
  5. package/dist/cli/commands/watch/capabilities/board.d.ts.map +1 -1
  6. package/dist/cli/commands/watch/capabilities/board.js +7 -10
  7. package/dist/cli/commands/watch/capabilities/board.js.map +1 -1
  8. package/dist/cli/commands/watch/capabilities/fleet-dispatch.d.ts.map +1 -1
  9. package/dist/cli/commands/watch/capabilities/fleet-dispatch.js +7 -13
  10. package/dist/cli/commands/watch/capabilities/fleet-dispatch.js.map +1 -1
  11. package/dist/cli/commands/watch/capabilities/self-pull.d.ts.map +1 -1
  12. package/dist/cli/commands/watch/capabilities/self-pull.js +9 -10
  13. package/dist/cli/commands/watch/capabilities/self-pull.js.map +1 -1
  14. package/dist/cli/commands/watch/capabilities/two-pass.d.ts.map +1 -1
  15. package/dist/cli/commands/watch/capabilities/two-pass.js +5 -7
  16. package/dist/cli/commands/watch/capabilities/two-pass.js.map +1 -1
  17. package/dist/cli/commands/watch/types.d.ts +1 -5
  18. package/dist/cli/commands/watch/types.d.ts.map +1 -1
  19. package/dist/cli/core/gh-cli.d.ts.map +1 -1
  20. package/dist/cli/core/gh-cli.js +6 -7
  21. package/dist/cli/core/gh-cli.js.map +1 -1
  22. package/dist/cli/core/init.d.ts +0 -10
  23. package/dist/cli/core/init.d.ts.map +1 -1
  24. package/dist/cli/core/init.js +0 -53
  25. package/dist/cli/core/init.js.map +1 -1
  26. package/dist/cli/index.d.ts +0 -2
  27. package/dist/cli/index.d.ts.map +1 -1
  28. package/dist/cli/index.js +0 -2
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli-entry.js +45 -6
  31. package/dist/cli-entry.js.map +1 -1
  32. package/package.json +4 -4
  33. package/dist/cli/commands/skill.d.ts +0 -31
  34. package/dist/cli/commands/skill.d.ts.map +0 -1
  35. package/dist/cli/commands/skill.js +0 -496
  36. package/dist/cli/commands/skill.js.map +0 -1
  37. package/dist/cli/commands/watch/agent-spawn.d.ts +0 -62
  38. package/dist/cli/commands/watch/agent-spawn.d.ts.map +0 -1
  39. package/dist/cli/commands/watch/agent-spawn.js +0 -127
  40. package/dist/cli/commands/watch/agent-spawn.js.map +0 -1
@@ -1,496 +0,0 @@
1
- /**
2
- * Skill command — APM (Agent Package Manager) integration
3
- *
4
- * squad skill publish [<name>] — export a skill to APM format
5
- * squad skill install <name> — install a skill from APM registry
6
- * squad skill list — list installed skills
7
- *
8
- * APM is package.json for AI agent context: https://github.com/microsoft/apm
9
- */
10
- import { readFile, writeFile, mkdir, readdir } from 'node:fs/promises';
11
- import { existsSync } from 'node:fs';
12
- import { join, basename } from 'node:path';
13
- import { execFile } from 'node:child_process';
14
- import { promisify } from 'node:util';
15
- import { success, warn, info, DIM, BOLD, RESET } from '../core/output.js';
16
- import { fatal } from '../core/errors.js';
17
- import { detectSquadDir } from '../core/detect-squad-dir.js';
18
- import { ghAvailable } from '../core/gh-cli.js';
19
- const execFileAsync = promisify(execFile);
20
- // ── Helpers ───────────────────────────────────────────────────────────────────
21
- /** Parse `---\nkey: value\n---` front-matter from a Markdown file. */
22
- function parseFrontMatter(content) {
23
- const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
24
- if (!match)
25
- return {};
26
- const result = {};
27
- for (const line of match[1].split('\n')) {
28
- const colon = line.indexOf(':');
29
- if (colon === -1)
30
- continue;
31
- const key = line.slice(0, colon).trim();
32
- const value = line.slice(colon + 1).trim().replace(/^["']|["']$/g, '');
33
- result[key] = value;
34
- }
35
- return result;
36
- }
37
- /** Read the project name from package.json, falling back to directory name. */
38
- async function readProjectName(dest) {
39
- const pkgPath = join(dest, 'package.json');
40
- if (existsSync(pkgPath)) {
41
- try {
42
- const pkg = JSON.parse(await readFile(pkgPath, 'utf8'));
43
- if (typeof pkg.name === 'string' && pkg.name)
44
- return pkg.name;
45
- }
46
- catch {
47
- // ignore
48
- }
49
- }
50
- return basename(dest);
51
- }
52
- /**
53
- * Resolve the skills directory, preferring .copilot/skills/ over .squad/skills/.
54
- * Returns { dir, relPrefix } where relPrefix is the display path (e.g. '.copilot/skills').
55
- */
56
- function resolveSkillsDir(dest) {
57
- const copilotSkills = join(dest, '.copilot', 'skills');
58
- if (existsSync(copilotSkills)) {
59
- return { dir: copilotSkills, relPrefix: '.copilot/skills' };
60
- }
61
- const squadDirInfo = detectSquadDir(dest);
62
- const squadSkills = join(squadDirInfo.path, 'skills');
63
- if (existsSync(squadSkills)) {
64
- return { dir: squadSkills, relPrefix: `${squadDirInfo.name}/skills` };
65
- }
66
- // Default to .copilot/skills/ for new installs
67
- return { dir: copilotSkills, relPrefix: '.copilot/skills' };
68
- }
69
- /** Collect all skills from the skills directory. */
70
- async function collectSkills(skillsDir, relPrefix) {
71
- if (!existsSync(skillsDir))
72
- return [];
73
- const skills = [];
74
- try {
75
- const entries = await readdir(skillsDir);
76
- for (const entry of entries) {
77
- const skillFile = join(skillsDir, entry, 'skill.md');
78
- if (!existsSync(skillFile))
79
- continue;
80
- const content = await readFile(skillFile, 'utf8');
81
- const fm = parseFrontMatter(content);
82
- skills.push({
83
- name: fm['name'] ?? entry,
84
- description: fm['description'],
85
- path: `${relPrefix}/${entry}/skill.md`,
86
- version: fm['version'],
87
- source: fm['source'],
88
- });
89
- }
90
- }
91
- catch {
92
- // ignore read errors
93
- }
94
- return skills;
95
- }
96
- // ── Sub-commands ──────────────────────────────────────────────────────────────
97
- /**
98
- * squad skill publish [<name>]
99
- *
100
- * Exports a skill (or all skills) to APM-compatible format.
101
- * Creates/updates apm.yml at the project root.
102
- */
103
- async function publish(dest, skillName) {
104
- const { dir: skillsDir, relPrefix } = resolveSkillsDir(dest);
105
- if (!existsSync(skillsDir)) {
106
- fatal('No skills directory found. Create .copilot/skills/ first.');
107
- }
108
- const projectName = await readProjectName(dest);
109
- if (skillName) {
110
- // Publish a single named skill
111
- const skillFile = join(skillsDir, skillName, 'skill.md');
112
- if (!existsSync(skillFile)) {
113
- fatal(`Skill '${skillName}' not found at ${relPrefix}/${skillName}/skill.md`);
114
- }
115
- const content = await readFile(skillFile, 'utf8');
116
- const fm = parseFrontMatter(content);
117
- // Build the skill's own apm.yml inside its directory
118
- const apmSkillPath = join(skillsDir, skillName, 'apm.yml');
119
- const skillApm = [
120
- `name: ${fm['name'] ?? skillName}`,
121
- `version: ${fm['version'] ?? '1.0.0'}`,
122
- fm['description'] ? `description: "${fm['description']}"` : null,
123
- ``,
124
- `skills:`,
125
- ` - name: ${fm['name'] ?? skillName}`,
126
- ` path: skill.md`,
127
- fm['description'] ? ` description: "${fm['description']}"` : null,
128
- ]
129
- .filter(l => l !== null)
130
- .join('\n');
131
- await writeFile(apmSkillPath, skillApm + '\n', 'utf8');
132
- success(`Published skill '${skillName}' to ${relPrefix}/${skillName}/apm.yml`);
133
- info(`${DIM}APM format ready — push to GitHub to share via APM registry${RESET}`);
134
- return;
135
- }
136
- // Publish all skills → update project-level apm.yml
137
- const skills = await collectSkills(skillsDir, relPrefix);
138
- const apmPath = join(dest, 'apm.yml');
139
- // Read existing apm.yml to preserve manually-added fields
140
- let existing = {};
141
- if (existsSync(apmPath)) {
142
- try {
143
- // Simple YAML parse — only top-level fields we care about
144
- const raw = await readFile(apmPath, 'utf8');
145
- if (raw.includes('instructions:')) {
146
- // Preserve instructions block (just keep existing file, re-emit skills section)
147
- info(`${DIM}Updating skills section in existing apm.yml${RESET}`);
148
- }
149
- existing = { name: projectName };
150
- }
151
- catch {
152
- existing = {};
153
- }
154
- }
155
- const lines = [
156
- `# apm.yml — Agent Package Manager manifest`,
157
- `# See: https://github.com/microsoft/apm`,
158
- ``,
159
- `name: ${existing.name ?? projectName}`,
160
- `version: 1.0.0`,
161
- ``,
162
- `# Skills exported from ${relPrefix}/`,
163
- `skills:`,
164
- ...skills.map(s => [
165
- ` - name: ${s.name}`,
166
- s.description ? ` description: "${s.description}"` : null,
167
- ` path: ${s.path}`,
168
- s.version ? ` version: ${s.version}` : null,
169
- ]
170
- .filter(l => l !== null)
171
- .join('\n')),
172
- ``,
173
- `# Instruction files deployed by 'apm install'`,
174
- `instructions:`,
175
- ` - path: .squad/copilot-instructions.md`,
176
- ` target: .github/copilot-instructions.md`,
177
- ``,
178
- `# Prompts deployed by 'apm install'`,
179
- `prompts:`,
180
- ` - path: ${relPrefix}/*/skill.md`,
181
- ` target: .github/prompts/`,
182
- ];
183
- await writeFile(apmPath, lines.join('\n') + '\n', 'utf8');
184
- if (skills.length > 0) {
185
- success(`Published ${skills.length} skill(s) to apm.yml`);
186
- for (const s of skills) {
187
- info(` ${DIM}• ${s.name}${RESET}`);
188
- }
189
- }
190
- else {
191
- success(`Created apm.yml (no skills found yet — add skills to ${relPrefix}/)`);
192
- }
193
- info(`${DIM}Run 'apm publish' to push to the APM registry${RESET}`);
194
- }
195
- /**
196
- * squad skill install <source>
197
- *
198
- * Installs a skill from an APM source.
199
- * Source formats:
200
- * owner/repo — install all skills from a GitHub repo
201
- * owner/repo/skill-name — install a specific skill
202
- * https://... — URL to a raw skill.md
203
- */
204
- async function install(dest, source) {
205
- if (!source) {
206
- fatal('Usage: squad skill install <owner/repo>[/<skill-name>] | <url>');
207
- }
208
- const { dir: skillsDir, relPrefix } = resolveSkillsDir(dest);
209
- if (!existsSync(skillsDir)) {
210
- await mkdir(skillsDir, { recursive: true });
211
- }
212
- // URL-based install
213
- if (source.startsWith('http://') || source.startsWith('https://')) {
214
- await installFromUrl(source, skillsDir, relPrefix);
215
- return;
216
- }
217
- // GitHub-based: owner/repo or owner/repo/skill-name
218
- const parts = source.split('/');
219
- if (parts.length < 2) {
220
- fatal('Invalid source. Use: owner/repo, owner/repo/skill-name, or a URL');
221
- }
222
- const owner = parts[0];
223
- const repo = parts[1];
224
- const skillFilter = parts.length >= 3 ? parts.slice(2).join('/') : undefined;
225
- if (!ghAvailable()) {
226
- fatal('GitHub CLI (gh) is required for APM install. Install from https://cli.github.com/');
227
- }
228
- info(`${DIM}Fetching skill(s) from ${owner}/${repo}...${RESET}`);
229
- // Try to find skills via gh api — look for apm.yml or .copilot/skills/
230
- await installFromGitHub(owner, repo, skillFilter, skillsDir, dest);
231
- }
232
- async function installFromUrl(url, skillsDir, relPrefix) {
233
- let content;
234
- try {
235
- // Node 18+ has built-in fetch
236
- const res = await fetch(url);
237
- if (!res.ok) {
238
- fatal(`Failed to fetch ${url}: ${res.status} ${res.statusText}`);
239
- }
240
- content = await res.text();
241
- }
242
- catch (err) {
243
- fatal(`Failed to fetch ${url}: ${err.message}`);
244
- return;
245
- }
246
- // Derive skill name from URL
247
- const urlName = url
248
- .split('/')
249
- .filter(Boolean)
250
- .slice(-2, -1)[0] ??
251
- 'imported-skill';
252
- const skillName = urlName.replace(/[^a-z0-9-_]/gi, '-').toLowerCase();
253
- const skillDir = join(skillsDir, skillName);
254
- await mkdir(skillDir, { recursive: true });
255
- await writeFile(join(skillDir, 'skill.md'), content, 'utf8');
256
- success(`Installed skill '${skillName}' from URL`);
257
- info(` ${DIM}Location: ${relPrefix}/${skillName}/skill.md${RESET}`);
258
- }
259
- async function installFromGitHub(owner, repo, skillFilter, skillsDir, dest) {
260
- // First, try to read the apm.yml from the repo to discover skills
261
- let apmContent = null;
262
- try {
263
- const { stdout } = await execFileAsync('gh', [
264
- 'api',
265
- `repos/${owner}/${repo}/contents/apm.yml`,
266
- '--jq', '.content',
267
- ]);
268
- apmContent = Buffer.from(stdout.trim(), 'base64').toString('utf8');
269
- }
270
- catch {
271
- // No apm.yml — fall back to scanning skills directories
272
- }
273
- if (!apmContent) {
274
- // Fall back: try skills directories via API
275
- await installSkillsFromSquadDir(owner, repo, skillFilter, skillsDir);
276
- return;
277
- }
278
- // Parse the apm.yml to find skill paths
279
- const skillPaths = [];
280
- const lines = apmContent.split('\n');
281
- let inSkills = false;
282
- let currentSkill = {};
283
- for (const line of lines) {
284
- if (line.trim() === 'skills:') {
285
- inSkills = true;
286
- continue;
287
- }
288
- if (inSkills && line.match(/^[a-z]/i) && !line.startsWith(' ')) {
289
- // New top-level key — exit skills section
290
- if (currentSkill.name && currentSkill.path)
291
- skillPaths.push(currentSkill);
292
- currentSkill = {};
293
- inSkills = false;
294
- }
295
- if (inSkills) {
296
- const nameMatch = line.match(/^\s+- name:\s*(.+)$/);
297
- const pathMatch = line.match(/^\s+path:\s*(.+)$/);
298
- if (nameMatch) {
299
- if (currentSkill.name && currentSkill.path)
300
- skillPaths.push(currentSkill);
301
- currentSkill = { name: nameMatch[1].trim() };
302
- }
303
- if (pathMatch)
304
- currentSkill.path = pathMatch[1].trim();
305
- }
306
- }
307
- if (currentSkill.name && currentSkill.path)
308
- skillPaths.push(currentSkill);
309
- // Filter by skill name if specified
310
- const toInstall = skillFilter
311
- ? skillPaths.filter(s => s.name === skillFilter || s.path.includes(skillFilter))
312
- : skillPaths;
313
- if (toInstall.length === 0) {
314
- if (skillFilter) {
315
- fatal(`Skill '${skillFilter}' not found in ${owner}/${repo}'s apm.yml`);
316
- }
317
- else {
318
- warn(`No skills declared in ${owner}/${repo}'s apm.yml`);
319
- return;
320
- }
321
- }
322
- let installed = 0;
323
- for (const skill of toInstall) {
324
- try {
325
- const { stdout: rawContent } = await execFileAsync('gh', [
326
- 'api',
327
- `repos/${owner}/${repo}/contents/${skill.path}`,
328
- '--jq', '.content',
329
- ]);
330
- const content = Buffer.from(rawContent.trim(), 'base64').toString('utf8');
331
- const skillDir = join(skillsDir, skill.name);
332
- await mkdir(skillDir, { recursive: true });
333
- await writeFile(join(skillDir, 'skill.md'), content, 'utf8');
334
- // Write a source metadata file so we can track origin
335
- const meta = {
336
- source: `${owner}/${repo}`,
337
- path: skill.path,
338
- installed_at: new Date().toISOString(),
339
- };
340
- await writeFile(join(skillDir, '.apm-source.json'), JSON.stringify(meta, null, 2) + '\n', 'utf8');
341
- success(`Installed skill '${skill.name}'`);
342
- info(` ${DIM}Source: ${owner}/${repo}${skill.path}${RESET}`);
343
- installed++;
344
- }
345
- catch (err) {
346
- warn(`Failed to install '${skill.name}': ${err.message}`);
347
- }
348
- }
349
- if (installed > 0) {
350
- info(`\n${DIM}Run 'squad skill publish' to refresh apm.yml with newly installed skills${RESET}`);
351
- }
352
- }
353
- async function installSkillsFromSquadDir(owner, repo, skillFilter, skillsDir) {
354
- // Try .copilot/skills/ (standard) then .squad/skills/ (legacy) then bare skills/
355
- const candidates = ['.copilot/skills', '.squad/skills', 'skills'];
356
- let entries = [];
357
- for (const candidate of candidates) {
358
- try {
359
- const { stdout } = await execFileAsync('gh', [
360
- 'api',
361
- `repos/${owner}/${repo}/contents/${candidate}`,
362
- '--jq', '[.[] | {name: .name, path: .path, type: .type}]',
363
- ]);
364
- entries = JSON.parse(stdout);
365
- break;
366
- }
367
- catch {
368
- continue;
369
- }
370
- }
371
- if (entries.length === 0) {
372
- fatal(`No skills directory found in ${owner}/${repo}. The repo may not use APM or Squad conventions.`);
373
- }
374
- const dirs = entries.filter(e => e.type === 'dir');
375
- const toInstall = skillFilter ? dirs.filter(d => d.name === skillFilter) : dirs;
376
- if (toInstall.length === 0) {
377
- if (skillFilter) {
378
- fatal(`Skill '${skillFilter}' not found in ${owner}/${repo}`);
379
- }
380
- else {
381
- warn(`No skill directories found in ${owner}/${repo}`);
382
- return;
383
- }
384
- }
385
- let installed = 0;
386
- for (const dir of toInstall) {
387
- const skillFilePath = `${dir.path}/skill.md`;
388
- try {
389
- const { stdout: rawContent } = await execFileAsync('gh', [
390
- 'api',
391
- `repos/${owner}/${repo}/contents/${skillFilePath}`,
392
- '--jq', '.content',
393
- ]);
394
- const content = Buffer.from(rawContent.trim(), 'base64').toString('utf8');
395
- const skillDir = join(skillsDir, dir.name);
396
- await mkdir(skillDir, { recursive: true });
397
- await writeFile(join(skillDir, 'skill.md'), content, 'utf8');
398
- const meta = {
399
- source: `${owner}/${repo}`,
400
- path: skillFilePath,
401
- installed_at: new Date().toISOString(),
402
- };
403
- await writeFile(join(skillDir, '.apm-source.json'), JSON.stringify(meta, null, 2) + '\n', 'utf8');
404
- success(`Installed skill '${dir.name}'`);
405
- info(` ${DIM}Source: ${owner}/${repo}/${skillFilePath}${RESET}`);
406
- installed++;
407
- }
408
- catch {
409
- warn(`Skipped '${dir.name}' — no skill.md found`);
410
- }
411
- }
412
- if (installed > 0) {
413
- info(`\n${DIM}Run 'squad skill publish' to refresh apm.yml${RESET}`);
414
- }
415
- }
416
- /**
417
- * squad skill list
418
- *
419
- * Lists installed skills from .copilot/skills/ (or legacy .squad/skills/).
420
- */
421
- async function listSkills(dest) {
422
- const { dir: skillsDir, relPrefix } = resolveSkillsDir(dest);
423
- if (!existsSync(skillsDir)) {
424
- info('No skills directory found. Run "squad init" first or create .copilot/skills/');
425
- return;
426
- }
427
- const skills = await collectSkills(skillsDir, relPrefix);
428
- if (skills.length === 0) {
429
- info(`${DIM}No skills installed yet.${RESET}`);
430
- info(`Install a skill: squad skill install <owner/repo>`);
431
- return;
432
- }
433
- console.log(`\n${BOLD}Installed Skills${RESET}\n`);
434
- for (const skill of skills) {
435
- const metaPath = join(skillsDir, skill.name, '.apm-source.json');
436
- let sourceNote = '';
437
- if (existsSync(metaPath)) {
438
- try {
439
- const meta = JSON.parse(await readFile(metaPath, 'utf8'));
440
- sourceNote = ` ${DIM}(from ${meta.source})${RESET}`;
441
- }
442
- catch {
443
- // ignore
444
- }
445
- }
446
- console.log(` ${BOLD}${skill.name}${RESET}${sourceNote}`);
447
- if (skill.description) {
448
- console.log(` ${DIM}${skill.description}${RESET}`);
449
- }
450
- }
451
- console.log();
452
- }
453
- // ── Main export ───────────────────────────────────────────────────────────────
454
- /**
455
- * Entry point for `squad skill` command.
456
- *
457
- * @param dest - Working directory (usually process.cwd())
458
- * @param args - Remaining args after `squad skill`
459
- */
460
- export async function runSkill(dest, args) {
461
- const subCmd = args[0];
462
- if (!subCmd || subCmd === 'help' || subCmd === '--help') {
463
- console.log(`\n${BOLD}squad skill${RESET} — APM (Agent Package Manager) integration\n`);
464
- console.log(`Usage:`);
465
- console.log(` squad skill publish [<skill-name>] Export skill(s) to APM format (apm.yml)`);
466
- console.log(` squad skill install <source> Install from APM registry`);
467
- console.log(` squad skill list List installed skills`);
468
- console.log(`\nInstall sources:`);
469
- console.log(` owner/repo All skills from a GitHub repo`);
470
- console.log(` owner/repo/skill-name A specific skill from a GitHub repo`);
471
- console.log(` https://... A direct URL to a skill.md file`);
472
- console.log(`\nAPM registry: https://github.com/microsoft/apm\n`);
473
- return;
474
- }
475
- switch (subCmd) {
476
- case 'publish': {
477
- const skillName = args[1];
478
- await publish(dest, skillName);
479
- break;
480
- }
481
- case 'install': {
482
- const source = args[1];
483
- if (!source) {
484
- fatal('Usage: squad skill install <owner/repo>[/<skill-name>] | <url>');
485
- }
486
- await install(dest, source);
487
- break;
488
- }
489
- case 'list':
490
- await listSkills(dest);
491
- break;
492
- default:
493
- fatal(`Unknown skill subcommand: ${subCmd}\nRun 'squad skill help' for usage.`);
494
- }
495
- }
496
- //# sourceMappingURL=skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/cli/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- /**
2
- * Shared agent spawn utilities for watch capabilities.
3
- *
4
- * Centralises `buildAgentCommand()` and `spawnWithTimeout()` so every
5
- * capability uses the same logic, respects `agentCmd` from config,
6
- * and works on Windows (shell: true when win32).
7
- *
8
- * @see https://github.com/bradygaster/squad/issues/920
9
- * @see https://github.com/bradygaster/squad/issues/923
10
- */
11
- import type { WatchContext } from './types.js';
12
- /** True when running on Windows — used to gate `shell: true`. */
13
- export declare const IS_WINDOWS: boolean;
14
- /**
15
- * Detect which copilot CLI is available at runtime.
16
- *
17
- * Tries standalone `copilot` first (modern default). If that fails,
18
- * falls back to `gh copilot` (legacy). The result is cached for the
19
- * lifetime of the process so we only shell-out once.
20
- *
21
- * @returns `{ cmd, cmdPrefix }` — e.g. `{ cmd: 'copilot', cmdPrefix: [] }`
22
- * or `{ cmd: 'gh', cmdPrefix: ['copilot'] }`.
23
- */
24
- export declare function resolveCopilotCmd(): {
25
- cmd: string;
26
- cmdPrefix: string[];
27
- };
28
- /**
29
- * Reset the cached copilot detection. Exported for testing only.
30
- * @internal
31
- */
32
- export declare function _resetCopilotDetection(): void;
33
- /**
34
- * Build the command + args array for an agent invocation.
35
- *
36
- * Resolution order:
37
- * 1. `context.agentCmd` (explicit override from config / CLI)
38
- * 2. Runtime detection via `resolveCopilotCmd()`:
39
- * - standalone `copilot` if available on PATH
40
- * - `gh copilot` as fallback
41
- */
42
- export declare function buildAgentCommand(prompt: string, context: WatchContext): {
43
- cmd: string;
44
- args: string[];
45
- };
46
- /**
47
- * Spawn an agent command with a timeout.
48
- *
49
- * Uses `shell: true` on Windows so that `.cmd`/`.bat` wrappers and
50
- * PATH resolution work correctly.
51
- */
52
- export declare function spawnWithTimeout(cmd: string, args: string[], cwd: string, timeoutMs: number): Promise<void>;
53
- /**
54
- * Spawn an agent command with a timeout, resolving with success/error
55
- * instead of rejecting. Used by execute and wave-dispatch where the
56
- * caller wants to handle failure without try/catch.
57
- */
58
- export declare function spawnAgent(cmd: string, args: string[], cwd: string, timeoutMs: number): Promise<{
59
- success: boolean;
60
- error?: string;
61
- }>;
62
- //# sourceMappingURL=agent-spawn.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-spawn.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/watch/agent-spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,iEAAiE;AACjE,eAAO,MAAM,UAAU,SAA+B,CAAC;AAQvD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBxE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,GACpB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAejC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsB/C"}