@cleocode/caamp 0.3.0 → 0.4.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/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","../src/commands/doctor.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\";\nimport { registerDoctorCommand } from \"./commands/doctor.js\";\nimport { setVerbose, setQuiet } from \"./core/logger.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.3.0\")\n .option(\"-v, --verbose\", \"Show debug output\")\n .option(\"-q, --quiet\", \"Suppress non-error output\");\n\nprogram.hook(\"preAction\", (thisCommand) => {\n const opts = thisCommand.optsWithGlobals();\n if (opts.verbose) setVerbose(true);\n if (opts.quiet) setQuiet(true);\n});\n\n// Register command groups\nregisterProvidersCommand(program);\nregisterSkillsCommands(program);\nregisterMcpCommands(program);\nregisterInstructionsCommands(program);\nregisterConfigCommand(program);\nregisterDoctorCommand(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, SourceType } 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: SourceType;\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 sourceType = parsed.type;\n } else {\n // Parse source\n const parsed = parseSource(source);\n skillName = parsed.inferredName;\n sourceValue = parsed.value;\n sourceType = parsed.type;\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","/**\n * doctor command - diagnose configuration issues and health\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync, readdirSync, lstatSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { getAllProviders, getProviderCount } from \"../core/registry/providers.js\";\nimport { detectAllProviders } from \"../core/registry/detection.js\";\nimport { readLockFile } from \"../core/mcp/lock.js\";\nimport { readConfig } from \"../core/formats/index.js\";\nimport type { Provider } from \"../types.js\";\n\nconst CAAMP_VERSION = \"0.2.0\";\n\ninterface CheckResult {\n label: string;\n status: \"pass\" | \"warn\" | \"fail\";\n detail?: string;\n}\n\ninterface SectionResult {\n name: string;\n checks: CheckResult[];\n}\n\nfunction getNodeVersion(): string {\n return process.version;\n}\n\nfunction getNpmVersion(): string | null {\n try {\n return execFileSync(\"npm\", [\"--version\"], { stdio: \"pipe\", encoding: \"utf-8\" }).trim();\n } catch {\n return null;\n }\n}\n\nfunction checkEnvironment(): SectionResult {\n const checks: CheckResult[] = [];\n\n checks.push({ label: `Node.js ${getNodeVersion()}`, status: \"pass\" });\n\n const npmVersion = getNpmVersion();\n if (npmVersion) {\n checks.push({ label: `npm ${npmVersion}`, status: \"pass\" });\n } else {\n checks.push({ label: \"npm not found\", status: \"warn\" });\n }\n\n checks.push({ label: `CAAMP v${CAAMP_VERSION}`, status: \"pass\" });\n checks.push({ label: `${process.platform} ${process.arch}`, status: \"pass\" });\n\n return { name: \"Environment\", checks };\n}\n\nfunction checkRegistry(): SectionResult {\n const checks: CheckResult[] = [];\n\n try {\n const providers = getAllProviders();\n const count = getProviderCount();\n checks.push({ label: `${count} providers loaded`, status: \"pass\" });\n\n const malformed: string[] = [];\n for (const p of providers) {\n if (!p.id || !p.toolName || !p.configKey || !p.configFormat) {\n malformed.push(p.id || \"(unknown)\");\n }\n }\n\n if (malformed.length === 0) {\n checks.push({ label: \"All entries valid\", status: \"pass\" });\n } else {\n checks.push({\n label: `${malformed.length} malformed entries`,\n status: \"fail\",\n detail: malformed.join(\", \"),\n });\n }\n } catch (err) {\n checks.push({\n label: \"Failed to load registry\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Registry\", checks };\n}\n\nfunction checkInstalledProviders(): SectionResult {\n const checks: CheckResult[] = [];\n\n try {\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n\n checks.push({ label: `${installed.length} found`, status: \"pass\" });\n\n for (const r of installed) {\n const methods = r.methods.join(\", \");\n checks.push({ label: `${r.provider.toolName} (${methods})`, status: \"pass\" });\n }\n } catch (err) {\n checks.push({\n label: \"Detection failed\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Installed Providers\", checks };\n}\n\nfunction checkSkillSymlinks(): SectionResult {\n const checks: CheckResult[] = [];\n\n const canonicalDir = join(homedir(), \".agents\", \"skills\");\n\n if (!existsSync(canonicalDir)) {\n checks.push({ label: \"0 canonical skills\", status: \"pass\" });\n checks.push({ label: \"No broken symlinks\", status: \"pass\" });\n return { name: \"Skills\", checks };\n }\n\n let canonicalCount = 0;\n try {\n const entries = readdirSync(canonicalDir);\n canonicalCount = entries.length;\n checks.push({ label: `${canonicalCount} canonical skills`, status: \"pass\" });\n } catch {\n checks.push({ label: \"Cannot read skills directory\", status: \"warn\" });\n return { name: \"Skills\", checks };\n }\n\n // Check symlinks in provider skill directories\n const broken: string[] = [];\n const providers = getAllProviders();\n for (const provider of providers) {\n const skillDir = provider.pathSkills;\n if (!existsSync(skillDir)) continue;\n\n try {\n const entries = readdirSync(skillDir);\n for (const entry of entries) {\n const fullPath = join(skillDir, entry);\n try {\n const stat = lstatSync(fullPath);\n if (stat.isSymbolicLink()) {\n // Check if target exists\n if (!existsSync(fullPath)) {\n broken.push(`${provider.id}/${entry}`);\n }\n }\n } catch {\n // skip unreadable entries\n }\n }\n } catch {\n // skip unreadable dirs\n }\n }\n\n if (broken.length === 0) {\n checks.push({ label: \"No broken symlinks\", status: \"pass\" });\n } else {\n checks.push({\n label: `${broken.length} broken symlinks`,\n status: \"warn\",\n detail: broken.join(\", \"),\n });\n }\n\n return { name: \"Skills\", checks };\n}\n\nasync function checkLockFile(): Promise<SectionResult> {\n const checks: CheckResult[] = [];\n\n try {\n const lock = await readLockFile();\n checks.push({ label: \"Lock file valid\", status: \"pass\" });\n\n // Check for orphaned skill entries (canonical path no longer exists)\n let orphaned = 0;\n for (const [name, entry] of Object.entries(lock.skills)) {\n if (entry.canonicalPath && !existsSync(entry.canonicalPath)) {\n orphaned++;\n }\n }\n\n // Check for orphaned MCP entries\n // MCP servers don't have canonical paths to verify on disk,\n // so we only count skill orphans\n if (orphaned === 0) {\n checks.push({ label: `0 orphaned entries`, status: \"pass\" });\n } else {\n checks.push({\n label: `${orphaned} orphaned skill entries`,\n status: \"warn\",\n detail: \"Skills tracked in lock file but missing from disk\",\n });\n }\n } catch (err) {\n checks.push({\n label: \"Failed to read lock file\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Lock File\", checks };\n}\n\nasync function checkConfigFiles(): Promise<SectionResult> {\n const checks: CheckResult[] = [];\n\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n\n for (const r of installed) {\n const provider = r.provider;\n const configPath = provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n checks.push({\n label: `${provider.id}: no config file found`,\n status: \"warn\",\n detail: configPath,\n });\n continue;\n }\n\n try {\n await readConfig(configPath, provider.configFormat);\n const relPath = configPath.replace(homedir(), \"~\");\n checks.push({\n label: `${provider.id}: ${relPath} readable`,\n status: \"pass\",\n });\n } catch (err) {\n checks.push({\n label: `${provider.id}: config parse error`,\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n if (installed.length === 0) {\n checks.push({ label: \"No installed providers to check\", status: \"pass\" });\n }\n\n return { name: \"Config Files\", checks };\n}\n\nfunction formatSection(section: SectionResult): string {\n const lines: string[] = [];\n lines.push(` ${pc.bold(section.name)}`);\n\n for (const check of section.checks) {\n const icon =\n check.status === \"pass\"\n ? pc.green(\"✓\")\n : check.status === \"warn\"\n ? pc.yellow(\"⚠\")\n : pc.red(\"✗\");\n\n lines.push(` ${icon} ${check.label}`);\n\n if (check.detail) {\n lines.push(` ${pc.dim(check.detail)}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\ninterface JsonOutput {\n version: string;\n sections: Array<{\n name: string;\n checks: CheckResult[];\n }>;\n summary: {\n passed: number;\n warnings: number;\n errors: number;\n };\n}\n\nexport function registerDoctorCommand(program: Command): void {\n program\n .command(\"doctor\")\n .description(\"Diagnose configuration issues and health\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const sections: SectionResult[] = [];\n\n sections.push(checkEnvironment());\n sections.push(checkRegistry());\n sections.push(checkInstalledProviders());\n sections.push(checkSkillSymlinks());\n sections.push(await checkLockFile());\n sections.push(await checkConfigFiles());\n\n // Tally results\n let passed = 0;\n let warnings = 0;\n let errors = 0;\n\n for (const section of sections) {\n for (const check of section.checks) {\n if (check.status === \"pass\") passed++;\n else if (check.status === \"warn\") warnings++;\n else errors++;\n }\n }\n\n if (opts.json) {\n const output: JsonOutput = {\n version: CAAMP_VERSION,\n sections: sections.map((s) => ({\n name: s.name,\n checks: s.checks,\n })),\n summary: { passed, warnings, errors },\n };\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n\n console.log(pc.bold(\"\\ncaamp doctor\\n\"));\n\n for (const section of sections) {\n console.log(formatSection(section));\n console.log();\n }\n\n // Summary line\n const parts: string[] = [];\n parts.push(pc.green(`${passed} checks passed`));\n if (warnings > 0) parts.push(pc.yellow(`${warnings} warning${warnings !== 1 ? \"s\" : \"\"}`));\n if (errors > 0) parts.push(pc.red(`${errors} error${errors !== 1 ? \"s\" : \"\"}`));\n\n console.log(` ${pc.bold(\"Summary\")}: ${parts.join(\", \")}`);\n console.log();\n\n if (errors > 0) {\n process.exit(1);\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","pc","existsSync","join","join","existsSync","pc","program"]}
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","../src/commands/doctor.ts","../src/commands/advanced/common.ts","../src/commands/advanced/lafs.ts","../src/commands/advanced/providers.ts","../src/commands/advanced/batch.ts","../src/commands/advanced/conflicts.ts","../src/commands/advanced/apply.ts","../src/commands/advanced/instructions.ts","../src/commands/advanced/configure.ts","../src/commands/advanced/index.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\";\nimport { registerDoctorCommand } from \"./commands/doctor.js\";\nimport { registerAdvancedCommands } from \"./commands/advanced/index.js\";\nimport { setVerbose, setQuiet } from \"./core/logger.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.3.0\")\n .option(\"-v, --verbose\", \"Show debug output\")\n .option(\"-q, --quiet\", \"Suppress non-error output\");\n\nprogram.hook(\"preAction\", (thisCommand) => {\n const opts = thisCommand.optsWithGlobals();\n if (opts.verbose) setVerbose(true);\n if (opts.quiet) setQuiet(true);\n});\n\n// Register command groups\nregisterProvidersCommand(program);\nregisterSkillsCommands(program);\nregisterMcpCommands(program);\nregisterInstructionsCommands(program);\nregisterConfigCommand(program);\nregisterDoctorCommand(program);\nregisterAdvancedCommands(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 { existsSync } from \"node:fs\";\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 { formatNetworkError } from \"../../core/network/fetch.js\";\nimport type { MarketplaceResult } from \"../../core/marketplace/types.js\";\nimport type { Provider, SourceType } from \"../../types.js\";\n\nfunction normalizeSkillSubPath(path: string | undefined): string | undefined {\n if (!path) return undefined;\n const normalized = path.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\").replace(/\\/SKILL\\.md$/i, \"\").trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction marketplacePathCandidates(skillPath: string | undefined, parsedPath: string | undefined): (string | undefined)[] {\n const candidates: (string | undefined)[] = [];\n const base = normalizeSkillSubPath(skillPath);\n const parsed = normalizeSkillSubPath(parsedPath);\n\n if (base) candidates.push(base);\n if (parsed) candidates.push(parsed);\n\n if (base && base.startsWith(\"skills/\") && !base.startsWith(\".claude/\")) {\n candidates.push(`.claude/${base}`);\n }\n if (parsed && parsed.startsWith(\"skills/\") && !parsed.startsWith(\".claude/\")) {\n candidates.push(`.claude/${parsed}`);\n }\n\n if (candidates.length === 0) {\n candidates.push(undefined);\n }\n\n return Array.from(new Set(candidates));\n}\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 | undefined;\n let cleanup: (() => Promise<void>) | undefined;\n let skillName: string;\n let sourceValue: string;\n let sourceType: SourceType;\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 let skill: MarketplaceResult | null;\n\n try {\n skill = await client.getSkill(source);\n } catch (error) {\n console.error(pc.red(`Marketplace lookup failed: ${formatNetworkError(error)}`));\n process.exit(1);\n }\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 try {\n const subPathCandidates = marketplacePathCandidates(skill.path, parsed.path);\n let cloneError: unknown;\n let cloned = false;\n\n for (const subPath of subPathCandidates) {\n try {\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, subPath);\n if (subPath && !existsSync(result.localPath)) {\n await result.cleanup();\n continue;\n }\n localPath = result.localPath;\n cleanup = result.cleanup;\n cloned = true;\n break;\n } catch (error) {\n cloneError = error;\n }\n }\n\n if (!cloned) {\n throw cloneError ?? new Error(\"Unable to resolve skill path from marketplace metadata\");\n }\n\n skillName = skill.name;\n sourceValue = skill.githubUrl;\n sourceType = parsed.type;\n } catch (error) {\n console.error(pc.red(`Failed to fetch source repository: ${formatNetworkError(error)}`));\n process.exit(1);\n }\n } else {\n // Parse source\n const parsed = parseSource(source);\n skillName = parsed.inferredName;\n sourceValue = parsed.value;\n sourceType = parsed.type;\n\n if (parsed.type === \"github\" && parsed.owner && parsed.repo) {\n try {\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } catch (error) {\n console.error(pc.red(`Failed to clone GitHub repository: ${formatNetworkError(error)}`));\n process.exit(1);\n }\n } else if (parsed.type === \"gitlab\" && parsed.owner && parsed.repo) {\n try {\n const result = await cloneGitLabRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } catch (error) {\n console.error(pc.red(`Failed to clone GitLab repository: ${formatNetworkError(error)}`));\n process.exit(1);\n }\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 if (!localPath) {\n throw new Error(\"No local skill path resolved for installation\");\n }\n\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 + recommendation mode\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { Command } from \"commander\";\nimport {\n resolveOutputFormat,\n type LAFSErrorCategory,\n} from \"@cleocode/lafs-protocol\";\nimport pc from \"picocolors\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport { formatNetworkError } from \"../../core/network/fetch.js\";\nimport type { MarketplaceResult } from \"../../core/marketplace/types.js\";\nimport {\n RECOMMENDATION_ERROR_CODES,\n tokenizeCriteriaValue,\n type RankedSkillRecommendation,\n} from \"../../core/skills/recommendation.js\";\nimport {\n formatSkillRecommendations,\n recommendSkills as recommendSkillsByQuery,\n} from \"../../core/skills/recommendation-api.js\";\n\ninterface SkillsFindOptions {\n json?: boolean;\n human?: boolean;\n limit: string;\n recommend?: boolean;\n top: string;\n details?: boolean;\n mustHave: string[];\n prefer: string[];\n exclude: string[];\n select?: string;\n}\n\ninterface LAFSErrorShape {\n code: string;\n message: string;\n category: LAFSErrorCategory;\n retryable: boolean;\n retryAfterMs: number | null;\n details: Record<string, unknown>;\n}\n\nclass SkillsFindValidationError extends Error {\n code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.code = code;\n this.name = \"SkillsFindValidationError\";\n }\n}\n\ninterface RecommendationOption {\n rank: number;\n scopedName: string;\n description: string;\n score: number;\n why: string;\n source: string;\n evidence?: {\n reasons: RankedSkillRecommendation[\"reasons\"];\n breakdown?: RankedSkillRecommendation[\"breakdown\"];\n };\n}\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(\"--recommend\", \"Recommend skills from constraints\")\n .option(\"--top <n>\", \"Number of recommendation candidates\", \"3\")\n .option(\"--must-have <term>\", \"Required criteria term\", (value, previous: string[]) => [...previous, value], [])\n .option(\"--prefer <term>\", \"Preferred criteria term\", (value, previous: string[]) => [...previous, value], [])\n .option(\"--exclude <term>\", \"Excluded criteria term\", (value, previous: string[]) => [...previous, value], [])\n .option(\"--details\", \"Include expanded machine output\")\n .option(\"--human\", \"Force human-readable output\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--select <indexes>\", \"Pre-select recommendation ranks (comma-separated)\")\n .option(\"-l, --limit <n>\", \"Max results\", \"20\")\n .action(async (query: string | undefined, opts: SkillsFindOptions) => {\n const operation = opts.recommend ? \"skills.find.recommend\" : \"skills.find.search\";\n const details = Boolean(opts.details);\n const mvi = !details;\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: opts.recommend ? \"json\" : \"human\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (opts.json) {\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n if (opts.recommend) {\n try {\n const top = parseTop(opts.top);\n const mustHave = parseConstraintList(opts.mustHave);\n const prefer = parseConstraintList(opts.prefer);\n const exclude = parseConstraintList(opts.exclude);\n validateCriteriaConflicts(mustHave, prefer, exclude);\n const selectedRanks = parseSelectList(opts.select);\n const seedQuery = buildSeedQuery(query, mustHave, prefer, exclude);\n\n const recommendation = await recommendSkillsByQuery(\n seedQuery,\n {\n mustHave,\n prefer,\n exclude,\n },\n {\n top,\n includeDetails: details,\n },\n );\n const options = normalizeRecommendationOptions(recommendation.ranking, details);\n validateSelectedRanks(selectedRanks, options.length);\n const selected = selectedRanks.length > 0\n ? options.filter((option) => selectedRanks.includes(option.rank))\n : [];\n\n if (format === \"json\") {\n const result = formatSkillRecommendations(recommendation, { mode: \"json\", details }) as Record<string, unknown>;\n const resultOptions = Array.isArray(result.options)\n ? result.options as Array<Record<string, unknown>>\n : [];\n const selectedObjects = resultOptions.filter((option) =>\n selectedRanks.includes(Number(option.rank ?? 0))\n );\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n ...result,\n selected: selectedObjects,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n const human = formatSkillRecommendations(recommendation, { mode: \"human\", details }) as string;\n console.log(human);\n if (selected.length > 0) {\n console.log(`Selected: ${selected.map((option) => option.scopedName).join(\", \")}`);\n }\n return;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const errorCode =\n error instanceof SkillsFindValidationError\n ? error.code\n : (error as { code?: string }).code ?? RECOMMENDATION_ERROR_CODES.SOURCE_UNAVAILABLE;\n const category: LAFSErrorCategory =\n errorCode === RECOMMENDATION_ERROR_CODES.CRITERIA_CONFLICT\n ? \"CONFLICT\"\n : errorCode === RECOMMENDATION_ERROR_CODES.NO_MATCHES\n ? \"NOT_FOUND\"\n : errorCode === RECOMMENDATION_ERROR_CODES.QUERY_INVALID\n ? \"VALIDATION\"\n : \"INTERNAL\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, errorCode, message, category, {\n query: query ?? null,\n });\n } else {\n console.error(pc.red(`Recommendation failed: ${message}`));\n }\n process.exit(1);\n }\n }\n\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 if (format === \"human\") {\n console.log(pc.dim(`Searching marketplaces for \"${query}\"...\\n`));\n }\n\n let results: MarketplaceResult[];\n try {\n results = await client.search(query, limit);\n } catch (error) {\n const message = formatNetworkError(error);\n if (format === \"json\") {\n console.log(JSON.stringify({ error: message }));\n } else {\n console.error(pc.red(`Marketplace search failed: ${message}`));\n }\n process.exit(1);\n }\n\n if (format === \"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\nfunction parseConstraintList(values: string[]): string[] {\n const normalized = values.flatMap((value) => tokenizeCriteriaValue(value));\n return Array.from(new Set(normalized));\n}\n\nfunction parseTop(value: string): number {\n const parsed = Number.parseInt(value, 10);\n if (!Number.isInteger(parsed) || parsed < 1 || parsed > 20) {\n throw new SkillsFindValidationError(RECOMMENDATION_ERROR_CODES.QUERY_INVALID, \"--top must be an integer between 1 and 20\");\n }\n return parsed;\n}\n\nfunction parseSelectList(value: string | undefined): number[] {\n if (!value) return [];\n const parsed = value\n .split(\",\")\n .map((entry) => Number.parseInt(entry.trim(), 10))\n .filter((entry) => Number.isInteger(entry) && entry > 0);\n return Array.from(new Set(parsed));\n}\n\nfunction buildSeedQuery(query: string | undefined, mustHave: string[], prefer: string[], exclude: string[]): string {\n if (query && query.trim().length > 0) {\n return query;\n }\n\n const seedTerms = [...mustHave, ...prefer, ...exclude].filter((term) => term.length > 0);\n if (seedTerms.length > 0) {\n return seedTerms.join(\" \");\n }\n\n throw new SkillsFindValidationError(\n RECOMMENDATION_ERROR_CODES.QUERY_INVALID,\n \"Recommendation mode requires a query or at least one criteria flag.\",\n );\n}\n\nfunction normalizeRecommendationOptions(ranking: RankedSkillRecommendation[], details: boolean): RecommendationOption[] {\n return ranking.map((entry, index) => {\n const whyCodes = entry.reasons.map((reason) => reason.code);\n return {\n rank: index + 1,\n scopedName: entry.skill.scopedName,\n description: entry.skill.description,\n score: entry.score,\n why: whyCodes.length > 0 ? whyCodes.join(\", \") : \"score-based match\",\n source: entry.skill.source,\n ...(details\n ? {\n evidence: {\n reasons: entry.reasons,\n breakdown: entry.breakdown,\n },\n }\n : {}),\n };\n });\n}\n\nfunction validateCriteriaConflicts(mustHave: string[], prefer: string[], exclude: string[]): void {\n const overlap = mustHave.filter((term) => exclude.includes(term));\n if (overlap.length > 0) {\n throw new SkillsFindValidationError(\n RECOMMENDATION_ERROR_CODES.CRITERIA_CONFLICT,\n \"A criteria term cannot be both required and excluded.\",\n );\n }\n\n const preferOverlap = prefer.filter((term) => exclude.includes(term));\n if (preferOverlap.length > 0) {\n throw new SkillsFindValidationError(\n RECOMMENDATION_ERROR_CODES.CRITERIA_CONFLICT,\n \"A criteria term cannot be both preferred and excluded.\",\n );\n }\n}\n\nfunction validateSelectedRanks(selectedRanks: number[], total: number): void {\n for (const rank of selectedRanks) {\n if (rank < 1 || rank > total) {\n throw new SkillsFindValidationError(\n RECOMMENDATION_ERROR_CODES.QUERY_INVALID,\n `--select rank ${rank} is out of range (1-${total}).`,\n );\n }\n }\n}\n\nfunction buildEnvelope<T>(operation: string, mvi: boolean, result: T | null, error: LAFSErrorShape | null) {\n return {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\" as const,\n _meta: {\n specVersion: \"1.0.0\",\n schemaVersion: \"1.0.0\",\n timestamp: new Date().toISOString(),\n operation,\n requestId: randomUUID(),\n transport: \"cli\" as const,\n strict: true,\n mvi,\n contextVersion: 0,\n },\n success: error === null,\n result,\n error,\n page: null,\n };\n}\n\nfunction emitJsonError(\n operation: string,\n mvi: boolean,\n code: string,\n message: string,\n category: LAFSErrorCategory,\n details: Record<string, unknown> = {},\n): void {\n const envelope = buildEnvelope(operation, mvi, null, {\n code,\n message,\n category,\n retryable: false,\n retryAfterMs: null,\n details,\n });\n console.error(JSON.stringify(envelope, null, 2));\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","/**\n * doctor command - diagnose configuration issues and health\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync, readdirSync, lstatSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { getAllProviders, getProviderCount } from \"../core/registry/providers.js\";\nimport { detectAllProviders } from \"../core/registry/detection.js\";\nimport { readLockFile } from \"../core/mcp/lock.js\";\nimport { readConfig } from \"../core/formats/index.js\";\nimport type { Provider } from \"../types.js\";\n\nconst CAAMP_VERSION = \"0.2.0\";\n\ninterface CheckResult {\n label: string;\n status: \"pass\" | \"warn\" | \"fail\";\n detail?: string;\n}\n\ninterface SectionResult {\n name: string;\n checks: CheckResult[];\n}\n\nfunction getNodeVersion(): string {\n return process.version;\n}\n\nfunction getNpmVersion(): string | null {\n try {\n return execFileSync(\"npm\", [\"--version\"], { stdio: \"pipe\", encoding: \"utf-8\" }).trim();\n } catch {\n return null;\n }\n}\n\nfunction checkEnvironment(): SectionResult {\n const checks: CheckResult[] = [];\n\n checks.push({ label: `Node.js ${getNodeVersion()}`, status: \"pass\" });\n\n const npmVersion = getNpmVersion();\n if (npmVersion) {\n checks.push({ label: `npm ${npmVersion}`, status: \"pass\" });\n } else {\n checks.push({ label: \"npm not found\", status: \"warn\" });\n }\n\n checks.push({ label: `CAAMP v${CAAMP_VERSION}`, status: \"pass\" });\n checks.push({ label: `${process.platform} ${process.arch}`, status: \"pass\" });\n\n return { name: \"Environment\", checks };\n}\n\nfunction checkRegistry(): SectionResult {\n const checks: CheckResult[] = [];\n\n try {\n const providers = getAllProviders();\n const count = getProviderCount();\n checks.push({ label: `${count} providers loaded`, status: \"pass\" });\n\n const malformed: string[] = [];\n for (const p of providers) {\n if (!p.id || !p.toolName || !p.configKey || !p.configFormat) {\n malformed.push(p.id || \"(unknown)\");\n }\n }\n\n if (malformed.length === 0) {\n checks.push({ label: \"All entries valid\", status: \"pass\" });\n } else {\n checks.push({\n label: `${malformed.length} malformed entries`,\n status: \"fail\",\n detail: malformed.join(\", \"),\n });\n }\n } catch (err) {\n checks.push({\n label: \"Failed to load registry\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Registry\", checks };\n}\n\nfunction checkInstalledProviders(): SectionResult {\n const checks: CheckResult[] = [];\n\n try {\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n\n checks.push({ label: `${installed.length} found`, status: \"pass\" });\n\n for (const r of installed) {\n const methods = r.methods.join(\", \");\n checks.push({ label: `${r.provider.toolName} (${methods})`, status: \"pass\" });\n }\n } catch (err) {\n checks.push({\n label: \"Detection failed\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Installed Providers\", checks };\n}\n\nfunction checkSkillSymlinks(): SectionResult {\n const checks: CheckResult[] = [];\n\n const canonicalDir = join(homedir(), \".agents\", \"skills\");\n\n if (!existsSync(canonicalDir)) {\n checks.push({ label: \"0 canonical skills\", status: \"pass\" });\n checks.push({ label: \"No broken symlinks\", status: \"pass\" });\n return { name: \"Skills\", checks };\n }\n\n let canonicalCount = 0;\n try {\n const entries = readdirSync(canonicalDir);\n canonicalCount = entries.length;\n checks.push({ label: `${canonicalCount} canonical skills`, status: \"pass\" });\n } catch {\n checks.push({ label: \"Cannot read skills directory\", status: \"warn\" });\n return { name: \"Skills\", checks };\n }\n\n // Check symlinks in provider skill directories\n const broken: string[] = [];\n const providers = getAllProviders();\n for (const provider of providers) {\n const skillDir = provider.pathSkills;\n if (!existsSync(skillDir)) continue;\n\n try {\n const entries = readdirSync(skillDir);\n for (const entry of entries) {\n const fullPath = join(skillDir, entry);\n try {\n const stat = lstatSync(fullPath);\n if (stat.isSymbolicLink()) {\n // Check if target exists\n if (!existsSync(fullPath)) {\n broken.push(`${provider.id}/${entry}`);\n }\n }\n } catch {\n // skip unreadable entries\n }\n }\n } catch {\n // skip unreadable dirs\n }\n }\n\n if (broken.length === 0) {\n checks.push({ label: \"No broken symlinks\", status: \"pass\" });\n } else {\n checks.push({\n label: `${broken.length} broken symlinks`,\n status: \"warn\",\n detail: broken.join(\", \"),\n });\n }\n\n return { name: \"Skills\", checks };\n}\n\nasync function checkLockFile(): Promise<SectionResult> {\n const checks: CheckResult[] = [];\n\n try {\n const lock = await readLockFile();\n checks.push({ label: \"Lock file valid\", status: \"pass\" });\n\n // Check for orphaned skill entries (canonical path no longer exists)\n let orphaned = 0;\n for (const [name, entry] of Object.entries(lock.skills)) {\n if (entry.canonicalPath && !existsSync(entry.canonicalPath)) {\n orphaned++;\n }\n }\n\n // Check for orphaned MCP entries\n // MCP servers don't have canonical paths to verify on disk,\n // so we only count skill orphans\n if (orphaned === 0) {\n checks.push({ label: `0 orphaned entries`, status: \"pass\" });\n } else {\n checks.push({\n label: `${orphaned} orphaned skill entries`,\n status: \"warn\",\n detail: \"Skills tracked in lock file but missing from disk\",\n });\n }\n } catch (err) {\n checks.push({\n label: \"Failed to read lock file\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Lock File\", checks };\n}\n\nasync function checkConfigFiles(): Promise<SectionResult> {\n const checks: CheckResult[] = [];\n\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n\n for (const r of installed) {\n const provider = r.provider;\n const configPath = provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n checks.push({\n label: `${provider.id}: no config file found`,\n status: \"warn\",\n detail: configPath,\n });\n continue;\n }\n\n try {\n await readConfig(configPath, provider.configFormat);\n const relPath = configPath.replace(homedir(), \"~\");\n checks.push({\n label: `${provider.id}: ${relPath} readable`,\n status: \"pass\",\n });\n } catch (err) {\n checks.push({\n label: `${provider.id}: config parse error`,\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n if (installed.length === 0) {\n checks.push({ label: \"No installed providers to check\", status: \"pass\" });\n }\n\n return { name: \"Config Files\", checks };\n}\n\nfunction formatSection(section: SectionResult): string {\n const lines: string[] = [];\n lines.push(` ${pc.bold(section.name)}`);\n\n for (const check of section.checks) {\n const icon =\n check.status === \"pass\"\n ? pc.green(\"✓\")\n : check.status === \"warn\"\n ? pc.yellow(\"⚠\")\n : pc.red(\"✗\");\n\n lines.push(` ${icon} ${check.label}`);\n\n if (check.detail) {\n lines.push(` ${pc.dim(check.detail)}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\ninterface JsonOutput {\n version: string;\n sections: Array<{\n name: string;\n checks: CheckResult[];\n }>;\n summary: {\n passed: number;\n warnings: number;\n errors: number;\n };\n}\n\nexport function registerDoctorCommand(program: Command): void {\n program\n .command(\"doctor\")\n .description(\"Diagnose configuration issues and health\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const sections: SectionResult[] = [];\n\n sections.push(checkEnvironment());\n sections.push(checkRegistry());\n sections.push(checkInstalledProviders());\n sections.push(checkSkillSymlinks());\n sections.push(await checkLockFile());\n sections.push(await checkConfigFiles());\n\n // Tally results\n let passed = 0;\n let warnings = 0;\n let errors = 0;\n\n for (const section of sections) {\n for (const check of section.checks) {\n if (check.status === \"pass\") passed++;\n else if (check.status === \"warn\") warnings++;\n else errors++;\n }\n }\n\n if (opts.json) {\n const output: JsonOutput = {\n version: CAAMP_VERSION,\n sections: sections.map((s) => ({\n name: s.name,\n checks: s.checks,\n })),\n summary: { passed, warnings, errors },\n };\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n\n console.log(pc.bold(\"\\ncaamp doctor\\n\"));\n\n for (const section of sections) {\n console.log(formatSection(section));\n console.log();\n }\n\n // Summary line\n const parts: string[] = [];\n parts.push(pc.green(`${passed} checks passed`));\n if (warnings > 0) parts.push(pc.yellow(`${warnings} warning${warnings !== 1 ? \"s\" : \"\"}`));\n if (errors > 0) parts.push(pc.red(`${errors} error${errors !== 1 ? \"s\" : \"\"}`));\n\n console.log(` ${pc.bold(\"Summary\")}: ${parts.join(\", \")}`);\n console.log();\n\n if (errors > 0) {\n process.exit(1);\n }\n });\n}\n","/**\n * Shared helpers for advanced command input parsing and validation.\n */\n\nimport { readFile } from \"node:fs/promises\";\nimport type {\n McpBatchOperation,\n SkillBatchOperation,\n} from \"../../core/advanced/orchestration.js\";\nimport type { Provider, ProviderPriority } from \"../../types.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport { LAFSCommandError } from \"./lafs.js\";\n\nconst VALID_PRIORITIES = new Set<ProviderPriority>([\"high\", \"medium\", \"low\"]);\n\nexport interface ProviderTargetOptions {\n all?: boolean;\n agent?: string[];\n}\n\nexport function parsePriority(value: string): ProviderPriority {\n if (!VALID_PRIORITIES.has(value as ProviderPriority)) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_PRIORITY\",\n `Invalid tier: ${value}`,\n \"Use one of: high, medium, low.\",\n );\n }\n return value as ProviderPriority;\n}\n\nexport function resolveProviders(options: ProviderTargetOptions): Provider[] {\n if (options.all) {\n return getAllProviders();\n }\n\n const targetAgents = options.agent ?? [];\n if (targetAgents.length === 0) {\n return getInstalledProviders();\n }\n\n const providers = targetAgents\n .map((id) => getProvider(id))\n .filter((provider): provider is Provider => provider !== undefined);\n\n if (providers.length !== targetAgents.length) {\n const found = new Set(providers.map((provider) => provider.id));\n const missing = targetAgents.filter((id) => !found.has(id));\n throw new LAFSCommandError(\n \"E_ADVANCED_PROVIDER_NOT_FOUND\",\n `Unknown provider(s): ${missing.join(\", \")}`,\n \"Check `caamp providers list` for valid provider IDs/aliases.\",\n );\n }\n\n return providers;\n}\n\nexport async function readJsonFile(path: string): Promise<unknown> {\n try {\n const raw = await readFile(path, \"utf-8\");\n return JSON.parse(raw) as unknown;\n } catch (error) {\n throw new LAFSCommandError(\n \"E_ADVANCED_INPUT_JSON\",\n `Failed to read JSON file: ${path}`,\n \"Confirm the path exists and contains valid JSON.\",\n true,\n { reason: error instanceof Error ? error.message : String(error) },\n );\n }\n}\n\nexport async function readMcpOperations(path: string): Promise<McpBatchOperation[]> {\n const value = await readJsonFile(path);\n if (!Array.isArray(value)) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_MCP_ARRAY\",\n `MCP operations file must be a JSON array: ${path}`,\n \"Provide an array of objects with serverName and config fields.\",\n );\n }\n\n const operations: McpBatchOperation[] = [];\n for (const [index, item] of value.entries()) {\n if (!item || typeof item !== \"object\") {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_MCP_ITEM\",\n `Invalid MCP operation at index ${index}`,\n \"Each operation must be an object with serverName and config.\",\n );\n }\n\n const obj = item as Record<string, unknown>;\n const serverName = obj[\"serverName\"];\n const config = obj[\"config\"];\n const scope = obj[\"scope\"];\n\n if (typeof serverName !== \"string\" || serverName.length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_MCP_NAME\",\n `Invalid serverName at index ${index}`,\n \"Set serverName to a non-empty string.\",\n );\n }\n\n if (!config || typeof config !== \"object\" || Array.isArray(config)) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_MCP_CONFIG\",\n `Invalid config at index ${index}`,\n \"Set config to an object matching McpServerConfig.\",\n );\n }\n\n if (scope !== undefined && scope !== \"project\" && scope !== \"global\") {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_SCOPE\",\n `Invalid scope at index ${index}: ${String(scope)}`,\n \"Use scope value 'project' or 'global'.\",\n );\n }\n\n operations.push({\n serverName,\n config: config as McpBatchOperation[\"config\"],\n ...(scope ? { scope: scope as \"project\" | \"global\" } : {}),\n });\n }\n\n return operations;\n}\n\nexport async function readSkillOperations(path: string): Promise<SkillBatchOperation[]> {\n const value = await readJsonFile(path);\n if (!Array.isArray(value)) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_SKILL_ARRAY\",\n `Skill operations file must be a JSON array: ${path}`,\n \"Provide an array of objects with sourcePath and skillName fields.\",\n );\n }\n\n const operations: SkillBatchOperation[] = [];\n for (const [index, item] of value.entries()) {\n if (!item || typeof item !== \"object\") {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_SKILL_ITEM\",\n `Invalid skill operation at index ${index}`,\n \"Each operation must be an object with sourcePath and skillName.\",\n );\n }\n\n const obj = item as Record<string, unknown>;\n const sourcePath = obj[\"sourcePath\"];\n const skillName = obj[\"skillName\"];\n const isGlobal = obj[\"isGlobal\"];\n\n if (typeof sourcePath !== \"string\" || sourcePath.length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_SKILL_SOURCE\",\n `Invalid sourcePath at index ${index}`,\n \"Set sourcePath to a non-empty string.\",\n );\n }\n\n if (typeof skillName !== \"string\" || skillName.length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_SKILL_NAME\",\n `Invalid skillName at index ${index}`,\n \"Set skillName to a non-empty string.\",\n );\n }\n\n if (isGlobal !== undefined && typeof isGlobal !== \"boolean\") {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_SKILL_SCOPE\",\n `Invalid isGlobal value at index ${index}`,\n \"Set isGlobal to true or false when provided.\",\n );\n }\n\n operations.push({\n sourcePath,\n skillName,\n ...(isGlobal !== undefined ? { isGlobal } : {}),\n });\n }\n\n return operations;\n}\n\nexport async function readTextInput(\n inlineContent: string | undefined,\n filePath: string | undefined,\n): Promise<string | undefined> {\n if (inlineContent && filePath) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_INPUT_MODE\",\n \"Provide either inline content or a content file, not both.\",\n \"Use --content OR --content-file.\",\n );\n }\n\n if (inlineContent) return inlineContent;\n if (!filePath) return undefined;\n\n try {\n return await readFile(filePath, \"utf-8\");\n } catch (error) {\n throw new LAFSCommandError(\n \"E_ADVANCED_INPUT_TEXT\",\n `Failed to read content file: ${filePath}`,\n \"Confirm the file exists and is readable.\",\n true,\n { reason: error instanceof Error ? error.message : String(error) },\n );\n }\n}\n","/**\n * LAFS-compliant output helpers for advanced CLI commands.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport {\n isRegisteredErrorCode,\n type LAFSEnvelope as ProtocolEnvelope,\n type LAFSErrorCategory,\n} from \"@cleocode/lafs-protocol\";\n\ninterface LAFSErrorShape {\n code: string;\n message: string;\n category: LAFSErrorCategory;\n retryable: boolean;\n retryAfterMs: number | null;\n details: Record<string, unknown>;\n}\n\ninterface LAFSPage {\n mode: \"offset\" | \"cursor\" | \"none\";\n limit: number;\n offset: number;\n nextCursor: string | null;\n hasMore: boolean;\n total: number;\n}\n\nexport interface LAFSEnvelope<T> {\n $schema: string;\n _meta: {\n specVersion: string;\n schemaVersion: string;\n timestamp: string;\n operation: string;\n requestId: string;\n transport: \"cli\";\n strict: true;\n mvi: boolean;\n contextVersion: number;\n };\n success: boolean;\n result: T | null;\n error: LAFSErrorShape | null;\n page: LAFSPage | null;\n}\n\ntype LAFSResultEnvelope<T> = Omit<ProtocolEnvelope, \"result\" | \"error\"> & {\n result: T | null;\n error: LAFSErrorShape | null;\n};\n\nexport class LAFSCommandError extends Error {\n code: string;\n category: LAFSErrorCategory;\n recoverable: boolean;\n suggestion: string;\n retryAfterMs: number | null;\n details?: unknown;\n\n constructor(\n code: string,\n message: string,\n suggestion: string,\n recoverable = true,\n details?: unknown,\n ) {\n super(message);\n this.name = \"LAFSCommandError\";\n this.code = code;\n this.category = inferErrorCategory(code);\n this.recoverable = recoverable;\n this.suggestion = suggestion;\n this.retryAfterMs = null;\n this.details = details;\n }\n}\n\nfunction inferErrorCategory(code: string): LAFSErrorCategory {\n if (code.includes(\"VALIDATION\")) return \"VALIDATION\";\n if (code.includes(\"NOT_FOUND\")) return \"NOT_FOUND\";\n if (code.includes(\"CONFLICT\")) return \"CONFLICT\";\n if (code.includes(\"AUTH\")) return \"AUTH\";\n if (code.includes(\"PERMISSION\")) return \"PERMISSION\";\n if (code.includes(\"RATE_LIMIT\")) return \"RATE_LIMIT\";\n if (code.includes(\"MIGRATION\")) return \"MIGRATION\";\n if (code.includes(\"CONTRACT\")) return \"CONTRACT\";\n return \"INTERNAL\";\n}\n\nfunction baseMeta(operation: string, mvi: boolean) {\n return {\n specVersion: \"1.0.0\",\n schemaVersion: \"1.0.0\",\n timestamp: new Date().toISOString(),\n operation,\n requestId: randomUUID(),\n transport: \"cli\" as const,\n strict: true as const,\n mvi,\n contextVersion: 0,\n };\n}\n\nexport function emitSuccess<T>(operation: string, result: T, mvi = true): void {\n const envelope: LAFSResultEnvelope<T> = {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\",\n _meta: {\n ...baseMeta(operation, mvi),\n },\n success: true,\n result,\n error: null,\n page: null,\n };\n console.log(JSON.stringify(envelope, null, 2));\n}\n\nexport function emitError(operation: string, error: unknown, mvi = true): void {\n let envelope: LAFSResultEnvelope<null>;\n\n if (error instanceof LAFSCommandError) {\n envelope = {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\",\n _meta: {\n ...baseMeta(operation, mvi),\n },\n success: false,\n result: null,\n error: {\n code: isRegisteredErrorCode(error.code) ? error.code : \"E_INTERNAL_UNEXPECTED\",\n message: error.message,\n category: error.category,\n retryable: error.recoverable,\n retryAfterMs: error.retryAfterMs,\n details: {\n hint: error.suggestion,\n ...(error.details !== undefined ? { payload: error.details } : {}),\n },\n },\n page: null,\n };\n } else {\n envelope = {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\",\n _meta: {\n ...baseMeta(operation, mvi),\n },\n success: false,\n result: null,\n error: {\n code: \"E_INTERNAL_UNEXPECTED\",\n message: error instanceof Error ? error.message : String(error),\n category: \"INTERNAL\",\n retryable: false,\n retryAfterMs: null,\n details: {\n hint: \"Rerun with --verbose and validate your inputs.\",\n },\n },\n page: null,\n };\n }\n\n console.error(JSON.stringify(envelope, null, 2));\n}\n\nexport async function runLafsCommand<T>(\n command: string,\n mvi: boolean,\n action: () => Promise<T>,\n): Promise<void> {\n try {\n const result = await action();\n emitSuccess(command, result, mvi);\n } catch (error) {\n emitError(command, error, mvi);\n process.exit(1);\n }\n}\n","/**\n * advanced providers command\n */\n\nimport { Command } from \"commander\";\nimport { selectProvidersByMinimumPriority } from \"../../core/advanced/orchestration.js\";\nimport { parsePriority, resolveProviders } from \"./common.js\";\nimport { runLafsCommand } from \"./lafs.js\";\n\nexport function registerAdvancedProviders(parent: Command): void {\n parent\n .command(\"providers\")\n .description(\"Select providers by priority using advanced wrapper logic\")\n .option(\"-a, --agent <name>\", \"Target specific provider(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--all\", \"Use all registry providers (not only detected)\")\n .option(\"--min-tier <tier>\", \"Minimum priority tier: high|medium|low\", \"low\")\n .option(\"--details\", \"Include full provider objects\")\n .action(async (opts: {\n agent: string[];\n all?: boolean;\n minTier: string;\n details?: boolean;\n }) => runLafsCommand(\"advanced.providers\", !opts.details, async () => {\n const providers = resolveProviders({ all: opts.all, agent: opts.agent });\n const minTier = parsePriority(opts.minTier);\n const selected = selectProvidersByMinimumPriority(providers, minTier);\n\n return {\n objective: \"Filter providers by minimum priority tier\",\n constraints: {\n minTier,\n selectionMode: opts.all ? \"registry\" : \"detected-or-explicit\",\n },\n acceptanceCriteria: {\n selectedCount: selected.length,\n orderedByPriority: true,\n },\n data: opts.details\n ? selected\n : selected.map((provider) => ({\n id: provider.id,\n priority: provider.priority,\n status: provider.status,\n configFormat: provider.configFormat,\n })),\n };\n }));\n}\n","/**\n * advanced batch command\n */\n\nimport { Command } from \"commander\";\nimport { installBatchWithRollback, selectProvidersByMinimumPriority } from \"../../core/advanced/orchestration.js\";\nimport { parsePriority, readMcpOperations, readSkillOperations, resolveProviders } from \"./common.js\";\nimport { LAFSCommandError, runLafsCommand } from \"./lafs.js\";\n\nexport function registerAdvancedBatch(parent: Command): void {\n parent\n .command(\"batch\")\n .description(\"Run rollback-capable batch install for MCP + skills\")\n .option(\"-a, --agent <name>\", \"Target specific provider(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--all\", \"Use all registry providers (not only detected)\")\n .option(\"--min-tier <tier>\", \"Minimum priority tier: high|medium|low\", \"low\")\n .option(\"--mcp-file <path>\", \"JSON file containing McpBatchOperation[]\")\n .option(\"--skills-file <path>\", \"JSON file containing SkillBatchOperation[]\")\n .option(\"--project-dir <path>\", \"Project directory to resolve project-scope paths\")\n .option(\"--details\", \"Include detailed operation result\")\n .action(async (opts: {\n agent: string[];\n all?: boolean;\n minTier: string;\n mcpFile?: string;\n skillsFile?: string;\n projectDir?: string;\n details?: boolean;\n }) => runLafsCommand(\"advanced.batch\", !opts.details, async () => {\n const baseProviders = resolveProviders({ all: opts.all, agent: opts.agent });\n const minimumPriority = parsePriority(opts.minTier);\n const providers = selectProvidersByMinimumPriority(baseProviders, minimumPriority);\n\n const mcp = opts.mcpFile ? await readMcpOperations(opts.mcpFile) : [];\n const skills = opts.skillsFile ? await readSkillOperations(opts.skillsFile) : [];\n\n if (mcp.length === 0 && skills.length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_NO_OPS\",\n \"No operations provided.\",\n \"Provide --mcp-file and/or --skills-file.\",\n );\n }\n\n if (providers.length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_NO_TARGET_PROVIDERS\",\n \"No target providers resolved for this batch operation.\",\n \"Use --all or pass provider IDs with --agent.\",\n );\n }\n\n const result = await installBatchWithRollback({\n providers,\n minimumPriority,\n mcp,\n skills,\n projectDir: opts.projectDir,\n });\n\n if (!result.success) {\n throw new LAFSCommandError(\n \"E_ADVANCED_BATCH_FAILED\",\n result.error ?? \"Batch operation failed.\",\n \"Check rollbackErrors and input configs, then retry.\",\n true,\n result,\n );\n }\n\n return {\n objective: \"Install MCP and skills with rollback safety\",\n constraints: {\n minimumPriority,\n providerCount: providers.length,\n mcpOps: mcp.length,\n skillOps: skills.length,\n },\n acceptanceCriteria: {\n success: result.success,\n rollbackPerformed: result.rollbackPerformed,\n },\n data: opts.details\n ? result\n : {\n providerCount: result.providerIds.length,\n mcpApplied: result.mcpApplied,\n skillsApplied: result.skillsApplied,\n rollbackPerformed: result.rollbackPerformed,\n },\n };\n }));\n}\n","/**\n * advanced conflicts command\n */\n\nimport { Command } from \"commander\";\nimport { detectMcpConfigConflicts, selectProvidersByMinimumPriority } from \"../../core/advanced/orchestration.js\";\nimport { parsePriority, readMcpOperations, resolveProviders } from \"./common.js\";\nimport { LAFSCommandError, runLafsCommand } from \"./lafs.js\";\n\nexport function registerAdvancedConflicts(parent: Command): void {\n parent\n .command(\"conflicts\")\n .description(\"Preflight MCP conflict detection across providers\")\n .requiredOption(\"--mcp-file <path>\", \"JSON file containing McpBatchOperation[]\")\n .option(\"-a, --agent <name>\", \"Target specific provider(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--all\", \"Use all registry providers (not only detected)\")\n .option(\"--min-tier <tier>\", \"Minimum priority tier: high|medium|low\", \"low\")\n .option(\"--project-dir <path>\", \"Project directory to resolve project-scope paths\")\n .option(\"--details\", \"Include full conflict list\")\n .action(async (opts: {\n mcpFile: string;\n agent: string[];\n all?: boolean;\n minTier: string;\n projectDir?: string;\n details?: boolean;\n }) => runLafsCommand(\"advanced.conflicts\", !opts.details, async () => {\n const baseProviders = resolveProviders({ all: opts.all, agent: opts.agent });\n const minimumPriority = parsePriority(opts.minTier);\n const providers = selectProvidersByMinimumPriority(baseProviders, minimumPriority);\n const operations = await readMcpOperations(opts.mcpFile);\n\n if (providers.length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_NO_TARGET_PROVIDERS\",\n \"No target providers resolved for conflict detection.\",\n \"Use --all or pass provider IDs with --agent.\",\n );\n }\n\n const conflicts = await detectMcpConfigConflicts(\n providers,\n operations,\n opts.projectDir,\n );\n\n const countByCode = conflicts.reduce<Record<string, number>>((acc, conflict) => {\n acc[conflict.code] = (acc[conflict.code] ?? 0) + 1;\n return acc;\n }, {});\n\n return {\n objective: \"Detect MCP configuration conflicts before mutation\",\n constraints: {\n minimumPriority,\n providerCount: providers.length,\n operationCount: operations.length,\n },\n acceptanceCriteria: {\n conflictCount: conflicts.length,\n },\n data: opts.details\n ? conflicts\n : {\n conflictCount: conflicts.length,\n countByCode,\n sample: conflicts.slice(0, 5),\n },\n };\n }));\n}\n","/**\n * advanced apply command\n */\n\nimport { Command } from \"commander\";\nimport {\n applyMcpInstallWithPolicy,\n selectProvidersByMinimumPriority,\n type ConflictPolicy,\n} from \"../../core/advanced/orchestration.js\";\nimport { parsePriority, readMcpOperations, resolveProviders } from \"./common.js\";\nimport { LAFSCommandError, runLafsCommand } from \"./lafs.js\";\n\nconst VALID_POLICIES = new Set<ConflictPolicy>([\"fail\", \"skip\", \"overwrite\"]);\n\nfunction parsePolicy(value: string): ConflictPolicy {\n if (!VALID_POLICIES.has(value as ConflictPolicy)) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_POLICY\",\n `Invalid policy: ${value}`,\n \"Use one of: fail, skip, overwrite.\",\n );\n }\n return value as ConflictPolicy;\n}\n\nexport function registerAdvancedApply(parent: Command): void {\n parent\n .command(\"apply\")\n .description(\"Apply MCP operations with configurable conflict policy\")\n .requiredOption(\"--mcp-file <path>\", \"JSON file containing McpBatchOperation[]\")\n .option(\"--policy <policy>\", \"Conflict policy: fail|skip|overwrite\", \"fail\")\n .option(\"-a, --agent <name>\", \"Target specific provider(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--all\", \"Use all registry providers (not only detected)\")\n .option(\"--min-tier <tier>\", \"Minimum priority tier: high|medium|low\", \"low\")\n .option(\"--project-dir <path>\", \"Project directory to resolve project-scope paths\")\n .option(\"--details\", \"Include detailed apply result\")\n .action(async (opts: {\n mcpFile: string;\n policy: string;\n agent: string[];\n all?: boolean;\n minTier: string;\n projectDir?: string;\n details?: boolean;\n }) => runLafsCommand(\"advanced.apply\", !opts.details, async () => {\n const baseProviders = resolveProviders({ all: opts.all, agent: opts.agent });\n const minimumPriority = parsePriority(opts.minTier);\n const providers = selectProvidersByMinimumPriority(baseProviders, minimumPriority);\n const operations = await readMcpOperations(opts.mcpFile);\n const policy = parsePolicy(opts.policy);\n\n if (providers.length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_NO_TARGET_PROVIDERS\",\n \"No target providers resolved for apply operation.\",\n \"Use --all or pass provider IDs with --agent.\",\n );\n }\n\n const result = await applyMcpInstallWithPolicy(\n providers,\n operations,\n policy,\n opts.projectDir,\n );\n\n if (policy === \"fail\" && result.conflicts.length > 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_CONFLICTS_BLOCKING\",\n \"Conflicts detected and policy is set to fail.\",\n \"Run `caamp advanced conflicts` to inspect, or rerun with --policy skip/overwrite.\",\n true,\n result,\n );\n }\n\n const failedWrites = result.applied.filter((entry) => !entry.success);\n if (failedWrites.length > 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_APPLY_WRITE_FAILED\",\n \"One or more MCP writes failed.\",\n \"Check result details, fix provider config issues, and retry.\",\n true,\n result,\n );\n }\n\n return {\n objective: \"Apply MCP operations with policy-driven conflict handling\",\n constraints: {\n policy,\n minimumPriority,\n providerCount: providers.length,\n operationCount: operations.length,\n },\n acceptanceCriteria: {\n conflicts: result.conflicts.length,\n writesSucceeded: result.applied.length,\n },\n data: opts.details\n ? result\n : {\n conflicts: result.conflicts.length,\n applied: result.applied.length,\n skipped: result.skipped.length,\n },\n };\n }));\n}\n","/**\n * advanced instructions command\n */\n\nimport { Command } from \"commander\";\nimport {\n selectProvidersByMinimumPriority,\n updateInstructionsSingleOperation,\n} from \"../../core/advanced/orchestration.js\";\nimport { parsePriority, readTextInput, resolveProviders } from \"./common.js\";\nimport { LAFSCommandError, runLafsCommand } from \"./lafs.js\";\n\nexport function registerAdvancedInstructions(parent: Command): void {\n parent\n .command(\"instructions\")\n .description(\"Single-operation instruction update across providers\")\n .option(\"-a, --agent <name>\", \"Target specific provider(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--all\", \"Use all registry providers (not only detected)\")\n .option(\"--min-tier <tier>\", \"Minimum priority tier: high|medium|low\", \"low\")\n .option(\"--scope <scope>\", \"Instruction scope: project|global\", \"project\")\n .option(\"--content <text>\", \"Inline content to inject\")\n .option(\"--content-file <path>\", \"File containing content to inject\")\n .option(\"--project-dir <path>\", \"Project directory to resolve project-scope paths\")\n .option(\"--details\", \"Include detailed per-file actions\")\n .action(async (opts: {\n agent: string[];\n all?: boolean;\n minTier: string;\n scope: string;\n content?: string;\n contentFile?: string;\n projectDir?: string;\n details?: boolean;\n }) => runLafsCommand(\"advanced.instructions\", !opts.details, async () => {\n const minimumPriority = parsePriority(opts.minTier);\n const baseProviders = resolveProviders({ all: opts.all, agent: opts.agent });\n const providers = selectProvidersByMinimumPriority(baseProviders, minimumPriority);\n\n const scope = opts.scope === \"global\" ? \"global\" : opts.scope === \"project\" ? \"project\" : null;\n if (!scope) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_SCOPE\",\n `Invalid scope: ${opts.scope}`,\n \"Use --scope project or --scope global.\",\n );\n }\n\n const content = await readTextInput(opts.content, opts.contentFile);\n if (!content || content.trim().length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_CONTENT\",\n \"Instruction content is required.\",\n \"Provide --content or --content-file with non-empty text.\",\n );\n }\n\n if (providers.length === 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_NO_TARGET_PROVIDERS\",\n \"No target providers resolved for instruction update.\",\n \"Use --all or pass provider IDs with --agent.\",\n );\n }\n\n const summary = await updateInstructionsSingleOperation(\n providers,\n content,\n scope,\n opts.projectDir,\n );\n\n return {\n objective: \"Update instruction files across providers in one operation\",\n constraints: {\n scope,\n minimumPriority,\n providerCount: providers.length,\n },\n acceptanceCriteria: {\n updatedFiles: summary.updatedFiles,\n },\n data: opts.details\n ? summary\n : {\n updatedFiles: summary.updatedFiles,\n files: summary.actions.map((entry) => ({\n file: entry.file,\n action: entry.action,\n })),\n },\n };\n }));\n}\n","/**\n * advanced configure command\n */\n\nimport { Command } from \"commander\";\nimport { configureProviderGlobalAndProject } from \"../../core/advanced/orchestration.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { readMcpOperations, readTextInput } from \"./common.js\";\nimport { LAFSCommandError, runLafsCommand } from \"./lafs.js\";\n\nexport function registerAdvancedConfigure(parent: Command): void {\n parent\n .command(\"configure\")\n .description(\"Configure global + project scope for one provider in one operation\")\n .requiredOption(\"-a, --agent <name>\", \"Target provider ID or alias\")\n .option(\"--global-mcp-file <path>\", \"JSON file for global MCP operations\")\n .option(\"--project-mcp-file <path>\", \"JSON file for project MCP operations\")\n .option(\"--instruction <text>\", \"Instruction content for both scopes\")\n .option(\"--instruction-file <path>\", \"Instruction content file for both scopes\")\n .option(\"--instruction-global <text>\", \"Instruction content for global scope\")\n .option(\"--instruction-global-file <path>\", \"Instruction content file for global scope\")\n .option(\"--instruction-project <text>\", \"Instruction content for project scope\")\n .option(\"--instruction-project-file <path>\", \"Instruction content file for project scope\")\n .option(\"--project-dir <path>\", \"Project directory to resolve project-scope paths\")\n .option(\"--details\", \"Include detailed write results\")\n .action(async (opts: {\n agent: string;\n globalMcpFile?: string;\n projectMcpFile?: string;\n instruction?: string;\n instructionFile?: string;\n instructionGlobal?: string;\n instructionGlobalFile?: string;\n instructionProject?: string;\n instructionProjectFile?: string;\n projectDir?: string;\n details?: boolean;\n }) => runLafsCommand(\"advanced.configure\", !opts.details, async () => {\n const provider = getProvider(opts.agent);\n if (!provider) {\n throw new LAFSCommandError(\n \"E_ADVANCED_PROVIDER_NOT_FOUND\",\n `Unknown provider: ${opts.agent}`,\n \"Check `caamp providers list` for valid provider IDs/aliases.\",\n );\n }\n\n const globalMcp = opts.globalMcpFile\n ? await readMcpOperations(opts.globalMcpFile)\n : [];\n const projectMcp = opts.projectMcpFile\n ? await readMcpOperations(opts.projectMcpFile)\n : [];\n\n const sharedInstruction = await readTextInput(opts.instruction, opts.instructionFile);\n const globalInstruction = await readTextInput(\n opts.instructionGlobal,\n opts.instructionGlobalFile,\n );\n const projectInstruction = await readTextInput(\n opts.instructionProject,\n opts.instructionProjectFile,\n );\n\n let instructionContent:\n | string\n | { global?: string; project?: string }\n | undefined;\n\n if (globalInstruction || projectInstruction) {\n instructionContent = {\n ...(globalInstruction ? { global: globalInstruction } : {}),\n ...(projectInstruction ? { project: projectInstruction } : {}),\n };\n } else if (sharedInstruction) {\n instructionContent = sharedInstruction;\n }\n\n if (globalMcp.length === 0 && projectMcp.length === 0 && !instructionContent) {\n throw new LAFSCommandError(\n \"E_ADVANCED_VALIDATION_NO_OPS\",\n \"No configuration operations were provided.\",\n \"Provide MCP files and/or instruction content.\",\n );\n }\n\n const result = await configureProviderGlobalAndProject(provider, {\n globalMcp: globalMcp.map((entry) => ({\n serverName: entry.serverName,\n config: entry.config,\n })),\n projectMcp: projectMcp.map((entry) => ({\n serverName: entry.serverName,\n config: entry.config,\n })),\n instructionContent,\n projectDir: opts.projectDir,\n });\n\n const globalFailures = result.mcp.global.filter((entry) => !entry.success);\n const projectFailures = result.mcp.project.filter((entry) => !entry.success);\n\n if (globalFailures.length > 0 || projectFailures.length > 0) {\n throw new LAFSCommandError(\n \"E_ADVANCED_CONFIGURE_FAILED\",\n \"One or more MCP writes failed during configure operation.\",\n \"Inspect the failed write entries and provider config paths, then retry.\",\n true,\n result,\n );\n }\n\n return {\n objective: \"Configure global and project settings in one operation\",\n constraints: {\n provider: provider.id,\n globalMcpOps: globalMcp.length,\n projectMcpOps: projectMcp.length,\n instructionMode: instructionContent\n ? typeof instructionContent === \"string\"\n ? \"shared\"\n : \"scoped\"\n : \"none\",\n },\n acceptanceCriteria: {\n globalWrites: result.mcp.global.length,\n projectWrites: result.mcp.project.length,\n },\n data: opts.details\n ? result\n : {\n providerId: result.providerId,\n configPaths: result.configPaths,\n globalWrites: result.mcp.global.length,\n projectWrites: result.mcp.project.length,\n instructionUpdates: {\n global: result.instructions.global?.size ?? 0,\n project: result.instructions.project?.size ?? 0,\n },\n },\n };\n }));\n}\n","/**\n * Advanced command group registration.\n */\n\nimport { Command } from \"commander\";\nimport { registerAdvancedProviders } from \"./providers.js\";\nimport { registerAdvancedBatch } from \"./batch.js\";\nimport { registerAdvancedConflicts } from \"./conflicts.js\";\nimport { registerAdvancedApply } from \"./apply.js\";\nimport { registerAdvancedInstructions } from \"./instructions.js\";\nimport { registerAdvancedConfigure } from \"./configure.js\";\n\nexport function registerAdvancedCommands(program: Command): void {\n const advanced = program\n .command(\"advanced\")\n .description(\"LAFS-compliant wrappers for advanced orchestration APIs\");\n\n registerAdvancedProviders(advanced);\n registerAdvancedBatch(advanced);\n registerAdvancedConflicts(advanced);\n registerAdvancedApply(advanced);\n registerAdvancedInstructions(advanced);\n registerAdvancedConfigure(advanced);\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","existsSync","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","pc","existsSync","join","join","existsSync","pc","program","randomUUID","program"]}