@cleocode/caamp 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../src/commands/providers.ts","../src/commands/skills/install.ts","../src/core/sources/github.ts","../src/core/sources/gitlab.ts","../src/commands/skills/remove.ts","../src/commands/skills/list.ts","../src/commands/skills/find.ts","../src/commands/skills/check.ts","../src/commands/skills/update.ts","../src/commands/skills/init.ts","../src/commands/skills/audit.ts","../src/commands/skills/validate.ts","../src/commands/skills/index.ts","../src/commands/mcp/install.ts","../src/commands/mcp/remove.ts","../src/commands/mcp/list.ts","../src/commands/mcp/detect.ts","../src/commands/mcp/index.ts","../src/commands/instructions/inject.ts","../src/commands/instructions/check.ts","../src/commands/instructions/update.ts","../src/commands/instructions/index.ts","../src/commands/config.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * CAAMP CLI - Central AI Agent Managed Packages\n */\n\nimport { Command } from \"commander\";\nimport { registerProvidersCommand } from \"./commands/providers.js\";\nimport { registerSkillsCommands } from \"./commands/skills/index.js\";\nimport { registerMcpCommands } from \"./commands/mcp/index.js\";\nimport { registerInstructionsCommands } from \"./commands/instructions/index.js\";\nimport { registerConfigCommand } from \"./commands/config.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"caamp\")\n .description(\"Central AI Agent Managed Packages - unified provider registry and package manager\")\n .version(\"0.1.0\");\n\n// Register command groups\nregisterProvidersCommand(program);\nregisterSkillsCommands(program);\nregisterMcpCommands(program);\nregisterInstructionsCommands(program);\nregisterConfigCommand(program);\n\nprogram.parse();\n","/**\n * providers list|detect|show commands\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n getAllProviders,\n getProvider,\n getProviderCount,\n getRegistryVersion,\n getProvidersByPriority,\n} from \"../core/registry/providers.js\";\nimport { detectAllProviders, detectProjectProviders } from \"../core/registry/detection.js\";\n\nexport function registerProvidersCommand(program: Command): void {\n const providers = program\n .command(\"providers\")\n .description(\"Manage AI agent providers\");\n\n providers\n .command(\"list\")\n .description(\"List all supported providers\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--tier <tier>\", \"Filter by priority tier (high, medium, low)\")\n .action(async (opts: { json?: boolean; tier?: string }) => {\n const all = opts.tier\n ? getProvidersByPriority(opts.tier as \"high\" | \"medium\" | \"low\")\n : getAllProviders();\n\n if (opts.json) {\n console.log(JSON.stringify(all, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nCAMP Provider Registry v${getRegistryVersion()}`));\n console.log(pc.dim(`${getProviderCount()} providers\\n`));\n\n // Group by priority\n const tiers = [\"high\", \"medium\", \"low\"] as const;\n for (const tier of tiers) {\n const tierProviders = all.filter((p) => p.priority === tier);\n if (tierProviders.length === 0) continue;\n\n const tierLabel = tier === \"high\" ? pc.green(\"HIGH\") : tier === \"medium\" ? pc.yellow(\"MEDIUM\") : pc.dim(\"LOW\");\n console.log(`${tierLabel} priority:`);\n\n for (const p of tierProviders) {\n const status = p.status === \"active\"\n ? pc.green(\"active\")\n : p.status === \"beta\"\n ? pc.yellow(\"beta\")\n : pc.dim(p.status);\n\n console.log(` ${pc.bold(p.agentFlag.padEnd(20))} ${p.toolName.padEnd(22)} ${p.vendor.padEnd(16)} [${status}]`);\n }\n console.log();\n }\n });\n\n providers\n .command(\"detect\")\n .description(\"Auto-detect installed providers\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--project\", \"Include project-level detection\")\n .action(async (opts: { json?: boolean; project?: boolean }) => {\n const results = opts.project\n ? detectProjectProviders(process.cwd())\n : detectAllProviders();\n\n const installed = results.filter((r) => r.installed);\n\n if (opts.json) {\n console.log(JSON.stringify(installed.map((r) => ({\n id: r.provider.id,\n toolName: r.provider.toolName,\n methods: r.methods,\n projectDetected: r.projectDetected,\n })), null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nDetected ${installed.length} installed providers:\\n`));\n\n for (const r of installed) {\n const methods = r.methods.join(\", \");\n const project = r.projectDetected ? pc.green(\" [project]\") : \"\";\n console.log(` ${pc.green(\"✓\")} ${pc.bold(r.provider.toolName.padEnd(22))} via ${pc.dim(methods)}${project}`);\n }\n\n const notInstalled = results.filter((r) => !r.installed);\n if (notInstalled.length > 0) {\n console.log(pc.dim(`\\n ${notInstalled.length} providers not detected`));\n }\n\n console.log();\n });\n\n providers\n .command(\"show\")\n .description(\"Show provider details\")\n .argument(\"<id>\", \"Provider ID or alias\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (id: string, opts: { json?: boolean }) => {\n const provider = getProvider(id);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${id}`));\n process.exit(1);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(provider, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${provider.toolName}`));\n console.log(pc.dim(`by ${provider.vendor}\\n`));\n\n console.log(` ID: ${provider.id}`);\n console.log(` Flag: --agent ${provider.agentFlag}`);\n if (provider.aliases.length > 0) {\n console.log(` Aliases: ${provider.aliases.join(\", \")}`);\n }\n console.log(` Status: ${provider.status}`);\n console.log(` Priority: ${provider.priority}`);\n console.log();\n console.log(` Instruction: ${provider.instructFile}`);\n console.log(` Config format: ${provider.configFormat}`);\n console.log(` Config key: ${provider.configKey}`);\n console.log(` Transports: ${provider.supportedTransports.join(\", \")}`);\n console.log(` Headers: ${provider.supportsHeaders ? \"yes\" : \"no\"}`);\n console.log();\n console.log(pc.dim(\" Paths:\"));\n console.log(` Global dir: ${provider.pathGlobal}`);\n console.log(` Project dir: ${provider.pathProject || \"(none)\"}`);\n console.log(` Global config: ${provider.configPathGlobal}`);\n console.log(` Project config: ${provider.configPathProject || \"(none)\"}`);\n console.log(` Global skills: ${provider.pathSkills}`);\n console.log(` Project skills: ${provider.pathProjectSkills || \"(none)\"}`);\n console.log();\n });\n}\n","/**\n * skills install command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { parseSource, isMarketplaceScoped } from \"../../core/sources/parser.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerSkillsInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install a skill from GitHub, URL, or marketplace\")\n .argument(\"<source>\", \"Skill source (GitHub URL, owner/repo, @author/name)\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Install globally\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--all\", \"Install to all detected agents\")\n .action(async (source: string, opts: {\n agent: string[];\n global?: boolean;\n yes?: boolean;\n all?: boolean;\n }) => {\n // Determine target providers\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No target providers found. Use --agent or --all.\"));\n process.exit(1);\n }\n\n console.log(pc.dim(`Installing to ${providers.length} provider(s)...`));\n\n let localPath: string;\n let cleanup: (() => Promise<void>) | undefined;\n let skillName: string;\n let sourceValue: string;\n let sourceType = \"github\" as const;\n\n // Handle marketplace scoped names\n if (isMarketplaceScoped(source)) {\n console.log(pc.dim(`Searching marketplace for ${source}...`));\n const client = new MarketplaceClient();\n const skill = await client.getSkill(source);\n\n if (!skill) {\n console.error(pc.red(`Skill not found: ${source}`));\n process.exit(1);\n }\n\n console.log(` Found: ${pc.bold(skill.name)} by ${skill.author} (${pc.dim(skill.repoFullName)})`);\n\n const parsed = parseSource(skill.githubUrl);\n if (parsed.type !== \"github\" || !parsed.owner || !parsed.repo) {\n console.error(pc.red(\"Could not resolve GitHub source\"));\n process.exit(1);\n }\n\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, skill.path ? skill.path.replace(/\\/SKILL\\.md$/, \"\") : undefined);\n localPath = result.localPath;\n cleanup = result.cleanup;\n skillName = skill.name;\n sourceValue = skill.githubUrl;\n } else {\n // Parse source\n const parsed = parseSource(source);\n skillName = parsed.inferredName;\n sourceValue = parsed.value;\n\n if (parsed.type === \"github\" && parsed.owner && parsed.repo) {\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"gitlab\" && parsed.owner && parsed.repo) {\n const result = await cloneGitLabRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"local\") {\n localPath = parsed.value;\n } else {\n console.error(pc.red(`Unsupported source type: ${parsed.type}`));\n process.exit(1);\n }\n }\n\n try {\n const result = await installSkill(\n localPath,\n skillName,\n providers,\n opts.global ?? false,\n );\n\n if (result.success) {\n console.log(pc.green(`\\n✓ Installed ${pc.bold(skillName)}`));\n console.log(` Canonical: ${pc.dim(result.canonicalPath)}`);\n console.log(` Linked to: ${result.linkedAgents.join(\", \")}`);\n\n // Record in lock file\n await recordSkillInstall(\n skillName,\n source,\n sourceValue,\n sourceType,\n result.linkedAgents,\n result.canonicalPath,\n opts.global ?? false,\n );\n }\n\n if (result.errors.length > 0) {\n console.log(pc.yellow(\"\\nWarnings:\"));\n for (const err of result.errors) {\n console.log(` ${pc.yellow(\"!\")} ${err}`);\n }\n }\n } finally {\n if (cleanup) await cleanup();\n }\n });\n}\n","/**\n * GitHub fetcher for skill/MCP sources\n *\n * Clones repos or fetches specific paths via simple-git.\n */\n\nimport { simpleGit } from \"simple-git\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface GitFetchResult {\n localPath: string;\n cleanup: () => Promise<void>;\n}\n\n/** Clone a GitHub repo to a temp directory */\nexport async function cloneRepo(\n owner: string,\n repo: string,\n ref?: string,\n subPath?: string,\n): Promise<GitFetchResult> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"caamp-\"));\n const repoUrl = `https://github.com/${owner}/${repo}.git`;\n\n const git = simpleGit();\n\n const cloneOptions = [\"--depth\", \"1\"];\n if (ref) {\n cloneOptions.push(\"--branch\", ref);\n }\n\n await git.clone(repoUrl, tmpDir, cloneOptions);\n\n const localPath = subPath ? join(tmpDir, subPath) : tmpDir;\n\n return {\n localPath,\n cleanup: async () => {\n try {\n await rm(tmpDir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n },\n };\n}\n\n/** Fetch a specific file from GitHub using the raw API */\nexport async function fetchRawFile(\n owner: string,\n repo: string,\n path: string,\n ref = \"main\",\n): Promise<string | null> {\n const url = `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${path}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n\n/** Check if a GitHub repo exists */\nexport async function repoExists(owner: string, repo: string): Promise<boolean> {\n try {\n const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {\n method: \"HEAD\",\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n","/**\n * GitLab fetcher for skill/MCP sources\n */\n\nimport { simpleGit } from \"simple-git\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { GitFetchResult } from \"./github.js\";\n\n/** Clone a GitLab repo to a temp directory */\nexport async function cloneGitLabRepo(\n owner: string,\n repo: string,\n ref?: string,\n subPath?: string,\n): Promise<GitFetchResult> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"caamp-gl-\"));\n const repoUrl = `https://gitlab.com/${owner}/${repo}.git`;\n\n const git = simpleGit();\n\n const cloneOptions = [\"--depth\", \"1\"];\n if (ref) {\n cloneOptions.push(\"--branch\", ref);\n }\n\n await git.clone(repoUrl, tmpDir, cloneOptions);\n\n const localPath = subPath ? join(tmpDir, subPath) : tmpDir;\n\n return {\n localPath,\n cleanup: async () => {\n try {\n await rm(tmpDir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n },\n };\n}\n\n/** Fetch a specific file from GitLab using the raw API */\nexport async function fetchGitLabRawFile(\n owner: string,\n repo: string,\n path: string,\n ref = \"main\",\n): Promise<string | null> {\n const encodedPath = encodeURIComponent(path);\n const url = `https://gitlab.com/${owner}/${repo}/-/raw/${ref}/${encodedPath}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n","/**\n * skills remove command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { removeSkill, listCanonicalSkills } from \"../../core/skills/installer.js\";\nimport { removeSkillFromLock } from \"../../core/skills/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\n\nexport function registerSkillsRemove(parent: Command): void {\n parent\n .command(\"remove\")\n .description(\"Remove installed skill(s)\")\n .argument(\"[name]\", \"Skill name to remove\")\n .option(\"-g, --global\", \"Remove from global scope\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (name: string | undefined, opts: { global?: boolean; yes?: boolean }) => {\n const providers = getInstalledProviders();\n\n if (name) {\n const result = await removeSkill(name, providers, opts.global ?? false);\n\n if (result.removed.length > 0) {\n console.log(pc.green(`✓ Removed ${pc.bold(name)} from: ${result.removed.join(\", \")}`));\n await removeSkillFromLock(name);\n } else {\n console.log(pc.yellow(`Skill ${name} not found in any provider.`));\n }\n\n if (result.errors.length > 0) {\n for (const err of result.errors) {\n console.log(pc.red(` ${err}`));\n }\n }\n } else {\n // Interactive mode - list and select\n const skills = await listCanonicalSkills();\n if (skills.length === 0) {\n console.log(pc.dim(\"No skills installed.\"));\n return;\n }\n\n console.log(pc.bold(\"Installed skills:\"));\n for (const s of skills) {\n console.log(` ${s}`);\n }\n console.log(pc.dim(\"\\nUse: caamp skills remove <name>\"));\n }\n });\n}\n","/**\n * skills list command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { discoverSkills, discoverSkillsMulti } from \"../../core/skills/discovery.js\";\nimport { listCanonicalSkills } from \"../../core/skills/installer.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { join } from \"node:path\";\n\nexport function registerSkillsList(parent: Command): void {\n parent\n .command(\"list\")\n .description(\"List installed skills\")\n .option(\"-g, --global\", \"List global skills\")\n .option(\"-a, --agent <name>\", \"List skills for specific agent\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { global?: boolean; agent?: string; json?: boolean }) => {\n let dirs: string[] = [];\n\n if (opts.agent) {\n const provider = getProvider(opts.agent);\n if (!provider) {\n console.error(pc.red(`Provider not found: ${opts.agent}`));\n process.exit(1);\n }\n dirs = opts.global\n ? [provider.pathSkills]\n : [join(process.cwd(), provider.pathProjectSkills)];\n } else if (opts.global) {\n // List from all installed providers' global skill dirs\n const providers = getInstalledProviders();\n dirs = providers.map((p) => p.pathSkills).filter(Boolean);\n } else {\n // List from all installed providers' project skill dirs\n const providers = getInstalledProviders();\n dirs = providers\n .map((p) => join(process.cwd(), p.pathProjectSkills))\n .filter(Boolean);\n }\n\n const skills = await discoverSkillsMulti(dirs);\n\n if (opts.json) {\n console.log(JSON.stringify(skills, null, 2));\n return;\n }\n\n if (skills.length === 0) {\n console.log(pc.dim(\"No skills found.\"));\n return;\n }\n\n console.log(pc.bold(`\\n${skills.length} skill(s) found:\\n`));\n\n for (const skill of skills) {\n console.log(` ${pc.bold(skill.name.padEnd(30))} ${pc.dim(skill.metadata.description ?? \"\")}`);\n }\n\n console.log();\n });\n}\n","/**\n * skills find command - marketplace search\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\n\nexport function registerSkillsFind(parent: Command): void {\n parent\n .command(\"find\")\n .description(\"Search marketplace for skills\")\n .argument(\"[query]\", \"Search query\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"-l, --limit <n>\", \"Max results\", \"20\")\n .action(async (query: string | undefined, opts: { json?: boolean; limit: string }) => {\n if (!query) {\n console.log(pc.dim(\"Usage: caamp skills find <query>\"));\n return;\n }\n\n const limit = parseInt(opts.limit, 10);\n const client = new MarketplaceClient();\n\n console.log(pc.dim(`Searching marketplaces for \"${query}\"...\\n`));\n\n const results = await client.search(query, limit);\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n if (results.length === 0) {\n console.log(pc.yellow(\"No results found.\"));\n return;\n }\n\n for (const skill of results) {\n const stars = skill.stars > 0 ? pc.yellow(`★ ${formatStars(skill.stars)}`) : \"\";\n console.log(` ${pc.bold(skill.scopedName.padEnd(35))} ${stars}`);\n console.log(` ${pc.dim(skill.description?.slice(0, 80) ?? \"\")}`);\n console.log(` ${pc.dim(`from ${skill.source}`)}`);\n console.log();\n }\n\n console.log(pc.dim(`Install with: caamp skills install <scopedName>`));\n });\n}\n\nfunction formatStars(n: number): string {\n if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n","/**\n * skills check command - check for updates\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getTrackedSkills, checkSkillUpdate } from \"../../core/skills/lock.js\";\n\nexport function registerSkillsCheck(parent: Command): void {\n parent\n .command(\"check\")\n .description(\"Check for available skill updates\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n console.log(pc.dim(\"No tracked skills.\"));\n return;\n }\n\n const results = [];\n for (const [name, entry] of entries) {\n const update = await checkSkillUpdate(name);\n results.push({ name, entry, ...update });\n }\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${entries.length} tracked skill(s):\\n`));\n\n for (const r of results) {\n const status = r.hasUpdate\n ? pc.yellow(\"update available\")\n : pc.green(\"up to date\");\n\n console.log(` ${pc.bold(r.name.padEnd(30))} ${status}`);\n console.log(` ${pc.dim(`source: ${r.entry.source}`)}`);\n console.log(` ${pc.dim(`agents: ${r.entry.agents.join(\", \")}`)}`);\n console.log();\n }\n });\n}\n","/**\n * skills update command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getTrackedSkills } from \"../../core/skills/lock.js\";\n\nexport function registerSkillsUpdate(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update all outdated skills\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (opts: { yes?: boolean }) => {\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n console.log(pc.dim(\"No tracked skills to update.\"));\n return;\n }\n\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...`));\n\n // For now, skills update is a placeholder - requires network checks\n console.log(pc.dim(\"All skills are up to date.\"));\n console.log(pc.dim(\"\\nTo reinstall a specific skill:\"));\n console.log(pc.dim(\" caamp skills install <source>\"));\n });\n}\n","/**\n * skills init command - scaffold a new skill\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport function registerSkillsInit(parent: Command): void {\n parent\n .command(\"init\")\n .description(\"Create a new SKILL.md template\")\n .argument(\"[name]\", \"Skill name\")\n .option(\"-d, --dir <path>\", \"Output directory\", \".\")\n .action(async (name: string | undefined, opts: { dir: string }) => {\n const skillName = name ?? \"my-skill\";\n const skillDir = join(opts.dir, skillName);\n\n if (existsSync(skillDir)) {\n console.error(pc.red(`Directory already exists: ${skillDir}`));\n process.exit(1);\n }\n\n await mkdir(skillDir, { recursive: true });\n\n const template = `---\nname: ${skillName}\ndescription: Describe what this skill does and when to use it\nlicense: MIT\nmetadata:\n author: your-name\n version: \"1.0\"\n---\n\n# ${skillName}\n\n## When to use this skill\n\nDescribe the conditions under which an AI agent should activate this skill.\n\n## Instructions\n\nProvide detailed instructions for the AI agent here.\n\n## Examples\n\nShow example inputs and expected outputs.\n`;\n\n await writeFile(join(skillDir, \"SKILL.md\"), template, \"utf-8\");\n\n console.log(pc.green(`✓ Created skill template: ${skillDir}/SKILL.md`));\n console.log(pc.dim(\"\\nNext steps:\"));\n console.log(pc.dim(\" 1. Edit SKILL.md with your instructions\"));\n console.log(pc.dim(\" 2. Validate: caamp skills validate \" + join(skillDir, \"SKILL.md\")));\n console.log(pc.dim(\" 3. Install: caamp skills install \" + skillDir));\n });\n}\n","/**\n * skills audit command - security scanning\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { scanFile, scanDirectory, toSarif } from \"../../core/skills/audit/scanner.js\";\nimport { existsSync, statSync } from \"node:fs\";\n\nexport function registerSkillsAudit(parent: Command): void {\n parent\n .command(\"audit\")\n .description(\"Security scan skill files (46+ rules, SARIF output)\")\n .argument(\"[path]\", \"Path to SKILL.md or directory\", \".\")\n .option(\"--sarif\", \"Output in SARIF format\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (path: string, opts: { sarif?: boolean; json?: boolean }) => {\n if (!existsSync(path)) {\n console.error(pc.red(`Path not found: ${path}`));\n process.exit(1);\n }\n\n const stat = statSync(path);\n let results;\n\n if (stat.isFile()) {\n results = [await scanFile(path)];\n } else {\n results = await scanDirectory(path);\n }\n\n if (results.length === 0) {\n console.log(pc.dim(\"No SKILL.md files found to scan.\"));\n return;\n }\n\n if (opts.sarif) {\n console.log(JSON.stringify(toSarif(results), null, 2));\n return;\n }\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n // Human-readable output\n let totalFindings = 0;\n let allPassed = true;\n\n for (const result of results) {\n const icon = result.passed ? pc.green(\"✓\") : pc.red(\"✗\");\n console.log(`\\n${icon} ${pc.bold(result.file)} (score: ${result.score}/100)`);\n\n if (result.findings.length === 0) {\n console.log(pc.dim(\" No issues found.\"));\n continue;\n }\n\n totalFindings += result.findings.length;\n if (!result.passed) allPassed = false;\n\n for (const f of result.findings) {\n const sev = f.rule.severity === \"critical\" ? pc.red(f.rule.severity)\n : f.rule.severity === \"high\" ? pc.red(f.rule.severity)\n : f.rule.severity === \"medium\" ? pc.yellow(f.rule.severity)\n : pc.dim(f.rule.severity);\n\n console.log(` ${sev.padEnd(20)} ${f.rule.id} ${f.rule.name}`);\n console.log(` ${pc.dim(`L${f.line}: ${f.context.slice(0, 80)}`)}`);\n }\n }\n\n console.log(pc.bold(`\\n${results.length} file(s) scanned, ${totalFindings} finding(s)`));\n\n if (!allPassed) {\n process.exit(1);\n }\n });\n}\n","/**\n * skills validate command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { validateSkill } from \"../../core/skills/validator.js\";\n\nexport function registerSkillsValidate(parent: Command): void {\n parent\n .command(\"validate\")\n .description(\"Validate SKILL.md format\")\n .argument(\"[path]\", \"Path to SKILL.md\", \"SKILL.md\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (path: string, opts: { json?: boolean }) => {\n const result = await validateSkill(path);\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.valid) {\n console.log(pc.green(`✓ ${path} is valid`));\n } else {\n console.log(pc.red(`✗ ${path} has validation errors`));\n }\n\n for (const issue of result.issues) {\n const icon = issue.level === \"error\" ? pc.red(\"✗\") : pc.yellow(\"!\");\n console.log(` ${icon} [${issue.field}] ${issue.message}`);\n }\n\n if (!result.valid) {\n process.exit(1);\n }\n });\n}\n","/**\n * Skills command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerSkillsInstall } from \"./install.js\";\nimport { registerSkillsRemove } from \"./remove.js\";\nimport { registerSkillsList } from \"./list.js\";\nimport { registerSkillsFind } from \"./find.js\";\nimport { registerSkillsCheck } from \"./check.js\";\nimport { registerSkillsUpdate } from \"./update.js\";\nimport { registerSkillsInit } from \"./init.js\";\nimport { registerSkillsAudit } from \"./audit.js\";\nimport { registerSkillsValidate } from \"./validate.js\";\n\nexport function registerSkillsCommands(program: Command): void {\n const skills = program\n .command(\"skills\")\n .description(\"Manage AI agent skills\");\n\n registerSkillsInstall(skills);\n registerSkillsRemove(skills);\n registerSkillsList(skills);\n registerSkillsFind(skills);\n registerSkillsCheck(skills);\n registerSkillsUpdate(skills);\n registerSkillsInit(skills);\n registerSkillsAudit(skills);\n registerSkillsValidate(skills);\n}\n","/**\n * mcp install command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { parseSource } from \"../../core/sources/parser.js\";\nimport { installMcpServerToAll, buildServerConfig } from \"../../core/mcp/installer.js\";\nimport { recordMcpInstall } from \"../../core/mcp/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerMcpInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install MCP server to agent configs\")\n .argument(\"<source>\", \"MCP server source (URL, npm package, or command)\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Install to global/user config\")\n .option(\"-n, --name <name>\", \"Override inferred server name\")\n .option(\"-t, --transport <type>\", \"Transport type: http (default) or sse\", \"http\")\n .option(\"--header <header>\", \"HTTP header (Key: Value)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--all\", \"Install to all detected agents\")\n .option(\"--dry-run\", \"Preview without writing\")\n .action(async (source: string, opts: {\n agent: string[];\n global?: boolean;\n name?: string;\n transport: string;\n header: string[];\n yes?: boolean;\n all?: boolean;\n dryRun?: boolean;\n }) => {\n const parsed = parseSource(source);\n const serverName = opts.name ?? parsed.inferredName;\n\n // Parse headers\n const headers: Record<string, string> = {};\n for (const h of opts.header) {\n const idx = h.indexOf(\":\");\n if (idx > 0) {\n headers[h.slice(0, idx).trim()] = h.slice(idx + 1).trim();\n }\n }\n\n const config = buildServerConfig(parsed, opts.transport, headers);\n\n // Determine target providers\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No target providers found.\"));\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n if (opts.dryRun) {\n console.log(pc.bold(\"Dry run - would install:\"));\n console.log(` Server: ${pc.bold(serverName)}`);\n console.log(` Config: ${JSON.stringify(config, null, 2)}`);\n console.log(` Scope: ${scope}`);\n console.log(` Providers: ${providers.map((p) => p.id).join(\", \")}`);\n return;\n }\n\n console.log(pc.dim(`Installing \"${serverName}\" to ${providers.length} provider(s)...\\n`));\n\n const results = await installMcpServerToAll(\n providers,\n serverName,\n config,\n scope,\n );\n\n for (const r of results) {\n if (r.success) {\n console.log(` ${pc.green(\"✓\")} ${r.provider.toolName.padEnd(22)} ${pc.dim(r.configPath)}`);\n } else {\n console.log(` ${pc.red(\"✗\")} ${r.provider.toolName.padEnd(22)} ${pc.red(r.error ?? \"failed\")}`);\n }\n }\n\n const succeeded = results.filter((r) => r.success);\n if (succeeded.length > 0) {\n await recordMcpInstall(\n serverName,\n source,\n parsed.type,\n succeeded.map((r) => r.provider.id),\n opts.global ?? false,\n );\n }\n\n console.log(pc.bold(`\\n${succeeded.length}/${results.length} providers configured.`));\n });\n}\n","/**\n * mcp remove command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { removeMcpServer } from \"../../core/mcp/reader.js\";\nimport { removeMcpFromLock } from \"../../core/mcp/lock.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerMcpRemove(parent: Command): void {\n parent\n .command(\"remove\")\n .description(\"Remove MCP server from agent configs\")\n .argument(\"<name>\", \"MCP server name to remove\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Remove from global config\")\n .option(\"--all\", \"Remove from all detected agents\")\n .action(async (name: string, opts: {\n agent: string[];\n global?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n let removed = 0;\n\n for (const provider of providers) {\n const success = await removeMcpServer(provider, name, scope);\n if (success) {\n console.log(` ${pc.green(\"✓\")} Removed from ${provider.toolName}`);\n removed++;\n }\n }\n\n if (removed > 0) {\n await removeMcpFromLock(name);\n console.log(pc.green(`\\n✓ Removed \"${name}\" from ${removed} provider(s).`));\n } else {\n console.log(pc.yellow(`Server \"${name}\" not found in any provider config.`));\n }\n });\n}\n","/**\n * mcp list command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { listMcpServers } from \"../../core/mcp/reader.js\";\nimport type { McpServerEntry } from \"../../types.js\";\n\nexport function registerMcpList(parent: Command): void {\n parent\n .command(\"list\")\n .description(\"List configured MCP servers\")\n .option(\"-a, --agent <name>\", \"List for specific agent\")\n .option(\"-g, --global\", \"List global config\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { agent?: string; global?: boolean; json?: boolean }) => {\n const providers = opts.agent\n ? [getProvider(opts.agent)].filter((p): p is NonNullable<typeof p> => p !== undefined)\n : getInstalledProviders();\n\n const allEntries: McpServerEntry[] = [];\n\n for (const provider of providers) {\n // With --global, use global. Otherwise use project if provider supports it, else global.\n const scope: \"project\" | \"global\" = opts.global\n ? \"global\"\n : provider.configPathProject\n ? \"project\"\n : \"global\";\n\n const entries = await listMcpServers(provider, scope);\n allEntries.push(...entries);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(allEntries.map(e => ({\n provider: e.providerId,\n name: e.name,\n config: e.config,\n })), null, 2));\n return;\n }\n\n if (allEntries.length === 0) {\n console.log(pc.dim(\"No MCP servers configured.\"));\n return;\n }\n\n console.log(pc.bold(`\\n${allEntries.length} MCP server(s) configured:\\n`));\n\n for (const entry of allEntries) {\n console.log(` ${pc.bold(entry.name.padEnd(25))} ${pc.dim(entry.providerId)}`);\n }\n\n console.log();\n });\n}\n","/**\n * mcp detect command - auto-detect installed MCP tools\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { existsSync } from \"node:fs\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { resolveConfigPath, listMcpServers } from \"../../core/mcp/reader.js\";\n\nexport function registerMcpDetect(parent: Command): void {\n parent\n .command(\"detect\")\n .description(\"Auto-detect installed MCP tools and their configurations\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const providers = getInstalledProviders();\n\n const detected: Array<{\n provider: string;\n hasGlobalConfig: boolean;\n hasProjectConfig: boolean;\n globalServers: string[];\n projectServers: string[];\n }> = [];\n\n for (const provider of providers) {\n const globalPath = resolveConfigPath(provider, \"global\");\n const projectPath = resolveConfigPath(provider, \"project\");\n\n const globalEntries = await listMcpServers(provider, \"global\");\n const projectEntries = await listMcpServers(provider, \"project\");\n\n detected.push({\n provider: provider.id,\n hasGlobalConfig: globalPath !== null && existsSync(globalPath),\n hasProjectConfig: projectPath !== null && existsSync(projectPath),\n globalServers: globalEntries.map(e => e.name),\n projectServers: projectEntries.map(e => e.name),\n });\n }\n\n if (opts.json) {\n console.log(JSON.stringify(detected, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${detected.length} provider(s) with MCP support:\\n`));\n\n for (const d of detected) {\n const globalIcon = d.hasGlobalConfig ? pc.green(\"G\") : pc.dim(\"-\");\n const projectIcon = d.hasProjectConfig ? pc.green(\"P\") : pc.dim(\"-\");\n const servers = [...d.globalServers, ...d.projectServers];\n const serverList = servers.length > 0 ? pc.dim(servers.join(\", \")) : pc.dim(\"no servers\");\n\n console.log(` [${globalIcon}${projectIcon}] ${pc.bold(d.provider.padEnd(20))} ${serverList}`);\n }\n\n console.log(pc.dim(\"\\nG = global config, P = project config\"));\n console.log();\n });\n}\n","/**\n * MCP command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerMcpInstall } from \"./install.js\";\nimport { registerMcpRemove } from \"./remove.js\";\nimport { registerMcpList } from \"./list.js\";\nimport { registerMcpDetect } from \"./detect.js\";\n\nexport function registerMcpCommands(program: Command): void {\n const mcp = program\n .command(\"mcp\")\n .description(\"Manage MCP server configurations\");\n\n registerMcpInstall(mcp);\n registerMcpRemove(mcp);\n registerMcpList(mcp);\n registerMcpDetect(mcp);\n}\n","/**\n * instructions inject command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent, groupByInstructFile } from \"../../core/instructions/templates.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsInject(parent: Command): void {\n parent\n .command(\"inject\")\n .description(\"Inject instruction blocks into all provider files\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Inject into global instruction files\")\n .option(\"--content <text>\", \"Custom content to inject\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--all\", \"Target all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n content?: string;\n dryRun?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getAllProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No providers found.\"));\n process.exit(1);\n }\n\n const content = opts.content ?? generateInjectionContent();\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n // Show grouped preview\n const groups = groupByInstructFile(providers);\n\n if (opts.dryRun) {\n console.log(pc.bold(\"Dry run - would inject into:\\n\"));\n for (const [file, group] of groups) {\n console.log(` ${pc.bold(file)}: ${group.map((p) => p.id).join(\", \")}`);\n }\n console.log(pc.dim(`\\n Scope: ${scope}`));\n console.log(pc.dim(` Content length: ${content.length} chars`));\n return;\n }\n\n const results = await injectAll(providers, process.cwd(), scope, content);\n\n for (const [file, action] of results) {\n const icon = action === \"created\" ? pc.green(\"+\")\n : action === \"updated\" ? pc.yellow(\"~\")\n : pc.blue(\"^\");\n console.log(` ${icon} ${file} (${action})`);\n }\n\n console.log(pc.bold(`\\n${results.size} file(s) processed.`));\n });\n}\n","/**\n * instructions check command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { checkAllInjections } from \"../../core/instructions/injector.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsCheck(parent: Command): void {\n parent\n .command(\"check\")\n .description(\"Check injection status across providers\")\n .option(\"-a, --agent <name>\", \"Check specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Check global instruction files\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--all\", \"Check all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n json?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getAllProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const results = await checkAllInjections(providers, process.cwd(), scope);\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nInstruction file status (${scope}):\\n`));\n\n for (const r of results) {\n let icon: string;\n let label: string;\n\n switch (r.status) {\n case \"current\":\n icon = pc.green(\"✓\");\n label = \"current\";\n break;\n case \"outdated\":\n icon = pc.yellow(\"~\");\n label = \"outdated\";\n break;\n case \"missing\":\n icon = pc.red(\"✗\");\n label = \"missing\";\n break;\n case \"none\":\n icon = pc.dim(\"-\");\n label = \"no injection\";\n break;\n }\n\n console.log(` ${icon} ${r.file.padEnd(40)} ${label}`);\n }\n\n console.log();\n });\n}\n","/**\n * instructions update command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll, checkAllInjections } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent } from \"../../core/instructions/templates.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsUpdate(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update all instruction file injections\")\n .option(\"-g, --global\", \"Update global instruction files\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (opts: { global?: boolean; yes?: boolean }) => {\n const providers = getInstalledProviders();\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const content = generateInjectionContent();\n\n // Check current state\n const checks = await checkAllInjections(providers, process.cwd(), scope, content);\n const needsUpdate = checks.filter((c) => c.status !== \"current\");\n\n if (needsUpdate.length === 0) {\n console.log(pc.green(\"All instruction files are up to date.\"));\n return;\n }\n\n console.log(pc.bold(`${needsUpdate.length} file(s) need updating:\\n`));\n for (const c of needsUpdate) {\n console.log(` ${c.file} (${c.status})`);\n }\n\n // Filter providers to only those needing updates\n const providerIds = new Set(needsUpdate.map((c) => c.provider));\n const toUpdate = providers.filter((p) => providerIds.has(p.id));\n\n const results = await injectAll(toUpdate, process.cwd(), scope, content);\n\n console.log();\n for (const [file, action] of results) {\n console.log(` ${pc.green(\"✓\")} ${file} (${action})`);\n }\n\n console.log(pc.bold(`\\n${results.size} file(s) updated.`));\n });\n}\n","/**\n * Instructions command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerInstructionsInject } from \"./inject.js\";\nimport { registerInstructionsCheck } from \"./check.js\";\nimport { registerInstructionsUpdate } from \"./update.js\";\n\nexport function registerInstructionsCommands(program: Command): void {\n const instructions = program\n .command(\"instructions\")\n .description(\"Manage instruction file injections\");\n\n registerInstructionsInject(instructions);\n registerInstructionsCheck(instructions);\n registerInstructionsUpdate(instructions);\n}\n","/**\n * config show|path commands\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getProvider } from \"../core/registry/providers.js\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { readConfig } from \"../core/formats/index.js\";\n\nexport function registerConfigCommand(program: Command): void {\n const config = program\n .command(\"config\")\n .description(\"View provider configuration\");\n\n config\n .command(\"show\")\n .description(\"Show provider configuration\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .option(\"-g, --global\", \"Show global config\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (providerId: string, opts: { global?: boolean; json?: boolean }) => {\n const provider = getProvider(providerId);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${providerId}`));\n process.exit(1);\n }\n\n const configPath = opts.global\n ? provider.configPathGlobal\n : provider.configPathProject\n ? join(process.cwd(), provider.configPathProject)\n : provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n console.log(pc.dim(`No config file at: ${configPath}`));\n return;\n }\n\n try {\n const data = await readConfig(configPath, provider.configFormat);\n\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log(pc.bold(`\\n${provider.toolName} config (${configPath}):\\n`));\n console.log(JSON.stringify(data, null, 2));\n }\n } catch (err) {\n console.error(pc.red(`Error reading config: ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n });\n\n config\n .command(\"path\")\n .description(\"Show config file path\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .argument(\"[scope]\", \"Scope: project (default) or global\", \"project\")\n .action((providerId: string, scope: string) => {\n const provider = getProvider(providerId);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${providerId}`));\n process.exit(1);\n }\n\n if (scope === \"global\") {\n console.log(provider.configPathGlobal);\n } else {\n if (provider.configPathProject) {\n console.log(join(process.cwd(), provider.configPathProject));\n } else {\n console.log(pc.dim(`${provider.toolName} has no project-level config`));\n console.log(provider.configPathGlobal);\n }\n }\n });\n}\n"],"mappings":"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","names":["program","pc","simpleGit","mkdtemp","rm","tmpdir","join","pc","pc","pc","pc","join","pc","pc","pc","pc","pc","pc","pc","pc","join","pc","existsSync","pc","pc","pc","program","pc","pc","pc","pc","pc","pc","pc","existsSync","existsSync","pc","program","pc","pc","pc","pc","pc","pc","program","pc","join","existsSync","program","pc","join","existsSync"]}
1
+ {"version":3,"sources":["../src/cli.ts","../src/commands/providers.ts","../src/commands/skills/install.ts","../src/core/sources/github.ts","../src/core/sources/gitlab.ts","../src/commands/skills/remove.ts","../src/commands/skills/list.ts","../src/commands/skills/find.ts","../src/commands/skills/check.ts","../src/commands/skills/update.ts","../src/commands/skills/init.ts","../src/commands/skills/audit.ts","../src/commands/skills/validate.ts","../src/commands/skills/index.ts","../src/commands/mcp/install.ts","../src/commands/mcp/remove.ts","../src/commands/mcp/list.ts","../src/commands/mcp/detect.ts","../src/commands/mcp/index.ts","../src/commands/instructions/inject.ts","../src/commands/instructions/check.ts","../src/commands/instructions/update.ts","../src/commands/instructions/index.ts","../src/commands/config.ts","../src/commands/doctor.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * CAAMP CLI - Central AI Agent Managed Packages\n */\n\nimport { Command } from \"commander\";\nimport { registerProvidersCommand } from \"./commands/providers.js\";\nimport { registerSkillsCommands } from \"./commands/skills/index.js\";\nimport { registerMcpCommands } from \"./commands/mcp/index.js\";\nimport { registerInstructionsCommands } from \"./commands/instructions/index.js\";\nimport { registerConfigCommand } from \"./commands/config.js\";\nimport { registerDoctorCommand } from \"./commands/doctor.js\";\nimport { setVerbose, setQuiet } from \"./core/logger.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"caamp\")\n .description(\"Central AI Agent Managed Packages - unified provider registry and package manager\")\n .version(\"0.3.0\")\n .option(\"-v, --verbose\", \"Show debug output\")\n .option(\"-q, --quiet\", \"Suppress non-error output\");\n\nprogram.hook(\"preAction\", (thisCommand) => {\n const opts = thisCommand.optsWithGlobals();\n if (opts.verbose) setVerbose(true);\n if (opts.quiet) setQuiet(true);\n});\n\n// Register command groups\nregisterProvidersCommand(program);\nregisterSkillsCommands(program);\nregisterMcpCommands(program);\nregisterInstructionsCommands(program);\nregisterConfigCommand(program);\nregisterDoctorCommand(program);\n\nprogram.parse();\n","/**\n * providers list|detect|show commands\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n getAllProviders,\n getProvider,\n getProviderCount,\n getRegistryVersion,\n getProvidersByPriority,\n} from \"../core/registry/providers.js\";\nimport { detectAllProviders, detectProjectProviders } from \"../core/registry/detection.js\";\n\nexport function registerProvidersCommand(program: Command): void {\n const providers = program\n .command(\"providers\")\n .description(\"Manage AI agent providers\");\n\n providers\n .command(\"list\")\n .description(\"List all supported providers\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--tier <tier>\", \"Filter by priority tier (high, medium, low)\")\n .action(async (opts: { json?: boolean; tier?: string }) => {\n const all = opts.tier\n ? getProvidersByPriority(opts.tier as \"high\" | \"medium\" | \"low\")\n : getAllProviders();\n\n if (opts.json) {\n console.log(JSON.stringify(all, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nCAMP Provider Registry v${getRegistryVersion()}`));\n console.log(pc.dim(`${getProviderCount()} providers\\n`));\n\n // Group by priority\n const tiers = [\"high\", \"medium\", \"low\"] as const;\n for (const tier of tiers) {\n const tierProviders = all.filter((p) => p.priority === tier);\n if (tierProviders.length === 0) continue;\n\n const tierLabel = tier === \"high\" ? pc.green(\"HIGH\") : tier === \"medium\" ? pc.yellow(\"MEDIUM\") : pc.dim(\"LOW\");\n console.log(`${tierLabel} priority:`);\n\n for (const p of tierProviders) {\n const status = p.status === \"active\"\n ? pc.green(\"active\")\n : p.status === \"beta\"\n ? pc.yellow(\"beta\")\n : pc.dim(p.status);\n\n console.log(` ${pc.bold(p.agentFlag.padEnd(20))} ${p.toolName.padEnd(22)} ${p.vendor.padEnd(16)} [${status}]`);\n }\n console.log();\n }\n });\n\n providers\n .command(\"detect\")\n .description(\"Auto-detect installed providers\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--project\", \"Include project-level detection\")\n .action(async (opts: { json?: boolean; project?: boolean }) => {\n const results = opts.project\n ? detectProjectProviders(process.cwd())\n : detectAllProviders();\n\n const installed = results.filter((r) => r.installed);\n\n if (opts.json) {\n console.log(JSON.stringify(installed.map((r) => ({\n id: r.provider.id,\n toolName: r.provider.toolName,\n methods: r.methods,\n projectDetected: r.projectDetected,\n })), null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nDetected ${installed.length} installed providers:\\n`));\n\n for (const r of installed) {\n const methods = r.methods.join(\", \");\n const project = r.projectDetected ? pc.green(\" [project]\") : \"\";\n console.log(` ${pc.green(\"✓\")} ${pc.bold(r.provider.toolName.padEnd(22))} via ${pc.dim(methods)}${project}`);\n }\n\n const notInstalled = results.filter((r) => !r.installed);\n if (notInstalled.length > 0) {\n console.log(pc.dim(`\\n ${notInstalled.length} providers not detected`));\n }\n\n console.log();\n });\n\n providers\n .command(\"show\")\n .description(\"Show provider details\")\n .argument(\"<id>\", \"Provider ID or alias\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (id: string, opts: { json?: boolean }) => {\n const provider = getProvider(id);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${id}`));\n process.exit(1);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(provider, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${provider.toolName}`));\n console.log(pc.dim(`by ${provider.vendor}\\n`));\n\n console.log(` ID: ${provider.id}`);\n console.log(` Flag: --agent ${provider.agentFlag}`);\n if (provider.aliases.length > 0) {\n console.log(` Aliases: ${provider.aliases.join(\", \")}`);\n }\n console.log(` Status: ${provider.status}`);\n console.log(` Priority: ${provider.priority}`);\n console.log();\n console.log(` Instruction: ${provider.instructFile}`);\n console.log(` Config format: ${provider.configFormat}`);\n console.log(` Config key: ${provider.configKey}`);\n console.log(` Transports: ${provider.supportedTransports.join(\", \")}`);\n console.log(` Headers: ${provider.supportsHeaders ? \"yes\" : \"no\"}`);\n console.log();\n console.log(pc.dim(\" Paths:\"));\n console.log(` Global dir: ${provider.pathGlobal}`);\n console.log(` Project dir: ${provider.pathProject || \"(none)\"}`);\n console.log(` Global config: ${provider.configPathGlobal}`);\n console.log(` Project config: ${provider.configPathProject || \"(none)\"}`);\n console.log(` Global skills: ${provider.pathSkills}`);\n console.log(` Project skills: ${provider.pathProjectSkills || \"(none)\"}`);\n console.log();\n });\n}\n","/**\n * skills install command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { parseSource, isMarketplaceScoped } from \"../../core/sources/parser.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\nimport type { Provider, SourceType } from \"../../types.js\";\n\nexport function registerSkillsInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install a skill from GitHub, URL, or marketplace\")\n .argument(\"<source>\", \"Skill source (GitHub URL, owner/repo, @author/name)\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Install globally\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--all\", \"Install to all detected agents\")\n .action(async (source: string, opts: {\n agent: string[];\n global?: boolean;\n yes?: boolean;\n all?: boolean;\n }) => {\n // Determine target providers\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No target providers found. Use --agent or --all.\"));\n process.exit(1);\n }\n\n console.log(pc.dim(`Installing to ${providers.length} provider(s)...`));\n\n let localPath: string;\n let cleanup: (() => Promise<void>) | undefined;\n let skillName: string;\n let sourceValue: string;\n let sourceType: SourceType;\n\n // Handle marketplace scoped names\n if (isMarketplaceScoped(source)) {\n console.log(pc.dim(`Searching marketplace for ${source}...`));\n const client = new MarketplaceClient();\n const skill = await client.getSkill(source);\n\n if (!skill) {\n console.error(pc.red(`Skill not found: ${source}`));\n process.exit(1);\n }\n\n console.log(` Found: ${pc.bold(skill.name)} by ${skill.author} (${pc.dim(skill.repoFullName)})`);\n\n const parsed = parseSource(skill.githubUrl);\n if (parsed.type !== \"github\" || !parsed.owner || !parsed.repo) {\n console.error(pc.red(\"Could not resolve GitHub source\"));\n process.exit(1);\n }\n\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, skill.path ? skill.path.replace(/\\/SKILL\\.md$/, \"\") : undefined);\n localPath = result.localPath;\n cleanup = result.cleanup;\n skillName = skill.name;\n sourceValue = skill.githubUrl;\n sourceType = parsed.type;\n } else {\n // Parse source\n const parsed = parseSource(source);\n skillName = parsed.inferredName;\n sourceValue = parsed.value;\n sourceType = parsed.type;\n\n if (parsed.type === \"github\" && parsed.owner && parsed.repo) {\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"gitlab\" && parsed.owner && parsed.repo) {\n const result = await cloneGitLabRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"local\") {\n localPath = parsed.value;\n } else {\n console.error(pc.red(`Unsupported source type: ${parsed.type}`));\n process.exit(1);\n }\n }\n\n try {\n const result = await installSkill(\n localPath,\n skillName,\n providers,\n opts.global ?? false,\n );\n\n if (result.success) {\n console.log(pc.green(`\\n✓ Installed ${pc.bold(skillName)}`));\n console.log(` Canonical: ${pc.dim(result.canonicalPath)}`);\n console.log(` Linked to: ${result.linkedAgents.join(\", \")}`);\n\n // Record in lock file\n await recordSkillInstall(\n skillName,\n source,\n sourceValue,\n sourceType,\n result.linkedAgents,\n result.canonicalPath,\n opts.global ?? false,\n );\n }\n\n if (result.errors.length > 0) {\n console.log(pc.yellow(\"\\nWarnings:\"));\n for (const err of result.errors) {\n console.log(` ${pc.yellow(\"!\")} ${err}`);\n }\n }\n } finally {\n if (cleanup) await cleanup();\n }\n });\n}\n","/**\n * GitHub fetcher for skill/MCP sources\n *\n * Clones repos or fetches specific paths via simple-git.\n */\n\nimport { simpleGit } from \"simple-git\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface GitFetchResult {\n localPath: string;\n cleanup: () => Promise<void>;\n}\n\n/** Clone a GitHub repo to a temp directory */\nexport async function cloneRepo(\n owner: string,\n repo: string,\n ref?: string,\n subPath?: string,\n): Promise<GitFetchResult> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"caamp-\"));\n const repoUrl = `https://github.com/${owner}/${repo}.git`;\n\n const git = simpleGit();\n\n const cloneOptions = [\"--depth\", \"1\"];\n if (ref) {\n cloneOptions.push(\"--branch\", ref);\n }\n\n await git.clone(repoUrl, tmpDir, cloneOptions);\n\n const localPath = subPath ? join(tmpDir, subPath) : tmpDir;\n\n return {\n localPath,\n cleanup: async () => {\n try {\n await rm(tmpDir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n },\n };\n}\n\n/** Fetch a specific file from GitHub using the raw API */\nexport async function fetchRawFile(\n owner: string,\n repo: string,\n path: string,\n ref = \"main\",\n): Promise<string | null> {\n const url = `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${path}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n\n/** Check if a GitHub repo exists */\nexport async function repoExists(owner: string, repo: string): Promise<boolean> {\n try {\n const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {\n method: \"HEAD\",\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n","/**\n * GitLab fetcher for skill/MCP sources\n */\n\nimport { simpleGit } from \"simple-git\";\nimport { mkdtemp, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { GitFetchResult } from \"./github.js\";\n\n/** Clone a GitLab repo to a temp directory */\nexport async function cloneGitLabRepo(\n owner: string,\n repo: string,\n ref?: string,\n subPath?: string,\n): Promise<GitFetchResult> {\n const tmpDir = await mkdtemp(join(tmpdir(), \"caamp-gl-\"));\n const repoUrl = `https://gitlab.com/${owner}/${repo}.git`;\n\n const git = simpleGit();\n\n const cloneOptions = [\"--depth\", \"1\"];\n if (ref) {\n cloneOptions.push(\"--branch\", ref);\n }\n\n await git.clone(repoUrl, tmpDir, cloneOptions);\n\n const localPath = subPath ? join(tmpDir, subPath) : tmpDir;\n\n return {\n localPath,\n cleanup: async () => {\n try {\n await rm(tmpDir, { recursive: true });\n } catch {\n // Ignore cleanup errors\n }\n },\n };\n}\n\n/** Fetch a specific file from GitLab using the raw API */\nexport async function fetchGitLabRawFile(\n owner: string,\n repo: string,\n path: string,\n ref = \"main\",\n): Promise<string | null> {\n const encodedPath = encodeURIComponent(path);\n const url = `https://gitlab.com/${owner}/${repo}/-/raw/${ref}/${encodedPath}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) return null;\n return await response.text();\n } catch {\n return null;\n }\n}\n","/**\n * skills remove command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { removeSkill, listCanonicalSkills } from \"../../core/skills/installer.js\";\nimport { removeSkillFromLock } from \"../../core/skills/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\n\nexport function registerSkillsRemove(parent: Command): void {\n parent\n .command(\"remove\")\n .description(\"Remove installed skill(s)\")\n .argument(\"[name]\", \"Skill name to remove\")\n .option(\"-g, --global\", \"Remove from global scope\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (name: string | undefined, opts: { global?: boolean; yes?: boolean }) => {\n const providers = getInstalledProviders();\n\n if (name) {\n const result = await removeSkill(name, providers, opts.global ?? false);\n\n if (result.removed.length > 0) {\n console.log(pc.green(`✓ Removed ${pc.bold(name)} from: ${result.removed.join(\", \")}`));\n await removeSkillFromLock(name);\n } else {\n console.log(pc.yellow(`Skill ${name} not found in any provider.`));\n }\n\n if (result.errors.length > 0) {\n for (const err of result.errors) {\n console.log(pc.red(` ${err}`));\n }\n }\n } else {\n // Interactive mode - list and select\n const skills = await listCanonicalSkills();\n if (skills.length === 0) {\n console.log(pc.dim(\"No skills installed.\"));\n return;\n }\n\n console.log(pc.bold(\"Installed skills:\"));\n for (const s of skills) {\n console.log(` ${s}`);\n }\n console.log(pc.dim(\"\\nUse: caamp skills remove <name>\"));\n }\n });\n}\n","/**\n * skills list command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { discoverSkills, discoverSkillsMulti } from \"../../core/skills/discovery.js\";\nimport { listCanonicalSkills } from \"../../core/skills/installer.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { join } from \"node:path\";\n\nexport function registerSkillsList(parent: Command): void {\n parent\n .command(\"list\")\n .description(\"List installed skills\")\n .option(\"-g, --global\", \"List global skills\")\n .option(\"-a, --agent <name>\", \"List skills for specific agent\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { global?: boolean; agent?: string; json?: boolean }) => {\n let dirs: string[] = [];\n\n if (opts.agent) {\n const provider = getProvider(opts.agent);\n if (!provider) {\n console.error(pc.red(`Provider not found: ${opts.agent}`));\n process.exit(1);\n }\n dirs = opts.global\n ? [provider.pathSkills]\n : [join(process.cwd(), provider.pathProjectSkills)];\n } else if (opts.global) {\n // List from all installed providers' global skill dirs\n const providers = getInstalledProviders();\n dirs = providers.map((p) => p.pathSkills).filter(Boolean);\n } else {\n // List from all installed providers' project skill dirs\n const providers = getInstalledProviders();\n dirs = providers\n .map((p) => join(process.cwd(), p.pathProjectSkills))\n .filter(Boolean);\n }\n\n const skills = await discoverSkillsMulti(dirs);\n\n if (opts.json) {\n console.log(JSON.stringify(skills, null, 2));\n return;\n }\n\n if (skills.length === 0) {\n console.log(pc.dim(\"No skills found.\"));\n return;\n }\n\n console.log(pc.bold(`\\n${skills.length} skill(s) found:\\n`));\n\n for (const skill of skills) {\n console.log(` ${pc.bold(skill.name.padEnd(30))} ${pc.dim(skill.metadata.description ?? \"\")}`);\n }\n\n console.log();\n });\n}\n","/**\n * skills find command - marketplace search\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { MarketplaceClient } from \"../../core/marketplace/client.js\";\n\nexport function registerSkillsFind(parent: Command): void {\n parent\n .command(\"find\")\n .description(\"Search marketplace for skills\")\n .argument(\"[query]\", \"Search query\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"-l, --limit <n>\", \"Max results\", \"20\")\n .action(async (query: string | undefined, opts: { json?: boolean; limit: string }) => {\n if (!query) {\n console.log(pc.dim(\"Usage: caamp skills find <query>\"));\n return;\n }\n\n const limit = parseInt(opts.limit, 10);\n const client = new MarketplaceClient();\n\n console.log(pc.dim(`Searching marketplaces for \"${query}\"...\\n`));\n\n const results = await client.search(query, limit);\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n if (results.length === 0) {\n console.log(pc.yellow(\"No results found.\"));\n return;\n }\n\n for (const skill of results) {\n const stars = skill.stars > 0 ? pc.yellow(`★ ${formatStars(skill.stars)}`) : \"\";\n console.log(` ${pc.bold(skill.scopedName.padEnd(35))} ${stars}`);\n console.log(` ${pc.dim(skill.description?.slice(0, 80) ?? \"\")}`);\n console.log(` ${pc.dim(`from ${skill.source}`)}`);\n console.log();\n }\n\n console.log(pc.dim(`Install with: caamp skills install <scopedName>`));\n });\n}\n\nfunction formatStars(n: number): string {\n if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n","/**\n * skills check command - check for updates\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getTrackedSkills, checkSkillUpdate } from \"../../core/skills/lock.js\";\n\nexport function registerSkillsCheck(parent: Command): void {\n parent\n .command(\"check\")\n .description(\"Check for available skill updates\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n console.log(pc.dim(\"No tracked skills.\"));\n return;\n }\n\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...\\n`));\n\n const results = [];\n for (const [name, entry] of entries) {\n const update = await checkSkillUpdate(name);\n results.push({ name, entry, ...update });\n }\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n let updatesAvailable = 0;\n\n for (const r of results) {\n let statusLabel: string;\n if (r.status === \"update-available\") {\n statusLabel = pc.yellow(\"update available\");\n updatesAvailable++;\n } else if (r.status === \"up-to-date\") {\n statusLabel = pc.green(\"up to date\");\n } else {\n statusLabel = pc.dim(\"unknown\");\n }\n\n console.log(` ${pc.bold(r.name.padEnd(30))} ${statusLabel}`);\n\n if (r.currentVersion || r.latestVersion) {\n const current = r.currentVersion ? r.currentVersion.slice(0, 12) : \"?\";\n const latest = r.latestVersion ?? \"?\";\n if (r.hasUpdate) {\n console.log(` ${pc.dim(\"current:\")} ${current} ${pc.dim(\"->\")} ${pc.cyan(latest)}`);\n } else {\n console.log(` ${pc.dim(\"version:\")} ${current}`);\n }\n }\n\n console.log(` ${pc.dim(`source: ${r.entry.source}`)}`);\n console.log(` ${pc.dim(`agents: ${r.entry.agents.join(\", \")}`)}`);\n console.log();\n }\n\n if (updatesAvailable > 0) {\n console.log(pc.yellow(`${updatesAvailable} update(s) available.`));\n console.log(pc.dim(\"Run `caamp skills update` to update all.\"));\n } else {\n console.log(pc.green(\"All skills are up to date.\"));\n }\n });\n}\n","/**\n * skills update command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getTrackedSkills, checkSkillUpdate, recordSkillInstall } from \"../../core/skills/lock.js\";\nimport { installSkill } from \"../../core/skills/installer.js\";\nimport { parseSource } from \"../../core/sources/parser.js\";\nimport { cloneRepo } from \"../../core/sources/github.js\";\nimport { cloneGitLabRepo } from \"../../core/sources/gitlab.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerSkillsUpdate(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update all outdated skills\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (opts: { yes?: boolean }) => {\n const tracked = await getTrackedSkills();\n const entries = Object.entries(tracked);\n\n if (entries.length === 0) {\n console.log(pc.dim(\"No tracked skills to update.\"));\n return;\n }\n\n console.log(pc.dim(`Checking ${entries.length} skill(s) for updates...`));\n\n // Check all skills for updates\n const outdated: Array<{\n name: string;\n currentVersion?: string;\n latestVersion?: string;\n }> = [];\n\n for (const [name] of entries) {\n const result = await checkSkillUpdate(name);\n if (result.hasUpdate) {\n outdated.push({\n name,\n currentVersion: result.currentVersion,\n latestVersion: result.latestVersion,\n });\n }\n }\n\n if (outdated.length === 0) {\n console.log(pc.green(\"\\nAll skills are up to date.\"));\n return;\n }\n\n console.log(pc.yellow(`\\n${outdated.length} skill(s) have updates available:\\n`));\n\n for (const skill of outdated) {\n const current = skill.currentVersion?.slice(0, 12) ?? \"?\";\n const latest = skill.latestVersion ?? \"?\";\n console.log(` ${pc.bold(skill.name)} ${pc.dim(current)} ${pc.dim(\"->\")} ${pc.cyan(latest)}`);\n }\n\n // Confirm unless --yes\n if (!opts.yes) {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(pc.dim(\"\\nProceed with update? [y/N] \"), resolve);\n });\n rl.close();\n\n if (answer.toLowerCase() !== \"y\" && answer.toLowerCase() !== \"yes\") {\n console.log(pc.dim(\"Update cancelled.\"));\n return;\n }\n }\n\n console.log();\n\n // Update each outdated skill\n let successCount = 0;\n let failCount = 0;\n\n for (const skill of outdated) {\n const entry = tracked[skill.name];\n if (!entry) continue;\n\n console.log(pc.dim(`Updating ${pc.bold(skill.name)}...`));\n\n try {\n const parsed = parseSource(entry.source);\n let localPath: string;\n let cleanup: (() => Promise<void>) | undefined;\n\n if (parsed.type === \"github\" && parsed.owner && parsed.repo) {\n const result = await cloneRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else if (parsed.type === \"gitlab\" && parsed.owner && parsed.repo) {\n const result = await cloneGitLabRepo(parsed.owner, parsed.repo, parsed.ref, parsed.path);\n localPath = result.localPath;\n cleanup = result.cleanup;\n } else {\n console.log(pc.yellow(` Skipped ${skill.name}: source type \"${parsed.type}\" does not support auto-update`));\n continue;\n }\n\n try {\n // Resolve providers from the lock entry's agent list\n const providers = entry.agents\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n\n if (providers.length === 0) {\n console.log(pc.yellow(` Skipped ${skill.name}: no valid providers found`));\n continue;\n }\n\n const installResult = await installSkill(\n localPath,\n skill.name,\n providers,\n entry.isGlobal,\n entry.projectDir,\n );\n\n if (installResult.success) {\n // Record the updated version in the lock file\n await recordSkillInstall(\n skill.name,\n entry.scopedName,\n entry.source,\n entry.sourceType,\n installResult.linkedAgents,\n installResult.canonicalPath,\n entry.isGlobal,\n entry.projectDir,\n skill.latestVersion,\n );\n\n console.log(pc.green(` Updated ${pc.bold(skill.name)}`));\n successCount++;\n } else {\n console.log(pc.red(` Failed to update ${skill.name}: no agents linked`));\n failCount++;\n }\n\n if (installResult.errors.length > 0) {\n for (const err of installResult.errors) {\n console.log(pc.yellow(` ${err}`));\n }\n }\n } finally {\n if (cleanup) await cleanup();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(pc.red(` Failed to update ${skill.name}: ${msg}`));\n failCount++;\n }\n }\n\n console.log();\n if (successCount > 0) {\n console.log(pc.green(`Updated ${successCount} skill(s).`));\n }\n if (failCount > 0) {\n console.log(pc.red(`Failed to update ${failCount} skill(s).`));\n }\n });\n}\n","/**\n * skills init command - scaffold a new skill\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport function registerSkillsInit(parent: Command): void {\n parent\n .command(\"init\")\n .description(\"Create a new SKILL.md template\")\n .argument(\"[name]\", \"Skill name\")\n .option(\"-d, --dir <path>\", \"Output directory\", \".\")\n .action(async (name: string | undefined, opts: { dir: string }) => {\n const skillName = name ?? \"my-skill\";\n const skillDir = join(opts.dir, skillName);\n\n if (existsSync(skillDir)) {\n console.error(pc.red(`Directory already exists: ${skillDir}`));\n process.exit(1);\n }\n\n await mkdir(skillDir, { recursive: true });\n\n const template = `---\nname: ${skillName}\ndescription: Describe what this skill does and when to use it\nlicense: MIT\nmetadata:\n author: your-name\n version: \"1.0\"\n---\n\n# ${skillName}\n\n## When to use this skill\n\nDescribe the conditions under which an AI agent should activate this skill.\n\n## Instructions\n\nProvide detailed instructions for the AI agent here.\n\n## Examples\n\nShow example inputs and expected outputs.\n`;\n\n await writeFile(join(skillDir, \"SKILL.md\"), template, \"utf-8\");\n\n console.log(pc.green(`✓ Created skill template: ${skillDir}/SKILL.md`));\n console.log(pc.dim(\"\\nNext steps:\"));\n console.log(pc.dim(\" 1. Edit SKILL.md with your instructions\"));\n console.log(pc.dim(\" 2. Validate: caamp skills validate \" + join(skillDir, \"SKILL.md\")));\n console.log(pc.dim(\" 3. Install: caamp skills install \" + skillDir));\n });\n}\n","/**\n * skills audit command - security scanning\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { scanFile, scanDirectory, toSarif } from \"../../core/skills/audit/scanner.js\";\nimport { existsSync, statSync } from \"node:fs\";\n\nexport function registerSkillsAudit(parent: Command): void {\n parent\n .command(\"audit\")\n .description(\"Security scan skill files (46+ rules, SARIF output)\")\n .argument(\"[path]\", \"Path to SKILL.md or directory\", \".\")\n .option(\"--sarif\", \"Output in SARIF format\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (path: string, opts: { sarif?: boolean; json?: boolean }) => {\n if (!existsSync(path)) {\n console.error(pc.red(`Path not found: ${path}`));\n process.exit(1);\n }\n\n const stat = statSync(path);\n let results;\n\n if (stat.isFile()) {\n results = [await scanFile(path)];\n } else {\n results = await scanDirectory(path);\n }\n\n if (results.length === 0) {\n console.log(pc.dim(\"No SKILL.md files found to scan.\"));\n return;\n }\n\n if (opts.sarif) {\n console.log(JSON.stringify(toSarif(results), null, 2));\n return;\n }\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n // Human-readable output\n let totalFindings = 0;\n let allPassed = true;\n\n for (const result of results) {\n const icon = result.passed ? pc.green(\"✓\") : pc.red(\"✗\");\n console.log(`\\n${icon} ${pc.bold(result.file)} (score: ${result.score}/100)`);\n\n if (result.findings.length === 0) {\n console.log(pc.dim(\" No issues found.\"));\n continue;\n }\n\n totalFindings += result.findings.length;\n if (!result.passed) allPassed = false;\n\n for (const f of result.findings) {\n const sev = f.rule.severity === \"critical\" ? pc.red(f.rule.severity)\n : f.rule.severity === \"high\" ? pc.red(f.rule.severity)\n : f.rule.severity === \"medium\" ? pc.yellow(f.rule.severity)\n : pc.dim(f.rule.severity);\n\n console.log(` ${sev.padEnd(20)} ${f.rule.id} ${f.rule.name}`);\n console.log(` ${pc.dim(`L${f.line}: ${f.context.slice(0, 80)}`)}`);\n }\n }\n\n console.log(pc.bold(`\\n${results.length} file(s) scanned, ${totalFindings} finding(s)`));\n\n if (!allPassed) {\n process.exit(1);\n }\n });\n}\n","/**\n * skills validate command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { validateSkill } from \"../../core/skills/validator.js\";\n\nexport function registerSkillsValidate(parent: Command): void {\n parent\n .command(\"validate\")\n .description(\"Validate SKILL.md format\")\n .argument(\"[path]\", \"Path to SKILL.md\", \"SKILL.md\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (path: string, opts: { json?: boolean }) => {\n const result = await validateSkill(path);\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n if (result.valid) {\n console.log(pc.green(`✓ ${path} is valid`));\n } else {\n console.log(pc.red(`✗ ${path} has validation errors`));\n }\n\n for (const issue of result.issues) {\n const icon = issue.level === \"error\" ? pc.red(\"✗\") : pc.yellow(\"!\");\n console.log(` ${icon} [${issue.field}] ${issue.message}`);\n }\n\n if (!result.valid) {\n process.exit(1);\n }\n });\n}\n","/**\n * Skills command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerSkillsInstall } from \"./install.js\";\nimport { registerSkillsRemove } from \"./remove.js\";\nimport { registerSkillsList } from \"./list.js\";\nimport { registerSkillsFind } from \"./find.js\";\nimport { registerSkillsCheck } from \"./check.js\";\nimport { registerSkillsUpdate } from \"./update.js\";\nimport { registerSkillsInit } from \"./init.js\";\nimport { registerSkillsAudit } from \"./audit.js\";\nimport { registerSkillsValidate } from \"./validate.js\";\n\nexport function registerSkillsCommands(program: Command): void {\n const skills = program\n .command(\"skills\")\n .description(\"Manage AI agent skills\");\n\n registerSkillsInstall(skills);\n registerSkillsRemove(skills);\n registerSkillsList(skills);\n registerSkillsFind(skills);\n registerSkillsCheck(skills);\n registerSkillsUpdate(skills);\n registerSkillsInit(skills);\n registerSkillsAudit(skills);\n registerSkillsValidate(skills);\n}\n","/**\n * mcp install command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { parseSource } from \"../../core/sources/parser.js\";\nimport { installMcpServerToAll, buildServerConfig } from \"../../core/mcp/installer.js\";\nimport { recordMcpInstall } from \"../../core/mcp/lock.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerMcpInstall(parent: Command): void {\n parent\n .command(\"install\")\n .description(\"Install MCP server to agent configs\")\n .argument(\"<source>\", \"MCP server source (URL, npm package, or command)\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Install to global/user config\")\n .option(\"-n, --name <name>\", \"Override inferred server name\")\n .option(\"-t, --transport <type>\", \"Transport type: http (default) or sse\", \"http\")\n .option(\"--header <header>\", \"HTTP header (Key: Value)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-y, --yes\", \"Skip confirmation\")\n .option(\"--all\", \"Install to all detected agents\")\n .option(\"--dry-run\", \"Preview without writing\")\n .action(async (source: string, opts: {\n agent: string[];\n global?: boolean;\n name?: string;\n transport: string;\n header: string[];\n yes?: boolean;\n all?: boolean;\n dryRun?: boolean;\n }) => {\n const parsed = parseSource(source);\n const serverName = opts.name ?? parsed.inferredName;\n\n // Parse headers\n const headers: Record<string, string> = {};\n for (const h of opts.header) {\n const idx = h.indexOf(\":\");\n if (idx > 0) {\n headers[h.slice(0, idx).trim()] = h.slice(idx + 1).trim();\n }\n }\n\n const config = buildServerConfig(parsed, opts.transport, headers);\n\n // Determine target providers\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No target providers found.\"));\n process.exit(1);\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n if (opts.dryRun) {\n console.log(pc.bold(\"Dry run - would install:\"));\n console.log(` Server: ${pc.bold(serverName)}`);\n console.log(` Config: ${JSON.stringify(config, null, 2)}`);\n console.log(` Scope: ${scope}`);\n console.log(` Providers: ${providers.map((p) => p.id).join(\", \")}`);\n return;\n }\n\n console.log(pc.dim(`Installing \"${serverName}\" to ${providers.length} provider(s)...\\n`));\n\n const results = await installMcpServerToAll(\n providers,\n serverName,\n config,\n scope,\n );\n\n for (const r of results) {\n if (r.success) {\n console.log(` ${pc.green(\"✓\")} ${r.provider.toolName.padEnd(22)} ${pc.dim(r.configPath)}`);\n } else {\n console.log(` ${pc.red(\"✗\")} ${r.provider.toolName.padEnd(22)} ${pc.red(r.error ?? \"failed\")}`);\n }\n }\n\n const succeeded = results.filter((r) => r.success);\n if (succeeded.length > 0) {\n await recordMcpInstall(\n serverName,\n source,\n parsed.type,\n succeeded.map((r) => r.provider.id),\n opts.global ?? false,\n );\n }\n\n console.log(pc.bold(`\\n${succeeded.length}/${results.length} providers configured.`));\n });\n}\n","/**\n * mcp remove command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { removeMcpServer } from \"../../core/mcp/reader.js\";\nimport { removeMcpFromLock } from \"../../core/mcp/lock.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerMcpRemove(parent: Command): void {\n parent\n .command(\"remove\")\n .description(\"Remove MCP server from agent configs\")\n .argument(\"<name>\", \"MCP server name to remove\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Remove from global config\")\n .option(\"--all\", \"Remove from all detected agents\")\n .action(async (name: string, opts: {\n agent: string[];\n global?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getInstalledProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n let removed = 0;\n\n for (const provider of providers) {\n const success = await removeMcpServer(provider, name, scope);\n if (success) {\n console.log(` ${pc.green(\"✓\")} Removed from ${provider.toolName}`);\n removed++;\n }\n }\n\n if (removed > 0) {\n await removeMcpFromLock(name);\n console.log(pc.green(`\\n✓ Removed \"${name}\" from ${removed} provider(s).`));\n } else {\n console.log(pc.yellow(`Server \"${name}\" not found in any provider config.`));\n }\n });\n}\n","/**\n * mcp list command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getProvider } from \"../../core/registry/providers.js\";\nimport { listMcpServers } from \"../../core/mcp/reader.js\";\nimport type { McpServerEntry } from \"../../types.js\";\n\nexport function registerMcpList(parent: Command): void {\n parent\n .command(\"list\")\n .description(\"List configured MCP servers\")\n .option(\"-a, --agent <name>\", \"List for specific agent\")\n .option(\"-g, --global\", \"List global config\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { agent?: string; global?: boolean; json?: boolean }) => {\n const providers = opts.agent\n ? [getProvider(opts.agent)].filter((p): p is NonNullable<typeof p> => p !== undefined)\n : getInstalledProviders();\n\n const allEntries: McpServerEntry[] = [];\n\n for (const provider of providers) {\n // With --global, use global. Otherwise use project if provider supports it, else global.\n const scope: \"project\" | \"global\" = opts.global\n ? \"global\"\n : provider.configPathProject\n ? \"project\"\n : \"global\";\n\n const entries = await listMcpServers(provider, scope);\n allEntries.push(...entries);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(allEntries.map(e => ({\n provider: e.providerId,\n name: e.name,\n config: e.config,\n })), null, 2));\n return;\n }\n\n if (allEntries.length === 0) {\n console.log(pc.dim(\"No MCP servers configured.\"));\n return;\n }\n\n console.log(pc.bold(`\\n${allEntries.length} MCP server(s) configured:\\n`));\n\n for (const entry of allEntries) {\n console.log(` ${pc.bold(entry.name.padEnd(25))} ${pc.dim(entry.providerId)}`);\n }\n\n console.log();\n });\n}\n","/**\n * mcp detect command - auto-detect installed MCP tools\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { existsSync } from \"node:fs\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { resolveConfigPath, listMcpServers } from \"../../core/mcp/reader.js\";\n\nexport function registerMcpDetect(parent: Command): void {\n parent\n .command(\"detect\")\n .description(\"Auto-detect installed MCP tools and their configurations\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const providers = getInstalledProviders();\n\n const detected: Array<{\n provider: string;\n hasGlobalConfig: boolean;\n hasProjectConfig: boolean;\n globalServers: string[];\n projectServers: string[];\n }> = [];\n\n for (const provider of providers) {\n const globalPath = resolveConfigPath(provider, \"global\");\n const projectPath = resolveConfigPath(provider, \"project\");\n\n const globalEntries = await listMcpServers(provider, \"global\");\n const projectEntries = await listMcpServers(provider, \"project\");\n\n detected.push({\n provider: provider.id,\n hasGlobalConfig: globalPath !== null && existsSync(globalPath),\n hasProjectConfig: projectPath !== null && existsSync(projectPath),\n globalServers: globalEntries.map(e => e.name),\n projectServers: projectEntries.map(e => e.name),\n });\n }\n\n if (opts.json) {\n console.log(JSON.stringify(detected, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\n${detected.length} provider(s) with MCP support:\\n`));\n\n for (const d of detected) {\n const globalIcon = d.hasGlobalConfig ? pc.green(\"G\") : pc.dim(\"-\");\n const projectIcon = d.hasProjectConfig ? pc.green(\"P\") : pc.dim(\"-\");\n const servers = [...d.globalServers, ...d.projectServers];\n const serverList = servers.length > 0 ? pc.dim(servers.join(\", \")) : pc.dim(\"no servers\");\n\n console.log(` [${globalIcon}${projectIcon}] ${pc.bold(d.provider.padEnd(20))} ${serverList}`);\n }\n\n console.log(pc.dim(\"\\nG = global config, P = project config\"));\n console.log();\n });\n}\n","/**\n * MCP command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerMcpInstall } from \"./install.js\";\nimport { registerMcpRemove } from \"./remove.js\";\nimport { registerMcpList } from \"./list.js\";\nimport { registerMcpDetect } from \"./detect.js\";\n\nexport function registerMcpCommands(program: Command): void {\n const mcp = program\n .command(\"mcp\")\n .description(\"Manage MCP server configurations\");\n\n registerMcpInstall(mcp);\n registerMcpRemove(mcp);\n registerMcpList(mcp);\n registerMcpDetect(mcp);\n}\n","/**\n * instructions inject command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent, groupByInstructFile } from \"../../core/instructions/templates.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsInject(parent: Command): void {\n parent\n .command(\"inject\")\n .description(\"Inject instruction blocks into all provider files\")\n .option(\"-a, --agent <name>\", \"Target specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Inject into global instruction files\")\n .option(\"--content <text>\", \"Custom content to inject\")\n .option(\"--dry-run\", \"Preview without writing\")\n .option(\"--all\", \"Target all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n content?: string;\n dryRun?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getAllProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n if (providers.length === 0) {\n console.error(pc.red(\"No providers found.\"));\n process.exit(1);\n }\n\n const content = opts.content ?? generateInjectionContent();\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n\n // Show grouped preview\n const groups = groupByInstructFile(providers);\n\n if (opts.dryRun) {\n console.log(pc.bold(\"Dry run - would inject into:\\n\"));\n for (const [file, group] of groups) {\n console.log(` ${pc.bold(file)}: ${group.map((p) => p.id).join(\", \")}`);\n }\n console.log(pc.dim(`\\n Scope: ${scope}`));\n console.log(pc.dim(` Content length: ${content.length} chars`));\n return;\n }\n\n const results = await injectAll(providers, process.cwd(), scope, content);\n\n for (const [file, action] of results) {\n const icon = action === \"created\" ? pc.green(\"+\")\n : action === \"updated\" ? pc.yellow(\"~\")\n : pc.blue(\"^\");\n console.log(` ${icon} ${file} (${action})`);\n }\n\n console.log(pc.bold(`\\n${results.size} file(s) processed.`));\n });\n}\n","/**\n * instructions check command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { checkAllInjections } from \"../../core/instructions/injector.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport { getAllProviders, getProvider } from \"../../core/registry/providers.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsCheck(parent: Command): void {\n parent\n .command(\"check\")\n .description(\"Check injection status across providers\")\n .option(\"-a, --agent <name>\", \"Check specific agent(s)\", (v, prev: string[]) => [...prev, v], [])\n .option(\"-g, --global\", \"Check global instruction files\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--all\", \"Check all known providers\")\n .action(async (opts: {\n agent: string[];\n global?: boolean;\n json?: boolean;\n all?: boolean;\n }) => {\n let providers: Provider[];\n\n if (opts.all) {\n providers = getAllProviders();\n } else if (opts.agent.length > 0) {\n providers = opts.agent\n .map((a) => getProvider(a))\n .filter((p): p is Provider => p !== undefined);\n } else {\n providers = getInstalledProviders();\n }\n\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const results = await checkAllInjections(providers, process.cwd(), scope);\n\n if (opts.json) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n console.log(pc.bold(`\\nInstruction file status (${scope}):\\n`));\n\n for (const r of results) {\n let icon: string;\n let label: string;\n\n switch (r.status) {\n case \"current\":\n icon = pc.green(\"✓\");\n label = \"current\";\n break;\n case \"outdated\":\n icon = pc.yellow(\"~\");\n label = \"outdated\";\n break;\n case \"missing\":\n icon = pc.red(\"✗\");\n label = \"missing\";\n break;\n case \"none\":\n icon = pc.dim(\"-\");\n label = \"no injection\";\n break;\n }\n\n console.log(` ${icon} ${r.file.padEnd(40)} ${label}`);\n }\n\n console.log();\n });\n}\n","/**\n * instructions update command\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { injectAll, checkAllInjections } from \"../../core/instructions/injector.js\";\nimport { generateInjectionContent } from \"../../core/instructions/templates.js\";\nimport { getInstalledProviders } from \"../../core/registry/detection.js\";\nimport type { Provider } from \"../../types.js\";\n\nexport function registerInstructionsUpdate(parent: Command): void {\n parent\n .command(\"update\")\n .description(\"Update all instruction file injections\")\n .option(\"-g, --global\", \"Update global instruction files\")\n .option(\"-y, --yes\", \"Skip confirmation\")\n .action(async (opts: { global?: boolean; yes?: boolean }) => {\n const providers = getInstalledProviders();\n const scope = opts.global ? \"global\" as const : \"project\" as const;\n const content = generateInjectionContent();\n\n // Check current state\n const checks = await checkAllInjections(providers, process.cwd(), scope, content);\n const needsUpdate = checks.filter((c) => c.status !== \"current\");\n\n if (needsUpdate.length === 0) {\n console.log(pc.green(\"All instruction files are up to date.\"));\n return;\n }\n\n console.log(pc.bold(`${needsUpdate.length} file(s) need updating:\\n`));\n for (const c of needsUpdate) {\n console.log(` ${c.file} (${c.status})`);\n }\n\n // Filter providers to only those needing updates\n const providerIds = new Set(needsUpdate.map((c) => c.provider));\n const toUpdate = providers.filter((p) => providerIds.has(p.id));\n\n const results = await injectAll(toUpdate, process.cwd(), scope, content);\n\n console.log();\n for (const [file, action] of results) {\n console.log(` ${pc.green(\"✓\")} ${file} (${action})`);\n }\n\n console.log(pc.bold(`\\n${results.size} file(s) updated.`));\n });\n}\n","/**\n * Instructions command group registration\n */\n\nimport { Command } from \"commander\";\nimport { registerInstructionsInject } from \"./inject.js\";\nimport { registerInstructionsCheck } from \"./check.js\";\nimport { registerInstructionsUpdate } from \"./update.js\";\n\nexport function registerInstructionsCommands(program: Command): void {\n const instructions = program\n .command(\"instructions\")\n .description(\"Manage instruction file injections\");\n\n registerInstructionsInject(instructions);\n registerInstructionsCheck(instructions);\n registerInstructionsUpdate(instructions);\n}\n","/**\n * config show|path commands\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { getProvider } from \"../core/registry/providers.js\";\nimport { join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { readConfig } from \"../core/formats/index.js\";\n\nexport function registerConfigCommand(program: Command): void {\n const config = program\n .command(\"config\")\n .description(\"View provider configuration\");\n\n config\n .command(\"show\")\n .description(\"Show provider configuration\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .option(\"-g, --global\", \"Show global config\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (providerId: string, opts: { global?: boolean; json?: boolean }) => {\n const provider = getProvider(providerId);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${providerId}`));\n process.exit(1);\n }\n\n const configPath = opts.global\n ? provider.configPathGlobal\n : provider.configPathProject\n ? join(process.cwd(), provider.configPathProject)\n : provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n console.log(pc.dim(`No config file at: ${configPath}`));\n return;\n }\n\n try {\n const data = await readConfig(configPath, provider.configFormat);\n\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2));\n } else {\n console.log(pc.bold(`\\n${provider.toolName} config (${configPath}):\\n`));\n console.log(JSON.stringify(data, null, 2));\n }\n } catch (err) {\n console.error(pc.red(`Error reading config: ${err instanceof Error ? err.message : String(err)}`));\n process.exit(1);\n }\n });\n\n config\n .command(\"path\")\n .description(\"Show config file path\")\n .argument(\"<provider>\", \"Provider ID or alias\")\n .argument(\"[scope]\", \"Scope: project (default) or global\", \"project\")\n .action((providerId: string, scope: string) => {\n const provider = getProvider(providerId);\n\n if (!provider) {\n console.error(pc.red(`Provider not found: ${providerId}`));\n process.exit(1);\n }\n\n if (scope === \"global\") {\n console.log(provider.configPathGlobal);\n } else {\n if (provider.configPathProject) {\n console.log(join(process.cwd(), provider.configPathProject));\n } else {\n console.log(pc.dim(`${provider.toolName} has no project-level config`));\n console.log(provider.configPathGlobal);\n }\n }\n });\n}\n","/**\n * doctor command - diagnose configuration issues and health\n */\n\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { execFileSync } from \"node:child_process\";\nimport { existsSync, readdirSync, lstatSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { getAllProviders, getProviderCount } from \"../core/registry/providers.js\";\nimport { detectAllProviders } from \"../core/registry/detection.js\";\nimport { readLockFile } from \"../core/mcp/lock.js\";\nimport { readConfig } from \"../core/formats/index.js\";\nimport type { Provider } from \"../types.js\";\n\nconst CAAMP_VERSION = \"0.2.0\";\n\ninterface CheckResult {\n label: string;\n status: \"pass\" | \"warn\" | \"fail\";\n detail?: string;\n}\n\ninterface SectionResult {\n name: string;\n checks: CheckResult[];\n}\n\nfunction getNodeVersion(): string {\n return process.version;\n}\n\nfunction getNpmVersion(): string | null {\n try {\n return execFileSync(\"npm\", [\"--version\"], { stdio: \"pipe\", encoding: \"utf-8\" }).trim();\n } catch {\n return null;\n }\n}\n\nfunction checkEnvironment(): SectionResult {\n const checks: CheckResult[] = [];\n\n checks.push({ label: `Node.js ${getNodeVersion()}`, status: \"pass\" });\n\n const npmVersion = getNpmVersion();\n if (npmVersion) {\n checks.push({ label: `npm ${npmVersion}`, status: \"pass\" });\n } else {\n checks.push({ label: \"npm not found\", status: \"warn\" });\n }\n\n checks.push({ label: `CAAMP v${CAAMP_VERSION}`, status: \"pass\" });\n checks.push({ label: `${process.platform} ${process.arch}`, status: \"pass\" });\n\n return { name: \"Environment\", checks };\n}\n\nfunction checkRegistry(): SectionResult {\n const checks: CheckResult[] = [];\n\n try {\n const providers = getAllProviders();\n const count = getProviderCount();\n checks.push({ label: `${count} providers loaded`, status: \"pass\" });\n\n const malformed: string[] = [];\n for (const p of providers) {\n if (!p.id || !p.toolName || !p.configKey || !p.configFormat) {\n malformed.push(p.id || \"(unknown)\");\n }\n }\n\n if (malformed.length === 0) {\n checks.push({ label: \"All entries valid\", status: \"pass\" });\n } else {\n checks.push({\n label: `${malformed.length} malformed entries`,\n status: \"fail\",\n detail: malformed.join(\", \"),\n });\n }\n } catch (err) {\n checks.push({\n label: \"Failed to load registry\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Registry\", checks };\n}\n\nfunction checkInstalledProviders(): SectionResult {\n const checks: CheckResult[] = [];\n\n try {\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n\n checks.push({ label: `${installed.length} found`, status: \"pass\" });\n\n for (const r of installed) {\n const methods = r.methods.join(\", \");\n checks.push({ label: `${r.provider.toolName} (${methods})`, status: \"pass\" });\n }\n } catch (err) {\n checks.push({\n label: \"Detection failed\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Installed Providers\", checks };\n}\n\nfunction checkSkillSymlinks(): SectionResult {\n const checks: CheckResult[] = [];\n\n const canonicalDir = join(homedir(), \".agents\", \"skills\");\n\n if (!existsSync(canonicalDir)) {\n checks.push({ label: \"0 canonical skills\", status: \"pass\" });\n checks.push({ label: \"No broken symlinks\", status: \"pass\" });\n return { name: \"Skills\", checks };\n }\n\n let canonicalCount = 0;\n try {\n const entries = readdirSync(canonicalDir);\n canonicalCount = entries.length;\n checks.push({ label: `${canonicalCount} canonical skills`, status: \"pass\" });\n } catch {\n checks.push({ label: \"Cannot read skills directory\", status: \"warn\" });\n return { name: \"Skills\", checks };\n }\n\n // Check symlinks in provider skill directories\n const broken: string[] = [];\n const providers = getAllProviders();\n for (const provider of providers) {\n const skillDir = provider.pathSkills;\n if (!existsSync(skillDir)) continue;\n\n try {\n const entries = readdirSync(skillDir);\n for (const entry of entries) {\n const fullPath = join(skillDir, entry);\n try {\n const stat = lstatSync(fullPath);\n if (stat.isSymbolicLink()) {\n // Check if target exists\n if (!existsSync(fullPath)) {\n broken.push(`${provider.id}/${entry}`);\n }\n }\n } catch {\n // skip unreadable entries\n }\n }\n } catch {\n // skip unreadable dirs\n }\n }\n\n if (broken.length === 0) {\n checks.push({ label: \"No broken symlinks\", status: \"pass\" });\n } else {\n checks.push({\n label: `${broken.length} broken symlinks`,\n status: \"warn\",\n detail: broken.join(\", \"),\n });\n }\n\n return { name: \"Skills\", checks };\n}\n\nasync function checkLockFile(): Promise<SectionResult> {\n const checks: CheckResult[] = [];\n\n try {\n const lock = await readLockFile();\n checks.push({ label: \"Lock file valid\", status: \"pass\" });\n\n // Check for orphaned skill entries (canonical path no longer exists)\n let orphaned = 0;\n for (const [name, entry] of Object.entries(lock.skills)) {\n if (entry.canonicalPath && !existsSync(entry.canonicalPath)) {\n orphaned++;\n }\n }\n\n // Check for orphaned MCP entries\n // MCP servers don't have canonical paths to verify on disk,\n // so we only count skill orphans\n if (orphaned === 0) {\n checks.push({ label: `0 orphaned entries`, status: \"pass\" });\n } else {\n checks.push({\n label: `${orphaned} orphaned skill entries`,\n status: \"warn\",\n detail: \"Skills tracked in lock file but missing from disk\",\n });\n }\n } catch (err) {\n checks.push({\n label: \"Failed to read lock file\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n\n return { name: \"Lock File\", checks };\n}\n\nasync function checkConfigFiles(): Promise<SectionResult> {\n const checks: CheckResult[] = [];\n\n const results = detectAllProviders();\n const installed = results.filter((r) => r.installed);\n\n for (const r of installed) {\n const provider = r.provider;\n const configPath = provider.configPathGlobal;\n\n if (!existsSync(configPath)) {\n checks.push({\n label: `${provider.id}: no config file found`,\n status: \"warn\",\n detail: configPath,\n });\n continue;\n }\n\n try {\n await readConfig(configPath, provider.configFormat);\n const relPath = configPath.replace(homedir(), \"~\");\n checks.push({\n label: `${provider.id}: ${relPath} readable`,\n status: \"pass\",\n });\n } catch (err) {\n checks.push({\n label: `${provider.id}: config parse error`,\n status: \"fail\",\n detail: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n if (installed.length === 0) {\n checks.push({ label: \"No installed providers to check\", status: \"pass\" });\n }\n\n return { name: \"Config Files\", checks };\n}\n\nfunction formatSection(section: SectionResult): string {\n const lines: string[] = [];\n lines.push(` ${pc.bold(section.name)}`);\n\n for (const check of section.checks) {\n const icon =\n check.status === \"pass\"\n ? pc.green(\"✓\")\n : check.status === \"warn\"\n ? pc.yellow(\"⚠\")\n : pc.red(\"✗\");\n\n lines.push(` ${icon} ${check.label}`);\n\n if (check.detail) {\n lines.push(` ${pc.dim(check.detail)}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\ninterface JsonOutput {\n version: string;\n sections: Array<{\n name: string;\n checks: CheckResult[];\n }>;\n summary: {\n passed: number;\n warnings: number;\n errors: number;\n };\n}\n\nexport function registerDoctorCommand(program: Command): void {\n program\n .command(\"doctor\")\n .description(\"Diagnose configuration issues and health\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const sections: SectionResult[] = [];\n\n sections.push(checkEnvironment());\n sections.push(checkRegistry());\n sections.push(checkInstalledProviders());\n sections.push(checkSkillSymlinks());\n sections.push(await checkLockFile());\n sections.push(await checkConfigFiles());\n\n // Tally results\n let passed = 0;\n let warnings = 0;\n let errors = 0;\n\n for (const section of sections) {\n for (const check of section.checks) {\n if (check.status === \"pass\") passed++;\n else if (check.status === \"warn\") warnings++;\n else errors++;\n }\n }\n\n if (opts.json) {\n const output: JsonOutput = {\n version: CAAMP_VERSION,\n sections: sections.map((s) => ({\n name: s.name,\n checks: s.checks,\n })),\n summary: { passed, warnings, errors },\n };\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n\n console.log(pc.bold(\"\\ncaamp doctor\\n\"));\n\n for (const section of sections) {\n console.log(formatSection(section));\n console.log();\n }\n\n // Summary line\n const parts: string[] = [];\n parts.push(pc.green(`${passed} checks passed`));\n if (warnings > 0) parts.push(pc.yellow(`${warnings} warning${warnings !== 1 ? \"s\" : \"\"}`));\n if (errors > 0) parts.push(pc.red(`${errors} error${errors !== 1 ? \"s\" : \"\"}`));\n\n console.log(` ${pc.bold(\"Summary\")}: ${parts.join(\", \")}`);\n console.log();\n\n if (errors > 0) {\n process.exit(1);\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,eAAe;;;ACDxB,OAAO,QAAQ;AAUR,SAAS,yBAAyBA,UAAwB;AAC/D,QAAM,YAAYA,SACf,QAAQ,WAAW,EACnB,YAAY,2BAA2B;AAE1C,YACG,QAAQ,MAAM,EACd,YAAY,8BAA8B,EAC1C,OAAO,UAAU,gBAAgB,EACjC,OAAO,iBAAiB,6CAA6C,EACrE,OAAO,OAAO,SAA4C;AACzD,UAAM,MAAM,KAAK,OACb,uBAAuB,KAAK,IAAiC,IAC7D,gBAAgB;AAEpB,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AACxC;AAAA,IACF;AAEA,YAAQ,IAAI,GAAG,KAAK;AAAA,0BAA6B,mBAAmB,CAAC,EAAE,CAAC;AACxE,YAAQ,IAAI,GAAG,IAAI,GAAG,iBAAiB,CAAC;AAAA,CAAc,CAAC;AAGvD,UAAM,QAAQ,CAAC,QAAQ,UAAU,KAAK;AACtC,eAAW,QAAQ,OAAO;AACxB,YAAM,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,aAAa,IAAI;AAC3D,UAAI,cAAc,WAAW,EAAG;AAEhC,YAAM,YAAY,SAAS,SAAS,GAAG,MAAM,MAAM,IAAI,SAAS,WAAW,GAAG,OAAO,QAAQ,IAAI,GAAG,IAAI,KAAK;AAC7G,cAAQ,IAAI,GAAG,SAAS,YAAY;AAEpC,iBAAW,KAAK,eAAe;AAC7B,cAAM,SAAS,EAAE,WAAW,WACxB,GAAG,MAAM,QAAQ,IACjB,EAAE,WAAW,SACX,GAAG,OAAO,MAAM,IAChB,GAAG,IAAI,EAAE,MAAM;AAErB,gBAAQ,IAAI,KAAK,GAAG,KAAK,EAAE,UAAU,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,OAAO,EAAE,CAAC,KAAK,MAAM,GAAG;AAAA,MAChH;AACA,cAAQ,IAAI;AAAA,IACd;AAAA,EACF,CAAC;AAEH,YACG,QAAQ,QAAQ,EAChB,YAAY,iCAAiC,EAC7C,OAAO,UAAU,gBAAgB,EACjC,OAAO,aAAa,iCAAiC,EACrD,OAAO,OAAO,SAAgD;AAC7D,UAAM,UAAU,KAAK,UACjB,uBAAuB,QAAQ,IAAI,CAAC,IACpC,mBAAmB;AAEvB,UAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS;AAEnD,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,UAAU,IAAI,CAAC,OAAO;AAAA,QAC/C,IAAI,EAAE,SAAS;AAAA,QACf,UAAU,EAAE,SAAS;AAAA,QACrB,SAAS,EAAE;AAAA,QACX,iBAAiB,EAAE;AAAA,MACrB,EAAE,GAAG,MAAM,CAAC,CAAC;AACb;AAAA,IACF;AAEA,YAAQ,IAAI,GAAG,KAAK;AAAA,WAAc,UAAU,MAAM;AAAA,CAAyB,CAAC;AAE5E,eAAW,KAAK,WAAW;AACzB,YAAM,UAAU,EAAE,QAAQ,KAAK,IAAI;AACnC,YAAM,UAAU,EAAE,kBAAkB,GAAG,MAAM,YAAY,IAAI;AAC7D,cAAQ,IAAI,KAAK,GAAG,MAAM,QAAG,CAAC,IAAI,GAAG,KAAK,EAAE,SAAS,SAAS,OAAO,EAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,GAAG,OAAO,EAAE;AAAA,IAC9G;AAEA,UAAM,eAAe,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS;AACvD,QAAI,aAAa,SAAS,GAAG;AAC3B,cAAQ,IAAI,GAAG,IAAI;AAAA,IAAO,aAAa,MAAM,yBAAyB,CAAC;AAAA,IACzE;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AAEH,YACG,QAAQ,MAAM,EACd,YAAY,uBAAuB,EACnC,SAAS,QAAQ,sBAAsB,EACvC,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,IAAY,SAA6B;AACtD,UAAM,WAAW,YAAY,EAAE;AAE/B,QAAI,CAAC,UAAU;AACb,cAAQ,MAAM,GAAG,IAAI,uBAAuB,EAAE,EAAE,CAAC;AACjD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C;AAAA,IACF;AAEA,YAAQ,IAAI,GAAG,KAAK;AAAA,EAAK,SAAS,QAAQ,EAAE,CAAC;AAC7C,YAAQ,IAAI,GAAG,IAAI,MAAM,SAAS,MAAM;AAAA,CAAI,CAAC;AAE7C,YAAQ,IAAI,sBAAsB,SAAS,EAAE,EAAE;AAC/C,YAAQ,IAAI,8BAA8B,SAAS,SAAS,EAAE;AAC9D,QAAI,SAAS,QAAQ,SAAS,GAAG;AAC/B,cAAQ,IAAI,sBAAsB,SAAS,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,IACjE;AACA,YAAQ,IAAI,sBAAsB,SAAS,MAAM,EAAE;AACnD,YAAQ,IAAI,sBAAsB,SAAS,QAAQ,EAAE;AACrD,YAAQ,IAAI;AACZ,YAAQ,IAAI,sBAAsB,SAAS,YAAY,EAAE;AACzD,YAAQ,IAAI,sBAAsB,SAAS,YAAY,EAAE;AACzD,YAAQ,IAAI,sBAAsB,SAAS,SAAS,EAAE;AACtD,YAAQ,IAAI,sBAAsB,SAAS,oBAAoB,KAAK,IAAI,CAAC,EAAE;AAC3E,YAAQ,IAAI,sBAAsB,SAAS,kBAAkB,QAAQ,IAAI,EAAE;AAC3E,YAAQ,IAAI;AACZ,YAAQ,IAAI,GAAG,IAAI,UAAU,CAAC;AAC9B,YAAQ,IAAI,sBAAsB,SAAS,UAAU,EAAE;AACvD,YAAQ,IAAI,sBAAsB,SAAS,eAAe,QAAQ,EAAE;AACpE,YAAQ,IAAI,sBAAsB,SAAS,gBAAgB,EAAE;AAC7D,YAAQ,IAAI,sBAAsB,SAAS,qBAAqB,QAAQ,EAAE;AAC1E,YAAQ,IAAI,sBAAsB,SAAS,UAAU,EAAE;AACvD,YAAQ,IAAI,sBAAsB,SAAS,qBAAqB,QAAQ,EAAE;AAC1E,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;ACzIA,OAAOC,SAAQ;;;ACCf,SAAS,iBAAiB;AAC1B,SAAS,SAAS,UAAU;AAC5B,SAAS,cAAc;AACvB,SAAS,YAAY;AASrB,eAAsB,UACpB,OACA,MACA,KACA,SACyB;AACzB,QAAM,SAAS,MAAM,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC;AACrD,QAAM,UAAU,sBAAsB,KAAK,IAAI,IAAI;AAEnD,QAAM,MAAM,UAAU;AAEtB,QAAM,eAAe,CAAC,WAAW,GAAG;AACpC,MAAI,KAAK;AACP,iBAAa,KAAK,YAAY,GAAG;AAAA,EACnC;AAEA,QAAM,IAAI,MAAM,SAAS,QAAQ,YAAY;AAE7C,QAAM,YAAY,UAAU,KAAK,QAAQ,OAAO,IAAI;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,YAAY;AACnB,UAAI;AACF,cAAM,GAAG,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,MACtC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;;;AC5CA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,WAAAC,UAAS,MAAAC,WAAU;AAC5B,SAAS,UAAAC,eAAc;AACvB,SAAS,QAAAC,aAAY;AAIrB,eAAsB,gBACpB,OACA,MACA,KACA,SACyB;AACzB,QAAM,SAAS,MAAMH,SAAQG,MAAKD,QAAO,GAAG,WAAW,CAAC;AACxD,QAAM,UAAU,sBAAsB,KAAK,IAAI,IAAI;AAEnD,QAAM,MAAMH,WAAU;AAEtB,QAAM,eAAe,CAAC,WAAW,GAAG;AACpC,MAAI,KAAK;AACP,iBAAa,KAAK,YAAY,GAAG;AAAA,EACnC;AAEA,QAAM,IAAI,MAAM,SAAS,QAAQ,YAAY;AAE7C,QAAM,YAAY,UAAUI,MAAK,QAAQ,OAAO,IAAI;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,YAAY;AACnB,UAAI;AACF,cAAMF,IAAG,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,MACtC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;;;AFzBO,SAAS,sBAAsB,QAAuB;AAC3D,SACG,QAAQ,SAAS,EACjB,YAAY,kDAAkD,EAC9D,SAAS,YAAY,qDAAqD,EAC1E,OAAO,sBAAsB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAChG,OAAO,gBAAgB,kBAAkB,EACzC,OAAO,aAAa,mBAAmB,EACvC,OAAO,SAAS,gCAAgC,EAChD,OAAO,OAAO,QAAgB,SAKzB;AAEJ,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,sBAAsB;AAAA,IACpC,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,MAAMG,IAAG,IAAI,kDAAkD,CAAC;AACxE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ,IAAIA,IAAG,IAAI,iBAAiB,UAAU,MAAM,iBAAiB,CAAC;AAEtE,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AAGJ,QAAI,oBAAoB,MAAM,GAAG;AAC/B,cAAQ,IAAIA,IAAG,IAAI,6BAA6B,MAAM,KAAK,CAAC;AAC5D,YAAM,SAAS,IAAI,kBAAkB;AACrC,YAAM,QAAQ,MAAM,OAAO,SAAS,MAAM;AAE1C,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAMA,IAAG,IAAI,oBAAoB,MAAM,EAAE,CAAC;AAClD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,cAAQ,IAAI,YAAYA,IAAG,KAAK,MAAM,IAAI,CAAC,OAAO,MAAM,MAAM,KAAKA,IAAG,IAAI,MAAM,YAAY,CAAC,GAAG;AAEhG,YAAM,SAAS,YAAY,MAAM,SAAS;AAC1C,UAAI,OAAO,SAAS,YAAY,CAAC,OAAO,SAAS,CAAC,OAAO,MAAM;AAC7D,gBAAQ,MAAMA,IAAG,IAAI,iCAAiC,CAAC;AACvD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,YAAM,SAAS,MAAM,UAAU,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,MAAM,OAAO,MAAM,KAAK,QAAQ,gBAAgB,EAAE,IAAI,MAAS;AACrI,kBAAY,OAAO;AACnB,gBAAU,OAAO;AACjB,kBAAY,MAAM;AAClB,oBAAc,MAAM;AACpB,mBAAa,OAAO;AAAA,IACtB,OAAO;AAEL,YAAM,SAAS,YAAY,MAAM;AACjC,kBAAY,OAAO;AACnB,oBAAc,OAAO;AACrB,mBAAa,OAAO;AAEpB,UAAI,OAAO,SAAS,YAAY,OAAO,SAAS,OAAO,MAAM;AAC3D,cAAM,SAAS,MAAM,UAAU,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,OAAO,IAAI;AACjF,oBAAY,OAAO;AACnB,kBAAU,OAAO;AAAA,MACnB,WAAW,OAAO,SAAS,YAAY,OAAO,SAAS,OAAO,MAAM;AAClE,cAAM,SAAS,MAAM,gBAAgB,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,OAAO,IAAI;AACvF,oBAAY,OAAO;AACnB,kBAAU,OAAO;AAAA,MACnB,WAAW,OAAO,SAAS,SAAS;AAClC,oBAAY,OAAO;AAAA,MACrB,OAAO;AACL,gBAAQ,MAAMA,IAAG,IAAI,4BAA4B,OAAO,IAAI,EAAE,CAAC;AAC/D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,QAAI;AACF,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,UAAU;AAAA,MACjB;AAEA,UAAI,OAAO,SAAS;AAClB,gBAAQ,IAAIA,IAAG,MAAM;AAAA,mBAAiBA,IAAG,KAAK,SAAS,CAAC,EAAE,CAAC;AAC3D,gBAAQ,IAAI,gBAAgBA,IAAG,IAAI,OAAO,aAAa,CAAC,EAAE;AAC1D,gBAAQ,IAAI,gBAAgB,OAAO,aAAa,KAAK,IAAI,CAAC,EAAE;AAG5D,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP,OAAO;AAAA,UACP,KAAK,UAAU;AAAA,QACjB;AAAA,MACF;AAEA,UAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,gBAAQ,IAAIA,IAAG,OAAO,aAAa,CAAC;AACpC,mBAAW,OAAO,OAAO,QAAQ;AAC/B,kBAAQ,IAAI,KAAKA,IAAG,OAAO,GAAG,CAAC,IAAI,GAAG,EAAE;AAAA,QAC1C;AAAA,MACF;AAAA,IACF,UAAE;AACA,UAAI,QAAS,OAAM,QAAQ;AAAA,IAC7B;AAAA,EACF,CAAC;AACL;;;AGvIA,OAAOC,SAAQ;AAKR,SAAS,qBAAqB,QAAuB;AAC1D,SACG,QAAQ,QAAQ,EAChB,YAAY,2BAA2B,EACvC,SAAS,UAAU,sBAAsB,EACzC,OAAO,gBAAgB,0BAA0B,EACjD,OAAO,aAAa,mBAAmB,EACvC,OAAO,OAAO,MAA0B,SAA8C;AACrF,UAAM,YAAY,sBAAsB;AAExC,QAAI,MAAM;AACR,YAAM,SAAS,MAAM,YAAY,MAAM,WAAW,KAAK,UAAU,KAAK;AAEtE,UAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,gBAAQ,IAAIC,IAAG,MAAM,kBAAaA,IAAG,KAAK,IAAI,CAAC,UAAU,OAAO,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;AACrF,cAAM,oBAAoB,IAAI;AAAA,MAChC,OAAO;AACL,gBAAQ,IAAIA,IAAG,OAAO,SAAS,IAAI,6BAA6B,CAAC;AAAA,MACnE;AAEA,UAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,mBAAW,OAAO,OAAO,QAAQ;AAC/B,kBAAQ,IAAIA,IAAG,IAAI,KAAK,GAAG,EAAE,CAAC;AAAA,QAChC;AAAA,MACF;AAAA,IACF,OAAO;AAEL,YAAM,SAAS,MAAM,oBAAoB;AACzC,UAAI,OAAO,WAAW,GAAG;AACvB,gBAAQ,IAAIA,IAAG,IAAI,sBAAsB,CAAC;AAC1C;AAAA,MACF;AAEA,cAAQ,IAAIA,IAAG,KAAK,mBAAmB,CAAC;AACxC,iBAAW,KAAK,QAAQ;AACtB,gBAAQ,IAAI,KAAK,CAAC,EAAE;AAAA,MACtB;AACA,cAAQ,IAAIA,IAAG,IAAI,mCAAmC,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACL;;;AC7CA,OAAOC,SAAQ;AAKf,SAAS,QAAAC,aAAY;AAEd,SAAS,mBAAmB,QAAuB;AACxD,SACG,QAAQ,MAAM,EACd,YAAY,uBAAuB,EACnC,OAAO,gBAAgB,oBAAoB,EAC3C,OAAO,sBAAsB,gCAAgC,EAC7D,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA+D;AAC5E,QAAI,OAAiB,CAAC;AAEtB,QAAI,KAAK,OAAO;AACd,YAAM,WAAW,YAAY,KAAK,KAAK;AACvC,UAAI,CAAC,UAAU;AACb,gBAAQ,MAAMC,IAAG,IAAI,uBAAuB,KAAK,KAAK,EAAE,CAAC;AACzD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,aAAO,KAAK,SACR,CAAC,SAAS,UAAU,IACpB,CAACD,MAAK,QAAQ,IAAI,GAAG,SAAS,iBAAiB,CAAC;AAAA,IACtD,WAAW,KAAK,QAAQ;AAEtB,YAAM,YAAY,sBAAsB;AACxC,aAAO,UAAU,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,OAAO;AAAA,IAC1D,OAAO;AAEL,YAAM,YAAY,sBAAsB;AACxC,aAAO,UACJ,IAAI,CAAC,MAAMA,MAAK,QAAQ,IAAI,GAAG,EAAE,iBAAiB,CAAC,EACnD,OAAO,OAAO;AAAA,IACnB;AAEA,UAAM,SAAS,MAAM,oBAAoB,IAAI;AAE7C,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C;AAAA,IACF;AAEA,QAAI,OAAO,WAAW,GAAG;AACvB,cAAQ,IAAIC,IAAG,IAAI,kBAAkB,CAAC;AACtC;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,KAAK;AAAA,EAAK,OAAO,MAAM;AAAA,CAAoB,CAAC;AAE3D,eAAW,SAAS,QAAQ;AAC1B,cAAQ,IAAI,KAAKA,IAAG,KAAK,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC,IAAIA,IAAG,IAAI,MAAM,SAAS,eAAe,EAAE,CAAC,EAAE;AAAA,IAC/F;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;AC1DA,OAAOC,SAAQ;AAGR,SAAS,mBAAmB,QAAuB;AACxD,SACG,QAAQ,MAAM,EACd,YAAY,+BAA+B,EAC3C,SAAS,WAAW,cAAc,EAClC,OAAO,UAAU,gBAAgB,EACjC,OAAO,mBAAmB,eAAe,IAAI,EAC7C,OAAO,OAAO,OAA2B,SAA4C;AACpF,QAAI,CAAC,OAAO;AACV,cAAQ,IAAIC,IAAG,IAAI,kCAAkC,CAAC;AACtD;AAAA,IACF;AAEA,UAAM,QAAQ,SAAS,KAAK,OAAO,EAAE;AACrC,UAAM,SAAS,IAAI,kBAAkB;AAErC,YAAQ,IAAIA,IAAG,IAAI,+BAA+B,KAAK;AAAA,CAAQ,CAAC;AAEhE,UAAM,UAAU,MAAM,OAAO,OAAO,OAAO,KAAK;AAEhD,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIA,IAAG,OAAO,mBAAmB,CAAC;AAC1C;AAAA,IACF;AAEA,eAAW,SAAS,SAAS;AAC3B,YAAM,QAAQ,MAAM,QAAQ,IAAIA,IAAG,OAAO,UAAK,YAAY,MAAM,KAAK,CAAC,EAAE,IAAI;AAC7E,cAAQ,IAAI,KAAKA,IAAG,KAAK,MAAM,WAAW,OAAO,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE;AAChE,cAAQ,IAAI,KAAKA,IAAG,IAAI,MAAM,aAAa,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;AAChE,cAAQ,IAAI,KAAKA,IAAG,IAAI,QAAQ,MAAM,MAAM,EAAE,CAAC,EAAE;AACjD,cAAQ,IAAI;AAAA,IACd;AAEA,YAAQ,IAAIA,IAAG,IAAI,iDAAiD,CAAC;AAAA,EACvE,CAAC;AACL;AAEA,SAAS,YAAY,GAAmB;AACtC,MAAI,KAAK,IAAM,QAAO,IAAI,IAAI,KAAM,QAAQ,CAAC,CAAC;AAC9C,SAAO,OAAO,CAAC;AACjB;;;AChDA,OAAOC,SAAQ;AAGR,SAAS,oBAAoB,QAAuB;AACzD,SACG,QAAQ,OAAO,EACf,YAAY,mCAAmC,EAC/C,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA6B;AAC1C,UAAM,UAAU,MAAM,iBAAiB;AACvC,UAAM,UAAU,OAAO,QAAQ,OAAO;AAEtC,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIC,IAAG,IAAI,oBAAoB,CAAC;AACxC;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,IAAI,YAAY,QAAQ,MAAM;AAAA,CAA4B,CAAC;AAE1E,UAAM,UAAU,CAAC;AACjB,eAAW,CAAC,MAAM,KAAK,KAAK,SAAS;AACnC,YAAM,SAAS,MAAM,iBAAiB,IAAI;AAC1C,cAAQ,KAAK,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC;AAAA,IACzC;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,IACF;AAEA,QAAI,mBAAmB;AAEvB,eAAW,KAAK,SAAS;AACvB,UAAI;AACJ,UAAI,EAAE,WAAW,oBAAoB;AACnC,sBAAcA,IAAG,OAAO,kBAAkB;AAC1C;AAAA,MACF,WAAW,EAAE,WAAW,cAAc;AACpC,sBAAcA,IAAG,MAAM,YAAY;AAAA,MACrC,OAAO;AACL,sBAAcA,IAAG,IAAI,SAAS;AAAA,MAChC;AAEA,cAAQ,IAAI,KAAKA,IAAG,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,WAAW,EAAE;AAE5D,UAAI,EAAE,kBAAkB,EAAE,eAAe;AACvC,cAAM,UAAU,EAAE,iBAAiB,EAAE,eAAe,MAAM,GAAG,EAAE,IAAI;AACnE,cAAM,SAAS,EAAE,iBAAiB;AAClC,YAAI,EAAE,WAAW;AACf,kBAAQ,IAAI,KAAKA,IAAG,IAAI,UAAU,CAAC,IAAI,OAAO,KAAKA,IAAG,IAAI,IAAI,CAAC,KAAKA,IAAG,KAAK,MAAM,CAAC,EAAE;AAAA,QACvF,OAAO;AACL,kBAAQ,IAAI,KAAKA,IAAG,IAAI,UAAU,CAAC,IAAI,OAAO,EAAE;AAAA,QAClD;AAAA,MACF;AAEA,cAAQ,IAAI,KAAKA,IAAG,IAAI,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC,EAAE;AACtD,cAAQ,IAAI,KAAKA,IAAG,IAAI,WAAW,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE;AACjE,cAAQ,IAAI;AAAA,IACd;AAEA,QAAI,mBAAmB,GAAG;AACxB,cAAQ,IAAIA,IAAG,OAAO,GAAG,gBAAgB,uBAAuB,CAAC;AACjE,cAAQ,IAAIA,IAAG,IAAI,0CAA0C,CAAC;AAAA,IAChE,OAAO;AACL,cAAQ,IAAIA,IAAG,MAAM,4BAA4B,CAAC;AAAA,IACpD;AAAA,EACF,CAAC;AACL;;;ACnEA,OAAOC,SAAQ;AASR,SAAS,qBAAqB,QAAuB;AAC1D,SACG,QAAQ,QAAQ,EAChB,YAAY,4BAA4B,EACxC,OAAO,aAAa,mBAAmB,EACvC,OAAO,OAAO,SAA4B;AACzC,UAAM,UAAU,MAAM,iBAAiB;AACvC,UAAM,UAAU,OAAO,QAAQ,OAAO;AAEtC,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIC,IAAG,IAAI,8BAA8B,CAAC;AAClD;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,IAAI,YAAY,QAAQ,MAAM,0BAA0B,CAAC;AAGxE,UAAM,WAID,CAAC;AAEN,eAAW,CAAC,IAAI,KAAK,SAAS;AAC5B,YAAM,SAAS,MAAM,iBAAiB,IAAI;AAC1C,UAAI,OAAO,WAAW;AACpB,iBAAS,KAAK;AAAA,UACZ;AAAA,UACA,gBAAgB,OAAO;AAAA,UACvB,eAAe,OAAO;AAAA,QACxB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,IAAIA,IAAG,MAAM,8BAA8B,CAAC;AACpD;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,OAAO;AAAA,EAAK,SAAS,MAAM;AAAA,CAAqC,CAAC;AAEhF,eAAW,SAAS,UAAU;AAC5B,YAAM,UAAU,MAAM,gBAAgB,MAAM,GAAG,EAAE,KAAK;AACtD,YAAM,SAAS,MAAM,iBAAiB;AACtC,cAAQ,IAAI,KAAKA,IAAG,KAAK,MAAM,IAAI,CAAC,KAAKA,IAAG,IAAI,OAAO,CAAC,KAAKA,IAAG,IAAI,IAAI,CAAC,KAAKA,IAAG,KAAK,MAAM,CAAC,EAAE;AAAA,IACjG;AAGA,QAAI,CAAC,KAAK,KAAK;AACb,YAAM,WAAW,MAAM,OAAO,UAAe;AAC7C,YAAM,KAAK,SAAS,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AACpF,YAAM,SAAS,MAAM,IAAI,QAAgB,CAAC,YAAY;AACpD,WAAG,SAASA,IAAG,IAAI,+BAA+B,GAAG,OAAO;AAAA,MAC9D,CAAC;AACD,SAAG,MAAM;AAET,UAAI,OAAO,YAAY,MAAM,OAAO,OAAO,YAAY,MAAM,OAAO;AAClE,gBAAQ,IAAIA,IAAG,IAAI,mBAAmB,CAAC;AACvC;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI;AAGZ,QAAI,eAAe;AACnB,QAAI,YAAY;AAEhB,eAAW,SAAS,UAAU;AAC5B,YAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,UAAI,CAAC,MAAO;AAEZ,cAAQ,IAAIA,IAAG,IAAI,YAAYA,IAAG,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC;AAExD,UAAI;AACF,cAAM,SAAS,YAAY,MAAM,MAAM;AACvC,YAAI;AACJ,YAAI;AAEJ,YAAI,OAAO,SAAS,YAAY,OAAO,SAAS,OAAO,MAAM;AAC3D,gBAAM,SAAS,MAAM,UAAU,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,OAAO,IAAI;AACjF,sBAAY,OAAO;AACnB,oBAAU,OAAO;AAAA,QACnB,WAAW,OAAO,SAAS,YAAY,OAAO,SAAS,OAAO,MAAM;AAClE,gBAAM,SAAS,MAAM,gBAAgB,OAAO,OAAO,OAAO,MAAM,OAAO,KAAK,OAAO,IAAI;AACvF,sBAAY,OAAO;AACnB,oBAAU,OAAO;AAAA,QACnB,OAAO;AACL,kBAAQ,IAAIA,IAAG,OAAO,aAAa,MAAM,IAAI,kBAAkB,OAAO,IAAI,gCAAgC,CAAC;AAC3G;AAAA,QACF;AAEA,YAAI;AAEF,gBAAM,YAAY,MAAM,OACrB,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAE/C,cAAI,UAAU,WAAW,GAAG;AAC1B,oBAAQ,IAAIA,IAAG,OAAO,aAAa,MAAM,IAAI,4BAA4B,CAAC;AAC1E;AAAA,UACF;AAEA,gBAAM,gBAAgB,MAAM;AAAA,YAC1B;AAAA,YACA,MAAM;AAAA,YACN;AAAA,YACA,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAEA,cAAI,cAAc,SAAS;AAEzB,kBAAM;AAAA,cACJ,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,cACN,cAAc;AAAA,cACd,cAAc;AAAA,cACd,MAAM;AAAA,cACN,MAAM;AAAA,cACN,MAAM;AAAA,YACR;AAEA,oBAAQ,IAAIA,IAAG,MAAM,aAAaA,IAAG,KAAK,MAAM,IAAI,CAAC,EAAE,CAAC;AACxD;AAAA,UACF,OAAO;AACL,oBAAQ,IAAIA,IAAG,IAAI,sBAAsB,MAAM,IAAI,oBAAoB,CAAC;AACxE;AAAA,UACF;AAEA,cAAI,cAAc,OAAO,SAAS,GAAG;AACnC,uBAAW,OAAO,cAAc,QAAQ;AACtC,sBAAQ,IAAIA,IAAG,OAAO,OAAO,GAAG,EAAE,CAAC;AAAA,YACrC;AAAA,UACF;AAAA,QACF,UAAE;AACA,cAAI,QAAS,OAAM,QAAQ;AAAA,QAC7B;AAAA,MACF,SAAS,KAAK;AACZ,cAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,gBAAQ,IAAIA,IAAG,IAAI,sBAAsB,MAAM,IAAI,KAAK,GAAG,EAAE,CAAC;AAC9D;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,QAAI,eAAe,GAAG;AACpB,cAAQ,IAAIA,IAAG,MAAM,WAAW,YAAY,YAAY,CAAC;AAAA,IAC3D;AACA,QAAI,YAAY,GAAG;AACjB,cAAQ,IAAIA,IAAG,IAAI,oBAAoB,SAAS,YAAY,CAAC;AAAA,IAC/D;AAAA,EACF,CAAC;AACL;;;ACpKA,OAAOC,SAAQ;AACf,SAAS,WAAW,aAAa;AACjC,SAAS,kBAAkB;AAC3B,SAAS,QAAAC,aAAY;AAEd,SAAS,mBAAmB,QAAuB;AACxD,SACG,QAAQ,MAAM,EACd,YAAY,gCAAgC,EAC5C,SAAS,UAAU,YAAY,EAC/B,OAAO,oBAAoB,oBAAoB,GAAG,EAClD,OAAO,OAAO,MAA0B,SAA0B;AACjE,UAAM,YAAY,QAAQ;AAC1B,UAAM,WAAWA,MAAK,KAAK,KAAK,SAAS;AAEzC,QAAI,WAAW,QAAQ,GAAG;AACxB,cAAQ,MAAMD,IAAG,IAAI,6BAA6B,QAAQ,EAAE,CAAC;AAC7D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAEzC,UAAM,WAAW;AAAA,QACf,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeP,UAAM,UAAUC,MAAK,UAAU,UAAU,GAAG,UAAU,OAAO;AAE7D,YAAQ,IAAID,IAAG,MAAM,kCAA6B,QAAQ,WAAW,CAAC;AACtE,YAAQ,IAAIA,IAAG,IAAI,eAAe,CAAC;AACnC,YAAQ,IAAIA,IAAG,IAAI,2CAA2C,CAAC;AAC/D,YAAQ,IAAIA,IAAG,IAAI,0CAA0CC,MAAK,UAAU,UAAU,CAAC,CAAC;AACxF,YAAQ,IAAID,IAAG,IAAI,wCAAwC,QAAQ,CAAC;AAAA,EACtE,CAAC;AACL;;;ACtDA,OAAOE,SAAQ;AAEf,SAAS,cAAAC,aAAY,gBAAgB;AAE9B,SAAS,oBAAoB,QAAuB;AACzD,SACG,QAAQ,OAAO,EACf,YAAY,qDAAqD,EACjE,SAAS,UAAU,iCAAiC,GAAG,EACvD,OAAO,WAAW,wBAAwB,EAC1C,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,MAAc,SAA8C;AACzE,QAAI,CAACA,YAAW,IAAI,GAAG;AACrB,cAAQ,MAAMC,IAAG,IAAI,mBAAmB,IAAI,EAAE,CAAC;AAC/C,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,OAAO,SAAS,IAAI;AAC1B,QAAI;AAEJ,QAAI,KAAK,OAAO,GAAG;AACjB,gBAAU,CAAC,MAAM,SAAS,IAAI,CAAC;AAAA,IACjC,OAAO;AACL,gBAAU,MAAM,cAAc,IAAI;AAAA,IACpC;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIA,IAAG,IAAI,kCAAkC,CAAC;AACtD;AAAA,IACF;AAEA,QAAI,KAAK,OAAO;AACd,cAAQ,IAAI,KAAK,UAAU,QAAQ,OAAO,GAAG,MAAM,CAAC,CAAC;AACrD;AAAA,IACF;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,IACF;AAGA,QAAI,gBAAgB;AACpB,QAAI,YAAY;AAEhB,eAAW,UAAU,SAAS;AAC5B,YAAM,OAAO,OAAO,SAASA,IAAG,MAAM,QAAG,IAAIA,IAAG,IAAI,QAAG;AACvD,cAAQ,IAAI;AAAA,EAAK,IAAI,IAAIA,IAAG,KAAK,OAAO,IAAI,CAAC,YAAY,OAAO,KAAK,OAAO;AAE5E,UAAI,OAAO,SAAS,WAAW,GAAG;AAChC,gBAAQ,IAAIA,IAAG,IAAI,oBAAoB,CAAC;AACxC;AAAA,MACF;AAEA,uBAAiB,OAAO,SAAS;AACjC,UAAI,CAAC,OAAO,OAAQ,aAAY;AAEhC,iBAAW,KAAK,OAAO,UAAU;AAC/B,cAAM,MAAM,EAAE,KAAK,aAAa,aAAaA,IAAG,IAAI,EAAE,KAAK,QAAQ,IAC/D,EAAE,KAAK,aAAa,SAASA,IAAG,IAAI,EAAE,KAAK,QAAQ,IACjD,EAAE,KAAK,aAAa,WAAWA,IAAG,OAAO,EAAE,KAAK,QAAQ,IACtDA,IAAG,IAAI,EAAE,KAAK,QAAQ;AAE9B,gBAAQ,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;AAC7D,gBAAQ,IAAI,KAAKA,IAAG,IAAI,IAAI,EAAE,IAAI,KAAK,EAAE,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AAAA,MACpE;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,KAAK;AAAA,EAAK,QAAQ,MAAM,qBAAqB,aAAa,aAAa,CAAC;AAEvF,QAAI,CAAC,WAAW;AACd,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AACL;;;AC1EA,OAAOC,UAAQ;AAGR,SAAS,uBAAuB,QAAuB;AAC5D,SACG,QAAQ,UAAU,EAClB,YAAY,0BAA0B,EACtC,SAAS,UAAU,oBAAoB,UAAU,EACjD,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,MAAc,SAA6B;AACxD,UAAM,SAAS,MAAM,cAAc,IAAI;AAEvC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C;AAAA,IACF;AAEA,QAAI,OAAO,OAAO;AAChB,cAAQ,IAAIC,KAAG,MAAM,UAAK,IAAI,WAAW,CAAC;AAAA,IAC5C,OAAO;AACL,cAAQ,IAAIA,KAAG,IAAI,UAAK,IAAI,wBAAwB,CAAC;AAAA,IACvD;AAEA,eAAW,SAAS,OAAO,QAAQ;AACjC,YAAM,OAAO,MAAM,UAAU,UAAUA,KAAG,IAAI,QAAG,IAAIA,KAAG,OAAO,GAAG;AAClE,cAAQ,IAAI,KAAK,IAAI,KAAK,MAAM,KAAK,KAAK,MAAM,OAAO,EAAE;AAAA,IAC3D;AAEA,QAAI,CAAC,OAAO,OAAO;AACjB,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AACL;;;ACtBO,SAAS,uBAAuBC,UAAwB;AAC7D,QAAM,SAASA,SACZ,QAAQ,QAAQ,EAChB,YAAY,wBAAwB;AAEvC,wBAAsB,MAAM;AAC5B,uBAAqB,MAAM;AAC3B,qBAAmB,MAAM;AACzB,qBAAmB,MAAM;AACzB,sBAAoB,MAAM;AAC1B,uBAAqB,MAAM;AAC3B,qBAAmB,MAAM;AACzB,sBAAoB,MAAM;AAC1B,yBAAuB,MAAM;AAC/B;;;ACxBA,OAAOC,UAAQ;AAQR,SAAS,mBAAmB,QAAuB;AACxD,SACG,QAAQ,SAAS,EACjB,YAAY,qCAAqC,EACjD,SAAS,YAAY,kDAAkD,EACvE,OAAO,sBAAsB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAChG,OAAO,gBAAgB,+BAA+B,EACtD,OAAO,qBAAqB,+BAA+B,EAC3D,OAAO,0BAA0B,yCAAyC,MAAM,EAChF,OAAO,qBAAqB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAC/F,OAAO,aAAa,mBAAmB,EACvC,OAAO,SAAS,gCAAgC,EAChD,OAAO,aAAa,yBAAyB,EAC7C,OAAO,OAAO,QAAgB,SASzB;AACJ,UAAM,SAAS,YAAY,MAAM;AACjC,UAAM,aAAa,KAAK,QAAQ,OAAO;AAGvC,UAAM,UAAkC,CAAC;AACzC,eAAW,KAAK,KAAK,QAAQ;AAC3B,YAAM,MAAM,EAAE,QAAQ,GAAG;AACzB,UAAI,MAAM,GAAG;AACX,gBAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,EAAE,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,UAAM,SAAS,kBAAkB,QAAQ,KAAK,WAAW,OAAO;AAGhE,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,sBAAsB;AAAA,IACpC,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,MAAMC,KAAG,IAAI,4BAA4B,CAAC;AAClD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAEhD,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAIA,KAAG,KAAK,0BAA0B,CAAC;AAC/C,cAAQ,IAAI,aAAaA,KAAG,KAAK,UAAU,CAAC,EAAE;AAC9C,cAAQ,IAAI,aAAa,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC,EAAE;AAC1D,cAAQ,IAAI,YAAY,KAAK,EAAE;AAC/B,cAAQ,IAAI,gBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AACnE;AAAA,IACF;AAEA,YAAQ,IAAIA,KAAG,IAAI,eAAe,UAAU,QAAQ,UAAU,MAAM;AAAA,CAAmB,CAAC;AAExF,UAAM,UAAU,MAAM;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,eAAW,KAAK,SAAS;AACvB,UAAI,EAAE,SAAS;AACb,gBAAQ,IAAI,KAAKA,KAAG,MAAM,QAAG,CAAC,IAAI,EAAE,SAAS,SAAS,OAAO,EAAE,CAAC,IAAIA,KAAG,IAAI,EAAE,UAAU,CAAC,EAAE;AAAA,MAC5F,OAAO;AACL,gBAAQ,IAAI,KAAKA,KAAG,IAAI,QAAG,CAAC,IAAI,EAAE,SAAS,SAAS,OAAO,EAAE,CAAC,IAAIA,KAAG,IAAI,EAAE,SAAS,QAAQ,CAAC,EAAE;AAAA,MACjG;AAAA,IACF;AAEA,UAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO;AACjD,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,UAAU,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;AAAA,QAClC,KAAK,UAAU;AAAA,MACjB;AAAA,IACF;AAEA,YAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,UAAU,MAAM,IAAI,QAAQ,MAAM,wBAAwB,CAAC;AAAA,EACtF,CAAC;AACL;;;ACxGA,OAAOC,UAAQ;AAOR,SAAS,kBAAkB,QAAuB;AACvD,SACG,QAAQ,QAAQ,EAChB,YAAY,sCAAsC,EAClD,SAAS,UAAU,2BAA2B,EAC9C,OAAO,sBAAsB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAChG,OAAO,gBAAgB,2BAA2B,EAClD,OAAO,SAAS,iCAAiC,EACjD,OAAO,OAAO,MAAc,SAIvB;AACJ,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,sBAAsB;AAAA,IACpC,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAChD,QAAI,UAAU;AAEd,eAAW,YAAY,WAAW;AAChC,YAAM,UAAU,MAAM,gBAAgB,UAAU,MAAM,KAAK;AAC3D,UAAI,SAAS;AACX,gBAAQ,IAAI,KAAKC,KAAG,MAAM,QAAG,CAAC,iBAAiB,SAAS,QAAQ,EAAE;AAClE;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,GAAG;AACf,YAAM,kBAAkB,IAAI;AAC5B,cAAQ,IAAIA,KAAG,MAAM;AAAA,kBAAgB,IAAI,UAAU,OAAO,eAAe,CAAC;AAAA,IAC5E,OAAO;AACL,cAAQ,IAAIA,KAAG,OAAO,WAAW,IAAI,qCAAqC,CAAC;AAAA,IAC7E;AAAA,EACF,CAAC;AACL;;;AClDA,OAAOC,UAAQ;AAMR,SAAS,gBAAgB,QAAuB;AACrD,SACG,QAAQ,MAAM,EACd,YAAY,6BAA6B,EACzC,OAAO,sBAAsB,yBAAyB,EACtD,OAAO,gBAAgB,oBAAoB,EAC3C,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA+D;AAC5E,UAAM,YAAY,KAAK,QACnB,CAAC,YAAY,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,MAAkC,MAAM,MAAS,IACnF,sBAAsB;AAE1B,UAAM,aAA+B,CAAC;AAEtC,eAAW,YAAY,WAAW;AAEhC,YAAM,QAA8B,KAAK,SACrC,WACA,SAAS,oBACP,YACA;AAEN,YAAM,UAAU,MAAM,eAAe,UAAU,KAAK;AACpD,iBAAW,KAAK,GAAG,OAAO;AAAA,IAC5B;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,WAAW,IAAI,QAAM;AAAA,QAC9C,UAAU,EAAE;AAAA,QACZ,MAAM,EAAE;AAAA,QACR,QAAQ,EAAE;AAAA,MACZ,EAAE,GAAG,MAAM,CAAC,CAAC;AACb;AAAA,IACF;AAEA,QAAI,WAAW,WAAW,GAAG;AAC3B,cAAQ,IAAIC,KAAG,IAAI,4BAA4B,CAAC;AAChD;AAAA,IACF;AAEA,YAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,WAAW,MAAM;AAAA,CAA8B,CAAC;AAEzE,eAAW,SAAS,YAAY;AAC9B,cAAQ,IAAI,KAAKA,KAAG,KAAK,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC,IAAIA,KAAG,IAAI,MAAM,UAAU,CAAC,EAAE;AAAA,IAC/E;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;ACtDA,OAAOC,UAAQ;AACf,SAAS,cAAAC,mBAAkB;AAIpB,SAAS,kBAAkB,QAAuB;AACvD,SACG,QAAQ,QAAQ,EAChB,YAAY,0DAA0D,EACtE,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA6B;AAC1C,UAAM,YAAY,sBAAsB;AAExC,UAAM,WAMD,CAAC;AAEN,eAAW,YAAY,WAAW;AAChC,YAAM,aAAa,kBAAkB,UAAU,QAAQ;AACvD,YAAM,cAAc,kBAAkB,UAAU,SAAS;AAEzD,YAAM,gBAAgB,MAAM,eAAe,UAAU,QAAQ;AAC7D,YAAM,iBAAiB,MAAM,eAAe,UAAU,SAAS;AAE/D,eAAS,KAAK;AAAA,QACZ,UAAU,SAAS;AAAA,QACnB,iBAAiB,eAAe,QAAQC,YAAW,UAAU;AAAA,QAC7D,kBAAkB,gBAAgB,QAAQA,YAAW,WAAW;AAAA,QAChE,eAAe,cAAc,IAAI,OAAK,EAAE,IAAI;AAAA,QAC5C,gBAAgB,eAAe,IAAI,OAAK,EAAE,IAAI;AAAA,MAChD,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C;AAAA,IACF;AAEA,YAAQ,IAAIC,KAAG,KAAK;AAAA,EAAK,SAAS,MAAM;AAAA,CAAkC,CAAC;AAE3E,eAAW,KAAK,UAAU;AACxB,YAAM,aAAa,EAAE,kBAAkBA,KAAG,MAAM,GAAG,IAAIA,KAAG,IAAI,GAAG;AACjE,YAAM,cAAc,EAAE,mBAAmBA,KAAG,MAAM,GAAG,IAAIA,KAAG,IAAI,GAAG;AACnE,YAAM,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,EAAE,cAAc;AACxD,YAAM,aAAa,QAAQ,SAAS,IAAIA,KAAG,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAIA,KAAG,IAAI,YAAY;AAExF,cAAQ,IAAI,MAAM,UAAU,GAAG,WAAW,KAAKA,KAAG,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,IAAI,UAAU,EAAE;AAAA,IAC/F;AAEA,YAAQ,IAAIA,KAAG,IAAI,yCAAyC,CAAC;AAC7D,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;ACnDO,SAAS,oBAAoBC,UAAwB;AAC1D,QAAM,MAAMA,SACT,QAAQ,KAAK,EACb,YAAY,kCAAkC;AAEjD,qBAAmB,GAAG;AACtB,oBAAkB,GAAG;AACrB,kBAAgB,GAAG;AACnB,oBAAkB,GAAG;AACvB;;;ACdA,OAAOC,UAAQ;AAOR,SAAS,2BAA2B,QAAuB;AAChE,SACG,QAAQ,QAAQ,EAChB,YAAY,mDAAmD,EAC/D,OAAO,sBAAsB,4BAA4B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAChG,OAAO,gBAAgB,sCAAsC,EAC7D,OAAO,oBAAoB,0BAA0B,EACrD,OAAO,aAAa,yBAAyB,EAC7C,OAAO,SAAS,4BAA4B,EAC5C,OAAO,OAAO,SAMT;AACJ,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,gBAAgB;AAAA,IAC9B,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,MAAMC,KAAG,IAAI,qBAAqB,CAAC;AAC3C,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,UAAU,KAAK,WAAW,yBAAyB;AACzD,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAGhD,UAAM,SAAS,oBAAoB,SAAS;AAE5C,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAIA,KAAG,KAAK,gCAAgC,CAAC;AACrD,iBAAW,CAAC,MAAM,KAAK,KAAK,QAAQ;AAClC,gBAAQ,IAAI,KAAKA,KAAG,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,MACxE;AACA,cAAQ,IAAIA,KAAG,IAAI;AAAA,WAAc,KAAK,EAAE,CAAC;AACzC,cAAQ,IAAIA,KAAG,IAAI,qBAAqB,QAAQ,MAAM,QAAQ,CAAC;AAC/D;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,UAAU,WAAW,QAAQ,IAAI,GAAG,OAAO,OAAO;AAExE,eAAW,CAAC,MAAM,MAAM,KAAK,SAAS;AACpC,YAAM,OAAO,WAAW,YAAYA,KAAG,MAAM,GAAG,IAC5C,WAAW,YAAYA,KAAG,OAAO,GAAG,IAClCA,KAAG,KAAK,GAAG;AACjB,cAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG;AAAA,IAC7C;AAEA,YAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,QAAQ,IAAI,qBAAqB,CAAC;AAAA,EAC7D,CAAC;AACL;;;ACnEA,OAAOC,UAAQ;AAMR,SAAS,0BAA0B,QAAuB;AAC/D,SACG,QAAQ,OAAO,EACf,YAAY,yCAAyC,EACrD,OAAO,sBAAsB,2BAA2B,CAAC,GAAG,SAAmB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAC/F,OAAO,gBAAgB,gCAAgC,EACvD,OAAO,UAAU,gBAAgB,EACjC,OAAO,SAAS,2BAA2B,EAC3C,OAAO,OAAO,SAKT;AACJ,QAAI;AAEJ,QAAI,KAAK,KAAK;AACZ,kBAAY,gBAAgB;AAAA,IAC9B,WAAW,KAAK,MAAM,SAAS,GAAG;AAChC,kBAAY,KAAK,MACd,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAAqB,MAAM,MAAS;AAAA,IACjD,OAAO;AACL,kBAAY,sBAAsB;AAAA,IACpC;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAChD,UAAM,UAAU,MAAM,mBAAmB,WAAW,QAAQ,IAAI,GAAG,KAAK;AAExE,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C;AAAA,IACF;AAEA,YAAQ,IAAIC,KAAG,KAAK;AAAA,2BAA8B,KAAK;AAAA,CAAM,CAAC;AAE9D,eAAW,KAAK,SAAS;AACvB,UAAI;AACJ,UAAI;AAEJ,cAAQ,EAAE,QAAQ;AAAA,QAChB,KAAK;AACH,iBAAOA,KAAG,MAAM,QAAG;AACnB,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,iBAAOA,KAAG,OAAO,GAAG;AACpB,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,iBAAOA,KAAG,IAAI,QAAG;AACjB,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,iBAAOA,KAAG,IAAI,GAAG;AACjB,kBAAQ;AACR;AAAA,MACJ;AAEA,cAAQ,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC,IAAI,KAAK,EAAE;AAAA,IACvD;AAEA,YAAQ,IAAI;AAAA,EACd,CAAC;AACL;;;ACtEA,OAAOC,UAAQ;AAMR,SAAS,2BAA2B,QAAuB;AAChE,SACG,QAAQ,QAAQ,EAChB,YAAY,wCAAwC,EACpD,OAAO,gBAAgB,iCAAiC,EACxD,OAAO,aAAa,mBAAmB,EACvC,OAAO,OAAO,SAA8C;AAC3D,UAAM,YAAY,sBAAsB;AACxC,UAAM,QAAQ,KAAK,SAAS,WAAoB;AAChD,UAAM,UAAU,yBAAyB;AAGzC,UAAM,SAAS,MAAM,mBAAmB,WAAW,QAAQ,IAAI,GAAG,OAAO,OAAO;AAChF,UAAM,cAAc,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,SAAS;AAE/D,QAAI,YAAY,WAAW,GAAG;AAC5B,cAAQ,IAAIC,KAAG,MAAM,uCAAuC,CAAC;AAC7D;AAAA,IACF;AAEA,YAAQ,IAAIA,KAAG,KAAK,GAAG,YAAY,MAAM;AAAA,CAA2B,CAAC;AACrE,eAAW,KAAK,aAAa;AAC3B,cAAQ,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,MAAM,GAAG;AAAA,IACzC;AAGA,UAAM,cAAc,IAAI,IAAI,YAAY,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC9D,UAAM,WAAW,UAAU,OAAO,CAAC,MAAM,YAAY,IAAI,EAAE,EAAE,CAAC;AAE9D,UAAM,UAAU,MAAM,UAAU,UAAU,QAAQ,IAAI,GAAG,OAAO,OAAO;AAEvE,YAAQ,IAAI;AACZ,eAAW,CAAC,MAAM,MAAM,KAAK,SAAS;AACpC,cAAQ,IAAI,KAAKA,KAAG,MAAM,QAAG,CAAC,IAAI,IAAI,KAAK,MAAM,GAAG;AAAA,IACtD;AAEA,YAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,QAAQ,IAAI,mBAAmB,CAAC;AAAA,EAC3D,CAAC;AACL;;;ACxCO,SAAS,6BAA6BC,UAAwB;AACnE,QAAM,eAAeA,SAClB,QAAQ,cAAc,EACtB,YAAY,oCAAoC;AAEnD,6BAA2B,YAAY;AACvC,4BAA0B,YAAY;AACtC,6BAA2B,YAAY;AACzC;;;ACZA,OAAOC,UAAQ;AAEf,SAAS,QAAAC,aAAY;AACrB,SAAS,cAAAC,mBAAkB;AAGpB,SAAS,sBAAsBC,UAAwB;AAC5D,QAAM,SAASA,SACZ,QAAQ,QAAQ,EAChB,YAAY,6BAA6B;AAE5C,SACG,QAAQ,MAAM,EACd,YAAY,6BAA6B,EACzC,SAAS,cAAc,sBAAsB,EAC7C,OAAO,gBAAgB,oBAAoB,EAC3C,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,YAAoB,SAA+C;AAChF,UAAM,WAAW,YAAY,UAAU;AAEvC,QAAI,CAAC,UAAU;AACb,cAAQ,MAAMC,KAAG,IAAI,uBAAuB,UAAU,EAAE,CAAC;AACzD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,aAAa,KAAK,SACpB,SAAS,mBACT,SAAS,oBACPC,MAAK,QAAQ,IAAI,GAAG,SAAS,iBAAiB,IAC9C,SAAS;AAEf,QAAI,CAACC,YAAW,UAAU,GAAG;AAC3B,cAAQ,IAAIF,KAAG,IAAI,sBAAsB,UAAU,EAAE,CAAC;AACtD;AAAA,IACF;AAEA,QAAI;AACF,YAAM,OAAO,MAAM,WAAW,YAAY,SAAS,YAAY;AAE/D,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,MAC3C,OAAO;AACL,gBAAQ,IAAIA,KAAG,KAAK;AAAA,EAAK,SAAS,QAAQ,YAAY,UAAU;AAAA,CAAM,CAAC;AACvE,gBAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,MAC3C;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAMA,KAAG,IAAI,yBAAyB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE,CAAC;AACjG,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,SACG,QAAQ,MAAM,EACd,YAAY,uBAAuB,EACnC,SAAS,cAAc,sBAAsB,EAC7C,SAAS,WAAW,sCAAsC,SAAS,EACnE,OAAO,CAAC,YAAoB,UAAkB;AAC7C,UAAM,WAAW,YAAY,UAAU;AAEvC,QAAI,CAAC,UAAU;AACb,cAAQ,MAAMA,KAAG,IAAI,uBAAuB,UAAU,EAAE,CAAC;AACzD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,UAAU,UAAU;AACtB,cAAQ,IAAI,SAAS,gBAAgB;AAAA,IACvC,OAAO;AACL,UAAI,SAAS,mBAAmB;AAC9B,gBAAQ,IAAIC,MAAK,QAAQ,IAAI,GAAG,SAAS,iBAAiB,CAAC;AAAA,MAC7D,OAAO;AACL,gBAAQ,IAAID,KAAG,IAAI,GAAG,SAAS,QAAQ,8BAA8B,CAAC;AACtE,gBAAQ,IAAI,SAAS,gBAAgB;AAAA,MACvC;AAAA,IACF;AAAA,EACF,CAAC;AACL;;;AC3EA,OAAOG,UAAQ;AACf,SAAS,oBAAoB;AAC7B,SAAS,cAAAC,aAAY,aAAa,iBAA+B;AACjE,SAAS,eAAe;AACxB,SAAS,QAAAC,aAAY;AAOrB,IAAM,gBAAgB;AAatB,SAAS,iBAAyB;AAChC,SAAO,QAAQ;AACjB;AAEA,SAAS,gBAA+B;AACtC,MAAI;AACF,WAAO,aAAa,OAAO,CAAC,WAAW,GAAG,EAAE,OAAO,QAAQ,UAAU,QAAQ,CAAC,EAAE,KAAK;AAAA,EACvF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,mBAAkC;AACzC,QAAM,SAAwB,CAAC;AAE/B,SAAO,KAAK,EAAE,OAAO,WAAW,eAAe,CAAC,IAAI,QAAQ,OAAO,CAAC;AAEpE,QAAM,aAAa,cAAc;AACjC,MAAI,YAAY;AACd,WAAO,KAAK,EAAE,OAAO,OAAO,UAAU,IAAI,QAAQ,OAAO,CAAC;AAAA,EAC5D,OAAO;AACL,WAAO,KAAK,EAAE,OAAO,iBAAiB,QAAQ,OAAO,CAAC;AAAA,EACxD;AAEA,SAAO,KAAK,EAAE,OAAO,UAAU,aAAa,IAAI,QAAQ,OAAO,CAAC;AAChE,SAAO,KAAK,EAAE,OAAO,GAAG,QAAQ,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,OAAO,CAAC;AAE5E,SAAO,EAAE,MAAM,eAAe,OAAO;AACvC;AAEA,SAAS,gBAA+B;AACtC,QAAM,SAAwB,CAAC;AAE/B,MAAI;AACF,UAAM,YAAY,gBAAgB;AAClC,UAAM,QAAQ,iBAAiB;AAC/B,WAAO,KAAK,EAAE,OAAO,GAAG,KAAK,qBAAqB,QAAQ,OAAO,CAAC;AAElE,UAAM,YAAsB,CAAC;AAC7B,eAAW,KAAK,WAAW;AACzB,UAAI,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,aAAa,CAAC,EAAE,cAAc;AAC3D,kBAAU,KAAK,EAAE,MAAM,WAAW;AAAA,MACpC;AAAA,IACF;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO,KAAK,EAAE,OAAO,qBAAqB,QAAQ,OAAO,CAAC;AAAA,IAC5D,OAAO;AACL,aAAO,KAAK;AAAA,QACV,OAAO,GAAG,UAAU,MAAM;AAAA,QAC1B,QAAQ;AAAA,QACR,QAAQ,UAAU,KAAK,IAAI;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,KAAK;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACzD,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,MAAM,YAAY,OAAO;AACpC;AAEA,SAAS,0BAAyC;AAChD,QAAM,SAAwB,CAAC;AAE/B,MAAI;AACF,UAAM,UAAU,mBAAmB;AACnC,UAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS;AAEnD,WAAO,KAAK,EAAE,OAAO,GAAG,UAAU,MAAM,UAAU,QAAQ,OAAO,CAAC;AAElE,eAAW,KAAK,WAAW;AACzB,YAAM,UAAU,EAAE,QAAQ,KAAK,IAAI;AACnC,aAAO,KAAK,EAAE,OAAO,GAAG,EAAE,SAAS,QAAQ,KAAK,OAAO,KAAK,QAAQ,OAAO,CAAC;AAAA,IAC9E;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,KAAK;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACzD,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,MAAM,uBAAuB,OAAO;AAC/C;AAEA,SAAS,qBAAoC;AAC3C,QAAM,SAAwB,CAAC;AAE/B,QAAM,eAAeC,MAAK,QAAQ,GAAG,WAAW,QAAQ;AAExD,MAAI,CAACC,YAAW,YAAY,GAAG;AAC7B,WAAO,KAAK,EAAE,OAAO,sBAAsB,QAAQ,OAAO,CAAC;AAC3D,WAAO,KAAK,EAAE,OAAO,sBAAsB,QAAQ,OAAO,CAAC;AAC3D,WAAO,EAAE,MAAM,UAAU,OAAO;AAAA,EAClC;AAEA,MAAI,iBAAiB;AACrB,MAAI;AACF,UAAM,UAAU,YAAY,YAAY;AACxC,qBAAiB,QAAQ;AACzB,WAAO,KAAK,EAAE,OAAO,GAAG,cAAc,qBAAqB,QAAQ,OAAO,CAAC;AAAA,EAC7E,QAAQ;AACN,WAAO,KAAK,EAAE,OAAO,gCAAgC,QAAQ,OAAO,CAAC;AACrE,WAAO,EAAE,MAAM,UAAU,OAAO;AAAA,EAClC;AAGA,QAAM,SAAmB,CAAC;AAC1B,QAAM,YAAY,gBAAgB;AAClC,aAAW,YAAY,WAAW;AAChC,UAAM,WAAW,SAAS;AAC1B,QAAI,CAACA,YAAW,QAAQ,EAAG;AAE3B,QAAI;AACF,YAAM,UAAU,YAAY,QAAQ;AACpC,iBAAW,SAAS,SAAS;AAC3B,cAAM,WAAWD,MAAK,UAAU,KAAK;AACrC,YAAI;AACF,gBAAM,OAAO,UAAU,QAAQ;AAC/B,cAAI,KAAK,eAAe,GAAG;AAEzB,gBAAI,CAACC,YAAW,QAAQ,GAAG;AACzB,qBAAO,KAAK,GAAG,SAAS,EAAE,IAAI,KAAK,EAAE;AAAA,YACvC;AAAA,UACF;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO,KAAK,EAAE,OAAO,sBAAsB,QAAQ,OAAO,CAAC;AAAA,EAC7D,OAAO;AACL,WAAO,KAAK;AAAA,MACV,OAAO,GAAG,OAAO,MAAM;AAAA,MACvB,QAAQ;AAAA,MACR,QAAQ,OAAO,KAAK,IAAI;AAAA,IAC1B,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,MAAM,UAAU,OAAO;AAClC;AAEA,eAAe,gBAAwC;AACrD,QAAM,SAAwB,CAAC;AAE/B,MAAI;AACF,UAAM,OAAO,MAAM,aAAa;AAChC,WAAO,KAAK,EAAE,OAAO,mBAAmB,QAAQ,OAAO,CAAC;AAGxD,QAAI,WAAW;AACf,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,MAAM,GAAG;AACvD,UAAI,MAAM,iBAAiB,CAACA,YAAW,MAAM,aAAa,GAAG;AAC3D;AAAA,MACF;AAAA,IACF;AAKA,QAAI,aAAa,GAAG;AAClB,aAAO,KAAK,EAAE,OAAO,sBAAsB,QAAQ,OAAO,CAAC;AAAA,IAC7D,OAAO;AACL,aAAO,KAAK;AAAA,QACV,OAAO,GAAG,QAAQ;AAAA,QAClB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,KAAK;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACzD,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,MAAM,aAAa,OAAO;AACrC;AAEA,eAAe,mBAA2C;AACxD,QAAM,SAAwB,CAAC;AAE/B,QAAM,UAAU,mBAAmB;AACnC,QAAM,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS;AAEnD,aAAW,KAAK,WAAW;AACzB,UAAM,WAAW,EAAE;AACnB,UAAM,aAAa,SAAS;AAE5B,QAAI,CAACA,YAAW,UAAU,GAAG;AAC3B,aAAO,KAAK;AAAA,QACV,OAAO,GAAG,SAAS,EAAE;AAAA,QACrB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,CAAC;AACD;AAAA,IACF;AAEA,QAAI;AACF,YAAM,WAAW,YAAY,SAAS,YAAY;AAClD,YAAM,UAAU,WAAW,QAAQ,QAAQ,GAAG,GAAG;AACjD,aAAO,KAAK;AAAA,QACV,OAAO,GAAG,SAAS,EAAE,KAAK,OAAO;AAAA,QACjC,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,aAAO,KAAK;AAAA,QACV,OAAO,GAAG,SAAS,EAAE;AAAA,QACrB,QAAQ;AAAA,QACR,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MACzD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAO,KAAK,EAAE,OAAO,mCAAmC,QAAQ,OAAO,CAAC;AAAA,EAC1E;AAEA,SAAO,EAAE,MAAM,gBAAgB,OAAO;AACxC;AAEA,SAAS,cAAc,SAAgC;AACrD,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,KAAKC,KAAG,KAAK,QAAQ,IAAI,CAAC,EAAE;AAEvC,aAAW,SAAS,QAAQ,QAAQ;AAClC,UAAM,OACJ,MAAM,WAAW,SACbA,KAAG,MAAM,QAAG,IACZ,MAAM,WAAW,SACfA,KAAG,OAAO,QAAG,IACbA,KAAG,IAAI,QAAG;AAElB,UAAM,KAAK,OAAO,IAAI,IAAI,MAAM,KAAK,EAAE;AAEvC,QAAI,MAAM,QAAQ;AAChB,YAAM,KAAK,SAASA,KAAG,IAAI,MAAM,MAAM,CAAC,EAAE;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAeO,SAAS,sBAAsBC,UAAwB;AAC5D,EAAAA,SACG,QAAQ,QAAQ,EAChB,YAAY,0CAA0C,EACtD,OAAO,UAAU,gBAAgB,EACjC,OAAO,OAAO,SAA6B;AAC1C,UAAM,WAA4B,CAAC;AAEnC,aAAS,KAAK,iBAAiB,CAAC;AAChC,aAAS,KAAK,cAAc,CAAC;AAC7B,aAAS,KAAK,wBAAwB,CAAC;AACvC,aAAS,KAAK,mBAAmB,CAAC;AAClC,aAAS,KAAK,MAAM,cAAc,CAAC;AACnC,aAAS,KAAK,MAAM,iBAAiB,CAAC;AAGtC,QAAI,SAAS;AACb,QAAI,WAAW;AACf,QAAI,SAAS;AAEb,eAAW,WAAW,UAAU;AAC9B,iBAAW,SAAS,QAAQ,QAAQ;AAClC,YAAI,MAAM,WAAW,OAAQ;AAAA,iBACpB,MAAM,WAAW,OAAQ;AAAA,YAC7B;AAAA,MACP;AAAA,IACF;AAEA,QAAI,KAAK,MAAM;AACb,YAAM,SAAqB;AAAA,QACzB,SAAS;AAAA,QACT,UAAU,SAAS,IAAI,CAAC,OAAO;AAAA,UAC7B,MAAM,EAAE;AAAA,UACR,QAAQ,EAAE;AAAA,QACZ,EAAE;AAAA,QACF,SAAS,EAAE,QAAQ,UAAU,OAAO;AAAA,MACtC;AACA,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C;AAAA,IACF;AAEA,YAAQ,IAAID,KAAG,KAAK,kBAAkB,CAAC;AAEvC,eAAW,WAAW,UAAU;AAC9B,cAAQ,IAAI,cAAc,OAAO,CAAC;AAClC,cAAQ,IAAI;AAAA,IACd;AAGA,UAAM,QAAkB,CAAC;AACzB,UAAM,KAAKA,KAAG,MAAM,GAAG,MAAM,gBAAgB,CAAC;AAC9C,QAAI,WAAW,EAAG,OAAM,KAAKA,KAAG,OAAO,GAAG,QAAQ,WAAW,aAAa,IAAI,MAAM,EAAE,EAAE,CAAC;AACzF,QAAI,SAAS,EAAG,OAAM,KAAKA,KAAG,IAAI,GAAG,MAAM,SAAS,WAAW,IAAI,MAAM,EAAE,EAAE,CAAC;AAE9E,YAAQ,IAAI,KAAKA,KAAG,KAAK,SAAS,CAAC,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE;AAC1D,YAAQ,IAAI;AAEZ,QAAI,SAAS,GAAG;AACd,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AACL;;;AxBrVA,IAAM,UAAU,IAAI,QAAQ;AAE5B,QACG,KAAK,OAAO,EACZ,YAAY,mFAAmF,EAC/F,QAAQ,OAAO,EACf,OAAO,iBAAiB,mBAAmB,EAC3C,OAAO,eAAe,2BAA2B;AAEpD,QAAQ,KAAK,aAAa,CAAC,gBAAgB;AACzC,QAAM,OAAO,YAAY,gBAAgB;AACzC,MAAI,KAAK,QAAS,YAAW,IAAI;AACjC,MAAI,KAAK,MAAO,UAAS,IAAI;AAC/B,CAAC;AAGD,yBAAyB,OAAO;AAChC,uBAAuB,OAAO;AAC9B,oBAAoB,OAAO;AAC3B,6BAA6B,OAAO;AACpC,sBAAsB,OAAO;AAC7B,sBAAsB,OAAO;AAE7B,QAAQ,MAAM;","names":["program","pc","simpleGit","mkdtemp","rm","tmpdir","join","pc","pc","pc","pc","join","pc","pc","pc","pc","pc","pc","pc","pc","join","pc","existsSync","pc","pc","pc","program","pc","pc","pc","pc","pc","pc","pc","existsSync","existsSync","pc","program","pc","pc","pc","pc","pc","pc","program","pc","join","existsSync","program","pc","join","existsSync","pc","existsSync","join","join","existsSync","pc","program"]}