@cleocode/caamp 0.1.0 → 0.2.0
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 +151 -32
- package/dist/{chunk-63BH7QMR.js → chunk-RW745KDU.js} +48 -4
- package/dist/chunk-RW745KDU.js.map +1 -0
- package/dist/cli.d.ts +0 -0
- package/dist/cli.js +140 -10
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +0 -0
- package/package.json +10 -10
- package/providers/registry.json +455 -5
- package/dist/chunk-63BH7QMR.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
scanFile,
|
|
36
36
|
toSarif,
|
|
37
37
|
validateSkill
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-RW745KDU.js";
|
|
39
39
|
|
|
40
40
|
// src/cli.ts
|
|
41
41
|
import { Command } from "commander";
|
|
@@ -399,6 +399,8 @@ function registerSkillsCheck(parent) {
|
|
|
399
399
|
console.log(pc6.dim("No tracked skills."));
|
|
400
400
|
return;
|
|
401
401
|
}
|
|
402
|
+
console.log(pc6.dim(`Checking ${entries.length} skill(s) for updates...
|
|
403
|
+
`));
|
|
402
404
|
const results = [];
|
|
403
405
|
for (const [name, entry] of entries) {
|
|
404
406
|
const update = await checkSkillUpdate(name);
|
|
@@ -408,16 +410,37 @@ function registerSkillsCheck(parent) {
|
|
|
408
410
|
console.log(JSON.stringify(results, null, 2));
|
|
409
411
|
return;
|
|
410
412
|
}
|
|
411
|
-
|
|
412
|
-
${entries.length} tracked skill(s):
|
|
413
|
-
`));
|
|
413
|
+
let updatesAvailable = 0;
|
|
414
414
|
for (const r of results) {
|
|
415
|
-
|
|
416
|
-
|
|
415
|
+
let statusLabel;
|
|
416
|
+
if (r.status === "update-available") {
|
|
417
|
+
statusLabel = pc6.yellow("update available");
|
|
418
|
+
updatesAvailable++;
|
|
419
|
+
} else if (r.status === "up-to-date") {
|
|
420
|
+
statusLabel = pc6.green("up to date");
|
|
421
|
+
} else {
|
|
422
|
+
statusLabel = pc6.dim("unknown");
|
|
423
|
+
}
|
|
424
|
+
console.log(` ${pc6.bold(r.name.padEnd(30))} ${statusLabel}`);
|
|
425
|
+
if (r.currentVersion || r.latestVersion) {
|
|
426
|
+
const current = r.currentVersion ? r.currentVersion.slice(0, 12) : "?";
|
|
427
|
+
const latest = r.latestVersion ?? "?";
|
|
428
|
+
if (r.hasUpdate) {
|
|
429
|
+
console.log(` ${pc6.dim("current:")} ${current} ${pc6.dim("->")} ${pc6.cyan(latest)}`);
|
|
430
|
+
} else {
|
|
431
|
+
console.log(` ${pc6.dim("version:")} ${current}`);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
417
434
|
console.log(` ${pc6.dim(`source: ${r.entry.source}`)}`);
|
|
418
435
|
console.log(` ${pc6.dim(`agents: ${r.entry.agents.join(", ")}`)}`);
|
|
419
436
|
console.log();
|
|
420
437
|
}
|
|
438
|
+
if (updatesAvailable > 0) {
|
|
439
|
+
console.log(pc6.yellow(`${updatesAvailable} update(s) available.`));
|
|
440
|
+
console.log(pc6.dim("Run `caamp skills update` to update all."));
|
|
441
|
+
} else {
|
|
442
|
+
console.log(pc6.green("All skills are up to date."));
|
|
443
|
+
}
|
|
421
444
|
});
|
|
422
445
|
}
|
|
423
446
|
|
|
@@ -432,9 +455,116 @@ function registerSkillsUpdate(parent) {
|
|
|
432
455
|
return;
|
|
433
456
|
}
|
|
434
457
|
console.log(pc7.dim(`Checking ${entries.length} skill(s) for updates...`));
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
458
|
+
const outdated = [];
|
|
459
|
+
for (const [name] of entries) {
|
|
460
|
+
const result = await checkSkillUpdate(name);
|
|
461
|
+
if (result.hasUpdate) {
|
|
462
|
+
outdated.push({
|
|
463
|
+
name,
|
|
464
|
+
currentVersion: result.currentVersion,
|
|
465
|
+
latestVersion: result.latestVersion
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
if (outdated.length === 0) {
|
|
470
|
+
console.log(pc7.green("\nAll skills are up to date."));
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
console.log(pc7.yellow(`
|
|
474
|
+
${outdated.length} skill(s) have updates available:
|
|
475
|
+
`));
|
|
476
|
+
for (const skill of outdated) {
|
|
477
|
+
const current = skill.currentVersion?.slice(0, 12) ?? "?";
|
|
478
|
+
const latest = skill.latestVersion ?? "?";
|
|
479
|
+
console.log(` ${pc7.bold(skill.name)} ${pc7.dim(current)} ${pc7.dim("->")} ${pc7.cyan(latest)}`);
|
|
480
|
+
}
|
|
481
|
+
if (!opts.yes) {
|
|
482
|
+
const readline = await import("readline");
|
|
483
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
484
|
+
const answer = await new Promise((resolve) => {
|
|
485
|
+
rl.question(pc7.dim("\nProceed with update? [y/N] "), resolve);
|
|
486
|
+
});
|
|
487
|
+
rl.close();
|
|
488
|
+
if (answer.toLowerCase() !== "y" && answer.toLowerCase() !== "yes") {
|
|
489
|
+
console.log(pc7.dim("Update cancelled."));
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
console.log();
|
|
494
|
+
let successCount = 0;
|
|
495
|
+
let failCount = 0;
|
|
496
|
+
for (const skill of outdated) {
|
|
497
|
+
const entry = tracked[skill.name];
|
|
498
|
+
if (!entry) continue;
|
|
499
|
+
console.log(pc7.dim(`Updating ${pc7.bold(skill.name)}...`));
|
|
500
|
+
try {
|
|
501
|
+
const parsed = parseSource(entry.source);
|
|
502
|
+
let localPath;
|
|
503
|
+
let cleanup;
|
|
504
|
+
if (parsed.type === "github" && parsed.owner && parsed.repo) {
|
|
505
|
+
const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);
|
|
506
|
+
localPath = result.localPath;
|
|
507
|
+
cleanup = result.cleanup;
|
|
508
|
+
} else if (parsed.type === "gitlab" && parsed.owner && parsed.repo) {
|
|
509
|
+
const result = await cloneGitLabRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);
|
|
510
|
+
localPath = result.localPath;
|
|
511
|
+
cleanup = result.cleanup;
|
|
512
|
+
} else {
|
|
513
|
+
console.log(pc7.yellow(` Skipped ${skill.name}: source type "${parsed.type}" does not support auto-update`));
|
|
514
|
+
continue;
|
|
515
|
+
}
|
|
516
|
+
try {
|
|
517
|
+
const providers = entry.agents.map((a) => getProvider(a)).filter((p) => p !== void 0);
|
|
518
|
+
if (providers.length === 0) {
|
|
519
|
+
console.log(pc7.yellow(` Skipped ${skill.name}: no valid providers found`));
|
|
520
|
+
continue;
|
|
521
|
+
}
|
|
522
|
+
const installResult = await installSkill(
|
|
523
|
+
localPath,
|
|
524
|
+
skill.name,
|
|
525
|
+
providers,
|
|
526
|
+
entry.isGlobal,
|
|
527
|
+
entry.projectDir
|
|
528
|
+
);
|
|
529
|
+
if (installResult.success) {
|
|
530
|
+
await recordSkillInstall(
|
|
531
|
+
skill.name,
|
|
532
|
+
entry.scopedName,
|
|
533
|
+
entry.source,
|
|
534
|
+
entry.sourceType,
|
|
535
|
+
installResult.linkedAgents,
|
|
536
|
+
installResult.canonicalPath,
|
|
537
|
+
entry.isGlobal,
|
|
538
|
+
entry.projectDir,
|
|
539
|
+
skill.latestVersion
|
|
540
|
+
);
|
|
541
|
+
console.log(pc7.green(` Updated ${pc7.bold(skill.name)}`));
|
|
542
|
+
successCount++;
|
|
543
|
+
} else {
|
|
544
|
+
console.log(pc7.red(` Failed to update ${skill.name}: no agents linked`));
|
|
545
|
+
failCount++;
|
|
546
|
+
}
|
|
547
|
+
if (installResult.errors.length > 0) {
|
|
548
|
+
for (const err of installResult.errors) {
|
|
549
|
+
console.log(pc7.yellow(` ${err}`));
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
} finally {
|
|
553
|
+
if (cleanup) await cleanup();
|
|
554
|
+
}
|
|
555
|
+
} catch (err) {
|
|
556
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
557
|
+
console.log(pc7.red(` Failed to update ${skill.name}: ${msg}`));
|
|
558
|
+
failCount++;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
console.log();
|
|
562
|
+
if (successCount > 0) {
|
|
563
|
+
console.log(pc7.green(`Updated ${successCount} skill(s).`));
|
|
564
|
+
}
|
|
565
|
+
if (failCount > 0) {
|
|
566
|
+
console.log(pc7.red(`Failed to update ${failCount} skill(s).`));
|
|
567
|
+
}
|
|
438
568
|
});
|
|
439
569
|
}
|
|
440
570
|
|
|
@@ -931,7 +1061,7 @@ ${provider.toolName} config (${configPath}):
|
|
|
931
1061
|
|
|
932
1062
|
// src/cli.ts
|
|
933
1063
|
var program = new Command();
|
|
934
|
-
program.name("caamp").description("Central AI Agent Managed Packages - unified provider registry and package manager").version("0.
|
|
1064
|
+
program.name("caamp").description("Central AI Agent Managed Packages - unified provider registry and package manager").version("0.2.0");
|
|
935
1065
|
registerProvidersCommand(program);
|
|
936
1066
|
registerSkillsCommands(program);
|
|
937
1067
|
registerMcpCommands(program);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/commands/providers.ts","../src/commands/skills/install.ts","../src/core/sources/github.ts","../src/core/sources/gitlab.ts","../src/commands/skills/remove.ts","../src/commands/skills/list.ts","../src/commands/skills/find.ts","../src/commands/skills/check.ts","../src/commands/skills/update.ts","../src/commands/skills/init.ts","../src/commands/skills/audit.ts","../src/commands/skills/validate.ts","../src/commands/skills/index.ts","../src/commands/mcp/install.ts","../src/commands/mcp/remove.ts","../src/commands/mcp/list.ts","../src/commands/mcp/detect.ts","../src/commands/mcp/index.ts","../src/commands/instructions/inject.ts","../src/commands/instructions/check.ts","../src/commands/instructions/update.ts","../src/commands/instructions/index.ts","../src/commands/config.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * CAAMP CLI - Central AI Agent Managed Packages\n */\n\nimport { Command } from \"commander\";\nimport { registerProvidersCommand } from \"./commands/providers.js\";\nimport { registerSkillsCommands } from \"./commands/skills/index.js\";\nimport { registerMcpCommands } from \"./commands/mcp/index.js\";\nimport { registerInstructionsCommands } from \"./commands/instructions/index.js\";\nimport { registerConfigCommand } from \"./commands/config.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"caamp\")\n .description(\"Central AI Agent Managed Packages - unified provider registry and package manager\")\n .version(\"0.1.0\");\n\n// Register command groups\nregisterProvidersCommand(program);\nregisterSkillsCommands(program);\nregisterMcpCommands(program);\nregisterInstructionsCommands(program);\nregisterConfigCommand(program);\n\nprogram.parse();\n","/**\n * providers list|detect|show commands\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n getAllProviders,\n getProvider,\n getProviderCount,\n getRegistryVersion,\n getProvidersByPriority,\n} from \"../core/registry/providers.js\";\nimport { detectAllProviders, detectProjectProviders } from \"../core/registry/detection.js\";\n\nexport function registerProvidersCommand(program: Command): void {\n const providers = program\n .command(\"providers\")\n .description(\"Manage AI agent providers\");\n\n providers\n .command(\"list\")\n .description(\"List all supported providers\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--tier <tier>\", \"Filter by priority tier (high, medium, low)\")\n .action(async (opts: { json?: boolean; tier?: string }) => {\n const all = opts.tier\n ? getProvidersByPriority(opts.tier as \"high\" | \"medium\" | \"low\")\n : getAllProviders();\n\n if (opts.json) {\n console.log(JSON.stringify(all, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nCAMP Provider Registry v${getRegistryVersion()}`));\n console.log(pc.dim(`${getProviderCount()} providers\\n`));\n\n // Group by priority\n const tiers = [\"high\", \"medium\", \"low\"] as const;\n for (const tier of tiers) {\n const tierProviders = all.filter((p) => p.priority === tier);\n if (tierProviders.length === 0) continue;\n\n const tierLabel = tier === \"high\" ? pc.green(\"HIGH\") : tier === \"medium\" ? pc.yellow(\"MEDIUM\") : pc.dim(\"LOW\");\n console.log(`${tierLabel} priority:`);\n\n for (const p of tierProviders) {\n const status = p.status === \"active\"\n ? pc.green(\"active\")\n : p.status === \"beta\"\n ? pc.yellow(\"beta\")\n : pc.dim(p.status);\n\n console.log(` ${pc.bold(p.agentFlag.padEnd(20))} ${p.toolName.padEnd(22)} ${p.vendor.padEnd(16)} [${status}]`);\n }\n console.log();\n }\n });\n\n providers\n .command(\"detect\")\n .description(\"Auto-detect installed providers\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--project\", \"Include project-level detection\")\n .action(async (opts: { json?: boolean; project?: boolean }) => {\n const results = opts.project\n ? detectProjectProviders(process.cwd())\n : detectAllProviders();\n\n const installed = results.filter((r) => r.installed);\n\n if (opts.json) {\n console.log(JSON.stringify(installed.map((r) => ({\n id: r.provider.id,\n toolName: r.provider.toolName,\n methods: r.methods,\n projectDetected: r.projectDetected,\n })), null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nDetected ${installed.length} installed providers:\\n`));\n\n for (const r of installed) {\n const methods = r.methods.join(\", \");\n const project = r.projectDetected ? pc.green(\" [project]\") : \"\";\n console.log(` ${pc.green(\"✓\")} ${pc.bold(r.provider.toolName.padEnd(22))} via ${pc.dim(methods)}${project}`);\n }\n\n const notInstalled = results.filter((r) => !r.installed);\n if (notInstalled.length > 0) {\n console.log(pc.dim(`\\n ${notInstalled.length} providers not detected`));\n }\n\n console.log();\n });\n\n providers\n .command(\"show\")\n .description(\"Show provider details\")\n .argument(\"<id>\", \"Provider ID or alias\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (id: string, opts: { json?: boolean }) => {\n const provider = getProvider(id);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${id}`));\n process.exit(1);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(provider, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${provider.toolName}`));\n console.log(pc.dim(`by ${provider.vendor}\\n`));\n\n console.log(` ID: ${provider.id}`);\n console.log(` Flag: --agent ${provider.agentFlag}`);\n if (provider.aliases.length > 0) {\n console.log(` Aliases: ${provider.aliases.join(\", \")}`);\n }\n console.log(` Status: ${provider.status}`);\n console.log(` Priority: ${provider.priority}`);\n console.log();\n console.log(` Instruction: ${provider.instructFile}`);\n console.log(` Config format: ${provider.configFormat}`);\n console.log(` Config key: ${provider.configKey}`);\n console.log(` Transports: ${provider.supportedTransports.join(\", \")}`);\n console.log(` Headers: ${provider.supportsHeaders ? \"yes\" : \"no\"}`);\n console.log();\n console.log(pc.dim(\" Paths:\"));\n console.log(` Global dir: ${provider.pathGlobal}`);\n console.log(` Project dir: ${provider.pathProject || \"(none)\"}`);\n console.log(` Global config: ${provider.configPathGlobal}`);\n console.log(` Project config: ${provider.configPathProject || \"(none)\"}`);\n console.log(` Global skills: ${provider.pathSkills}`);\n console.log(` Project skills: ${provider.pathProjectSkills || \"(none)\"}`);\n console.log();\n });\n}\n","/**\n * skills install command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { parseSource, isMarketplaceScoped } from \"../../core/sources/parser.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerSkillsInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install a skill from GitHub, URL, or marketplace\")\n .argument(\"<source>\", \"Skill source (GitHub URL, owner/repo, @author/name)\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Install globally\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--all\", \"Install to all detected agents\")\n .action(async (source: string, opts: {\n agent: string[];\n global?: boolean;\n yes?: boolean;\n all?: boolean;\n }) => {\n // Determine target providers\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No target providers found. Use --agent or --all.\"));\n process.exit(1);\n }\n\n console.log(pc.dim(`Installing to ${providers.length} provider(s)...`));\n\n let localPath: string;\n let cleanup: (() => Promise<void>) | undefined;\n let skillName: string;\n let sourceValue: string;\n let sourceType = \"github\" as const;\n\n // Handle marketplace scoped names\n if (isMarketplaceScoped(source)) {\n console.log(pc.dim(`Searching marketplace for ${source}...`));\n const client = new MarketplaceClient();\n const skill = await client.getSkill(source);\n\n if (!skill) {\n console.error(pc.red(`Skill not found: ${source}`));\n process.exit(1);\n }\n\n console.log(` Found: ${pc.bold(skill.name)} by ${skill.author} (${pc.dim(skill.repoFullName)})`);\n\n const parsed = parseSource(skill.githubUrl);\n if (parsed.type !== \"github\" || !parsed.owner || !parsed.repo) {\n console.error(pc.red(\"Could not resolve GitHub source\"));\n process.exit(1);\n }\n\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, skill.path ? skill.path.replace(/\\/SKILL\\.md$/, \"\") : undefined);\n localPath = result.localPath;\n cleanup = result.cleanup;\n skillName = skill.name;\n sourceValue = skill.githubUrl;\n } else {\n // Parse source\n const parsed = parseSource(source);\n skillName = parsed.inferredName;\n sourceValue = parsed.value;\n\n if (parsed.type === \"github\" && parsed.owner && parsed.repo) {\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"gitlab\" && parsed.owner && parsed.repo) {\n const result = await cloneGitLabRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"local\") {\n localPath = parsed.value;\n } else {\n console.error(pc.red(`Unsupported source type: ${parsed.type}`));\n process.exit(1);\n }\n }\n\n try {\n const result = await installSkill(\n localPath,\n skillName,\n providers,\n opts.global ?? false,\n );\n\n if (result.success) {\n console.log(pc.green(`\\n✓ Installed ${pc.bold(skillName)}`));\n console.log(` Canonical: ${pc.dim(result.canonicalPath)}`);\n console.log(` Linked to: ${result.linkedAgents.join(\", \")}`);\n\n // Record in lock file\n await recordSkillInstall(\n skillName,\n source,\n sourceValue,\n sourceType,\n result.linkedAgents,\n result.canonicalPath,\n opts.global ?? false,\n );\n }\n\n if (result.errors.length > 0) {\n console.log(pc.yellow(\"\\nWarnings:\"));\n for (const err of result.errors) {\n console.log(` ${pc.yellow(\"!\")} ${err}`);\n }\n }\n } finally {\n if (cleanup) await cleanup();\n }\n });\n}\n","/**\n * GitHub fetcher for skill/MCP sources\n *\n * Clones repos or fetches specific paths via simple-git.\n */\n\nimport { simpleGit } from \"simple-git\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface GitFetchResult {\n localPath: string;\n cleanup: () => Promise<void>;\n}\n\n/** Clone a GitHub repo to a temp directory */\nexport async function cloneRepo(\n owner: string,\n repo: string,\n ref?: string,\n subPath?: string,\n): Promise<GitFetchResult> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"caamp-\"));\n const repoUrl = `https://github.com/${owner}/${repo}.git`;\n\n const git = simpleGit();\n\n const cloneOptions = [\"--depth\", \"1\"];\n if (ref) {\n cloneOptions.push(\"--branch\", ref);\n }\n\n await git.clone(repoUrl, tmpDir, cloneOptions);\n\n const localPath = subPath ? join(tmpDir, subPath) : tmpDir;\n\n return {\n localPath,\n cleanup: async () => {\n try {\n await rm(tmpDir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n },\n };\n}\n\n/** Fetch a specific file from GitHub using the raw API */\nexport async function fetchRawFile(\n owner: string,\n repo: string,\n path: string,\n ref = \"main\",\n): Promise<string | null> {\n const url = `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${path}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n\n/** Check if a GitHub repo exists */\nexport async function repoExists(owner: string, repo: string): Promise<boolean> {\n try {\n const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {\n method: \"HEAD\",\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n","/**\n * GitLab fetcher for skill/MCP sources\n */\n\nimport { simpleGit } from \"simple-git\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { GitFetchResult } from \"./github.js\";\n\n/** Clone a GitLab repo to a temp directory */\nexport async function cloneGitLabRepo(\n owner: string,\n repo: string,\n ref?: string,\n subPath?: string,\n): Promise<GitFetchResult> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"caamp-gl-\"));\n const repoUrl = `https://gitlab.com/${owner}/${repo}.git`;\n\n const git = simpleGit();\n\n const cloneOptions = [\"--depth\", \"1\"];\n if (ref) {\n cloneOptions.push(\"--branch\", ref);\n }\n\n await git.clone(repoUrl, tmpDir, cloneOptions);\n\n const localPath = subPath ? join(tmpDir, subPath) : tmpDir;\n\n return {\n localPath,\n cleanup: async () => {\n try {\n await rm(tmpDir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n },\n };\n}\n\n/** Fetch a specific file from GitLab using the raw API */\nexport async function fetchGitLabRawFile(\n owner: string,\n repo: string,\n path: string,\n ref = \"main\",\n): Promise<string | null> {\n const encodedPath = encodeURIComponent(path);\n const url = `https://gitlab.com/${owner}/${repo}/-/raw/${ref}/${encodedPath}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n","/**\n * skills remove command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { removeSkill, listCanonicalSkills } from \"../../core/skills/installer.js\";\nimport { removeSkillFromLock } from \"../../core/skills/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\n\nexport function registerSkillsRemove(parent: Command): void {\n parent\n .command(\"remove\")\n .description(\"Remove installed skill(s)\")\n .argument(\"[name]\", \"Skill name to remove\")\n .option(\"-g, --global\", \"Remove from global scope\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (name: string | undefined, opts: { global?: boolean; yes?: boolean }) => {\n const providers = getInstalledProviders();\n\n if (name) {\n const result = await removeSkill(name, providers, opts.global ?? false);\n\n if (result.removed.length > 0) {\n console.log(pc.green(`✓ Removed ${pc.bold(name)} from: ${result.removed.join(\", \")}`));\n await removeSkillFromLock(name);\n } else {\n console.log(pc.yellow(`Skill ${name} not found in any provider.`));\n }\n\n if (result.errors.length > 0) {\n for (const err of result.errors) {\n console.log(pc.red(` ${err}`));\n }\n }\n } else {\n // Interactive mode - list and select\n const skills = await listCanonicalSkills();\n if (skills.length === 0) {\n console.log(pc.dim(\"No skills installed.\"));\n return;\n }\n\n console.log(pc.bold(\"Installed skills:\"));\n for (const s of skills) {\n console.log(` ${s}`);\n }\n console.log(pc.dim(\"\\nUse: caamp skills remove <name>\"));\n }\n });\n}\n","/**\n * skills list command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { discoverSkills, discoverSkillsMulti } from \"../../core/skills/discovery.js\";\nimport { listCanonicalSkills } from \"../../core/skills/installer.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { join } from \"node:path\";\n\nexport function registerSkillsList(parent: Command): void {\n parent\n .command(\"list\")\n .description(\"List installed skills\")\n .option(\"-g, --global\", \"List global skills\")\n .option(\"-a, --agent <name>\", \"List skills for specific agent\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { global?: boolean; agent?: string; json?: boolean }) => {\n let dirs: string[] = [];\n\n if (opts.agent) {\n const provider = getProvider(opts.agent);\n if (!provider) {\n console.error(pc.red(`Provider not found: ${opts.agent}`));\n process.exit(1);\n }\n dirs = opts.global\n ? [provider.pathSkills]\n : [join(process.cwd(), provider.pathProjectSkills)];\n } else if (opts.global) {\n // List from all installed providers' global skill dirs\n const providers = getInstalledProviders();\n dirs = providers.map((p) => p.pathSkills).filter(Boolean);\n } else {\n // List from all installed providers' project skill dirs\n const providers = getInstalledProviders();\n dirs = providers\n .map((p) => join(process.cwd(), p.pathProjectSkills))\n .filter(Boolean);\n }\n\n const skills = await discoverSkillsMulti(dirs);\n\n if (opts.json) {\n console.log(JSON.stringify(skills, null, 2));\n return;\n }\n\n if (skills.length === 0) {\n console.log(pc.dim(\"No skills found.\"));\n return;\n }\n\n console.log(pc.bold(`\\n${skills.length} skill(s) found:\\n`));\n\n for (const skill of skills) {\n console.log(` ${pc.bold(skill.name.padEnd(30))} ${pc.dim(skill.metadata.description ?? \"\")}`);\n }\n\n console.log();\n });\n}\n","/**\n * skills find command - marketplace search\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\n\nexport function registerSkillsFind(parent: Command): void {\n parent\n .command(\"find\")\n .description(\"Search marketplace for skills\")\n .argument(\"[query]\", \"Search query\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"-l, --limit <n>\", \"Max results\", \"20\")\n .action(async (query: string | undefined, opts: { json?: boolean; limit: string }) => {\n if (!query) {\n console.log(pc.dim(\"Usage: caamp skills find <query>\"));\n return;\n }\n\n const limit = parseInt(opts.limit, 10);\n const client = new MarketplaceClient();\n\n console.log(pc.dim(`Searching marketplaces for \"${query}\"...\\n`));\n\n const results = await client.search(query, limit);\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n if (results.length === 0) {\n console.log(pc.yellow(\"No results found.\"));\n return;\n }\n\n for (const skill of results) {\n const stars = skill.stars > 0 ? pc.yellow(`★ ${formatStars(skill.stars)}`) : \"\";\n console.log(` ${pc.bold(skill.scopedName.padEnd(35))} ${stars}`);\n console.log(` ${pc.dim(skill.description?.slice(0, 80) ?? \"\")}`);\n console.log(` ${pc.dim(`from ${skill.source}`)}`);\n console.log();\n }\n\n console.log(pc.dim(`Install with: caamp skills install <scopedName>`));\n });\n}\n\nfunction formatStars(n: number): string {\n if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n","/**\n * skills check command - check for updates\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getTrackedSkills, checkSkillUpdate } from \"../../core/skills/lock.js\";\n\nexport function registerSkillsCheck(parent: Command): void {\n parent\n .command(\"check\")\n .description(\"Check for available skill updates\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n console.log(pc.dim(\"No tracked skills.\"));\n return;\n }\n\n const results = [];\n for (const [name, entry] of entries) {\n const update = await checkSkillUpdate(name);\n results.push({ name, entry, ...update });\n }\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${entries.length} tracked skill(s):\\n`));\n\n for (const r of results) {\n const status = r.hasUpdate\n ? pc.yellow(\"update available\")\n : pc.green(\"up to date\");\n\n console.log(` ${pc.bold(r.name.padEnd(30))} ${status}`);\n console.log(` ${pc.dim(`source: ${r.entry.source}`)}`);\n console.log(` ${pc.dim(`agents: ${r.entry.agents.join(\", \")}`)}`);\n console.log();\n }\n });\n}\n","/**\n * skills update command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getTrackedSkills } from \"../../core/skills/lock.js\";\n\nexport function registerSkillsUpdate(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update all outdated skills\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (opts: { yes?: boolean }) => {\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n console.log(pc.dim(\"No tracked skills to update.\"));\n return;\n }\n\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...`));\n\n // For now, skills update is a placeholder - requires network checks\n console.log(pc.dim(\"All skills are up to date.\"));\n console.log(pc.dim(\"\\nTo reinstall a specific skill:\"));\n console.log(pc.dim(\" caamp skills install <source>\"));\n });\n}\n","/**\n * skills init command - scaffold a new skill\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport function registerSkillsInit(parent: Command): void {\n parent\n .command(\"init\")\n .description(\"Create a new SKILL.md template\")\n .argument(\"[name]\", \"Skill name\")\n .option(\"-d, --dir <path>\", \"Output directory\", \".\")\n .action(async (name: string | undefined, opts: { dir: string }) => {\n const skillName = name ?? \"my-skill\";\n const skillDir = join(opts.dir, skillName);\n\n if (existsSync(skillDir)) {\n console.error(pc.red(`Directory already exists: ${skillDir}`));\n process.exit(1);\n }\n\n await mkdir(skillDir, { recursive: true });\n\n const template = `---\nname: ${skillName}\ndescription: Describe what this skill does and when to use it\nlicense: MIT\nmetadata:\n author: your-name\n version: \"1.0\"\n---\n\n# ${skillName}\n\n## When to use this skill\n\nDescribe the conditions under which an AI agent should activate this skill.\n\n## Instructions\n\nProvide detailed instructions for the AI agent here.\n\n## Examples\n\nShow example inputs and expected outputs.\n`;\n\n await writeFile(join(skillDir, \"SKILL.md\"), template, \"utf-8\");\n\n console.log(pc.green(`✓ Created skill template: ${skillDir}/SKILL.md`));\n console.log(pc.dim(\"\\nNext steps:\"));\n console.log(pc.dim(\" 1. Edit SKILL.md with your instructions\"));\n console.log(pc.dim(\" 2. Validate: caamp skills validate \" + join(skillDir, \"SKILL.md\")));\n console.log(pc.dim(\" 3. Install: caamp skills install \" + skillDir));\n });\n}\n","/**\n * skills audit command - security scanning\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { scanFile, scanDirectory, toSarif } from \"../../core/skills/audit/scanner.js\";\nimport { existsSync, statSync } from \"node:fs\";\n\nexport function registerSkillsAudit(parent: Command): void {\n parent\n .command(\"audit\")\n .description(\"Security scan skill files (46+ rules, SARIF output)\")\n .argument(\"[path]\", \"Path to SKILL.md or directory\", \".\")\n .option(\"--sarif\", \"Output in SARIF format\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (path: string, opts: { sarif?: boolean; json?: boolean }) => {\n if (!existsSync(path)) {\n console.error(pc.red(`Path not found: ${path}`));\n process.exit(1);\n }\n\n const stat = statSync(path);\n let results;\n\n if (stat.isFile()) {\n results = [await scanFile(path)];\n } else {\n results = await scanDirectory(path);\n }\n\n if (results.length === 0) {\n console.log(pc.dim(\"No SKILL.md files found to scan.\"));\n return;\n }\n\n if (opts.sarif) {\n console.log(JSON.stringify(toSarif(results), null, 2));\n return;\n }\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n // Human-readable output\n let totalFindings = 0;\n let allPassed = true;\n\n for (const result of results) {\n const icon = result.passed ? pc.green(\"✓\") : pc.red(\"✗\");\n console.log(`\\n${icon} ${pc.bold(result.file)} (score: ${result.score}/100)`);\n\n if (result.findings.length === 0) {\n console.log(pc.dim(\" No issues found.\"));\n continue;\n }\n\n totalFindings += result.findings.length;\n if (!result.passed) allPassed = false;\n\n for (const f of result.findings) {\n const sev = f.rule.severity === \"critical\" ? pc.red(f.rule.severity)\n : f.rule.severity === \"high\" ? pc.red(f.rule.severity)\n : f.rule.severity === \"medium\" ? pc.yellow(f.rule.severity)\n : pc.dim(f.rule.severity);\n\n console.log(` ${sev.padEnd(20)} ${f.rule.id} ${f.rule.name}`);\n console.log(` ${pc.dim(`L${f.line}: ${f.context.slice(0, 80)}`)}`);\n }\n }\n\n console.log(pc.bold(`\\n${results.length} file(s) scanned, ${totalFindings} finding(s)`));\n\n if (!allPassed) {\n process.exit(1);\n }\n });\n}\n","/**\n * skills validate command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { validateSkill } from \"../../core/skills/validator.js\";\n\nexport function registerSkillsValidate(parent: Command): void {\n parent\n .command(\"validate\")\n .description(\"Validate SKILL.md format\")\n .argument(\"[path]\", \"Path to SKILL.md\", \"SKILL.md\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (path: string, opts: { json?: boolean }) => {\n const result = await validateSkill(path);\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.valid) {\n console.log(pc.green(`✓ ${path} is valid`));\n } else {\n console.log(pc.red(`✗ ${path} has validation errors`));\n }\n\n for (const issue of result.issues) {\n const icon = issue.level === \"error\" ? pc.red(\"✗\") : pc.yellow(\"!\");\n console.log(` ${icon} [${issue.field}] ${issue.message}`);\n }\n\n if (!result.valid) {\n process.exit(1);\n }\n });\n}\n","/**\n * Skills command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerSkillsInstall } from \"./install.js\";\nimport { registerSkillsRemove } from \"./remove.js\";\nimport { registerSkillsList } from \"./list.js\";\nimport { registerSkillsFind } from \"./find.js\";\nimport { registerSkillsCheck } from \"./check.js\";\nimport { registerSkillsUpdate } from \"./update.js\";\nimport { registerSkillsInit } from \"./init.js\";\nimport { registerSkillsAudit } from \"./audit.js\";\nimport { registerSkillsValidate } from \"./validate.js\";\n\nexport function registerSkillsCommands(program: Command): void {\n const skills = program\n .command(\"skills\")\n .description(\"Manage AI agent skills\");\n\n registerSkillsInstall(skills);\n registerSkillsRemove(skills);\n registerSkillsList(skills);\n registerSkillsFind(skills);\n registerSkillsCheck(skills);\n registerSkillsUpdate(skills);\n registerSkillsInit(skills);\n registerSkillsAudit(skills);\n registerSkillsValidate(skills);\n}\n","/**\n * mcp install command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { parseSource } from \"../../core/sources/parser.js\";\nimport { installMcpServerToAll, buildServerConfig } from \"../../core/mcp/installer.js\";\nimport { recordMcpInstall } from \"../../core/mcp/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerMcpInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install MCP server to agent configs\")\n .argument(\"<source>\", \"MCP server source (URL, npm package, or command)\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Install to global/user config\")\n .option(\"-n, --name <name>\", \"Override inferred server name\")\n .option(\"-t, --transport <type>\", \"Transport type: http (default) or sse\", \"http\")\n .option(\"--header <header>\", \"HTTP header (Key: Value)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--all\", \"Install to all detected agents\")\n .option(\"--dry-run\", \"Preview without writing\")\n .action(async (source: string, opts: {\n agent: string[];\n global?: boolean;\n name?: string;\n transport: string;\n header: string[];\n yes?: boolean;\n all?: boolean;\n dryRun?: boolean;\n }) => {\n const parsed = parseSource(source);\n const serverName = opts.name ?? parsed.inferredName;\n\n // Parse headers\n const headers: Record<string, string> = {};\n for (const h of opts.header) {\n const idx = h.indexOf(\":\");\n if (idx > 0) {\n headers[h.slice(0, idx).trim()] = h.slice(idx + 1).trim();\n }\n }\n\n const config = buildServerConfig(parsed, opts.transport, headers);\n\n // Determine target providers\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No target providers found.\"));\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n if (opts.dryRun) {\n console.log(pc.bold(\"Dry run - would install:\"));\n console.log(` Server: ${pc.bold(serverName)}`);\n console.log(` Config: ${JSON.stringify(config, null, 2)}`);\n console.log(` Scope: ${scope}`);\n console.log(` Providers: ${providers.map((p) => p.id).join(\", \")}`);\n return;\n }\n\n console.log(pc.dim(`Installing \"${serverName}\" to ${providers.length} provider(s)...\\n`));\n\n const results = await installMcpServerToAll(\n providers,\n serverName,\n config,\n scope,\n );\n\n for (const r of results) {\n if (r.success) {\n console.log(` ${pc.green(\"✓\")} ${r.provider.toolName.padEnd(22)} ${pc.dim(r.configPath)}`);\n } else {\n console.log(` ${pc.red(\"✗\")} ${r.provider.toolName.padEnd(22)} ${pc.red(r.error ?? \"failed\")}`);\n }\n }\n\n const succeeded = results.filter((r) => r.success);\n if (succeeded.length > 0) {\n await recordMcpInstall(\n serverName,\n source,\n parsed.type,\n succeeded.map((r) => r.provider.id),\n opts.global ?? false,\n );\n }\n\n console.log(pc.bold(`\\n${succeeded.length}/${results.length} providers configured.`));\n });\n}\n","/**\n * mcp remove command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { removeMcpServer } from \"../../core/mcp/reader.js\";\nimport { removeMcpFromLock } from \"../../core/mcp/lock.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerMcpRemove(parent: Command): void {\n parent\n .command(\"remove\")\n .description(\"Remove MCP server from agent configs\")\n .argument(\"<name>\", \"MCP server name to remove\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Remove from global config\")\n .option(\"--all\", \"Remove from all detected agents\")\n .action(async (name: string, opts: {\n agent: string[];\n global?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n let removed = 0;\n\n for (const provider of providers) {\n const success = await removeMcpServer(provider, name, scope);\n if (success) {\n console.log(` ${pc.green(\"✓\")} Removed from ${provider.toolName}`);\n removed++;\n }\n }\n\n if (removed > 0) {\n await removeMcpFromLock(name);\n console.log(pc.green(`\\n✓ Removed \"${name}\" from ${removed} provider(s).`));\n } else {\n console.log(pc.yellow(`Server \"${name}\" not found in any provider config.`));\n }\n });\n}\n","/**\n * mcp list command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { listMcpServers } from \"../../core/mcp/reader.js\";\nimport type { McpServerEntry } from \"../../types.js\";\n\nexport function registerMcpList(parent: Command): void {\n parent\n .command(\"list\")\n .description(\"List configured MCP servers\")\n .option(\"-a, --agent <name>\", \"List for specific agent\")\n .option(\"-g, --global\", \"List global config\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { agent?: string; global?: boolean; json?: boolean }) => {\n const providers = opts.agent\n ? [getProvider(opts.agent)].filter((p): p is NonNullable<typeof p> => p !== undefined)\n : getInstalledProviders();\n\n const allEntries: McpServerEntry[] = [];\n\n for (const provider of providers) {\n // With --global, use global. Otherwise use project if provider supports it, else global.\n const scope: \"project\" | \"global\" = opts.global\n ? \"global\"\n : provider.configPathProject\n ? \"project\"\n : \"global\";\n\n const entries = await listMcpServers(provider, scope);\n allEntries.push(...entries);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(allEntries.map(e => ({\n provider: e.providerId,\n name: e.name,\n config: e.config,\n })), null, 2));\n return;\n }\n\n if (allEntries.length === 0) {\n console.log(pc.dim(\"No MCP servers configured.\"));\n return;\n }\n\n console.log(pc.bold(`\\n${allEntries.length} MCP server(s) configured:\\n`));\n\n for (const entry of allEntries) {\n console.log(` ${pc.bold(entry.name.padEnd(25))} ${pc.dim(entry.providerId)}`);\n }\n\n console.log();\n });\n}\n","/**\n * mcp detect command - auto-detect installed MCP tools\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { existsSync } from \"node:fs\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { resolveConfigPath, listMcpServers } from \"../../core/mcp/reader.js\";\n\nexport function registerMcpDetect(parent: Command): void {\n parent\n .command(\"detect\")\n .description(\"Auto-detect installed MCP tools and their configurations\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const providers = getInstalledProviders();\n\n const detected: Array<{\n provider: string;\n hasGlobalConfig: boolean;\n hasProjectConfig: boolean;\n globalServers: string[];\n projectServers: string[];\n }> = [];\n\n for (const provider of providers) {\n const globalPath = resolveConfigPath(provider, \"global\");\n const projectPath = resolveConfigPath(provider, \"project\");\n\n const globalEntries = await listMcpServers(provider, \"global\");\n const projectEntries = await listMcpServers(provider, \"project\");\n\n detected.push({\n provider: provider.id,\n hasGlobalConfig: globalPath !== null && existsSync(globalPath),\n hasProjectConfig: projectPath !== null && existsSync(projectPath),\n globalServers: globalEntries.map(e => e.name),\n projectServers: projectEntries.map(e => e.name),\n });\n }\n\n if (opts.json) {\n console.log(JSON.stringify(detected, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${detected.length} provider(s) with MCP support:\\n`));\n\n for (const d of detected) {\n const globalIcon = d.hasGlobalConfig ? pc.green(\"G\") : pc.dim(\"-\");\n const projectIcon = d.hasProjectConfig ? pc.green(\"P\") : pc.dim(\"-\");\n const servers = [...d.globalServers, ...d.projectServers];\n const serverList = servers.length > 0 ? pc.dim(servers.join(\", \")) : pc.dim(\"no servers\");\n\n console.log(` [${globalIcon}${projectIcon}] ${pc.bold(d.provider.padEnd(20))} ${serverList}`);\n }\n\n console.log(pc.dim(\"\\nG = global config, P = project config\"));\n console.log();\n });\n}\n","/**\n * MCP command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerMcpInstall } from \"./install.js\";\nimport { registerMcpRemove } from \"./remove.js\";\nimport { registerMcpList } from \"./list.js\";\nimport { registerMcpDetect } from \"./detect.js\";\n\nexport function registerMcpCommands(program: Command): void {\n const mcp = program\n .command(\"mcp\")\n .description(\"Manage MCP server configurations\");\n\n registerMcpInstall(mcp);\n registerMcpRemove(mcp);\n registerMcpList(mcp);\n registerMcpDetect(mcp);\n}\n","/**\n * instructions inject command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent, groupByInstructFile } from \"../../core/instructions/templates.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsInject(parent: Command): void {\n parent\n .command(\"inject\")\n .description(\"Inject instruction blocks into all provider files\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Inject into global instruction files\")\n .option(\"--content <text>\", \"Custom content to inject\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--all\", \"Target all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n content?: string;\n dryRun?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getAllProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No providers found.\"));\n process.exit(1);\n }\n\n const content = opts.content ?? generateInjectionContent();\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n // Show grouped preview\n const groups = groupByInstructFile(providers);\n\n if (opts.dryRun) {\n console.log(pc.bold(\"Dry run - would inject into:\\n\"));\n for (const [file, group] of groups) {\n console.log(` ${pc.bold(file)}: ${group.map((p) => p.id).join(\", \")}`);\n }\n console.log(pc.dim(`\\n Scope: ${scope}`));\n console.log(pc.dim(` Content length: ${content.length} chars`));\n return;\n }\n\n const results = await injectAll(providers, process.cwd(), scope, content);\n\n for (const [file, action] of results) {\n const icon = action === \"created\" ? pc.green(\"+\")\n : action === \"updated\" ? pc.yellow(\"~\")\n : pc.blue(\"^\");\n console.log(` ${icon} ${file} (${action})`);\n }\n\n console.log(pc.bold(`\\n${results.size} file(s) processed.`));\n });\n}\n","/**\n * instructions check command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { checkAllInjections } from \"../../core/instructions/injector.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsCheck(parent: Command): void {\n parent\n .command(\"check\")\n .description(\"Check injection status across providers\")\n .option(\"-a, --agent <name>\", \"Check specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Check global instruction files\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--all\", \"Check all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n json?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getAllProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const results = await checkAllInjections(providers, process.cwd(), scope);\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nInstruction file status (${scope}):\\n`));\n\n for (const r of results) {\n let icon: string;\n let label: string;\n\n switch (r.status) {\n case \"current\":\n icon = pc.green(\"✓\");\n label = \"current\";\n break;\n case \"outdated\":\n icon = pc.yellow(\"~\");\n label = \"outdated\";\n break;\n case \"missing\":\n icon = pc.red(\"✗\");\n label = \"missing\";\n break;\n case \"none\":\n icon = pc.dim(\"-\");\n label = \"no injection\";\n break;\n }\n\n console.log(` ${icon} ${r.file.padEnd(40)} ${label}`);\n }\n\n console.log();\n });\n}\n","/**\n * instructions update command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll, checkAllInjections } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent } from \"../../core/instructions/templates.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsUpdate(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update all instruction file injections\")\n .option(\"-g, --global\", \"Update global instruction files\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (opts: { global?: boolean; yes?: boolean }) => {\n const providers = getInstalledProviders();\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const content = generateInjectionContent();\n\n // Check current state\n const checks = await checkAllInjections(providers, process.cwd(), scope, content);\n const needsUpdate = checks.filter((c) => c.status !== \"current\");\n\n if (needsUpdate.length === 0) {\n console.log(pc.green(\"All instruction files are up to date.\"));\n return;\n }\n\n console.log(pc.bold(`${needsUpdate.length} file(s) need updating:\\n`));\n for (const c of needsUpdate) {\n console.log(` ${c.file} (${c.status})`);\n }\n\n // Filter providers to only those needing updates\n const providerIds = new Set(needsUpdate.map((c) => c.provider));\n const toUpdate = providers.filter((p) => providerIds.has(p.id));\n\n const results = await injectAll(toUpdate, process.cwd(), scope, content);\n\n console.log();\n for (const [file, action] of results) {\n console.log(` ${pc.green(\"✓\")} ${file} (${action})`);\n }\n\n console.log(pc.bold(`\\n${results.size} file(s) updated.`));\n });\n}\n","/**\n * Instructions command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerInstructionsInject } from \"./inject.js\";\nimport { registerInstructionsCheck } from \"./check.js\";\nimport { registerInstructionsUpdate } from \"./update.js\";\n\nexport function registerInstructionsCommands(program: Command): void {\n const instructions = program\n .command(\"instructions\")\n .description(\"Manage instruction file injections\");\n\n registerInstructionsInject(instructions);\n registerInstructionsCheck(instructions);\n registerInstructionsUpdate(instructions);\n}\n","/**\n * config show|path commands\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getProvider } from \"../core/registry/providers.js\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { readConfig } from \"../core/formats/index.js\";\n\nexport function registerConfigCommand(program: Command): void {\n const config = program\n .command(\"config\")\n .description(\"View provider configuration\");\n\n config\n .command(\"show\")\n .description(\"Show provider configuration\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .option(\"-g, --global\", \"Show global config\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (providerId: string, opts: { global?: boolean; json?: boolean }) => {\n const provider = getProvider(providerId);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${providerId}`));\n process.exit(1);\n }\n\n const configPath = opts.global\n ? provider.configPathGlobal\n : provider.configPathProject\n ? join(process.cwd(), provider.configPathProject)\n : provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n console.log(pc.dim(`No config file at: ${configPath}`));\n return;\n }\n\n try {\n const data = await readConfig(configPath, provider.configFormat);\n\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log(pc.bold(`\\n${provider.toolName} config (${configPath}):\\n`));\n console.log(JSON.stringify(data, null, 2));\n }\n } catch (err) {\n console.error(pc.red(`Error reading config: ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n });\n\n config\n .command(\"path\")\n .description(\"Show config file path\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .argument(\"[scope]\", \"Scope: project (default) or global\", \"project\")\n .action((providerId: string, scope: string) => {\n const provider = getProvider(providerId);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${providerId}`));\n process.exit(1);\n }\n\n if (scope === \"global\") {\n console.log(provider.configPathGlobal);\n } else {\n if (provider.configPathProject) {\n console.log(join(process.cwd(), provider.configPathProject));\n } else {\n console.log(pc.dim(`${provider.toolName} has no project-level config`));\n console.log(provider.configPathGlobal);\n }\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,eAAe;;;ACDxB,OAAO,QAAQ;AAUR,SAAS,yBAAyBA,UAAwB;AAC/D,QAAM,YAAYA,SACf,QAAQ,WAAW,EACnB,YAAY,2BAA2B;AAE1C,YACG,QAAQ,MAAM,EACd,YAAY,8BAA8B,EAC1C,OAAO,UAAU,gBAAgB,EACjC,OAAO,iBAAiB,6CAA6C,EACrE,OAAO,OAAO,SAA4C;AACzD,UAAM,MAAM,KAAK,OACb,uBAAuB,KAAK,IAAiC,IAC7D,gBAAgB;AAEpB,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AACxC;AAAA,IACF;AAEA,YAAQ,IAAI,GAAG,KAAK;AAAA,0BAA6B,mBAAmB,CAAC,EAAE,CAAC;AACxE,YAAQ,IAAI,GAAG,IAAI,GAAG,iBAAiB,CAAC;AAAA,CAAc,CAAC;AAGvD,UAAM,QAAQ,CAAC,QAAQ,UAAU,KAAK;AACtC,eAAW,QAAQ,OAAO;AACxB,YAAM,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,aAAa,IAAI;AAC3D,UAAI,cAAc,WAAW,EAAG;AAEhC,YAAM,YAAY,SAAS,SAAS,GAAG,MAAM,MAAM,IAAI,SAAS,WAAW,GAAG,OAAO,QAAQ,IAAI,GAAG,IAAI,KAAK;AAC7G,cAAQ,IAAI,GAAG,SAAS,YAAY;AAEpC,iBAAW,KAAK,eAAe;AAC7B,cAAM,SAAS,EAAE,WAAW,WACxB,GAAG,MAAM,QAAQ,IACjB,EAAE,WAAW,SACX,GAAG,OAAO,MAAM,IAChB,GAAG,IAAI,EAAE,MAAM;AAErB,gBAAQ,IAAI,KAAK,GAAG,KAAK,EAAE,UAAU,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,OAAO,EAAE,CAAC,KAAK,MAAM,GAAG;AAAA,MAChH;AACA,cAAQ,IAAI;AAAA,IACd;AAAA,EACF,CAAC;AAEH,YACG,QAAQ,QAAQ,EAChB,YAAY,iCAAiC,EAC7C,OAAO,UAAU,gBAAgB,EACjC,OAAO,aAAa,iCAAiC,EACrD,OAAO,OAAO,SAAgD;AAC7D,UAAM,UAAU,KAAK,UACjB,uBAAuB,QAAQ,IAAI,CAAC,IACpC,mBAAmB;AAEvB,UAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS;AAEnD,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,UAAU,IAAI,CAAC,OAAO;AAAA,QAC/C,IAAI,EAAE,SAAS;AAAA,QACf,UAAU,EAAE,SAAS;AAAA,QACrB,SAAS,EAAE;AAAA,QACX,iBAAiB,EAAE;AAAA,MACrB,EAAE,GAAG,MAAM,CAAC,CAAC;AACb;AAAA,IACF;AAEA,YAAQ,IAAI,GAAG,KAAK;AAAA,WAAc,UAAU,MAAM;AAAA,CAAyB,CAAC;AAE5E,eAAW,KAAK,WAAW;AACzB,YAAM,UAAU,EAAE,QAAQ,KAAK,IAAI;AACnC,YAAM,UAAU,EAAE,kBAAkB,GAAG,MAAM,YAAY,IAAI;AAC7D,cAAQ,IAAI,KAAK,GAAG,MAAM,QAAG,CAAC,IAAI,GAAG,KAAK,EAAE,SAAS,SAAS,OAAO,EAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,GAAG,OAAO,EAAE;AAAA,IAC9G;AAEA,UAAM,eAAe,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS;AACvD,QAAI,aAAa,SAAS,GAAG;AAC3B,cAAQ,IAAI,GAAG,IAAI;AAAA,IAAO,aAAa,MAAM,yBAAyB,CAAC;AAAA,IACzE;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AAEH,YACG,QAAQ,MAAM,EACd,YAAY,uBAAuB,EACnC,SAAS,QAAQ,sBAAsB,EACvC,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,IAAY,SAA6B;AACtD,UAAM,WAAW,YAAY,EAAE;AAE/B,QAAI,CAAC,UAAU;AACb,cAAQ,MAAM,GAAG,IAAI,uBAAuB,EAAE,EAAE,CAAC;AACjD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C;AAAA,IACF;AAEA,YAAQ,IAAI,GAAG,KAAK;AAAA,EAAK,SAAS,QAAQ,EAAE,CAAC;AAC7C,YAAQ,IAAI,GAAG,IAAI,MAAM,SAAS,MAAM;AAAA,CAAI,CAAC;AAE7C,YAAQ,IAAI,sBAAsB,SAAS,EAAE,EAAE;AAC/C,YAAQ,IAAI,8BAA8B,SAAS,SAAS,EAAE;AAC9D,QAAI,SAAS,QAAQ,SAAS,GAAG;AAC/B,cAAQ,IAAI,sBAAsB,SAAS,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,IACjE;AACA,YAAQ,IAAI,sBAAsB,SAAS,MAAM,EAAE;AACnD,YAAQ,IAAI,sBAAsB,SAAS,QAAQ,EAAE;AACrD,YAAQ,IAAI;AACZ,YAAQ,IAAI,sBAAsB,SAAS,YAAY,EAAE;AACzD,YAAQ,IAAI,sBAAsB,SAAS,YAAY,EAAE;AACzD,YAAQ,IAAI,sBAAsB,SAAS,SAAS,EAAE;AACtD,YAAQ,IAAI,sBAAsB,SAAS,oBAAoB,KAAK,IAAI,CAAC,EAAE;AAC3E,YAAQ,IAAI,sBAAsB,SAAS,kBAAkB,QAAQ,IAAI,EAAE;AAC3E,YAAQ,IAAI;AACZ,YAAQ,IAAI,GAAG,IAAI,UAAU,CAAC;AAC9B,YAAQ,IAAI,sBAAsB,SAAS,UAAU,EAAE;AACvD,YAAQ,IAAI,sBAAsB,SAAS,eAAe,QAAQ,EAAE;AACpE,YAAQ,IAAI,sBAAsB,SAAS,gBAAgB,EAAE;AAC7D,YAAQ,IAAI,sBAAsB,SAAS,qBAAqB,QAAQ,EAAE;AAC1E,YAAQ,IAAI,sBAAsB,SAAS,UAAU,EAAE;AACvD,YAAQ,IAAI,sBAAsB,SAAS,qBAAqB,QAAQ,EAAE;AAC1E,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;ACzIA,OAAOC,SAAQ;;;ACCf,SAAS,iBAAiB;AAC1B,SAAS,SAAS,UAAU;AAC5B,SAAS,cAAc;AACvB,SAAS,YAAY;AASrB,eAAsB,UACpB,OACA,MACA,KACA,SACyB;AACzB,QAAM,SAAS,MAAM,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC;AACrD,QAAM,UAAU,sBAAsB,KAAK,IAAI,IAAI;AAEnD,QAAM,MAAM,UAAU;AAEtB,QAAM,eAAe,CAAC,WAAW,GAAG;AACpC,MAAI,KAAK;AACP,iBAAa,KAAK,YAAY,GAAG;AAAA,EACnC;AAEA,QAAM,IAAI,MAAM,SAAS,QAAQ,YAAY;AAE7C,QAAM,YAAY,UAAU,KAAK,QAAQ,OAAO,IAAI;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,YAAY;AACnB,UAAI;AACF,cAAM,GAAG,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,MACtC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;;;AC5CA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,WAAAC,UAAS,MAAAC,WAAU;AAC5B,SAAS,UAAAC,eAAc;AACvB,SAAS,QAAAC,aAAY;AAIrB,eAAsB,gBACpB,OACA,MACA,KACA,SACyB;AACzB,QAAM,SAAS,MAAMH,SAAQG,MAAKD,QAAO,GAAG,WAAW,CAAC;AACxD,QAAM,UAAU,sBAAsB,KAAK,IAAI,IAAI;AAEnD,QAAM,MAAMH,WAAU;AAEtB,QAAM,eAAe,CAAC,WAAW,GAAG;AACpC,MAAI,KAAK;AACP,iBAAa,KAAK,YAAY,GAAG;AAAA,EACnC;AAEA,QAAM,IAAI,MAAM,SAAS,QAAQ,YAAY;AAE7C,QAAM,YAAY,UAAUI,MAAK,QAAQ,OAAO,IAAI;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,YAAY;AACnB,UAAI;AACF,cAAMF,IAAG,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,MACtC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;;;AFzBO,SAAS,sBAAsB,QAAuB;AAC3D,SACG,QAAQ,SAAS,EACjB,YAAY,kDAAkD,EAC9D,SAAS,YAAY,qDAAqD,EAC1E,OAAO,sBAAsB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAChG,OAAO,gBAAgB,kBAAkB,EACzC,OAAO,aAAa,mBAAmB,EACvC,OAAO,SAAS,gCAAgC,EAChD,OAAO,OAAO,QAAgB,SAKzB;AAEJ,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,sBAAsB;AAAA,IACpC,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,MAAMG,IAAG,IAAI,kDAAkD,CAAC;AACxE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ,IAAIA,IAAG,IAAI,iBAAiB,UAAU,MAAM,iBAAiB,CAAC;AAEtE,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI,aAAa;AAGjB,QAAI,oBAAoB,MAAM,GAAG;AAC/B,cAAQ,IAAIA,IAAG,IAAI,6BAA6B,MAAM,KAAK,CAAC;AAC5D,YAAM,SAAS,IAAI,kBAAkB;AACrC,YAAM,QAAQ,MAAM,OAAO,SAAS,MAAM;AAE1C,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAMA,IAAG,IAAI,oBAAoB,MAAM,EAAE,CAAC;AAClD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,cAAQ,IAAI,YAAYA,IAAG,KAAK,MAAM,IAAI,CAAC,OAAO,MAAM,MAAM,KAAKA,IAAG,IAAI,MAAM,YAAY,CAAC,GAAG;AAEhG,YAAM,SAAS,YAAY,MAAM,SAAS;AAC1C,UAAI,OAAO,SAAS,YAAY,CAAC,OAAO,SAAS,CAAC,OAAO,MAAM;AAC7D,gBAAQ,MAAMA,IAAG,IAAI,iCAAiC,CAAC;AACvD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,YAAM,SAAS,MAAM,UAAU,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,MAAM,OAAO,MAAM,KAAK,QAAQ,gBAAgB,EAAE,IAAI,MAAS;AACrI,kBAAY,OAAO;AACnB,gBAAU,OAAO;AACjB,kBAAY,MAAM;AAClB,oBAAc,MAAM;AAAA,IACtB,OAAO;AAEL,YAAM,SAAS,YAAY,MAAM;AACjC,kBAAY,OAAO;AACnB,oBAAc,OAAO;AAErB,UAAI,OAAO,SAAS,YAAY,OAAO,SAAS,OAAO,MAAM;AAC3D,cAAM,SAAS,MAAM,UAAU,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,OAAO,IAAI;AACjF,oBAAY,OAAO;AACnB,kBAAU,OAAO;AAAA,MACnB,WAAW,OAAO,SAAS,YAAY,OAAO,SAAS,OAAO,MAAM;AAClE,cAAM,SAAS,MAAM,gBAAgB,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,OAAO,IAAI;AACvF,oBAAY,OAAO;AACnB,kBAAU,OAAO;AAAA,MACnB,WAAW,OAAO,SAAS,SAAS;AAClC,oBAAY,OAAO;AAAA,MACrB,OAAO;AACL,gBAAQ,MAAMA,IAAG,IAAI,4BAA4B,OAAO,IAAI,EAAE,CAAC;AAC/D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,UAAU;AAAA,MACjB;AAEA,UAAI,OAAO,SAAS;AAClB,gBAAQ,IAAIA,IAAG,MAAM;AAAA,mBAAiBA,IAAG,KAAK,SAAS,CAAC,EAAE,CAAC;AAC3D,gBAAQ,IAAI,gBAAgBA,IAAG,IAAI,OAAO,aAAa,CAAC,EAAE;AAC1D,gBAAQ,IAAI,gBAAgB,OAAO,aAAa,KAAK,IAAI,CAAC,EAAE;AAG5D,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP,OAAO;AAAA,UACP,KAAK,UAAU;AAAA,QACjB;AAAA,MACF;AAEA,UAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,gBAAQ,IAAIA,IAAG,OAAO,aAAa,CAAC;AACpC,mBAAW,OAAO,OAAO,QAAQ;AAC/B,kBAAQ,IAAI,KAAKA,IAAG,OAAO,GAAG,CAAC,IAAI,GAAG,EAAE;AAAA,QAC1C;AAAA,MACF;AAAA,IACF,UAAE;AACA,UAAI,QAAS,OAAM,QAAQ;AAAA,IAC7B;AAAA,EACF,CAAC;AACL;;;AGrIA,OAAOC,SAAQ;AAKR,SAAS,qBAAqB,QAAuB;AAC1D,SACG,QAAQ,QAAQ,EAChB,YAAY,2BAA2B,EACvC,SAAS,UAAU,sBAAsB,EACzC,OAAO,gBAAgB,0BAA0B,EACjD,OAAO,aAAa,mBAAmB,EACvC,OAAO,OAAO,MAA0B,SAA8C;AACrF,UAAM,YAAY,sBAAsB;AAExC,QAAI,MAAM;AACR,YAAM,SAAS,MAAM,YAAY,MAAM,WAAW,KAAK,UAAU,KAAK;AAEtE,UAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,gBAAQ,IAAIC,IAAG,MAAM,kBAAaA,IAAG,KAAK,IAAI,CAAC,UAAU,OAAO,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;AACrF,cAAM,oBAAoB,IAAI;AAAA,MAChC,OAAO;AACL,gBAAQ,IAAIA,IAAG,OAAO,SAAS,IAAI,6BAA6B,CAAC;AAAA,MACnE;AAEA,UAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,mBAAW,OAAO,OAAO,QAAQ;AAC/B,kBAAQ,IAAIA,IAAG,IAAI,KAAK,GAAG,EAAE,CAAC;AAAA,QAChC;AAAA,MACF;AAAA,IACF,OAAO;AAEL,YAAM,SAAS,MAAM,oBAAoB;AACzC,UAAI,OAAO,WAAW,GAAG;AACvB,gBAAQ,IAAIA,IAAG,IAAI,sBAAsB,CAAC;AAC1C;AAAA,MACF;AAEA,cAAQ,IAAIA,IAAG,KAAK,mBAAmB,CAAC;AACxC,iBAAW,KAAK,QAAQ;AACtB,gBAAQ,IAAI,KAAK,CAAC,EAAE;AAAA,MACtB;AACA,cAAQ,IAAIA,IAAG,IAAI,mCAAmC,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACL;;;AC7CA,OAAOC,SAAQ;AAKf,SAAS,QAAAC,aAAY;AAEd,SAAS,mBAAmB,QAAuB;AACxD,SACG,QAAQ,MAAM,EACd,YAAY,uBAAuB,EACnC,OAAO,gBAAgB,oBAAoB,EAC3C,OAAO,sBAAsB,gCAAgC,EAC7D,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA+D;AAC5E,QAAI,OAAiB,CAAC;AAEtB,QAAI,KAAK,OAAO;AACd,YAAM,WAAW,YAAY,KAAK,KAAK;AACvC,UAAI,CAAC,UAAU;AACb,gBAAQ,MAAMC,IAAG,IAAI,uBAAuB,KAAK,KAAK,EAAE,CAAC;AACzD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,aAAO,KAAK,SACR,CAAC,SAAS,UAAU,IACpB,CAACD,MAAK,QAAQ,IAAI,GAAG,SAAS,iBAAiB,CAAC;AAAA,IACtD,WAAW,KAAK,QAAQ;AAEtB,YAAM,YAAY,sBAAsB;AACxC,aAAO,UAAU,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,OAAO;AAAA,IAC1D,OAAO;AAEL,YAAM,YAAY,sBAAsB;AACxC,aAAO,UACJ,IAAI,CAAC,MAAMA,MAAK,QAAQ,IAAI,GAAG,EAAE,iBAAiB,CAAC,EACnD,OAAO,OAAO;AAAA,IACnB;AAEA,UAAM,SAAS,MAAM,oBAAoB,IAAI;AAE7C,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C;AAAA,IACF;AAEA,QAAI,OAAO,WAAW,GAAG;AACvB,cAAQ,IAAIC,IAAG,IAAI,kBAAkB,CAAC;AACtC;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,KAAK;AAAA,EAAK,OAAO,MAAM;AAAA,CAAoB,CAAC;AAE3D,eAAW,SAAS,QAAQ;AAC1B,cAAQ,IAAI,KAAKA,IAAG,KAAK,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC,IAAIA,IAAG,IAAI,MAAM,SAAS,eAAe,EAAE,CAAC,EAAE;AAAA,IAC/F;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;AC1DA,OAAOC,SAAQ;AAGR,SAAS,mBAAmB,QAAuB;AACxD,SACG,QAAQ,MAAM,EACd,YAAY,+BAA+B,EAC3C,SAAS,WAAW,cAAc,EAClC,OAAO,UAAU,gBAAgB,EACjC,OAAO,mBAAmB,eAAe,IAAI,EAC7C,OAAO,OAAO,OAA2B,SAA4C;AACpF,QAAI,CAAC,OAAO;AACV,cAAQ,IAAIC,IAAG,IAAI,kCAAkC,CAAC;AACtD;AAAA,IACF;AAEA,UAAM,QAAQ,SAAS,KAAK,OAAO,EAAE;AACrC,UAAM,SAAS,IAAI,kBAAkB;AAErC,YAAQ,IAAIA,IAAG,IAAI,+BAA+B,KAAK;AAAA,CAAQ,CAAC;AAEhE,UAAM,UAAU,MAAM,OAAO,OAAO,OAAO,KAAK;AAEhD,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIA,IAAG,OAAO,mBAAmB,CAAC;AAC1C;AAAA,IACF;AAEA,eAAW,SAAS,SAAS;AAC3B,YAAM,QAAQ,MAAM,QAAQ,IAAIA,IAAG,OAAO,UAAK,YAAY,MAAM,KAAK,CAAC,EAAE,IAAI;AAC7E,cAAQ,IAAI,KAAKA,IAAG,KAAK,MAAM,WAAW,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE;AAChE,cAAQ,IAAI,KAAKA,IAAG,IAAI,MAAM,aAAa,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AAChE,cAAQ,IAAI,KAAKA,IAAG,IAAI,QAAQ,MAAM,MAAM,EAAE,CAAC,EAAE;AACjD,cAAQ,IAAI;AAAA,IACd;AAEA,YAAQ,IAAIA,IAAG,IAAI,iDAAiD,CAAC;AAAA,EACvE,CAAC;AACL;AAEA,SAAS,YAAY,GAAmB;AACtC,MAAI,KAAK,IAAM,QAAO,IAAI,IAAI,KAAM,QAAQ,CAAC,CAAC;AAC9C,SAAO,OAAO,CAAC;AACjB;;;AChDA,OAAOC,SAAQ;AAGR,SAAS,oBAAoB,QAAuB;AACzD,SACG,QAAQ,OAAO,EACf,YAAY,mCAAmC,EAC/C,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA6B;AAC1C,UAAM,UAAU,MAAM,iBAAiB;AACvC,UAAM,UAAU,OAAO,QAAQ,OAAO;AAEtC,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIC,IAAG,IAAI,oBAAoB,CAAC;AACxC;AAAA,IACF;AAEA,UAAM,UAAU,CAAC;AACjB,eAAW,CAAC,MAAM,KAAK,KAAK,SAAS;AACnC,YAAM,SAAS,MAAM,iBAAiB,IAAI;AAC1C,cAAQ,KAAK,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC;AAAA,IACzC;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,KAAK;AAAA,EAAK,QAAQ,MAAM;AAAA,CAAsB,CAAC;AAE9D,eAAW,KAAK,SAAS;AACvB,YAAM,SAAS,EAAE,YACbA,IAAG,OAAO,kBAAkB,IAC5BA,IAAG,MAAM,YAAY;AAEzB,cAAQ,IAAI,KAAKA,IAAG,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE;AACvD,cAAQ,IAAI,KAAKA,IAAG,IAAI,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC,EAAE;AACtD,cAAQ,IAAI,KAAKA,IAAG,IAAI,WAAW,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE;AACjE,cAAQ,IAAI;AAAA,IACd;AAAA,EACF,CAAC;AACL;;;ACzCA,OAAOC,SAAQ;AAGR,SAAS,qBAAqB,QAAuB;AAC1D,SACG,QAAQ,QAAQ,EAChB,YAAY,4BAA4B,EACxC,OAAO,aAAa,mBAAmB,EACvC,OAAO,OAAO,SAA4B;AACzC,UAAM,UAAU,MAAM,iBAAiB;AACvC,UAAM,UAAU,OAAO,QAAQ,OAAO;AAEtC,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIC,IAAG,IAAI,8BAA8B,CAAC;AAClD;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,IAAI,YAAY,QAAQ,MAAM,0BAA0B,CAAC;AAGxE,YAAQ,IAAIA,IAAG,IAAI,4BAA4B,CAAC;AAChD,YAAQ,IAAIA,IAAG,IAAI,kCAAkC,CAAC;AACtD,YAAQ,IAAIA,IAAG,IAAI,iCAAiC,CAAC;AAAA,EACvD,CAAC;AACL;;;ACxBA,OAAOC,SAAQ;AACf,SAAS,WAAW,aAAa;AACjC,SAAS,kBAAkB;AAC3B,SAAS,QAAAC,aAAY;AAEd,SAAS,mBAAmB,QAAuB;AACxD,SACG,QAAQ,MAAM,EACd,YAAY,gCAAgC,EAC5C,SAAS,UAAU,YAAY,EAC/B,OAAO,oBAAoB,oBAAoB,GAAG,EAClD,OAAO,OAAO,MAA0B,SAA0B;AACjE,UAAM,YAAY,QAAQ;AAC1B,UAAM,WAAWA,MAAK,KAAK,KAAK,SAAS;AAEzC,QAAI,WAAW,QAAQ,GAAG;AACxB,cAAQ,MAAMD,IAAG,IAAI,6BAA6B,QAAQ,EAAE,CAAC;AAC7D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAEzC,UAAM,WAAW;AAAA,QACf,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeP,UAAM,UAAUC,MAAK,UAAU,UAAU,GAAG,UAAU,OAAO;AAE7D,YAAQ,IAAID,IAAG,MAAM,kCAA6B,QAAQ,WAAW,CAAC;AACtE,YAAQ,IAAIA,IAAG,IAAI,eAAe,CAAC;AACnC,YAAQ,IAAIA,IAAG,IAAI,2CAA2C,CAAC;AAC/D,YAAQ,IAAIA,IAAG,IAAI,0CAA0CC,MAAK,UAAU,UAAU,CAAC,CAAC;AACxF,YAAQ,IAAID,IAAG,IAAI,wCAAwC,QAAQ,CAAC;AAAA,EACtE,CAAC;AACL;;;ACtDA,OAAOE,SAAQ;AAEf,SAAS,cAAAC,aAAY,gBAAgB;AAE9B,SAAS,oBAAoB,QAAuB;AACzD,SACG,QAAQ,OAAO,EACf,YAAY,qDAAqD,EACjE,SAAS,UAAU,iCAAiC,GAAG,EACvD,OAAO,WAAW,wBAAwB,EAC1C,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,MAAc,SAA8C;AACzE,QAAI,CAACA,YAAW,IAAI,GAAG;AACrB,cAAQ,MAAMC,IAAG,IAAI,mBAAmB,IAAI,EAAE,CAAC;AAC/C,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,OAAO,SAAS,IAAI;AAC1B,QAAI;AAEJ,QAAI,KAAK,OAAO,GAAG;AACjB,gBAAU,CAAC,MAAM,SAAS,IAAI,CAAC;AAAA,IACjC,OAAO;AACL,gBAAU,MAAM,cAAc,IAAI;AAAA,IACpC;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIA,IAAG,IAAI,kCAAkC,CAAC;AACtD;AAAA,IACF;AAEA,QAAI,KAAK,OAAO;AACd,cAAQ,IAAI,KAAK,UAAU,QAAQ,OAAO,GAAG,MAAM,CAAC,CAAC;AACrD;AAAA,IACF;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,IACF;AAGA,QAAI,gBAAgB;AACpB,QAAI,YAAY;AAEhB,eAAW,UAAU,SAAS;AAC5B,YAAM,OAAO,OAAO,SAASA,IAAG,MAAM,QAAG,IAAIA,IAAG,IAAI,QAAG;AACvD,cAAQ,IAAI;AAAA,EAAK,IAAI,IAAIA,IAAG,KAAK,OAAO,IAAI,CAAC,YAAY,OAAO,KAAK,OAAO;AAE5E,UAAI,OAAO,SAAS,WAAW,GAAG;AAChC,gBAAQ,IAAIA,IAAG,IAAI,oBAAoB,CAAC;AACxC;AAAA,MACF;AAEA,uBAAiB,OAAO,SAAS;AACjC,UAAI,CAAC,OAAO,OAAQ,aAAY;AAEhC,iBAAW,KAAK,OAAO,UAAU;AAC/B,cAAM,MAAM,EAAE,KAAK,aAAa,aAAaA,IAAG,IAAI,EAAE,KAAK,QAAQ,IAC/D,EAAE,KAAK,aAAa,SAASA,IAAG,IAAI,EAAE,KAAK,QAAQ,IACjD,EAAE,KAAK,aAAa,WAAWA,IAAG,OAAO,EAAE,KAAK,QAAQ,IACtDA,IAAG,IAAI,EAAE,KAAK,QAAQ;AAE9B,gBAAQ,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;AAC7D,gBAAQ,IAAI,KAAKA,IAAG,IAAI,IAAI,EAAE,IAAI,KAAK,EAAE,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AAAA,MACpE;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,KAAK;AAAA,EAAK,QAAQ,MAAM,qBAAqB,aAAa,aAAa,CAAC;AAEvF,QAAI,CAAC,WAAW;AACd,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AACL;;;AC1EA,OAAOC,UAAQ;AAGR,SAAS,uBAAuB,QAAuB;AAC5D,SACG,QAAQ,UAAU,EAClB,YAAY,0BAA0B,EACtC,SAAS,UAAU,oBAAoB,UAAU,EACjD,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,MAAc,SAA6B;AACxD,UAAM,SAAS,MAAM,cAAc,IAAI;AAEvC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C;AAAA,IACF;AAEA,QAAI,OAAO,OAAO;AAChB,cAAQ,IAAIC,KAAG,MAAM,UAAK,IAAI,WAAW,CAAC;AAAA,IAC5C,OAAO;AACL,cAAQ,IAAIA,KAAG,IAAI,UAAK,IAAI,wBAAwB,CAAC;AAAA,IACvD;AAEA,eAAW,SAAS,OAAO,QAAQ;AACjC,YAAM,OAAO,MAAM,UAAU,UAAUA,KAAG,IAAI,QAAG,IAAIA,KAAG,OAAO,GAAG;AAClE,cAAQ,IAAI,KAAK,IAAI,KAAK,MAAM,KAAK,KAAK,MAAM,OAAO,EAAE;AAAA,IAC3D;AAEA,QAAI,CAAC,OAAO,OAAO;AACjB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AACL;;;ACtBO,SAAS,uBAAuBC,UAAwB;AAC7D,QAAM,SAASA,SACZ,QAAQ,QAAQ,EAChB,YAAY,wBAAwB;AAEvC,wBAAsB,MAAM;AAC5B,uBAAqB,MAAM;AAC3B,qBAAmB,MAAM;AACzB,qBAAmB,MAAM;AACzB,sBAAoB,MAAM;AAC1B,uBAAqB,MAAM;AAC3B,qBAAmB,MAAM;AACzB,sBAAoB,MAAM;AAC1B,yBAAuB,MAAM;AAC/B;;;ACxBA,OAAOC,UAAQ;AAQR,SAAS,mBAAmB,QAAuB;AACxD,SACG,QAAQ,SAAS,EACjB,YAAY,qCAAqC,EACjD,SAAS,YAAY,kDAAkD,EACvE,OAAO,sBAAsB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAChG,OAAO,gBAAgB,+BAA+B,EACtD,OAAO,qBAAqB,+BAA+B,EAC3D,OAAO,0BAA0B,yCAAyC,MAAM,EAChF,OAAO,qBAAqB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAC/F,OAAO,aAAa,mBAAmB,EACvC,OAAO,SAAS,gCAAgC,EAChD,OAAO,aAAa,yBAAyB,EAC7C,OAAO,OAAO,QAAgB,SASzB;AACJ,UAAM,SAAS,YAAY,MAAM;AACjC,UAAM,aAAa,KAAK,QAAQ,OAAO;AAGvC,UAAM,UAAkC,CAAC;AACzC,eAAW,KAAK,KAAK,QAAQ;AAC3B,YAAM,MAAM,EAAE,QAAQ,GAAG;AACzB,UAAI,MAAM,GAAG;AACX,gBAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,EAAE,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,UAAM,SAAS,kBAAkB,QAAQ,KAAK,WAAW,OAAO;AAGhE,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,sBAAsB;AAAA,IACpC,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,MAAMC,KAAG,IAAI,4BAA4B,CAAC;AAClD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAEhD,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAIA,KAAG,KAAK,0BAA0B,CAAC;AAC/C,cAAQ,IAAI,aAAaA,KAAG,KAAK,UAAU,CAAC,EAAE;AAC9C,cAAQ,IAAI,aAAa,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC,EAAE;AAC1D,cAAQ,IAAI,YAAY,KAAK,EAAE;AAC/B,cAAQ,IAAI,gBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AACnE;AAAA,IACF;AAEA,YAAQ,IAAIA,KAAG,IAAI,eAAe,UAAU,QAAQ,UAAU,MAAM;AAAA,CAAmB,CAAC;AAExF,UAAM,UAAU,MAAM;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,eAAW,KAAK,SAAS;AACvB,UAAI,EAAE,SAAS;AACb,gBAAQ,IAAI,KAAKA,KAAG,MAAM,QAAG,CAAC,IAAI,EAAE,SAAS,SAAS,OAAO,EAAE,CAAC,IAAIA,KAAG,IAAI,EAAE,UAAU,CAAC,EAAE;AAAA,MAC5F,OAAO;AACL,gBAAQ,IAAI,KAAKA,KAAG,IAAI,QAAG,CAAC,IAAI,EAAE,SAAS,SAAS,OAAO,EAAE,CAAC,IAAIA,KAAG,IAAI,EAAE,SAAS,QAAQ,CAAC,EAAE;AAAA,MACjG;AAAA,IACF;AAEA,UAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO;AACjD,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;AAAA,QAClC,KAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAEA,YAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,UAAU,MAAM,IAAI,QAAQ,MAAM,wBAAwB,CAAC;AAAA,EACtF,CAAC;AACL;;;ACxGA,OAAOC,UAAQ;AAOR,SAAS,kBAAkB,QAAuB;AACvD,SACG,QAAQ,QAAQ,EAChB,YAAY,sCAAsC,EAClD,SAAS,UAAU,2BAA2B,EAC9C,OAAO,sBAAsB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAChG,OAAO,gBAAgB,2BAA2B,EAClD,OAAO,SAAS,iCAAiC,EACjD,OAAO,OAAO,MAAc,SAIvB;AACJ,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,sBAAsB;AAAA,IACpC,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAChD,QAAI,UAAU;AAEd,eAAW,YAAY,WAAW;AAChC,YAAM,UAAU,MAAM,gBAAgB,UAAU,MAAM,KAAK;AAC3D,UAAI,SAAS;AACX,gBAAQ,IAAI,KAAKC,KAAG,MAAM,QAAG,CAAC,iBAAiB,SAAS,QAAQ,EAAE;AAClE;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,GAAG;AACf,YAAM,kBAAkB,IAAI;AAC5B,cAAQ,IAAIA,KAAG,MAAM;AAAA,kBAAgB,IAAI,UAAU,OAAO,eAAe,CAAC;AAAA,IAC5E,OAAO;AACL,cAAQ,IAAIA,KAAG,OAAO,WAAW,IAAI,qCAAqC,CAAC;AAAA,IAC7E;AAAA,EACF,CAAC;AACL;;;AClDA,OAAOC,UAAQ;AAMR,SAAS,gBAAgB,QAAuB;AACrD,SACG,QAAQ,MAAM,EACd,YAAY,6BAA6B,EACzC,OAAO,sBAAsB,yBAAyB,EACtD,OAAO,gBAAgB,oBAAoB,EAC3C,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA+D;AAC5E,UAAM,YAAY,KAAK,QACnB,CAAC,YAAY,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,MAAkC,MAAM,MAAS,IACnF,sBAAsB;AAE1B,UAAM,aAA+B,CAAC;AAEtC,eAAW,YAAY,WAAW;AAEhC,YAAM,QAA8B,KAAK,SACrC,WACA,SAAS,oBACP,YACA;AAEN,YAAM,UAAU,MAAM,eAAe,UAAU,KAAK;AACpD,iBAAW,KAAK,GAAG,OAAO;AAAA,IAC5B;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,WAAW,IAAI,QAAM;AAAA,QAC9C,UAAU,EAAE;AAAA,QACZ,MAAM,EAAE;AAAA,QACR,QAAQ,EAAE;AAAA,MACZ,EAAE,GAAG,MAAM,CAAC,CAAC;AACb;AAAA,IACF;AAEA,QAAI,WAAW,WAAW,GAAG;AAC3B,cAAQ,IAAIC,KAAG,IAAI,4BAA4B,CAAC;AAChD;AAAA,IACF;AAEA,YAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,WAAW,MAAM;AAAA,CAA8B,CAAC;AAEzE,eAAW,SAAS,YAAY;AAC9B,cAAQ,IAAI,KAAKA,KAAG,KAAK,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC,IAAIA,KAAG,IAAI,MAAM,UAAU,CAAC,EAAE;AAAA,IAC/E;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;ACtDA,OAAOC,UAAQ;AACf,SAAS,cAAAC,mBAAkB;AAIpB,SAAS,kBAAkB,QAAuB;AACvD,SACG,QAAQ,QAAQ,EAChB,YAAY,0DAA0D,EACtE,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA6B;AAC1C,UAAM,YAAY,sBAAsB;AAExC,UAAM,WAMD,CAAC;AAEN,eAAW,YAAY,WAAW;AAChC,YAAM,aAAa,kBAAkB,UAAU,QAAQ;AACvD,YAAM,cAAc,kBAAkB,UAAU,SAAS;AAEzD,YAAM,gBAAgB,MAAM,eAAe,UAAU,QAAQ;AAC7D,YAAM,iBAAiB,MAAM,eAAe,UAAU,SAAS;AAE/D,eAAS,KAAK;AAAA,QACZ,UAAU,SAAS;AAAA,QACnB,iBAAiB,eAAe,QAAQC,YAAW,UAAU;AAAA,QAC7D,kBAAkB,gBAAgB,QAAQA,YAAW,WAAW;AAAA,QAChE,eAAe,cAAc,IAAI,OAAK,EAAE,IAAI;AAAA,QAC5C,gBAAgB,eAAe,IAAI,OAAK,EAAE,IAAI;AAAA,MAChD,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C;AAAA,IACF;AAEA,YAAQ,IAAIC,KAAG,KAAK;AAAA,EAAK,SAAS,MAAM;AAAA,CAAkC,CAAC;AAE3E,eAAW,KAAK,UAAU;AACxB,YAAM,aAAa,EAAE,kBAAkBA,KAAG,MAAM,GAAG,IAAIA,KAAG,IAAI,GAAG;AACjE,YAAM,cAAc,EAAE,mBAAmBA,KAAG,MAAM,GAAG,IAAIA,KAAG,IAAI,GAAG;AACnE,YAAM,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,EAAE,cAAc;AACxD,YAAM,aAAa,QAAQ,SAAS,IAAIA,KAAG,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAIA,KAAG,IAAI,YAAY;AAExF,cAAQ,IAAI,MAAM,UAAU,GAAG,WAAW,KAAKA,KAAG,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,IAAI,UAAU,EAAE;AAAA,IAC/F;AAEA,YAAQ,IAAIA,KAAG,IAAI,yCAAyC,CAAC;AAC7D,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;ACnDO,SAAS,oBAAoBC,UAAwB;AAC1D,QAAM,MAAMA,SACT,QAAQ,KAAK,EACb,YAAY,kCAAkC;AAEjD,qBAAmB,GAAG;AACtB,oBAAkB,GAAG;AACrB,kBAAgB,GAAG;AACnB,oBAAkB,GAAG;AACvB;;;ACdA,OAAOC,UAAQ;AAOR,SAAS,2BAA2B,QAAuB;AAChE,SACG,QAAQ,QAAQ,EAChB,YAAY,mDAAmD,EAC/D,OAAO,sBAAsB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAChG,OAAO,gBAAgB,sCAAsC,EAC7D,OAAO,oBAAoB,0BAA0B,EACrD,OAAO,aAAa,yBAAyB,EAC7C,OAAO,SAAS,4BAA4B,EAC5C,OAAO,OAAO,SAMT;AACJ,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,gBAAgB;AAAA,IAC9B,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,MAAMC,KAAG,IAAI,qBAAqB,CAAC;AAC3C,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,UAAU,KAAK,WAAW,yBAAyB;AACzD,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAGhD,UAAM,SAAS,oBAAoB,SAAS;AAE5C,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAIA,KAAG,KAAK,gCAAgC,CAAC;AACrD,iBAAW,CAAC,MAAM,KAAK,KAAK,QAAQ;AAClC,gBAAQ,IAAI,KAAKA,KAAG,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,MACxE;AACA,cAAQ,IAAIA,KAAG,IAAI;AAAA,WAAc,KAAK,EAAE,CAAC;AACzC,cAAQ,IAAIA,KAAG,IAAI,qBAAqB,QAAQ,MAAM,QAAQ,CAAC;AAC/D;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,UAAU,WAAW,QAAQ,IAAI,GAAG,OAAO,OAAO;AAExE,eAAW,CAAC,MAAM,MAAM,KAAK,SAAS;AACpC,YAAM,OAAO,WAAW,YAAYA,KAAG,MAAM,GAAG,IAC5C,WAAW,YAAYA,KAAG,OAAO,GAAG,IAClCA,KAAG,KAAK,GAAG;AACjB,cAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG;AAAA,IAC7C;AAEA,YAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,QAAQ,IAAI,qBAAqB,CAAC;AAAA,EAC7D,CAAC;AACL;;;ACnEA,OAAOC,UAAQ;AAMR,SAAS,0BAA0B,QAAuB;AAC/D,SACG,QAAQ,OAAO,EACf,YAAY,yCAAyC,EACrD,OAAO,sBAAsB,2BAA2B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAC/F,OAAO,gBAAgB,gCAAgC,EACvD,OAAO,UAAU,gBAAgB,EACjC,OAAO,SAAS,2BAA2B,EAC3C,OAAO,OAAO,SAKT;AACJ,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,gBAAgB;AAAA,IAC9B,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAChD,UAAM,UAAU,MAAM,mBAAmB,WAAW,QAAQ,IAAI,GAAG,KAAK;AAExE,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,IACF;AAEA,YAAQ,IAAIC,KAAG,KAAK;AAAA,2BAA8B,KAAK;AAAA,CAAM,CAAC;AAE9D,eAAW,KAAK,SAAS;AACvB,UAAI;AACJ,UAAI;AAEJ,cAAQ,EAAE,QAAQ;AAAA,QAChB,KAAK;AACH,iBAAOA,KAAG,MAAM,QAAG;AACnB,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,iBAAOA,KAAG,OAAO,GAAG;AACpB,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,iBAAOA,KAAG,IAAI,QAAG;AACjB,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,iBAAOA,KAAG,IAAI,GAAG;AACjB,kBAAQ;AACR;AAAA,MACJ;AAEA,cAAQ,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE;AAAA,IACvD;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;ACtEA,OAAOC,UAAQ;AAMR,SAAS,2BAA2B,QAAuB;AAChE,SACG,QAAQ,QAAQ,EAChB,YAAY,wCAAwC,EACpD,OAAO,gBAAgB,iCAAiC,EACxD,OAAO,aAAa,mBAAmB,EACvC,OAAO,OAAO,SAA8C;AAC3D,UAAM,YAAY,sBAAsB;AACxC,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAChD,UAAM,UAAU,yBAAyB;AAGzC,UAAM,SAAS,MAAM,mBAAmB,WAAW,QAAQ,IAAI,GAAG,OAAO,OAAO;AAChF,UAAM,cAAc,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,SAAS;AAE/D,QAAI,YAAY,WAAW,GAAG;AAC5B,cAAQ,IAAIC,KAAG,MAAM,uCAAuC,CAAC;AAC7D;AAAA,IACF;AAEA,YAAQ,IAAIA,KAAG,KAAK,GAAG,YAAY,MAAM;AAAA,CAA2B,CAAC;AACrE,eAAW,KAAK,aAAa;AAC3B,cAAQ,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,MAAM,GAAG;AAAA,IACzC;AAGA,UAAM,cAAc,IAAI,IAAI,YAAY,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC9D,UAAM,WAAW,UAAU,OAAO,CAAC,MAAM,YAAY,IAAI,EAAE,EAAE,CAAC;AAE9D,UAAM,UAAU,MAAM,UAAU,UAAU,QAAQ,IAAI,GAAG,OAAO,OAAO;AAEvE,YAAQ,IAAI;AACZ,eAAW,CAAC,MAAM,MAAM,KAAK,SAAS;AACpC,cAAQ,IAAI,KAAKA,KAAG,MAAM,QAAG,CAAC,IAAI,IAAI,KAAK,MAAM,GAAG;AAAA,IACtD;AAEA,YAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,QAAQ,IAAI,mBAAmB,CAAC;AAAA,EAC3D,CAAC;AACL;;;ACxCO,SAAS,6BAA6BC,UAAwB;AACnE,QAAM,eAAeA,SAClB,QAAQ,cAAc,EACtB,YAAY,oCAAoC;AAEnD,6BAA2B,YAAY;AACvC,4BAA0B,YAAY;AACtC,6BAA2B,YAAY;AACzC;;;ACZA,OAAOC,UAAQ;AAEf,SAAS,QAAAC,aAAY;AACrB,SAAS,cAAAC,mBAAkB;AAGpB,SAAS,sBAAsBC,UAAwB;AAC5D,QAAM,SAASA,SACZ,QAAQ,QAAQ,EAChB,YAAY,6BAA6B;AAE5C,SACG,QAAQ,MAAM,EACd,YAAY,6BAA6B,EACzC,SAAS,cAAc,sBAAsB,EAC7C,OAAO,gBAAgB,oBAAoB,EAC3C,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,YAAoB,SAA+C;AAChF,UAAM,WAAW,YAAY,UAAU;AAEvC,QAAI,CAAC,UAAU;AACb,cAAQ,MAAMC,KAAG,IAAI,uBAAuB,UAAU,EAAE,CAAC;AACzD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,aAAa,KAAK,SACpB,SAAS,mBACT,SAAS,oBACPC,MAAK,QAAQ,IAAI,GAAG,SAAS,iBAAiB,IAC9C,SAAS;AAEf,QAAI,CAACC,YAAW,UAAU,GAAG;AAC3B,cAAQ,IAAIF,KAAG,IAAI,sBAAsB,UAAU,EAAE,CAAC;AACtD;AAAA,IACF;AAEA,QAAI;AACF,YAAM,OAAO,MAAM,WAAW,YAAY,SAAS,YAAY;AAE/D,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,MAC3C,OAAO;AACL,gBAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,SAAS,QAAQ,YAAY,UAAU;AAAA,CAAM,CAAC;AACvE,gBAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,MAC3C;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAMA,KAAG,IAAI,yBAAyB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE,CAAC;AACjG,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,SACG,QAAQ,MAAM,EACd,YAAY,uBAAuB,EACnC,SAAS,cAAc,sBAAsB,EAC7C,SAAS,WAAW,sCAAsC,SAAS,EACnE,OAAO,CAAC,YAAoB,UAAkB;AAC7C,UAAM,WAAW,YAAY,UAAU;AAEvC,QAAI,CAAC,UAAU;AACb,cAAQ,MAAMA,KAAG,IAAI,uBAAuB,UAAU,EAAE,CAAC;AACzD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,UAAU,UAAU;AACtB,cAAQ,IAAI,SAAS,gBAAgB;AAAA,IACvC,OAAO;AACL,UAAI,SAAS,mBAAmB;AAC9B,gBAAQ,IAAIC,MAAK,QAAQ,IAAI,GAAG,SAAS,iBAAiB,CAAC;AAAA,MAC7D,OAAO;AACL,gBAAQ,IAAID,KAAG,IAAI,GAAG,SAAS,QAAQ,8BAA8B,CAAC;AACtE,gBAAQ,IAAI,SAAS,gBAAgB;AAAA,MACvC;AAAA,IACF;AAAA,EACF,CAAC;AACL;;;AvBnEA,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACG,KAAK,OAAO,EACZ,YAAY,mFAAmF,EAC/F,QAAQ,OAAO;AAGlB,yBAAyB,OAAO;AAChC,uBAAuB,OAAO;AAC9B,oBAAoB,OAAO;AAC3B,6BAA6B,OAAO;AACpC,sBAAsB,OAAO;AAE7B,QAAQ,MAAM;","names":["program","pc","simpleGit","mkdtemp","rm","tmpdir","join","pc","pc","pc","pc","join","pc","pc","pc","pc","pc","pc","pc","pc","join","pc","existsSync","pc","pc","pc","program","pc","pc","pc","pc","pc","pc","pc","existsSync","existsSync","pc","program","pc","pc","pc","pc","pc","pc","program","pc","join","existsSync","program","pc","join","existsSync"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/commands/providers.ts","../src/commands/skills/install.ts","../src/core/sources/github.ts","../src/core/sources/gitlab.ts","../src/commands/skills/remove.ts","../src/commands/skills/list.ts","../src/commands/skills/find.ts","../src/commands/skills/check.ts","../src/commands/skills/update.ts","../src/commands/skills/init.ts","../src/commands/skills/audit.ts","../src/commands/skills/validate.ts","../src/commands/skills/index.ts","../src/commands/mcp/install.ts","../src/commands/mcp/remove.ts","../src/commands/mcp/list.ts","../src/commands/mcp/detect.ts","../src/commands/mcp/index.ts","../src/commands/instructions/inject.ts","../src/commands/instructions/check.ts","../src/commands/instructions/update.ts","../src/commands/instructions/index.ts","../src/commands/config.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * CAAMP CLI - Central AI Agent Managed Packages\n */\n\nimport { Command } from \"commander\";\nimport { registerProvidersCommand } from \"./commands/providers.js\";\nimport { registerSkillsCommands } from \"./commands/skills/index.js\";\nimport { registerMcpCommands } from \"./commands/mcp/index.js\";\nimport { registerInstructionsCommands } from \"./commands/instructions/index.js\";\nimport { registerConfigCommand } from \"./commands/config.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"caamp\")\n .description(\"Central AI Agent Managed Packages - unified provider registry and package manager\")\n .version(\"0.2.0\");\n\n// Register command groups\nregisterProvidersCommand(program);\nregisterSkillsCommands(program);\nregisterMcpCommands(program);\nregisterInstructionsCommands(program);\nregisterConfigCommand(program);\n\nprogram.parse();\n","/**\n * providers list|detect|show commands\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n getAllProviders,\n getProvider,\n getProviderCount,\n getRegistryVersion,\n getProvidersByPriority,\n} from \"../core/registry/providers.js\";\nimport { detectAllProviders, detectProjectProviders } from \"../core/registry/detection.js\";\n\nexport function registerProvidersCommand(program: Command): void {\n const providers = program\n .command(\"providers\")\n .description(\"Manage AI agent providers\");\n\n providers\n .command(\"list\")\n .description(\"List all supported providers\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--tier <tier>\", \"Filter by priority tier (high, medium, low)\")\n .action(async (opts: { json?: boolean; tier?: string }) => {\n const all = opts.tier\n ? getProvidersByPriority(opts.tier as \"high\" | \"medium\" | \"low\")\n : getAllProviders();\n\n if (opts.json) {\n console.log(JSON.stringify(all, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nCAMP Provider Registry v${getRegistryVersion()}`));\n console.log(pc.dim(`${getProviderCount()} providers\\n`));\n\n // Group by priority\n const tiers = [\"high\", \"medium\", \"low\"] as const;\n for (const tier of tiers) {\n const tierProviders = all.filter((p) => p.priority === tier);\n if (tierProviders.length === 0) continue;\n\n const tierLabel = tier === \"high\" ? pc.green(\"HIGH\") : tier === \"medium\" ? pc.yellow(\"MEDIUM\") : pc.dim(\"LOW\");\n console.log(`${tierLabel} priority:`);\n\n for (const p of tierProviders) {\n const status = p.status === \"active\"\n ? pc.green(\"active\")\n : p.status === \"beta\"\n ? pc.yellow(\"beta\")\n : pc.dim(p.status);\n\n console.log(` ${pc.bold(p.agentFlag.padEnd(20))} ${p.toolName.padEnd(22)} ${p.vendor.padEnd(16)} [${status}]`);\n }\n console.log();\n }\n });\n\n providers\n .command(\"detect\")\n .description(\"Auto-detect installed providers\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--project\", \"Include project-level detection\")\n .action(async (opts: { json?: boolean; project?: boolean }) => {\n const results = opts.project\n ? detectProjectProviders(process.cwd())\n : detectAllProviders();\n\n const installed = results.filter((r) => r.installed);\n\n if (opts.json) {\n console.log(JSON.stringify(installed.map((r) => ({\n id: r.provider.id,\n toolName: r.provider.toolName,\n methods: r.methods,\n projectDetected: r.projectDetected,\n })), null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nDetected ${installed.length} installed providers:\\n`));\n\n for (const r of installed) {\n const methods = r.methods.join(\", \");\n const project = r.projectDetected ? pc.green(\" [project]\") : \"\";\n console.log(` ${pc.green(\"✓\")} ${pc.bold(r.provider.toolName.padEnd(22))} via ${pc.dim(methods)}${project}`);\n }\n\n const notInstalled = results.filter((r) => !r.installed);\n if (notInstalled.length > 0) {\n console.log(pc.dim(`\\n ${notInstalled.length} providers not detected`));\n }\n\n console.log();\n });\n\n providers\n .command(\"show\")\n .description(\"Show provider details\")\n .argument(\"<id>\", \"Provider ID or alias\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (id: string, opts: { json?: boolean }) => {\n const provider = getProvider(id);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${id}`));\n process.exit(1);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(provider, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${provider.toolName}`));\n console.log(pc.dim(`by ${provider.vendor}\\n`));\n\n console.log(` ID: ${provider.id}`);\n console.log(` Flag: --agent ${provider.agentFlag}`);\n if (provider.aliases.length > 0) {\n console.log(` Aliases: ${provider.aliases.join(\", \")}`);\n }\n console.log(` Status: ${provider.status}`);\n console.log(` Priority: ${provider.priority}`);\n console.log();\n console.log(` Instruction: ${provider.instructFile}`);\n console.log(` Config format: ${provider.configFormat}`);\n console.log(` Config key: ${provider.configKey}`);\n console.log(` Transports: ${provider.supportedTransports.join(\", \")}`);\n console.log(` Headers: ${provider.supportsHeaders ? \"yes\" : \"no\"}`);\n console.log();\n console.log(pc.dim(\" Paths:\"));\n console.log(` Global dir: ${provider.pathGlobal}`);\n console.log(` Project dir: ${provider.pathProject || \"(none)\"}`);\n console.log(` Global config: ${provider.configPathGlobal}`);\n console.log(` Project config: ${provider.configPathProject || \"(none)\"}`);\n console.log(` Global skills: ${provider.pathSkills}`);\n console.log(` Project skills: ${provider.pathProjectSkills || \"(none)\"}`);\n console.log();\n });\n}\n","/**\n * skills install command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { parseSource, isMarketplaceScoped } from \"../../core/sources/parser.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerSkillsInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install a skill from GitHub, URL, or marketplace\")\n .argument(\"<source>\", \"Skill source (GitHub URL, owner/repo, @author/name)\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Install globally\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--all\", \"Install to all detected agents\")\n .action(async (source: string, opts: {\n agent: string[];\n global?: boolean;\n yes?: boolean;\n all?: boolean;\n }) => {\n // Determine target providers\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No target providers found. Use --agent or --all.\"));\n process.exit(1);\n }\n\n console.log(pc.dim(`Installing to ${providers.length} provider(s)...`));\n\n let localPath: string;\n let cleanup: (() => Promise<void>) | undefined;\n let skillName: string;\n let sourceValue: string;\n let sourceType = \"github\" as const;\n\n // Handle marketplace scoped names\n if (isMarketplaceScoped(source)) {\n console.log(pc.dim(`Searching marketplace for ${source}...`));\n const client = new MarketplaceClient();\n const skill = await client.getSkill(source);\n\n if (!skill) {\n console.error(pc.red(`Skill not found: ${source}`));\n process.exit(1);\n }\n\n console.log(` Found: ${pc.bold(skill.name)} by ${skill.author} (${pc.dim(skill.repoFullName)})`);\n\n const parsed = parseSource(skill.githubUrl);\n if (parsed.type !== \"github\" || !parsed.owner || !parsed.repo) {\n console.error(pc.red(\"Could not resolve GitHub source\"));\n process.exit(1);\n }\n\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, skill.path ? skill.path.replace(/\\/SKILL\\.md$/, \"\") : undefined);\n localPath = result.localPath;\n cleanup = result.cleanup;\n skillName = skill.name;\n sourceValue = skill.githubUrl;\n } else {\n // Parse source\n const parsed = parseSource(source);\n skillName = parsed.inferredName;\n sourceValue = parsed.value;\n\n if (parsed.type === \"github\" && parsed.owner && parsed.repo) {\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"gitlab\" && parsed.owner && parsed.repo) {\n const result = await cloneGitLabRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"local\") {\n localPath = parsed.value;\n } else {\n console.error(pc.red(`Unsupported source type: ${parsed.type}`));\n process.exit(1);\n }\n }\n\n try {\n const result = await installSkill(\n localPath,\n skillName,\n providers,\n opts.global ?? false,\n );\n\n if (result.success) {\n console.log(pc.green(`\\n✓ Installed ${pc.bold(skillName)}`));\n console.log(` Canonical: ${pc.dim(result.canonicalPath)}`);\n console.log(` Linked to: ${result.linkedAgents.join(\", \")}`);\n\n // Record in lock file\n await recordSkillInstall(\n skillName,\n source,\n sourceValue,\n sourceType,\n result.linkedAgents,\n result.canonicalPath,\n opts.global ?? false,\n );\n }\n\n if (result.errors.length > 0) {\n console.log(pc.yellow(\"\\nWarnings:\"));\n for (const err of result.errors) {\n console.log(` ${pc.yellow(\"!\")} ${err}`);\n }\n }\n } finally {\n if (cleanup) await cleanup();\n }\n });\n}\n","/**\n * GitHub fetcher for skill/MCP sources\n *\n * Clones repos or fetches specific paths via simple-git.\n */\n\nimport { simpleGit } from \"simple-git\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface GitFetchResult {\n localPath: string;\n cleanup: () => Promise<void>;\n}\n\n/** Clone a GitHub repo to a temp directory */\nexport async function cloneRepo(\n owner: string,\n repo: string,\n ref?: string,\n subPath?: string,\n): Promise<GitFetchResult> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"caamp-\"));\n const repoUrl = `https://github.com/${owner}/${repo}.git`;\n\n const git = simpleGit();\n\n const cloneOptions = [\"--depth\", \"1\"];\n if (ref) {\n cloneOptions.push(\"--branch\", ref);\n }\n\n await git.clone(repoUrl, tmpDir, cloneOptions);\n\n const localPath = subPath ? join(tmpDir, subPath) : tmpDir;\n\n return {\n localPath,\n cleanup: async () => {\n try {\n await rm(tmpDir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n },\n };\n}\n\n/** Fetch a specific file from GitHub using the raw API */\nexport async function fetchRawFile(\n owner: string,\n repo: string,\n path: string,\n ref = \"main\",\n): Promise<string | null> {\n const url = `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${path}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n\n/** Check if a GitHub repo exists */\nexport async function repoExists(owner: string, repo: string): Promise<boolean> {\n try {\n const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {\n method: \"HEAD\",\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n","/**\n * GitLab fetcher for skill/MCP sources\n */\n\nimport { simpleGit } from \"simple-git\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { GitFetchResult } from \"./github.js\";\n\n/** Clone a GitLab repo to a temp directory */\nexport async function cloneGitLabRepo(\n owner: string,\n repo: string,\n ref?: string,\n subPath?: string,\n): Promise<GitFetchResult> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"caamp-gl-\"));\n const repoUrl = `https://gitlab.com/${owner}/${repo}.git`;\n\n const git = simpleGit();\n\n const cloneOptions = [\"--depth\", \"1\"];\n if (ref) {\n cloneOptions.push(\"--branch\", ref);\n }\n\n await git.clone(repoUrl, tmpDir, cloneOptions);\n\n const localPath = subPath ? join(tmpDir, subPath) : tmpDir;\n\n return {\n localPath,\n cleanup: async () => {\n try {\n await rm(tmpDir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n },\n };\n}\n\n/** Fetch a specific file from GitLab using the raw API */\nexport async function fetchGitLabRawFile(\n owner: string,\n repo: string,\n path: string,\n ref = \"main\",\n): Promise<string | null> {\n const encodedPath = encodeURIComponent(path);\n const url = `https://gitlab.com/${owner}/${repo}/-/raw/${ref}/${encodedPath}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n","/**\n * skills remove command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { removeSkill, listCanonicalSkills } from \"../../core/skills/installer.js\";\nimport { removeSkillFromLock } from \"../../core/skills/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\n\nexport function registerSkillsRemove(parent: Command): void {\n parent\n .command(\"remove\")\n .description(\"Remove installed skill(s)\")\n .argument(\"[name]\", \"Skill name to remove\")\n .option(\"-g, --global\", \"Remove from global scope\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (name: string | undefined, opts: { global?: boolean; yes?: boolean }) => {\n const providers = getInstalledProviders();\n\n if (name) {\n const result = await removeSkill(name, providers, opts.global ?? false);\n\n if (result.removed.length > 0) {\n console.log(pc.green(`✓ Removed ${pc.bold(name)} from: ${result.removed.join(\", \")}`));\n await removeSkillFromLock(name);\n } else {\n console.log(pc.yellow(`Skill ${name} not found in any provider.`));\n }\n\n if (result.errors.length > 0) {\n for (const err of result.errors) {\n console.log(pc.red(` ${err}`));\n }\n }\n } else {\n // Interactive mode - list and select\n const skills = await listCanonicalSkills();\n if (skills.length === 0) {\n console.log(pc.dim(\"No skills installed.\"));\n return;\n }\n\n console.log(pc.bold(\"Installed skills:\"));\n for (const s of skills) {\n console.log(` ${s}`);\n }\n console.log(pc.dim(\"\\nUse: caamp skills remove <name>\"));\n }\n });\n}\n","/**\n * skills list command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { discoverSkills, discoverSkillsMulti } from \"../../core/skills/discovery.js\";\nimport { listCanonicalSkills } from \"../../core/skills/installer.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { join } from \"node:path\";\n\nexport function registerSkillsList(parent: Command): void {\n parent\n .command(\"list\")\n .description(\"List installed skills\")\n .option(\"-g, --global\", \"List global skills\")\n .option(\"-a, --agent <name>\", \"List skills for specific agent\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { global?: boolean; agent?: string; json?: boolean }) => {\n let dirs: string[] = [];\n\n if (opts.agent) {\n const provider = getProvider(opts.agent);\n if (!provider) {\n console.error(pc.red(`Provider not found: ${opts.agent}`));\n process.exit(1);\n }\n dirs = opts.global\n ? [provider.pathSkills]\n : [join(process.cwd(), provider.pathProjectSkills)];\n } else if (opts.global) {\n // List from all installed providers' global skill dirs\n const providers = getInstalledProviders();\n dirs = providers.map((p) => p.pathSkills).filter(Boolean);\n } else {\n // List from all installed providers' project skill dirs\n const providers = getInstalledProviders();\n dirs = providers\n .map((p) => join(process.cwd(), p.pathProjectSkills))\n .filter(Boolean);\n }\n\n const skills = await discoverSkillsMulti(dirs);\n\n if (opts.json) {\n console.log(JSON.stringify(skills, null, 2));\n return;\n }\n\n if (skills.length === 0) {\n console.log(pc.dim(\"No skills found.\"));\n return;\n }\n\n console.log(pc.bold(`\\n${skills.length} skill(s) found:\\n`));\n\n for (const skill of skills) {\n console.log(` ${pc.bold(skill.name.padEnd(30))} ${pc.dim(skill.metadata.description ?? \"\")}`);\n }\n\n console.log();\n });\n}\n","/**\n * skills find command - marketplace search\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\n\nexport function registerSkillsFind(parent: Command): void {\n parent\n .command(\"find\")\n .description(\"Search marketplace for skills\")\n .argument(\"[query]\", \"Search query\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"-l, --limit <n>\", \"Max results\", \"20\")\n .action(async (query: string | undefined, opts: { json?: boolean; limit: string }) => {\n if (!query) {\n console.log(pc.dim(\"Usage: caamp skills find <query>\"));\n return;\n }\n\n const limit = parseInt(opts.limit, 10);\n const client = new MarketplaceClient();\n\n console.log(pc.dim(`Searching marketplaces for \"${query}\"...\\n`));\n\n const results = await client.search(query, limit);\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n if (results.length === 0) {\n console.log(pc.yellow(\"No results found.\"));\n return;\n }\n\n for (const skill of results) {\n const stars = skill.stars > 0 ? pc.yellow(`★ ${formatStars(skill.stars)}`) : \"\";\n console.log(` ${pc.bold(skill.scopedName.padEnd(35))} ${stars}`);\n console.log(` ${pc.dim(skill.description?.slice(0, 80) ?? \"\")}`);\n console.log(` ${pc.dim(`from ${skill.source}`)}`);\n console.log();\n }\n\n console.log(pc.dim(`Install with: caamp skills install <scopedName>`));\n });\n}\n\nfunction formatStars(n: number): string {\n if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n","/**\n * skills check command - check for updates\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getTrackedSkills, checkSkillUpdate } from \"../../core/skills/lock.js\";\n\nexport function registerSkillsCheck(parent: Command): void {\n parent\n .command(\"check\")\n .description(\"Check for available skill updates\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n console.log(pc.dim(\"No tracked skills.\"));\n return;\n }\n\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...\\n`));\n\n const results = [];\n for (const [name, entry] of entries) {\n const update = await checkSkillUpdate(name);\n results.push({ name, entry, ...update });\n }\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n let updatesAvailable = 0;\n\n for (const r of results) {\n let statusLabel: string;\n if (r.status === \"update-available\") {\n statusLabel = pc.yellow(\"update available\");\n updatesAvailable++;\n } else if (r.status === \"up-to-date\") {\n statusLabel = pc.green(\"up to date\");\n } else {\n statusLabel = pc.dim(\"unknown\");\n }\n\n console.log(` ${pc.bold(r.name.padEnd(30))} ${statusLabel}`);\n\n if (r.currentVersion || r.latestVersion) {\n const current = r.currentVersion ? r.currentVersion.slice(0, 12) : \"?\";\n const latest = r.latestVersion ?? \"?\";\n if (r.hasUpdate) {\n console.log(` ${pc.dim(\"current:\")} ${current} ${pc.dim(\"->\")} ${pc.cyan(latest)}`);\n } else {\n console.log(` ${pc.dim(\"version:\")} ${current}`);\n }\n }\n\n console.log(` ${pc.dim(`source: ${r.entry.source}`)}`);\n console.log(` ${pc.dim(`agents: ${r.entry.agents.join(\", \")}`)}`);\n console.log();\n }\n\n if (updatesAvailable > 0) {\n console.log(pc.yellow(`${updatesAvailable} update(s) available.`));\n console.log(pc.dim(\"Run `caamp skills update` to update all.\"));\n } else {\n console.log(pc.green(\"All skills are up to date.\"));\n }\n });\n}\n","/**\n * skills update command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getTrackedSkills, checkSkillUpdate, recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { parseSource } from \"../../core/sources/parser.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerSkillsUpdate(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update all outdated skills\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (opts: { yes?: boolean }) => {\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n console.log(pc.dim(\"No tracked skills to update.\"));\n return;\n }\n\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...`));\n\n // Check all skills for updates\n const outdated: Array<{\n name: string;\n currentVersion?: string;\n latestVersion?: string;\n }> = [];\n\n for (const [name] of entries) {\n const result = await checkSkillUpdate(name);\n if (result.hasUpdate) {\n outdated.push({\n name,\n currentVersion: result.currentVersion,\n latestVersion: result.latestVersion,\n });\n }\n }\n\n if (outdated.length === 0) {\n console.log(pc.green(\"\\nAll skills are up to date.\"));\n return;\n }\n\n console.log(pc.yellow(`\\n${outdated.length} skill(s) have updates available:\\n`));\n\n for (const skill of outdated) {\n const current = skill.currentVersion?.slice(0, 12) ?? \"?\";\n const latest = skill.latestVersion ?? \"?\";\n console.log(` ${pc.bold(skill.name)} ${pc.dim(current)} ${pc.dim(\"->\")} ${pc.cyan(latest)}`);\n }\n\n // Confirm unless --yes\n if (!opts.yes) {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(pc.dim(\"\\nProceed with update? [y/N] \"), resolve);\n });\n rl.close();\n\n if (answer.toLowerCase() !== \"y\" && answer.toLowerCase() !== \"yes\") {\n console.log(pc.dim(\"Update cancelled.\"));\n return;\n }\n }\n\n console.log();\n\n // Update each outdated skill\n let successCount = 0;\n let failCount = 0;\n\n for (const skill of outdated) {\n const entry = tracked[skill.name];\n if (!entry) continue;\n\n console.log(pc.dim(`Updating ${pc.bold(skill.name)}...`));\n\n try {\n const parsed = parseSource(entry.source);\n let localPath: string;\n let cleanup: (() => Promise<void>) | undefined;\n\n if (parsed.type === \"github\" && parsed.owner && parsed.repo) {\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"gitlab\" && parsed.owner && parsed.repo) {\n const result = await cloneGitLabRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else {\n console.log(pc.yellow(` Skipped ${skill.name}: source type \"${parsed.type}\" does not support auto-update`));\n continue;\n }\n\n try {\n // Resolve providers from the lock entry's agent list\n const providers = entry.agents\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n\n if (providers.length === 0) {\n console.log(pc.yellow(` Skipped ${skill.name}: no valid providers found`));\n continue;\n }\n\n const installResult = await installSkill(\n localPath,\n skill.name,\n providers,\n entry.isGlobal,\n entry.projectDir,\n );\n\n if (installResult.success) {\n // Record the updated version in the lock file\n await recordSkillInstall(\n skill.name,\n entry.scopedName,\n entry.source,\n entry.sourceType,\n installResult.linkedAgents,\n installResult.canonicalPath,\n entry.isGlobal,\n entry.projectDir,\n skill.latestVersion,\n );\n\n console.log(pc.green(` Updated ${pc.bold(skill.name)}`));\n successCount++;\n } else {\n console.log(pc.red(` Failed to update ${skill.name}: no agents linked`));\n failCount++;\n }\n\n if (installResult.errors.length > 0) {\n for (const err of installResult.errors) {\n console.log(pc.yellow(` ${err}`));\n }\n }\n } finally {\n if (cleanup) await cleanup();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(pc.red(` Failed to update ${skill.name}: ${msg}`));\n failCount++;\n }\n }\n\n console.log();\n if (successCount > 0) {\n console.log(pc.green(`Updated ${successCount} skill(s).`));\n }\n if (failCount > 0) {\n console.log(pc.red(`Failed to update ${failCount} skill(s).`));\n }\n });\n}\n","/**\n * skills init command - scaffold a new skill\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport function registerSkillsInit(parent: Command): void {\n parent\n .command(\"init\")\n .description(\"Create a new SKILL.md template\")\n .argument(\"[name]\", \"Skill name\")\n .option(\"-d, --dir <path>\", \"Output directory\", \".\")\n .action(async (name: string | undefined, opts: { dir: string }) => {\n const skillName = name ?? \"my-skill\";\n const skillDir = join(opts.dir, skillName);\n\n if (existsSync(skillDir)) {\n console.error(pc.red(`Directory already exists: ${skillDir}`));\n process.exit(1);\n }\n\n await mkdir(skillDir, { recursive: true });\n\n const template = `---\nname: ${skillName}\ndescription: Describe what this skill does and when to use it\nlicense: MIT\nmetadata:\n author: your-name\n version: \"1.0\"\n---\n\n# ${skillName}\n\n## When to use this skill\n\nDescribe the conditions under which an AI agent should activate this skill.\n\n## Instructions\n\nProvide detailed instructions for the AI agent here.\n\n## Examples\n\nShow example inputs and expected outputs.\n`;\n\n await writeFile(join(skillDir, \"SKILL.md\"), template, \"utf-8\");\n\n console.log(pc.green(`✓ Created skill template: ${skillDir}/SKILL.md`));\n console.log(pc.dim(\"\\nNext steps:\"));\n console.log(pc.dim(\" 1. Edit SKILL.md with your instructions\"));\n console.log(pc.dim(\" 2. Validate: caamp skills validate \" + join(skillDir, \"SKILL.md\")));\n console.log(pc.dim(\" 3. Install: caamp skills install \" + skillDir));\n });\n}\n","/**\n * skills audit command - security scanning\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { scanFile, scanDirectory, toSarif } from \"../../core/skills/audit/scanner.js\";\nimport { existsSync, statSync } from \"node:fs\";\n\nexport function registerSkillsAudit(parent: Command): void {\n parent\n .command(\"audit\")\n .description(\"Security scan skill files (46+ rules, SARIF output)\")\n .argument(\"[path]\", \"Path to SKILL.md or directory\", \".\")\n .option(\"--sarif\", \"Output in SARIF format\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (path: string, opts: { sarif?: boolean; json?: boolean }) => {\n if (!existsSync(path)) {\n console.error(pc.red(`Path not found: ${path}`));\n process.exit(1);\n }\n\n const stat = statSync(path);\n let results;\n\n if (stat.isFile()) {\n results = [await scanFile(path)];\n } else {\n results = await scanDirectory(path);\n }\n\n if (results.length === 0) {\n console.log(pc.dim(\"No SKILL.md files found to scan.\"));\n return;\n }\n\n if (opts.sarif) {\n console.log(JSON.stringify(toSarif(results), null, 2));\n return;\n }\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n // Human-readable output\n let totalFindings = 0;\n let allPassed = true;\n\n for (const result of results) {\n const icon = result.passed ? pc.green(\"✓\") : pc.red(\"✗\");\n console.log(`\\n${icon} ${pc.bold(result.file)} (score: ${result.score}/100)`);\n\n if (result.findings.length === 0) {\n console.log(pc.dim(\" No issues found.\"));\n continue;\n }\n\n totalFindings += result.findings.length;\n if (!result.passed) allPassed = false;\n\n for (const f of result.findings) {\n const sev = f.rule.severity === \"critical\" ? pc.red(f.rule.severity)\n : f.rule.severity === \"high\" ? pc.red(f.rule.severity)\n : f.rule.severity === \"medium\" ? pc.yellow(f.rule.severity)\n : pc.dim(f.rule.severity);\n\n console.log(` ${sev.padEnd(20)} ${f.rule.id} ${f.rule.name}`);\n console.log(` ${pc.dim(`L${f.line}: ${f.context.slice(0, 80)}`)}`);\n }\n }\n\n console.log(pc.bold(`\\n${results.length} file(s) scanned, ${totalFindings} finding(s)`));\n\n if (!allPassed) {\n process.exit(1);\n }\n });\n}\n","/**\n * skills validate command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { validateSkill } from \"../../core/skills/validator.js\";\n\nexport function registerSkillsValidate(parent: Command): void {\n parent\n .command(\"validate\")\n .description(\"Validate SKILL.md format\")\n .argument(\"[path]\", \"Path to SKILL.md\", \"SKILL.md\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (path: string, opts: { json?: boolean }) => {\n const result = await validateSkill(path);\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.valid) {\n console.log(pc.green(`✓ ${path} is valid`));\n } else {\n console.log(pc.red(`✗ ${path} has validation errors`));\n }\n\n for (const issue of result.issues) {\n const icon = issue.level === \"error\" ? pc.red(\"✗\") : pc.yellow(\"!\");\n console.log(` ${icon} [${issue.field}] ${issue.message}`);\n }\n\n if (!result.valid) {\n process.exit(1);\n }\n });\n}\n","/**\n * Skills command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerSkillsInstall } from \"./install.js\";\nimport { registerSkillsRemove } from \"./remove.js\";\nimport { registerSkillsList } from \"./list.js\";\nimport { registerSkillsFind } from \"./find.js\";\nimport { registerSkillsCheck } from \"./check.js\";\nimport { registerSkillsUpdate } from \"./update.js\";\nimport { registerSkillsInit } from \"./init.js\";\nimport { registerSkillsAudit } from \"./audit.js\";\nimport { registerSkillsValidate } from \"./validate.js\";\n\nexport function registerSkillsCommands(program: Command): void {\n const skills = program\n .command(\"skills\")\n .description(\"Manage AI agent skills\");\n\n registerSkillsInstall(skills);\n registerSkillsRemove(skills);\n registerSkillsList(skills);\n registerSkillsFind(skills);\n registerSkillsCheck(skills);\n registerSkillsUpdate(skills);\n registerSkillsInit(skills);\n registerSkillsAudit(skills);\n registerSkillsValidate(skills);\n}\n","/**\n * mcp install command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { parseSource } from \"../../core/sources/parser.js\";\nimport { installMcpServerToAll, buildServerConfig } from \"../../core/mcp/installer.js\";\nimport { recordMcpInstall } from \"../../core/mcp/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerMcpInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install MCP server to agent configs\")\n .argument(\"<source>\", \"MCP server source (URL, npm package, or command)\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Install to global/user config\")\n .option(\"-n, --name <name>\", \"Override inferred server name\")\n .option(\"-t, --transport <type>\", \"Transport type: http (default) or sse\", \"http\")\n .option(\"--header <header>\", \"HTTP header (Key: Value)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--all\", \"Install to all detected agents\")\n .option(\"--dry-run\", \"Preview without writing\")\n .action(async (source: string, opts: {\n agent: string[];\n global?: boolean;\n name?: string;\n transport: string;\n header: string[];\n yes?: boolean;\n all?: boolean;\n dryRun?: boolean;\n }) => {\n const parsed = parseSource(source);\n const serverName = opts.name ?? parsed.inferredName;\n\n // Parse headers\n const headers: Record<string, string> = {};\n for (const h of opts.header) {\n const idx = h.indexOf(\":\");\n if (idx > 0) {\n headers[h.slice(0, idx).trim()] = h.slice(idx + 1).trim();\n }\n }\n\n const config = buildServerConfig(parsed, opts.transport, headers);\n\n // Determine target providers\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No target providers found.\"));\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n if (opts.dryRun) {\n console.log(pc.bold(\"Dry run - would install:\"));\n console.log(` Server: ${pc.bold(serverName)}`);\n console.log(` Config: ${JSON.stringify(config, null, 2)}`);\n console.log(` Scope: ${scope}`);\n console.log(` Providers: ${providers.map((p) => p.id).join(\", \")}`);\n return;\n }\n\n console.log(pc.dim(`Installing \"${serverName}\" to ${providers.length} provider(s)...\\n`));\n\n const results = await installMcpServerToAll(\n providers,\n serverName,\n config,\n scope,\n );\n\n for (const r of results) {\n if (r.success) {\n console.log(` ${pc.green(\"✓\")} ${r.provider.toolName.padEnd(22)} ${pc.dim(r.configPath)}`);\n } else {\n console.log(` ${pc.red(\"✗\")} ${r.provider.toolName.padEnd(22)} ${pc.red(r.error ?? \"failed\")}`);\n }\n }\n\n const succeeded = results.filter((r) => r.success);\n if (succeeded.length > 0) {\n await recordMcpInstall(\n serverName,\n source,\n parsed.type,\n succeeded.map((r) => r.provider.id),\n opts.global ?? false,\n );\n }\n\n console.log(pc.bold(`\\n${succeeded.length}/${results.length} providers configured.`));\n });\n}\n","/**\n * mcp remove command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { removeMcpServer } from \"../../core/mcp/reader.js\";\nimport { removeMcpFromLock } from \"../../core/mcp/lock.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerMcpRemove(parent: Command): void {\n parent\n .command(\"remove\")\n .description(\"Remove MCP server from agent configs\")\n .argument(\"<name>\", \"MCP server name to remove\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Remove from global config\")\n .option(\"--all\", \"Remove from all detected agents\")\n .action(async (name: string, opts: {\n agent: string[];\n global?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n let removed = 0;\n\n for (const provider of providers) {\n const success = await removeMcpServer(provider, name, scope);\n if (success) {\n console.log(` ${pc.green(\"✓\")} Removed from ${provider.toolName}`);\n removed++;\n }\n }\n\n if (removed > 0) {\n await removeMcpFromLock(name);\n console.log(pc.green(`\\n✓ Removed \"${name}\" from ${removed} provider(s).`));\n } else {\n console.log(pc.yellow(`Server \"${name}\" not found in any provider config.`));\n }\n });\n}\n","/**\n * mcp list command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { listMcpServers } from \"../../core/mcp/reader.js\";\nimport type { McpServerEntry } from \"../../types.js\";\n\nexport function registerMcpList(parent: Command): void {\n parent\n .command(\"list\")\n .description(\"List configured MCP servers\")\n .option(\"-a, --agent <name>\", \"List for specific agent\")\n .option(\"-g, --global\", \"List global config\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { agent?: string; global?: boolean; json?: boolean }) => {\n const providers = opts.agent\n ? [getProvider(opts.agent)].filter((p): p is NonNullable<typeof p> => p !== undefined)\n : getInstalledProviders();\n\n const allEntries: McpServerEntry[] = [];\n\n for (const provider of providers) {\n // With --global, use global. Otherwise use project if provider supports it, else global.\n const scope: \"project\" | \"global\" = opts.global\n ? \"global\"\n : provider.configPathProject\n ? \"project\"\n : \"global\";\n\n const entries = await listMcpServers(provider, scope);\n allEntries.push(...entries);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(allEntries.map(e => ({\n provider: e.providerId,\n name: e.name,\n config: e.config,\n })), null, 2));\n return;\n }\n\n if (allEntries.length === 0) {\n console.log(pc.dim(\"No MCP servers configured.\"));\n return;\n }\n\n console.log(pc.bold(`\\n${allEntries.length} MCP server(s) configured:\\n`));\n\n for (const entry of allEntries) {\n console.log(` ${pc.bold(entry.name.padEnd(25))} ${pc.dim(entry.providerId)}`);\n }\n\n console.log();\n });\n}\n","/**\n * mcp detect command - auto-detect installed MCP tools\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { existsSync } from \"node:fs\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { resolveConfigPath, listMcpServers } from \"../../core/mcp/reader.js\";\n\nexport function registerMcpDetect(parent: Command): void {\n parent\n .command(\"detect\")\n .description(\"Auto-detect installed MCP tools and their configurations\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const providers = getInstalledProviders();\n\n const detected: Array<{\n provider: string;\n hasGlobalConfig: boolean;\n hasProjectConfig: boolean;\n globalServers: string[];\n projectServers: string[];\n }> = [];\n\n for (const provider of providers) {\n const globalPath = resolveConfigPath(provider, \"global\");\n const projectPath = resolveConfigPath(provider, \"project\");\n\n const globalEntries = await listMcpServers(provider, \"global\");\n const projectEntries = await listMcpServers(provider, \"project\");\n\n detected.push({\n provider: provider.id,\n hasGlobalConfig: globalPath !== null && existsSync(globalPath),\n hasProjectConfig: projectPath !== null && existsSync(projectPath),\n globalServers: globalEntries.map(e => e.name),\n projectServers: projectEntries.map(e => e.name),\n });\n }\n\n if (opts.json) {\n console.log(JSON.stringify(detected, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${detected.length} provider(s) with MCP support:\\n`));\n\n for (const d of detected) {\n const globalIcon = d.hasGlobalConfig ? pc.green(\"G\") : pc.dim(\"-\");\n const projectIcon = d.hasProjectConfig ? pc.green(\"P\") : pc.dim(\"-\");\n const servers = [...d.globalServers, ...d.projectServers];\n const serverList = servers.length > 0 ? pc.dim(servers.join(\", \")) : pc.dim(\"no servers\");\n\n console.log(` [${globalIcon}${projectIcon}] ${pc.bold(d.provider.padEnd(20))} ${serverList}`);\n }\n\n console.log(pc.dim(\"\\nG = global config, P = project config\"));\n console.log();\n });\n}\n","/**\n * MCP command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerMcpInstall } from \"./install.js\";\nimport { registerMcpRemove } from \"./remove.js\";\nimport { registerMcpList } from \"./list.js\";\nimport { registerMcpDetect } from \"./detect.js\";\n\nexport function registerMcpCommands(program: Command): void {\n const mcp = program\n .command(\"mcp\")\n .description(\"Manage MCP server configurations\");\n\n registerMcpInstall(mcp);\n registerMcpRemove(mcp);\n registerMcpList(mcp);\n registerMcpDetect(mcp);\n}\n","/**\n * instructions inject command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent, groupByInstructFile } from \"../../core/instructions/templates.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsInject(parent: Command): void {\n parent\n .command(\"inject\")\n .description(\"Inject instruction blocks into all provider files\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Inject into global instruction files\")\n .option(\"--content <text>\", \"Custom content to inject\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--all\", \"Target all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n content?: string;\n dryRun?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getAllProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No providers found.\"));\n process.exit(1);\n }\n\n const content = opts.content ?? generateInjectionContent();\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n // Show grouped preview\n const groups = groupByInstructFile(providers);\n\n if (opts.dryRun) {\n console.log(pc.bold(\"Dry run - would inject into:\\n\"));\n for (const [file, group] of groups) {\n console.log(` ${pc.bold(file)}: ${group.map((p) => p.id).join(\", \")}`);\n }\n console.log(pc.dim(`\\n Scope: ${scope}`));\n console.log(pc.dim(` Content length: ${content.length} chars`));\n return;\n }\n\n const results = await injectAll(providers, process.cwd(), scope, content);\n\n for (const [file, action] of results) {\n const icon = action === \"created\" ? pc.green(\"+\")\n : action === \"updated\" ? pc.yellow(\"~\")\n : pc.blue(\"^\");\n console.log(` ${icon} ${file} (${action})`);\n }\n\n console.log(pc.bold(`\\n${results.size} file(s) processed.`));\n });\n}\n","/**\n * instructions check command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { checkAllInjections } from \"../../core/instructions/injector.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsCheck(parent: Command): void {\n parent\n .command(\"check\")\n .description(\"Check injection status across providers\")\n .option(\"-a, --agent <name>\", \"Check specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Check global instruction files\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--all\", \"Check all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n json?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getAllProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const results = await checkAllInjections(providers, process.cwd(), scope);\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nInstruction file status (${scope}):\\n`));\n\n for (const r of results) {\n let icon: string;\n let label: string;\n\n switch (r.status) {\n case \"current\":\n icon = pc.green(\"✓\");\n label = \"current\";\n break;\n case \"outdated\":\n icon = pc.yellow(\"~\");\n label = \"outdated\";\n break;\n case \"missing\":\n icon = pc.red(\"✗\");\n label = \"missing\";\n break;\n case \"none\":\n icon = pc.dim(\"-\");\n label = \"no injection\";\n break;\n }\n\n console.log(` ${icon} ${r.file.padEnd(40)} ${label}`);\n }\n\n console.log();\n });\n}\n","/**\n * instructions update command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll, checkAllInjections } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent } from \"../../core/instructions/templates.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsUpdate(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update all instruction file injections\")\n .option(\"-g, --global\", \"Update global instruction files\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (opts: { global?: boolean; yes?: boolean }) => {\n const providers = getInstalledProviders();\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const content = generateInjectionContent();\n\n // Check current state\n const checks = await checkAllInjections(providers, process.cwd(), scope, content);\n const needsUpdate = checks.filter((c) => c.status !== \"current\");\n\n if (needsUpdate.length === 0) {\n console.log(pc.green(\"All instruction files are up to date.\"));\n return;\n }\n\n console.log(pc.bold(`${needsUpdate.length} file(s) need updating:\\n`));\n for (const c of needsUpdate) {\n console.log(` ${c.file} (${c.status})`);\n }\n\n // Filter providers to only those needing updates\n const providerIds = new Set(needsUpdate.map((c) => c.provider));\n const toUpdate = providers.filter((p) => providerIds.has(p.id));\n\n const results = await injectAll(toUpdate, process.cwd(), scope, content);\n\n console.log();\n for (const [file, action] of results) {\n console.log(` ${pc.green(\"✓\")} ${file} (${action})`);\n }\n\n console.log(pc.bold(`\\n${results.size} file(s) updated.`));\n });\n}\n","/**\n * Instructions command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerInstructionsInject } from \"./inject.js\";\nimport { registerInstructionsCheck } from \"./check.js\";\nimport { registerInstructionsUpdate } from \"./update.js\";\n\nexport function registerInstructionsCommands(program: Command): void {\n const instructions = program\n .command(\"instructions\")\n .description(\"Manage instruction file injections\");\n\n registerInstructionsInject(instructions);\n registerInstructionsCheck(instructions);\n registerInstructionsUpdate(instructions);\n}\n","/**\n * config show|path commands\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getProvider } from \"../core/registry/providers.js\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { readConfig } from \"../core/formats/index.js\";\n\nexport function registerConfigCommand(program: Command): void {\n const config = program\n .command(\"config\")\n .description(\"View provider configuration\");\n\n config\n .command(\"show\")\n .description(\"Show provider configuration\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .option(\"-g, --global\", \"Show global config\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (providerId: string, opts: { global?: boolean; json?: boolean }) => {\n const provider = getProvider(providerId);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${providerId}`));\n process.exit(1);\n }\n\n const configPath = opts.global\n ? provider.configPathGlobal\n : provider.configPathProject\n ? join(process.cwd(), provider.configPathProject)\n : provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n console.log(pc.dim(`No config file at: ${configPath}`));\n return;\n }\n\n try {\n const data = await readConfig(configPath, provider.configFormat);\n\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log(pc.bold(`\\n${provider.toolName} config (${configPath}):\\n`));\n console.log(JSON.stringify(data, null, 2));\n }\n } catch (err) {\n console.error(pc.red(`Error reading config: ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n });\n\n config\n .command(\"path\")\n .description(\"Show config file path\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .argument(\"[scope]\", \"Scope: project (default) or global\", \"project\")\n .action((providerId: string, scope: string) => {\n const provider = getProvider(providerId);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${providerId}`));\n process.exit(1);\n }\n\n if (scope === \"global\") {\n console.log(provider.configPathGlobal);\n } else {\n if (provider.configPathProject) {\n console.log(join(process.cwd(), provider.configPathProject));\n } else {\n console.log(pc.dim(`${provider.toolName} has no project-level config`));\n console.log(provider.configPathGlobal);\n }\n }\n });\n}\n"],"mappings":"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","names":["program","pc","simpleGit","mkdtemp","rm","tmpdir","join","pc","pc","pc","pc","join","pc","pc","pc","pc","pc","pc","pc","pc","join","pc","existsSync","pc","pc","pc","program","pc","pc","pc","pc","pc","pc","pc","existsSync","existsSync","pc","program","pc","pc","pc","pc","pc","pc","program","pc","join","existsSync","program","pc","join","existsSync"]}
|
package/dist/index.d.ts
CHANGED