@cleocode/caamp 1.5.1 → 1.6.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/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","../src/commands/config.ts","../src/core/lafs.ts","../src/commands/doctor.ts","../src/core/version.ts","../src/commands/instructions/inject.ts","../src/commands/instructions/check.ts","../src/commands/instructions/update.ts","../src/commands/instructions/index.ts","../src/commands/mcp/cleo.ts","../src/commands/mcp/detect.ts","../src/commands/mcp/install.ts","../src/commands/mcp/list.ts","../src/commands/mcp/remove.ts","../src/commands/mcp/index.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"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * CAAMP CLI - Central AI Agent Managed Packages\n */\n\nimport { Command } from \"commander\";\nimport { registerAdvancedCommands } from \"./commands/advanced/index.js\";\nimport { registerConfigCommand } from \"./commands/config.js\";\nimport { registerDoctorCommand } from \"./commands/doctor.js\";\nimport { registerInstructionsCommands } from \"./commands/instructions/index.js\";\nimport { registerCleoCommands } from \"./commands/mcp/cleo.js\";\nimport { registerMcpCommands } from \"./commands/mcp/index.js\";\nimport { registerProvidersCommand } from \"./commands/providers.js\";\nimport { registerSkillsCommands } from \"./commands/skills/index.js\";\nimport { isVerbose, setHuman, setQuiet, setVerbose } from \"./core/logger.js\";\nimport { getCaampVersion } from \"./core/version.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(getCaampVersion())\n .option(\"-v, --verbose\", \"Show debug output\")\n .option(\"-q, --quiet\", \"Suppress non-error output\")\n .option(\"--human\", \"Output in human-readable format (default: JSON for LLM agents)\");\n\nprogram.hook(\"preAction\", (thisCommand) => {\n const opts = thisCommand.optsWithGlobals();\n if (opts.verbose) setVerbose(true);\n if (opts.quiet) setQuiet(true);\n if (opts.human) setHuman(true);\n});\n\n// Register command groups\nregisterProvidersCommand(program);\nregisterSkillsCommands(program);\nregisterMcpCommands(program);\nregisterCleoCommands(program);\nregisterInstructionsCommands(program);\nregisterConfigCommand(program);\nregisterDoctorCommand(program);\nregisterAdvancedCommands(program);\n\nfunction toError(error: unknown): Error {\n if (error instanceof Error) return error;\n return new Error(String(error));\n}\n\nfunction handleFatal(error: unknown, source: \"uncaughtException\" | \"unhandledRejection\" | \"cli\"): void {\n const normalized = toError(error);\n console.error(`Fatal error (${source}): ${normalized.message}`);\n if (isVerbose() && normalized.stack) {\n console.error(normalized.stack);\n }\n}\n\nprocess.on(\"uncaughtException\", (error) => {\n handleFatal(error, \"uncaughtException\");\n process.exit(1);\n});\n\nprocess.on(\"unhandledRejection\", (reason) => {\n handleFatal(reason, \"unhandledRejection\");\n process.exit(1);\n});\n\nasync function main(): Promise<void> {\n await program.parseAsync(process.argv);\n}\n\nmain().catch((error) => {\n handleFatal(error, \"cli\");\n process.exit(1);\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 LAFSErrorCategory,\n type LAFSMeta,\n type LAFSError,\n type LAFSPage,\n} from \"@cleocode/lafs-protocol\";\nimport type { MVILevel } from \"../../core/lafs.js\";\n\n/**\n * Generic LAFS result envelope for advanced commands.\n * Uses protocol types directly for full compliance.\n */\ntype LAFSResultEnvelope<T> = {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\";\n _meta: LAFSMeta;\n success: boolean;\n result: T | null;\n error: LAFSError | null;\n page: LAFSPage | 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: MVILevel): LAFSMeta {\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\",\n strict: true,\n mvi,\n contextVersion: 0,\n };\n}\n\nexport function emitSuccess<T>(operation: string, result: T, mvi: MVILevel = \"standard\"): 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: MVILevel = \"standard\"): 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: MVILevel,\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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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","/**\n * config show|path commands - LAFS-compliant with JSON-first output\n */\n\nimport { existsSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { readConfig } from \"../core/formats/index.js\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../core/lafs.js\";\nimport { resolveProviderConfigPath } from \"../core/paths/standard.js\";\nimport { getProvider } from \"../core/registry/providers.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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (providerId: string, opts: { global?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"config.show\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const provider = getProvider(providerId);\n\n if (!provider) {\n const message = `Provider not found: ${providerId}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n providerId,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" : \"project\";\n const configPath = resolveProviderConfigPath(provider, scope) ?? provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n const message = `No config file at: ${configPath}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.FILE_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n configPath,\n scope,\n });\n } else {\n console.log(pc.dim(message));\n }\n process.exit(1);\n }\n\n try {\n const data = await readConfig(configPath, provider.configFormat);\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n provider: provider.id,\n config: data,\n format: provider.configFormat,\n scope,\n });\n return;\n }\n\n // Human-readable output\n console.log(pc.bold(`\\n${provider.toolName} config (${configPath}):\\n`));\n console.log(JSON.stringify(data, null, 2));\n } catch (err) {\n const message = `Error reading config: ${err instanceof Error ? err.message : String(err)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.FILE_SYSTEM_ERROR, message, ErrorCategories.INTERNAL);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n });\n\n config\n .command(\"path\")\n .description(\"Show config file path (outputs raw path for piping)\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .argument(\"[scope]\", \"Scope: project (default) or global\", \"project\")\n .action((providerId: string, scope: string) => {\n // NOTE: This command intentionally outputs raw paths for shell scripting\n // It does NOT use LAFS envelopes to remain pipe-friendly\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 const projectPath = resolveProviderConfigPath(provider, \"project\");\n if (projectPath) {\n console.log(projectPath);\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 * Shared LAFS utilities for CAAMP commands\n * \n * Provides standardized LAFS envelope creation, error handling, and format resolution\n * to ensure all commands follow the LAFS (Language-Agnostic Format Specification) protocol.\n * \n * @module lafs\n * @requires @cleocode/lafs-protocol\n * @requires ../logger.js\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type {\n LAFSErrorCategory,\n LAFSError,\n LAFSMeta,\n LAFSPage,\n Warning,\n} from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport { isHuman, isQuiet } from \"./logger.js\";\n\n/** LAFS MVI disclosure level - defined locally to avoid CI module resolution issues with re-exported types */\nexport type MVILevel = \"minimal\" | \"standard\" | \"full\" | \"custom\";\n\n// Re-export protocol types under CAAMP's naming conventions\nexport type { LAFSMeta };\n\n/** LAFS Error structure - re-exported from protocol as LAFSErrorShape for CAAMP compatibility */\nexport type LAFSErrorShape = LAFSError;\n\n/** LAFS Warning structure - re-exported from protocol */\nexport type LAFSWarning = Warning;\n\n/**\n * Generic LAFS Envelope structure for type-safe command results.\n * Extends the protocol's envelope with TypeScript generics.\n */\nexport interface LAFSEnvelope<T> {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\";\n _meta: LAFSMeta;\n success: boolean;\n result: T | null;\n error: LAFSErrorShape | null;\n page: LAFSPage | null;\n}\n\n/**\n * Format resolution options\n */\nexport interface FormatOptions {\n jsonFlag?: boolean;\n humanFlag?: boolean;\n projectDefault?: \"json\" | \"human\";\n}\n\n/**\n * Resolves output format based on flags and defaults\n * \n * @param options - Format resolution options\n * @returns \"json\" | \"human\"\n * @throws Error if format flags conflict\n * \n * @example\n * ```typescript\n * const format = resolveFormat({\n * jsonFlag: opts.json,\n * humanFlag: opts.human,\n * projectDefault: \"json\"\n * });\n * ```\n */\nexport function resolveFormat(options: FormatOptions): \"json\" | \"human\" {\n return resolveOutputFormat({\n jsonFlag: options.jsonFlag ?? false,\n humanFlag: (options.humanFlag ?? false) || isHuman(),\n projectDefault: options.projectDefault ?? \"json\",\n }).format;\n}\n\n/**\n * Builds a standard LAFS envelope\n * \n * @param operation - Operation identifier (e.g., \"skills.list\", \"doctor.check\")\n * @param mvi - Machine-Verified Instruction flag\n * @param result - Operation result data (null if error)\n * @param error - Error details (null if success)\n * @param page - Pagination info (null if not applicable)\n * @returns LAFS-compliant envelope\n * \n * @example\n * ```typescript\n * const envelope = buildEnvelope(\n * \"skills.list\",\n * true,\n * { skills: [...], count: 5 },\n * null\n * );\n * ```\n */\nexport function buildEnvelope<T>(\n operation: string,\n mvi: MVILevel,\n result: T | null,\n error: LAFSErrorShape | null,\n page: LAFSPage | null = null,\n sessionId?: string,\n warnings?: LAFSWarning[],\n): LAFSEnvelope<T> {\n return {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\",\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\",\n strict: true,\n mvi,\n contextVersion: 0,\n ...(sessionId && { sessionId }),\n ...(warnings && warnings.length > 0 && { warnings }),\n },\n success: error === null,\n result,\n error,\n page,\n };\n}\n\n/**\n * Emits a JSON error envelope to stderr and exits\n * \n * @param operation - Operation identifier\n * @param mvi - Machine-Verified Instruction flag\n * @param code - Error code\n * @param message - Error message\n * @param category - Error category from LAFS protocol\n * @param details - Additional error details\n * @param exitCode - Process exit code (default: 1)\n * \n * @example\n * ```typescript\n * emitError(\n * \"skills.install\",\n * true,\n * \"E_SKILL_NOT_FOUND\",\n * \"Skill not found\",\n * \"NOT_FOUND\",\n * { skillName: \"my-skill\" }\n * );\n * ```\n */\nexport function emitError(\n operation: string,\n mvi: MVILevel,\n code: string,\n message: string,\n category: LAFSErrorCategory,\n details: Record<string, unknown> = {},\n exitCode: number = 1,\n): never {\n const envelope = buildEnvelope(operation, mvi, null, {\n code,\n message,\n category,\n retryable: category === \"TRANSIENT\" || category === \"RATE_LIMIT\",\n retryAfterMs: null,\n details,\n });\n console.error(JSON.stringify(envelope, null, 2));\n process.exit(exitCode);\n}\n\n/**\n * Emits a JSON error envelope without exiting (for catch blocks)\n * \n * @param operation - Operation identifier\n * @param mvi - Machine-Verified Instruction flag\n * @param code - Error code\n * @param message - Error message\n * @param category - Error category from LAFS protocol\n * @param details - Additional error details\n * \n * @example\n * ```typescript\n * try {\n * await riskyOperation();\n * } catch (error) {\n * emitJsonError(\"operation\", true, \"E_FAILED\", \"Operation failed\", \"INTERNAL\");\n * process.exit(1);\n * }\n * ```\n */\nexport function emitJsonError(\n operation: string,\n mvi: MVILevel,\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: category === \"TRANSIENT\" || category === \"RATE_LIMIT\",\n retryAfterMs: null,\n details,\n });\n console.error(JSON.stringify(envelope, null, 2));\n}\n\n/**\n * Outputs a successful LAFS envelope\n * \n * @param operation - Operation identifier\n * @param mvi - Machine-Verified Instruction flag\n * @param result - Operation result data\n * @param page - Optional pagination info\n * \n * @example\n * ```typescript\n * outputSuccess(\"skills.list\", true, { skills: [...], count: 5 });\n * ```\n */\nexport function outputSuccess<T>(\n operation: string,\n mvi: MVILevel,\n result: T,\n page?: LAFSPage,\n sessionId?: string,\n warnings?: LAFSWarning[],\n): void {\n const envelope = buildEnvelope(operation, mvi, result, null, page ?? null, sessionId, warnings);\n \n // In quiet mode, only output if there's an error or if explicitly requested\n if (isQuiet() && !envelope.error) {\n // Suppress non-essential output in quiet mode\n return;\n }\n \n console.log(JSON.stringify(envelope, null, 2));\n}\n\n/**\n * Standard command options interface for LAFS-compliant commands\n */\nexport interface LAFSCommandOptions {\n json?: boolean;\n human?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * Handles format resolution errors consistently\n * \n * @param error - The error that occurred during format resolution\n * @param operation - Operation identifier\n * @param mvi - Machine-Verified Instruction flag\n * @param jsonFlag - Whether --json flag was explicitly set\n * @returns never (exits process)\n * \n * @example\n * ```typescript\n * try {\n * format = resolveFormat({ jsonFlag: opts.json, humanFlag: opts.human });\n * } catch (error) {\n * handleFormatError(error, \"skills.list\", true, opts.json);\n * }\n * ```\n */\nexport function handleFormatError(\n error: unknown,\n operation: string,\n mvi: MVILevel,\n jsonFlag: boolean | undefined,\n): never {\n const message = error instanceof Error ? error.message : String(error);\n \n if (jsonFlag) {\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n } else {\n // eslint-disable-next-line no-console\n console.error(message);\n }\n process.exit(1);\n}\n\n/**\n * Common error categories mapping for convenience\n */\nexport const ErrorCategories = {\n VALIDATION: \"VALIDATION\" as LAFSErrorCategory,\n AUTH: \"AUTH\" as LAFSErrorCategory,\n PERMISSION: \"PERMISSION\" as LAFSErrorCategory,\n NOT_FOUND: \"NOT_FOUND\" as LAFSErrorCategory,\n CONFLICT: \"CONFLICT\" as LAFSErrorCategory,\n RATE_LIMIT: \"RATE_LIMIT\" as LAFSErrorCategory,\n TRANSIENT: \"TRANSIENT\" as LAFSErrorCategory,\n INTERNAL: \"INTERNAL\" as LAFSErrorCategory,\n CONTRACT: \"CONTRACT\" as LAFSErrorCategory,\n MIGRATION: \"MIGRATION\" as LAFSErrorCategory,\n} as const;\n\n/**\n * Common error codes for consistency\n */\nexport const ErrorCodes = {\n // Format errors\n FORMAT_CONFLICT: \"E_FORMAT_CONFLICT\",\n INVALID_JSON: \"E_INVALID_JSON\",\n \n // Not found errors\n SKILL_NOT_FOUND: \"E_SKILL_NOT_FOUND\",\n PROVIDER_NOT_FOUND: \"E_PROVIDER_NOT_FOUND\",\n MCP_SERVER_NOT_FOUND: \"E_MCP_SERVER_NOT_FOUND\",\n FILE_NOT_FOUND: \"E_FILE_NOT_FOUND\",\n \n // Validation errors\n INVALID_INPUT: \"E_INVALID_INPUT\",\n INVALID_CONSTRAINT: \"E_INVALID_CONSTRAINT\",\n INVALID_FORMAT: \"E_INVALID_FORMAT\",\n \n // Operation errors\n INSTALL_FAILED: \"E_INSTALL_FAILED\",\n REMOVE_FAILED: \"E_REMOVE_FAILED\",\n UPDATE_FAILED: \"E_UPDATE_FAILED\",\n VALIDATION_FAILED: \"E_VALIDATION_FAILED\",\n AUDIT_FAILED: \"E_AUDIT_FAILED\",\n \n // System errors\n NETWORK_ERROR: \"E_NETWORK_ERROR\",\n FILE_SYSTEM_ERROR: \"E_FILE_SYSTEM_ERROR\",\n PERMISSION_DENIED: \"E_PERMISSION_DENIED\",\n INTERNAL_ERROR: \"E_INTERNAL_ERROR\",\n} as const;\n","/**\n * doctor command - diagnose configuration issues and health\n * LAFS-compliant with JSON-first output\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync, lstatSync, readdirSync, readlinkSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { readConfig } from \"../core/formats/index.js\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n handleFormatError,\n type LAFSErrorShape,\n outputSuccess,\n resolveFormat,\n} from \"../core/lafs.js\";\nimport { resolveChannelFromServerName } from \"../core/mcp/cleo.js\";\nimport { readLockFile } from \"../core/mcp/lock.js\";\nimport { listMcpServers } from \"../core/mcp/reader.js\";\nimport { CANONICAL_SKILLS_DIR } from \"../core/paths/agents.js\";\nimport { detectAllProviders } from \"../core/registry/detection.js\";\nimport { getAllProviders, getProviderCount } from \"../core/registry/providers.js\";\nimport { getCaampVersion } from \"../core/version.js\";\nimport type { Provider } from \"../types.js\";\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\ninterface DoctorResult {\n environment: {\n node: string;\n npm: string;\n caamp: string;\n platform: string;\n };\n registry: {\n loaded: boolean;\n count: number;\n valid: boolean;\n };\n providers: {\n installed: number;\n list: string[];\n };\n skills: {\n canonical: number;\n brokenLinks: number;\n staleLinks: number;\n };\n mcpServers: {\n tracked: number;\n untracked: number;\n orphaned: number;\n };\n checks: Array<{\n label: string;\n status: \"pass\" | \"fail\" | \"warn\";\n message?: string;\n }>;\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${getCaampVersion()}`, 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 = CANONICAL_SKILLS_DIR;\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 let canonicalNames: string[] = [];\n try {\n canonicalNames = readdirSync(canonicalDir).filter((name) => {\n const full = join(canonicalDir, name);\n try {\n const stat = lstatSync(full);\n return stat.isDirectory() || stat.isSymbolicLink();\n } catch {\n return false;\n }\n });\n canonicalCount = canonicalNames.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 installed provider skill directories\n const broken: string[] = [];\n const stale: string[] = [];\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 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()) continue;\n\n if (!existsSync(fullPath)) {\n broken.push(`${provider.id}/${entry}`);\n } else {\n // Check if symlink points to canonical location\n const target = readlinkSync(fullPath);\n const isCanonical =\n target.includes(\"/.agents/skills/\") ||\n target.includes(\"\\\\.agents\\\\skills\\\\\");\n if (!isCanonical) {\n stale.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 symlink${broken.length !== 1 ? \"s\" : \"\"}`,\n status: \"warn\",\n detail: broken.join(\", \"),\n });\n }\n\n if (stale.length === 0) {\n checks.push({ label: \"No stale symlinks\", status: \"pass\" });\n } else {\n checks.push({\n label: `${stale.length} stale symlink${stale.length !== 1 ? \"s\" : \"\"} (not pointing to ~/.agents/skills/)`,\n status: \"warn\",\n detail: stale.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 const lockSkillNames = Object.keys(lock.skills);\n checks.push({ label: `${lockSkillNames.length} skill entries`, status: \"pass\" });\n\n // Check for orphaned skill entries (canonical path no longer exists)\n const orphaned: string[] = [];\n for (const [name, entry] of Object.entries(lock.skills)) {\n if (entry.canonicalPath && !existsSync(entry.canonicalPath)) {\n orphaned.push(name);\n }\n }\n\n if (orphaned.length === 0) {\n checks.push({ label: \"0 orphaned entries\", status: \"pass\" });\n } else {\n checks.push({\n label: `${orphaned.length} orphaned skill${orphaned.length !== 1 ? \"s\" : \"\"} (in lock, missing from disk)`,\n status: \"warn\",\n detail: orphaned.join(\", \"),\n });\n }\n\n // Check for untracked skills (on disk but not in lock)\n const canonicalDir = CANONICAL_SKILLS_DIR;\n if (existsSync(canonicalDir)) {\n const onDisk = readdirSync(canonicalDir).filter((name) => {\n try {\n const stat = lstatSync(join(canonicalDir, name));\n return stat.isDirectory() || stat.isSymbolicLink();\n } catch {\n return false;\n }\n });\n const untracked = onDisk.filter((name) => !lock.skills[name]);\n\n if (untracked.length === 0) {\n checks.push({ label: \"0 untracked skills\", status: \"pass\" });\n } else {\n checks.push({\n label: `${untracked.length} untracked skill${untracked.length !== 1 ? \"s\" : \"\"} (on disk, not in lock)`,\n status: \"warn\",\n detail: untracked.join(\", \"),\n });\n }\n }\n\n // Check lock agent-list vs actual symlinks\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n const mismatches: string[] = [];\n\n for (const [name, entry] of Object.entries(lock.skills)) {\n if (!entry.agents || entry.agents.length === 0) continue;\n\n for (const agentId of entry.agents) {\n const provider = installed.find((r) => r.provider.id === agentId);\n if (!provider) continue;\n\n const linkPath = join(provider.provider.pathSkills, name);\n if (!existsSync(linkPath)) {\n mismatches.push(`${name} missing from ${agentId}`);\n }\n }\n }\n\n if (mismatches.length === 0) {\n checks.push({ label: \"Lock agent-lists match symlinks\", status: \"pass\" });\n } else {\n checks.push({\n label: `${mismatches.length} agent-list mismatch${mismatches.length !== 1 ? \"es\" : \"\"}`,\n status: \"warn\",\n detail: mismatches.slice(0, 5).join(\", \") + (mismatches.length > 5 ? ` (+${mismatches.length - 5} more)` : \"\"),\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 checkMcpLockEntries(): Promise<SectionResult> {\n const checks: CheckResult[] = [];\n\n try {\n const lock = await readLockFile();\n const lockNames = Object.keys(lock.mcpServers);\n checks.push({ label: `${lockNames.length} MCP server entries in lock`, status: \"pass\" });\n\n // Detect untracked CLEO servers (in config, not in lock)\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n const liveCleoNames = new Set<string>();\n let untrackedCount = 0;\n\n for (const scope of [\"project\", \"global\"] as const) {\n for (const r of installed) {\n try {\n const entries = await listMcpServers(r.provider, scope);\n for (const entry of entries) {\n const channel = resolveChannelFromServerName(entry.name);\n if (!channel) continue;\n liveCleoNames.add(entry.name);\n\n if (!lock.mcpServers[entry.name]) {\n untrackedCount++;\n }\n }\n } catch {\n // skip unreadable configs\n }\n }\n }\n\n if (untrackedCount === 0) {\n checks.push({ label: \"All CLEO servers tracked in lock\", status: \"pass\" });\n } else {\n checks.push({\n label: `${untrackedCount} untracked CLEO server${untrackedCount !== 1 ? \"s\" : \"\"} (in config, not in lock)`,\n status: \"warn\",\n detail: \"Run `caamp cleo repair` to backfill lock entries\",\n });\n }\n\n // Detect orphaned CLEO entries (in lock, not in any config)\n let orphanedCount = 0;\n const orphanedNames: string[] = [];\n\n for (const serverName of lockNames) {\n const channel = resolveChannelFromServerName(serverName);\n if (!channel) continue;\n\n if (!liveCleoNames.has(serverName)) {\n orphanedCount++;\n orphanedNames.push(serverName);\n }\n }\n\n if (orphanedCount === 0) {\n checks.push({ label: \"No orphaned CLEO lock entries\", status: \"pass\" });\n } else {\n checks.push({\n label: `${orphanedCount} orphaned CLEO lock entr${orphanedCount !== 1 ? \"ies\" : \"y\"} (in lock, not in any config)`,\n status: \"warn\",\n detail: orphanedNames.join(\", \") + \" — Run `caamp cleo repair --prune` to clean up\",\n });\n }\n } catch (err) {\n checks.push({\n label: \"Failed to check MCP lock entries\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"MCP Lock\", 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\nexport function registerDoctorCommand(program: Command): void {\n program\n .command(\"doctor\")\n .description(\"Diagnose configuration issues and health\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { json?: boolean; human?: boolean }) => {\n const operation = \"doctor.check\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n handleFormatError(error, operation, mvi, opts.json);\n }\n\n try {\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 checkMcpLockEntries());\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 // Build result for LAFS envelope\n const npmVersion = getNpmVersion() ?? \"not found\";\n const allProviders = getAllProviders();\n const malformedCount = allProviders.filter(\n (p) => !p.id || !p.toolName || !p.configKey || !p.configFormat\n ).length;\n const detectionResults = detectAllProviders();\n const installedProviders = detectionResults.filter((r) => r.installed);\n const { canonicalCount, brokenCount, staleCount } = countSkillIssues();\n\n const { tracked: mcpTracked, untracked: mcpUntracked, orphaned: mcpOrphaned } = countMcpLockIssues(sections);\n\n const result: DoctorResult = {\n environment: {\n node: getNodeVersion(),\n npm: npmVersion,\n caamp: getCaampVersion(),\n platform: `${process.platform} ${process.arch}`,\n },\n registry: {\n loaded: true,\n count: getProviderCount(),\n valid: malformedCount === 0,\n },\n providers: {\n installed: installedProviders.length,\n list: installedProviders.map((r) => r.provider.id),\n },\n skills: {\n canonical: canonicalCount,\n brokenLinks: brokenCount,\n staleLinks: staleCount,\n },\n mcpServers: {\n tracked: mcpTracked,\n untracked: mcpUntracked,\n orphaned: mcpOrphaned,\n },\n checks: sections.flatMap((s) =>\n s.checks.map((c) => ({\n label: `${s.name}: ${c.label}`,\n status: c.status,\n message: c.detail,\n }))\n ),\n };\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, result);\n \n if (errors > 0) {\n process.exit(1);\n }\n return;\n }\n\n // Human-readable output\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 } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (format === \"json\") {\n emitJsonError(\n operation,\n mvi,\n ErrorCodes.INTERNAL_ERROR,\n message,\n ErrorCategories.INTERNAL\n );\n } else {\n console.error(pc.red(`Error: ${message}`));\n }\n process.exit(1);\n }\n });\n}\n\nfunction countSkillIssues(): { canonicalCount: number; brokenCount: number; staleCount: number } {\n const canonicalDir = CANONICAL_SKILLS_DIR;\n let canonicalCount = 0;\n\n if (existsSync(canonicalDir)) {\n try {\n const names = readdirSync(canonicalDir).filter((name) => {\n const full = join(canonicalDir, name);\n try {\n const stat = lstatSync(full);\n return stat.isDirectory() || stat.isSymbolicLink();\n } catch {\n return false;\n }\n });\n canonicalCount = names.length;\n } catch {\n // ignore\n }\n }\n\n let brokenCount = 0;\n let staleCount = 0;\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 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()) continue;\n\n if (!existsSync(fullPath)) {\n brokenCount++;\n } else {\n const target = readlinkSync(fullPath);\n const isCanonical =\n target.includes(\"/.agents/skills/\") ||\n target.includes(\"\\\\.agents\\\\skills\\\\\");\n if (!isCanonical) {\n staleCount++;\n }\n }\n } catch {\n // skip unreadable entries\n }\n }\n } catch {\n // skip unreadable dirs\n }\n }\n\n return { canonicalCount, brokenCount, staleCount };\n}\n\nfunction countMcpLockIssues(sections: SectionResult[]): {\n tracked: number;\n untracked: number;\n orphaned: number;\n} {\n const mcpSection = sections.find((s) => s.name === \"MCP Lock\");\n if (!mcpSection) return { tracked: 0, untracked: 0, orphaned: 0 };\n\n let tracked = 0;\n let untracked = 0;\n let orphaned = 0;\n\n for (const check of mcpSection.checks) {\n const countMatch = check.label.match(/^(\\d+)/);\n if (!countMatch?.[1]) continue;\n\n const count = Number.parseInt(countMatch[1], 10);\n if (check.label.includes(\"MCP server entries in lock\")) {\n tracked = count;\n } else if (check.label.includes(\"untracked\")) {\n untracked = count;\n } else if (check.label.includes(\"orphaned\")) {\n orphaned = count;\n }\n }\n\n return { tracked, untracked, orphaned };\n}\n","import { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nlet cachedVersion: string | null = null;\n\nexport function getCaampVersion(): string {\n if (cachedVersion) return cachedVersion;\n\n try {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const packageJsonPath = join(currentDir, \"..\", \"package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as { version?: string };\n cachedVersion = packageJson.version ?? \"0.0.0\";\n } catch {\n cachedVersion = \"0.0.0\";\n }\n\n return cachedVersion;\n}\n","/**\n * instructions inject command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent, groupByInstructFile } from \"../../core/instructions/templates.js\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n content?: string;\n dryRun?: boolean;\n all?: boolean;\n json?: boolean;\n human?: boolean;\n }) => {\n const operation = \"instructions.inject\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\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 const message = \"No providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n injected: [],\n providers: providers.map((p) => p.id),\n count: 0,\n dryRun: true,\n wouldInject: Array.from(groups.entries()).map(([file, group]) => ({\n file,\n providers: group.map((p) => p.id),\n })),\n });\n } else {\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 }\n return;\n }\n\n const results = await injectAll(providers, process.cwd(), scope, content);\n\n const injected: string[] = [];\n for (const [file] of results) {\n injected.push(file);\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n injected,\n providers: providers.map((p) => p.id),\n count: results.size,\n });\n } else {\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 console.log(pc.bold(`\\n${results.size} file(s) processed.`));\n }\n });\n}\n","/**\n * instructions check command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { checkAllInjections } from \"../../core/instructions/injector.js\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--all\", \"Check all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n json?: boolean;\n human?: boolean;\n all?: boolean;\n }) => {\n const operation = \"instructions.check\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\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 // Build provider status for result\n const providerStatus = results.map((r) => ({\n id: r.provider,\n present: r.status === \"current\" || r.status === \"outdated\",\n path: r.file,\n }));\n\n const present = providerStatus.filter((p) => p.present).length;\n const missing = providerStatus.filter((p) => !p.present).length;\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n providers: providerStatus,\n present,\n missing,\n });\n return;\n }\n\n // Human-readable output\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 - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { checkAllInjections, injectAll } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent } from \"../../core/instructions/templates.js\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { global?: boolean; yes?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"instructions.update\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated: [],\n failed: [],\n count: { updated: 0, failed: 0 },\n });\n } else {\n console.log(pc.green(\"All instruction files are up to date.\"));\n }\n return;\n }\n\n if (format === \"human\") {\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\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 const updated: string[] = [];\n for (const [file] of results) {\n updated.push(file);\n }\n\n if (format === \"human\") {\n console.log();\n for (const [file, action] of results) {\n console.log(` ${pc.green(\"✓\")} ${file} (${action})`);\n }\n console.log(pc.bold(`\\n${results.size} file(s) updated.`));\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated,\n failed: [],\n count: { updated: updated.length, failed: 0 },\n });\n }\n });\n}\n","/**\n * Instructions command group registration\n */\n\nimport type { 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 * CLEO MCP channel commands and compatibility wrappers.\n */\n\nimport { createInterface } from \"node:readline/promises\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport {\n buildCleoProfile,\n type CleoChannel,\n checkCommandReachability,\n extractVersionTag,\n normalizeCleoChannel,\n parseEnvAssignments,\n resolveChannelFromServerName,\n resolveCleoServerName,\n} from \"../../core/mcp/cleo.js\";\nimport { installMcpServerToAll } from \"../../core/mcp/installer.js\";\nimport { getTrackedMcpServers, recordMcpInstall, removeMcpFromLock } from \"../../core/mcp/lock.js\";\nimport { listMcpServers, removeMcpServer } from \"../../core/mcp/reader.js\";\nimport { reconcileCleoLock } from \"../../core/mcp/reconcile.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\ninterface CleoInstallOptions {\n channel?: string;\n provider: string[];\n all?: boolean;\n global?: boolean;\n version?: string;\n command?: string;\n arg: string[];\n env: string[];\n cleoDir?: string;\n dryRun?: boolean;\n yes?: boolean;\n interactive?: boolean;\n json?: boolean;\n human?: boolean;\n}\n\ninterface CleoUninstallOptions {\n channel?: string;\n provider: string[];\n all?: boolean;\n global?: boolean;\n dryRun?: boolean;\n json?: boolean;\n human?: boolean;\n}\n\ninterface CleoShowOptions {\n provider: string[];\n all?: boolean;\n global?: boolean;\n project?: boolean;\n channel?: string;\n json?: boolean;\n human?: boolean;\n}\n\ninterface CleoRepairOptions {\n provider: string[];\n all?: boolean;\n global?: boolean;\n project?: boolean;\n prune?: boolean;\n dryRun?: boolean;\n json?: boolean;\n human?: boolean;\n}\n\nfunction collect(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction collectTargetProviders(providerIds: string[], all?: boolean): Provider[] {\n if (all) {\n return getInstalledProviders();\n }\n\n if (providerIds.length > 0) {\n return providerIds\n .map((id) => getProvider(id))\n .filter((provider): provider is Provider => provider !== undefined);\n }\n\n return getInstalledProviders();\n}\n\nasync function validateProfile(\n provider: Provider,\n scope: \"project\" | \"global\",\n serverName: string,\n): Promise<{ valid: boolean; reason?: string }> {\n const entries = await listMcpServers(provider, scope);\n const entry = entries.find((candidate) => candidate.name === serverName);\n if (!entry) {\n return { valid: false, reason: \"server missing after write\" };\n }\n\n const command = typeof entry.config.command === \"string\" ? entry.config.command : undefined;\n if (!command) {\n return { valid: true };\n }\n\n const reachability = checkCommandReachability(command);\n if (!reachability.reachable) {\n return {\n valid: false,\n reason: `command not reachable (${reachability.method}: ${reachability.detail})`,\n };\n }\n\n return { valid: true };\n}\n\nasync function detectServerConflicts(\n providers: Provider[],\n scope: \"project\" | \"global\",\n targetServerName: string,\n): Promise<Array<{ providerId: string; message: string }>> {\n const warnings: Array<{ providerId: string; message: string }> = [];\n\n for (const provider of providers) {\n const entries = await listMcpServers(provider, scope);\n const existing = entries.find((entry) => entry.name === targetServerName);\n if (!existing) continue;\n\n const command = typeof existing.config.command === \"string\" ? existing.config.command : \"\";\n const args = Array.isArray(existing.config.args)\n ? existing.config.args.filter((value): value is string => typeof value === \"string\")\n : [];\n const flat = `${command} ${args.join(\" \")}`.toLowerCase();\n\n if (!flat.includes(\"cleo\")) {\n warnings.push({\n providerId: provider.id,\n message: `Server name '${targetServerName}' already exists with a non-CLEO command in ${provider.id}.`,\n });\n }\n }\n\n return warnings;\n}\n\nfunction formatInstallResultHuman(\n mode: \"install\" | \"update\",\n channel: CleoChannel,\n serverName: string,\n scope: \"project\" | \"global\",\n results: Awaited<ReturnType<typeof installMcpServerToAll>>,\n validations: Array<{ providerId: string; valid: boolean; reason?: string }>,\n): void {\n console.log(pc.bold(`${mode === \"install\" ? \"Install\" : \"Update\"} CLEO channel: ${channel}`));\n console.log(pc.dim(`Server: ${serverName} Scope: ${scope}`));\n console.log();\n\n for (const result of results) {\n const validation = validations.find((entry) => entry.providerId === result.provider.id);\n if (result.success) {\n const validationLabel = validation?.valid\n ? pc.green(\"validated\")\n : pc.yellow(`validation warning: ${validation?.reason ?? \"unknown\"}`);\n console.log(` ${pc.green(\"+\")} ${result.provider.toolName.padEnd(22)} ${pc.dim(result.configPath)} ${validationLabel}`);\n } else {\n console.log(` ${pc.red(\"x\")} ${result.provider.toolName.padEnd(22)} ${pc.red(result.error ?? \"failed\")}`);\n console.log(pc.dim(\" Recovery: verify config path permissions and retry with --dry-run.\"));\n }\n }\n console.log();\n}\n\nasync function runInteractiveInstall(\n opts: CleoInstallOptions,\n): Promise<CleoInstallOptions> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const discovered = getInstalledProviders();\n if (discovered.length === 0) {\n throw new Error(\"No installed providers were detected for interactive setup.\");\n }\n\n console.log(pc.bold(\"CLEO MCP Setup\"));\n console.log(pc.dim(\"Step 1/6 - Select provider(s)\"));\n for (const [index, provider] of discovered.entries()) {\n console.log(` ${index + 1}. ${provider.id} (${provider.toolName})`);\n }\n const providerAnswer = await rl.question(pc.dim(\"Choose providers (e.g. 1,2 or all): \"));\n const selectedProviders = providerAnswer.trim().toLowerCase() === \"all\"\n ? discovered.map((provider) => provider.id)\n : providerAnswer\n .split(\",\")\n .map((part) => Number(part.trim()))\n .filter((value) => Number.isFinite(value) && value > 0 && value <= discovered.length)\n .map((index) => discovered[index - 1]?.id)\n .filter((id): id is string => Boolean(id));\n\n if (selectedProviders.length === 0) {\n throw new Error(\"No providers selected.\");\n }\n\n console.log();\n console.log(pc.dim(\"Step 2/6 - Select channel\"));\n const channelAnswer = await rl.question(pc.dim(\"Channel [stable/beta/dev] (stable): \"));\n const selectedChannel = normalizeCleoChannel(channelAnswer || \"stable\");\n\n let command = opts.command;\n let args = [...opts.arg];\n let env = [...opts.env];\n let cleoDir = opts.cleoDir;\n if (selectedChannel === \"dev\") {\n command = await rl.question(pc.dim(\"Dev command (required): \"));\n const argsAnswer = await rl.question(pc.dim(\"Dev args (space-separated, optional): \"));\n args = argsAnswer.trim() === \"\" ? [] : argsAnswer.trim().split(/\\s+/);\n const dirAnswer = await rl.question(pc.dim(\"CLEO_DIR (~/.cleo-dev default): \"));\n cleoDir = dirAnswer.trim() === \"\" ? \"~/.cleo-dev\" : dirAnswer.trim();\n if (cleoDir.trim() !== \"\") {\n env = [\n ...env.filter((entry) => !entry.startsWith(\"CLEO_DIR=\")),\n `CLEO_DIR=${cleoDir}`,\n ];\n }\n }\n\n const profile = buildCleoProfile({\n channel: selectedChannel,\n version: opts.version,\n command,\n args,\n env: parseEnvAssignments(env),\n cleoDir,\n });\n\n console.log();\n console.log(pc.dim(\"Step 3/6 - Preview profile diff\"));\n console.log(` Server: ${pc.bold(profile.serverName)}`);\n console.log(` Channel: ${selectedChannel}`);\n console.log(` Config: ${JSON.stringify(profile.config)}`);\n\n console.log();\n console.log(pc.dim(\"Step 4/6 - Confirm apply\"));\n const confirm = await rl.question(pc.dim(\"Apply this configuration? [y/N] \"));\n if (![\"y\", \"yes\"].includes(confirm.trim().toLowerCase())) {\n throw new Error(\"Cancelled by user.\");\n }\n\n return {\n ...opts,\n provider: selectedProviders,\n channel: selectedChannel,\n command,\n arg: args,\n env,\n cleoDir,\n yes: true,\n };\n } finally {\n rl.close();\n }\n}\n\nexport async function executeCleoInstall(\n mode: \"install\" | \"update\",\n opts: CleoInstallOptions,\n operation: string,\n): Promise<void> {\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const interactive = (opts.interactive ?? false) && format === \"human\";\n const resolvedOpts = interactive ? await runInteractiveInstall(opts) : opts;\n\n const channel = normalizeCleoChannel(resolvedOpts.channel);\n const providers = collectTargetProviders(resolvedOpts.provider, resolvedOpts.all);\n if (providers.length === 0) {\n const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const envMap = parseEnvAssignments(resolvedOpts.env);\n const profile = buildCleoProfile({\n channel,\n version: resolvedOpts.version,\n command: resolvedOpts.command,\n args: resolvedOpts.arg,\n env: envMap,\n cleoDir: resolvedOpts.cleoDir,\n });\n\n const scope = resolvedOpts.global ? \"global\" as const : \"project\" as const;\n\n if (resolvedOpts.dryRun) {\n if (format === \"human\") {\n console.log(pc.bold(`Dry run: ${mode} CLEO (${channel})`));\n console.log(pc.dim(`Server: ${profile.serverName} Scope: ${scope}`));\n console.log(pc.dim(`Providers: ${providers.map((provider) => provider.id).join(\", \")}`));\n console.log(pc.dim(`Command: ${profile.config.command ?? \"(none)\"} ${(profile.config.args ?? []).join(\" \")}`));\n if (profile.config.env && Object.keys(profile.config.env).length > 0) {\n console.log(pc.dim(`Env: ${JSON.stringify(profile.config.env)}`));\n }\n } else {\n outputSuccess(operation, mvi, {\n action: mode,\n channel,\n serverName: profile.serverName,\n providers: providers.map((provider) => provider.id),\n scope,\n command: profile.config.command,\n args: profile.config.args ?? [],\n env: profile.config.env ?? {},\n packageSpec: profile.packageSpec,\n dryRun: true,\n });\n }\n return;\n }\n\n const conflictWarnings = await detectServerConflicts(providers, scope, profile.serverName);\n if (format === \"human\" && conflictWarnings.length > 0) {\n console.log(pc.yellow(\"Warning: potential server name conflicts detected.\"));\n for (const warning of conflictWarnings) {\n console.log(pc.yellow(` - ${warning.message}`));\n }\n console.log(pc.dim(\"Recovery: run with --dry-run, inspect provider config, then retry with explicit channel/profile.\"));\n console.log();\n }\n\n const results = await installMcpServerToAll(providers, profile.serverName, profile.config, scope);\n const succeeded = results.filter((result) => result.success);\n\n const validations: Array<{ providerId: string; valid: boolean; reason?: string }> = [];\n for (const result of succeeded) {\n const validation = await validateProfile(result.provider, scope, profile.serverName);\n validations.push({ providerId: result.provider.id, valid: validation.valid, reason: validation.reason });\n }\n\n if (succeeded.length > 0) {\n await recordMcpInstall(\n profile.serverName,\n profile.packageSpec ?? resolvedOpts.command ?? \"cleo-dev\",\n channel === \"dev\" ? \"command\" : \"package\",\n succeeded.map((result) => result.provider.id),\n resolvedOpts.global ?? false,\n resolvedOpts.version ?? extractVersionTag(profile.packageSpec),\n );\n }\n\n if (format === \"human\") {\n formatInstallResultHuman(mode, channel, profile.serverName, scope, results, validations);\n }\n\n const validationFailures = validations.filter((entry) => !entry.valid);\n if (interactive && validationFailures.length > 0 && format === \"human\") {\n console.log(pc.dim(\"Step 5/6 - Validation\"));\n console.log(pc.yellow(`Validation found ${validationFailures.length} issue(s).`));\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n console.log(pc.dim(\"Step 6/6 - Rollback\"));\n const answer = await rl.question(pc.dim(\"Rollback failed validations? [y/N] \"));\n if ([\"y\", \"yes\"].includes(answer.trim().toLowerCase())) {\n for (const failure of validationFailures) {\n const provider = providers.find((candidate) => candidate.id === failure.providerId);\n if (!provider) continue;\n await removeMcpServer(provider, profile.serverName, scope);\n }\n console.log(pc.yellow(\"Rollback completed for failed provider validations.\"));\n }\n } finally {\n rl.close();\n }\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n action: mode,\n channel,\n serverName: profile.serverName,\n scope,\n command: profile.config.command,\n args: profile.config.args ?? [],\n env: profile.config.env ?? {},\n packageSpec: profile.packageSpec,\n providers: results.map((result) => ({\n id: result.provider.id,\n success: result.success,\n configPath: result.configPath,\n error: result.error,\n validation: validations.find((entry) => entry.providerId === result.provider.id) ?? null,\n })),\n conflicts: conflictWarnings,\n validationStatus: validationFailures.length === 0 ? \"ok\" : \"warning\",\n });\n }\n}\n\nexport async function executeCleoUninstall(\n opts: CleoUninstallOptions,\n operation: string,\n): Promise<void> {\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const channel = normalizeCleoChannel(opts.channel);\n const serverName = resolveCleoServerName(channel);\n const providers = collectTargetProviders(opts.provider, opts.all);\n\n if (providers.length === 0) {\n const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n if (opts.dryRun) {\n if (format === \"human\") {\n console.log(pc.bold(\"Dry run: uninstall CLEO profile\"));\n console.log(pc.dim(`Server: ${serverName} Channel: ${channel} Scope: ${scope}`));\n console.log(pc.dim(`Providers: ${providers.map((provider) => provider.id).join(\", \")}`));\n } else {\n outputSuccess(operation, mvi, {\n action: \"uninstall\",\n channel,\n serverName,\n providers: providers.map((provider) => provider.id),\n scope,\n dryRun: true,\n });\n }\n return;\n }\n\n const removed: string[] = [];\n for (const provider of providers) {\n const success = await removeMcpServer(provider, serverName, scope);\n if (success) removed.push(provider.id);\n }\n\n if (removed.length > 0) {\n await removeMcpFromLock(serverName);\n }\n\n if (format === \"human\") {\n const prefix = removed.length > 0 ? pc.green(\"Removed\") : pc.yellow(\"No matching profile found for\");\n console.log(`${prefix} ${pc.bold(serverName)} (${channel}) on ${removed.length}/${providers.length} providers.`);\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n action: \"uninstall\",\n channel,\n serverName,\n scope,\n removed,\n providerCount: providers.length,\n dryRun: false,\n });\n }\n}\n\nexport type CleoHealthStatus = \"healthy\" | \"degraded\" | \"broken\";\n\nexport interface CleoEntryHealth {\n commandReachable: boolean;\n commandDetail: string;\n configPresent: boolean;\n lockTracked: boolean;\n status: CleoHealthStatus;\n}\n\nexport function checkCleoEntryHealth(\n command: string | undefined,\n lockTracked: boolean,\n): CleoEntryHealth {\n if (!command) {\n return {\n commandReachable: true,\n commandDetail: \"(no command)\",\n configPresent: true,\n lockTracked,\n status: lockTracked ? \"healthy\" : \"degraded\",\n };\n }\n\n const reachability = checkCommandReachability(command);\n if (!reachability.reachable) {\n return {\n commandReachable: false,\n commandDetail: reachability.detail,\n configPresent: true,\n lockTracked,\n status: \"broken\",\n };\n }\n\n return {\n commandReachable: true,\n commandDetail: reachability.detail,\n configPresent: true,\n lockTracked,\n status: lockTracked ? \"healthy\" : \"degraded\",\n };\n}\n\nexport async function executeCleoShow(\n opts: CleoShowOptions,\n operation: string,\n): Promise<void> {\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const providers = collectTargetProviders(opts.provider, opts.all);\n if (providers.length === 0) {\n const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const channelFilter = opts.channel ? normalizeCleoChannel(opts.channel) : null;\n\n // Determine which scopes to scan\n const scopes: Array<\"project\" | \"global\"> = [];\n if (opts.global && !opts.project) {\n scopes.push(\"global\");\n } else if (opts.project && !opts.global) {\n scopes.push(\"project\");\n } else {\n scopes.push(\"project\", \"global\");\n }\n\n // Load lock file data\n const lockEntries = await getTrackedMcpServers();\n\n interface EnrichedProfile {\n provider: string;\n providerName: string;\n serverName: string;\n channel: CleoChannel;\n scope: \"project\" | \"global\";\n command?: string;\n args: string[];\n env: Record<string, string>;\n version: string | null;\n source: string | null;\n sourceType: string | null;\n installedAt: string | null;\n updatedAt: string | null;\n health: CleoEntryHealth;\n }\n\n const entries: EnrichedProfile[] = [];\n const warnings: import(\"../../core/lafs.js\").LAFSWarning[] = [];\n\n for (const scope of scopes) {\n for (const provider of providers) {\n const providerEntries = await listMcpServers(provider, scope);\n for (const entry of providerEntries) {\n const channel = resolveChannelFromServerName(entry.name);\n if (!channel) continue;\n if (channelFilter && channel !== channelFilter) continue;\n\n const command = typeof entry.config.command === \"string\" ? entry.config.command : undefined;\n const args = Array.isArray(entry.config.args)\n ? entry.config.args.filter((value): value is string => typeof value === \"string\")\n : [];\n const env = typeof entry.config.env === \"object\" && entry.config.env !== null\n ? entry.config.env as Record<string, string>\n : {};\n\n const lockEntry = lockEntries[entry.name];\n const lockTracked = lockEntry !== undefined;\n const health = checkCleoEntryHealth(command, lockTracked);\n\n entries.push({\n provider: provider.id,\n providerName: provider.toolName,\n serverName: entry.name,\n channel,\n scope,\n command,\n args,\n env,\n version: lockEntry?.version ?? null,\n source: lockEntry?.source ?? null,\n sourceType: lockEntry?.sourceType ?? null,\n installedAt: lockEntry?.installedAt ?? null,\n updatedAt: lockEntry?.updatedAt ?? null,\n health,\n });\n\n if (health.status === \"broken\") {\n warnings.push({\n code: \"W_COMMAND_UNREACHABLE\",\n message: `${entry.name} command not reachable on ${provider.toolName} (${health.commandDetail})`,\n });\n } else if (health.status === \"degraded\") {\n warnings.push({\n code: \"W_NOT_TRACKED\",\n message: `${entry.name} on ${provider.toolName} is not tracked in lock file`,\n });\n }\n }\n }\n }\n\n const issueCount = entries.filter((e) => e.health.status !== \"healthy\").length;\n\n if (format === \"human\") {\n if (entries.length === 0) {\n console.log(pc.dim(\"No CLEO channel profiles found.\"));\n } else {\n console.log(pc.bold(\"CLEO Channel Profiles\"));\n console.log();\n\n // Column headers\n const header = [\n \"Channel\".padEnd(10),\n \"Version\".padEnd(10),\n \"Provider\".padEnd(22),\n \"Scope\".padEnd(9),\n \"Command\".padEnd(33),\n \"Status\".padEnd(10),\n \"Installed\".padEnd(12),\n ].join(\"\");\n console.log(` ${pc.dim(header)}`);\n console.log(` ${pc.dim(\"-\".repeat(106))}`);\n\n for (const entry of entries) {\n const commandStr = entry.command\n ? `${entry.command} ${entry.args.join(\" \")}`.slice(0, 31).padEnd(33)\n : pc.dim(\"-\").padEnd(33);\n const versionStr = (entry.version ?? \"-\").padEnd(10);\n const installedStr = entry.installedAt\n ? entry.installedAt.slice(0, 10).padEnd(12)\n : \"-\".padEnd(12);\n\n let statusStr: string;\n if (entry.health.status === \"healthy\") {\n statusStr = pc.green(\"healthy\".padEnd(10));\n } else if (entry.health.status === \"degraded\") {\n statusStr = pc.yellow(\"degraded\".padEnd(10));\n } else {\n statusStr = pc.red(\"broken\".padEnd(10));\n }\n\n console.log(\n ` ${entry.channel.padEnd(10)}${versionStr}${entry.providerName.padEnd(22)}${entry.scope.padEnd(9)}${commandStr}${statusStr}${installedStr}`,\n );\n }\n\n console.log();\n const summary = ` ${entries.length} profile${entries.length !== 1 ? \"s\" : \"\"}`;\n if (issueCount > 0) {\n console.log(`${summary} | ${pc.yellow(`${issueCount} issue${issueCount !== 1 ? \"s\" : \"\"}`)}`);\n console.log();\n console.log(\" Issues:\");\n for (const w of warnings) {\n console.log(` ${pc.yellow(\"!\")} ${w.message}`);\n }\n } else {\n console.log(summary);\n }\n }\n }\n\n if (format === \"json\") {\n outputSuccess(\n operation,\n mvi,\n {\n providers: providers.map((provider) => provider.id),\n scopes,\n channel: channelFilter,\n profiles: entries,\n count: entries.length,\n },\n undefined,\n undefined,\n warnings.length > 0 ? warnings : undefined,\n );\n }\n}\n\nexport async function executeCleoRepair(\n opts: CleoRepairOptions,\n operation: string,\n): Promise<void> {\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const providerIds = opts.provider.length > 0 ? opts.provider : undefined;\n\n const result = await reconcileCleoLock({\n providerIds,\n all: opts.all,\n global: opts.global,\n project: opts.project,\n prune: opts.prune,\n dryRun: opts.dryRun,\n });\n\n if (format === \"human\") {\n const prefix = opts.dryRun ? \"CLEO Lock Repair (dry run)\" : \"CLEO Lock Repair\";\n console.log(pc.bold(prefix));\n console.log();\n\n if (result.backfilled.length > 0) {\n for (const entry of result.backfilled) {\n const agents = entry.agents.join(\", \");\n const versionStr = entry.version ? `(${entry.version})` : \"\";\n console.log(\n ` ${pc.green(\"+\")} ${entry.serverName.padEnd(12)}${entry.channel.padEnd(10)}${agents.padEnd(22)}${entry.scope.padEnd(10)}${entry.source} ${pc.dim(versionStr)}`,\n );\n }\n }\n\n if (result.pruned.length > 0) {\n for (const name of result.pruned) {\n console.log(` ${pc.red(\"-\")} ${name} (removed from lock)`);\n }\n }\n\n if (result.backfilled.length === 0 && result.pruned.length === 0) {\n console.log(pc.dim(\" No changes needed. All CLEO entries are tracked.\"));\n }\n\n console.log();\n console.log(\n ` ${result.backfilled.length} backfilled | ${result.pruned.length} pruned | ${result.alreadyTracked} already tracked`,\n );\n\n if (result.errors.length > 0) {\n console.log();\n for (const err of result.errors) {\n console.log(` ${pc.red(\"!\")} ${err.message}`);\n }\n }\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n backfilled: result.backfilled,\n pruned: result.pruned,\n alreadyTracked: result.alreadyTracked,\n dryRun: opts.dryRun ?? false,\n errors: result.errors,\n });\n }\n}\n\nfunction buildInstallOptions(command: Command): Command {\n return command\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--version <tag>\", \"Tag/version for stable or beta\")\n .option(\"--command <command>\", \"Dev channel command\")\n .option(\"--arg <arg>\", \"Dev command arg (repeatable)\", collect, [])\n .option(\"--env <kv>\", \"Environment assignment KEY=value (repeatable)\", collect, [])\n .option(\"--cleo-dir <path>\", \"CLEO_DIR override for dev channel\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--interactive\", \"Guided interactive setup\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\");\n}\n\nexport function registerMcpCleoCommands(parent: Command): void {\n const cleo = parent\n .command(\"cleo\")\n .description(\"Manage CLEO MCP channel profiles\");\n\n buildInstallOptions(\n cleo\n .command(\"install\")\n .description(\"Install CLEO MCP profile by channel\"),\n ).action(async (opts: CleoInstallOptions) => {\n await executeCleoInstall(\"install\", opts, \"mcp.cleo.install\");\n });\n\n buildInstallOptions(\n cleo\n .command(\"update\")\n .description(\"Update CLEO MCP profile by channel\"),\n ).action(async (opts: CleoInstallOptions) => {\n await executeCleoInstall(\"update\", opts, \"mcp.cleo.update\");\n });\n\n cleo\n .command(\"uninstall\")\n .description(\"Uninstall CLEO MCP profile for a channel\")\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoUninstallOptions) => {\n await executeCleoUninstall(opts, \"mcp.cleo.uninstall\");\n });\n\n cleo\n .command(\"show\")\n .description(\"Show installed CLEO MCP channel profiles\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Inspect all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--channel <channel>\", \"Filter channel: stable|beta|dev\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoShowOptions) => {\n await executeCleoShow(opts, \"mcp.cleo.show\");\n });\n\n cleo\n .command(\"repair\")\n .description(\"Repair lock file by backfilling untracked CLEO entries\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Scan all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--prune\", \"Remove orphaned lock entries not in any config\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoRepairOptions) => {\n await executeCleoRepair(opts, \"mcp.cleo.repair\");\n });\n}\n\nexport function registerMcpCleoCompatibilityCommands(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update channel-managed MCP profile\")\n .argument(\"<name>\", \"Managed MCP profile name (cleo)\")\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--version <tag>\", \"Tag/version for stable or beta\")\n .option(\"--command <command>\", \"Dev channel command\")\n .option(\"--arg <arg>\", \"Dev command arg (repeatable)\", collect, [])\n .option(\"--env <kv>\", \"Environment assignment KEY=value (repeatable)\", collect, [])\n .option(\"--cleo-dir <path>\", \"CLEO_DIR override for dev channel\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string, opts: CleoInstallOptions) => {\n if (name !== \"cleo\") {\n emitJsonError(\"mcp.update\", \"standard\", ErrorCodes.INVALID_INPUT, \"Only managed profile 'cleo' is supported by mcp update.\", ErrorCategories.VALIDATION, { name });\n process.exit(1);\n }\n await executeCleoInstall(\"update\", opts, \"mcp.update\");\n });\n\n parent\n .command(\"uninstall\")\n .description(\"Uninstall channel-managed MCP profile\")\n .argument(\"<name>\", \"Managed MCP profile name (cleo)\")\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string, opts: CleoUninstallOptions) => {\n if (name !== \"cleo\") {\n emitJsonError(\"mcp.uninstall\", \"standard\", ErrorCodes.INVALID_INPUT, \"Only managed profile 'cleo' is supported by mcp uninstall.\", ErrorCategories.VALIDATION, { name });\n process.exit(1);\n }\n await executeCleoUninstall(opts, \"mcp.uninstall\");\n });\n\n parent\n .command(\"show\")\n .description(\"Show channel-managed MCP profile\")\n .argument(\"<name>\", \"Managed MCP profile name (cleo)\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Inspect all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--channel <channel>\", \"Filter channel: stable|beta|dev\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string, opts: CleoShowOptions) => {\n if (name !== \"cleo\") {\n emitJsonError(\"mcp.show\", \"standard\", ErrorCodes.INVALID_INPUT, \"Only managed profile 'cleo' is supported by mcp show.\", ErrorCategories.VALIDATION, { name });\n process.exit(1);\n }\n await executeCleoShow(opts, \"mcp.show\");\n });\n}\n\nexport function mapCompatibilityInstallOptions(\n opts: {\n channel?: string;\n provider?: string[];\n agent?: string[];\n all?: boolean;\n global?: boolean;\n version?: string;\n command?: string;\n arg?: string[];\n env?: string[];\n cleoDir?: string;\n dryRun?: boolean;\n yes?: boolean;\n interactive?: boolean;\n json?: boolean;\n human?: boolean;\n },\n): CleoInstallOptions {\n return {\n channel: opts.channel,\n provider: [...(opts.provider ?? []), ...(opts.agent ?? [])],\n all: opts.all,\n global: opts.global,\n version: opts.version,\n command: opts.command,\n arg: opts.arg ?? [],\n env: opts.env ?? [],\n cleoDir: opts.cleoDir,\n dryRun: opts.dryRun,\n yes: opts.yes,\n interactive: opts.interactive,\n json: opts.json,\n human: opts.human,\n };\n}\n\nexport function shouldUseCleoCompatibilityInstall(source: string, channel?: string): boolean {\n if (source.trim().toLowerCase() !== \"cleo\") return false;\n return typeof channel === \"string\" && channel.trim() !== \"\";\n}\n\nexport function registerCleoCommands(program: Command): void {\n const cleo = program\n .command(\"cleo\")\n .description(\"Manage CLEO channel profiles\");\n\n buildInstallOptions(\n cleo\n .command(\"install\")\n .description(\"Install CLEO profile by channel\"),\n ).action(async (opts: CleoInstallOptions) => {\n await executeCleoInstall(\"install\", opts, \"cleo.install\");\n });\n\n buildInstallOptions(\n cleo\n .command(\"update\")\n .description(\"Update CLEO profile by channel\"),\n ).action(async (opts: CleoInstallOptions) => {\n await executeCleoInstall(\"update\", opts, \"cleo.update\");\n });\n\n cleo\n .command(\"uninstall\")\n .description(\"Uninstall CLEO profile for a channel\")\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoUninstallOptions) => {\n await executeCleoUninstall(opts, \"cleo.uninstall\");\n });\n\n cleo\n .command(\"show\")\n .description(\"Show installed CLEO channel profiles\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Inspect all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--channel <channel>\", \"Filter channel: stable|beta|dev\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoShowOptions) => {\n await executeCleoShow(opts, \"cleo.show\");\n });\n\n cleo\n .command(\"repair\")\n .description(\"Repair lock file by backfilling untracked CLEO entries\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Scan all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--prune\", \"Remove orphaned lock entries not in any config\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoRepairOptions) => {\n await executeCleoRepair(opts, \"cleo.repair\");\n });\n}\n\nexport { resolveCleoServerName };\n","/**\n * mcp detect command - auto-detect installed MCP tools - LAFS-compliant with JSON-first output\n */\n\nimport { existsSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { listMcpServers, resolveConfigPath } from \"../../core/mcp/reader.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { json?: boolean; human?: boolean }) => {\n const operation = \"mcp.detect\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const providers = getInstalledProviders();\n\n const providersResult: Array<{\n id: string;\n configsFound: number;\n servers: string[];\n }> = [];\n let totalConfigs = 0;\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 const configsFound = \n (globalPath && existsSync(globalPath) ? 1 : 0) +\n (projectPath && existsSync(projectPath) ? 1 : 0);\n \n totalConfigs += configsFound;\n\n const allServers = [...globalEntries.map(e => e.name), ...projectEntries.map(e => e.name)];\n\n providersResult.push({\n id: provider.id,\n configsFound,\n servers: allServers,\n });\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n providers: providersResult,\n totalConfigs,\n });\n return;\n }\n\n // Human-readable output\n console.log(pc.bold(`\\n${providers.length} provider(s) with MCP support:\\n`));\n\n for (const provider of providersResult) {\n const globalPath = resolveConfigPath(providers.find(p => p.id === provider.id)!, \"global\");\n const projectPath = resolveConfigPath(providers.find(p => p.id === provider.id)!, \"project\");\n \n const hasGlobal = globalPath && existsSync(globalPath);\n const hasProject = projectPath && existsSync(projectPath);\n \n const globalIcon = hasGlobal ? pc.green(\"G\") : pc.dim(\"-\");\n const projectIcon = hasProject ? pc.green(\"P\") : pc.dim(\"-\");\n const serverList = provider.servers.length > 0 ? pc.dim(provider.servers.join(\", \")) : pc.dim(\"no servers\");\n\n console.log(` [${globalIcon}${projectIcon}] ${pc.bold(provider.id.padEnd(20))} ${serverList}`);\n }\n\n console.log(pc.dim(\"\\nG = global config, P = project config\"));\n console.log();\n });\n}\n","/**\n * mcp install command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { buildServerConfig, installMcpServerToAll } 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 { parseSource } from \"../../core/sources/parser.js\";\nimport type { Provider } from \"../../types.js\";\nimport {\n executeCleoInstall,\n mapCompatibilityInstallOptions,\n shouldUseCleoCompatibilityInstall,\n} from \"./cleo.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(\"--provider <id>\", \"Target provider ID (alias for --agent)\", (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(\"--channel <channel>\", \"Managed channel profile (stable|beta|dev)\")\n .option(\"--version <tag>\", \"Managed profile tag/version for stable or beta\")\n .option(\"--command <command>\", \"Managed dev profile command\")\n .option(\"--arg <arg>\", \"Managed dev command arg (repeatable)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--env <kv>\", \"Managed env assignment KEY=value (repeatable)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--cleo-dir <path>\", \"Managed dev CLEO_DIR override\")\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(\"--interactive\", \"Guided interactive setup for managed profiles\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (source: string, opts: {\n agent: string[];\n provider: string[];\n global?: boolean;\n name?: string;\n channel?: string;\n version?: string;\n command?: string;\n arg: string[];\n env: string[];\n cleoDir?: string;\n transport: string;\n header: string[];\n yes?: boolean;\n all?: boolean;\n interactive?: boolean;\n dryRun?: boolean;\n json?: boolean;\n human?: boolean;\n }) => {\n const operation = \"mcp.install\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n if (shouldUseCleoCompatibilityInstall(source, opts.channel)) {\n const cleoOpts = mapCompatibilityInstallOptions(opts);\n await executeCleoInstall(\"install\", cleoOpts, operation);\n return;\n }\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 if (opts.provider.length > 0) {\n providers = opts.provider\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 const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n if (opts.dryRun) {\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n installed: [{\n name: serverName,\n providers: providers.map((p) => p.id),\n config,\n }],\n dryRun: true,\n });\n } else {\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 }\n return;\n }\n\n if (format === \"human\") {\n console.log(pc.dim(`Installing \"${serverName}\" to ${providers.length} provider(s)...\\n`));\n }\n\n const results = await installMcpServerToAll(\n providers,\n serverName,\n config,\n scope,\n );\n\n const succeeded = results.filter((r) => r.success);\n const failed = results.filter((r) => !r.success);\n\n if (format === \"human\") {\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\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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n installed: succeeded.map((r) => ({\n name: serverName,\n providers: [r.provider.id],\n config,\n })),\n dryRun: false,\n });\n } else {\n console.log(pc.bold(`\\n${succeeded.length}/${results.length} providers configured.`));\n }\n });\n}\n","/**\n * mcp list command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { listMcpServers } from \"../../core/mcp/reader.js\";\nimport { resolvePreferredConfigScope } from \"../../core/paths/standard.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.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(\"--provider <id>\", \"Provider ID alias for --agent\")\n .option(\"-g, --global\", \"List global config\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { agent?: string; provider?: string; global?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"mcp.list\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const selectedProvider = opts.provider ?? opts.agent;\n\n const providers = selectedProvider\n ? [getProvider(selectedProvider)].filter((p): p is NonNullable<typeof p> => p !== undefined)\n : getInstalledProviders();\n\n if (selectedProvider && providers.length === 0) {\n const message = `Provider not found: ${selectedProvider}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n provider: selectedProvider,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const allEntries: Array<{\n name: string;\n command?: string;\n scope: \"global\" | \"project\";\n }> = [];\n\n for (const provider of providers) {\n const scope = resolvePreferredConfigScope(provider, opts.global);\n\n const entries = await listMcpServers(provider, scope);\n for (const entry of entries) {\n allEntries.push({\n name: entry.name,\n command: typeof entry.config.command === \"string\" ? entry.config.command : undefined,\n scope,\n });\n }\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n servers: allEntries,\n count: allEntries.length,\n scope: opts.global ? \"global\" : selectedProvider ? `agent:${selectedProvider}` : \"project\",\n });\n return;\n }\n\n // Human-readable output\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 const scopeIndicator = entry.scope === \"global\" ? pc.dim(\"[G] \") : pc.dim(\"[P] \");\n console.log(` ${scopeIndicator}${pc.bold(entry.name.padEnd(25))} ${entry.command ? pc.dim(entry.command) : \"\"}`);\n }\n\n console.log();\n console.log(pc.dim(\"G = global config, P = project config\"));\n console.log();\n });\n}\n","/**\n * mcp remove command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { removeMcpFromLock } from \"../../core/mcp/lock.js\";\nimport { removeMcpServer } from \"../../core/mcp/reader.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.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(\"--provider <id>\", \"Target provider ID (alias for --agent)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Remove from global config\")\n .option(\"--all\", \"Remove from all detected agents\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string, opts: {\n agent: string[];\n provider: string[];\n global?: boolean;\n all?: boolean;\n json?: boolean;\n human?: boolean;\n }) => {\n const operation = \"mcp.remove\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\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 if (opts.provider.length > 0) {\n providers = opts.provider\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 const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const removed: string[] = [];\n const notFound: string[] = [];\n\n for (const provider of providers) {\n const success = await removeMcpServer(provider, name, scope);\n if (success) {\n removed.push(provider.id);\n if (format === \"human\") {\n console.log(` ${pc.green(\"✓\")} Removed from ${provider.toolName}`);\n }\n } else {\n notFound.push(provider.id);\n }\n }\n\n if (removed.length > 0) {\n await removeMcpFromLock(name);\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n removed,\n providers: removed,\n notFound: notFound.length > 0 ? notFound : undefined,\n });\n } else {\n if (removed.length > 0) {\n console.log(pc.green(`\\n✓ Removed \"${name}\" from ${removed.length} provider(s).`));\n } else {\n console.log(pc.yellow(`Server \"${name}\" not found in any provider config.`));\n }\n }\n });\n}\n","/**\n * MCP command group registration\n */\n\nimport type { Command } from \"commander\";\nimport { registerMcpCleoCommands, registerMcpCleoCompatibilityCommands } from \"./cleo.js\";\nimport { registerMcpDetect } from \"./detect.js\";\nimport { registerMcpInstall } from \"./install.js\";\nimport { registerMcpList } from \"./list.js\";\nimport { registerMcpRemove } from \"./remove.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 registerMcpCleoCommands(mcp);\n registerMcpCleoCompatibilityCommands(mcp);\n}\n","/**\n * providers list|detect|show commands - LAFS-compliant with JSON-first output\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { isHuman } from \"../core/logger.js\";\nimport { detectAllProviders, detectProjectProviders } from \"../core/registry/detection.js\";\nimport {\n getAllProviders,\n getProvider,\n getProviderCount,\n getProvidersByPriority,\n getRegistryVersion,\n} from \"../core/registry/providers.js\";\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\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--tier <tier>\", \"Filter by priority tier (high, medium, low)\")\n .action(async (opts: { json?: boolean; human?: boolean; tier?: string }) => {\n const operation = \"providers.list\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n const all = opts.tier\n ? getProvidersByPriority(opts.tier as \"high\" | \"medium\" | \"low\")\n : getAllProviders();\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n providers: all,\n count: all.length,\n version: getRegistryVersion(),\n tier: opts.tier || null,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--project\", \"Include project-level detection\")\n .action(async (opts: { json?: boolean; human?: boolean; project?: boolean }) => {\n const operation = \"providers.detect\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n const results = opts.project\n ? detectProjectProviders(process.cwd())\n : detectAllProviders();\n\n const installed = results.filter((r) => r.installed);\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n installed: installed.map((r) => ({\n id: r.provider.id,\n toolName: r.provider.toolName,\n methods: r.methods,\n projectDetected: r.projectDetected,\n })),\n notInstalled: results.filter((r) => !r.installed).map((r) => r.provider.id),\n count: {\n installed: installed.length,\n total: results.length,\n },\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (id: string, opts: { json?: boolean; human?: boolean }) => {\n const operation = \"providers.show\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n const provider = getProvider(id);\n\n if (!provider) {\n const message = `Provider not found: ${id}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, \"E_PROVIDER_NOT_FOUND\", message, \"NOT_FOUND\", {\n id,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n provider,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\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\nfunction buildEnvelope<T>(\n operation: string,\n mvi: import(\"../core/lafs.js\").MVILevel,\n result: T | null,\n error: LAFSErrorShape | null,\n) {\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: import(\"../core/lafs.js\").MVILevel,\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 install command - LAFS-compliant with JSON-first output\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitError,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n type MVILevel,\n} from \"../../core/lafs.js\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport type { MarketplaceResult } from \"../../core/marketplace/types.js\";\nimport { formatNetworkError } from \"../../core/network/fetch.js\";\nimport { buildSkillSubPathCandidates } from \"../../core/paths/standard.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport * as catalog from \"../../core/skills/catalog.js\";\nimport { discoverSkill } from \"../../core/skills/discovery.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { isMarketplaceScoped, parseSource } from \"../../core/sources/parser.js\";\nimport type { Provider, SourceType } from \"../../types.js\";\n\ninterface InstallResultItem {\n name: string;\n scopedName: string;\n canonicalPath: string;\n providers: string[];\n}\n\ninterface FailedResultItem {\n name: string;\n error: string;\n}\n\ninterface InstallSummary {\n installed: InstallResultItem[];\n failed: FailedResultItem[];\n count: {\n installed: number;\n failed: number;\n total: number;\n };\n}\n\nexport function registerSkillsInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install a skill from GitHub, URL, marketplace, or registered skill library\")\n .argument(\"[source]\", \"Skill source (GitHub URL, owner/repo, @author/name, skill-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 .option(\"--profile <name>\", \"Install a skill library profile (minimal, core, recommended, full)\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (source: string | undefined, opts: {\n agent: string[];\n global?: boolean;\n yes?: boolean;\n all?: boolean;\n profile?: string;\n json?: boolean;\n human?: boolean;\n }) => {\n const operation = \"skills.install\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\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 const message = \"No target providers found. Use --agent or --all.\";\n if (format === \"json\") {\n emitError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n\n // Handle --profile: install an entire skill library profile\n if (opts.profile) {\n await handleProfileInstall(opts.profile, providers, opts.global ?? false, format, operation, mvi);\n return;\n }\n\n // Require source when not using --profile\n if (!source) {\n const message = \"Missing required argument: source\";\n if (format === \"json\") {\n emitError(operation, mvi, ErrorCodes.INVALID_INPUT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n console.log(pc.dim(\"Usage: caamp skills install <source> or caamp skills install --profile <name>\"));\n process.exit(1);\n }\n\n if (format === \"human\") {\n console.log(pc.dim(`Installing to ${providers.length} provider(s)...`));\n }\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 const sourceResult = await handleMarketplaceSource(\n source,\n providers,\n opts.global ?? false,\n format,\n operation,\n mvi,\n );\n\n if (sourceResult.success) {\n localPath = sourceResult.localPath;\n cleanup = sourceResult.cleanup;\n skillName = sourceResult.skillName;\n sourceValue = sourceResult.sourceValue;\n sourceType = sourceResult.sourceType;\n } else {\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 const message = `Failed to clone GitHub repository: ${formatNetworkError(error)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.NETWORK_ERROR, message, ErrorCategories.TRANSIENT);\n }\n console.error(pc.red(message));\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 const message = `Failed to clone GitLab repository: ${formatNetworkError(error)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.NETWORK_ERROR, message, ErrorCategories.TRANSIENT);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n } else if (parsed.type === \"local\") {\n localPath = parsed.value;\n // Read SKILL.md for the authoritative name\n const discovered = await discoverSkill(localPath);\n if (discovered) {\n skillName = discovered.name;\n }\n } else if (parsed.type === \"package\") {\n // Check registered skill library for this skill name\n if (!catalog.isCatalogAvailable()) {\n const message = \"No skill library registered. Register one with registerSkillLibraryFromPath() or set CAAMP_SKILL_LIBRARY env var.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INVALID_INPUT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n const catalogSkill = catalog.getSkill(parsed.inferredName);\n if (catalogSkill) {\n localPath = catalog.getSkillDir(catalogSkill.name);\n skillName = catalogSkill.name;\n sourceValue = `library:${catalogSkill.name}`;\n sourceType = \"library\";\n if (format === \"human\") {\n console.log(` Found in catalog: ${pc.bold(catalogSkill.name)} v${catalogSkill.version} (${pc.dim(catalogSkill.category)})`);\n }\n } else {\n const message = `Skill not found in catalog: ${parsed.inferredName}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.SKILL_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n availableSkills: catalog.listSkills(),\n });\n }\n console.error(pc.red(message));\n console.log(pc.dim(\"Available skills: \" + catalog.listSkills().join(\", \")));\n process.exit(1);\n }\n } else {\n const message = `Unsupported source type: ${parsed.type}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INVALID_FORMAT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n }\n\n try {\n if (!localPath) {\n const message = \"No local skill path resolved for installation\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INTERNAL_ERROR, message, ErrorCategories.INTERNAL);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n\n const result = await installSkill(\n localPath,\n skillName!,\n providers,\n opts.global ?? false,\n );\n\n if (result.success) {\n // Record in lock file\n const isGlobal = (sourceType === \"library\" || sourceType === \"package\") ? true : (opts.global ?? false);\n await recordSkillInstall(\n skillName!,\n sourceValue,\n sourceValue,\n sourceType,\n result.linkedAgents,\n result.canonicalPath,\n isGlobal,\n );\n\n const installedItem: InstallResultItem = {\n name: skillName!,\n scopedName: sourceValue,\n canonicalPath: result.canonicalPath,\n providers: result.linkedAgents,\n };\n\n const summary: InstallSummary = {\n installed: [installedItem],\n failed: [],\n count: {\n installed: 1,\n failed: 0,\n total: 1,\n },\n };\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, summary);\n } else {\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 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 }\n } else {\n const summary: InstallSummary = {\n installed: [],\n failed: [{\n name: skillName!,\n error: result.errors.join(\", \"),\n }],\n count: {\n installed: 0,\n failed: 1,\n total: 1,\n },\n };\n\n if (format === \"json\") {\n const envelope = buildEnvelope(operation, mvi, summary, {\n code: ErrorCodes.INSTALL_FAILED,\n message: result.errors.join(\", \"),\n category: ErrorCategories.INTERNAL,\n retryable: false,\n retryAfterMs: null,\n details: { skillName, sourceValue },\n });\n console.error(JSON.stringify(envelope, null, 2));\n } else {\n console.log(pc.yellow(`\\n✗ Failed to install ${pc.bold(skillName)}`));\n console.log(pc.yellow(\"Errors:\"));\n for (const err of result.errors) {\n console.log(` ${pc.yellow(\"!\")} ${err}`);\n }\n }\n process.exit(1);\n }\n } finally {\n if (cleanup) await cleanup();\n }\n });\n}\n\nasync function handleProfileInstall(\n profileName: string,\n providers: Provider[],\n isGlobal: boolean,\n format: \"json\" | \"human\",\n operation: string,\n mvi: MVILevel,\n): Promise<void> {\n if (!catalog.isCatalogAvailable()) {\n const message = \"No skill library registered. Register one with registerSkillLibraryFromPath() or set CAAMP_SKILL_LIBRARY env var.\";\n if (format === \"json\") {\n emitError(operation, mvi, ErrorCodes.INVALID_INPUT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n\n const profileSkills = catalog.resolveProfile(profileName);\n if (profileSkills.length === 0) {\n const message = `Profile not found: ${profileName}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.SKILL_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n availableProfiles: catalog.listProfiles(),\n });\n }\n console.error(pc.red(message));\n const available = catalog.listProfiles();\n if (available.length > 0) {\n console.log(pc.dim(\"Available profiles: \" + available.join(\", \")));\n }\n process.exit(1);\n }\n\n if (format === \"human\") {\n console.log(`Installing profile ${pc.bold(profileName)} (${profileSkills.length} skill(s))...`);\n console.log(pc.dim(`Target: ${providers.length} provider(s)`));\n }\n\n const installed: InstallResultItem[] = [];\n const failed: FailedResultItem[] = [];\n\n for (const name of profileSkills) {\n const skillDir = catalog.getSkillDir(name);\n try {\n const result = await installSkill(\n skillDir,\n name,\n providers,\n isGlobal,\n );\n\n if (result.success) {\n if (format === \"human\") {\n console.log(pc.green(` + ${name}`));\n }\n await recordSkillInstall(\n name,\n `library:${name}`,\n `library:${name}`,\n \"library\",\n result.linkedAgents,\n result.canonicalPath,\n true,\n );\n installed.push({\n name,\n scopedName: `library:${name}`,\n canonicalPath: result.canonicalPath,\n providers: result.linkedAgents,\n });\n } else {\n if (format === \"human\") {\n console.log(pc.yellow(` ! ${name}: ${result.errors.join(\", \")}`));\n }\n failed.push({\n name,\n error: result.errors.join(\", \"),\n });\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n if (format === \"human\") {\n console.log(pc.red(` x ${name}: ${errorMsg}`));\n }\n failed.push({\n name,\n error: errorMsg,\n });\n }\n }\n\n const summary: InstallSummary = {\n installed,\n failed,\n count: {\n installed: installed.length,\n failed: failed.length,\n total: profileSkills.length,\n },\n };\n\n if (format === \"json\") {\n if (failed.length > 0) {\n const envelope = buildEnvelope(operation, mvi, summary, {\n code: ErrorCodes.INSTALL_FAILED,\n message: `${failed.length} skill(s) failed to install`,\n category: ErrorCategories.INTERNAL,\n retryable: false,\n retryAfterMs: null,\n details: { failed: failed.map(f => f.name) },\n });\n console.error(JSON.stringify(envelope, null, 2));\n process.exit(1);\n } else {\n outputSuccess(operation, mvi, summary);\n }\n } else {\n console.log(`\\n${pc.green(`${installed.length} installed`)}, ${failed.length > 0 ? pc.yellow(`${failed.length} failed`) : \"0 failed\"}`);\n if (failed.length > 0) {\n process.exit(1);\n }\n }\n}\n\ninterface MarketplaceSourceSuccess {\n success: true;\n localPath: string;\n cleanup: () => Promise<void>;\n skillName: string;\n sourceValue: string;\n sourceType: SourceType;\n}\n\ninterface MarketplaceSourceError {\n success: false;\n}\n\ntype MarketplaceSourceResult = MarketplaceSourceSuccess | MarketplaceSourceError;\n\nasync function handleMarketplaceSource(\n source: string,\n _providers: Provider[],\n _isGlobal: boolean,\n format: \"json\" | \"human\",\n operation: string,\n mvi: MVILevel,\n): Promise<MarketplaceSourceResult> {\n if (format === \"human\") {\n console.log(pc.dim(`Searching marketplace for ${source}...`));\n }\n\n const client = new MarketplaceClient();\n let skill: import(\"../../core/marketplace/types.js\").MarketplaceResult | null;\n\n try {\n skill = await client.getSkill(source);\n } catch (error) {\n const message = `Marketplace lookup failed: ${formatNetworkError(error)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.NETWORK_ERROR, message, ErrorCategories.TRANSIENT);\n }\n console.error(pc.red(message));\n return { success: false };\n }\n\n if (!skill) {\n const message = `Skill not found: ${source}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.SKILL_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n }\n console.error(pc.red(message));\n return { success: false };\n }\n\n if (format === \"human\") {\n console.log(` Found: ${pc.bold(skill.name)} by ${skill.author} (${pc.dim(skill.repoFullName)})`);\n }\n\n const parsed = parseSource(skill.githubUrl);\n if (parsed.type !== \"github\" || !parsed.owner || !parsed.repo) {\n const message = \"Could not resolve GitHub source\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INVALID_FORMAT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n return { success: false };\n }\n\n try {\n const subPathCandidates = buildSkillSubPathCandidates(skill.path, parsed.path);\n let cloneError: unknown;\n let cloned = false;\n let localPath: string | undefined;\n let cleanup: (() => Promise<void>) | undefined;\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 return {\n success: true,\n localPath: localPath!,\n cleanup: cleanup!,\n skillName: skill.name,\n sourceValue: skill.githubUrl,\n sourceType: parsed.type,\n };\n } catch (error) {\n const message = `Failed to fetch source repository: ${formatNetworkError(error)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.NETWORK_ERROR, message, ErrorCategories.TRANSIENT);\n }\n console.error(pc.red(message));\n return { success: false };\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 { fetchWithTimeout } from \"../network/fetch.js\";\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 fetchWithTimeout(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 fetchWithTimeout(`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\";\nimport { fetchWithTimeout } from \"../network/fetch.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 fetchWithTimeout(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n","/**\n * skills remove command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { listCanonicalSkills, removeSkill } from \"../../core/skills/installer.js\";\nimport { removeSkillFromLock } from \"../../core/skills/lock.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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string | undefined, opts: { global?: boolean; yes?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"skills.remove\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const providers = getInstalledProviders();\n\n if (name) {\n const result = await removeSkill(name, providers, opts.global ?? false);\n\n const removed = result.removed;\n const count = {\n removed: removed.length,\n total: providers.length,\n };\n\n if (format === \"json\") {\n if (removed.length > 0) {\n await removeSkillFromLock(name);\n }\n\n const errors = result.errors.length > 0\n ? result.errors.map((err) => ({ message: err }))\n : undefined;\n\n outputSuccess(operation, mvi, {\n removed,\n providers: providers.map((p) => p.id),\n count,\n ...(errors && { errors }),\n });\n return;\n }\n\n // Human-readable output\n if (removed.length > 0) {\n console.log(pc.green(`✓ Removed ${pc.bold(name)} from: ${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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n removed: [],\n providers: [],\n count: { removed: 0, total: 0 },\n });\n } else {\n console.log(pc.dim(\"No skills installed.\"));\n }\n return;\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n removed: [],\n providers: [],\n count: { removed: 0, total: 0 },\n available: skills,\n });\n return;\n }\n\n // Human-readable output\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 - LAFS-compliant with JSON-first output\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { resolveProviderSkillsDir } from \"../../core/paths/standard.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { discoverSkillsMulti } from \"../../core/skills/discovery.js\";\n\ninterface SkillsListOptions {\n global?: boolean;\n agent?: string;\n json?: boolean;\n human?: boolean;\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\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: SkillsListOptions) => {\n const operation = \"skills.list\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n let dirs: string[] = [];\n\n if (opts.agent) {\n const provider = getProvider(opts.agent);\n if (!provider) {\n const message = `Provider not found: ${opts.agent}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, \"E_PROVIDER_NOT_FOUND\", message, \"NOT_FOUND\", {\n agent: opts.agent,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n dirs = opts.global\n ? [resolveProviderSkillsDir(provider, \"global\")]\n : [resolveProviderSkillsDir(provider, \"project\")];\n } else if (opts.global) {\n const providers = getInstalledProviders();\n dirs = providers.map((p) => resolveProviderSkillsDir(p, \"global\")).filter(Boolean);\n } else {\n const providers = getInstalledProviders();\n dirs = providers\n .map((p) => resolveProviderSkillsDir(p, \"project\"))\n .filter(Boolean);\n }\n\n const skills = await discoverSkillsMulti(dirs);\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n skills,\n count: skills.length,\n scope: opts.global ? \"global\" : opts.agent ? `agent:${opts.agent}` : \"project\",\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\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 skills.forEach((skill, index) => {\n const num = (index + 1).toString().padStart(2);\n console.log(` ${pc.cyan(num)}. ${pc.bold(skill.name.padEnd(30))} ${pc.dim(skill.metadata?.description ?? \"\")}`);\n });\n\n console.log(pc.dim(`\\nInstall with: caamp skills install <name>`));\n console.log(pc.dim(`Remove with: caamp skills remove <name>`));\n });\n}\n\nfunction buildEnvelope<T>(\n operation: string,\n mvi: import(\"../../core/lafs.js\").MVILevel,\n result: T | null,\n error: LAFSErrorShape | null,\n) {\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: import(\"../../core/lafs.js\").MVILevel,\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 find command - marketplace search + recommendation mode\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport {\n type LAFSErrorCategory,\n resolveOutputFormat,\n} from \"@cleocode/lafs-protocol\";\nimport type { MVILevel } from \"../../core/lafs.js\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport type { MarketplaceResult } from \"../../core/marketplace/types.js\";\nimport { formatNetworkError } from \"../../core/network/fetch.js\";\nimport {\n type RankedSkillRecommendation,\n RECOMMENDATION_ERROR_CODES,\n tokenizeCriteriaValue,\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\nimport type { LAFSErrorShape } from \"../../core/lafs.js\";\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: MVILevel = details ? \"full\" : \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\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 emitJsonError(operation, mvi, \"E_SEARCH_FAILED\", message, \"TRANSIENT\", {\n query,\n limit,\n });\n } else {\n console.error(pc.red(`Marketplace search failed: ${message}`));\n }\n process.exit(1);\n }\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n query,\n results,\n count: results.length,\n limit,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n if (results.length === 0) {\n console.log(pc.yellow(\"No results found.\"));\n return;\n }\n\n console.log(pc.dim(`Found ${results.length} result(s) for \"${query}\":\\n`));\n\n results.forEach((skill, index) => {\n const num = (index + 1).toString().padStart(2);\n const stars = skill.stars > 0 ? pc.yellow(`★ ${formatStars(skill.stars)}`) : \"\";\n console.log(` ${pc.cyan(num)}. ${pc.bold(skill.scopedName)} ${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 <name>\"));\n console.log(pc.dim(\"Or select by number: caamp skills install <n>\"));\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: MVILevel, 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: MVILevel,\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 - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { checkSkillUpdate, getTrackedSkills } 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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { json?: boolean; human?: boolean }) => {\n const operation = \"skills.check\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n skills: [],\n outdated: 0,\n total: 0,\n });\n } else {\n console.log(pc.dim(\"No tracked skills.\"));\n }\n return;\n }\n\n if (format === \"human\") {\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...\\n`));\n }\n\n const skillResults = [];\n let updatesAvailable = 0;\n\n for (const [name, entry] of entries) {\n const update = await checkSkillUpdate(name);\n const hasUpdate = update.hasUpdate ?? false;\n\n if (hasUpdate) {\n updatesAvailable++;\n }\n\n skillResults.push({\n name,\n currentVersion: update.currentVersion ?? entry.version ?? \"unknown\",\n latestVersion: update.latestVersion ?? \"unknown\",\n hasUpdate,\n source: entry.source,\n agents: entry.agents,\n });\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n skills: skillResults.map((s) => ({\n name: s.name,\n currentVersion: s.currentVersion,\n latestVersion: s.latestVersion,\n hasUpdate: s.hasUpdate,\n })),\n outdated: updatesAvailable,\n total: entries.length,\n });\n return;\n }\n\n // Human-readable output\n for (const r of skillResults) {\n let statusLabel: string;\n if (r.hasUpdate) {\n statusLabel = pc.yellow(\"update available\");\n } else if (r.currentVersion !== \"unknown\") {\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 !== \"unknown\" || r.latestVersion !== \"unknown\") {\n const current = r.currentVersion !== \"unknown\" ? r.currentVersion.slice(0, 12) : \"?\";\n const latest = r.latestVersion !== \"unknown\" ? 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.source}`)}`);\n console.log(` ${pc.dim(`agents: ${r.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 - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { checkSkillUpdate, getTrackedSkills, recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { parseSource } from \"../../core/sources/parser.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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { yes?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"skills.update\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated: [],\n failed: [],\n skipped: [],\n count: { updated: 0, failed: 0, skipped: 0 },\n });\n } else {\n console.log(pc.dim(\"No tracked skills to update.\"));\n }\n return;\n }\n\n if (format === \"human\") {\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...`));\n }\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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated: [],\n failed: [],\n skipped: [],\n count: { updated: 0, failed: 0, skipped: 0 },\n });\n } else {\n console.log(pc.green(\"\\nAll skills are up to date.\"));\n }\n return;\n }\n\n if (format === \"human\") {\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\n // Confirm unless --yes\n if (!opts.yes && format === \"human\") {\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 if (format === \"human\") {\n console.log();\n }\n\n // Track results for JSON output\n const updated: string[] = [];\n const failed: Array<{ name: string; error: string }> = [];\n const skipped: string[] = [];\n\n // Update each outdated skill\n for (const skill of outdated) {\n const entry = tracked[skill.name];\n if (!entry) continue;\n\n if (format === \"human\") {\n console.log(pc.dim(`Updating ${pc.bold(skill.name)}...`));\n }\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 if (format === \"human\") {\n console.log(pc.yellow(` Skipped ${skill.name}: source type \"${parsed.type}\" does not support auto-update`));\n }\n skipped.push(skill.name);\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 if (format === \"human\") {\n console.log(pc.yellow(` Skipped ${skill.name}: no valid providers found`));\n }\n skipped.push(skill.name);\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 if (format === \"human\") {\n console.log(pc.green(` Updated ${pc.bold(skill.name)}`));\n }\n updated.push(skill.name);\n } else {\n if (format === \"human\") {\n console.log(pc.red(` Failed to update ${skill.name}: no agents linked`));\n }\n failed.push({ name: skill.name, error: \"no agents linked\" });\n }\n\n if (installResult.errors.length > 0 && format === \"human\") {\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 if (format === \"human\") {\n console.log(pc.red(` Failed to update ${skill.name}: ${msg}`));\n }\n failed.push({ name: skill.name, error: msg });\n }\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated,\n failed,\n skipped,\n count: {\n updated: updated.length,\n failed: failed.length,\n skipped: skipped.length,\n },\n });\n return;\n }\n\n // Human-readable output\n console.log();\n if (updated.length > 0) {\n console.log(pc.green(`Updated ${updated.length} skill(s).`));\n }\n if (failed.length > 0) {\n console.log(pc.red(`Failed to update ${failed.length} skill(s).`));\n }\n });\n}\n","/**\n * skills init command - scaffold a new skill - LAFS-compliant with JSON-first output\n */\n\nimport { existsSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string | undefined, opts: { dir: string; json?: boolean; human?: boolean }) => {\n const operation = \"skills.init\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const skillName = name ?? \"my-skill\";\n const skillDir = join(opts.dir, skillName);\n\n if (existsSync(skillDir)) {\n const message = `Directory already exists: ${skillDir}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INVALID_CONSTRAINT, message, ErrorCategories.CONFLICT, {\n path: skillDir,\n });\n } else {\n console.error(pc.red(message));\n }\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 const result = {\n name: skillName,\n directory: skillDir,\n template: \"SKILL.md\",\n created: true,\n };\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, result);\n return;\n }\n\n // Human-readable output\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 - LAFS-compliant with JSON-first output\n */\n\nimport { existsSync, statSync } from \"node:fs\";\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n type LAFSErrorShape,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { scanDirectory, scanFile, toSarif } from \"../../core/skills/audit/scanner.js\";\nimport type { AuditResult } from \"../../types.js\";\n\ninterface SkillsAuditOptions {\n sarif?: boolean;\n json?: boolean;\n human?: boolean;\n}\n\ninterface AuditFileResult {\n path: string;\n score: number;\n findings: Array<{\n level: \"critical\" | \"high\" | \"medium\" | \"low\";\n code: string;\n message: string;\n line?: number;\n }>;\n}\n\ninterface AuditSummary {\n scanned: number;\n findings: number;\n files: AuditFileResult[];\n}\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 (raw SARIF, not LAFS envelope)\")\n .option(\"--json\", \"Output as JSON (LAFS envelope)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (path: string, opts: SkillsAuditOptions) => {\n const operation = \"skills.audit\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n // Check if path exists\n if (!existsSync(path)) {\n const message = `Path not found: ${path}`;\n \n // Check if --sarif was explicitly requested\n if (opts.sarif) {\n // For SARIF mode on error, output minimal SARIF with error\n console.error(JSON.stringify({\n $schema: \"https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json\",\n version: \"2.1.0\",\n runs: [{\n tool: { driver: { name: \"caamp-skills-audit\" } },\n invocations: [{\n executionSuccessful: false,\n exitCode: 1,\n exitCodeDescription: message,\n }],\n results: [],\n }],\n }, null, 2));\n } else {\n // LAFS envelope error\n emitJsonError(operation, mvi, ErrorCodes.FILE_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n path,\n });\n }\n process.exit(1);\n }\n\n // Resolve output format (SARIF is a special case - outputs raw SARIF, not LAFS envelope)\n let format: \"json\" | \"human\" | \"sarif\";\n try {\n if (opts.sarif) {\n // SARIF is handled separately - it outputs raw SARIF format\n format = \"sarif\";\n } else {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n // Perform the scan\n const stat = statSync(path);\n let results: AuditResult[];\n\n try {\n if (stat.isFile()) {\n results = [await scanFile(path)];\n } else {\n results = await scanDirectory(path);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n \n if (format === \"sarif\") {\n console.error(JSON.stringify({\n $schema: \"https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json\",\n version: \"2.1.0\",\n runs: [{\n tool: { driver: { name: \"caamp-skills-audit\" } },\n invocations: [{\n executionSuccessful: false,\n exitCode: 1,\n exitCodeDescription: message,\n }],\n results: [],\n }],\n }, null, 2));\n } else {\n emitJsonError(operation, mvi, ErrorCodes.AUDIT_FAILED, message, ErrorCategories.INTERNAL, {\n path,\n });\n }\n process.exit(1);\n }\n\n // Handle no results case\n if (results.length === 0) {\n if (format === \"sarif\") {\n console.log(JSON.stringify(toSarif([]), null, 2));\n return;\n }\n\n if (format === \"json\") {\n const summary: AuditSummary = {\n scanned: 0,\n findings: 0,\n files: [],\n };\n outputSuccess(operation, mvi, summary);\n return;\n }\n\n // Human-readable\n console.log(pc.dim(\"No SKILL.md files found to scan.\"));\n return;\n }\n\n // Calculate summary\n const summary: AuditSummary = {\n scanned: results.length,\n findings: results.reduce((acc, r) => acc + r.findings.length, 0),\n files: results.map((r) => ({\n path: r.file,\n score: r.score,\n findings: r.findings.map((f) => ({\n level: f.rule.severity as \"critical\" | \"high\" | \"medium\" | \"low\",\n code: f.rule.id,\n message: `${f.rule.name}: ${f.rule.description}`,\n line: f.line,\n })),\n })),\n };\n\n // Check if all passed\n const allPassed = results.every((r) => r.passed);\n\n // SARIF output (raw SARIF format, not LAFS envelope)\n if (format === \"sarif\") {\n console.log(JSON.stringify(toSarif(results), null, 2));\n if (!allPassed) {\n process.exit(1);\n }\n return;\n }\n\n // LAFS JSON output\n if (format === \"json\") {\n outputSuccess(operation, mvi, summary);\n if (!allPassed) {\n process.exit(1);\n }\n return;\n }\n\n // Human-readable output\n let totalFindings = 0;\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\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 - LAFS-compliant with JSON-first output\n */\n\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { validateSkill } from \"../../core/skills/validator.js\";\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\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (path: string, opts: { json?: boolean; human?: boolean }) => {\n const operation = \"skills.validate\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n let result;\n try {\n result = await validateSkill(path);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.FILE_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n path,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n valid: result.valid,\n file: path,\n issues: result.issues.map((issue) => ({\n level: issue.level === \"error\" ? \"error\" : \"warn\",\n field: issue.field,\n message: issue.message,\n })),\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n } else {\n // Human-readable output\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\n if (!result.valid) {\n process.exit(1);\n }\n });\n}\n","/**\n * Skills command group registration\n */\n\nimport type { 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"],"mappings":"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","names":["program","randomUUID","randomUUID","emitError","program","existsSync","join","pc","existsSync","join","pc","program","pc","pc","pc","pc","pc","pc","program","pc","pc","program","existsSync","pc","existsSync","pc","pc","pc","pc","pc","pc","pc","program","randomUUID","resolveOutputFormat","pc","program","resolveOutputFormat","emitJsonError","buildEnvelope","pc","randomUUID","existsSync","pc","join","join","simpleGit","mkdtemp","rm","tmpdir","join","mkdtemp","join","tmpdir","simpleGit","rm","emitError","pc","existsSync","pc","pc","randomUUID","resolveOutputFormat","pc","resolveOutputFormat","emitJsonError","pc","buildEnvelope","randomUUID","randomUUID","resolveOutputFormat","pc","resolveOutputFormat","emitJsonError","pc","buildEnvelope","randomUUID","pc","pc","pc","pc","existsSync","join","pc","join","existsSync","pc","existsSync","pc","existsSync","summary","pc","resolveOutputFormat","pc","resolveOutputFormat","pc","program"]}
1
+ {"version":3,"sources":["../src/cli.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","../src/commands/config.ts","../src/core/lafs.ts","../src/commands/doctor.ts","../src/core/version.ts","../src/commands/instructions/inject.ts","../src/commands/instructions/check.ts","../src/commands/instructions/update.ts","../src/commands/instructions/index.ts","../src/commands/mcp/cleo.ts","../src/commands/mcp/detect.ts","../src/commands/mcp/install.ts","../src/commands/mcp/list.ts","../src/commands/mcp/remove.ts","../src/commands/mcp/index.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"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * CAAMP CLI - Central AI Agent Managed Packages\n */\n\nimport { Command } from \"commander\";\nimport { registerAdvancedCommands } from \"./commands/advanced/index.js\";\nimport { registerConfigCommand } from \"./commands/config.js\";\nimport { registerDoctorCommand } from \"./commands/doctor.js\";\nimport { registerInstructionsCommands } from \"./commands/instructions/index.js\";\nimport { registerCleoCommands } from \"./commands/mcp/cleo.js\";\nimport { registerMcpCommands } from \"./commands/mcp/index.js\";\nimport { registerProvidersCommand } from \"./commands/providers.js\";\nimport { registerSkillsCommands } from \"./commands/skills/index.js\";\nimport { isVerbose, setHuman, setQuiet, setVerbose } from \"./core/logger.js\";\nimport { getCaampVersion } from \"./core/version.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(getCaampVersion())\n .option(\"-v, --verbose\", \"Show debug output\")\n .option(\"-q, --quiet\", \"Suppress non-error output\")\n .option(\"--human\", \"Output in human-readable format (default: JSON for LLM agents)\");\n\nprogram.hook(\"preAction\", (thisCommand) => {\n const opts = thisCommand.optsWithGlobals();\n if (opts.verbose) setVerbose(true);\n if (opts.quiet) setQuiet(true);\n if (opts.human) setHuman(true);\n});\n\n// Register command groups\nregisterProvidersCommand(program);\nregisterSkillsCommands(program);\nregisterMcpCommands(program);\nregisterCleoCommands(program);\nregisterInstructionsCommands(program);\nregisterConfigCommand(program);\nregisterDoctorCommand(program);\nregisterAdvancedCommands(program);\n\nfunction toError(error: unknown): Error {\n if (error instanceof Error) return error;\n return new Error(String(error));\n}\n\nfunction handleFatal(error: unknown, source: \"uncaughtException\" | \"unhandledRejection\" | \"cli\"): void {\n const normalized = toError(error);\n console.error(`Fatal error (${source}): ${normalized.message}`);\n if (isVerbose() && normalized.stack) {\n console.error(normalized.stack);\n }\n}\n\nprocess.on(\"uncaughtException\", (error) => {\n handleFatal(error, \"uncaughtException\");\n process.exit(1);\n});\n\nprocess.on(\"unhandledRejection\", (reason) => {\n handleFatal(reason, \"unhandledRejection\");\n process.exit(1);\n});\n\nasync function main(): Promise<void> {\n await program.parseAsync(process.argv);\n}\n\nmain().catch((error) => {\n handleFatal(error, \"cli\");\n process.exit(1);\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 LAFSErrorCategory,\n type LAFSMeta,\n type LAFSError,\n type LAFSPage,\n} from \"@cleocode/lafs-protocol\";\nimport type { MVILevel } from \"../../core/lafs.js\";\n\n/**\n * Generic LAFS result envelope for advanced commands.\n * Uses protocol types directly for full compliance.\n */\ntype LAFSResultEnvelope<T> = {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\";\n _meta: LAFSMeta;\n success: boolean;\n result: T | null;\n error: LAFSError | null;\n page: LAFSPage | 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: MVILevel): LAFSMeta {\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\",\n strict: true,\n mvi,\n contextVersion: 0,\n };\n}\n\nexport function emitSuccess<T>(operation: string, result: T, mvi: MVILevel = \"standard\"): 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: MVILevel = \"standard\"): 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: MVILevel,\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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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 ? \"full\" : \"standard\", 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 type { 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","/**\n * config show|path commands - LAFS-compliant with JSON-first output\n */\n\nimport { existsSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { readConfig } from \"../core/formats/index.js\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../core/lafs.js\";\nimport { resolveProviderConfigPath } from \"../core/paths/standard.js\";\nimport { getProvider } from \"../core/registry/providers.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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (providerId: string, opts: { global?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"config.show\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const provider = getProvider(providerId);\n\n if (!provider) {\n const message = `Provider not found: ${providerId}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n providerId,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" : \"project\";\n const configPath = resolveProviderConfigPath(provider, scope) ?? provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n const message = `No config file at: ${configPath}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.FILE_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n configPath,\n scope,\n });\n } else {\n console.log(pc.dim(message));\n }\n process.exit(1);\n }\n\n try {\n const data = await readConfig(configPath, provider.configFormat);\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n provider: provider.id,\n config: data,\n format: provider.configFormat,\n scope,\n });\n return;\n }\n\n // Human-readable output\n console.log(pc.bold(`\\n${provider.toolName} config (${configPath}):\\n`));\n console.log(JSON.stringify(data, null, 2));\n } catch (err) {\n const message = `Error reading config: ${err instanceof Error ? err.message : String(err)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.FILE_SYSTEM_ERROR, message, ErrorCategories.INTERNAL);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n });\n\n config\n .command(\"path\")\n .description(\"Show config file path (outputs raw path for piping)\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .argument(\"[scope]\", \"Scope: project (default) or global\", \"project\")\n .action((providerId: string, scope: string) => {\n // NOTE: This command intentionally outputs raw paths for shell scripting\n // It does NOT use LAFS envelopes to remain pipe-friendly\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 const projectPath = resolveProviderConfigPath(provider, \"project\");\n if (projectPath) {\n console.log(projectPath);\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 * Shared LAFS utilities for CAAMP commands\n * \n * Provides standardized LAFS envelope creation, error handling, and format resolution\n * to ensure all commands follow the LAFS (Language-Agnostic Format Specification) protocol.\n * \n * @module lafs\n * @requires @cleocode/lafs-protocol\n * @requires ../logger.js\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type {\n LAFSErrorCategory,\n LAFSError,\n LAFSMeta,\n LAFSPage,\n Warning,\n} from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport { isHuman, isQuiet } from \"./logger.js\";\n\n/** LAFS MVI disclosure level - defined locally to avoid CI module resolution issues with re-exported types */\nexport type MVILevel = \"minimal\" | \"standard\" | \"full\" | \"custom\";\n\n// Re-export protocol types under CAAMP's naming conventions\nexport type { LAFSMeta };\n\n/** LAFS Error structure - re-exported from protocol as LAFSErrorShape for CAAMP compatibility */\nexport type LAFSErrorShape = LAFSError;\n\n/** LAFS Warning structure - re-exported from protocol */\nexport type LAFSWarning = Warning;\n\n/**\n * Generic LAFS Envelope structure for type-safe command results.\n * Extends the protocol's envelope with TypeScript generics.\n */\nexport interface LAFSEnvelope<T> {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\";\n _meta: LAFSMeta;\n success: boolean;\n result: T | null;\n error: LAFSErrorShape | null;\n page: LAFSPage | null;\n}\n\n/**\n * Format resolution options\n */\nexport interface FormatOptions {\n jsonFlag?: boolean;\n humanFlag?: boolean;\n projectDefault?: \"json\" | \"human\";\n}\n\n/**\n * Resolves output format based on flags and defaults\n * \n * @param options - Format resolution options\n * @returns \"json\" | \"human\"\n * @throws Error if format flags conflict\n * \n * @example\n * ```typescript\n * const format = resolveFormat({\n * jsonFlag: opts.json,\n * humanFlag: opts.human,\n * projectDefault: \"json\"\n * });\n * ```\n */\nexport function resolveFormat(options: FormatOptions): \"json\" | \"human\" {\n return resolveOutputFormat({\n jsonFlag: options.jsonFlag ?? false,\n humanFlag: (options.humanFlag ?? false) || isHuman(),\n projectDefault: options.projectDefault ?? \"json\",\n }).format;\n}\n\n/**\n * Builds a standard LAFS envelope\n * \n * @param operation - Operation identifier (e.g., \"skills.list\", \"doctor.check\")\n * @param mvi - Machine-Verified Instruction flag\n * @param result - Operation result data (null if error)\n * @param error - Error details (null if success)\n * @param page - Pagination info (null if not applicable)\n * @returns LAFS-compliant envelope\n * \n * @example\n * ```typescript\n * const envelope = buildEnvelope(\n * \"skills.list\",\n * true,\n * { skills: [...], count: 5 },\n * null\n * );\n * ```\n */\nexport function buildEnvelope<T>(\n operation: string,\n mvi: MVILevel,\n result: T | null,\n error: LAFSErrorShape | null,\n page: LAFSPage | null = null,\n sessionId?: string,\n warnings?: LAFSWarning[],\n): LAFSEnvelope<T> {\n return {\n $schema: \"https://lafs.dev/schemas/v1/envelope.schema.json\",\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\",\n strict: true,\n mvi,\n contextVersion: 0,\n ...(sessionId && { sessionId }),\n ...(warnings && warnings.length > 0 && { warnings }),\n },\n success: error === null,\n result,\n error,\n page,\n };\n}\n\n/**\n * Emits a JSON error envelope to stderr and exits\n * \n * @param operation - Operation identifier\n * @param mvi - Machine-Verified Instruction flag\n * @param code - Error code\n * @param message - Error message\n * @param category - Error category from LAFS protocol\n * @param details - Additional error details\n * @param exitCode - Process exit code (default: 1)\n * \n * @example\n * ```typescript\n * emitError(\n * \"skills.install\",\n * true,\n * \"E_SKILL_NOT_FOUND\",\n * \"Skill not found\",\n * \"NOT_FOUND\",\n * { skillName: \"my-skill\" }\n * );\n * ```\n */\nexport function emitError(\n operation: string,\n mvi: MVILevel,\n code: string,\n message: string,\n category: LAFSErrorCategory,\n details: Record<string, unknown> = {},\n exitCode: number = 1,\n): never {\n const envelope = buildEnvelope(operation, mvi, null, {\n code,\n message,\n category,\n retryable: category === \"TRANSIENT\" || category === \"RATE_LIMIT\",\n retryAfterMs: null,\n details,\n });\n console.error(JSON.stringify(envelope, null, 2));\n process.exit(exitCode);\n}\n\n/**\n * Emits a JSON error envelope without exiting (for catch blocks)\n * \n * @param operation - Operation identifier\n * @param mvi - Machine-Verified Instruction flag\n * @param code - Error code\n * @param message - Error message\n * @param category - Error category from LAFS protocol\n * @param details - Additional error details\n * \n * @example\n * ```typescript\n * try {\n * await riskyOperation();\n * } catch (error) {\n * emitJsonError(\"operation\", true, \"E_FAILED\", \"Operation failed\", \"INTERNAL\");\n * process.exit(1);\n * }\n * ```\n */\nexport function emitJsonError(\n operation: string,\n mvi: MVILevel,\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: category === \"TRANSIENT\" || category === \"RATE_LIMIT\",\n retryAfterMs: null,\n details,\n });\n console.error(JSON.stringify(envelope, null, 2));\n}\n\n/**\n * Outputs a successful LAFS envelope\n * \n * @param operation - Operation identifier\n * @param mvi - Machine-Verified Instruction flag\n * @param result - Operation result data\n * @param page - Optional pagination info\n * \n * @example\n * ```typescript\n * outputSuccess(\"skills.list\", true, { skills: [...], count: 5 });\n * ```\n */\nexport function outputSuccess<T>(\n operation: string,\n mvi: MVILevel,\n result: T,\n page?: LAFSPage,\n sessionId?: string,\n warnings?: LAFSWarning[],\n): void {\n const envelope = buildEnvelope(operation, mvi, result, null, page ?? null, sessionId, warnings);\n \n // In quiet mode, only output if there's an error or if explicitly requested\n if (isQuiet() && !envelope.error) {\n // Suppress non-essential output in quiet mode\n return;\n }\n \n console.log(JSON.stringify(envelope, null, 2));\n}\n\n/**\n * Standard command options interface for LAFS-compliant commands\n */\nexport interface LAFSCommandOptions {\n json?: boolean;\n human?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * Handles format resolution errors consistently\n * \n * @param error - The error that occurred during format resolution\n * @param operation - Operation identifier\n * @param mvi - Machine-Verified Instruction flag\n * @param jsonFlag - Whether --json flag was explicitly set\n * @returns never (exits process)\n * \n * @example\n * ```typescript\n * try {\n * format = resolveFormat({ jsonFlag: opts.json, humanFlag: opts.human });\n * } catch (error) {\n * handleFormatError(error, \"skills.list\", true, opts.json);\n * }\n * ```\n */\nexport function handleFormatError(\n error: unknown,\n operation: string,\n mvi: MVILevel,\n jsonFlag: boolean | undefined,\n): never {\n const message = error instanceof Error ? error.message : String(error);\n \n if (jsonFlag) {\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n } else {\n // eslint-disable-next-line no-console\n console.error(message);\n }\n process.exit(1);\n}\n\n/**\n * Common error categories mapping for convenience\n */\nexport const ErrorCategories = {\n VALIDATION: \"VALIDATION\" as LAFSErrorCategory,\n AUTH: \"AUTH\" as LAFSErrorCategory,\n PERMISSION: \"PERMISSION\" as LAFSErrorCategory,\n NOT_FOUND: \"NOT_FOUND\" as LAFSErrorCategory,\n CONFLICT: \"CONFLICT\" as LAFSErrorCategory,\n RATE_LIMIT: \"RATE_LIMIT\" as LAFSErrorCategory,\n TRANSIENT: \"TRANSIENT\" as LAFSErrorCategory,\n INTERNAL: \"INTERNAL\" as LAFSErrorCategory,\n CONTRACT: \"CONTRACT\" as LAFSErrorCategory,\n MIGRATION: \"MIGRATION\" as LAFSErrorCategory,\n} as const;\n\n/**\n * Common error codes for consistency\n */\nexport const ErrorCodes = {\n // Format errors\n FORMAT_CONFLICT: \"E_FORMAT_CONFLICT\",\n INVALID_JSON: \"E_INVALID_JSON\",\n \n // Not found errors\n SKILL_NOT_FOUND: \"E_SKILL_NOT_FOUND\",\n PROVIDER_NOT_FOUND: \"E_PROVIDER_NOT_FOUND\",\n MCP_SERVER_NOT_FOUND: \"E_MCP_SERVER_NOT_FOUND\",\n FILE_NOT_FOUND: \"E_FILE_NOT_FOUND\",\n \n // Validation errors\n INVALID_INPUT: \"E_INVALID_INPUT\",\n INVALID_CONSTRAINT: \"E_INVALID_CONSTRAINT\",\n INVALID_FORMAT: \"E_INVALID_FORMAT\",\n \n // Operation errors\n INSTALL_FAILED: \"E_INSTALL_FAILED\",\n REMOVE_FAILED: \"E_REMOVE_FAILED\",\n UPDATE_FAILED: \"E_UPDATE_FAILED\",\n VALIDATION_FAILED: \"E_VALIDATION_FAILED\",\n AUDIT_FAILED: \"E_AUDIT_FAILED\",\n \n // System errors\n NETWORK_ERROR: \"E_NETWORK_ERROR\",\n FILE_SYSTEM_ERROR: \"E_FILE_SYSTEM_ERROR\",\n PERMISSION_DENIED: \"E_PERMISSION_DENIED\",\n INTERNAL_ERROR: \"E_INTERNAL_ERROR\",\n} as const;\n","/**\n * doctor command - diagnose configuration issues and health\n * LAFS-compliant with JSON-first output\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync, lstatSync, readdirSync, readlinkSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { readConfig } from \"../core/formats/index.js\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n handleFormatError,\n type LAFSErrorShape,\n outputSuccess,\n resolveFormat,\n} from \"../core/lafs.js\";\nimport { resolveChannelFromServerName } from \"../core/mcp/cleo.js\";\nimport { readLockFile } from \"../core/mcp/lock.js\";\nimport { listMcpServers } from \"../core/mcp/reader.js\";\nimport { CANONICAL_SKILLS_DIR } from \"../core/paths/agents.js\";\nimport { detectAllProviders } from \"../core/registry/detection.js\";\nimport { getAllProviders, getProviderCount } from \"../core/registry/providers.js\";\nimport { getCaampVersion } from \"../core/version.js\";\nimport type { Provider } from \"../types.js\";\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\ninterface DoctorResult {\n environment: {\n node: string;\n npm: string;\n caamp: string;\n platform: string;\n };\n registry: {\n loaded: boolean;\n count: number;\n valid: boolean;\n };\n providers: {\n installed: number;\n list: string[];\n };\n skills: {\n canonical: number;\n brokenLinks: number;\n staleLinks: number;\n };\n mcpServers: {\n tracked: number;\n untracked: number;\n orphaned: number;\n };\n checks: Array<{\n label: string;\n status: \"pass\" | \"fail\" | \"warn\";\n message?: string;\n }>;\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${getCaampVersion()}`, 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 = CANONICAL_SKILLS_DIR;\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 let canonicalNames: string[] = [];\n try {\n canonicalNames = readdirSync(canonicalDir).filter((name) => {\n const full = join(canonicalDir, name);\n try {\n const stat = lstatSync(full);\n return stat.isDirectory() || stat.isSymbolicLink();\n } catch {\n return false;\n }\n });\n canonicalCount = canonicalNames.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 installed provider skill directories\n const broken: string[] = [];\n const stale: string[] = [];\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 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()) continue;\n\n if (!existsSync(fullPath)) {\n broken.push(`${provider.id}/${entry}`);\n } else {\n // Check if symlink points to canonical location\n const target = readlinkSync(fullPath);\n const isCanonical =\n target.includes(\"/.agents/skills/\") ||\n target.includes(\"\\\\.agents\\\\skills\\\\\");\n if (!isCanonical) {\n stale.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 symlink${broken.length !== 1 ? \"s\" : \"\"}`,\n status: \"warn\",\n detail: broken.join(\", \"),\n });\n }\n\n if (stale.length === 0) {\n checks.push({ label: \"No stale symlinks\", status: \"pass\" });\n } else {\n checks.push({\n label: `${stale.length} stale symlink${stale.length !== 1 ? \"s\" : \"\"} (not pointing to ~/.agents/skills/)`,\n status: \"warn\",\n detail: stale.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 const lockSkillNames = Object.keys(lock.skills);\n checks.push({ label: `${lockSkillNames.length} skill entries`, status: \"pass\" });\n\n // Check for orphaned skill entries (canonical path no longer exists)\n const orphaned: string[] = [];\n for (const [name, entry] of Object.entries(lock.skills)) {\n if (entry.canonicalPath && !existsSync(entry.canonicalPath)) {\n orphaned.push(name);\n }\n }\n\n if (orphaned.length === 0) {\n checks.push({ label: \"0 orphaned entries\", status: \"pass\" });\n } else {\n checks.push({\n label: `${orphaned.length} orphaned skill${orphaned.length !== 1 ? \"s\" : \"\"} (in lock, missing from disk)`,\n status: \"warn\",\n detail: orphaned.join(\", \"),\n });\n }\n\n // Check for untracked skills (on disk but not in lock)\n const canonicalDir = CANONICAL_SKILLS_DIR;\n if (existsSync(canonicalDir)) {\n const onDisk = readdirSync(canonicalDir).filter((name) => {\n try {\n const stat = lstatSync(join(canonicalDir, name));\n return stat.isDirectory() || stat.isSymbolicLink();\n } catch {\n return false;\n }\n });\n const untracked = onDisk.filter((name) => !lock.skills[name]);\n\n if (untracked.length === 0) {\n checks.push({ label: \"0 untracked skills\", status: \"pass\" });\n } else {\n checks.push({\n label: `${untracked.length} untracked skill${untracked.length !== 1 ? \"s\" : \"\"} (on disk, not in lock)`,\n status: \"warn\",\n detail: untracked.join(\", \"),\n });\n }\n }\n\n // Check lock agent-list vs actual symlinks\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n const mismatches: string[] = [];\n\n for (const [name, entry] of Object.entries(lock.skills)) {\n if (!entry.agents || entry.agents.length === 0) continue;\n\n for (const agentId of entry.agents) {\n const provider = installed.find((r) => r.provider.id === agentId);\n if (!provider) continue;\n\n const linkPath = join(provider.provider.pathSkills, name);\n if (!existsSync(linkPath)) {\n mismatches.push(`${name} missing from ${agentId}`);\n }\n }\n }\n\n if (mismatches.length === 0) {\n checks.push({ label: \"Lock agent-lists match symlinks\", status: \"pass\" });\n } else {\n checks.push({\n label: `${mismatches.length} agent-list mismatch${mismatches.length !== 1 ? \"es\" : \"\"}`,\n status: \"warn\",\n detail: mismatches.slice(0, 5).join(\", \") + (mismatches.length > 5 ? ` (+${mismatches.length - 5} more)` : \"\"),\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 checkMcpLockEntries(): Promise<SectionResult> {\n const checks: CheckResult[] = [];\n\n try {\n const lock = await readLockFile();\n const lockNames = Object.keys(lock.mcpServers);\n checks.push({ label: `${lockNames.length} MCP server entries in lock`, status: \"pass\" });\n\n // Detect untracked CLEO servers (in config, not in lock)\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n const liveCleoNames = new Set<string>();\n let untrackedCount = 0;\n\n for (const scope of [\"project\", \"global\"] as const) {\n for (const r of installed) {\n try {\n const entries = await listMcpServers(r.provider, scope);\n for (const entry of entries) {\n const channel = resolveChannelFromServerName(entry.name);\n if (!channel) continue;\n liveCleoNames.add(entry.name);\n\n if (!lock.mcpServers[entry.name]) {\n untrackedCount++;\n }\n }\n } catch {\n // skip unreadable configs\n }\n }\n }\n\n if (untrackedCount === 0) {\n checks.push({ label: \"All CLEO servers tracked in lock\", status: \"pass\" });\n } else {\n checks.push({\n label: `${untrackedCount} untracked CLEO server${untrackedCount !== 1 ? \"s\" : \"\"} (in config, not in lock)`,\n status: \"warn\",\n detail: \"Run `caamp cleo repair` to backfill lock entries\",\n });\n }\n\n // Detect orphaned CLEO entries (in lock, not in any config)\n let orphanedCount = 0;\n const orphanedNames: string[] = [];\n\n for (const serverName of lockNames) {\n const channel = resolveChannelFromServerName(serverName);\n if (!channel) continue;\n\n if (!liveCleoNames.has(serverName)) {\n orphanedCount++;\n orphanedNames.push(serverName);\n }\n }\n\n if (orphanedCount === 0) {\n checks.push({ label: \"No orphaned CLEO lock entries\", status: \"pass\" });\n } else {\n checks.push({\n label: `${orphanedCount} orphaned CLEO lock entr${orphanedCount !== 1 ? \"ies\" : \"y\"} (in lock, not in any config)`,\n status: \"warn\",\n detail: orphanedNames.join(\", \") + \" — Run `caamp cleo repair --prune` to clean up\",\n });\n }\n } catch (err) {\n checks.push({\n label: \"Failed to check MCP lock entries\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"MCP Lock\", 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\nexport function registerDoctorCommand(program: Command): void {\n program\n .command(\"doctor\")\n .description(\"Diagnose configuration issues and health\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { json?: boolean; human?: boolean }) => {\n const operation = \"doctor.check\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n handleFormatError(error, operation, mvi, opts.json);\n }\n\n try {\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 checkMcpLockEntries());\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 // Build result for LAFS envelope\n const npmVersion = getNpmVersion() ?? \"not found\";\n const allProviders = getAllProviders();\n const malformedCount = allProviders.filter(\n (p) => !p.id || !p.toolName || !p.configKey || !p.configFormat\n ).length;\n const detectionResults = detectAllProviders();\n const installedProviders = detectionResults.filter((r) => r.installed);\n const { canonicalCount, brokenCount, staleCount } = countSkillIssues();\n\n const { tracked: mcpTracked, untracked: mcpUntracked, orphaned: mcpOrphaned } = countMcpLockIssues(sections);\n\n const result: DoctorResult = {\n environment: {\n node: getNodeVersion(),\n npm: npmVersion,\n caamp: getCaampVersion(),\n platform: `${process.platform} ${process.arch}`,\n },\n registry: {\n loaded: true,\n count: getProviderCount(),\n valid: malformedCount === 0,\n },\n providers: {\n installed: installedProviders.length,\n list: installedProviders.map((r) => r.provider.id),\n },\n skills: {\n canonical: canonicalCount,\n brokenLinks: brokenCount,\n staleLinks: staleCount,\n },\n mcpServers: {\n tracked: mcpTracked,\n untracked: mcpUntracked,\n orphaned: mcpOrphaned,\n },\n checks: sections.flatMap((s) =>\n s.checks.map((c) => ({\n label: `${s.name}: ${c.label}`,\n status: c.status,\n message: c.detail,\n }))\n ),\n };\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, result);\n \n if (errors > 0) {\n process.exit(1);\n }\n return;\n }\n\n // Human-readable output\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 } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (format === \"json\") {\n emitJsonError(\n operation,\n mvi,\n ErrorCodes.INTERNAL_ERROR,\n message,\n ErrorCategories.INTERNAL\n );\n } else {\n console.error(pc.red(`Error: ${message}`));\n }\n process.exit(1);\n }\n });\n}\n\nfunction countSkillIssues(): { canonicalCount: number; brokenCount: number; staleCount: number } {\n const canonicalDir = CANONICAL_SKILLS_DIR;\n let canonicalCount = 0;\n\n if (existsSync(canonicalDir)) {\n try {\n const names = readdirSync(canonicalDir).filter((name) => {\n const full = join(canonicalDir, name);\n try {\n const stat = lstatSync(full);\n return stat.isDirectory() || stat.isSymbolicLink();\n } catch {\n return false;\n }\n });\n canonicalCount = names.length;\n } catch {\n // ignore\n }\n }\n\n let brokenCount = 0;\n let staleCount = 0;\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 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()) continue;\n\n if (!existsSync(fullPath)) {\n brokenCount++;\n } else {\n const target = readlinkSync(fullPath);\n const isCanonical =\n target.includes(\"/.agents/skills/\") ||\n target.includes(\"\\\\.agents\\\\skills\\\\\");\n if (!isCanonical) {\n staleCount++;\n }\n }\n } catch {\n // skip unreadable entries\n }\n }\n } catch {\n // skip unreadable dirs\n }\n }\n\n return { canonicalCount, brokenCount, staleCount };\n}\n\nfunction countMcpLockIssues(sections: SectionResult[]): {\n tracked: number;\n untracked: number;\n orphaned: number;\n} {\n const mcpSection = sections.find((s) => s.name === \"MCP Lock\");\n if (!mcpSection) return { tracked: 0, untracked: 0, orphaned: 0 };\n\n let tracked = 0;\n let untracked = 0;\n let orphaned = 0;\n\n for (const check of mcpSection.checks) {\n const countMatch = check.label.match(/^(\\d+)/);\n if (!countMatch?.[1]) continue;\n\n const count = Number.parseInt(countMatch[1], 10);\n if (check.label.includes(\"MCP server entries in lock\")) {\n tracked = count;\n } else if (check.label.includes(\"untracked\")) {\n untracked = count;\n } else if (check.label.includes(\"orphaned\")) {\n orphaned = count;\n }\n }\n\n return { tracked, untracked, orphaned };\n}\n","import { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nlet cachedVersion: string | null = null;\n\nexport function getCaampVersion(): string {\n if (cachedVersion) return cachedVersion;\n\n try {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const packageJsonPath = join(currentDir, \"..\", \"package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as { version?: string };\n cachedVersion = packageJson.version ?? \"0.0.0\";\n } catch {\n cachedVersion = \"0.0.0\";\n }\n\n return cachedVersion;\n}\n","/**\n * instructions inject command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent, groupByInstructFile } from \"../../core/instructions/templates.js\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n content?: string;\n dryRun?: boolean;\n all?: boolean;\n json?: boolean;\n human?: boolean;\n }) => {\n const operation = \"instructions.inject\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\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 const message = \"No providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n injected: [],\n providers: providers.map((p) => p.id),\n count: 0,\n dryRun: true,\n wouldInject: Array.from(groups.entries()).map(([file, group]) => ({\n file,\n providers: group.map((p) => p.id),\n })),\n });\n } else {\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 }\n return;\n }\n\n const results = await injectAll(providers, process.cwd(), scope, content);\n\n const injected: string[] = [];\n for (const [file] of results) {\n injected.push(file);\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n injected,\n providers: providers.map((p) => p.id),\n count: results.size,\n });\n } else {\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 console.log(pc.bold(`\\n${results.size} file(s) processed.`));\n }\n });\n}\n","/**\n * instructions check command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { checkAllInjections } from \"../../core/instructions/injector.js\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--all\", \"Check all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n json?: boolean;\n human?: boolean;\n all?: boolean;\n }) => {\n const operation = \"instructions.check\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\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 // Build provider status for result\n const providerStatus = results.map((r) => ({\n id: r.provider,\n present: r.status === \"current\" || r.status === \"outdated\",\n path: r.file,\n }));\n\n const present = providerStatus.filter((p) => p.present).length;\n const missing = providerStatus.filter((p) => !p.present).length;\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n providers: providerStatus,\n present,\n missing,\n });\n return;\n }\n\n // Human-readable output\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 - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { checkAllInjections, injectAll } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent } from \"../../core/instructions/templates.js\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { global?: boolean; yes?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"instructions.update\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated: [],\n failed: [],\n count: { updated: 0, failed: 0 },\n });\n } else {\n console.log(pc.green(\"All instruction files are up to date.\"));\n }\n return;\n }\n\n if (format === \"human\") {\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\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 const updated: string[] = [];\n for (const [file] of results) {\n updated.push(file);\n }\n\n if (format === \"human\") {\n console.log();\n for (const [file, action] of results) {\n console.log(` ${pc.green(\"✓\")} ${file} (${action})`);\n }\n console.log(pc.bold(`\\n${results.size} file(s) updated.`));\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated,\n failed: [],\n count: { updated: updated.length, failed: 0 },\n });\n }\n });\n}\n","/**\n * Instructions command group registration\n */\n\nimport type { 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 * CLEO MCP channel commands and compatibility wrappers.\n */\n\nimport { createInterface } from \"node:readline/promises\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport {\n buildCleoProfile,\n type CleoChannel,\n checkCommandReachability,\n extractVersionTag,\n normalizeCleoChannel,\n parseEnvAssignments,\n resolveChannelFromServerName,\n resolveCleoServerName,\n} from \"../../core/mcp/cleo.js\";\nimport { installMcpServerToAll } from \"../../core/mcp/installer.js\";\nimport { getTrackedMcpServers, recordMcpInstall, removeMcpFromLock } from \"../../core/mcp/lock.js\";\nimport { listMcpServers, removeMcpServer } from \"../../core/mcp/reader.js\";\nimport { reconcileCleoLock } from \"../../core/mcp/reconcile.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\ninterface CleoInstallOptions {\n channel?: string;\n provider: string[];\n all?: boolean;\n global?: boolean;\n version?: string;\n command?: string;\n arg: string[];\n env: string[];\n cleoDir?: string;\n dryRun?: boolean;\n yes?: boolean;\n interactive?: boolean;\n json?: boolean;\n human?: boolean;\n}\n\ninterface CleoUninstallOptions {\n channel?: string;\n provider: string[];\n all?: boolean;\n global?: boolean;\n dryRun?: boolean;\n json?: boolean;\n human?: boolean;\n}\n\ninterface CleoShowOptions {\n provider: string[];\n all?: boolean;\n global?: boolean;\n project?: boolean;\n channel?: string;\n json?: boolean;\n human?: boolean;\n}\n\ninterface CleoRepairOptions {\n provider: string[];\n all?: boolean;\n global?: boolean;\n project?: boolean;\n prune?: boolean;\n dryRun?: boolean;\n json?: boolean;\n human?: boolean;\n}\n\nfunction collect(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction collectTargetProviders(providerIds: string[], all?: boolean): Provider[] {\n if (all) {\n return getInstalledProviders();\n }\n\n if (providerIds.length > 0) {\n return providerIds\n .map((id) => getProvider(id))\n .filter((provider): provider is Provider => provider !== undefined);\n }\n\n return getInstalledProviders();\n}\n\nasync function validateProfile(\n provider: Provider,\n scope: \"project\" | \"global\",\n serverName: string,\n): Promise<{ valid: boolean; reason?: string }> {\n const entries = await listMcpServers(provider, scope);\n const entry = entries.find((candidate) => candidate.name === serverName);\n if (!entry) {\n return { valid: false, reason: \"server missing after write\" };\n }\n\n const command = typeof entry.config.command === \"string\" ? entry.config.command : undefined;\n if (!command) {\n return { valid: true };\n }\n\n const reachability = checkCommandReachability(command);\n if (!reachability.reachable) {\n return {\n valid: false,\n reason: `command not reachable (${reachability.method}: ${reachability.detail})`,\n };\n }\n\n return { valid: true };\n}\n\nasync function detectServerConflicts(\n providers: Provider[],\n scope: \"project\" | \"global\",\n targetServerName: string,\n): Promise<Array<{ providerId: string; message: string }>> {\n const warnings: Array<{ providerId: string; message: string }> = [];\n\n for (const provider of providers) {\n const entries = await listMcpServers(provider, scope);\n const existing = entries.find((entry) => entry.name === targetServerName);\n if (!existing) continue;\n\n const command = typeof existing.config.command === \"string\" ? existing.config.command : \"\";\n const args = Array.isArray(existing.config.args)\n ? existing.config.args.filter((value): value is string => typeof value === \"string\")\n : [];\n const flat = `${command} ${args.join(\" \")}`.toLowerCase();\n\n if (!flat.includes(\"cleo\")) {\n warnings.push({\n providerId: provider.id,\n message: `Server name '${targetServerName}' already exists with a non-CLEO command in ${provider.id}.`,\n });\n }\n }\n\n return warnings;\n}\n\nfunction formatInstallResultHuman(\n mode: \"install\" | \"update\",\n channel: CleoChannel,\n serverName: string,\n scope: \"project\" | \"global\",\n results: Awaited<ReturnType<typeof installMcpServerToAll>>,\n validations: Array<{ providerId: string; valid: boolean; reason?: string }>,\n): void {\n console.log(pc.bold(`${mode === \"install\" ? \"Install\" : \"Update\"} CLEO channel: ${channel}`));\n console.log(pc.dim(`Server: ${serverName} Scope: ${scope}`));\n console.log();\n\n for (const result of results) {\n const validation = validations.find((entry) => entry.providerId === result.provider.id);\n if (result.success) {\n const validationLabel = validation?.valid\n ? pc.green(\"validated\")\n : pc.yellow(`validation warning: ${validation?.reason ?? \"unknown\"}`);\n console.log(` ${pc.green(\"+\")} ${result.provider.toolName.padEnd(22)} ${pc.dim(result.configPath)} ${validationLabel}`);\n } else {\n console.log(` ${pc.red(\"x\")} ${result.provider.toolName.padEnd(22)} ${pc.red(result.error ?? \"failed\")}`);\n console.log(pc.dim(\" Recovery: verify config path permissions and retry with --dry-run.\"));\n }\n }\n console.log();\n}\n\nasync function runInteractiveInstall(\n opts: CleoInstallOptions,\n): Promise<CleoInstallOptions> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n const discovered = getInstalledProviders();\n if (discovered.length === 0) {\n throw new Error(\"No installed providers were detected for interactive setup.\");\n }\n\n console.log(pc.bold(\"CLEO MCP Setup\"));\n console.log(pc.dim(\"Step 1/6 - Select provider(s)\"));\n for (const [index, provider] of discovered.entries()) {\n console.log(` ${index + 1}. ${provider.id} (${provider.toolName})`);\n }\n const providerAnswer = await rl.question(pc.dim(\"Choose providers (e.g. 1,2 or all): \"));\n const selectedProviders = providerAnswer.trim().toLowerCase() === \"all\"\n ? discovered.map((provider) => provider.id)\n : providerAnswer\n .split(\",\")\n .map((part) => Number(part.trim()))\n .filter((value) => Number.isFinite(value) && value > 0 && value <= discovered.length)\n .map((index) => discovered[index - 1]?.id)\n .filter((id): id is string => Boolean(id));\n\n if (selectedProviders.length === 0) {\n throw new Error(\"No providers selected.\");\n }\n\n console.log();\n console.log(pc.dim(\"Step 2/6 - Select channel\"));\n const channelAnswer = await rl.question(pc.dim(\"Channel [stable/beta/dev] (stable): \"));\n const selectedChannel = normalizeCleoChannel(channelAnswer || \"stable\");\n\n let command = opts.command;\n let args = [...opts.arg];\n let env = [...opts.env];\n let cleoDir = opts.cleoDir;\n if (selectedChannel === \"dev\") {\n command = await rl.question(pc.dim(\"Dev command (required): \"));\n const argsAnswer = await rl.question(pc.dim(\"Dev args (space-separated, optional): \"));\n args = argsAnswer.trim() === \"\" ? [] : argsAnswer.trim().split(/\\s+/);\n const dirAnswer = await rl.question(pc.dim(\"CLEO_DIR (~/.cleo-dev default): \"));\n cleoDir = dirAnswer.trim() === \"\" ? \"~/.cleo-dev\" : dirAnswer.trim();\n if (cleoDir.trim() !== \"\") {\n env = [\n ...env.filter((entry) => !entry.startsWith(\"CLEO_DIR=\")),\n `CLEO_DIR=${cleoDir}`,\n ];\n }\n }\n\n const profile = buildCleoProfile({\n channel: selectedChannel,\n version: opts.version,\n command,\n args,\n env: parseEnvAssignments(env),\n cleoDir,\n });\n\n console.log();\n console.log(pc.dim(\"Step 3/6 - Preview profile diff\"));\n console.log(` Server: ${pc.bold(profile.serverName)}`);\n console.log(` Channel: ${selectedChannel}`);\n console.log(` Config: ${JSON.stringify(profile.config)}`);\n\n console.log();\n console.log(pc.dim(\"Step 4/6 - Confirm apply\"));\n const confirm = await rl.question(pc.dim(\"Apply this configuration? [y/N] \"));\n if (![\"y\", \"yes\"].includes(confirm.trim().toLowerCase())) {\n throw new Error(\"Cancelled by user.\");\n }\n\n return {\n ...opts,\n provider: selectedProviders,\n channel: selectedChannel,\n command,\n arg: args,\n env,\n cleoDir,\n yes: true,\n };\n } finally {\n rl.close();\n }\n}\n\nexport async function executeCleoInstall(\n mode: \"install\" | \"update\",\n opts: CleoInstallOptions,\n operation: string,\n): Promise<void> {\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const interactive = (opts.interactive ?? false) && format === \"human\";\n const resolvedOpts = interactive ? await runInteractiveInstall(opts) : opts;\n\n const channel = normalizeCleoChannel(resolvedOpts.channel);\n const providers = collectTargetProviders(resolvedOpts.provider, resolvedOpts.all);\n if (providers.length === 0) {\n const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const envMap = parseEnvAssignments(resolvedOpts.env);\n const profile = buildCleoProfile({\n channel,\n version: resolvedOpts.version,\n command: resolvedOpts.command,\n args: resolvedOpts.arg,\n env: envMap,\n cleoDir: resolvedOpts.cleoDir,\n });\n\n const scope = resolvedOpts.global ? \"global\" as const : \"project\" as const;\n\n if (resolvedOpts.dryRun) {\n if (format === \"human\") {\n console.log(pc.bold(`Dry run: ${mode} CLEO (${channel})`));\n console.log(pc.dim(`Server: ${profile.serverName} Scope: ${scope}`));\n console.log(pc.dim(`Providers: ${providers.map((provider) => provider.id).join(\", \")}`));\n console.log(pc.dim(`Command: ${profile.config.command ?? \"(none)\"} ${(profile.config.args ?? []).join(\" \")}`));\n if (profile.config.env && Object.keys(profile.config.env).length > 0) {\n console.log(pc.dim(`Env: ${JSON.stringify(profile.config.env)}`));\n }\n } else {\n outputSuccess(operation, mvi, {\n action: mode,\n channel,\n serverName: profile.serverName,\n providers: providers.map((provider) => provider.id),\n scope,\n command: profile.config.command,\n args: profile.config.args ?? [],\n env: profile.config.env ?? {},\n packageSpec: profile.packageSpec,\n dryRun: true,\n });\n }\n return;\n }\n\n const conflictWarnings = await detectServerConflicts(providers, scope, profile.serverName);\n if (format === \"human\" && conflictWarnings.length > 0) {\n console.log(pc.yellow(\"Warning: potential server name conflicts detected.\"));\n for (const warning of conflictWarnings) {\n console.log(pc.yellow(` - ${warning.message}`));\n }\n console.log(pc.dim(\"Recovery: run with --dry-run, inspect provider config, then retry with explicit channel/profile.\"));\n console.log();\n }\n\n const results = await installMcpServerToAll(providers, profile.serverName, profile.config, scope);\n const succeeded = results.filter((result) => result.success);\n\n const validations: Array<{ providerId: string; valid: boolean; reason?: string }> = [];\n for (const result of succeeded) {\n const validation = await validateProfile(result.provider, scope, profile.serverName);\n validations.push({ providerId: result.provider.id, valid: validation.valid, reason: validation.reason });\n }\n\n if (succeeded.length > 0) {\n await recordMcpInstall(\n profile.serverName,\n profile.packageSpec ?? resolvedOpts.command ?? \"cleo-dev\",\n channel === \"dev\" ? \"command\" : \"package\",\n succeeded.map((result) => result.provider.id),\n resolvedOpts.global ?? false,\n resolvedOpts.version ?? extractVersionTag(profile.packageSpec),\n );\n }\n\n if (format === \"human\") {\n formatInstallResultHuman(mode, channel, profile.serverName, scope, results, validations);\n }\n\n const validationFailures = validations.filter((entry) => !entry.valid);\n if (interactive && validationFailures.length > 0 && format === \"human\") {\n console.log(pc.dim(\"Step 5/6 - Validation\"));\n console.log(pc.yellow(`Validation found ${validationFailures.length} issue(s).`));\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n try {\n console.log(pc.dim(\"Step 6/6 - Rollback\"));\n const answer = await rl.question(pc.dim(\"Rollback failed validations? [y/N] \"));\n if ([\"y\", \"yes\"].includes(answer.trim().toLowerCase())) {\n for (const failure of validationFailures) {\n const provider = providers.find((candidate) => candidate.id === failure.providerId);\n if (!provider) continue;\n await removeMcpServer(provider, profile.serverName, scope);\n }\n console.log(pc.yellow(\"Rollback completed for failed provider validations.\"));\n }\n } finally {\n rl.close();\n }\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n action: mode,\n channel,\n serverName: profile.serverName,\n scope,\n command: profile.config.command,\n args: profile.config.args ?? [],\n env: profile.config.env ?? {},\n packageSpec: profile.packageSpec,\n providers: results.map((result) => ({\n id: result.provider.id,\n success: result.success,\n configPath: result.configPath,\n error: result.error,\n validation: validations.find((entry) => entry.providerId === result.provider.id) ?? null,\n })),\n conflicts: conflictWarnings,\n validationStatus: validationFailures.length === 0 ? \"ok\" : \"warning\",\n });\n }\n}\n\nexport async function executeCleoUninstall(\n opts: CleoUninstallOptions,\n operation: string,\n): Promise<void> {\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const channel = normalizeCleoChannel(opts.channel);\n const serverName = resolveCleoServerName(channel);\n const providers = collectTargetProviders(opts.provider, opts.all);\n\n if (providers.length === 0) {\n const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n if (opts.dryRun) {\n if (format === \"human\") {\n console.log(pc.bold(\"Dry run: uninstall CLEO profile\"));\n console.log(pc.dim(`Server: ${serverName} Channel: ${channel} Scope: ${scope}`));\n console.log(pc.dim(`Providers: ${providers.map((provider) => provider.id).join(\", \")}`));\n } else {\n outputSuccess(operation, mvi, {\n action: \"uninstall\",\n channel,\n serverName,\n providers: providers.map((provider) => provider.id),\n scope,\n dryRun: true,\n });\n }\n return;\n }\n\n const removed: string[] = [];\n for (const provider of providers) {\n const success = await removeMcpServer(provider, serverName, scope);\n if (success) removed.push(provider.id);\n }\n\n if (removed.length > 0) {\n await removeMcpFromLock(serverName);\n }\n\n if (format === \"human\") {\n const prefix = removed.length > 0 ? pc.green(\"Removed\") : pc.yellow(\"No matching profile found for\");\n console.log(`${prefix} ${pc.bold(serverName)} (${channel}) on ${removed.length}/${providers.length} providers.`);\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n action: \"uninstall\",\n channel,\n serverName,\n scope,\n removed,\n providerCount: providers.length,\n dryRun: false,\n });\n }\n}\n\nexport type CleoHealthStatus = \"healthy\" | \"degraded\" | \"broken\";\n\nexport interface CleoEntryHealth {\n commandReachable: boolean;\n commandDetail: string;\n configPresent: boolean;\n lockTracked: boolean;\n status: CleoHealthStatus;\n}\n\nexport function checkCleoEntryHealth(\n command: string | undefined,\n lockTracked: boolean,\n): CleoEntryHealth {\n if (!command) {\n return {\n commandReachable: true,\n commandDetail: \"(no command)\",\n configPresent: true,\n lockTracked,\n status: lockTracked ? \"healthy\" : \"degraded\",\n };\n }\n\n const reachability = checkCommandReachability(command);\n if (!reachability.reachable) {\n return {\n commandReachable: false,\n commandDetail: reachability.detail,\n configPresent: true,\n lockTracked,\n status: \"broken\",\n };\n }\n\n return {\n commandReachable: true,\n commandDetail: reachability.detail,\n configPresent: true,\n lockTracked,\n status: lockTracked ? \"healthy\" : \"degraded\",\n };\n}\n\nexport async function executeCleoShow(\n opts: CleoShowOptions,\n operation: string,\n): Promise<void> {\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const providers = collectTargetProviders(opts.provider, opts.all);\n if (providers.length === 0) {\n const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const channelFilter = opts.channel ? normalizeCleoChannel(opts.channel) : null;\n\n // Determine which scopes to scan\n const scopes: Array<\"project\" | \"global\"> = [];\n if (opts.global && !opts.project) {\n scopes.push(\"global\");\n } else if (opts.project && !opts.global) {\n scopes.push(\"project\");\n } else {\n scopes.push(\"project\", \"global\");\n }\n\n // Load lock file data\n const lockEntries = await getTrackedMcpServers();\n\n interface EnrichedProfile {\n provider: string;\n providerName: string;\n serverName: string;\n channel: CleoChannel;\n scope: \"project\" | \"global\";\n command?: string;\n args: string[];\n env: Record<string, string>;\n version: string | null;\n source: string | null;\n sourceType: string | null;\n installedAt: string | null;\n updatedAt: string | null;\n health: CleoEntryHealth;\n }\n\n const entries: EnrichedProfile[] = [];\n const warnings: import(\"../../core/lafs.js\").LAFSWarning[] = [];\n\n for (const scope of scopes) {\n for (const provider of providers) {\n const providerEntries = await listMcpServers(provider, scope);\n for (const entry of providerEntries) {\n const channel = resolveChannelFromServerName(entry.name);\n if (!channel) continue;\n if (channelFilter && channel !== channelFilter) continue;\n\n const command = typeof entry.config.command === \"string\" ? entry.config.command : undefined;\n const args = Array.isArray(entry.config.args)\n ? entry.config.args.filter((value): value is string => typeof value === \"string\")\n : [];\n const env = typeof entry.config.env === \"object\" && entry.config.env !== null\n ? entry.config.env as Record<string, string>\n : {};\n\n const lockEntry = lockEntries[entry.name];\n const lockTracked = lockEntry !== undefined;\n const health = checkCleoEntryHealth(command, lockTracked);\n\n entries.push({\n provider: provider.id,\n providerName: provider.toolName,\n serverName: entry.name,\n channel,\n scope,\n command,\n args,\n env,\n version: lockEntry?.version ?? null,\n source: lockEntry?.source ?? null,\n sourceType: lockEntry?.sourceType ?? null,\n installedAt: lockEntry?.installedAt ?? null,\n updatedAt: lockEntry?.updatedAt ?? null,\n health,\n });\n\n if (health.status === \"broken\") {\n warnings.push({\n code: \"W_COMMAND_UNREACHABLE\",\n message: `${entry.name} command not reachable on ${provider.toolName} (${health.commandDetail})`,\n });\n } else if (health.status === \"degraded\") {\n warnings.push({\n code: \"W_NOT_TRACKED\",\n message: `${entry.name} on ${provider.toolName} is not tracked in lock file`,\n });\n }\n }\n }\n }\n\n const issueCount = entries.filter((e) => e.health.status !== \"healthy\").length;\n\n if (format === \"human\") {\n if (entries.length === 0) {\n console.log(pc.dim(\"No CLEO channel profiles found.\"));\n } else {\n console.log(pc.bold(\"CLEO Channel Profiles\"));\n console.log();\n\n // Column headers\n const header = [\n \"Channel\".padEnd(10),\n \"Version\".padEnd(10),\n \"Provider\".padEnd(22),\n \"Scope\".padEnd(9),\n \"Command\".padEnd(33),\n \"Status\".padEnd(10),\n \"Installed\".padEnd(12),\n ].join(\"\");\n console.log(` ${pc.dim(header)}`);\n console.log(` ${pc.dim(\"-\".repeat(106))}`);\n\n for (const entry of entries) {\n const commandStr = entry.command\n ? `${entry.command} ${entry.args.join(\" \")}`.slice(0, 31).padEnd(33)\n : pc.dim(\"-\").padEnd(33);\n const versionStr = (entry.version ?? \"-\").padEnd(10);\n const installedStr = entry.installedAt\n ? entry.installedAt.slice(0, 10).padEnd(12)\n : \"-\".padEnd(12);\n\n let statusStr: string;\n if (entry.health.status === \"healthy\") {\n statusStr = pc.green(\"healthy\".padEnd(10));\n } else if (entry.health.status === \"degraded\") {\n statusStr = pc.yellow(\"degraded\".padEnd(10));\n } else {\n statusStr = pc.red(\"broken\".padEnd(10));\n }\n\n console.log(\n ` ${entry.channel.padEnd(10)}${versionStr}${entry.providerName.padEnd(22)}${entry.scope.padEnd(9)}${commandStr}${statusStr}${installedStr}`,\n );\n }\n\n console.log();\n const summary = ` ${entries.length} profile${entries.length !== 1 ? \"s\" : \"\"}`;\n if (issueCount > 0) {\n console.log(`${summary} | ${pc.yellow(`${issueCount} issue${issueCount !== 1 ? \"s\" : \"\"}`)}`);\n console.log();\n console.log(\" Issues:\");\n for (const w of warnings) {\n console.log(` ${pc.yellow(\"!\")} ${w.message}`);\n }\n } else {\n console.log(summary);\n }\n }\n }\n\n if (format === \"json\") {\n outputSuccess(\n operation,\n mvi,\n {\n providers: providers.map((provider) => provider.id),\n scopes,\n channel: channelFilter,\n profiles: entries,\n count: entries.length,\n },\n undefined,\n undefined,\n warnings.length > 0 ? warnings : undefined,\n );\n }\n}\n\nexport async function executeCleoRepair(\n opts: CleoRepairOptions,\n operation: string,\n): Promise<void> {\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const providerIds = opts.provider.length > 0 ? opts.provider : undefined;\n\n const result = await reconcileCleoLock({\n providerIds,\n all: opts.all,\n global: opts.global,\n project: opts.project,\n prune: opts.prune,\n dryRun: opts.dryRun,\n });\n\n if (format === \"human\") {\n const prefix = opts.dryRun ? \"CLEO Lock Repair (dry run)\" : \"CLEO Lock Repair\";\n console.log(pc.bold(prefix));\n console.log();\n\n if (result.backfilled.length > 0) {\n for (const entry of result.backfilled) {\n const agents = entry.agents.join(\", \");\n const versionStr = entry.version ? `(${entry.version})` : \"\";\n console.log(\n ` ${pc.green(\"+\")} ${entry.serverName.padEnd(12)}${entry.channel.padEnd(10)}${agents.padEnd(22)}${entry.scope.padEnd(10)}${entry.source} ${pc.dim(versionStr)}`,\n );\n }\n }\n\n if (result.pruned.length > 0) {\n for (const name of result.pruned) {\n console.log(` ${pc.red(\"-\")} ${name} (removed from lock)`);\n }\n }\n\n if (result.backfilled.length === 0 && result.pruned.length === 0) {\n console.log(pc.dim(\" No changes needed. All CLEO entries are tracked.\"));\n }\n\n console.log();\n console.log(\n ` ${result.backfilled.length} backfilled | ${result.pruned.length} pruned | ${result.alreadyTracked} already tracked`,\n );\n\n if (result.errors.length > 0) {\n console.log();\n for (const err of result.errors) {\n console.log(` ${pc.red(\"!\")} ${err.message}`);\n }\n }\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n backfilled: result.backfilled,\n pruned: result.pruned,\n alreadyTracked: result.alreadyTracked,\n dryRun: opts.dryRun ?? false,\n errors: result.errors,\n });\n }\n}\n\nfunction buildInstallOptions(command: Command): Command {\n return command\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--version <tag>\", \"Tag/version for stable or beta\")\n .option(\"--command <command>\", \"Dev channel command\")\n .option(\"--arg <arg>\", \"Dev command arg (repeatable)\", collect, [])\n .option(\"--env <kv>\", \"Environment assignment KEY=value (repeatable)\", collect, [])\n .option(\"--cleo-dir <path>\", \"CLEO_DIR override for dev channel\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--interactive\", \"Guided interactive setup\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\");\n}\n\nexport function registerMcpCleoCommands(parent: Command): void {\n const cleo = parent\n .command(\"cleo\")\n .description(\"Manage CLEO MCP channel profiles\");\n\n buildInstallOptions(\n cleo\n .command(\"install\")\n .description(\"Install CLEO MCP profile by channel\"),\n ).action(async (opts: CleoInstallOptions) => {\n await executeCleoInstall(\"install\", opts, \"mcp.cleo.install\");\n });\n\n buildInstallOptions(\n cleo\n .command(\"update\")\n .description(\"Update CLEO MCP profile by channel\"),\n ).action(async (opts: CleoInstallOptions) => {\n await executeCleoInstall(\"update\", opts, \"mcp.cleo.update\");\n });\n\n cleo\n .command(\"uninstall\")\n .description(\"Uninstall CLEO MCP profile for a channel\")\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoUninstallOptions) => {\n await executeCleoUninstall(opts, \"mcp.cleo.uninstall\");\n });\n\n cleo\n .command(\"show\")\n .description(\"Show installed CLEO MCP channel profiles\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Inspect all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--channel <channel>\", \"Filter channel: stable|beta|dev\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoShowOptions) => {\n await executeCleoShow(opts, \"mcp.cleo.show\");\n });\n\n cleo\n .command(\"repair\")\n .description(\"Repair lock file by backfilling untracked CLEO entries\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Scan all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--prune\", \"Remove orphaned lock entries not in any config\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoRepairOptions) => {\n await executeCleoRepair(opts, \"mcp.cleo.repair\");\n });\n}\n\nexport function registerMcpCleoCompatibilityCommands(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update channel-managed MCP profile\")\n .argument(\"<name>\", \"Managed MCP profile name (cleo)\")\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--version <tag>\", \"Tag/version for stable or beta\")\n .option(\"--command <command>\", \"Dev channel command\")\n .option(\"--arg <arg>\", \"Dev command arg (repeatable)\", collect, [])\n .option(\"--env <kv>\", \"Environment assignment KEY=value (repeatable)\", collect, [])\n .option(\"--cleo-dir <path>\", \"CLEO_DIR override for dev channel\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string, opts: CleoInstallOptions) => {\n if (name !== \"cleo\") {\n emitJsonError(\"mcp.update\", \"standard\", ErrorCodes.INVALID_INPUT, \"Only managed profile 'cleo' is supported by mcp update.\", ErrorCategories.VALIDATION, { name });\n process.exit(1);\n }\n await executeCleoInstall(\"update\", opts, \"mcp.update\");\n });\n\n parent\n .command(\"uninstall\")\n .description(\"Uninstall channel-managed MCP profile\")\n .argument(\"<name>\", \"Managed MCP profile name (cleo)\")\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string, opts: CleoUninstallOptions) => {\n if (name !== \"cleo\") {\n emitJsonError(\"mcp.uninstall\", \"standard\", ErrorCodes.INVALID_INPUT, \"Only managed profile 'cleo' is supported by mcp uninstall.\", ErrorCategories.VALIDATION, { name });\n process.exit(1);\n }\n await executeCleoUninstall(opts, \"mcp.uninstall\");\n });\n\n parent\n .command(\"show\")\n .description(\"Show channel-managed MCP profile\")\n .argument(\"<name>\", \"Managed MCP profile name (cleo)\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Inspect all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--channel <channel>\", \"Filter channel: stable|beta|dev\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string, opts: CleoShowOptions) => {\n if (name !== \"cleo\") {\n emitJsonError(\"mcp.show\", \"standard\", ErrorCodes.INVALID_INPUT, \"Only managed profile 'cleo' is supported by mcp show.\", ErrorCategories.VALIDATION, { name });\n process.exit(1);\n }\n await executeCleoShow(opts, \"mcp.show\");\n });\n}\n\nexport function mapCompatibilityInstallOptions(\n opts: {\n channel?: string;\n provider?: string[];\n agent?: string[];\n all?: boolean;\n global?: boolean;\n version?: string;\n command?: string;\n arg?: string[];\n env?: string[];\n cleoDir?: string;\n dryRun?: boolean;\n yes?: boolean;\n interactive?: boolean;\n json?: boolean;\n human?: boolean;\n },\n): CleoInstallOptions {\n return {\n channel: opts.channel,\n provider: [...(opts.provider ?? []), ...(opts.agent ?? [])],\n all: opts.all,\n global: opts.global,\n version: opts.version,\n command: opts.command,\n arg: opts.arg ?? [],\n env: opts.env ?? [],\n cleoDir: opts.cleoDir,\n dryRun: opts.dryRun,\n yes: opts.yes,\n interactive: opts.interactive,\n json: opts.json,\n human: opts.human,\n };\n}\n\nexport function shouldUseCleoCompatibilityInstall(source: string, channel?: string): boolean {\n if (source.trim().toLowerCase() !== \"cleo\") return false;\n return typeof channel === \"string\" && channel.trim() !== \"\";\n}\n\nexport function registerCleoCommands(program: Command): void {\n const cleo = program\n .command(\"cleo\")\n .description(\"Manage CLEO channel profiles\");\n\n buildInstallOptions(\n cleo\n .command(\"install\")\n .description(\"Install CLEO profile by channel\"),\n ).action(async (opts: CleoInstallOptions) => {\n await executeCleoInstall(\"install\", opts, \"cleo.install\");\n });\n\n buildInstallOptions(\n cleo\n .command(\"update\")\n .description(\"Update CLEO profile by channel\"),\n ).action(async (opts: CleoInstallOptions) => {\n await executeCleoInstall(\"update\", opts, \"cleo.update\");\n });\n\n cleo\n .command(\"uninstall\")\n .description(\"Uninstall CLEO profile for a channel\")\n .requiredOption(\"--channel <channel>\", \"CLEO channel: stable|beta|dev\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Apply to all detected providers\")\n .option(\"-g, --global\", \"Use global scope\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoUninstallOptions) => {\n await executeCleoUninstall(opts, \"cleo.uninstall\");\n });\n\n cleo\n .command(\"show\")\n .description(\"Show installed CLEO channel profiles\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Inspect all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--channel <channel>\", \"Filter channel: stable|beta|dev\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoShowOptions) => {\n await executeCleoShow(opts, \"cleo.show\");\n });\n\n cleo\n .command(\"repair\")\n .description(\"Repair lock file by backfilling untracked CLEO entries\")\n .option(\"--provider <id>\", \"Target provider (repeatable)\", collect, [])\n .option(\"--all\", \"Scan all detected providers\")\n .option(\"-g, --global\", \"Global scope only\")\n .option(\"-p, --project\", \"Project scope only\")\n .option(\"--prune\", \"Remove orphaned lock entries not in any config\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: CleoRepairOptions) => {\n await executeCleoRepair(opts, \"cleo.repair\");\n });\n}\n\nexport { resolveCleoServerName };\n","/**\n * mcp detect command - auto-detect installed MCP tools - LAFS-compliant with JSON-first output\n */\n\nimport { existsSync } from \"node:fs\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { listMcpServers, resolveConfigPath } from \"../../core/mcp/reader.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { json?: boolean; human?: boolean }) => {\n const operation = \"mcp.detect\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const providers = getInstalledProviders();\n\n const providersResult: Array<{\n id: string;\n configsFound: number;\n servers: string[];\n }> = [];\n let totalConfigs = 0;\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 const configsFound = \n (globalPath && existsSync(globalPath) ? 1 : 0) +\n (projectPath && existsSync(projectPath) ? 1 : 0);\n \n totalConfigs += configsFound;\n\n const allServers = [...globalEntries.map(e => e.name), ...projectEntries.map(e => e.name)];\n\n providersResult.push({\n id: provider.id,\n configsFound,\n servers: allServers,\n });\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n providers: providersResult,\n totalConfigs,\n });\n return;\n }\n\n // Human-readable output\n console.log(pc.bold(`\\n${providers.length} provider(s) with MCP support:\\n`));\n\n for (const provider of providersResult) {\n const globalPath = resolveConfigPath(providers.find(p => p.id === provider.id)!, \"global\");\n const projectPath = resolveConfigPath(providers.find(p => p.id === provider.id)!, \"project\");\n \n const hasGlobal = globalPath && existsSync(globalPath);\n const hasProject = projectPath && existsSync(projectPath);\n \n const globalIcon = hasGlobal ? pc.green(\"G\") : pc.dim(\"-\");\n const projectIcon = hasProject ? pc.green(\"P\") : pc.dim(\"-\");\n const serverList = provider.servers.length > 0 ? pc.dim(provider.servers.join(\", \")) : pc.dim(\"no servers\");\n\n console.log(` [${globalIcon}${projectIcon}] ${pc.bold(provider.id.padEnd(20))} ${serverList}`);\n }\n\n console.log(pc.dim(\"\\nG = global config, P = project config\"));\n console.log();\n });\n}\n","/**\n * mcp install command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { buildServerConfig, installMcpServerToAll } 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 { parseSource } from \"../../core/sources/parser.js\";\nimport type { Provider } from \"../../types.js\";\nimport {\n executeCleoInstall,\n mapCompatibilityInstallOptions,\n shouldUseCleoCompatibilityInstall,\n} from \"./cleo.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(\"--provider <id>\", \"Target provider ID (alias for --agent)\", (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(\"--channel <channel>\", \"Managed channel profile (stable|beta|dev)\")\n .option(\"--version <tag>\", \"Managed profile tag/version for stable or beta\")\n .option(\"--command <command>\", \"Managed dev profile command\")\n .option(\"--arg <arg>\", \"Managed dev command arg (repeatable)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--env <kv>\", \"Managed env assignment KEY=value (repeatable)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"--cleo-dir <path>\", \"Managed dev CLEO_DIR override\")\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(\"--interactive\", \"Guided interactive setup for managed profiles\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (source: string, opts: {\n agent: string[];\n provider: string[];\n global?: boolean;\n name?: string;\n channel?: string;\n version?: string;\n command?: string;\n arg: string[];\n env: string[];\n cleoDir?: string;\n transport: string;\n header: string[];\n yes?: boolean;\n all?: boolean;\n interactive?: boolean;\n dryRun?: boolean;\n json?: boolean;\n human?: boolean;\n }) => {\n const operation = \"mcp.install\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n if (shouldUseCleoCompatibilityInstall(source, opts.channel)) {\n const cleoOpts = mapCompatibilityInstallOptions(opts);\n await executeCleoInstall(\"install\", cleoOpts, operation);\n return;\n }\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 if (opts.provider.length > 0) {\n providers = opts.provider\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 const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n if (opts.dryRun) {\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n installed: [{\n name: serverName,\n providers: providers.map((p) => p.id),\n config,\n }],\n dryRun: true,\n });\n } else {\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 }\n return;\n }\n\n if (format === \"human\") {\n console.log(pc.dim(`Installing \"${serverName}\" to ${providers.length} provider(s)...\\n`));\n }\n\n const results = await installMcpServerToAll(\n providers,\n serverName,\n config,\n scope,\n );\n\n const succeeded = results.filter((r) => r.success);\n const failed = results.filter((r) => !r.success);\n\n if (format === \"human\") {\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\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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n installed: succeeded.map((r) => ({\n name: serverName,\n providers: [r.provider.id],\n config,\n })),\n dryRun: false,\n });\n } else {\n console.log(pc.bold(`\\n${succeeded.length}/${results.length} providers configured.`));\n }\n });\n}\n","/**\n * mcp list command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { listMcpServers } from \"../../core/mcp/reader.js\";\nimport { resolvePreferredConfigScope } from \"../../core/paths/standard.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.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(\"--provider <id>\", \"Provider ID alias for --agent\")\n .option(\"-g, --global\", \"List global config\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { agent?: string; provider?: string; global?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"mcp.list\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const selectedProvider = opts.provider ?? opts.agent;\n\n const providers = selectedProvider\n ? [getProvider(selectedProvider)].filter((p): p is NonNullable<typeof p> => p !== undefined)\n : getInstalledProviders();\n\n if (selectedProvider && providers.length === 0) {\n const message = `Provider not found: ${selectedProvider}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n provider: selectedProvider,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const allEntries: Array<{\n name: string;\n command?: string;\n scope: \"global\" | \"project\";\n }> = [];\n\n for (const provider of providers) {\n const scope = resolvePreferredConfigScope(provider, opts.global);\n\n const entries = await listMcpServers(provider, scope);\n for (const entry of entries) {\n allEntries.push({\n name: entry.name,\n command: typeof entry.config.command === \"string\" ? entry.config.command : undefined,\n scope,\n });\n }\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n servers: allEntries,\n count: allEntries.length,\n scope: opts.global ? \"global\" : selectedProvider ? `agent:${selectedProvider}` : \"project\",\n });\n return;\n }\n\n // Human-readable output\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 const scopeIndicator = entry.scope === \"global\" ? pc.dim(\"[G] \") : pc.dim(\"[P] \");\n console.log(` ${scopeIndicator}${pc.bold(entry.name.padEnd(25))} ${entry.command ? pc.dim(entry.command) : \"\"}`);\n }\n\n console.log();\n console.log(pc.dim(\"G = global config, P = project config\"));\n console.log();\n });\n}\n","/**\n * mcp remove command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { removeMcpFromLock } from \"../../core/mcp/lock.js\";\nimport { removeMcpServer } from \"../../core/mcp/reader.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.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(\"--provider <id>\", \"Target provider ID (alias for --agent)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Remove from global config\")\n .option(\"--all\", \"Remove from all detected agents\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string, opts: {\n agent: string[];\n provider: string[];\n global?: boolean;\n all?: boolean;\n json?: boolean;\n human?: boolean;\n }) => {\n const operation = \"mcp.remove\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\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 if (opts.provider.length > 0) {\n providers = opts.provider\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 const message = \"No target providers found.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const removed: string[] = [];\n const notFound: string[] = [];\n\n for (const provider of providers) {\n const success = await removeMcpServer(provider, name, scope);\n if (success) {\n removed.push(provider.id);\n if (format === \"human\") {\n console.log(` ${pc.green(\"✓\")} Removed from ${provider.toolName}`);\n }\n } else {\n notFound.push(provider.id);\n }\n }\n\n if (removed.length > 0) {\n await removeMcpFromLock(name);\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n removed,\n providers: removed,\n notFound: notFound.length > 0 ? notFound : undefined,\n });\n } else {\n if (removed.length > 0) {\n console.log(pc.green(`\\n✓ Removed \"${name}\" from ${removed.length} provider(s).`));\n } else {\n console.log(pc.yellow(`Server \"${name}\" not found in any provider config.`));\n }\n }\n });\n}\n","/**\n * MCP command group registration\n */\n\nimport type { Command } from \"commander\";\nimport { registerMcpCleoCommands, registerMcpCleoCompatibilityCommands } from \"./cleo.js\";\nimport { registerMcpDetect } from \"./detect.js\";\nimport { registerMcpInstall } from \"./install.js\";\nimport { registerMcpList } from \"./list.js\";\nimport { registerMcpRemove } from \"./remove.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 registerMcpCleoCommands(mcp);\n registerMcpCleoCompatibilityCommands(mcp);\n}\n","/**\n * providers list|detect|show commands - LAFS-compliant with JSON-first output\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { isHuman } from \"../core/logger.js\";\nimport { detectAllProviders, detectProjectProviders } from \"../core/registry/detection.js\";\nimport {\n buildSkillsMap,\n getAllProviders,\n getCommonHookEvents,\n getProvider,\n getProviderCount,\n getProvidersByHookEvent,\n getProvidersByPriority,\n getRegistryVersion,\n providerSupports,\n} from \"../core/registry/providers.js\";\nimport type { HookEvent } from \"../core/registry/types.js\";\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\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--tier <tier>\", \"Filter by priority tier (high, medium, low)\")\n .action(async (opts: { json?: boolean; human?: boolean; tier?: string }) => {\n const operation = \"providers.list\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n const all = opts.tier\n ? getProvidersByPriority(opts.tier as \"high\" | \"medium\" | \"low\")\n : getAllProviders();\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n providers: all,\n count: all.length,\n version: getRegistryVersion(),\n tier: opts.tier || null,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--project\", \"Include project-level detection\")\n .action(async (opts: { json?: boolean; human?: boolean; project?: boolean }) => {\n const operation = \"providers.detect\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n const results = opts.project\n ? detectProjectProviders(process.cwd())\n : detectAllProviders();\n\n const installed = results.filter((r) => r.installed);\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n installed: installed.map((r) => ({\n id: r.provider.id,\n toolName: r.provider.toolName,\n methods: r.methods,\n projectDetected: r.projectDetected,\n })),\n notInstalled: results.filter((r) => !r.installed).map((r) => r.provider.id),\n count: {\n installed: installed.length,\n total: results.length,\n },\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (id: string, opts: { json?: boolean; human?: boolean }) => {\n const operation = \"providers.show\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n const provider = getProvider(id);\n\n if (!provider) {\n const message = `Provider not found: ${id}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, \"E_PROVIDER_NOT_FOUND\", message, \"NOT_FOUND\", {\n id,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n provider,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\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 providers\n .command(\"skills-map\")\n .description(\"Show skills path map for all providers\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--provider <id>\", \"Filter to a specific provider\")\n .action(async (opts: { json?: boolean; human?: boolean; provider?: string }) => {\n const operation = \"providers.skills-map\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n let map = buildSkillsMap();\n\n if (opts.provider) {\n map = map.filter((entry) => entry.providerId === opts.provider);\n if (map.length === 0) {\n const message = `Provider not found: ${opts.provider}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, \"E_PROVIDER_NOT_FOUND\", message, \"NOT_FOUND\", {\n id: opts.provider,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n }\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n skillsMap: map,\n count: map.length,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\n console.log(pc.bold(\"\\nProvider Skills Map\\n\"));\n\n // Table header\n console.log(\n ` ${pc.bold(\"Provider\".padEnd(22))} ${pc.bold(\"Precedence\".padEnd(30))} ${pc.bold(\"Global Path\".padEnd(40))} ${pc.bold(\"Project Path\")}`,\n );\n console.log(` ${\"─\".repeat(22)} ${\"─\".repeat(30)} ${\"─\".repeat(40)} ${\"─\".repeat(30)}`);\n\n for (const entry of map) {\n console.log(\n ` ${entry.toolName.padEnd(22)} ${entry.precedence.padEnd(30)} ${(entry.paths.global ?? \"-\").padEnd(40)} ${entry.paths.project ?? \"-\"}`,\n );\n }\n\n console.log(pc.dim(`\\n ${map.length} providers shown`));\n console.log();\n });\n\n providers\n .command(\"hooks\")\n .description(\"Show provider hook event support\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--event <event>\", \"Filter to providers supporting a specific hook event\")\n .option(\"--common\", \"Show hook events common to all providers\")\n .action(async (opts: { json?: boolean; human?: boolean; event?: string; common?: boolean }) => {\n const operation = \"providers.hooks\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n if (opts.event) {\n const event = opts.event as HookEvent;\n const matching = getProvidersByHookEvent(event);\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n event,\n providers: matching.map((p) => ({\n id: p.id,\n toolName: p.toolName,\n supportedEvents: p.capabilities.hooks.supported,\n })),\n count: matching.length,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nProviders supporting ${pc.green(event)}:\\n`));\n if (matching.length === 0) {\n console.log(pc.dim(\" No providers support this event.\"));\n } else {\n for (const p of matching) {\n console.log(` ${pc.bold(p.toolName.padEnd(22))} ${pc.dim(p.id)}`);\n }\n }\n console.log();\n return;\n }\n\n if (opts.common) {\n const common = getCommonHookEvents();\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n commonEvents: common,\n count: common.length,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n console.log(pc.bold(\"\\nHook events common to all providers:\\n\"));\n if (common.length === 0) {\n console.log(pc.dim(\" No events are common to all providers.\"));\n } else {\n for (const event of common) {\n console.log(` ${pc.green(event)}`);\n }\n }\n console.log();\n return;\n }\n\n // Default: show all providers with their hook events\n const all = getAllProviders();\n const withHooks = all.filter((p) => p.capabilities.hooks.supported.length > 0);\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n providers: all.map((p) => ({\n id: p.id,\n toolName: p.toolName,\n supportedEvents: p.capabilities.hooks.supported,\n })),\n withHooksCount: withHooks.length,\n totalCount: all.length,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nProvider Hook Support\\n`));\n\n if (withHooks.length === 0) {\n console.log(pc.dim(\" No providers have hook support.\"));\n } else {\n for (const p of withHooks) {\n console.log(` ${pc.bold(p.toolName.padEnd(22))} ${pc.dim(p.capabilities.hooks.supported.join(\", \"))}`);\n }\n }\n\n const withoutHooks = all.length - withHooks.length;\n if (withoutHooks > 0) {\n console.log(pc.dim(`\\n ${withoutHooks} providers without hook support`));\n }\n console.log();\n });\n\n providers\n .command(\"capabilities\")\n .description(\"Show provider capability matrix\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .option(\"--filter <path>\", \"Filter to providers supporting a capability dot-path (e.g. spawn.supportsSubagents)\")\n .action(async (opts: { json?: boolean; human?: boolean; filter?: string }) => {\n const operation = \"providers.capabilities\";\n const mvi: import(\"../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n let all = getAllProviders();\n\n if (opts.filter) {\n all = all.filter((p) => providerSupports(p, opts.filter!));\n }\n\n const matrix = all.map((p) => ({\n id: p.id,\n toolName: p.toolName,\n skillsPrecedence: p.capabilities.skills.precedence,\n hooksCount: p.capabilities.hooks.supported.length,\n spawnMechanism: p.capabilities.spawn.spawnMechanism,\n spawnFlags: {\n supportsSubagents: p.capabilities.spawn.supportsSubagents,\n supportsProgrammaticSpawn: p.capabilities.spawn.supportsProgrammaticSpawn,\n supportsInterAgentComms: p.capabilities.spawn.supportsInterAgentComms,\n supportsParallelSpawn: p.capabilities.spawn.supportsParallelSpawn,\n },\n }));\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n capabilities: matrix,\n count: matrix.length,\n filter: opts.filter || null,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\n console.log(pc.bold(\"\\nProvider Capability Matrix\\n\"));\n\n if (opts.filter) {\n console.log(pc.dim(` Filter: ${opts.filter}\\n`));\n }\n\n // Table header\n console.log(\n ` ${pc.bold(\"Provider\".padEnd(22))} ${pc.bold(\"Skills Precedence\".padEnd(20))} ${pc.bold(\"Hooks\".padEnd(8))} ${pc.bold(\"Spawn\")}`,\n );\n console.log(` ${\"─\".repeat(22)} ${\"─\".repeat(20)} ${\"─\".repeat(8)} ${\"─\".repeat(20)}`);\n\n for (const row of matrix) {\n const hooks = row.hooksCount > 0 ? String(row.hooksCount) : \"-\";\n const spawn = row.spawnMechanism ?? \"-\";\n console.log(\n ` ${row.toolName.padEnd(22)} ${row.skillsPrecedence.padEnd(20)} ${hooks.padEnd(8)} ${spawn}`,\n );\n }\n\n console.log(pc.dim(`\\n ${matrix.length} providers shown`));\n console.log();\n });\n}\n\nfunction buildEnvelope<T>(\n operation: string,\n mvi: import(\"../core/lafs.js\").MVILevel,\n result: T | null,\n error: LAFSErrorShape | null,\n) {\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: import(\"../core/lafs.js\").MVILevel,\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 install command - LAFS-compliant with JSON-first output\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitError,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n type MVILevel,\n} from \"../../core/lafs.js\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport type { MarketplaceResult } from \"../../core/marketplace/types.js\";\nimport { formatNetworkError } from \"../../core/network/fetch.js\";\nimport { buildSkillSubPathCandidates } from \"../../core/paths/standard.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport * as catalog from \"../../core/skills/catalog.js\";\nimport { discoverSkill } from \"../../core/skills/discovery.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { isMarketplaceScoped, parseSource } from \"../../core/sources/parser.js\";\nimport type { Provider, SourceType } from \"../../types.js\";\n\ninterface InstallResultItem {\n name: string;\n scopedName: string;\n canonicalPath: string;\n providers: string[];\n}\n\ninterface FailedResultItem {\n name: string;\n error: string;\n}\n\ninterface InstallSummary {\n installed: InstallResultItem[];\n failed: FailedResultItem[];\n count: {\n installed: number;\n failed: number;\n total: number;\n };\n}\n\nexport function registerSkillsInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install a skill from GitHub, URL, marketplace, or registered skill library\")\n .argument(\"[source]\", \"Skill source (GitHub URL, owner/repo, @author/name, skill-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 .option(\"--profile <name>\", \"Install a skill library profile (minimal, core, recommended, full)\")\n .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (source: string | undefined, opts: {\n agent: string[];\n global?: boolean;\n yes?: boolean;\n all?: boolean;\n profile?: string;\n json?: boolean;\n human?: boolean;\n }) => {\n const operation = \"skills.install\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: opts.human ?? false,\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\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 const message = \"No target providers found. Use --agent or --all.\";\n if (format === \"json\") {\n emitError(operation, mvi, ErrorCodes.PROVIDER_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n\n // Handle --profile: install an entire skill library profile\n if (opts.profile) {\n await handleProfileInstall(opts.profile, providers, opts.global ?? false, format, operation, mvi);\n return;\n }\n\n // Require source when not using --profile\n if (!source) {\n const message = \"Missing required argument: source\";\n if (format === \"json\") {\n emitError(operation, mvi, ErrorCodes.INVALID_INPUT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n console.log(pc.dim(\"Usage: caamp skills install <source> or caamp skills install --profile <name>\"));\n process.exit(1);\n }\n\n if (format === \"human\") {\n console.log(pc.dim(`Installing to ${providers.length} provider(s)...`));\n }\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 const sourceResult = await handleMarketplaceSource(\n source,\n providers,\n opts.global ?? false,\n format,\n operation,\n mvi,\n );\n\n if (sourceResult.success) {\n localPath = sourceResult.localPath;\n cleanup = sourceResult.cleanup;\n skillName = sourceResult.skillName;\n sourceValue = sourceResult.sourceValue;\n sourceType = sourceResult.sourceType;\n } else {\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 const message = `Failed to clone GitHub repository: ${formatNetworkError(error)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.NETWORK_ERROR, message, ErrorCategories.TRANSIENT);\n }\n console.error(pc.red(message));\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 const message = `Failed to clone GitLab repository: ${formatNetworkError(error)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.NETWORK_ERROR, message, ErrorCategories.TRANSIENT);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n } else if (parsed.type === \"local\") {\n localPath = parsed.value;\n // Read SKILL.md for the authoritative name\n const discovered = await discoverSkill(localPath);\n if (discovered) {\n skillName = discovered.name;\n }\n } else if (parsed.type === \"package\") {\n // Check registered skill library for this skill name\n if (!catalog.isCatalogAvailable()) {\n const message = \"No skill library registered. Register one with registerSkillLibraryFromPath() or set CAAMP_SKILL_LIBRARY env var.\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INVALID_INPUT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n const catalogSkill = catalog.getSkill(parsed.inferredName);\n if (catalogSkill) {\n localPath = catalog.getSkillDir(catalogSkill.name);\n skillName = catalogSkill.name;\n sourceValue = `library:${catalogSkill.name}`;\n sourceType = \"library\";\n if (format === \"human\") {\n console.log(` Found in catalog: ${pc.bold(catalogSkill.name)} v${catalogSkill.version} (${pc.dim(catalogSkill.category)})`);\n }\n } else {\n const message = `Skill not found in catalog: ${parsed.inferredName}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.SKILL_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n availableSkills: catalog.listSkills(),\n });\n }\n console.error(pc.red(message));\n console.log(pc.dim(\"Available skills: \" + catalog.listSkills().join(\", \")));\n process.exit(1);\n }\n } else {\n const message = `Unsupported source type: ${parsed.type}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INVALID_FORMAT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n }\n\n try {\n if (!localPath) {\n const message = \"No local skill path resolved for installation\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INTERNAL_ERROR, message, ErrorCategories.INTERNAL);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n\n const result = await installSkill(\n localPath,\n skillName!,\n providers,\n opts.global ?? false,\n );\n\n if (result.success) {\n // Record in lock file\n const isGlobal = (sourceType === \"library\" || sourceType === \"package\") ? true : (opts.global ?? false);\n await recordSkillInstall(\n skillName!,\n sourceValue,\n sourceValue,\n sourceType,\n result.linkedAgents,\n result.canonicalPath,\n isGlobal,\n );\n\n const installedItem: InstallResultItem = {\n name: skillName!,\n scopedName: sourceValue,\n canonicalPath: result.canonicalPath,\n providers: result.linkedAgents,\n };\n\n const summary: InstallSummary = {\n installed: [installedItem],\n failed: [],\n count: {\n installed: 1,\n failed: 0,\n total: 1,\n },\n };\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, summary);\n } else {\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 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 }\n } else {\n const summary: InstallSummary = {\n installed: [],\n failed: [{\n name: skillName!,\n error: result.errors.join(\", \"),\n }],\n count: {\n installed: 0,\n failed: 1,\n total: 1,\n },\n };\n\n if (format === \"json\") {\n const envelope = buildEnvelope(operation, mvi, summary, {\n code: ErrorCodes.INSTALL_FAILED,\n message: result.errors.join(\", \"),\n category: ErrorCategories.INTERNAL,\n retryable: false,\n retryAfterMs: null,\n details: { skillName, sourceValue },\n });\n console.error(JSON.stringify(envelope, null, 2));\n } else {\n console.log(pc.yellow(`\\n✗ Failed to install ${pc.bold(skillName)}`));\n console.log(pc.yellow(\"Errors:\"));\n for (const err of result.errors) {\n console.log(` ${pc.yellow(\"!\")} ${err}`);\n }\n }\n process.exit(1);\n }\n } finally {\n if (cleanup) await cleanup();\n }\n });\n}\n\nasync function handleProfileInstall(\n profileName: string,\n providers: Provider[],\n isGlobal: boolean,\n format: \"json\" | \"human\",\n operation: string,\n mvi: MVILevel,\n): Promise<void> {\n if (!catalog.isCatalogAvailable()) {\n const message = \"No skill library registered. Register one with registerSkillLibraryFromPath() or set CAAMP_SKILL_LIBRARY env var.\";\n if (format === \"json\") {\n emitError(operation, mvi, ErrorCodes.INVALID_INPUT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n process.exit(1);\n }\n\n const profileSkills = catalog.resolveProfile(profileName);\n if (profileSkills.length === 0) {\n const message = `Profile not found: ${profileName}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.SKILL_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n availableProfiles: catalog.listProfiles(),\n });\n }\n console.error(pc.red(message));\n const available = catalog.listProfiles();\n if (available.length > 0) {\n console.log(pc.dim(\"Available profiles: \" + available.join(\", \")));\n }\n process.exit(1);\n }\n\n if (format === \"human\") {\n console.log(`Installing profile ${pc.bold(profileName)} (${profileSkills.length} skill(s))...`);\n console.log(pc.dim(`Target: ${providers.length} provider(s)`));\n }\n\n const installed: InstallResultItem[] = [];\n const failed: FailedResultItem[] = [];\n\n for (const name of profileSkills) {\n const skillDir = catalog.getSkillDir(name);\n try {\n const result = await installSkill(\n skillDir,\n name,\n providers,\n isGlobal,\n );\n\n if (result.success) {\n if (format === \"human\") {\n console.log(pc.green(` + ${name}`));\n }\n await recordSkillInstall(\n name,\n `library:${name}`,\n `library:${name}`,\n \"library\",\n result.linkedAgents,\n result.canonicalPath,\n true,\n );\n installed.push({\n name,\n scopedName: `library:${name}`,\n canonicalPath: result.canonicalPath,\n providers: result.linkedAgents,\n });\n } else {\n if (format === \"human\") {\n console.log(pc.yellow(` ! ${name}: ${result.errors.join(\", \")}`));\n }\n failed.push({\n name,\n error: result.errors.join(\", \"),\n });\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n if (format === \"human\") {\n console.log(pc.red(` x ${name}: ${errorMsg}`));\n }\n failed.push({\n name,\n error: errorMsg,\n });\n }\n }\n\n const summary: InstallSummary = {\n installed,\n failed,\n count: {\n installed: installed.length,\n failed: failed.length,\n total: profileSkills.length,\n },\n };\n\n if (format === \"json\") {\n if (failed.length > 0) {\n const envelope = buildEnvelope(operation, mvi, summary, {\n code: ErrorCodes.INSTALL_FAILED,\n message: `${failed.length} skill(s) failed to install`,\n category: ErrorCategories.INTERNAL,\n retryable: false,\n retryAfterMs: null,\n details: { failed: failed.map(f => f.name) },\n });\n console.error(JSON.stringify(envelope, null, 2));\n process.exit(1);\n } else {\n outputSuccess(operation, mvi, summary);\n }\n } else {\n console.log(`\\n${pc.green(`${installed.length} installed`)}, ${failed.length > 0 ? pc.yellow(`${failed.length} failed`) : \"0 failed\"}`);\n if (failed.length > 0) {\n process.exit(1);\n }\n }\n}\n\ninterface MarketplaceSourceSuccess {\n success: true;\n localPath: string;\n cleanup: () => Promise<void>;\n skillName: string;\n sourceValue: string;\n sourceType: SourceType;\n}\n\ninterface MarketplaceSourceError {\n success: false;\n}\n\ntype MarketplaceSourceResult = MarketplaceSourceSuccess | MarketplaceSourceError;\n\nasync function handleMarketplaceSource(\n source: string,\n _providers: Provider[],\n _isGlobal: boolean,\n format: \"json\" | \"human\",\n operation: string,\n mvi: MVILevel,\n): Promise<MarketplaceSourceResult> {\n if (format === \"human\") {\n console.log(pc.dim(`Searching marketplace for ${source}...`));\n }\n\n const client = new MarketplaceClient();\n let skill: import(\"../../core/marketplace/types.js\").MarketplaceResult | null;\n\n try {\n skill = await client.getSkill(source);\n } catch (error) {\n const message = `Marketplace lookup failed: ${formatNetworkError(error)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.NETWORK_ERROR, message, ErrorCategories.TRANSIENT);\n }\n console.error(pc.red(message));\n return { success: false };\n }\n\n if (!skill) {\n const message = `Skill not found: ${source}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.SKILL_NOT_FOUND, message, ErrorCategories.NOT_FOUND);\n }\n console.error(pc.red(message));\n return { success: false };\n }\n\n if (format === \"human\") {\n console.log(` Found: ${pc.bold(skill.name)} by ${skill.author} (${pc.dim(skill.repoFullName)})`);\n }\n\n const parsed = parseSource(skill.githubUrl);\n if (parsed.type !== \"github\" || !parsed.owner || !parsed.repo) {\n const message = \"Could not resolve GitHub source\";\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INVALID_FORMAT, message, ErrorCategories.VALIDATION);\n }\n console.error(pc.red(message));\n return { success: false };\n }\n\n try {\n const subPathCandidates = buildSkillSubPathCandidates(skill.path, parsed.path);\n let cloneError: unknown;\n let cloned = false;\n let localPath: string | undefined;\n let cleanup: (() => Promise<void>) | undefined;\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 return {\n success: true,\n localPath: localPath!,\n cleanup: cleanup!,\n skillName: skill.name,\n sourceValue: skill.githubUrl,\n sourceType: parsed.type,\n };\n } catch (error) {\n const message = `Failed to fetch source repository: ${formatNetworkError(error)}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.NETWORK_ERROR, message, ErrorCategories.TRANSIENT);\n }\n console.error(pc.red(message));\n return { success: false };\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 { fetchWithTimeout } from \"../network/fetch.js\";\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 fetchWithTimeout(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 fetchWithTimeout(`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\";\nimport { fetchWithTimeout } from \"../network/fetch.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 fetchWithTimeout(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n","/**\n * skills remove command - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { listCanonicalSkills, removeSkill } from \"../../core/skills/installer.js\";\nimport { removeSkillFromLock } from \"../../core/skills/lock.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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string | undefined, opts: { global?: boolean; yes?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"skills.remove\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const providers = getInstalledProviders();\n\n if (name) {\n const result = await removeSkill(name, providers, opts.global ?? false);\n\n const removed = result.removed;\n const count = {\n removed: removed.length,\n total: providers.length,\n };\n\n if (format === \"json\") {\n if (removed.length > 0) {\n await removeSkillFromLock(name);\n }\n\n const errors = result.errors.length > 0\n ? result.errors.map((err) => ({ message: err }))\n : undefined;\n\n outputSuccess(operation, mvi, {\n removed,\n providers: providers.map((p) => p.id),\n count,\n ...(errors && { errors }),\n });\n return;\n }\n\n // Human-readable output\n if (removed.length > 0) {\n console.log(pc.green(`✓ Removed ${pc.bold(name)} from: ${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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n removed: [],\n providers: [],\n count: { removed: 0, total: 0 },\n });\n } else {\n console.log(pc.dim(\"No skills installed.\"));\n }\n return;\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n removed: [],\n providers: [],\n count: { removed: 0, total: 0 },\n available: skills,\n });\n return;\n }\n\n // Human-readable output\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 - LAFS-compliant with JSON-first output\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { resolveProviderSkillsDir } from \"../../core/paths/standard.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { discoverSkillsMulti } from \"../../core/skills/discovery.js\";\n\ninterface SkillsListOptions {\n global?: boolean;\n agent?: string;\n json?: boolean;\n human?: boolean;\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\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: SkillsListOptions) => {\n const operation = \"skills.list\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, \"E_FORMAT_CONFLICT\", message, \"VALIDATION\");\n process.exit(1);\n }\n\n let dirs: string[] = [];\n\n if (opts.agent) {\n const provider = getProvider(opts.agent);\n if (!provider) {\n const message = `Provider not found: ${opts.agent}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, \"E_PROVIDER_NOT_FOUND\", message, \"NOT_FOUND\", {\n agent: opts.agent,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n dirs = opts.global\n ? [resolveProviderSkillsDir(provider, \"global\")]\n : [resolveProviderSkillsDir(provider, \"project\")];\n } else if (opts.global) {\n const providers = getInstalledProviders();\n dirs = providers.map((p) => resolveProviderSkillsDir(p, \"global\")).filter(Boolean);\n } else {\n const providers = getInstalledProviders();\n dirs = providers\n .map((p) => resolveProviderSkillsDir(p, \"project\"))\n .filter(Boolean);\n }\n\n const skills = await discoverSkillsMulti(dirs);\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n skills,\n count: skills.length,\n scope: opts.global ? \"global\" : opts.agent ? `agent:${opts.agent}` : \"project\",\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n // Human-readable output\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 skills.forEach((skill, index) => {\n const num = (index + 1).toString().padStart(2);\n console.log(` ${pc.cyan(num)}. ${pc.bold(skill.name.padEnd(30))} ${pc.dim(skill.metadata?.description ?? \"\")}`);\n });\n\n console.log(pc.dim(`\\nInstall with: caamp skills install <name>`));\n console.log(pc.dim(`Remove with: caamp skills remove <name>`));\n });\n}\n\nfunction buildEnvelope<T>(\n operation: string,\n mvi: import(\"../../core/lafs.js\").MVILevel,\n result: T | null,\n error: LAFSErrorShape | null,\n) {\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: import(\"../../core/lafs.js\").MVILevel,\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 find command - marketplace search + recommendation mode\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport {\n type LAFSErrorCategory,\n resolveOutputFormat,\n} from \"@cleocode/lafs-protocol\";\nimport type { MVILevel } from \"../../core/lafs.js\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport type { MarketplaceResult } from \"../../core/marketplace/types.js\";\nimport { formatNetworkError } from \"../../core/network/fetch.js\";\nimport {\n type RankedSkillRecommendation,\n RECOMMENDATION_ERROR_CODES,\n tokenizeCriteriaValue,\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\nimport type { LAFSErrorShape } from \"../../core/lafs.js\";\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: MVILevel = details ? \"full\" : \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\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 emitJsonError(operation, mvi, \"E_SEARCH_FAILED\", message, \"TRANSIENT\", {\n query,\n limit,\n });\n } else {\n console.error(pc.red(`Marketplace search failed: ${message}`));\n }\n process.exit(1);\n }\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n query,\n results,\n count: results.length,\n limit,\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n return;\n }\n\n if (results.length === 0) {\n console.log(pc.yellow(\"No results found.\"));\n return;\n }\n\n console.log(pc.dim(`Found ${results.length} result(s) for \"${query}\":\\n`));\n\n results.forEach((skill, index) => {\n const num = (index + 1).toString().padStart(2);\n const stars = skill.stars > 0 ? pc.yellow(`★ ${formatStars(skill.stars)}`) : \"\";\n console.log(` ${pc.cyan(num)}. ${pc.bold(skill.scopedName)} ${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 <name>\"));\n console.log(pc.dim(\"Or select by number: caamp skills install <n>\"));\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: MVILevel, 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: MVILevel,\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 - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { checkSkillUpdate, getTrackedSkills } 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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { json?: boolean; human?: boolean }) => {\n const operation = \"skills.check\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n skills: [],\n outdated: 0,\n total: 0,\n });\n } else {\n console.log(pc.dim(\"No tracked skills.\"));\n }\n return;\n }\n\n if (format === \"human\") {\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...\\n`));\n }\n\n const skillResults = [];\n let updatesAvailable = 0;\n\n for (const [name, entry] of entries) {\n const update = await checkSkillUpdate(name);\n const hasUpdate = update.hasUpdate ?? false;\n\n if (hasUpdate) {\n updatesAvailable++;\n }\n\n skillResults.push({\n name,\n currentVersion: update.currentVersion ?? entry.version ?? \"unknown\",\n latestVersion: update.latestVersion ?? \"unknown\",\n hasUpdate,\n source: entry.source,\n agents: entry.agents,\n });\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n skills: skillResults.map((s) => ({\n name: s.name,\n currentVersion: s.currentVersion,\n latestVersion: s.latestVersion,\n hasUpdate: s.hasUpdate,\n })),\n outdated: updatesAvailable,\n total: entries.length,\n });\n return;\n }\n\n // Human-readable output\n for (const r of skillResults) {\n let statusLabel: string;\n if (r.hasUpdate) {\n statusLabel = pc.yellow(\"update available\");\n } else if (r.currentVersion !== \"unknown\") {\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 !== \"unknown\" || r.latestVersion !== \"unknown\") {\n const current = r.currentVersion !== \"unknown\" ? r.currentVersion.slice(0, 12) : \"?\";\n const latest = r.latestVersion !== \"unknown\" ? 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.source}`)}`);\n console.log(` ${pc.dim(`agents: ${r.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 - LAFS-compliant with JSON-first output\n */\n\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { checkSkillUpdate, getTrackedSkills, recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { parseSource } from \"../../core/sources/parser.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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (opts: { yes?: boolean; json?: boolean; human?: boolean }) => {\n const operation = \"skills.update\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated: [],\n failed: [],\n skipped: [],\n count: { updated: 0, failed: 0, skipped: 0 },\n });\n } else {\n console.log(pc.dim(\"No tracked skills to update.\"));\n }\n return;\n }\n\n if (format === \"human\") {\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...`));\n }\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 if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated: [],\n failed: [],\n skipped: [],\n count: { updated: 0, failed: 0, skipped: 0 },\n });\n } else {\n console.log(pc.green(\"\\nAll skills are up to date.\"));\n }\n return;\n }\n\n if (format === \"human\") {\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\n // Confirm unless --yes\n if (!opts.yes && format === \"human\") {\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 if (format === \"human\") {\n console.log();\n }\n\n // Track results for JSON output\n const updated: string[] = [];\n const failed: Array<{ name: string; error: string }> = [];\n const skipped: string[] = [];\n\n // Update each outdated skill\n for (const skill of outdated) {\n const entry = tracked[skill.name];\n if (!entry) continue;\n\n if (format === \"human\") {\n console.log(pc.dim(`Updating ${pc.bold(skill.name)}...`));\n }\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 if (format === \"human\") {\n console.log(pc.yellow(` Skipped ${skill.name}: source type \"${parsed.type}\" does not support auto-update`));\n }\n skipped.push(skill.name);\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 if (format === \"human\") {\n console.log(pc.yellow(` Skipped ${skill.name}: no valid providers found`));\n }\n skipped.push(skill.name);\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 if (format === \"human\") {\n console.log(pc.green(` Updated ${pc.bold(skill.name)}`));\n }\n updated.push(skill.name);\n } else {\n if (format === \"human\") {\n console.log(pc.red(` Failed to update ${skill.name}: no agents linked`));\n }\n failed.push({ name: skill.name, error: \"no agents linked\" });\n }\n\n if (installResult.errors.length > 0 && format === \"human\") {\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 if (format === \"human\") {\n console.log(pc.red(` Failed to update ${skill.name}: ${msg}`));\n }\n failed.push({ name: skill.name, error: msg });\n }\n }\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, {\n updated,\n failed,\n skipped,\n count: {\n updated: updated.length,\n failed: failed.length,\n skipped: skipped.length,\n },\n });\n return;\n }\n\n // Human-readable output\n console.log();\n if (updated.length > 0) {\n console.log(pc.green(`Updated ${updated.length} skill(s).`));\n }\n if (failed.length > 0) {\n console.log(pc.red(`Failed to update ${failed.length} skill(s).`));\n }\n });\n}\n","/**\n * skills init command - scaffold a new skill - LAFS-compliant with JSON-first output\n */\n\nimport { existsSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\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 .option(\"--json\", \"Output as JSON (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (name: string | undefined, opts: { dir: string; json?: boolean; human?: boolean }) => {\n const operation = \"skills.init\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n const skillName = name ?? \"my-skill\";\n const skillDir = join(opts.dir, skillName);\n\n if (existsSync(skillDir)) {\n const message = `Directory already exists: ${skillDir}`;\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.INVALID_CONSTRAINT, message, ErrorCategories.CONFLICT, {\n path: skillDir,\n });\n } else {\n console.error(pc.red(message));\n }\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 const result = {\n name: skillName,\n directory: skillDir,\n template: \"SKILL.md\",\n created: true,\n };\n\n if (format === \"json\") {\n outputSuccess(operation, mvi, result);\n return;\n }\n\n // Human-readable output\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 - LAFS-compliant with JSON-first output\n */\n\nimport { existsSync, statSync } from \"node:fs\";\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n type LAFSErrorShape,\n outputSuccess,\n resolveFormat,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { scanDirectory, scanFile, toSarif } from \"../../core/skills/audit/scanner.js\";\nimport type { AuditResult } from \"../../types.js\";\n\ninterface SkillsAuditOptions {\n sarif?: boolean;\n json?: boolean;\n human?: boolean;\n}\n\ninterface AuditFileResult {\n path: string;\n score: number;\n findings: Array<{\n level: \"critical\" | \"high\" | \"medium\" | \"low\";\n code: string;\n message: string;\n line?: number;\n }>;\n}\n\ninterface AuditSummary {\n scanned: number;\n findings: number;\n files: AuditFileResult[];\n}\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 (raw SARIF, not LAFS envelope)\")\n .option(\"--json\", \"Output as JSON (LAFS envelope)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (path: string, opts: SkillsAuditOptions) => {\n const operation = \"skills.audit\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n // Check if path exists\n if (!existsSync(path)) {\n const message = `Path not found: ${path}`;\n \n // Check if --sarif was explicitly requested\n if (opts.sarif) {\n // For SARIF mode on error, output minimal SARIF with error\n console.error(JSON.stringify({\n $schema: \"https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json\",\n version: \"2.1.0\",\n runs: [{\n tool: { driver: { name: \"caamp-skills-audit\" } },\n invocations: [{\n executionSuccessful: false,\n exitCode: 1,\n exitCodeDescription: message,\n }],\n results: [],\n }],\n }, null, 2));\n } else {\n // LAFS envelope error\n emitJsonError(operation, mvi, ErrorCodes.FILE_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n path,\n });\n }\n process.exit(1);\n }\n\n // Resolve output format (SARIF is a special case - outputs raw SARIF, not LAFS envelope)\n let format: \"json\" | \"human\" | \"sarif\";\n try {\n if (opts.sarif) {\n // SARIF is handled separately - it outputs raw SARIF format\n format = \"sarif\";\n } else {\n format = resolveFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n });\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n // Perform the scan\n const stat = statSync(path);\n let results: AuditResult[];\n\n try {\n if (stat.isFile()) {\n results = [await scanFile(path)];\n } else {\n results = await scanDirectory(path);\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n \n if (format === \"sarif\") {\n console.error(JSON.stringify({\n $schema: \"https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json\",\n version: \"2.1.0\",\n runs: [{\n tool: { driver: { name: \"caamp-skills-audit\" } },\n invocations: [{\n executionSuccessful: false,\n exitCode: 1,\n exitCodeDescription: message,\n }],\n results: [],\n }],\n }, null, 2));\n } else {\n emitJsonError(operation, mvi, ErrorCodes.AUDIT_FAILED, message, ErrorCategories.INTERNAL, {\n path,\n });\n }\n process.exit(1);\n }\n\n // Handle no results case\n if (results.length === 0) {\n if (format === \"sarif\") {\n console.log(JSON.stringify(toSarif([]), null, 2));\n return;\n }\n\n if (format === \"json\") {\n const summary: AuditSummary = {\n scanned: 0,\n findings: 0,\n files: [],\n };\n outputSuccess(operation, mvi, summary);\n return;\n }\n\n // Human-readable\n console.log(pc.dim(\"No SKILL.md files found to scan.\"));\n return;\n }\n\n // Calculate summary\n const summary: AuditSummary = {\n scanned: results.length,\n findings: results.reduce((acc, r) => acc + r.findings.length, 0),\n files: results.map((r) => ({\n path: r.file,\n score: r.score,\n findings: r.findings.map((f) => ({\n level: f.rule.severity as \"critical\" | \"high\" | \"medium\" | \"low\",\n code: f.rule.id,\n message: `${f.rule.name}: ${f.rule.description}`,\n line: f.line,\n })),\n })),\n };\n\n // Check if all passed\n const allPassed = results.every((r) => r.passed);\n\n // SARIF output (raw SARIF format, not LAFS envelope)\n if (format === \"sarif\") {\n console.log(JSON.stringify(toSarif(results), null, 2));\n if (!allPassed) {\n process.exit(1);\n }\n return;\n }\n\n // LAFS JSON output\n if (format === \"json\") {\n outputSuccess(operation, mvi, summary);\n if (!allPassed) {\n process.exit(1);\n }\n return;\n }\n\n // Human-readable output\n let totalFindings = 0;\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\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 - LAFS-compliant with JSON-first output\n */\n\nimport type { LAFSErrorCategory } from \"@cleocode/lafs-protocol\";\nimport { resolveOutputFormat } from \"@cleocode/lafs-protocol\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n buildEnvelope,\n ErrorCategories,\n ErrorCodes,\n emitJsonError,\n} from \"../../core/lafs.js\";\nimport { isHuman } from \"../../core/logger.js\";\nimport { validateSkill } from \"../../core/skills/validator.js\";\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\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 (default)\")\n .option(\"--human\", \"Output in human-readable format\")\n .action(async (path: string, opts: { json?: boolean; human?: boolean }) => {\n const operation = \"skills.validate\";\n const mvi: import(\"../../core/lafs.js\").MVILevel = \"standard\";\n\n let format: \"json\" | \"human\";\n try {\n format = resolveOutputFormat({\n jsonFlag: opts.json ?? false,\n humanFlag: (opts.human ?? false) || isHuman(),\n projectDefault: \"json\",\n }).format;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n emitJsonError(operation, mvi, ErrorCodes.FORMAT_CONFLICT, message, ErrorCategories.VALIDATION);\n process.exit(1);\n }\n\n let result;\n try {\n result = await validateSkill(path);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (format === \"json\") {\n emitJsonError(operation, mvi, ErrorCodes.FILE_NOT_FOUND, message, ErrorCategories.NOT_FOUND, {\n path,\n });\n } else {\n console.error(pc.red(message));\n }\n process.exit(1);\n }\n\n if (format === \"json\") {\n const envelope = buildEnvelope(\n operation,\n mvi,\n {\n valid: result.valid,\n file: path,\n issues: result.issues.map((issue) => ({\n level: issue.level === \"error\" ? \"error\" : \"warn\",\n field: issue.field,\n message: issue.message,\n })),\n },\n null,\n );\n console.log(JSON.stringify(envelope, null, 2));\n } else {\n // Human-readable output\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\n if (!result.valid) {\n process.exit(1);\n }\n });\n}\n","/**\n * Skills command group registration\n */\n\nimport type { 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"],"mappings":"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","names":["program","randomUUID","randomUUID","emitError","program","existsSync","join","pc","existsSync","join","pc","program","pc","pc","pc","pc","pc","pc","program","pc","pc","program","existsSync","pc","existsSync","pc","pc","pc","pc","pc","pc","pc","program","randomUUID","resolveOutputFormat","pc","program","resolveOutputFormat","emitJsonError","buildEnvelope","pc","randomUUID","existsSync","pc","join","join","simpleGit","mkdtemp","rm","tmpdir","join","mkdtemp","join","tmpdir","simpleGit","rm","emitError","pc","existsSync","pc","pc","randomUUID","resolveOutputFormat","pc","resolveOutputFormat","emitJsonError","pc","buildEnvelope","randomUUID","randomUUID","resolveOutputFormat","pc","resolveOutputFormat","emitJsonError","pc","buildEnvelope","randomUUID","pc","pc","pc","pc","existsSync","join","pc","join","existsSync","pc","existsSync","pc","existsSync","summary","pc","resolveOutputFormat","pc","resolveOutputFormat","pc","program"]}