apero-kit-cli 2.2.2 → 2.2.4

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/index.js CHANGED
@@ -268,19 +268,19 @@ function parseFrontmatter(content) {
268
268
  body
269
269
  };
270
270
  }
271
- function escapeTomlString(str) {
272
- return str.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
271
+ function escapeTomlBasicString(str) {
272
+ return str.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\t/g, "\\t");
273
273
  }
274
274
  function convertMdToToml(mdContent) {
275
275
  const { description, body } = parseFrontmatter(mdContent);
276
276
  const prompt = body.replace(/\$ARGUMENTS/g, "{{args}}");
277
277
  const lines = [];
278
278
  if (description) {
279
- lines.push(`description = "${escapeTomlString(description)}"`);
279
+ lines.push(`description = "${escapeTomlBasicString(description)}"`);
280
280
  }
281
- lines.push(`prompt = """
281
+ lines.push(`prompt = '''
282
282
  ${prompt}
283
- """`);
283
+ '''`);
284
284
  return lines.join("\n");
285
285
  }
286
286
  async function copyItems(items, type, sourceDir, destDir, mergeMode = false) {
@@ -503,6 +503,17 @@ function convertAgentForGemini(mdContent) {
503
503
  frontmatter = frontmatter.replace(regex, "");
504
504
  }
505
505
  }
506
+ const toolsMatch = frontmatter.match(/^tools:\s*(.+)$/m);
507
+ if (toolsMatch) {
508
+ const toolsValue = toolsMatch[1].trim();
509
+ if (!toolsValue.startsWith("[")) {
510
+ const toolsArray = toolsValue.split(",").map((t) => t.trim());
511
+ frontmatter = frontmatter.replace(
512
+ /^tools:\s*.+$/m,
513
+ `tools: [${toolsArray.join(", ")}]`
514
+ );
515
+ }
516
+ }
506
517
  if (!frontmatter.includes("kind:")) {
507
518
  frontmatter = frontmatter.trim() + "\nkind: local";
508
519
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/kits/index.ts","../src/utils/paths.ts","../src/utils/copy.ts","../src/utils/hash.ts","../src/utils/state.ts","../src/utils/prompts.ts","../src/commands/init.ts","../src/commands/add.ts","../src/commands/list.ts","../src/commands/update.ts","../src/commands/status.ts","../src/commands/doctor.ts","../src/commands/help.ts","../src/commands/uninstall.ts","../src/utils/git-tags.ts","../src/commands/versions.ts","../src/commands/update-cli.ts","../src/commands/skills.ts","../src/index.ts","../src/cli/command-registry.ts","../src/utils/version-check.ts"],"sourcesContent":["export interface Kit {\n name: string;\n description: string;\n emoji: string;\n color: string;\n agents: string[] | 'all';\n commands: string[] | 'all';\n skills: string[] | 'all';\n workflows: string[] | 'all';\n includeRouter: boolean;\n includeHooks: boolean;\n}\n\nexport const KITS: Record<string, Kit> = {\n engineer: {\n name: 'engineer',\n description: 'Full-stack development kit for building applications',\n emoji: '🛠️',\n color: 'blue',\n agents: [\n 'planner',\n 'debugger',\n 'fullstack-developer',\n 'tester',\n 'code-reviewer',\n 'git-manager',\n 'database-admin'\n ],\n commands: [\n 'plan', 'plan/parallel', 'plan/fast', 'plan/hard',\n 'code', 'code/auto', 'code/parallel',\n 'fix', 'fix/test', 'fix/types', 'fix/fast', 'fix/ci',\n 'test', 'test/ui',\n 'review', 'review/codebase',\n 'scout', 'build', 'lint'\n ],\n skills: [\n 'frontend-development',\n 'backend-development',\n 'databases',\n 'debugging',\n 'code-review',\n 'planning',\n 'problem-solving'\n ],\n workflows: ['feature-development', 'bug-fixing'],\n includeRouter: true,\n includeHooks: true\n },\n\n researcher: {\n name: 'researcher',\n description: 'Research and analysis kit for exploring codebases',\n emoji: '🔬',\n color: 'green',\n agents: [\n 'researcher',\n 'scout',\n 'scout-external',\n 'brainstormer',\n 'docs-manager',\n 'planner'\n ],\n commands: [\n 'scout', 'scout/ext',\n 'investigate', 'brainstorm',\n 'docs', 'docs/init', 'docs/update', 'docs/summarize',\n 'plan', 'ask', 'context'\n ],\n skills: [\n 'research',\n 'planning-with-files',\n 'documentation',\n 'project-index'\n ],\n workflows: [],\n includeRouter: true,\n includeHooks: false\n },\n\n designer: {\n name: 'designer',\n description: 'UI/UX design and frontend development kit',\n emoji: '🎨',\n color: 'magenta',\n agents: [\n 'ui-ux-designer',\n 'fullstack-developer',\n 'code-reviewer'\n ],\n commands: [\n 'code', 'fix', 'fix/ui', 'test/ui', 'review'\n ],\n skills: [\n 'ui-ux-pro-max',\n 'frontend-development',\n 'frontend-design'\n ],\n workflows: [],\n includeRouter: false,\n includeHooks: true\n },\n\n minimal: {\n name: 'minimal',\n description: 'Lightweight kit with essential agents only',\n emoji: '📦',\n color: 'yellow',\n agents: ['planner', 'debugger'],\n commands: ['plan', 'fix', 'code'],\n skills: ['planning', 'debugging'],\n workflows: [],\n includeRouter: false,\n includeHooks: false\n },\n\n full: {\n name: 'full',\n description: 'Complete kit with ALL agents, commands, and skills',\n emoji: '🚀',\n color: 'cyan',\n agents: 'all',\n commands: 'all',\n skills: 'all',\n workflows: 'all',\n includeRouter: true,\n includeHooks: true\n }\n};\n\nexport const getKit = (name: string): Kit | null => KITS[name] || null;\nexport const getKitNames = (): string[] => Object.keys(KITS);\nexport const getKitList = (): Kit[] => Object.values(KITS);\n","import { fileURLToPath } from 'url';\nimport { dirname, join, resolve } from 'path';\nimport { existsSync, statSync } from 'fs';\nimport { homedir } from 'os';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// When bundled with tsup, all code is in dist/index.js, so __dirname is 'dist'\n// When unbundled (dev), this file is in src/utils, so __dirname is 'src/utils'\n// We need to go up one level from dist, or two levels from src/utils\nexport const CLI_ROOT = __dirname.endsWith('dist')\n ? resolve(__dirname, '..')\n : resolve(__dirname, '../..');\nexport const TEMPLATES_DIR = join(CLI_ROOT, 'templates');\n\nexport const TARGETS: Record<string, string> = {\n claude: '.claude',\n gemini: '.gemini',\n opencode: '.opencode',\n generic: '.agent'\n};\n\nexport type CliTarget = 'claude' | 'gemini';\n\nexport interface SourceInfo {\n path: string;\n type: string;\n claudeDir: string;\n agentsMd: string | null;\n error?: undefined;\n}\n\nexport interface SourceError {\n error: string;\n}\n\n/**\n * Get embedded templates (bundled with CLI)\n */\nexport function getEmbeddedTemplates(): SourceInfo | null {\n if (existsSync(TEMPLATES_DIR)) {\n const agentsMd = join(TEMPLATES_DIR, 'AGENTS.md');\n return {\n path: TEMPLATES_DIR,\n type: 'embedded',\n claudeDir: TEMPLATES_DIR,\n agentsMd: existsSync(agentsMd) ? agentsMd : null\n };\n }\n return null;\n}\n\n/**\n * Get global installation path\n */\nexport function getGlobalInstallPath(): string {\n if (process.platform === 'win32') {\n return join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'claude');\n }\n return join(homedir(), '.claude');\n}\n\n/**\n * Check if current directory is an ak project\n */\nexport function isAkProject(dir: string = process.cwd()): boolean {\n const akConfig = join(dir, '.ak', 'state.json');\n const claudeDir = join(dir, '.claude');\n const geminiDir = join(dir, '.gemini');\n const opencodeDir = join(dir, '.opencode');\n const agentDir = join(dir, '.agent');\n\n return existsSync(akConfig) ||\n existsSync(claudeDir) ||\n existsSync(geminiDir) ||\n existsSync(opencodeDir) ||\n existsSync(agentDir);\n}\n\n/**\n * Get target directory path\n */\nexport function getTargetDir(projectDir: string, target: string = 'claude'): string {\n const folder = TARGETS[target] || TARGETS.claude;\n return join(projectDir, folder);\n}\n\n/**\n * Resolve source path (from --source flag or embedded templates)\n * Priority: 1. --source flag 2. Embedded templates\n */\nexport function resolveSource(sourceFlag?: string): SourceInfo | SourceError {\n // 1. If --source flag provided, use it\n if (sourceFlag) {\n const resolved = resolve(sourceFlag);\n if (!existsSync(resolved)) {\n return { error: `Source path not found: ${sourceFlag}` };\n }\n\n // Check if it's a valid source\n const claudeDir = join(resolved, '.claude');\n const opencodeDir = join(resolved, '.opencode');\n\n if (existsSync(claudeDir)) {\n return {\n path: resolved,\n type: 'custom',\n claudeDir,\n agentsMd: existsSync(join(resolved, 'AGENTS.md')) ? join(resolved, 'AGENTS.md') : null\n };\n }\n\n if (existsSync(opencodeDir)) {\n return {\n path: resolved,\n type: 'custom',\n claudeDir: opencodeDir,\n agentsMd: existsSync(join(resolved, 'AGENTS.md')) ? join(resolved, 'AGENTS.md') : null\n };\n }\n\n // If source flag points directly to a templates dir (no .claude wrapper)\n if (existsSync(join(resolved, 'agents')) || existsSync(join(resolved, 'commands'))) {\n return {\n path: resolved,\n type: 'custom',\n claudeDir: resolved,\n agentsMd: existsSync(join(resolved, 'AGENTS.md')) ? join(resolved, 'AGENTS.md') : null\n };\n }\n\n return { error: `No templates found in: ${sourceFlag}` };\n }\n\n // 2. Use embedded templates (bundled with CLI)\n const embedded = getEmbeddedTemplates();\n if (embedded) {\n return embedded;\n }\n\n return {\n error: 'No templates found. Reinstall: npm install -g apero-kit-cli'\n };\n}\n","import fs from 'fs-extra';\nimport { join, basename, dirname } from 'path';\nimport type { CliTarget } from './paths.js';\nimport { CLI_ROOT } from './paths.js';\n\n/**\n * Parse frontmatter from markdown file\n */\nfunction parseFrontmatter(content: string): { description: string; argumentHint: string; body: string } {\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n\n if (!frontmatterMatch) {\n return { description: '', argumentHint: '', body: content };\n }\n\n const frontmatter = frontmatterMatch[1];\n const body = frontmatterMatch[2].trim();\n\n const descMatch = frontmatter.match(/description:\\s*(.+)/);\n const argMatch = frontmatter.match(/argument-hint:\\s*(.+)/);\n\n return {\n description: descMatch ? descMatch[1].trim() : '',\n argumentHint: argMatch ? argMatch[1].trim() : '',\n body\n };\n}\n\n/**\n * Escape TOML string (handle quotes and special characters)\n */\nfunction escapeTomlString(str: string): string {\n // For multiline strings with complex content, use literal strings\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n}\n\n/**\n * Convert Claude MD command to Gemini TOML format\n */\nexport function convertMdToToml(mdContent: string): string {\n const { description, body } = parseFrontmatter(mdContent);\n\n // Convert $ARGUMENTS to {{args}}\n const prompt = body.replace(/\\$ARGUMENTS/g, '{{args}}');\n\n const lines: string[] = [];\n\n if (description) {\n lines.push(`description = \"${escapeTomlString(description)}\"`);\n }\n\n // Use triple-quoted string for multiline prompts\n lines.push(`prompt = \"\"\"\\n${prompt}\\n\"\"\"`);\n\n return lines.join('\\n');\n}\n\nexport interface CopyResult {\n copied: string[];\n skipped: string[];\n errors: Array<{ item: string; error: string }>;\n}\n\nexport interface CopyStatusResult {\n success: boolean;\n error?: string;\n}\n\nexport interface AvailableItem {\n name: string;\n isDir: boolean;\n path: string;\n}\n\n/**\n * Copy specific items from source to destination\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyItems(\n items: string[],\n type: string,\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyResult> {\n const typeDir = join(sourceDir, type);\n const destTypeDir = join(destDir, type);\n\n if (!fs.existsSync(typeDir)) {\n return { copied: [], skipped: items, errors: [] };\n }\n\n await fs.ensureDir(destTypeDir);\n\n const copied: string[] = [];\n const skipped: string[] = [];\n const errors: Array<{ item: string; error: string }> = [];\n\n for (const item of items) {\n try {\n // Handle nested paths like \"plan/parallel\"\n const itemPath = join(typeDir, item);\n const itemPathMd = itemPath + '.md';\n\n let srcPath: string;\n if (fs.existsSync(itemPath)) {\n srcPath = itemPath;\n } else if (fs.existsSync(itemPathMd)) {\n srcPath = itemPathMd;\n } else {\n skipped.push(item);\n continue;\n }\n\n // Determine destination path\n const stat = fs.statSync(srcPath);\n if (stat.isDirectory()) {\n await fs.copy(srcPath, join(destTypeDir, item), { overwrite: !mergeMode });\n } else {\n // Preserve directory structure for nested items\n const destPath = srcPath.endsWith('.md')\n ? join(destTypeDir, item + '.md')\n : join(destTypeDir, item);\n await fs.ensureDir(join(destTypeDir, item.split('/').slice(0, -1).join('/')));\n await fs.copy(srcPath, destPath, { overwrite: !mergeMode });\n }\n\n copied.push(item);\n } catch (err: any) {\n errors.push({ item, error: err.message });\n }\n }\n\n return { copied, skipped, errors };\n}\n\n/**\n * Copy all items of a type\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyAllOfType(\n type: string,\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyStatusResult> {\n const typeDir = join(sourceDir, type);\n const destTypeDir = join(destDir, type);\n\n if (!fs.existsSync(typeDir)) {\n return { success: false, error: `${type} directory not found` };\n }\n\n try {\n await fs.copy(typeDir, destTypeDir, { overwrite: !mergeMode });\n return { success: true };\n } catch (err: any) {\n return { success: false, error: err.message };\n }\n}\n\n/**\n * Copy router directory\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyRouter(\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyStatusResult> {\n const routerDir = join(sourceDir, 'router');\n\n if (!fs.existsSync(routerDir)) {\n return { success: false, error: 'Router directory not found' };\n }\n\n try {\n await fs.copy(routerDir, join(destDir, 'router'), { overwrite: !mergeMode });\n return { success: true };\n } catch (err: any) {\n return { success: false, error: err.message };\n }\n}\n\n/**\n * Copy hooks directory\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyHooks(\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyStatusResult> {\n const hooksDir = join(sourceDir, 'hooks');\n\n if (!fs.existsSync(hooksDir)) {\n return { success: false, error: 'Hooks directory not found' };\n }\n\n try {\n await fs.copy(hooksDir, join(destDir, 'hooks'), { overwrite: !mergeMode });\n return { success: true };\n } catch (err: any) {\n return { success: false, error: err.message };\n }\n}\n\n/**\n * Copy workflows directory\n */\nexport async function copyWorkflows(\n items: string[] | 'all',\n sourceDir: string,\n destDir: string\n): Promise<CopyResult | CopyStatusResult> {\n if (items === 'all') {\n return copyAllOfType('workflows', sourceDir, destDir);\n }\n return copyItems(items, 'workflows', sourceDir, destDir);\n}\n\n/**\n * Copy base files (README, settings, statusline, etc.)\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyBaseFiles(\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<string[]> {\n const baseFiles = ['README.md', 'settings.json', '.env.example', 'statusline.cjs', 'statusline.ps1', 'statusline.sh'];\n const copied: string[] = [];\n\n for (const file of baseFiles) {\n const srcPath = join(sourceDir, file);\n const destPath = join(destDir, file);\n\n // Skip if merge mode and file exists\n if (mergeMode && fs.existsSync(destPath)) {\n continue;\n }\n\n if (fs.existsSync(srcPath)) {\n await fs.copy(srcPath, destPath, { overwrite: !mergeMode });\n copied.push(file);\n }\n }\n\n return copied;\n}\n\n/**\n * Copy a directory (memory, output-styles, scripts, etc.)\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyDirectory(\n dirName: string,\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyStatusResult> {\n const srcPath = join(sourceDir, dirName);\n\n if (!fs.existsSync(srcPath)) {\n return { success: false, error: `${dirName} directory not found` };\n }\n\n try {\n await fs.copy(srcPath, join(destDir, dirName), { overwrite: !mergeMode });\n return { success: true };\n } catch (err: any) {\n return { success: false, error: err.message };\n }\n}\n\n/**\n * Copy AGENTS.md to project root\n * @param {boolean} mergeMode - If true, skip if file exists\n */\nexport async function copyAgentsMd(\n agentsMdPath: string | null,\n projectDir: string,\n mergeMode: boolean = false\n): Promise<boolean> {\n if (!agentsMdPath || !fs.existsSync(agentsMdPath)) {\n return false;\n }\n\n const destPath = join(projectDir, 'AGENTS.md');\n\n // Skip if merge mode and file exists\n if (mergeMode && fs.existsSync(destPath)) {\n return false;\n }\n\n await fs.copy(agentsMdPath, destPath, { overwrite: !mergeMode });\n return true;\n}\n\n/**\n * List available items of a type\n */\nexport function listAvailable(type: string, sourceDir: string): AvailableItem[] {\n const typeDir = join(sourceDir, type);\n\n if (!fs.existsSync(typeDir)) {\n return [];\n }\n\n const items = fs.readdirSync(typeDir);\n return items.map(item => {\n const itemPath = join(typeDir, item);\n const isDir = fs.statSync(itemPath).isDirectory();\n const name = item.replace(/\\.md$/, '');\n return { name, isDir, path: itemPath };\n });\n}\n\n/**\n * Copy commands to Gemini target (converts MD to TOML)\n */\nexport async function copyCommandsForGemini(\n items: string[] | 'all',\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyResult> {\n const typeDir = join(sourceDir, 'commands');\n const destTypeDir = join(destDir, 'commands');\n\n if (!fs.existsSync(typeDir)) {\n return { copied: [], skipped: [], errors: [] };\n }\n\n await fs.ensureDir(destTypeDir);\n\n const copied: string[] = [];\n const skipped: string[] = [];\n const errors: Array<{ item: string; error: string }> = [];\n\n // Get all items if 'all'\n let itemList: string[];\n if (items === 'all') {\n // Get top-level items (files and directories)\n const entries = fs.readdirSync(typeDir);\n itemList = entries.map(e => e.replace(/\\.md$/, ''));\n // Remove duplicates (plan.md and plan/ both become 'plan')\n itemList = [...new Set(itemList)];\n } else {\n itemList = items;\n }\n\n for (const item of itemList) {\n try {\n const srcPathMd = join(typeDir, item + '.md');\n const srcPathDir = join(typeDir, item);\n\n // Handle both file and directory with same name (e.g., plan.md AND plan/)\n let copiedSomething = false;\n\n // 1. Check if .md file exists - convert it\n if (fs.existsSync(srcPathMd) && fs.statSync(srcPathMd).isFile()) {\n const destPath = join(destTypeDir, item + '.toml');\n\n if (!(mergeMode && fs.existsSync(destPath))) {\n await fs.ensureDir(dirname(destPath));\n const mdContent = fs.readFileSync(srcPathMd, 'utf-8');\n const tomlContent = convertMdToToml(mdContent);\n await fs.writeFile(destPath, tomlContent, 'utf-8');\n copiedSomething = true;\n }\n }\n\n // 2. Check if directory exists - convert recursively\n if (fs.existsSync(srcPathDir) && fs.statSync(srcPathDir).isDirectory()) {\n await convertDirectoryToToml(srcPathDir, join(destTypeDir, item), mergeMode);\n copiedSomething = true;\n }\n\n if (copiedSomething) {\n copied.push(item);\n } else {\n skipped.push(item);\n }\n } catch (err: any) {\n errors.push({ item, error: err.message });\n }\n }\n\n return { copied, skipped, errors };\n}\n\n/**\n * Recursively convert a directory of MD files to TOML\n */\nasync function convertDirectoryToToml(\n srcDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<void> {\n await fs.ensureDir(destDir);\n\n const entries = fs.readdirSync(srcDir);\n\n for (const entry of entries) {\n const srcPath = join(srcDir, entry);\n const stat = fs.statSync(srcPath);\n\n if (stat.isDirectory()) {\n await convertDirectoryToToml(srcPath, join(destDir, entry), mergeMode);\n } else if (entry.endsWith('.md')) {\n const destPath = join(destDir, entry.replace(/\\.md$/, '.toml'));\n\n if (mergeMode && fs.existsSync(destPath)) {\n continue;\n }\n\n const mdContent = fs.readFileSync(srcPath, 'utf-8');\n const tomlContent = convertMdToToml(mdContent);\n await fs.writeFile(destPath, tomlContent, 'utf-8');\n } else {\n // Copy non-MD files as-is\n const destPath = join(destDir, entry);\n if (mergeMode && fs.existsSync(destPath)) {\n continue;\n }\n await fs.copy(srcPath, destPath, { overwrite: !mergeMode });\n }\n }\n}\n\n/**\n * List all files recursively (relative paths)\n */\nfunction listAvailableRecursive(dir: string, base: string = ''): string[] {\n const results: string[] = [];\n const entries = fs.readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const relativePath = base ? `${base}/${entry}` : entry;\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n results.push(...listAvailableRecursive(fullPath, relativePath));\n } else {\n results.push(relativePath);\n }\n }\n\n return results;\n}\n\n/**\n * Convert Claude agent MD to Gemini-compatible format\n * Maps Claude model names to Gemini equivalents\n */\nfunction convertAgentForGemini(mdContent: string): string {\n // Parse frontmatter\n const frontmatterMatch = mdContent.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n if (!frontmatterMatch) return mdContent;\n\n let frontmatter = frontmatterMatch[1];\n const body = frontmatterMatch[2];\n\n // Map Claude models to Gemini models\n const modelMap: Record<string, string> = {\n 'opus': 'gemini-2.5-pro',\n 'sonnet': 'gemini-2.5-flash',\n 'haiku': 'gemini-2.0-flash-lite',\n 'inherit': '' // Remove inherit, let Gemini use default\n };\n\n // Replace model field\n for (const [claudeModel, geminiModel] of Object.entries(modelMap)) {\n const regex = new RegExp(`^model:\\\\s*${claudeModel}\\\\s*$`, 'm');\n if (geminiModel) {\n frontmatter = frontmatter.replace(regex, `model: ${geminiModel}`);\n } else {\n // Remove the model line if it's 'inherit'\n frontmatter = frontmatter.replace(regex, '');\n }\n }\n\n // Add kind: local if not present\n if (!frontmatter.includes('kind:')) {\n frontmatter = frontmatter.trim() + '\\nkind: local';\n }\n\n return `---\\n${frontmatter.trim()}\\n---\\n${body}`;\n}\n\n/**\n * Copy agents to Gemini target (converts Claude agent format)\n * Gemini agents: .gemini/agents/*.md\n */\nexport async function copyAgentsForGemini(\n items: string[] | 'all',\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyResult> {\n const typeDir = join(sourceDir, 'agents');\n const destTypeDir = join(destDir, 'agents');\n\n if (!fs.existsSync(typeDir)) {\n return { copied: [], skipped: [], errors: [] };\n }\n\n await fs.ensureDir(destTypeDir);\n\n const copied: string[] = [];\n const skipped: string[] = [];\n const errors: Array<{ item: string; error: string }> = [];\n\n // Get agent files\n let agentList: string[];\n if (items === 'all') {\n const entries = fs.readdirSync(typeDir);\n agentList = entries\n .filter(e => e.endsWith('.md') && e !== 'README.md')\n .map(e => e.replace(/\\.md$/, ''));\n } else {\n agentList = items;\n }\n\n for (const agent of agentList) {\n try {\n const srcPath = join(typeDir, agent + '.md');\n\n if (!fs.existsSync(srcPath)) {\n skipped.push(agent);\n continue;\n }\n\n const destPath = join(destTypeDir, agent + '.md');\n\n // Skip if merge mode and destination exists\n if (mergeMode && fs.existsSync(destPath)) {\n skipped.push(agent);\n continue;\n }\n\n // Convert and write\n const mdContent = fs.readFileSync(srcPath, 'utf-8');\n const convertedContent = convertAgentForGemini(mdContent);\n await fs.writeFile(destPath, convertedContent, 'utf-8');\n copied.push(agent);\n } catch (err: any) {\n errors.push({ item: agent, error: err.message });\n }\n }\n\n return { copied, skipped, errors };\n}\n\n/**\n * Copy skills to Gemini target (skills use same SKILL.md format)\n * Gemini skills: .gemini/skills/<skill-name>/SKILL.md\n */\nexport async function copySkillsForGemini(\n items: string[] | 'all',\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyResult> {\n const typeDir = join(sourceDir, 'skills');\n const destTypeDir = join(destDir, 'skills');\n\n if (!fs.existsSync(typeDir)) {\n return { copied: [], skipped: [], errors: [] };\n }\n\n await fs.ensureDir(destTypeDir);\n\n const copied: string[] = [];\n const skipped: string[] = [];\n const errors: Array<{ item: string; error: string }> = [];\n\n // Get skill directories\n let skillList: string[];\n if (items === 'all') {\n const entries = fs.readdirSync(typeDir);\n skillList = entries.filter(e => {\n const fullPath = join(typeDir, e);\n return fs.statSync(fullPath).isDirectory() && fs.existsSync(join(fullPath, 'SKILL.md'));\n });\n } else {\n skillList = items;\n }\n\n for (const skill of skillList) {\n try {\n const srcPath = join(typeDir, skill);\n\n // Check if it's a valid skill directory with SKILL.md\n if (!fs.existsSync(srcPath) || !fs.statSync(srcPath).isDirectory()) {\n skipped.push(skill);\n continue;\n }\n\n const skillMdPath = join(srcPath, 'SKILL.md');\n if (!fs.existsSync(skillMdPath)) {\n skipped.push(skill);\n continue;\n }\n\n const destPath = join(destTypeDir, skill);\n\n // Skip if merge mode and destination exists\n if (mergeMode && fs.existsSync(destPath)) {\n skipped.push(skill);\n continue;\n }\n\n // Copy entire skill directory (SKILL.md + references, assets, etc.)\n await fs.copy(srcPath, destPath, { overwrite: !mergeMode });\n copied.push(skill);\n } catch (err: any) {\n errors.push({ skill, error: err.message });\n }\n }\n\n return { copied, skipped, errors };\n}\n\n/**\n * Copy Gemini-specific base files (settings.json with plan mode enabled)\n */\nexport async function copyGeminiBaseFiles(\n destDir: string,\n mergeMode: boolean = false\n): Promise<string[]> {\n const geminiTemplates = join(CLI_ROOT, 'templates', 'gemini');\n const copied: string[] = [];\n\n // Copy settings.json if exists\n const settingsPath = join(geminiTemplates, 'settings.json');\n const destSettingsPath = join(destDir, 'settings.json');\n\n if (fs.existsSync(settingsPath)) {\n // Skip if merge mode and file exists\n if (mergeMode && fs.existsSync(destSettingsPath)) {\n return copied;\n }\n\n await fs.copy(settingsPath, destSettingsPath, { overwrite: !mergeMode });\n copied.push('settings.json');\n }\n\n return copied;\n}\n\n/**\n * Copy only unchanged files (for update)\n */\nexport async function copyUnchangedOnly(\n sourceDir: string,\n destDir: string,\n unchangedFiles: string[]\n): Promise<{ copied: string[]; skipped: string[] }> {\n const copied: string[] = [];\n const skipped: string[] = [];\n\n for (const file of unchangedFiles) {\n const srcPath = join(sourceDir, file);\n const destPath = join(destDir, file);\n\n if (fs.existsSync(srcPath)) {\n await fs.ensureDir(join(destDir, file.split('/').slice(0, -1).join('/')));\n await fs.copy(srcPath, destPath, { overwrite: true });\n copied.push(file);\n } else {\n skipped.push(file);\n }\n }\n\n return { copied, skipped };\n}\n","import { createHash } from 'crypto';\nimport fs from 'fs-extra';\nimport { join, relative } from 'path';\n\n/**\n * Calculate MD5 hash of a file\n */\nexport function hashFile(filePath: string): string | null {\n if (!fs.existsSync(filePath)) {\n return null;\n }\n\n const content = fs.readFileSync(filePath);\n return createHash('md5').update(content).digest('hex');\n}\n\n/**\n * Calculate hashes for all files in a directory\n */\nexport async function hashDirectory(dirPath: string, baseDir: string = dirPath): Promise<Record<string, string>> {\n const hashes: Record<string, string> = {};\n\n if (!fs.existsSync(dirPath)) {\n return hashes;\n }\n\n const items = await fs.readdir(dirPath, { withFileTypes: true });\n\n for (const item of items) {\n const itemPath = join(dirPath, item.name);\n const relativePath = relative(baseDir, itemPath);\n\n if (item.isDirectory()) {\n const subHashes = await hashDirectory(itemPath, baseDir);\n Object.assign(hashes, subHashes);\n } else if (item.isFile()) {\n const hash = hashFile(itemPath);\n if (hash) {\n hashes[relativePath] = hash;\n }\n }\n }\n\n return hashes;\n}\n\nexport interface HashComparison {\n unchanged: string[];\n modified: string[];\n added: string[];\n deleted: string[];\n}\n\n/**\n * Compare two hash maps and return differences\n */\nexport function compareHashes(original: Record<string, string>, current: Record<string, string>): HashComparison {\n const result: HashComparison = {\n unchanged: [],\n modified: [],\n added: [],\n deleted: []\n };\n\n // Check original files\n for (const [path, hash] of Object.entries(original)) {\n if (current[path] === undefined) {\n result.deleted.push(path);\n } else if (current[path] !== hash) {\n result.modified.push(path);\n } else {\n result.unchanged.push(path);\n }\n }\n\n // Check for new files\n for (const path of Object.keys(current)) {\n if (original[path] === undefined) {\n result.added.push(path);\n }\n }\n\n return result;\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport { hashDirectory } from './hash.js';\n\nconst STATE_DIR = '.ak';\nconst STATE_FILE = 'state.json';\n\nexport interface ProjectState {\n version: string;\n createdAt: string;\n lastUpdate: string;\n kit: string;\n source: string;\n target: string;\n targets?: string[]; // Multiple CLI targets (claude, gemini)\n installed: {\n agents?: string[];\n skills?: string[];\n commands?: string[];\n workflows?: string[];\n router?: boolean;\n hooks?: boolean;\n };\n originalHashes: Record<string, string>;\n}\n\n/**\n * Get state file path\n */\nexport function getStatePath(projectDir: string): string {\n return join(projectDir, STATE_DIR, STATE_FILE);\n}\n\n/**\n * Load state from .ak/state.json\n */\nexport async function loadState(projectDir: string): Promise<ProjectState | null> {\n const statePath = getStatePath(projectDir);\n\n if (!fs.existsSync(statePath)) {\n return null;\n }\n\n try {\n return await fs.readJson(statePath);\n } catch {\n return null;\n }\n}\n\n/**\n * Save state to .ak/state.json\n */\nexport async function saveState(projectDir: string, state: ProjectState): Promise<void> {\n const stateDir = join(projectDir, STATE_DIR);\n const statePath = join(stateDir, STATE_FILE);\n\n await fs.ensureDir(stateDir);\n await fs.writeJson(statePath, state, { spaces: 2 });\n}\n\nexport interface CreateStateOptions {\n kit: string;\n source: string;\n target: string;\n targets?: string[];\n installed: ProjectState['installed'];\n}\n\n/**\n * Create initial state after init\n */\nexport async function createInitialState(projectDir: string, options: CreateStateOptions): Promise<ProjectState> {\n const { kit, source, target, targets, installed } = options;\n\n // Calculate hashes for all target directories\n const allHashes: Record<string, string> = {};\n const targetList = targets || [target.replace('.', '')]; // fallback to single target\n\n for (const t of targetList) {\n const targetDirName = t.startsWith('.') ? t : `.${t}`;\n const targetDir = join(projectDir, targetDirName);\n if (fs.existsSync(targetDir)) {\n const hashes = await hashDirectory(targetDir);\n // Prefix hashes with target name for uniqueness\n for (const [path, hash] of Object.entries(hashes)) {\n allHashes[`${targetDirName}/${path}`] = hash;\n }\n }\n }\n\n const state: ProjectState = {\n version: '1.0.0',\n createdAt: new Date().toISOString(),\n lastUpdate: new Date().toISOString(),\n kit,\n source,\n target,\n targets,\n installed,\n originalHashes: allHashes\n };\n\n await saveState(projectDir, state);\n return state;\n}\n\n/**\n * Update state after update command\n */\nexport async function updateState(projectDir: string, updates: Partial<ProjectState>): Promise<ProjectState> {\n const state = await loadState(projectDir);\n\n if (!state) {\n throw new Error('No state found. Is this an ak project?');\n }\n\n const targetDir = join(projectDir, state.target || '.claude');\n const newHashes = await hashDirectory(targetDir);\n\n const updatedState: ProjectState = {\n ...state,\n ...updates,\n lastUpdate: new Date().toISOString(),\n originalHashes: newHashes\n };\n\n await saveState(projectDir, updatedState);\n return updatedState;\n}\n\nexport interface FileStatuses {\n state: ProjectState;\n statuses: {\n unchanged: string[];\n modified: string[];\n added: string[];\n deleted: string[];\n };\n targetDir: string;\n}\n\nexport interface FileStatusError {\n error: string;\n}\n\n/**\n * Get file status (unchanged, modified, added, deleted)\n */\nexport async function getFileStatuses(projectDir: string): Promise<FileStatuses | FileStatusError> {\n const state = await loadState(projectDir);\n\n if (!state) {\n return { error: 'No state found' };\n }\n\n const targetDir = join(projectDir, state.target || '.claude');\n const currentHashes = await hashDirectory(targetDir);\n const originalHashes = state.originalHashes || {};\n\n const statuses = {\n unchanged: [] as string[],\n modified: [] as string[],\n added: [] as string[],\n deleted: [] as string[]\n };\n\n // Check original files\n for (const [path, hash] of Object.entries(originalHashes)) {\n if (currentHashes[path] === undefined) {\n statuses.deleted.push(path);\n } else if (currentHashes[path] !== hash) {\n statuses.modified.push(path);\n } else {\n statuses.unchanged.push(path);\n }\n }\n\n // Check for new files\n for (const path of Object.keys(currentHashes)) {\n if (originalHashes[path] === undefined) {\n statuses.added.push(path);\n }\n }\n\n return {\n state,\n statuses,\n targetDir\n };\n}\n","import * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport { getKitList } from '../kits/index.js';\nimport { listAvailable } from './copy.js';\nimport type { CliTarget } from './paths.js';\n\nexport async function promptProjectName(): Promise<string> {\n const name = await p.text({\n message: 'Project name:',\n placeholder: 'my-project',\n validate: (value) => {\n if (!value || !value.trim()) return 'Project name is required';\n if (!/^[a-zA-Z0-9-_]+$/.test(String(value))) return 'Only letters, numbers, dashes, underscores';\n }\n });\n if (p.isCancel(name)) process.exit(0);\n return name as string;\n}\n\nexport async function promptKit(): Promise<string> {\n const kits = getKitList();\n const options = [\n ...kits.map((kit) => ({\n value: kit.name,\n label: `${kit.emoji} ${kit.name}`,\n hint: kit.description\n })),\n { value: 'custom', label: '🔧 custom', hint: 'Pick your own agents, skills, and commands' }\n ];\n const kit = await p.select({ message: 'Select a kit:', options });\n if (p.isCancel(kit)) process.exit(0);\n return kit as string;\n}\n\nexport async function promptTarget(): Promise<string> {\n const target = await p.select({\n message: 'Target folder:',\n options: [\n { value: 'claude', label: '.claude/', hint: 'Claude Code' },\n { value: 'gemini', label: '.gemini/', hint: 'Gemini CLI' },\n { value: 'opencode', label: '.opencode/', hint: 'OpenCode' },\n { value: 'generic', label: '.agent/', hint: 'Generic' }\n ]\n });\n if (p.isCancel(target)) process.exit(0);\n return target as string;\n}\n\nexport async function promptCliTargets(): Promise<CliTarget[]> {\n const selection = await p.select({\n message: 'Select AI CLI target:',\n options: [\n { value: 'claude', label: 'Claude Code only', hint: '.claude/' },\n { value: 'gemini', label: 'Gemini CLI only', hint: '.gemini/' },\n { value: 'both', label: 'Both Claude + Gemini', hint: '.claude/ + .gemini/' }\n ]\n });\n if (p.isCancel(selection)) process.exit(0);\n\n if (selection === 'both') {\n return ['claude', 'gemini'];\n }\n return [selection as CliTarget];\n}\n\nexport async function promptAgents(sourceDir: string): Promise<string[]> {\n const available = listAvailable('agents', sourceDir);\n if (available.length === 0) return [];\n const selected = await p.multiselect({\n message: 'Select agents:',\n options: available.map((item) => ({\n value: item.name,\n label: item.name,\n hint: ['planner', 'debugger'].includes(item.name) ? '(recommended)' : undefined\n })),\n initialValues: ['planner', 'debugger'].filter(n => available.some((a) => a.name === n))\n });\n if (p.isCancel(selected)) process.exit(0);\n return selected as string[];\n}\n\nexport async function promptSkills(sourceDir: string): Promise<string[]> {\n const available = listAvailable('skills', sourceDir).filter((s) => s.isDir);\n if (available.length === 0) return [];\n const selected = await p.multiselect({\n message: 'Select skills:',\n options: available.map((item) => ({\n value: item.name,\n label: item.name,\n hint: ['planning', 'debugging'].includes(item.name) ? '(recommended)' : undefined\n })),\n initialValues: ['planning', 'debugging'].filter(n => available.some((a) => a.name === n))\n });\n if (p.isCancel(selected)) process.exit(0);\n return selected as string[];\n}\n\nexport async function promptCommands(sourceDir: string): Promise<string[]> {\n const available = listAvailable('commands', sourceDir);\n if (available.length === 0) return [];\n const selected = await p.multiselect({\n message: 'Select commands:',\n options: available.map((item) => ({\n value: item.name,\n label: item.name,\n hint: ['plan', 'fix', 'code'].includes(item.name) ? '(recommended)' : undefined\n })),\n initialValues: ['plan', 'fix', 'code'].filter(n => available.some((a) => a.name === n))\n });\n if (p.isCancel(selected)) process.exit(0);\n return selected as string[];\n}\n\nexport async function promptIncludeRouter(): Promise<boolean> {\n const result = await p.confirm({ message: 'Include router?', initialValue: true });\n if (p.isCancel(result)) process.exit(0);\n return result as boolean;\n}\n\nexport async function promptIncludeHooks(): Promise<boolean> {\n const result = await p.confirm({ message: 'Include hooks?', initialValue: false });\n if (p.isCancel(result)) process.exit(0);\n return result as boolean;\n}\n\nexport async function promptConfirm(message: string, defaultValue: boolean = true): Promise<boolean> {\n const result = await p.confirm({ message, initialValue: defaultValue });\n if (p.isCancel(result)) process.exit(0);\n return result as boolean;\n}\n\nexport async function promptExistingTarget(targetPath: string): Promise<string> {\n const action = await p.select({\n message: `${targetPath} already exists. What do you want to do?`,\n options: [\n { value: 'override', label: 'Override', hint: 'Replace all files' },\n { value: 'merge', label: 'Merge', hint: 'Only add missing files' },\n { value: 'skip', label: 'Skip', hint: 'Do nothing' }\n ]\n });\n if (p.isCancel(action)) process.exit(0);\n return action as string;\n}\n\nexport async function promptUpdateConfirm(updates: { toUpdate: string[]; skipped: string[] }): Promise<boolean> {\n console.log(pc.cyan('\\nChanges to apply:'));\n if (updates.toUpdate.length > 0) {\n console.log(pc.green(' Will update:'));\n updates.toUpdate.slice(0, 10).forEach(f => console.log(pc.green(` ✓ ${f}`)));\n if (updates.toUpdate.length > 10) console.log(pc.gray(` ... and ${updates.toUpdate.length - 10} more`));\n }\n if (updates.skipped.length > 0) {\n console.log(pc.yellow(' Will skip (modified locally):'));\n updates.skipped.slice(0, 5).forEach(f => console.log(pc.yellow(` ~ ${f}`)));\n if (updates.skipped.length > 5) console.log(pc.gray(` ... and ${updates.skipped.length - 5} more`));\n }\n console.log('');\n return promptConfirm('Apply these updates?', true);\n}\n","import fs from 'fs-extra';\nimport { join, resolve } from 'path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { KITS, getKit } from '../kits/index.js';\nimport { resolveSource, getTargetDir, TARGETS, getGlobalInstallPath, type CliTarget } from '../utils/paths.js';\nimport { copyItems, copyAllOfType, copyRouter, copyHooks, copyBaseFiles, copyAgentsMd, copyDirectory, copyCommandsForGemini, copySkillsForGemini, copyAgentsForGemini, copyGeminiBaseFiles } from '../utils/copy.js';\nimport { createInitialState } from '../utils/state.js';\nimport {\n promptProjectName,\n promptKit,\n promptTarget,\n promptAgents,\n promptSkills,\n promptCommands,\n promptIncludeRouter,\n promptIncludeHooks,\n promptConfirm,\n promptExistingTarget,\n promptCliTargets\n} from '../utils/prompts.js';\n\n/**\n * Filter components based on --exclude and --only patterns\n */\nfunction filterComponents(list: string[] | 'all', exclude?: string, only?: string): string[] | 'all' {\n if (!list || list === 'all') return list;\n let filtered = [...list];\n\n if (only) {\n const patterns = only.split(',').map(s => s.trim());\n filtered = filtered.filter(item => patterns.some(p => item.includes(p)));\n }\n\n if (exclude) {\n const patterns = exclude.split(',').map(s => s.trim());\n filtered = filtered.filter(item => !patterns.some(p => item.includes(p)));\n }\n\n return filtered;\n}\n\nexport async function initCommand(projectName: string | undefined, options: Record<string, any>): Promise<void> {\n console.log('');\n\n // 1. Get project name (support current directory with \".\" or empty)\n let projectDir: string;\n let isCurrentDir = false;\n\n // Handle --global flag\n if (options.global) {\n projectDir = getGlobalInstallPath();\n isCurrentDir = true;\n console.log(pc.cyan(`Installing globally to ${projectDir}`));\n } else if (!projectName || projectName === '.') {\n // Use current directory\n projectDir = process.cwd();\n projectName = '.';\n isCurrentDir = true;\n console.log(pc.gray(`Initializing in current directory: ${projectDir}`));\n } else {\n projectDir = resolve(process.cwd(), projectName);\n }\n\n // 2. Get CLI targets (Claude, Gemini, or both)\n let cliTargets: CliTarget[];\n if (options.target) {\n // Support comma-separated targets: --target claude,gemini\n const targetsFromFlag = options.target.split(',').map((t: string) => t.trim()) as CliTarget[];\n cliTargets = targetsFromFlag.filter(t => t === 'claude' || t === 'gemini');\n if (cliTargets.length === 0) {\n console.log(pc.yellow(`Unknown target \"${options.target}\", using \"claude\"`));\n cliTargets = ['claude'];\n }\n } else if (!process.stdin.isTTY || options.yes) {\n cliTargets = ['claude'];\n } else {\n cliTargets = await promptCliTargets();\n }\n\n // Check existing for each target\n let existingAction: string | null = null;\n const existingTargets: string[] = [];\n\n for (const target of cliTargets) {\n const targetDir = getTargetDir(projectDir, target);\n\n // Handle --fresh flag (remove existing installation)\n if (options.fresh && fs.existsSync(targetDir)) {\n await fs.remove(targetDir);\n existingTargets.push(TARGETS[target]);\n } else if (fs.existsSync(targetDir) && !options.force) {\n existingTargets.push(TARGETS[target]);\n }\n }\n\n if (options.fresh && existingTargets.length > 0) {\n const akDir = join(projectDir, '.ak');\n if (fs.existsSync(akDir)) {\n await fs.remove(akDir);\n }\n console.log(pc.cyan(`Fresh install: removed existing files (${existingTargets.join(', ')})`));\n existingAction = null;\n } else if (existingTargets.length > 0 && !options.force) {\n if (!process.stdin.isTTY || options.yes) {\n if (options.yes) {\n existingAction = 'override';\n } else {\n console.log(pc.yellow(`${existingTargets.join(', ')} already exists. Use --force to override.`));\n return;\n }\n } else {\n existingAction = await promptExistingTarget(existingTargets.join(', '));\n\n if (existingAction === 'skip') {\n console.log(pc.yellow('Skipped. No changes made.'));\n return;\n }\n }\n }\n\n // For new project directory, check if it exists\n if (!isCurrentDir && fs.existsSync(projectDir) && !options.force) {\n const files = fs.readdirSync(projectDir);\n if (files.length > 0 && !existingAction) {\n console.log(pc.red(`Directory \"${projectName}\" already exists and is not empty.`));\n console.log(pc.gray('Use --force to overwrite.'));\n return;\n }\n }\n\n // 3. Resolve source\n const source = resolveSource(options.source);\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n return;\n }\n\n console.log(pc.gray(`Source: ${source.path}`));\n\n // 4. Get kit\n let kitName = options.kit;\n if (!kitName && !options.force && !options.yes) {\n kitName = await promptKit();\n } else if (!kitName) {\n kitName = 'engineer'; // Default kit for --force/--yes mode\n }\n\n // 5. Set merge mode based on existing action\n const mergeMode = existingAction === 'merge';\n\n // 6. Prepare what to install\n let toInstall: {\n agents: string[] | 'all';\n commands: string[] | 'all';\n skills: string[] | 'all';\n workflows: string[] | 'all';\n includeRouter: boolean;\n includeHooks: boolean;\n } = {\n agents: [],\n commands: [],\n skills: [],\n workflows: [],\n includeRouter: false,\n includeHooks: false\n };\n\n if (kitName === 'custom' && !options.yes) {\n // Custom mode - prompt for everything (unless --yes is set)\n console.log(pc.cyan('\\nCustom kit configuration:'));\n toInstall.agents = await promptAgents(source.claudeDir);\n toInstall.skills = await promptSkills(source.claudeDir);\n toInstall.commands = await promptCommands(source.claudeDir);\n toInstall.includeRouter = await promptIncludeRouter();\n toInstall.includeHooks = await promptIncludeHooks();\n } else {\n const kit = getKit(kitName);\n if (!kit) {\n console.log(pc.red(`Unknown kit: ${kitName}`));\n console.log(pc.gray(`Available kits: ${Object.keys(KITS).join(', ')}`));\n return;\n }\n\n toInstall = {\n agents: kit.agents,\n commands: kit.commands,\n skills: kit.skills,\n workflows: kit.workflows || [],\n includeRouter: kit.includeRouter,\n includeHooks: kit.includeHooks\n };\n }\n\n // Apply --exclude and --only filters\n if (options.exclude || options.only) {\n toInstall.agents = filterComponents(toInstall.agents, options.exclude, options.only);\n toInstall.skills = filterComponents(toInstall.skills, options.exclude, options.only);\n toInstall.commands = filterComponents(toInstall.commands, options.exclude, options.only);\n toInstall.workflows = filterComponents(toInstall.workflows, options.exclude, options.only);\n }\n\n // 6. Confirm\n console.log(pc.cyan('\\nWill create:'));\n console.log(pc.white(` Project: ${projectName}/`));\n console.log(pc.white(` Targets: ${cliTargets.map(t => TARGETS[t]).join(', ')}/`));\n console.log(pc.white(` Kit: ${kitName}`));\n\n if (Array.isArray(toInstall.agents)) {\n console.log(pc.gray(` Agents: ${toInstall.agents.length}`));\n }\n if (Array.isArray(toInstall.skills)) {\n console.log(pc.gray(` Skills: ${toInstall.skills.length}`));\n }\n if (Array.isArray(toInstall.commands)) {\n console.log(pc.gray(` Commands: ${toInstall.commands.length}`));\n }\n\n console.log('');\n\n // Skip confirmation if --force or --yes is set\n if (!options.force && !options.yes) {\n if (!await promptConfirm('Proceed?')) {\n console.log(pc.yellow('Cancelled.'));\n return;\n }\n }\n\n // 7. Create project\n const spinner = ora('Creating project...').start();\n\n try {\n // Create project directory\n await fs.ensureDir(projectDir);\n\n // Install for each CLI target\n for (const target of cliTargets) {\n const targetDir = getTargetDir(projectDir, target);\n await fs.ensureDir(targetDir);\n\n const targetLabel = target === 'gemini' ? 'Gemini' : 'Claude';\n\n // Copy agents (both Claude and Gemini support agents with similar format)\n spinner.text = mergeMode ? `Merging agents (${targetLabel})...` : `Copying agents (${targetLabel})...`;\n if (target === 'gemini') {\n // Convert Claude agent format to Gemini (map model names)\n await copyAgentsForGemini(toInstall.agents, source.claudeDir, targetDir, mergeMode);\n } else {\n if (toInstall.agents === 'all') {\n await copyAllOfType('agents', source.claudeDir, targetDir, mergeMode);\n } else if (toInstall.agents.length > 0) {\n await copyItems(toInstall.agents, 'agents', source.claudeDir, targetDir, mergeMode);\n }\n }\n\n // Copy skills (both Claude and Gemini support SKILL.md format)\n spinner.text = mergeMode ? `Merging skills (${targetLabel})...` : `Copying skills (${targetLabel})...`;\n if (target === 'gemini') {\n // Gemini uses same SKILL.md format, copy directly\n await copySkillsForGemini(toInstall.skills, source.claudeDir, targetDir, mergeMode);\n } else {\n if (toInstall.skills === 'all') {\n await copyAllOfType('skills', source.claudeDir, targetDir, mergeMode);\n } else if (toInstall.skills.length > 0) {\n await copyItems(toInstall.skills, 'skills', source.claudeDir, targetDir, mergeMode);\n }\n }\n\n // Copy commands (convert to TOML for Gemini)\n spinner.text = mergeMode ? `Merging commands (${targetLabel})...` : `Copying commands (${targetLabel})...`;\n if (target === 'gemini') {\n // Convert MD to TOML for Gemini\n await copyCommandsForGemini(toInstall.commands, source.claudeDir, targetDir, mergeMode);\n } else {\n if (toInstall.commands === 'all') {\n await copyAllOfType('commands', source.claudeDir, targetDir, mergeMode);\n } else if (toInstall.commands.length > 0) {\n await copyItems(toInstall.commands, 'commands', source.claudeDir, targetDir, mergeMode);\n }\n }\n\n // Copy workflows (Claude only)\n if (target === 'claude') {\n spinner.text = mergeMode ? `Merging workflows (${targetLabel})...` : `Copying workflows (${targetLabel})...`;\n if (toInstall.workflows === 'all') {\n await copyAllOfType('workflows', source.claudeDir, targetDir, mergeMode);\n } else if (toInstall.workflows && toInstall.workflows.length > 0) {\n await copyItems(toInstall.workflows, 'workflows', source.claudeDir, targetDir, mergeMode);\n }\n }\n\n // Copy router (Claude only)\n if (target === 'claude' && toInstall.includeRouter) {\n spinner.text = mergeMode ? `Merging router (${targetLabel})...` : `Copying router (${targetLabel})...`;\n await copyRouter(source.claudeDir, targetDir, mergeMode);\n }\n\n // Copy hooks (Claude only)\n if (target === 'claude' && toInstall.includeHooks) {\n spinner.text = mergeMode ? `Merging hooks (${targetLabel})...` : `Copying hooks (${targetLabel})...`;\n await copyHooks(source.claudeDir, targetDir, mergeMode);\n }\n\n // Copy extra directories and base files\n if (target === 'claude') {\n spinner.text = mergeMode ? `Merging extras (${targetLabel})...` : `Copying extras (${targetLabel})...`;\n await copyDirectory('memory', source.claudeDir, targetDir, mergeMode);\n await copyDirectory('output-styles', source.claudeDir, targetDir, mergeMode);\n await copyDirectory('scripts', source.claudeDir, targetDir, mergeMode);\n // Copy base files (includes statusline files)\n spinner.text = mergeMode ? `Merging base files (${targetLabel})...` : `Copying base files (${targetLabel})...`;\n await copyBaseFiles(source.claudeDir, targetDir, mergeMode);\n } else if (target === 'gemini') {\n // Copy Gemini settings.json (with plan mode & subagents enabled)\n spinner.text = mergeMode ? `Merging settings (${targetLabel})...` : `Copying settings (${targetLabel})...`;\n await copyGeminiBaseFiles(targetDir, mergeMode);\n }\n }\n\n // Copy AGENTS.md (project root)\n if (source.agentsMd && cliTargets.includes('claude')) {\n await copyAgentsMd(source.agentsMd, projectDir, mergeMode);\n }\n\n // Create state file\n spinner.text = 'Saving state...';\n await createInitialState(projectDir, {\n kit: kitName,\n source: source.path,\n targets: cliTargets,\n target: TARGETS[cliTargets[0]], // Keep backward compat\n installed: {\n agents: toInstall.agents === 'all' ? ['all'] : toInstall.agents,\n skills: toInstall.skills === 'all' ? ['all'] : toInstall.skills,\n commands: toInstall.commands === 'all' ? ['all'] : toInstall.commands,\n workflows: toInstall.workflows === 'all' ? ['all'] : (toInstall.workflows || []),\n router: toInstall.includeRouter,\n hooks: toInstall.includeHooks\n }\n });\n\n const actionWord = mergeMode ? 'merged' : (existingAction === 'override' ? 'overridden' : 'created');\n spinner.succeed(pc.green(`Project ${actionWord} successfully!`));\n\n // Print next steps\n console.log('');\n if (!isCurrentDir) {\n console.log(pc.cyan('Next steps:'));\n console.log(pc.white(` cd ${projectName}`));\n }\n\n const targetNames = cliTargets.map(t => t === 'gemini' ? 'Gemini CLI' : 'Claude Code').join(' & ');\n console.log(pc.cyan(`Ready to code with ${targetNames}!`));\n\n console.log('');\n console.log(pc.gray('Useful commands:'));\n console.log(pc.gray(' ak status - Check file status'));\n console.log(pc.gray(' ak add <item> - Add more agents/skills'));\n console.log(pc.gray(' ak update - Sync from source'));\n console.log('');\n\n } catch (error: any) {\n spinner.fail(pc.red('Failed to create project'));\n console.error(pc.red(error.message));\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n }\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { resolveSource, isAkProject } from '../utils/paths.js';\nimport { copyItems, listAvailable } from '../utils/copy.js';\nimport { loadState, updateState } from '../utils/state.js';\nimport { hashDirectory } from '../utils/hash.js';\n\nexport async function addCommand(item: string, options: Record<string, any> = {}): Promise<void> {\n // Parse item format: type:name (e.g., skill:databases, agent:debugger)\n const parts = item.split(':');\n if (parts.length !== 2) {\n console.log(pc.red('Invalid format. Use: ak add <type>:<name>'));\n console.log(pc.gray('Examples:'));\n console.log(pc.gray(' ak add skill:databases'));\n console.log(pc.gray(' ak add agent:debugger'));\n console.log(pc.gray(' ak add command:fix/ci'));\n return;\n }\n\n const [type, name] = parts;\n const validTypes = ['agent', 'agents', 'skill', 'skills', 'command', 'commands', 'workflow', 'workflows'];\n\n if (!validTypes.includes(type)) {\n console.log(pc.red(`Invalid type: ${type}`));\n console.log(pc.gray(`Valid types: agent, skill, command, workflow`));\n return;\n }\n\n // Normalize type to plural\n const typeMap: Record<string, string> = {\n agent: 'agents',\n agents: 'agents',\n skill: 'skills',\n skills: 'skills',\n command: 'commands',\n commands: 'commands',\n workflow: 'workflows',\n workflows: 'workflows'\n };\n const normalizedType = typeMap[type];\n\n const projectDir = options.path || process.cwd();\n\n // Check if in ak project\n if (!isAkProject(projectDir)) {\n console.log(pc.red('Not in an ak project.'));\n console.log(pc.gray('Run \"ak init\" first or use --path to specify project directory.'));\n return;\n }\n\n // Load state\n const state = await loadState(projectDir);\n if (!state) {\n console.log(pc.yellow('Warning: No state file found. Creating fresh state after add.'));\n }\n\n // Resolve source\n const sourceFlag = options.source || (state ? state.source : null);\n const source = resolveSource(sourceFlag);\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n return;\n }\n\n // Check if item exists in source\n const available = listAvailable(normalizedType, source.claudeDir);\n const exists = available.some(a => a.name === name);\n\n if (!exists) {\n console.log(pc.red(`${type} \"${name}\" not found in source.`));\n console.log(pc.gray(`Use \"ak list ${normalizedType}\" to see available options.`));\n return;\n }\n\n // Determine target directory\n const targetFolder = state?.target || '.claude';\n const targetDir = join(projectDir, targetFolder);\n\n // Check if already installed\n const destPath = join(targetDir, normalizedType, name);\n const destPathMd = destPath + '.md';\n if (fs.existsSync(destPath) || fs.existsSync(destPathMd)) {\n console.log(pc.yellow(`${type} \"${name}\" already exists in project.`));\n console.log(pc.gray('Use \"ak update\" to refresh from source.'));\n return;\n }\n\n // Copy\n const spinner = ora(`Adding ${type} \"${name}\"...`).start();\n\n try {\n const result = await copyItems([name], normalizedType, source.claudeDir, targetDir);\n\n if (result.copied.length > 0) {\n spinner.succeed(pc.green(`Added ${type}: ${name}`));\n\n // Update state\n if (state) {\n const installed = state.installed || {};\n const typeArray = installed[normalizedType as keyof typeof installed];\n if (!typeArray) {\n (installed as any)[normalizedType] = [name];\n } else if (Array.isArray(typeArray) && !typeArray.includes(name)) {\n typeArray.push(name);\n }\n\n // Recalculate hashes\n const newHashes = await hashDirectory(targetDir);\n\n await updateState(projectDir, {\n installed,\n originalHashes: newHashes\n });\n }\n\n console.log(pc.gray(`Location: ${targetFolder}/${normalizedType}/${name}`));\n } else if (result.skipped.length > 0) {\n spinner.fail(pc.red(`Could not find ${type}: ${name}`));\n } else if (result.errors.length > 0) {\n spinner.fail(pc.red(`Error adding ${type}: ${result.errors[0].error}`));\n }\n } catch (error: any) {\n spinner.fail(pc.red(`Failed to add ${type}`));\n console.error(pc.red(error.message));\n }\n}\n","import pc from 'picocolors';\nimport { getKitList } from '../kits/index.js';\nimport { resolveSource } from '../utils/paths.js';\nimport { listAvailable, type AvailableItem } from '../utils/copy.js';\n\nexport async function listCommand(type: string | undefined, options: Record<string, any> = {}): Promise<void> {\n const validTypes = ['kits', 'agents', 'skills', 'commands', 'workflows'];\n\n // If no type specified, show help\n if (!type) {\n console.log(pc.cyan('\\nAvailable list commands:'));\n console.log(pc.white(' ak list kits - List available kits'));\n console.log(pc.white(' ak list agents - List available agents'));\n console.log(pc.white(' ak list skills - List available skills'));\n console.log(pc.white(' ak list commands - List available commands'));\n console.log(pc.white(' ak list workflows - List available workflows'));\n console.log('');\n return;\n }\n\n // Normalize type\n type = type.toLowerCase();\n if (!validTypes.includes(type)) {\n console.log(pc.red(`Unknown type: ${type}`));\n console.log(pc.gray(`Valid types: ${validTypes.join(', ')}`));\n return;\n }\n\n // List kits (doesn't need source)\n if (type === 'kits') {\n listKits();\n return;\n }\n\n // For other types, need source\n const source = resolveSource(options.source);\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n return;\n }\n\n console.log(pc.gray(`Source: ${source.path}\\n`));\n\n switch (type) {\n case 'agents':\n listAgents(source.claudeDir);\n break;\n case 'skills':\n listSkills(source.claudeDir);\n break;\n case 'commands':\n listCommandsList(source.claudeDir);\n break;\n case 'workflows':\n listWorkflows(source.claudeDir);\n break;\n }\n}\n\nfunction listKits(): void {\n const kits = getKitList();\n\n console.log(pc.bold(pc.cyan('\\nAvailable Kits:\\n')));\n\n for (const kit of kits) {\n const colorFn = (pc as any)[kit.color] || pc.white;\n console.log(` ${kit.emoji} ${colorFn(pc.bold(kit.name.padEnd(12)))} - ${kit.description}`);\n\n // Show details\n if (Array.isArray(kit.agents)) {\n const agentCount = Array.isArray(kit.agents) ? kit.agents.length : 'all';\n const skillCount = Array.isArray(kit.skills) ? kit.skills.length : 'all';\n const cmdCount = Array.isArray(kit.commands) ? kit.commands.length : 'all';\n console.log(pc.gray(` Agents: ${agentCount} | Skills: ${skillCount} | Commands: ${cmdCount}`));\n } else {\n console.log(pc.gray(' Includes: ALL agents, skills, commands'));\n }\n }\n\n console.log(`\\n 🔧 ${pc.bold('custom'.padEnd(12))} - Pick your own agents, skills, and commands`);\n console.log('');\n}\n\nfunction listAgents(sourceDir: string): void {\n const agents = listAvailable('agents', sourceDir);\n\n console.log(pc.bold(pc.cyan(`Available Agents (${agents.length}):\\n`)));\n\n if (agents.length === 0) {\n console.log(pc.gray(' No agents found'));\n return;\n }\n\n // Group into columns\n const cols = 3;\n const rows = Math.ceil(agents.length / cols);\n\n for (let i = 0; i < rows; i++) {\n let line = ' ';\n for (let j = 0; j < cols; j++) {\n const idx = i + j * rows;\n if (idx < agents.length) {\n line += pc.white(agents[idx].name.padEnd(25));\n }\n }\n console.log(line);\n }\n console.log('');\n}\n\nfunction listSkills(sourceDir: string): void {\n const skills = listAvailable('skills', sourceDir).filter(s => s.isDir);\n\n console.log(pc.bold(pc.cyan(`Available Skills (${skills.length}):\\n`)));\n\n if (skills.length === 0) {\n console.log(pc.gray(' No skills found'));\n return;\n }\n\n // Group into columns\n const cols = 2;\n const rows = Math.ceil(skills.length / cols);\n\n for (let i = 0; i < rows; i++) {\n let line = ' ';\n for (let j = 0; j < cols; j++) {\n const idx = i + j * rows;\n if (idx < skills.length) {\n line += pc.white(skills[idx].name.padEnd(35));\n }\n }\n console.log(line);\n }\n console.log('');\n}\n\nfunction listCommandsList(sourceDir: string): void {\n const commands = listAvailable('commands', sourceDir);\n\n console.log(pc.bold(pc.cyan(`Available Commands (${commands.length}):\\n`)));\n\n if (commands.length === 0) {\n console.log(pc.gray(' No commands found'));\n return;\n }\n\n // Separate files and directories\n const files = commands.filter(c => !c.isDir);\n const dirs = commands.filter(c => c.isDir);\n\n // Print main commands (files)\n console.log(pc.gray(' Main commands:'));\n const cols = 4;\n const rows = Math.ceil(files.length / cols);\n\n for (let i = 0; i < rows; i++) {\n let line = ' ';\n for (let j = 0; j < cols; j++) {\n const idx = i + j * rows;\n if (idx < files.length) {\n line += pc.white(('/' + files[idx].name).padEnd(18));\n }\n }\n console.log(line);\n }\n\n // Print command groups (directories)\n if (dirs.length > 0) {\n console.log(pc.gray('\\n Command groups:'));\n for (const dir of dirs) {\n console.log(pc.yellow(` /${dir.name}/`));\n }\n }\n\n console.log('');\n}\n\nfunction listWorkflows(sourceDir: string): void {\n const workflows = listAvailable('workflows', sourceDir);\n\n console.log(pc.bold(pc.cyan(`Available Workflows (${workflows.length}):\\n`)));\n\n if (workflows.length === 0) {\n console.log(pc.gray(' No workflows found'));\n return;\n }\n\n for (const wf of workflows) {\n console.log(pc.white(` • ${wf.name}`));\n }\n console.log('');\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { resolveSource, isAkProject } from '../utils/paths.js';\nimport { loadState, updateState, getFileStatuses } from '../utils/state.js';\nimport { hashFile, hashDirectory } from '../utils/hash.js';\nimport { promptUpdateConfirm } from '../utils/prompts.js';\n\nexport async function updateCommand(options: Record<string, any> = {}): Promise<void> {\n const projectDir = process.cwd();\n\n // Check if in ak project\n if (!isAkProject(projectDir)) {\n console.log(pc.red('Not in an ak project.'));\n console.log(pc.gray('Run \"ak init\" first.'));\n return;\n }\n\n // Load state\n const state = await loadState(projectDir);\n if (!state) {\n console.log(pc.red('No state file found.'));\n console.log(pc.gray('This project may have been created without ak. Run \"ak doctor\" for more info.'));\n return;\n }\n\n // Resolve source\n const sourceFlag = options.source || state.source;\n const source = resolveSource(sourceFlag);\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n return;\n }\n\n console.log(pc.gray(`Source: ${source.path}`));\n console.log(pc.gray(`Target: ${state.target}`));\n console.log('');\n\n const spinner = ora('Checking for updates...').start();\n\n try {\n // Get current file statuses\n const result = await getFileStatuses(projectDir);\n if ('error' in result) {\n spinner.fail(pc.red(result.error));\n return;\n }\n\n const { statuses, targetDir } = result;\n\n // Determine what types to update\n let typesToUpdate = ['agents', 'skills', 'commands', 'workflows'];\n if (options.agents) typesToUpdate = ['agents'];\n if (options.skills) typesToUpdate = ['skills'];\n if (options.commands) typesToUpdate = ['commands'];\n\n // Get source hashes\n const sourceHashes: Record<string, string> = {};\n for (const type of typesToUpdate) {\n const typeDir = join(source.claudeDir, type);\n if (fs.existsSync(typeDir)) {\n const hashes = await hashDirectory(typeDir);\n for (const [path, hash] of Object.entries(hashes)) {\n sourceHashes[`${type}/${path}`] = hash;\n }\n }\n }\n\n // Compare with current\n const toUpdate: string[] = [];\n const skipped: string[] = [];\n const newFiles: string[] = [];\n\n for (const [path, sourceHash] of Object.entries(sourceHashes)) {\n const currentPath = join(targetDir, path);\n const originalHash = state.originalHashes?.[path];\n const currentHash = fs.existsSync(currentPath) ? hashFile(currentPath) : null;\n\n if (!currentHash) {\n // New file from source\n newFiles.push(path);\n } else if (currentHash === originalHash) {\n // File unchanged locally, can update\n if (sourceHash !== currentHash) {\n toUpdate.push(path);\n }\n } else {\n // File modified locally, skip\n if (sourceHash !== originalHash) {\n skipped.push(path);\n }\n }\n }\n\n spinner.stop();\n\n // Show summary\n if (toUpdate.length === 0 && newFiles.length === 0) {\n console.log(pc.green('✓ Already up to date!'));\n if (skipped.length > 0) {\n console.log(pc.yellow(` ${skipped.length} file(s) skipped (modified locally)`));\n }\n return;\n }\n\n console.log(pc.cyan('Updates available:'));\n console.log(pc.green(` ${toUpdate.length} file(s) to update`));\n console.log(pc.blue(` ${newFiles.length} new file(s)`));\n if (skipped.length > 0) {\n console.log(pc.yellow(` ${skipped.length} file(s) skipped (modified locally)`));\n }\n console.log('');\n\n // Dry run mode\n if (options.dryRun) {\n console.log(pc.cyan('Dry run - no changes made'));\n console.log(pc.gray('\\nFiles that would be updated:'));\n [...toUpdate, ...newFiles].forEach(f => console.log(pc.gray(` ${f}`)));\n if (skipped.length > 0) {\n console.log(pc.gray('\\nFiles that would be skipped:'));\n skipped.forEach(f => console.log(pc.yellow(` ~ ${f}`)));\n }\n return;\n }\n\n // Confirm\n if (!options.force) {\n const confirmed = await promptUpdateConfirm({\n toUpdate: [...toUpdate, ...newFiles],\n skipped\n });\n if (!confirmed) {\n console.log(pc.yellow('Cancelled.'));\n return;\n }\n }\n\n // Apply updates\n const updateSpinner = ora('Applying updates...').start();\n\n let updated = 0;\n let failed = 0;\n\n for (const path of [...toUpdate, ...newFiles]) {\n try {\n const srcPath = join(source.claudeDir, path);\n const destPath = join(targetDir, path);\n\n await fs.ensureDir(join(targetDir, path.split('/').slice(0, -1).join('/')));\n await fs.copy(srcPath, destPath, { overwrite: true });\n updated++;\n } catch (err: any) {\n failed++;\n if (process.env.DEBUG) {\n console.error(`Failed to update ${path}: ${err.message}`);\n }\n }\n }\n\n // Update state with new hashes\n const newHashes = await hashDirectory(targetDir);\n await updateState(projectDir, {\n source: source.path,\n originalHashes: newHashes\n });\n\n updateSpinner.succeed(pc.green(`Updated ${updated} file(s)`));\n\n if (failed > 0) {\n console.log(pc.yellow(` ${failed} file(s) failed to update`));\n }\n\n if (skipped.length > 0) {\n console.log(pc.gray(`\\nSkipped files (modified locally):`));\n skipped.slice(0, 5).forEach(f => console.log(pc.yellow(` ~ ${f}`)));\n if (skipped.length > 5) {\n console.log(pc.gray(` ... and ${skipped.length - 5} more`));\n }\n }\n\n } catch (error: any) {\n spinner.fail(pc.red('Update failed'));\n console.error(pc.red(error.message));\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n }\n}\n","import pc from 'picocolors';\nimport { isAkProject } from '../utils/paths.js';\nimport { loadState, getFileStatuses } from '../utils/state.js';\nimport fs from 'fs-extra';\n\nexport async function statusCommand(options: Record<string, any> = {}): Promise<void> {\n const projectDir = process.cwd();\n\n // Check if in ak project\n if (!isAkProject(projectDir)) {\n console.log(pc.red('Not in an ak project.'));\n console.log(pc.gray('Run \"ak init\" first.'));\n return;\n }\n\n // Load state\n const state = await loadState(projectDir);\n if (!state) {\n console.log(pc.yellow('No state file found.'));\n console.log(pc.gray('This project may have been created without ak.'));\n return;\n }\n\n // Print project info\n console.log(pc.bold(pc.cyan('\\nProject Status\\n')));\n console.log(pc.white(` Kit: ${state.kit}`));\n console.log(pc.white(` Target: ${state.target}`));\n console.log(pc.white(` Source: ${state.source}`));\n console.log(pc.gray(` Created: ${new Date(state.createdAt).toLocaleDateString()}`));\n console.log(pc.gray(` Updated: ${new Date(state.lastUpdate).toLocaleDateString()}`));\n console.log('');\n\n // Get file statuses\n const result = await getFileStatuses(projectDir);\n\n if ('error' in result) {\n console.log(pc.red(`Error: ${result.error}`));\n return;\n }\n\n const { statuses } = result;\n\n // Summary\n const total = statuses.unchanged.length + statuses.modified.length + statuses.added.length;\n console.log(pc.cyan('File Status:'));\n console.log(pc.green(` ✓ ${statuses.unchanged.length} unchanged`));\n if (statuses.modified.length > 0) {\n console.log(pc.yellow(` ~ ${statuses.modified.length} modified`));\n }\n if (statuses.added.length > 0) {\n console.log(pc.blue(` + ${statuses.added.length} added locally`));\n }\n if (statuses.deleted.length > 0) {\n console.log(pc.red(` - ${statuses.deleted.length} deleted`));\n }\n console.log(pc.gray(` Total: ${total} files tracked`));\n console.log('');\n\n // Show modified files\n if (statuses.modified.length > 0 && (options.verbose || statuses.modified.length <= 10)) {\n console.log(pc.yellow('Modified files:'));\n for (const file of statuses.modified) {\n console.log(pc.yellow(` ~ ${file}`));\n }\n console.log('');\n } else if (statuses.modified.length > 10) {\n console.log(pc.yellow(`Modified files: (showing first 10, use --verbose for all)`));\n for (const file of statuses.modified.slice(0, 10)) {\n console.log(pc.yellow(` ~ ${file}`));\n }\n console.log(pc.gray(` ... and ${statuses.modified.length - 10} more`));\n console.log('');\n }\n\n // Show added files\n if (statuses.added.length > 0 && (options.verbose || statuses.added.length <= 5)) {\n console.log(pc.blue('Added locally:'));\n for (const file of statuses.added) {\n console.log(pc.blue(` + ${file}`));\n }\n console.log('');\n }\n\n // Installed components\n if (state.installed) {\n console.log(pc.cyan('Installed Components:'));\n const { agents, skills, commands, workflows, router, hooks } = state.installed;\n\n if (agents && agents.length > 0) {\n console.log(pc.gray(` Agents: ${agents.includes('all') ? 'ALL' : agents.length}`));\n }\n if (skills && skills.length > 0) {\n console.log(pc.gray(` Skills: ${skills.includes('all') ? 'ALL' : skills.length}`));\n }\n if (commands && commands.length > 0) {\n console.log(pc.gray(` Commands: ${commands.includes('all') ? 'ALL' : commands.length}`));\n }\n if (workflows && workflows.length > 0) {\n console.log(pc.gray(` Workflows: ${workflows.includes('all') ? 'ALL' : workflows.length}`));\n }\n if (router) console.log(pc.gray(' Router: ✓'));\n if (hooks) console.log(pc.gray(' Hooks: ✓'));\n console.log('');\n }\n\n // Check source availability\n if (state.source && !fs.existsSync(state.source)) {\n console.log(pc.yellow('⚠ Source directory not found. Update may not work.'));\n console.log(pc.gray(` Expected: ${state.source}`));\n console.log('');\n }\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport pc from 'picocolors';\nimport { isAkProject, resolveSource, TARGETS } from '../utils/paths.js';\nimport { loadState, createInitialState } from '../utils/state.js';\n\ninterface CheckResult {\n name: string;\n label: string;\n passed: boolean;\n severity: 'error' | 'warning';\n fixed?: boolean;\n fixError?: string;\n meta?: Record<string, any>;\n}\n\ninterface Check {\n name: string;\n label: string;\n severity: 'error' | 'warning';\n check: () => boolean | Promise<boolean>;\n fix?: () => void | Promise<void>;\n getMeta?: () => Record<string, any> | Promise<Record<string, any>>;\n}\n\nexport async function doctorCommand(options: Record<string, any> = {}): Promise<{ issues: number; warnings: number }> {\n const projectDir = process.cwd();\n\n // Detect target directory for use across checks\n let targetDir: { name: string; folder: string; dir: string } | null = null;\n for (const [name, folder] of Object.entries(TARGETS)) {\n const dir = join(projectDir, folder);\n if (fs.existsSync(dir)) {\n targetDir = { name, folder, dir };\n break;\n }\n }\n\n // Load state once\n let state = await loadState(projectDir);\n\n // Define all checks\n const checks: Check[] = [\n {\n name: 'project',\n label: 'ak project detected',\n severity: 'error',\n check: () => isAkProject(projectDir),\n fix: async () => {\n await fs.ensureDir(join(projectDir, '.ak'));\n }\n },\n {\n name: 'state',\n label: 'State file (.ak/state.json) exists',\n severity: 'warning',\n check: () => state !== null,\n fix: async () => {\n // Create state with detected values\n const kit = 'unknown';\n const source = '';\n const target = targetDir ? targetDir.folder : '.claude';\n\n // Detect installed components\n const installed: any = {};\n if (targetDir) {\n const dirs = ['agents', 'skills', 'commands', 'workflows'];\n for (const dir of dirs) {\n const fullPath = join(targetDir.dir, dir);\n if (fs.existsSync(fullPath)) {\n const items = fs.readdirSync(fullPath).filter(f => !f.startsWith('.'));\n if (items.length > 0) {\n installed[dir] = items;\n }\n }\n }\n }\n\n await createInitialState(projectDir, { kit, source, target, installed });\n state = await loadState(projectDir); // Reload state\n }\n },\n {\n name: 'target',\n label: 'Target directory exists',\n severity: 'error',\n check: () => targetDir !== null,\n getMeta: () => targetDir ? { folder: targetDir.folder } : {}\n },\n {\n name: 'agents_md',\n label: 'AGENTS.md exists',\n severity: 'warning',\n check: () => fs.existsSync(join(projectDir, 'AGENTS.md'))\n },\n {\n name: 'source',\n label: 'Source directory accessible',\n severity: 'error',\n check: () => {\n if (!state || !state.source) return true; // Skip if no state/source\n return fs.existsSync(state.source);\n },\n getMeta: () => state && state.source ? { source: state.source } : {}\n },\n {\n name: 'subdirs_agents',\n label: 'agents/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'agents'));\n },\n fix: async () => {\n if (targetDir) {\n await fs.ensureDir(join(targetDir.dir, 'agents'));\n }\n },\n getMeta: () => {\n if (!targetDir) return {};\n const fullPath = join(targetDir.dir, 'agents');\n if (fs.existsSync(fullPath)) {\n const items = fs.readdirSync(fullPath).length;\n return { items };\n }\n return {};\n }\n },\n {\n name: 'subdirs_commands',\n label: 'commands/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'commands'));\n },\n fix: async () => {\n if (targetDir) {\n await fs.ensureDir(join(targetDir.dir, 'commands'));\n }\n },\n getMeta: () => {\n if (!targetDir) return {};\n const fullPath = join(targetDir.dir, 'commands');\n if (fs.existsSync(fullPath)) {\n const items = fs.readdirSync(fullPath).length;\n return { items };\n }\n return {};\n }\n },\n {\n name: 'subdirs_skills',\n label: 'skills/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'skills'));\n },\n fix: async () => {\n if (targetDir) {\n await fs.ensureDir(join(targetDir.dir, 'skills'));\n }\n },\n getMeta: () => {\n if (!targetDir) return {};\n const fullPath = join(targetDir.dir, 'skills');\n if (fs.existsSync(fullPath)) {\n const items = fs.readdirSync(fullPath).length;\n return { items };\n }\n return {};\n }\n },\n {\n name: 'subdirs_scripts',\n label: 'scripts/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'scripts'));\n }\n },\n {\n name: 'subdirs_hooks',\n label: 'hooks/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'hooks'));\n }\n },\n {\n name: 'statusline',\n label: 'statusline files exist',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'statusline.cjs')) ||\n fs.existsSync(join(targetDir.dir, 'statusline.sh'));\n }\n }\n ];\n\n // Run checks\n const results = await runChecks(checks, options);\n\n // Handle output modes\n if (options.json) {\n await outputJson(projectDir, results);\n return computeSummary(results);\n }\n\n if (options.report) {\n await outputReport(projectDir, results, options);\n }\n\n if (options.checkOnly) {\n const summary = computeSummary(results);\n if (summary.issues > 0) {\n process.exit(1);\n } else {\n process.exit(0);\n }\n }\n\n // Default colored output (backward compatible)\n await outputColored(projectDir, results, state, targetDir);\n\n return computeSummary(results);\n}\n\nasync function runChecks(checks: Check[], options: Record<string, any>): Promise<CheckResult[]> {\n const results: CheckResult[] = [];\n\n for (const c of checks) {\n const passed = await c.check();\n const meta = c.getMeta ? await c.getMeta() : undefined;\n const result: CheckResult = {\n name: c.name,\n label: c.label,\n passed,\n severity: c.severity,\n meta\n };\n\n if (!passed && options.fix && c.fix) {\n try {\n await c.fix();\n result.fixed = true;\n result.passed = true;\n } catch (e: any) {\n result.fixError = e.message;\n }\n }\n\n results.push(result);\n }\n\n return results;\n}\n\nfunction computeSummary(results: CheckResult[]): { issues: number; warnings: number } {\n let issues = 0;\n let warnings = 0;\n\n for (const r of results) {\n if (!r.passed && r.severity === 'error') {\n issues++;\n }\n if (!r.passed && r.severity === 'warning') {\n warnings++;\n }\n }\n\n return { issues, warnings };\n}\n\nasync function outputJson(projectDir: string, results: CheckResult[]): Promise<void> {\n const summary = computeSummary(results);\n const fixed = results.filter(r => r.fixed).length;\n\n const output = {\n project: projectDir,\n timestamp: new Date().toISOString(),\n checks: results,\n summary: {\n total: results.length,\n passed: results.filter(r => r.passed).length,\n failed: results.filter(r => !r.passed).length,\n warnings: summary.warnings,\n fixed\n }\n };\n\n console.log(JSON.stringify(output, null, 2));\n}\n\nasync function outputReport(projectDir: string, results: CheckResult[], options: Record<string, any>): Promise<void> {\n const summary = computeSummary(results);\n const timestamp = new Date().toISOString();\n\n let markdown = `# Apero Kit Doctor Report\\n\\n`;\n markdown += `**Project:** ${projectDir}\\n`;\n markdown += `**Timestamp:** ${timestamp}\\n\\n`;\n\n markdown += `## Summary\\n\\n`;\n markdown += `- Total checks: ${results.length}\\n`;\n markdown += `- Passed: ${results.filter(r => r.passed).length}\\n`;\n markdown += `- Failed: ${results.filter(r => !r.passed).length}\\n`;\n markdown += `- Errors: ${summary.issues}\\n`;\n markdown += `- Warnings: ${summary.warnings}\\n`;\n if (options.fix) {\n markdown += `- Fixed: ${results.filter(r => r.fixed).length}\\n`;\n }\n markdown += `\\n`;\n\n markdown += `## Check Results\\n\\n`;\n for (const r of results) {\n const icon = r.passed ? '✓' : (r.severity === 'error' ? '✗' : '⚠');\n markdown += `### ${icon} ${r.label}\\n\\n`;\n markdown += `- **Status:** ${r.passed ? 'PASS' : 'FAIL'}\\n`;\n markdown += `- **Severity:** ${r.severity}\\n`;\n if (r.fixed) {\n markdown += `- **Fixed:** Yes\\n`;\n }\n if (r.fixError) {\n markdown += `- **Fix Error:** ${r.fixError}\\n`;\n }\n if (r.meta && Object.keys(r.meta).length > 0) {\n markdown += `- **Details:** ${JSON.stringify(r.meta)}\\n`;\n }\n markdown += `\\n`;\n }\n\n markdown += `## Suggestions\\n\\n`;\n const failedChecks = results.filter(r => !r.passed);\n if (failedChecks.length === 0) {\n markdown += `All checks passed! No suggestions.\\n`;\n } else {\n for (const r of failedChecks) {\n if (r.name === 'project') {\n markdown += `- Run \"ak init .\" to initialize this directory\\n`;\n }\n if (r.name === 'state') {\n markdown += `- State file is missing. Re-run \"ak init\" or create manually\\n`;\n }\n if (r.name === 'source' && r.meta?.source) {\n markdown += `- Update source path: ak update --source <new-path>\\n`;\n }\n }\n }\n\n const reportPath = join(projectDir, '.ak', 'doctor-report.md');\n await fs.ensureDir(join(projectDir, '.ak'));\n await fs.writeFile(reportPath, markdown, 'utf-8');\n\n if (!options.json) {\n console.log(pc.green(`\\n✓ Report saved to ${reportPath}\\n`));\n }\n}\n\nasync function outputColored(\n projectDir: string,\n results: CheckResult[],\n state: any,\n targetDir: { name: string; folder: string; dir: string } | null\n): Promise<void> {\n console.log(pc.bold(pc.cyan('\\nApero Kit Doctor\\n')));\n console.log(pc.gray('Checking project health...\\n'));\n\n // Output each check result\n for (const r of results) {\n if (r.passed) {\n let msg = `✓ ${r.label}`;\n if (r.name === 'target' && r.meta?.folder) {\n msg += ` (${r.meta.folder})`;\n }\n if (r.name.startsWith('subdirs_') && r.meta?.items !== undefined) {\n msg += ` (${r.meta.items} items)`;\n }\n console.log(pc.green(msg));\n } else {\n const icon = r.severity === 'error' ? '✗' : '⚠';\n const color = r.severity === 'error' ? pc.red : pc.yellow;\n let msg = `${icon} ${r.label}`;\n if (r.name === 'target') {\n msg = `${icon} No target directory (.claude/, .opencode/, .agent/)`;\n }\n if (r.name === 'agents_md') {\n msg = `${icon} AGENTS.md not found (optional but recommended)`;\n }\n if (r.name === 'source' && r.meta?.source) {\n msg = `${icon} Source directory not found: ${r.meta.source}`;\n }\n if (r.name.startsWith('subdirs_')) {\n const dir = r.name.replace('subdirs_', '');\n msg = `${icon} ${dir}/ not found`;\n }\n console.log(color(msg));\n }\n }\n\n // Source detection (special formatting)\n console.log('');\n console.log(pc.gray('Source detection:'));\n const source = resolveSource();\n if ('error' in source) {\n console.log(pc.yellow(` ⚠ ${source.error}`));\n } else {\n console.log(pc.green(` ✓ Found source: ${source.path}`));\n console.log(pc.gray(` Type: ${source.type || 'unknown'}`));\n }\n\n // Summary\n const summary = computeSummary(results);\n console.log('');\n console.log(pc.cyan('─'.repeat(40)));\n\n if (summary.issues === 0 && summary.warnings === 0) {\n console.log(pc.bold(pc.green('\\n✓ All checks passed!\\n')));\n } else if (summary.issues === 0) {\n console.log(pc.yellow(`\\n⚠ ${summary.warnings} warning(s), no critical issues\\n`));\n } else {\n console.log(pc.red(`\\n✗ ${summary.issues} issue(s), ${summary.warnings} warning(s)\\n`));\n }\n\n // Suggestions\n if (summary.issues > 0 || summary.warnings > 0) {\n console.log(pc.cyan('Suggestions:'));\n\n const isProject = results.find(r => r.name === 'project')?.passed;\n const hasState = results.find(r => r.name === 'state')?.passed;\n\n if (!isProject) {\n console.log(pc.white(' • Run \"ak init .\" to initialize this directory'));\n }\n\n if (!hasState && isProject) {\n console.log(pc.white(' • State file is missing. Re-run \"ak init\" or create manually'));\n }\n\n if (state && state.source && !fs.existsSync(state.source)) {\n console.log(pc.white(' • Update source path: ak update --source <new-path>'));\n }\n\n console.log('');\n }\n}\n","import { exec } from 'child_process';\nimport pc from 'picocolors';\n\nconst HELP_URL = 'https://www.vividkit.dev/vi/guides/what-is-claudekit';\n\nexport async function helpCommand(options: Record<string, any>): Promise<void> {\n console.log(pc.cyan('\\n📚 Opening VividKit documentation...\\n'));\n console.log(pc.green(` ${HELP_URL}\\n`));\n const openCommand = process.platform === 'darwin' ? 'open' :\n process.platform === 'win32' ? 'start' : 'xdg-open';\n exec(`${openCommand} ${HELP_URL}`);\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport * as p from '@clack/prompts';\nimport { getGlobalInstallPath, TARGETS } from '../utils/paths.js';\nimport { loadState } from '../utils/state.js';\n\nconst PRESERVED_FILES = ['CLAUDE.md', 'settings.json', 'AGENTS.md'];\nconst AK_SUBDIRS = ['agents', 'skills', 'commands', 'workflows', 'hooks', 'router'];\n\ninterface UninstallResult {\n removed: string[];\n errors: Array<{ path: string; error: string }>;\n}\n\nexport async function uninstallCommand(options: Record<string, any>): Promise<void> {\n p.intro(pc.bgCyan(pc.black(' AK Uninstall ')));\n\n // Determine scope\n const targets: Array<{ type: string; dir: string }> = [];\n\n if (options.local || (!options.global && !options.local)) {\n targets.push({ type: 'local', dir: process.cwd() });\n }\n if (options.global) {\n targets.push({ type: 'global', dir: getGlobalInstallPath() });\n }\n\n let totalRemoved = 0;\n\n for (const target of targets) {\n const count = await uninstallFromDir(target.type, target.dir, options);\n totalRemoved += count;\n }\n\n if (totalRemoved === 0) {\n p.outro(pc.yellow('No installations found to remove.'));\n } else {\n p.outro(pc.green(`Successfully removed ${totalRemoved} item(s).`));\n }\n}\n\nasync function uninstallFromDir(\n type: string,\n dir: string,\n options: Record<string, any>\n): Promise<number> {\n const spinner = ora(`Scanning ${type} installation at ${pc.dim(dir)}`).start();\n\n // Load state\n const state = await loadState(dir);\n\n // Detect which target directories exist\n const existingTargets: Array<{ name: string; path: string }> = [];\n for (const [name, folder] of Object.entries(TARGETS)) {\n const targetPath = join(dir, folder);\n if (fs.existsSync(targetPath)) {\n existingTargets.push({ name, path: targetPath });\n }\n }\n\n // Check for .ak directory\n const akDir = join(dir, '.ak');\n const hasAkState = fs.existsSync(akDir);\n\n if (existingTargets.length === 0 && !hasAkState) {\n spinner.warn(pc.yellow(`No AK installation found in ${type}`));\n return 0;\n }\n\n spinner.succeed(pc.green(`Found AK installation in ${type}`));\n\n // Build removal list\n const removalList: string[] = [];\n\n // Add all AK-managed subdirectories inside target directories\n for (const target of existingTargets) {\n for (const subdir of AK_SUBDIRS) {\n const subdirPath = join(target.path, subdir);\n if (fs.existsSync(subdirPath)) {\n removalList.push(subdirPath);\n }\n }\n }\n\n // Add .ak state directory\n if (hasAkState) {\n removalList.push(akDir);\n }\n\n if (removalList.length === 0) {\n console.log(pc.yellow(` No files to remove from ${type}`));\n return 0;\n }\n\n // Display what will be removed\n console.log(pc.cyan(`\\n Items to remove from ${type}:`));\n for (const path of removalList) {\n const relativePath = path.replace(dir + '/', '');\n console.log(pc.dim(` • ${relativePath}`));\n }\n\n if (state) {\n console.log(pc.dim(`\\n Kit: ${state.kit}`));\n console.log(pc.dim(` Target: ${state.target}`));\n }\n\n console.log(pc.yellow(`\\n Preserved files: ${PRESERVED_FILES.join(', ')}`));\n\n // Dry run - just preview\n if (options.dryRun) {\n console.log(pc.yellow(`\\n [DRY RUN] Would remove ${removalList.length} item(s)`));\n return 0;\n }\n\n // Confirmation prompt (unless --yes)\n if (!options.yes) {\n const confirmed = await p.confirm({\n message: `Remove ${removalList.length} item(s) from ${type}?`,\n initialValue: false\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n console.log(pc.dim(' Cancelled.'));\n return 0;\n }\n }\n\n // Perform removal\n const result = await removeItems(removalList, dir);\n\n // Display results\n if (result.removed.length > 0) {\n console.log(pc.green(`\\n ✓ Removed ${result.removed.length} item(s) from ${type}`));\n for (const path of result.removed) {\n const relativePath = path.replace(dir + '/', '');\n console.log(pc.dim(` • ${relativePath}`));\n }\n }\n\n if (result.errors.length > 0) {\n console.log(pc.red(`\\n ✗ Failed to remove ${result.errors.length} item(s):`));\n for (const error of result.errors) {\n const relativePath = error.path.replace(dir + '/', '');\n console.log(pc.red(` • ${relativePath}: ${error.error}`));\n }\n }\n\n return result.removed.length;\n}\n\nasync function removeItems(paths: string[], baseDir: string): Promise<UninstallResult> {\n const result: UninstallResult = {\n removed: [],\n errors: []\n };\n\n for (const path of paths) {\n // Security check: ensure path is within baseDir\n if (!path.startsWith(baseDir)) {\n result.errors.push({\n path,\n error: 'Path outside base directory (security check failed)'\n });\n continue;\n }\n\n // Security check: ensure path contains expected directories\n const isExpectedPath =\n path.includes('/.ak') ||\n AK_SUBDIRS.some(subdir => path.includes(`/${subdir}`));\n\n if (!isExpectedPath) {\n result.errors.push({\n path,\n error: 'Path is not an expected AK directory (security check failed)'\n });\n continue;\n }\n\n try {\n await fs.remove(path);\n result.removed.push(path);\n } catch (error) {\n result.errors.push({\n path,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n }\n\n return result;\n}\n","import { execSync } from 'child_process';\n\nconst REMOTE_REPO_URL = 'https://github.com/Thanhnguyen6702/CK-Internal.git';\n\nexport { REMOTE_REPO_URL };\n\nexport function fetchRemoteTags(repoUrl: string = REMOTE_REPO_URL): string[] {\n const output = execSync(`git ls-remote --tags \"${repoUrl}\"`, {\n encoding: 'utf-8',\n timeout: 15000,\n stdio: ['pipe', 'pipe', 'pipe']\n });\n\n return output.split('\\n')\n .filter(line => line.includes('refs/tags/'))\n .map(line => {\n const tag = line.split('refs/tags/')[1]?.replace('^{}', '');\n return tag;\n })\n .filter(Boolean)\n .filter((v, i, a) => a.indexOf(v) === i); // dedupe\n}\n\nexport function sortSemver(tags: string[]): string[] {\n return [...tags].sort((a, b) => {\n const pa = a.replace(/^v/, '').split(/[.-]/);\n const pb = b.replace(/^v/, '').split(/[.-]/);\n for (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n const na = parseInt(pa[i]) || 0;\n const nb = parseInt(pb[i]) || 0;\n if (na !== nb) return nb - na; // descending\n }\n return 0;\n });\n}\n","import pc from 'picocolors';\nimport ora from 'ora';\nimport { fetchRemoteTags, sortSemver } from '../utils/git-tags.js';\n\nexport async function versionsCommand(options: Record<string, any>): Promise<void> {\n const spinner = ora('Fetching available versions...').start();\n\n try {\n const tags = fetchRemoteTags();\n spinner.stop();\n\n if (!tags || tags.length === 0) {\n console.log(pc.yellow('\\nNo versions found.'));\n return;\n }\n\n // Filter pre-releases unless --all\n let filtered = tags;\n if (!options.all) {\n filtered = tags.filter(tag => !tag.includes('-'));\n }\n\n // Sort by semver\n const sorted = sortSemver(filtered);\n\n // Apply limit\n const limit = options.limit ? parseInt(options.limit, 10) : 10;\n const limited = sorted.slice(0, limit);\n\n console.log(pc.bold('\\nAvailable versions:\\n'));\n\n limited.forEach((tag, index) => {\n const isLatest = index === 0;\n const marker = isLatest ? pc.green(' (latest)') : '';\n console.log(` ${pc.cyan(tag)}${marker}`);\n });\n\n if (sorted.length > limited.length) {\n console.log(pc.gray(`\\n ... and ${sorted.length - limited.length} more (use --limit or --all)`));\n }\n\n console.log('');\n } catch (err: any) {\n spinner.stop();\n console.log(pc.red('\\nFailed to fetch versions.'));\n console.log(pc.gray(err.message));\n\n if (err.message.includes('timeout')) {\n console.log(pc.gray('Network timeout. Check your connection.'));\n }\n }\n}\n","import { execSync } from 'child_process';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { CLI_ROOT } from '../utils/paths.js';\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\n\nfunction getCurrentVersion(): string {\n try {\n const pkg = JSON.parse(readFileSync(join(CLI_ROOT, 'package.json'), 'utf-8'));\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n}\n\nfunction getLatestVersion(): string {\n const output = execSync('npm view apero-kit-cli version', {\n encoding: 'utf-8',\n timeout: 15000,\n stdio: ['pipe', 'pipe', 'pipe']\n });\n return output.trim();\n}\n\nexport async function updateCliCommand(options: Record<string, any>): Promise<void> {\n const current = getCurrentVersion();\n const spinner = ora('Checking for updates...').start();\n\n try {\n const latest = options.version || getLatestVersion();\n spinner.stop();\n\n console.log(`\\n Current: ${pc.gray(current)}`);\n console.log(` Latest: ${pc.green(latest)}`);\n\n if (current === latest && !options.version && !options.force) {\n console.log(pc.green('\\nAlready up to date!'));\n console.log(pc.gray('Use --force to reinstall anyway.'));\n return;\n }\n\n if (options.check) {\n console.log(pc.yellow('\\nUpdate available! Run \"ak update-cli\" to install.'));\n return;\n }\n\n // Install\n const target = options.version || 'latest';\n const installSpinner = ora(`Installing apero-kit-cli@${target}...`).start();\n\n execSync(`npm install -g apero-kit-cli@${target}`, {\n encoding: 'utf-8',\n timeout: 60000,\n stdio: ['pipe', 'pipe', 'pipe']\n });\n\n installSpinner.succeed(pc.green(`Updated to ${target}!`));\n } catch (err: any) {\n spinner.stop();\n console.log(pc.red('\\nUpdate failed.'));\n console.log(pc.gray(err.message));\n console.log(pc.gray('\\nTry manually: npm install -g apero-kit-cli'));\n }\n}\n","import pc from 'picocolors';\nimport fs from 'fs-extra';\nimport { join } from 'path';\nimport * as p from '@clack/prompts';\nimport { resolveSource } from '../utils/paths.js';\nimport { listAvailable } from '../utils/copy.js';\n\n// Map agent types to their skill directories\nconst AGENT_SKILL_PATHS: Record<string, string> = {\n claude: '.claude/skills',\n cursor: '.cursor/rules',\n codex: '.codex/skills',\n};\n\nexport async function skillsCommand(options: Record<string, any>): Promise<void> {\n const { name, agent, list, installed, uninstall, yes } = options;\n\n // List mode - show available skills with installation status\n if (list || (!name && !installed)) {\n await listSkillsWithStatus();\n return;\n }\n\n // Show installed skills only\n if (installed && !name) {\n await showInstalledSkills();\n return;\n }\n\n // Install or uninstall mode requires skill name\n if (!name) {\n console.log(pc.red('Error: --name <skill> is required'));\n console.log(pc.gray('Usage: ak skills --name <skill> [--agent <agents>] [--uninstall]'));\n process.exit(1);\n }\n\n // Parse target agents (default: claude)\n const targetAgents = parseAgents(agent);\n\n // Uninstall mode\n if (uninstall) {\n await uninstallSkill(name, targetAgents, yes);\n return;\n }\n\n // Install mode\n await installSkill(name, targetAgents, yes);\n}\n\n/**\n * List all available skills with installation status per agent\n */\nasync function listSkillsWithStatus(): Promise<void> {\n const source = resolveSource();\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n process.exit(1);\n }\n\n const skills = listAvailable('skills', source.claudeDir).filter(s => s.isDir);\n\n if (skills.length === 0) {\n console.log(pc.yellow('No skills found in source'));\n return;\n }\n\n console.log(pc.bold(pc.cyan(`\\nAvailable Skills (${skills.length}):`)));\n console.log(pc.gray(`Source: ${source.path}\\n`));\n\n // Header\n const header = ' Skill'.padEnd(40) + 'Claude Cursor Codex';\n console.log(pc.bold(header));\n console.log(pc.gray(' ' + '─'.repeat(58)));\n\n // List each skill with installation status\n for (const skill of skills) {\n const claudeInstalled = isSkillInstalled(skill.name, 'claude');\n const cursorInstalled = isSkillInstalled(skill.name, 'cursor');\n const codexInstalled = isSkillInstalled(skill.name, 'codex');\n\n const statusLine =\n ' ' +\n skill.name.padEnd(38) +\n (claudeInstalled ? pc.green('✓') : pc.gray('-')).padEnd(8) +\n (cursorInstalled ? pc.green('✓') : pc.gray('-')).padEnd(8) +\n (codexInstalled ? pc.green('✓') : pc.gray('-'));\n\n console.log(statusLine);\n }\n\n console.log('');\n console.log(pc.gray('Install: ak skills --name <skill> --agent <claude|cursor|codex>'));\n console.log('');\n}\n\n/**\n * Show only installed skills\n */\nasync function showInstalledSkills(): Promise<void> {\n console.log(pc.bold(pc.cyan('\\nInstalled Skills:\\n')));\n\n let hasAny = false;\n\n for (const [agentType, skillPath] of Object.entries(AGENT_SKILL_PATHS)) {\n const installed = getInstalledSkills(agentType);\n if (installed.length > 0) {\n hasAny = true;\n console.log(pc.bold(` ${agentType}:`));\n for (const skill of installed) {\n console.log(pc.white(` • ${skill}`));\n }\n console.log('');\n }\n }\n\n if (!hasAny) {\n console.log(pc.gray(' No skills installed'));\n console.log('');\n }\n}\n\n/**\n * Install a skill to target agents\n */\nasync function installSkill(skillName: string, agents: string[], skipConfirm: boolean): Promise<void> {\n const source = resolveSource();\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n process.exit(1);\n }\n\n // Find skill in source\n const skillPath = join(source.claudeDir, 'skills', skillName);\n if (!fs.existsSync(skillPath)) {\n console.log(pc.red(`Error: Skill \"${skillName}\" not found in source`));\n console.log(pc.gray(`Available skills: ak skills --list`));\n process.exit(1);\n }\n\n // Confirm installation unless --yes\n if (!skipConfirm) {\n const confirm = await p.confirm({\n message: `Install skill \"${skillName}\" to ${agents.join(', ')}?`,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n console.log(pc.gray('Cancelled'));\n process.exit(0);\n }\n }\n\n // Install to each agent\n const results: Array<{ agent: string; success: boolean; error?: string }> = [];\n\n for (const agent of agents) {\n try {\n const targetPath = join(process.cwd(), AGENT_SKILL_PATHS[agent], skillName);\n\n // Ensure target directory exists\n await fs.ensureDir(join(process.cwd(), AGENT_SKILL_PATHS[agent]));\n\n // Copy skill directory\n await fs.copy(skillPath, targetPath, { overwrite: true });\n\n results.push({ agent, success: true });\n } catch (err: any) {\n results.push({ agent, success: false, error: err.message });\n }\n }\n\n // Report results\n console.log('');\n const allSuccess = results.every(r => r.success);\n\n if (allSuccess) {\n console.log(pc.green(`✓ Installed \"${skillName}\" to ${agents.join(', ')}`));\n } else {\n for (const result of results) {\n if (result.success) {\n console.log(pc.green(`✓ ${result.agent}: installed`));\n } else {\n console.log(pc.red(`✗ ${result.agent}: ${result.error}`));\n }\n }\n }\n console.log('');\n}\n\n/**\n * Uninstall a skill from target agents\n */\nasync function uninstallSkill(skillName: string, agents: string[], skipConfirm: boolean): Promise<void> {\n // Check if skill is installed in any target agent\n const installedIn = agents.filter(agent => isSkillInstalled(skillName, agent));\n\n if (installedIn.length === 0) {\n console.log(pc.yellow(`Skill \"${skillName}\" is not installed in ${agents.join(', ')}`));\n process.exit(0);\n }\n\n // Confirm removal unless --yes\n if (!skipConfirm) {\n const confirm = await p.confirm({\n message: `Uninstall skill \"${skillName}\" from ${installedIn.join(', ')}?`,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n console.log(pc.gray('Cancelled'));\n process.exit(0);\n }\n }\n\n // Remove from each agent\n const results: Array<{ agent: string; success: boolean; error?: string }> = [];\n\n for (const agent of installedIn) {\n try {\n const targetPath = join(process.cwd(), AGENT_SKILL_PATHS[agent], skillName);\n await fs.remove(targetPath);\n results.push({ agent, success: true });\n } catch (err: any) {\n results.push({ agent, success: false, error: err.message });\n }\n }\n\n // Report results\n console.log('');\n const allSuccess = results.every(r => r.success);\n\n if (allSuccess) {\n console.log(pc.green(`✓ Uninstalled \"${skillName}\" from ${installedIn.join(', ')}`));\n } else {\n for (const result of results) {\n if (result.success) {\n console.log(pc.green(`✓ ${result.agent}: uninstalled`));\n } else {\n console.log(pc.red(`✗ ${result.agent}: ${result.error}`));\n }\n }\n }\n console.log('');\n}\n\n/**\n * Parse agent flag into array (comma-separated, defaults to claude)\n */\nfunction parseAgents(agentFlag?: string): string[] {\n if (!agentFlag) {\n return ['claude'];\n }\n\n const agents = agentFlag.split(',').map(a => a.trim().toLowerCase());\n const valid = agents.filter(a => a in AGENT_SKILL_PATHS);\n\n if (valid.length === 0) {\n console.log(pc.red('Error: No valid agents specified'));\n console.log(pc.gray('Valid agents: claude, cursor, codex'));\n process.exit(1);\n }\n\n return valid;\n}\n\n/**\n * Check if skill is installed for an agent\n */\nfunction isSkillInstalled(skillName: string, agent: string): boolean {\n const skillPath = join(process.cwd(), AGENT_SKILL_PATHS[agent], skillName);\n return fs.existsSync(skillPath);\n}\n\n/**\n * Get list of installed skills for an agent\n */\nfunction getInstalledSkills(agent: string): string[] {\n const skillsDir = join(process.cwd(), AGENT_SKILL_PATHS[agent]);\n\n if (!fs.existsSync(skillsDir)) {\n return [];\n }\n\n try {\n const items = fs.readdirSync(skillsDir);\n return items.filter(item => {\n const itemPath = join(skillsDir, item);\n return fs.statSync(itemPath).isDirectory();\n });\n } catch {\n return [];\n }\n}\n","#!/usr/bin/env node\nimport cac from 'cac';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\nimport pc from 'picocolors';\nimport { registerCommands } from './cli/command-registry.js';\nimport { getCachedVersionNoFetch, isNewerVersion } from './utils/version-check.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction getVersion(): string {\n try {\n const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n}\n\nconst cli = cac('ak');\nregisterCommands(cli);\ncli.help();\ncli.version(getVersion());\ncli.parse();\n\n// Non-blocking update check (cache-only, no network)\ntry {\n const version = getVersion();\n const cachedLatest = getCachedVersionNoFetch();\n if (cachedLatest && isNewerVersion(version, cachedLatest)) {\n console.log(pc.yellow(`\\n Update available: v${version} → v${cachedLatest}`));\n console.log(pc.gray(' Run \"ak update-cli\" to update\\n'));\n }\n} catch { /* silent */ }\n","import type { CAC } from 'cac';\n\nexport function registerCommands(cli: CAC): void {\n // init\n cli\n .command('init [project-name]', 'Initialize a new project with an agent kit')\n .option('-k, --kit <type>', 'Kit type (engineer, researcher, designer, minimal, full, custom)')\n .option('-t, --target <target>', 'Target CLI (claude, gemini or claude,gemini for both)')\n .option('-s, --source <path>', 'Custom source path for templates')\n .option('-f, --force', 'Overwrite existing directory')\n .option('-g, --global', 'Install to global ~/.claude/ directory')\n .option('--fresh', 'Remove existing installation before re-init')\n .option('-y, --yes', 'Skip prompts, use defaults')\n .option('--exclude <patterns>', 'Exclude components (comma-separated)')\n .option('--only <patterns>', 'Include only matching components (comma-separated)')\n .action(async (projectName: string | undefined, options: Record<string, any>) => {\n const { initCommand } = await import('../commands/init.js');\n await initCommand(projectName, options);\n });\n\n // add\n cli\n .command('add <item>', 'Add agent, skill, or command (e.g., ak add skill:databases)')\n .option('-s, --source <path>', 'Custom source path')\n .option('-p, --path <path>', 'Target project path')\n .action(async (item: string, options: Record<string, any>) => {\n const { addCommand } = await import('../commands/add.js');\n await addCommand(item, options);\n });\n\n // list\n cli\n .command('list [type]', 'List available kits, agents, skills, or commands')\n .option('-s, --source <path>', 'Custom source path')\n .action(async (type: string | undefined, options: Record<string, any>) => {\n const { listCommand } = await import('../commands/list.js');\n await listCommand(type, options);\n });\n\n // update (template sync)\n cli\n .command('update', 'Update/sync from source templates')\n .option('-s, --source <path>', 'Source path to sync from')\n .option('--agents', 'Update only agents')\n .option('--skills', 'Update only skills')\n .option('--commands', 'Update only commands')\n .option('--all', 'Update everything')\n .option('-n, --dry-run', 'Show what would be updated without making changes')\n .option('-f, --force', 'Force update without confirmation')\n .action(async (options: Record<string, any>) => {\n const { updateCommand } = await import('../commands/update.js');\n await updateCommand(options);\n });\n\n // status\n cli\n .command('status', 'Show project status and file changes')\n .option('-v, --verbose', 'Show all files')\n .action(async (options: Record<string, any>) => {\n const { statusCommand } = await import('../commands/status.js');\n await statusCommand(options);\n });\n\n // doctor\n cli\n .command('doctor', 'Check project health and diagnose issues')\n .option('--fix', 'Auto-fix common issues')\n .option('--report', 'Generate diagnostic report')\n .option('--json', 'Output JSON format')\n .option('--check-only', 'CI mode: exit 1 on failures')\n .action(async (options: Record<string, any>) => {\n const { doctorCommand } = await import('../commands/doctor.js');\n await doctorCommand(options);\n });\n\n // kits alias\n cli\n .command('kits', 'List all available kits')\n .action(async () => {\n const { listCommand } = await import('../commands/list.js');\n await listCommand('kits', {});\n });\n\n // help - open docs\n cli\n .command('help', 'Open interactive help documentation in browser')\n .option('-s, --source <path>', 'Custom source path')\n .action(async (options: Record<string, any>) => {\n const { helpCommand } = await import('../commands/help.js');\n await helpCommand(options);\n });\n\n // uninstall\n cli\n .command('uninstall', 'Remove ClaudeKit installations')\n .option('-y, --yes', 'Skip confirmation')\n .option('-l, --local', 'Uninstall only local installation')\n .option('-g, --global', 'Uninstall only global installation')\n .option('--dry-run', 'Preview what would be removed')\n .action(async (options: Record<string, any>) => {\n const { uninstallCommand } = await import('../commands/uninstall.js');\n await uninstallCommand(options);\n });\n\n // versions\n cli\n .command('versions', 'List available versions')\n .option('--kit <kit>', 'Filter by kit')\n .option('--limit <limit>', 'Number of versions to show')\n .option('--all', 'Show all including prereleases')\n .action(async (options: Record<string, any>) => {\n const { versionsCommand } = await import('../commands/versions.js');\n await versionsCommand(options);\n });\n\n // update-cli\n cli\n .command('update-cli', 'Update the CLI itself to latest version')\n .option('--check', 'Check for updates without installing')\n .option('--version <version>', 'Update to specific version')\n .option('-f, --force', 'Force reinstall even if already up to date')\n .action(async (options: Record<string, any>) => {\n const { updateCliCommand } = await import('../commands/update-cli.js');\n await updateCliCommand(options);\n });\n\n // skills\n cli\n .command('skills', 'Manage skills across coding agents')\n .option('-n, --name <skill>', 'Skill name')\n .option('-a, --agent <agents>', 'Target agents')\n .option('-l, --list', 'List available skills')\n .option('--installed', 'Show installed skills')\n .option('-u, --uninstall', 'Uninstall skill')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (options: Record<string, any>) => {\n const { skillsCommand } = await import('../commands/skills.js');\n await skillsCommand(options);\n });\n}\n","import { join } from 'path';\nimport { homedir } from 'os';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { execSync } from 'child_process';\n\nconst CACHE_DIR = join(homedir(), '.apero-kit');\nconst CACHE_FILE = join(CACHE_DIR, 'version-check.json');\nconst CACHE_TTL = 7 * 24 * 60 * 60 * 1000; // 7 days\n\ninterface VersionCache {\n version: string;\n timestamp: number;\n}\n\n/**\n * Get latest version from npm, with 7-day cache\n */\nexport function getCachedLatestVersion(): string | null {\n // Try cache first\n try {\n if (existsSync(CACHE_FILE)) {\n const cache: VersionCache = JSON.parse(readFileSync(CACHE_FILE, 'utf-8'));\n if (Date.now() - cache.timestamp < CACHE_TTL) {\n return cache.version;\n }\n }\n } catch { /* ignore corrupt cache */ }\n\n // Fetch fresh from npm\n try {\n const version = execSync('npm view apero-kit-cli version', {\n encoding: 'utf-8',\n timeout: 5000,\n stdio: ['pipe', 'pipe', 'pipe']\n }).trim();\n\n // Save to cache\n if (!existsSync(CACHE_DIR)) mkdirSync(CACHE_DIR, { recursive: true });\n writeFileSync(CACHE_FILE, JSON.stringify({ version, timestamp: Date.now() } satisfies VersionCache));\n\n return version;\n } catch {\n return null; // offline or error\n }\n}\n\n/**\n * Read cache only (no network). For non-blocking startup check.\n */\nexport function getCachedVersionNoFetch(): string | null {\n try {\n if (existsSync(CACHE_FILE)) {\n const cache: VersionCache = JSON.parse(readFileSync(CACHE_FILE, 'utf-8'));\n return cache.version;\n }\n } catch { /* ignore */ }\n return null;\n}\n\n/**\n * Compare semver: returns true if latest > current\n */\nexport function isNewerVersion(current: string, latest: string): boolean {\n const c = current.replace(/^v/, '').split('.').map(Number);\n const l = latest.replace(/^v/, '').split('.').map(Number);\n for (let i = 0; i < 3; i++) {\n if ((l[i] || 0) > (c[i] || 0)) return true;\n if ((l[i] || 0) < (c[i] || 0)) return false;\n }\n return false;\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAaa,MAqHA,QAEA;AApIb;AAAA;AAAA;AAaO,IAAM,OAA4B;AAAA,MACvC,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,QACb,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UAAQ;AAAA,UAAiB;AAAA,UAAa;AAAA,UACtC;AAAA,UAAQ;AAAA,UAAa;AAAA,UACrB;AAAA,UAAO;AAAA,UAAY;AAAA,UAAa;AAAA,UAAY;AAAA,UAC5C;AAAA,UAAQ;AAAA,UACR;AAAA,UAAU;AAAA,UACV;AAAA,UAAS;AAAA,UAAS;AAAA,QACpB;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,WAAW,CAAC,uBAAuB,YAAY;AAAA,QAC/C,eAAe;AAAA,QACf,cAAc;AAAA,MAChB;AAAA,MAEA,YAAY;AAAA,QACV,MAAM;AAAA,QACN,aAAa;AAAA,QACb,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UAAS;AAAA,UACT;AAAA,UAAe;AAAA,UACf;AAAA,UAAQ;AAAA,UAAa;AAAA,UAAe;AAAA,UACpC;AAAA,UAAQ;AAAA,UAAO;AAAA,QACjB;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,WAAW,CAAC;AAAA,QACZ,eAAe;AAAA,QACf,cAAc;AAAA,MAChB;AAAA,MAEA,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,QACb,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UAAQ;AAAA,UAAO;AAAA,UAAU;AAAA,UAAW;AAAA,QACtC;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,WAAW,CAAC;AAAA,QACZ,eAAe;AAAA,QACf,cAAc;AAAA,MAChB;AAAA,MAEA,SAAS;AAAA,QACP,MAAM;AAAA,QACN,aAAa;AAAA,QACb,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ,CAAC,WAAW,UAAU;AAAA,QAC9B,UAAU,CAAC,QAAQ,OAAO,MAAM;AAAA,QAChC,QAAQ,CAAC,YAAY,WAAW;AAAA,QAChC,WAAW,CAAC;AAAA,QACZ,eAAe;AAAA,QACf,cAAc;AAAA,MAChB;AAAA,MAEA,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,aAAa;AAAA,QACb,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,eAAe;AAAA,QACf,cAAc;AAAA,MAChB;AAAA,IACF;AAEO,IAAM,SAAS,CAAC,SAA6B,KAAK,IAAI,KAAK;AAE3D,IAAM,aAAa,MAAa,OAAO,OAAO,IAAI;AAAA;AAAA;;;ACpIzD,SAAS,qBAAqB;AAC9B,SAAS,SAAS,MAAM,eAAe;AACvC,SAAS,kBAA4B;AACrC,SAAS,eAAe;AAqCjB,SAAS,uBAA0C;AACxD,MAAI,WAAW,aAAa,GAAG;AAC7B,UAAM,WAAW,KAAK,eAAe,WAAW;AAChD,WAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW;AAAA,MACX,UAAU,WAAW,QAAQ,IAAI,WAAW;AAAA,IAC9C;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,uBAA+B;AAC7C,MAAI,QAAQ,aAAa,SAAS;AAChC,WAAO,KAAK,QAAQ,IAAI,WAAW,KAAK,QAAQ,GAAG,WAAW,SAAS,GAAG,QAAQ;AAAA,EACpF;AACA,SAAO,KAAK,QAAQ,GAAG,SAAS;AAClC;AAKO,SAAS,YAAY,MAAc,QAAQ,IAAI,GAAY;AAChE,QAAM,WAAW,KAAK,KAAK,OAAO,YAAY;AAC9C,QAAM,YAAY,KAAK,KAAK,SAAS;AACrC,QAAM,YAAY,KAAK,KAAK,SAAS;AACrC,QAAM,cAAc,KAAK,KAAK,WAAW;AACzC,QAAM,WAAW,KAAK,KAAK,QAAQ;AAEnC,SAAO,WAAW,QAAQ,KACnB,WAAW,SAAS,KACpB,WAAW,SAAS,KACpB,WAAW,WAAW,KACtB,WAAW,QAAQ;AAC5B;AAKO,SAAS,aAAa,YAAoB,SAAiB,UAAkB;AAClF,QAAM,SAAS,QAAQ,MAAM,KAAK,QAAQ;AAC1C,SAAO,KAAK,YAAY,MAAM;AAChC;AAMO,SAAS,cAAc,YAA+C;AAE3E,MAAI,YAAY;AACd,UAAM,WAAW,QAAQ,UAAU;AACnC,QAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,aAAO,EAAE,OAAO,0BAA0B,UAAU,GAAG;AAAA,IACzD;AAGA,UAAM,YAAY,KAAK,UAAU,SAAS;AAC1C,UAAM,cAAc,KAAK,UAAU,WAAW;AAE9C,QAAI,WAAW,SAAS,GAAG;AACzB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA,UAAU,WAAW,KAAK,UAAU,WAAW,CAAC,IAAI,KAAK,UAAU,WAAW,IAAI;AAAA,MACpF;AAAA,IACF;AAEA,QAAI,WAAW,WAAW,GAAG;AAC3B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW;AAAA,QACX,UAAU,WAAW,KAAK,UAAU,WAAW,CAAC,IAAI,KAAK,UAAU,WAAW,IAAI;AAAA,MACpF;AAAA,IACF;AAGA,QAAI,WAAW,KAAK,UAAU,QAAQ,CAAC,KAAK,WAAW,KAAK,UAAU,UAAU,CAAC,GAAG;AAClF,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW;AAAA,QACX,UAAU,WAAW,KAAK,UAAU,WAAW,CAAC,IAAI,KAAK,UAAU,WAAW,IAAI;AAAA,MACpF;AAAA,IACF;AAEA,WAAO,EAAE,OAAO,0BAA0B,UAAU,GAAG;AAAA,EACzD;AAGA,QAAM,WAAW,qBAAqB;AACtC,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,OAAO;AAAA,EACT;AACF;AAhJA,IAKM,YACA,WAKO,UAGA,eAEA;AAhBb;AAAA;AAAA;AAKA,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,QAAQ,UAAU;AAK7B,IAAM,WAAW,UAAU,SAAS,MAAM,IAC7C,QAAQ,WAAW,IAAI,IACvB,QAAQ,WAAW,OAAO;AACvB,IAAM,gBAAgB,KAAK,UAAU,WAAW;AAEhD,IAAM,UAAkC;AAAA,MAC7C,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA;AAAA;;;ACrBA,OAAO,QAAQ;AACf,SAAS,QAAAA,OAAgB,WAAAC,gBAAe;AAOxC,SAAS,iBAAiB,SAA8E;AACtG,QAAM,mBAAmB,QAAQ,MAAM,mCAAmC;AAE1E,MAAI,CAAC,kBAAkB;AACrB,WAAO,EAAE,aAAa,IAAI,cAAc,IAAI,MAAM,QAAQ;AAAA,EAC5D;AAEA,QAAM,cAAc,iBAAiB,CAAC;AACtC,QAAM,OAAO,iBAAiB,CAAC,EAAE,KAAK;AAEtC,QAAM,YAAY,YAAY,MAAM,qBAAqB;AACzD,QAAM,WAAW,YAAY,MAAM,uBAAuB;AAE1D,SAAO;AAAA,IACL,aAAa,YAAY,UAAU,CAAC,EAAE,KAAK,IAAI;AAAA,IAC/C,cAAc,WAAW,SAAS,CAAC,EAAE,KAAK,IAAI;AAAA,IAC9C;AAAA,EACF;AACF;AAKA,SAAS,iBAAiB,KAAqB;AAE7C,SAAO,IAAI,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AACvD;AAKO,SAAS,gBAAgB,WAA2B;AACzD,QAAM,EAAE,aAAa,KAAK,IAAI,iBAAiB,SAAS;AAGxD,QAAM,SAAS,KAAK,QAAQ,gBAAgB,UAAU;AAEtD,QAAM,QAAkB,CAAC;AAEzB,MAAI,aAAa;AACf,UAAM,KAAK,kBAAkB,iBAAiB,WAAW,CAAC,GAAG;AAAA,EAC/D;AAGA,QAAM,KAAK;AAAA,EAAiB,MAAM;AAAA,IAAO;AAEzC,SAAO,MAAM,KAAK,IAAI;AACxB;AAuBA,eAAsB,UACpB,OACA,MACA,WACA,SACA,YAAqB,OACA;AACrB,QAAM,UAAUD,MAAK,WAAW,IAAI;AACpC,QAAM,cAAcA,MAAK,SAAS,IAAI;AAEtC,MAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,WAAO,EAAE,QAAQ,CAAC,GAAG,SAAS,OAAO,QAAQ,CAAC,EAAE;AAAA,EAClD;AAEA,QAAM,GAAG,UAAU,WAAW;AAE9B,QAAM,SAAmB,CAAC;AAC1B,QAAM,UAAoB,CAAC;AAC3B,QAAM,SAAiD,CAAC;AAExD,aAAW,QAAQ,OAAO;AACxB,QAAI;AAEF,YAAM,WAAWA,MAAK,SAAS,IAAI;AACnC,YAAM,aAAa,WAAW;AAE9B,UAAI;AACJ,UAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,kBAAU;AAAA,MACZ,WAAW,GAAG,WAAW,UAAU,GAAG;AACpC,kBAAU;AAAA,MACZ,OAAO;AACL,gBAAQ,KAAK,IAAI;AACjB;AAAA,MACF;AAGA,YAAM,OAAO,GAAG,SAAS,OAAO;AAChC,UAAI,KAAK,YAAY,GAAG;AACtB,cAAM,GAAG,KAAK,SAASA,MAAK,aAAa,IAAI,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;AAAA,MAC3E,OAAO;AAEL,cAAM,WAAW,QAAQ,SAAS,KAAK,IACnCA,MAAK,aAAa,OAAO,KAAK,IAC9BA,MAAK,aAAa,IAAI;AAC1B,cAAM,GAAG,UAAUA,MAAK,aAAa,KAAK,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;AAC5E,cAAM,GAAG,KAAK,SAAS,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;AAAA,MAC5D;AAEA,aAAO,KAAK,IAAI;AAAA,IAClB,SAAS,KAAU;AACjB,aAAO,KAAK,EAAE,MAAM,OAAO,IAAI,QAAQ,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,SAAS,OAAO;AACnC;AAMA,eAAsB,cACpB,MACA,WACA,SACA,YAAqB,OACM;AAC3B,QAAM,UAAUA,MAAK,WAAW,IAAI;AACpC,QAAM,cAAcA,MAAK,SAAS,IAAI;AAEtC,MAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,WAAO,EAAE,SAAS,OAAO,OAAO,GAAG,IAAI,uBAAuB;AAAA,EAChE;AAEA,MAAI;AACF,UAAM,GAAG,KAAK,SAAS,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC;AAC7D,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB,SAAS,KAAU;AACjB,WAAO,EAAE,SAAS,OAAO,OAAO,IAAI,QAAQ;AAAA,EAC9C;AACF;AAMA,eAAsB,WACpB,WACA,SACA,YAAqB,OACM;AAC3B,QAAM,YAAYA,MAAK,WAAW,QAAQ;AAE1C,MAAI,CAAC,GAAG,WAAW,SAAS,GAAG;AAC7B,WAAO,EAAE,SAAS,OAAO,OAAO,6BAA6B;AAAA,EAC/D;AAEA,MAAI;AACF,UAAM,GAAG,KAAK,WAAWA,MAAK,SAAS,QAAQ,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;AAC3E,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB,SAAS,KAAU;AACjB,WAAO,EAAE,SAAS,OAAO,OAAO,IAAI,QAAQ;AAAA,EAC9C;AACF;AAMA,eAAsB,UACpB,WACA,SACA,YAAqB,OACM;AAC3B,QAAM,WAAWA,MAAK,WAAW,OAAO;AAExC,MAAI,CAAC,GAAG,WAAW,QAAQ,GAAG;AAC5B,WAAO,EAAE,SAAS,OAAO,OAAO,4BAA4B;AAAA,EAC9D;AAEA,MAAI;AACF,UAAM,GAAG,KAAK,UAAUA,MAAK,SAAS,OAAO,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;AACzE,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB,SAAS,KAAU;AACjB,WAAO,EAAE,SAAS,OAAO,OAAO,IAAI,QAAQ;AAAA,EAC9C;AACF;AAoBA,eAAsB,cACpB,WACA,SACA,YAAqB,OACF;AACnB,QAAM,YAAY,CAAC,aAAa,iBAAiB,gBAAgB,kBAAkB,kBAAkB,eAAe;AACpH,QAAM,SAAmB,CAAC;AAE1B,aAAW,QAAQ,WAAW;AAC5B,UAAM,UAAUA,MAAK,WAAW,IAAI;AACpC,UAAM,WAAWA,MAAK,SAAS,IAAI;AAGnC,QAAI,aAAa,GAAG,WAAW,QAAQ,GAAG;AACxC;AAAA,IACF;AAEA,QAAI,GAAG,WAAW,OAAO,GAAG;AAC1B,YAAM,GAAG,KAAK,SAAS,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;AAC1D,aAAO,KAAK,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AACT;AAMA,eAAsB,cACpB,SACA,WACA,SACA,YAAqB,OACM;AAC3B,QAAM,UAAUA,MAAK,WAAW,OAAO;AAEvC,MAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,WAAO,EAAE,SAAS,OAAO,OAAO,GAAG,OAAO,uBAAuB;AAAA,EACnE;AAEA,MAAI;AACF,UAAM,GAAG,KAAK,SAASA,MAAK,SAAS,OAAO,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;AACxE,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB,SAAS,KAAU;AACjB,WAAO,EAAE,SAAS,OAAO,OAAO,IAAI,QAAQ;AAAA,EAC9C;AACF;AAMA,eAAsB,aACpB,cACA,YACA,YAAqB,OACH;AAClB,MAAI,CAAC,gBAAgB,CAAC,GAAG,WAAW,YAAY,GAAG;AACjD,WAAO;AAAA,EACT;AAEA,QAAM,WAAWA,MAAK,YAAY,WAAW;AAG7C,MAAI,aAAa,GAAG,WAAW,QAAQ,GAAG;AACxC,WAAO;AAAA,EACT;AAEA,QAAM,GAAG,KAAK,cAAc,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;AAC/D,SAAO;AACT;AAKO,SAAS,cAAc,MAAc,WAAoC;AAC9E,QAAM,UAAUA,MAAK,WAAW,IAAI;AAEpC,MAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,QAAQ,GAAG,YAAY,OAAO;AACpC,SAAO,MAAM,IAAI,UAAQ;AACvB,UAAM,WAAWA,MAAK,SAAS,IAAI;AACnC,UAAM,QAAQ,GAAG,SAAS,QAAQ,EAAE,YAAY;AAChD,UAAM,OAAO,KAAK,QAAQ,SAAS,EAAE;AACrC,WAAO,EAAE,MAAM,OAAO,MAAM,SAAS;AAAA,EACvC,CAAC;AACH;AAKA,eAAsB,sBACpB,OACA,WACA,SACA,YAAqB,OACA;AACrB,QAAM,UAAUA,MAAK,WAAW,UAAU;AAC1C,QAAM,cAAcA,MAAK,SAAS,UAAU;AAE5C,MAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,WAAO,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,EAC/C;AAEA,QAAM,GAAG,UAAU,WAAW;AAE9B,QAAM,SAAmB,CAAC;AAC1B,QAAM,UAAoB,CAAC;AAC3B,QAAM,SAAiD,CAAC;AAGxD,MAAI;AACJ,MAAI,UAAU,OAAO;AAEnB,UAAM,UAAU,GAAG,YAAY,OAAO;AACtC,eAAW,QAAQ,IAAI,OAAK,EAAE,QAAQ,SAAS,EAAE,CAAC;AAElD,eAAW,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC;AAAA,EAClC,OAAO;AACL,eAAW;AAAA,EACb;AAEA,aAAW,QAAQ,UAAU;AAC3B,QAAI;AACF,YAAM,YAAYA,MAAK,SAAS,OAAO,KAAK;AAC5C,YAAM,aAAaA,MAAK,SAAS,IAAI;AAGrC,UAAI,kBAAkB;AAGtB,UAAI,GAAG,WAAW,SAAS,KAAK,GAAG,SAAS,SAAS,EAAE,OAAO,GAAG;AAC/D,cAAM,WAAWA,MAAK,aAAa,OAAO,OAAO;AAEjD,YAAI,EAAE,aAAa,GAAG,WAAW,QAAQ,IAAI;AAC3C,gBAAM,GAAG,UAAUC,SAAQ,QAAQ,CAAC;AACpC,gBAAM,YAAY,GAAG,aAAa,WAAW,OAAO;AACpD,gBAAM,cAAc,gBAAgB,SAAS;AAC7C,gBAAM,GAAG,UAAU,UAAU,aAAa,OAAO;AACjD,4BAAkB;AAAA,QACpB;AAAA,MACF;AAGA,UAAI,GAAG,WAAW,UAAU,KAAK,GAAG,SAAS,UAAU,EAAE,YAAY,GAAG;AACtE,cAAM,uBAAuB,YAAYD,MAAK,aAAa,IAAI,GAAG,SAAS;AAC3E,0BAAkB;AAAA,MACpB;AAEA,UAAI,iBAAiB;AACnB,eAAO,KAAK,IAAI;AAAA,MAClB,OAAO;AACL,gBAAQ,KAAK,IAAI;AAAA,MACnB;AAAA,IACF,SAAS,KAAU;AACjB,aAAO,KAAK,EAAE,MAAM,OAAO,IAAI,QAAQ,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,SAAS,OAAO;AACnC;AAKA,eAAe,uBACb,QACA,SACA,YAAqB,OACN;AACf,QAAM,GAAG,UAAU,OAAO;AAE1B,QAAM,UAAU,GAAG,YAAY,MAAM;AAErC,aAAW,SAAS,SAAS;AAC3B,UAAM,UAAUA,MAAK,QAAQ,KAAK;AAClC,UAAM,OAAO,GAAG,SAAS,OAAO;AAEhC,QAAI,KAAK,YAAY,GAAG;AACtB,YAAM,uBAAuB,SAASA,MAAK,SAAS,KAAK,GAAG,SAAS;AAAA,IACvE,WAAW,MAAM,SAAS,KAAK,GAAG;AAChC,YAAM,WAAWA,MAAK,SAAS,MAAM,QAAQ,SAAS,OAAO,CAAC;AAE9D,UAAI,aAAa,GAAG,WAAW,QAAQ,GAAG;AACxC;AAAA,MACF;AAEA,YAAM,YAAY,GAAG,aAAa,SAAS,OAAO;AAClD,YAAM,cAAc,gBAAgB,SAAS;AAC7C,YAAM,GAAG,UAAU,UAAU,aAAa,OAAO;AAAA,IACnD,OAAO;AAEL,YAAM,WAAWA,MAAK,SAAS,KAAK;AACpC,UAAI,aAAa,GAAG,WAAW,QAAQ,GAAG;AACxC;AAAA,MACF;AACA,YAAM,GAAG,KAAK,SAAS,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;AAAA,IAC5D;AAAA,EACF;AACF;AA4BA,SAAS,sBAAsB,WAA2B;AAExD,QAAM,mBAAmB,UAAU,MAAM,mCAAmC;AAC5E,MAAI,CAAC,iBAAkB,QAAO;AAE9B,MAAI,cAAc,iBAAiB,CAAC;AACpC,QAAM,OAAO,iBAAiB,CAAC;AAG/B,QAAM,WAAmC;AAAA,IACvC,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,WAAW;AAAA;AAAA,EACb;AAGA,aAAW,CAAC,aAAa,WAAW,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACjE,UAAM,QAAQ,IAAI,OAAO,cAAc,WAAW,SAAS,GAAG;AAC9D,QAAI,aAAa;AACf,oBAAc,YAAY,QAAQ,OAAO,UAAU,WAAW,EAAE;AAAA,IAClE,OAAO;AAEL,oBAAc,YAAY,QAAQ,OAAO,EAAE;AAAA,IAC7C;AAAA,EACF;AAGA,MAAI,CAAC,YAAY,SAAS,OAAO,GAAG;AAClC,kBAAc,YAAY,KAAK,IAAI;AAAA,EACrC;AAEA,SAAO;AAAA,EAAQ,YAAY,KAAK,CAAC;AAAA;AAAA,EAAU,IAAI;AACjD;AAMA,eAAsB,oBACpB,OACA,WACA,SACA,YAAqB,OACA;AACrB,QAAM,UAAUA,MAAK,WAAW,QAAQ;AACxC,QAAM,cAAcA,MAAK,SAAS,QAAQ;AAE1C,MAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,WAAO,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,EAC/C;AAEA,QAAM,GAAG,UAAU,WAAW;AAE9B,QAAM,SAAmB,CAAC;AAC1B,QAAM,UAAoB,CAAC;AAC3B,QAAM,SAAiD,CAAC;AAGxD,MAAI;AACJ,MAAI,UAAU,OAAO;AACnB,UAAM,UAAU,GAAG,YAAY,OAAO;AACtC,gBAAY,QACT,OAAO,OAAK,EAAE,SAAS,KAAK,KAAK,MAAM,WAAW,EAClD,IAAI,OAAK,EAAE,QAAQ,SAAS,EAAE,CAAC;AAAA,EACpC,OAAO;AACL,gBAAY;AAAA,EACd;AAEA,aAAW,SAAS,WAAW;AAC7B,QAAI;AACF,YAAM,UAAUA,MAAK,SAAS,QAAQ,KAAK;AAE3C,UAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,gBAAQ,KAAK,KAAK;AAClB;AAAA,MACF;AAEA,YAAM,WAAWA,MAAK,aAAa,QAAQ,KAAK;AAGhD,UAAI,aAAa,GAAG,WAAW,QAAQ,GAAG;AACxC,gBAAQ,KAAK,KAAK;AAClB;AAAA,MACF;AAGA,YAAM,YAAY,GAAG,aAAa,SAAS,OAAO;AAClD,YAAM,mBAAmB,sBAAsB,SAAS;AACxD,YAAM,GAAG,UAAU,UAAU,kBAAkB,OAAO;AACtD,aAAO,KAAK,KAAK;AAAA,IACnB,SAAS,KAAU;AACjB,aAAO,KAAK,EAAE,MAAM,OAAO,OAAO,IAAI,QAAQ,CAAC;AAAA,IACjD;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,SAAS,OAAO;AACnC;AAMA,eAAsB,oBACpB,OACA,WACA,SACA,YAAqB,OACA;AACrB,QAAM,UAAUA,MAAK,WAAW,QAAQ;AACxC,QAAM,cAAcA,MAAK,SAAS,QAAQ;AAE1C,MAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,WAAO,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,EAC/C;AAEA,QAAM,GAAG,UAAU,WAAW;AAE9B,QAAM,SAAmB,CAAC;AAC1B,QAAM,UAAoB,CAAC;AAC3B,QAAM,SAAiD,CAAC;AAGxD,MAAI;AACJ,MAAI,UAAU,OAAO;AACnB,UAAM,UAAU,GAAG,YAAY,OAAO;AACtC,gBAAY,QAAQ,OAAO,OAAK;AAC9B,YAAM,WAAWA,MAAK,SAAS,CAAC;AAChC,aAAO,GAAG,SAAS,QAAQ,EAAE,YAAY,KAAK,GAAG,WAAWA,MAAK,UAAU,UAAU,CAAC;AAAA,IACxF,CAAC;AAAA,EACH,OAAO;AACL,gBAAY;AAAA,EACd;AAEA,aAAW,SAAS,WAAW;AAC7B,QAAI;AACF,YAAM,UAAUA,MAAK,SAAS,KAAK;AAGnC,UAAI,CAAC,GAAG,WAAW,OAAO,KAAK,CAAC,GAAG,SAAS,OAAO,EAAE,YAAY,GAAG;AAClE,gBAAQ,KAAK,KAAK;AAClB;AAAA,MACF;AAEA,YAAM,cAAcA,MAAK,SAAS,UAAU;AAC5C,UAAI,CAAC,GAAG,WAAW,WAAW,GAAG;AAC/B,gBAAQ,KAAK,KAAK;AAClB;AAAA,MACF;AAEA,YAAM,WAAWA,MAAK,aAAa,KAAK;AAGxC,UAAI,aAAa,GAAG,WAAW,QAAQ,GAAG;AACxC,gBAAQ,KAAK,KAAK;AAClB;AAAA,MACF;AAGA,YAAM,GAAG,KAAK,SAAS,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;AAC1D,aAAO,KAAK,KAAK;AAAA,IACnB,SAAS,KAAU;AACjB,aAAO,KAAK,EAAE,OAAO,OAAO,IAAI,QAAQ,CAAC;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,SAAS,OAAO;AACnC;AAKA,eAAsB,oBACpB,SACA,YAAqB,OACF;AACnB,QAAM,kBAAkBA,MAAK,UAAU,aAAa,QAAQ;AAC5D,QAAM,SAAmB,CAAC;AAG1B,QAAM,eAAeA,MAAK,iBAAiB,eAAe;AAC1D,QAAM,mBAAmBA,MAAK,SAAS,eAAe;AAEtD,MAAI,GAAG,WAAW,YAAY,GAAG;AAE/B,QAAI,aAAa,GAAG,WAAW,gBAAgB,GAAG;AAChD,aAAO;AAAA,IACT;AAEA,UAAM,GAAG,KAAK,cAAc,kBAAkB,EAAE,WAAW,CAAC,UAAU,CAAC;AACvE,WAAO,KAAK,eAAe;AAAA,EAC7B;AAEA,SAAO;AACT;AA3oBA;AAAA;AAAA;AAGA;AAAA;AAAA;;;ACHA,SAAS,kBAAkB;AAC3B,OAAOE,SAAQ;AACf,SAAS,QAAAC,OAAM,gBAAgB;AAKxB,SAAS,SAAS,UAAiC;AACxD,MAAI,CAACD,IAAG,WAAW,QAAQ,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,UAAUA,IAAG,aAAa,QAAQ;AACxC,SAAO,WAAW,KAAK,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AACvD;AAKA,eAAsB,cAAc,SAAiB,UAAkB,SAA0C;AAC/G,QAAM,SAAiC,CAAC;AAExC,MAAI,CAACA,IAAG,WAAW,OAAO,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,MAAMA,IAAG,QAAQ,SAAS,EAAE,eAAe,KAAK,CAAC;AAE/D,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAWC,MAAK,SAAS,KAAK,IAAI;AACxC,UAAM,eAAe,SAAS,SAAS,QAAQ;AAE/C,QAAI,KAAK,YAAY,GAAG;AACtB,YAAM,YAAY,MAAM,cAAc,UAAU,OAAO;AACvD,aAAO,OAAO,QAAQ,SAAS;AAAA,IACjC,WAAW,KAAK,OAAO,GAAG;AACxB,YAAM,OAAO,SAAS,QAAQ;AAC9B,UAAI,MAAM;AACR,eAAO,YAAY,IAAI;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AA5CA;AAAA;AAAA;AAAA;AAAA;;;ACAA,OAAOC,SAAQ;AACf,SAAS,QAAAC,aAAY;AA4Bd,SAAS,aAAa,YAA4B;AACvD,SAAOA,MAAK,YAAY,WAAW,UAAU;AAC/C;AAKA,eAAsB,UAAU,YAAkD;AAChF,QAAM,YAAY,aAAa,UAAU;AAEzC,MAAI,CAACD,IAAG,WAAW,SAAS,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,MAAMA,IAAG,SAAS,SAAS;AAAA,EACpC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAsB,UAAU,YAAoB,OAAoC;AACtF,QAAM,WAAWC,MAAK,YAAY,SAAS;AAC3C,QAAM,YAAYA,MAAK,UAAU,UAAU;AAE3C,QAAMD,IAAG,UAAU,QAAQ;AAC3B,QAAMA,IAAG,UAAU,WAAW,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpD;AAaA,eAAsB,mBAAmB,YAAoB,SAAoD;AAC/G,QAAM,EAAE,KAAK,QAAQ,QAAQ,SAAS,UAAU,IAAI;AAGpD,QAAM,YAAoC,CAAC;AAC3C,QAAM,aAAa,WAAW,CAAC,OAAO,QAAQ,KAAK,EAAE,CAAC;AAEtD,aAAW,KAAK,YAAY;AAC1B,UAAM,gBAAgB,EAAE,WAAW,GAAG,IAAI,IAAI,IAAI,CAAC;AACnD,UAAM,YAAYC,MAAK,YAAY,aAAa;AAChD,QAAID,IAAG,WAAW,SAAS,GAAG;AAC5B,YAAM,SAAS,MAAM,cAAc,SAAS;AAE5C,iBAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,kBAAU,GAAG,aAAa,IAAI,IAAI,EAAE,IAAI;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAsB;AAAA,IAC1B,SAAS;AAAA,IACT,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,EAClB;AAEA,QAAM,UAAU,YAAY,KAAK;AACjC,SAAO;AACT;AAKA,eAAsB,YAAY,YAAoB,SAAuD;AAC3G,QAAM,QAAQ,MAAM,UAAU,UAAU;AAExC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,QAAM,YAAYC,MAAK,YAAY,MAAM,UAAU,SAAS;AAC5D,QAAM,YAAY,MAAM,cAAc,SAAS;AAE/C,QAAM,eAA6B;AAAA,IACjC,GAAG;AAAA,IACH,GAAG;AAAA,IACH,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,IACnC,gBAAgB;AAAA,EAClB;AAEA,QAAM,UAAU,YAAY,YAAY;AACxC,SAAO;AACT;AAoBA,eAAsB,gBAAgB,YAA6D;AACjG,QAAM,QAAQ,MAAM,UAAU,UAAU;AAExC,MAAI,CAAC,OAAO;AACV,WAAO,EAAE,OAAO,iBAAiB;AAAA,EACnC;AAEA,QAAM,YAAYA,MAAK,YAAY,MAAM,UAAU,SAAS;AAC5D,QAAM,gBAAgB,MAAM,cAAc,SAAS;AACnD,QAAM,iBAAiB,MAAM,kBAAkB,CAAC;AAEhD,QAAM,WAAW;AAAA,IACf,WAAW,CAAC;AAAA,IACZ,UAAU,CAAC;AAAA,IACX,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,EACZ;AAGA,aAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,cAAc,GAAG;AACzD,QAAI,cAAc,IAAI,MAAM,QAAW;AACrC,eAAS,QAAQ,KAAK,IAAI;AAAA,IAC5B,WAAW,cAAc,IAAI,MAAM,MAAM;AACvC,eAAS,SAAS,KAAK,IAAI;AAAA,IAC7B,OAAO;AACL,eAAS,UAAU,KAAK,IAAI;AAAA,IAC9B;AAAA,EACF;AAGA,aAAW,QAAQ,OAAO,KAAK,aAAa,GAAG;AAC7C,QAAI,eAAe,IAAI,MAAM,QAAW;AACtC,eAAS,MAAM,KAAK,IAAI;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AA9LA,IAIM,WACA;AALN;AAAA;AAAA;AAEA;AAEA,IAAM,YAAY;AAClB,IAAM,aAAa;AAAA;AAAA;;;ACLnB,YAAY,OAAO;AACnB,OAAO,QAAQ;AAkBf,eAAsB,YAA6B;AACjD,QAAM,OAAO,WAAW;AACxB,QAAM,UAAU;AAAA,IACd,GAAG,KAAK,IAAI,CAACC,UAAS;AAAA,MACpB,OAAOA,KAAI;AAAA,MACX,OAAO,GAAGA,KAAI,KAAK,KAAKA,KAAI,IAAI;AAAA,MAChC,MAAMA,KAAI;AAAA,IACZ,EAAE;AAAA,IACF,EAAE,OAAO,UAAU,OAAO,qBAAc,MAAM,6CAA6C;AAAA,EAC7F;AACA,QAAM,MAAM,MAAQ,SAAO,EAAE,SAAS,iBAAiB,QAAQ,CAAC;AAChE,MAAM,WAAS,GAAG,EAAG,SAAQ,KAAK,CAAC;AACnC,SAAO;AACT;AAgBA,eAAsB,mBAAyC;AAC7D,QAAM,YAAY,MAAQ,SAAO;AAAA,IAC/B,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,OAAO,UAAU,OAAO,oBAAoB,MAAM,WAAW;AAAA,MAC/D,EAAE,OAAO,UAAU,OAAO,mBAAmB,MAAM,WAAW;AAAA,MAC9D,EAAE,OAAO,QAAQ,OAAO,wBAAwB,MAAM,sBAAsB;AAAA,IAC9E;AAAA,EACF,CAAC;AACD,MAAM,WAAS,SAAS,EAAG,SAAQ,KAAK,CAAC;AAEzC,MAAI,cAAc,QAAQ;AACxB,WAAO,CAAC,UAAU,QAAQ;AAAA,EAC5B;AACA,SAAO,CAAC,SAAsB;AAChC;AAEA,eAAsB,aAAa,WAAsC;AACvE,QAAM,YAAY,cAAc,UAAU,SAAS;AACnD,MAAI,UAAU,WAAW,EAAG,QAAO,CAAC;AACpC,QAAM,WAAW,MAAQ,cAAY;AAAA,IACnC,SAAS;AAAA,IACT,SAAS,UAAU,IAAI,CAAC,UAAU;AAAA,MAChC,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,MAAM,CAAC,WAAW,UAAU,EAAE,SAAS,KAAK,IAAI,IAAI,kBAAkB;AAAA,IACxE,EAAE;AAAA,IACF,eAAe,CAAC,WAAW,UAAU,EAAE,OAAO,OAAK,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAAA,EACxF,CAAC;AACD,MAAM,WAAS,QAAQ,EAAG,SAAQ,KAAK,CAAC;AACxC,SAAO;AACT;AAEA,eAAsB,aAAa,WAAsC;AACvE,QAAM,YAAY,cAAc,UAAU,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK;AAC1E,MAAI,UAAU,WAAW,EAAG,QAAO,CAAC;AACpC,QAAM,WAAW,MAAQ,cAAY;AAAA,IACnC,SAAS;AAAA,IACT,SAAS,UAAU,IAAI,CAAC,UAAU;AAAA,MAChC,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,MAAM,CAAC,YAAY,WAAW,EAAE,SAAS,KAAK,IAAI,IAAI,kBAAkB;AAAA,IAC1E,EAAE;AAAA,IACF,eAAe,CAAC,YAAY,WAAW,EAAE,OAAO,OAAK,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAAA,EAC1F,CAAC;AACD,MAAM,WAAS,QAAQ,EAAG,SAAQ,KAAK,CAAC;AACxC,SAAO;AACT;AAEA,eAAsB,eAAe,WAAsC;AACzE,QAAM,YAAY,cAAc,YAAY,SAAS;AACrD,MAAI,UAAU,WAAW,EAAG,QAAO,CAAC;AACpC,QAAM,WAAW,MAAQ,cAAY;AAAA,IACnC,SAAS;AAAA,IACT,SAAS,UAAU,IAAI,CAAC,UAAU;AAAA,MAChC,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,MAAM,CAAC,QAAQ,OAAO,MAAM,EAAE,SAAS,KAAK,IAAI,IAAI,kBAAkB;AAAA,IACxE,EAAE;AAAA,IACF,eAAe,CAAC,QAAQ,OAAO,MAAM,EAAE,OAAO,OAAK,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAAA,EACxF,CAAC;AACD,MAAM,WAAS,QAAQ,EAAG,SAAQ,KAAK,CAAC;AACxC,SAAO;AACT;AAEA,eAAsB,sBAAwC;AAC5D,QAAM,SAAS,MAAQ,UAAQ,EAAE,SAAS,mBAAmB,cAAc,KAAK,CAAC;AACjF,MAAM,WAAS,MAAM,EAAG,SAAQ,KAAK,CAAC;AACtC,SAAO;AACT;AAEA,eAAsB,qBAAuC;AAC3D,QAAM,SAAS,MAAQ,UAAQ,EAAE,SAAS,kBAAkB,cAAc,MAAM,CAAC;AACjF,MAAM,WAAS,MAAM,EAAG,SAAQ,KAAK,CAAC;AACtC,SAAO;AACT;AAEA,eAAsB,cAAc,SAAiB,eAAwB,MAAwB;AACnG,QAAM,SAAS,MAAQ,UAAQ,EAAE,SAAS,cAAc,aAAa,CAAC;AACtE,MAAM,WAAS,MAAM,EAAG,SAAQ,KAAK,CAAC;AACtC,SAAO;AACT;AAEA,eAAsB,qBAAqB,YAAqC;AAC9E,QAAM,SAAS,MAAQ,SAAO;AAAA,IAC5B,SAAS,GAAG,UAAU;AAAA,IACtB,SAAS;AAAA,MACP,EAAE,OAAO,YAAY,OAAO,YAAY,MAAM,oBAAoB;AAAA,MAClE,EAAE,OAAO,SAAS,OAAO,SAAS,MAAM,yBAAyB;AAAA,MACjE,EAAE,OAAO,QAAQ,OAAO,QAAQ,MAAM,aAAa;AAAA,IACrD;AAAA,EACF,CAAC;AACD,MAAM,WAAS,MAAM,EAAG,SAAQ,KAAK,CAAC;AACtC,SAAO;AACT;AAEA,eAAsB,oBAAoB,SAAsE;AAC9G,UAAQ,IAAI,GAAG,KAAK,qBAAqB,CAAC;AAC1C,MAAI,QAAQ,SAAS,SAAS,GAAG;AAC/B,YAAQ,IAAI,GAAG,MAAM,gBAAgB,CAAC;AACtC,YAAQ,SAAS,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAK,QAAQ,IAAI,GAAG,MAAM,cAAS,CAAC,EAAE,CAAC,CAAC;AAC9E,QAAI,QAAQ,SAAS,SAAS,GAAI,SAAQ,IAAI,GAAG,KAAK,eAAe,QAAQ,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,EAC3G;AACA,MAAI,QAAQ,QAAQ,SAAS,GAAG;AAC9B,YAAQ,IAAI,GAAG,OAAO,iCAAiC,CAAC;AACxD,YAAQ,QAAQ,MAAM,GAAG,CAAC,EAAE,QAAQ,OAAK,QAAQ,IAAI,GAAG,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;AAC7E,QAAI,QAAQ,QAAQ,SAAS,EAAG,SAAQ,IAAI,GAAG,KAAK,eAAe,QAAQ,QAAQ,SAAS,CAAC,OAAO,CAAC;AAAA,EACvG;AACA,UAAQ,IAAI,EAAE;AACd,SAAO,cAAc,wBAAwB,IAAI;AACnD;AA9JA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;;;ACHA;AAAA;AAAA;AAAA;AAAA,OAAOC,SAAQ;AACf,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,OAAOC,SAAQ;AACf,OAAO,SAAS;AAsBhB,SAAS,iBAAiB,MAAwB,SAAkB,MAAiC;AACnG,MAAI,CAAC,QAAQ,SAAS,MAAO,QAAO;AACpC,MAAI,WAAW,CAAC,GAAG,IAAI;AAEvB,MAAI,MAAM;AACR,UAAM,WAAW,KAAK,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAClD,eAAW,SAAS,OAAO,UAAQ,SAAS,KAAK,CAAAC,OAAK,KAAK,SAASA,EAAC,CAAC,CAAC;AAAA,EACzE;AAEA,MAAI,SAAS;AACX,UAAM,WAAW,QAAQ,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AACrD,eAAW,SAAS,OAAO,UAAQ,CAAC,SAAS,KAAK,CAAAA,OAAK,KAAK,SAASA,EAAC,CAAC,CAAC;AAAA,EAC1E;AAEA,SAAO;AACT;AAEA,eAAsB,YAAY,aAAiC,SAA6C;AAC9G,UAAQ,IAAI,EAAE;AAGd,MAAI;AACJ,MAAI,eAAe;AAGnB,MAAI,QAAQ,QAAQ;AAClB,iBAAa,qBAAqB;AAClC,mBAAe;AACf,YAAQ,IAAID,IAAG,KAAK,0BAA0B,UAAU,EAAE,CAAC;AAAA,EAC7D,WAAW,CAAC,eAAe,gBAAgB,KAAK;AAE9C,iBAAa,QAAQ,IAAI;AACzB,kBAAc;AACd,mBAAe;AACf,YAAQ,IAAIA,IAAG,KAAK,sCAAsC,UAAU,EAAE,CAAC;AAAA,EACzE,OAAO;AACL,iBAAaD,SAAQ,QAAQ,IAAI,GAAG,WAAW;AAAA,EACjD;AAGA,MAAI;AACJ,MAAI,QAAQ,QAAQ;AAElB,UAAM,kBAAkB,QAAQ,OAAO,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AAC7E,iBAAa,gBAAgB,OAAO,OAAK,MAAM,YAAY,MAAM,QAAQ;AACzE,QAAI,WAAW,WAAW,GAAG;AAC3B,cAAQ,IAAIC,IAAG,OAAO,mBAAmB,QAAQ,MAAM,mBAAmB,CAAC;AAC3E,mBAAa,CAAC,QAAQ;AAAA,IACxB;AAAA,EACF,WAAW,CAAC,QAAQ,MAAM,SAAS,QAAQ,KAAK;AAC9C,iBAAa,CAAC,QAAQ;AAAA,EACxB,OAAO;AACL,iBAAa,MAAM,iBAAiB;AAAA,EACtC;AAGA,MAAI,iBAAgC;AACpC,QAAM,kBAA4B,CAAC;AAEnC,aAAW,UAAU,YAAY;AAC/B,UAAM,YAAY,aAAa,YAAY,MAAM;AAGjD,QAAI,QAAQ,SAASH,IAAG,WAAW,SAAS,GAAG;AAC7C,YAAMA,IAAG,OAAO,SAAS;AACzB,sBAAgB,KAAK,QAAQ,MAAM,CAAC;AAAA,IACtC,WAAWA,IAAG,WAAW,SAAS,KAAK,CAAC,QAAQ,OAAO;AACrD,sBAAgB,KAAK,QAAQ,MAAM,CAAC;AAAA,IACtC;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,gBAAgB,SAAS,GAAG;AAC/C,UAAM,QAAQC,MAAK,YAAY,KAAK;AACpC,QAAID,IAAG,WAAW,KAAK,GAAG;AACxB,YAAMA,IAAG,OAAO,KAAK;AAAA,IACvB;AACA,YAAQ,IAAIG,IAAG,KAAK,0CAA0C,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC;AAC5F,qBAAiB;AAAA,EACnB,WAAW,gBAAgB,SAAS,KAAK,CAAC,QAAQ,OAAO;AACvD,QAAI,CAAC,QAAQ,MAAM,SAAS,QAAQ,KAAK;AACvC,UAAI,QAAQ,KAAK;AACf,yBAAiB;AAAA,MACnB,OAAO;AACL,gBAAQ,IAAIA,IAAG,OAAO,GAAG,gBAAgB,KAAK,IAAI,CAAC,2CAA2C,CAAC;AAC/F;AAAA,MACF;AAAA,IACF,OAAO;AACL,uBAAiB,MAAM,qBAAqB,gBAAgB,KAAK,IAAI,CAAC;AAEtE,UAAI,mBAAmB,QAAQ;AAC7B,gBAAQ,IAAIA,IAAG,OAAO,2BAA2B,CAAC;AAClD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,CAAC,gBAAgBH,IAAG,WAAW,UAAU,KAAK,CAAC,QAAQ,OAAO;AAChE,UAAM,QAAQA,IAAG,YAAY,UAAU;AACvC,QAAI,MAAM,SAAS,KAAK,CAAC,gBAAgB;AACvC,cAAQ,IAAIG,IAAG,IAAI,cAAc,WAAW,oCAAoC,CAAC;AACjF,cAAQ,IAAIA,IAAG,KAAK,2BAA2B,CAAC;AAChD;AAAA,IACF;AAAA,EACF;AAGA,QAAM,SAAS,cAAc,QAAQ,MAAM;AAC3C,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAIA,IAAG,IAAI,UAAU,OAAO,KAAK,EAAE,CAAC;AAC5C;AAAA,EACF;AAEA,UAAQ,IAAIA,IAAG,KAAK,WAAW,OAAO,IAAI,EAAE,CAAC;AAG7C,MAAI,UAAU,QAAQ;AACtB,MAAI,CAAC,WAAW,CAAC,QAAQ,SAAS,CAAC,QAAQ,KAAK;AAC9C,cAAU,MAAM,UAAU;AAAA,EAC5B,WAAW,CAAC,SAAS;AACnB,cAAU;AAAA,EACZ;AAGA,QAAM,YAAY,mBAAmB;AAGrC,MAAI,YAOA;AAAA,IACF,QAAQ,CAAC;AAAA,IACT,UAAU,CAAC;AAAA,IACX,QAAQ,CAAC;AAAA,IACT,WAAW,CAAC;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,EAChB;AAEA,MAAI,YAAY,YAAY,CAAC,QAAQ,KAAK;AAExC,YAAQ,IAAIA,IAAG,KAAK,6BAA6B,CAAC;AAClD,cAAU,SAAS,MAAM,aAAa,OAAO,SAAS;AACtD,cAAU,SAAS,MAAM,aAAa,OAAO,SAAS;AACtD,cAAU,WAAW,MAAM,eAAe,OAAO,SAAS;AAC1D,cAAU,gBAAgB,MAAM,oBAAoB;AACpD,cAAU,eAAe,MAAM,mBAAmB;AAAA,EACpD,OAAO;AACL,UAAM,MAAM,OAAO,OAAO;AAC1B,QAAI,CAAC,KAAK;AACR,cAAQ,IAAIA,IAAG,IAAI,gBAAgB,OAAO,EAAE,CAAC;AAC7C,cAAQ,IAAIA,IAAG,KAAK,mBAAmB,OAAO,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AACtE;AAAA,IACF;AAEA,gBAAY;AAAA,MACV,QAAQ,IAAI;AAAA,MACZ,UAAU,IAAI;AAAA,MACd,QAAQ,IAAI;AAAA,MACZ,WAAW,IAAI,aAAa,CAAC;AAAA,MAC7B,eAAe,IAAI;AAAA,MACnB,cAAc,IAAI;AAAA,IACpB;AAAA,EACF;AAGA,MAAI,QAAQ,WAAW,QAAQ,MAAM;AACnC,cAAU,SAAS,iBAAiB,UAAU,QAAQ,QAAQ,SAAS,QAAQ,IAAI;AACnF,cAAU,SAAS,iBAAiB,UAAU,QAAQ,QAAQ,SAAS,QAAQ,IAAI;AACnF,cAAU,WAAW,iBAAiB,UAAU,UAAU,QAAQ,SAAS,QAAQ,IAAI;AACvF,cAAU,YAAY,iBAAiB,UAAU,WAAW,QAAQ,SAAS,QAAQ,IAAI;AAAA,EAC3F;AAGA,UAAQ,IAAIA,IAAG,KAAK,gBAAgB,CAAC;AACrC,UAAQ,IAAIA,IAAG,MAAM,cAAc,WAAW,GAAG,CAAC;AAClD,UAAQ,IAAIA,IAAG,MAAM,cAAc,WAAW,IAAI,OAAK,QAAQ,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC;AACjF,UAAQ,IAAIA,IAAG,MAAM,cAAc,OAAO,EAAE,CAAC;AAE7C,MAAI,MAAM,QAAQ,UAAU,MAAM,GAAG;AACnC,YAAQ,IAAIA,IAAG,KAAK,cAAc,UAAU,OAAO,MAAM,EAAE,CAAC;AAAA,EAC9D;AACA,MAAI,MAAM,QAAQ,UAAU,MAAM,GAAG;AACnC,YAAQ,IAAIA,IAAG,KAAK,cAAc,UAAU,OAAO,MAAM,EAAE,CAAC;AAAA,EAC9D;AACA,MAAI,MAAM,QAAQ,UAAU,QAAQ,GAAG;AACrC,YAAQ,IAAIA,IAAG,KAAK,eAAe,UAAU,SAAS,MAAM,EAAE,CAAC;AAAA,EACjE;AAEA,UAAQ,IAAI,EAAE;AAGd,MAAI,CAAC,QAAQ,SAAS,CAAC,QAAQ,KAAK;AAClC,QAAI,CAAC,MAAM,cAAc,UAAU,GAAG;AACpC,cAAQ,IAAIA,IAAG,OAAO,YAAY,CAAC;AACnC;AAAA,IACF;AAAA,EACF;AAGA,QAAM,UAAU,IAAI,qBAAqB,EAAE,MAAM;AAEjD,MAAI;AAEF,UAAMH,IAAG,UAAU,UAAU;AAG7B,eAAW,UAAU,YAAY;AAC/B,YAAM,YAAY,aAAa,YAAY,MAAM;AACjD,YAAMA,IAAG,UAAU,SAAS;AAE5B,YAAM,cAAc,WAAW,WAAW,WAAW;AAGrD,cAAQ,OAAO,YAAY,mBAAmB,WAAW,SAAS,mBAAmB,WAAW;AAChG,UAAI,WAAW,UAAU;AAEvB,cAAM,oBAAoB,UAAU,QAAQ,OAAO,WAAW,WAAW,SAAS;AAAA,MACpF,OAAO;AACL,YAAI,UAAU,WAAW,OAAO;AAC9B,gBAAM,cAAc,UAAU,OAAO,WAAW,WAAW,SAAS;AAAA,QACtE,WAAW,UAAU,OAAO,SAAS,GAAG;AACtC,gBAAM,UAAU,UAAU,QAAQ,UAAU,OAAO,WAAW,WAAW,SAAS;AAAA,QACpF;AAAA,MACF;AAGA,cAAQ,OAAO,YAAY,mBAAmB,WAAW,SAAS,mBAAmB,WAAW;AAChG,UAAI,WAAW,UAAU;AAEvB,cAAM,oBAAoB,UAAU,QAAQ,OAAO,WAAW,WAAW,SAAS;AAAA,MACpF,OAAO;AACL,YAAI,UAAU,WAAW,OAAO;AAC9B,gBAAM,cAAc,UAAU,OAAO,WAAW,WAAW,SAAS;AAAA,QACtE,WAAW,UAAU,OAAO,SAAS,GAAG;AACtC,gBAAM,UAAU,UAAU,QAAQ,UAAU,OAAO,WAAW,WAAW,SAAS;AAAA,QACpF;AAAA,MACF;AAGA,cAAQ,OAAO,YAAY,qBAAqB,WAAW,SAAS,qBAAqB,WAAW;AACpG,UAAI,WAAW,UAAU;AAEvB,cAAM,sBAAsB,UAAU,UAAU,OAAO,WAAW,WAAW,SAAS;AAAA,MACxF,OAAO;AACL,YAAI,UAAU,aAAa,OAAO;AAChC,gBAAM,cAAc,YAAY,OAAO,WAAW,WAAW,SAAS;AAAA,QACxE,WAAW,UAAU,SAAS,SAAS,GAAG;AACxC,gBAAM,UAAU,UAAU,UAAU,YAAY,OAAO,WAAW,WAAW,SAAS;AAAA,QACxF;AAAA,MACF;AAGA,UAAI,WAAW,UAAU;AACvB,gBAAQ,OAAO,YAAY,sBAAsB,WAAW,SAAS,sBAAsB,WAAW;AACtG,YAAI,UAAU,cAAc,OAAO;AACjC,gBAAM,cAAc,aAAa,OAAO,WAAW,WAAW,SAAS;AAAA,QACzE,WAAW,UAAU,aAAa,UAAU,UAAU,SAAS,GAAG;AAChE,gBAAM,UAAU,UAAU,WAAW,aAAa,OAAO,WAAW,WAAW,SAAS;AAAA,QAC1F;AAAA,MACF;AAGA,UAAI,WAAW,YAAY,UAAU,eAAe;AAClD,gBAAQ,OAAO,YAAY,mBAAmB,WAAW,SAAS,mBAAmB,WAAW;AAChG,cAAM,WAAW,OAAO,WAAW,WAAW,SAAS;AAAA,MACzD;AAGA,UAAI,WAAW,YAAY,UAAU,cAAc;AACjD,gBAAQ,OAAO,YAAY,kBAAkB,WAAW,SAAS,kBAAkB,WAAW;AAC9F,cAAM,UAAU,OAAO,WAAW,WAAW,SAAS;AAAA,MACxD;AAGA,UAAI,WAAW,UAAU;AACvB,gBAAQ,OAAO,YAAY,mBAAmB,WAAW,SAAS,mBAAmB,WAAW;AAChG,cAAM,cAAc,UAAU,OAAO,WAAW,WAAW,SAAS;AACpE,cAAM,cAAc,iBAAiB,OAAO,WAAW,WAAW,SAAS;AAC3E,cAAM,cAAc,WAAW,OAAO,WAAW,WAAW,SAAS;AAErE,gBAAQ,OAAO,YAAY,uBAAuB,WAAW,SAAS,uBAAuB,WAAW;AACxG,cAAM,cAAc,OAAO,WAAW,WAAW,SAAS;AAAA,MAC5D,WAAW,WAAW,UAAU;AAE9B,gBAAQ,OAAO,YAAY,qBAAqB,WAAW,SAAS,qBAAqB,WAAW;AACpG,cAAM,oBAAoB,WAAW,SAAS;AAAA,MAChD;AAAA,IACF;AAGA,QAAI,OAAO,YAAY,WAAW,SAAS,QAAQ,GAAG;AACpD,YAAM,aAAa,OAAO,UAAU,YAAY,SAAS;AAAA,IAC3D;AAGA,YAAQ,OAAO;AACf,UAAM,mBAAmB,YAAY;AAAA,MACnC,KAAK;AAAA,MACL,QAAQ,OAAO;AAAA,MACf,SAAS;AAAA,MACT,QAAQ,QAAQ,WAAW,CAAC,CAAC;AAAA;AAAA,MAC7B,WAAW;AAAA,QACT,QAAQ,UAAU,WAAW,QAAQ,CAAC,KAAK,IAAI,UAAU;AAAA,QACzD,QAAQ,UAAU,WAAW,QAAQ,CAAC,KAAK,IAAI,UAAU;AAAA,QACzD,UAAU,UAAU,aAAa,QAAQ,CAAC,KAAK,IAAI,UAAU;AAAA,QAC7D,WAAW,UAAU,cAAc,QAAQ,CAAC,KAAK,IAAK,UAAU,aAAa,CAAC;AAAA,QAC9E,QAAQ,UAAU;AAAA,QAClB,OAAO,UAAU;AAAA,MACnB;AAAA,IACF,CAAC;AAED,UAAM,aAAa,YAAY,WAAY,mBAAmB,aAAa,eAAe;AAC1F,YAAQ,QAAQG,IAAG,MAAM,WAAW,UAAU,gBAAgB,CAAC;AAG/D,YAAQ,IAAI,EAAE;AACd,QAAI,CAAC,cAAc;AACjB,cAAQ,IAAIA,IAAG,KAAK,aAAa,CAAC;AAClC,cAAQ,IAAIA,IAAG,MAAM,QAAQ,WAAW,EAAE,CAAC;AAAA,IAC7C;AAEA,UAAM,cAAc,WAAW,IAAI,OAAK,MAAM,WAAW,eAAe,aAAa,EAAE,KAAK,KAAK;AACjG,YAAQ,IAAIA,IAAG,KAAK,sBAAsB,WAAW,GAAG,CAAC;AAEzD,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAIA,IAAG,KAAK,kBAAkB,CAAC;AACvC,YAAQ,IAAIA,IAAG,KAAK,qCAAqC,CAAC;AAC1D,YAAQ,IAAIA,IAAG,KAAK,0CAA0C,CAAC;AAC/D,YAAQ,IAAIA,IAAG,KAAK,oCAAoC,CAAC;AACzD,YAAQ,IAAI,EAAE;AAAA,EAEhB,SAAS,OAAY;AACnB,YAAQ,KAAKA,IAAG,IAAI,0BAA0B,CAAC;AAC/C,YAAQ,MAAMA,IAAG,IAAI,MAAM,OAAO,CAAC;AACnC,QAAI,QAAQ,IAAI,OAAO;AACrB,cAAQ,MAAM,MAAM,KAAK;AAAA,IAC3B;AAAA,EACF;AACF;AAhXA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;ACRA;AAAA;AAAA;AAAA;AAAA,OAAOE,SAAQ;AACf,SAAS,QAAAC,aAAY;AACrB,OAAOC,SAAQ;AACf,OAAOC,UAAS;AAMhB,eAAsB,WAAW,MAAc,UAA+B,CAAC,GAAkB;AAE/F,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,MAAM,WAAW,GAAG;AACtB,YAAQ,IAAID,IAAG,IAAI,2CAA2C,CAAC;AAC/D,YAAQ,IAAIA,IAAG,KAAK,WAAW,CAAC;AAChC,YAAQ,IAAIA,IAAG,KAAK,0BAA0B,CAAC;AAC/C,YAAQ,IAAIA,IAAG,KAAK,yBAAyB,CAAC;AAC9C,YAAQ,IAAIA,IAAG,KAAK,yBAAyB,CAAC;AAC9C;AAAA,EACF;AAEA,QAAM,CAAC,MAAM,IAAI,IAAI;AACrB,QAAM,aAAa,CAAC,SAAS,UAAU,SAAS,UAAU,WAAW,YAAY,YAAY,WAAW;AAExG,MAAI,CAAC,WAAW,SAAS,IAAI,GAAG;AAC9B,YAAQ,IAAIA,IAAG,IAAI,iBAAiB,IAAI,EAAE,CAAC;AAC3C,YAAQ,IAAIA,IAAG,KAAK,8CAA8C,CAAC;AACnE;AAAA,EACF;AAGA,QAAM,UAAkC;AAAA,IACtC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AACA,QAAM,iBAAiB,QAAQ,IAAI;AAEnC,QAAM,aAAa,QAAQ,QAAQ,QAAQ,IAAI;AAG/C,MAAI,CAAC,YAAY,UAAU,GAAG;AAC5B,YAAQ,IAAIA,IAAG,IAAI,uBAAuB,CAAC;AAC3C,YAAQ,IAAIA,IAAG,KAAK,iEAAiE,CAAC;AACtF;AAAA,EACF;AAGA,QAAM,QAAQ,MAAM,UAAU,UAAU;AACxC,MAAI,CAAC,OAAO;AACV,YAAQ,IAAIA,IAAG,OAAO,+DAA+D,CAAC;AAAA,EACxF;AAGA,QAAM,aAAa,QAAQ,WAAW,QAAQ,MAAM,SAAS;AAC7D,QAAM,SAAS,cAAc,UAAU;AACvC,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAIA,IAAG,IAAI,UAAU,OAAO,KAAK,EAAE,CAAC;AAC5C;AAAA,EACF;AAGA,QAAM,YAAY,cAAc,gBAAgB,OAAO,SAAS;AAChE,QAAM,SAAS,UAAU,KAAK,OAAK,EAAE,SAAS,IAAI;AAElD,MAAI,CAAC,QAAQ;AACX,YAAQ,IAAIA,IAAG,IAAI,GAAG,IAAI,KAAK,IAAI,wBAAwB,CAAC;AAC5D,YAAQ,IAAIA,IAAG,KAAK,gBAAgB,cAAc,6BAA6B,CAAC;AAChF;AAAA,EACF;AAGA,QAAM,eAAe,OAAO,UAAU;AACtC,QAAM,YAAYD,MAAK,YAAY,YAAY;AAG/C,QAAM,WAAWA,MAAK,WAAW,gBAAgB,IAAI;AACrD,QAAM,aAAa,WAAW;AAC9B,MAAID,IAAG,WAAW,QAAQ,KAAKA,IAAG,WAAW,UAAU,GAAG;AACxD,YAAQ,IAAIE,IAAG,OAAO,GAAG,IAAI,KAAK,IAAI,8BAA8B,CAAC;AACrE,YAAQ,IAAIA,IAAG,KAAK,yCAAyC,CAAC;AAC9D;AAAA,EACF;AAGA,QAAM,UAAUC,KAAI,UAAU,IAAI,KAAK,IAAI,MAAM,EAAE,MAAM;AAEzD,MAAI;AACF,UAAM,SAAS,MAAM,UAAU,CAAC,IAAI,GAAG,gBAAgB,OAAO,WAAW,SAAS;AAElF,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,cAAQ,QAAQD,IAAG,MAAM,SAAS,IAAI,KAAK,IAAI,EAAE,CAAC;AAGlD,UAAI,OAAO;AACT,cAAM,YAAY,MAAM,aAAa,CAAC;AACtC,cAAM,YAAY,UAAU,cAAwC;AACpE,YAAI,CAAC,WAAW;AACd,UAAC,UAAkB,cAAc,IAAI,CAAC,IAAI;AAAA,QAC5C,WAAW,MAAM,QAAQ,SAAS,KAAK,CAAC,UAAU,SAAS,IAAI,GAAG;AAChE,oBAAU,KAAK,IAAI;AAAA,QACrB;AAGA,cAAM,YAAY,MAAM,cAAc,SAAS;AAE/C,cAAM,YAAY,YAAY;AAAA,UAC5B;AAAA,UACA,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAEA,cAAQ,IAAIA,IAAG,KAAK,aAAa,YAAY,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;AAAA,IAC5E,WAAW,OAAO,QAAQ,SAAS,GAAG;AACpC,cAAQ,KAAKA,IAAG,IAAI,kBAAkB,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,IACxD,WAAW,OAAO,OAAO,SAAS,GAAG;AACnC,cAAQ,KAAKA,IAAG,IAAI,gBAAgB,IAAI,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;AAAA,IACxE;AAAA,EACF,SAAS,OAAY;AACnB,YAAQ,KAAKA,IAAG,IAAI,iBAAiB,IAAI,EAAE,CAAC;AAC5C,YAAQ,MAAMA,IAAG,IAAI,MAAM,OAAO,CAAC;AAAA,EACrC;AACF;AA/HA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;;;ACPA;AAAA;AAAA;AAAA;AAAA,OAAOE,SAAQ;AAKf,eAAsB,YAAY,MAA0B,UAA+B,CAAC,GAAkB;AAC5G,QAAM,aAAa,CAAC,QAAQ,UAAU,UAAU,YAAY,WAAW;AAGvE,MAAI,CAAC,MAAM;AACT,YAAQ,IAAIA,IAAG,KAAK,4BAA4B,CAAC;AACjD,YAAQ,IAAIA,IAAG,MAAM,2CAA2C,CAAC;AACjE,YAAQ,IAAIA,IAAG,MAAM,6CAA6C,CAAC;AACnE,YAAQ,IAAIA,IAAG,MAAM,6CAA6C,CAAC;AACnE,YAAQ,IAAIA,IAAG,MAAM,+CAA+C,CAAC;AACrE,YAAQ,IAAIA,IAAG,MAAM,gDAAgD,CAAC;AACtE,YAAQ,IAAI,EAAE;AACd;AAAA,EACF;AAGA,SAAO,KAAK,YAAY;AACxB,MAAI,CAAC,WAAW,SAAS,IAAI,GAAG;AAC9B,YAAQ,IAAIA,IAAG,IAAI,iBAAiB,IAAI,EAAE,CAAC;AAC3C,YAAQ,IAAIA,IAAG,KAAK,gBAAgB,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC;AAC5D;AAAA,EACF;AAGA,MAAI,SAAS,QAAQ;AACnB,aAAS;AACT;AAAA,EACF;AAGA,QAAM,SAAS,cAAc,QAAQ,MAAM;AAC3C,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAIA,IAAG,IAAI,UAAU,OAAO,KAAK,EAAE,CAAC;AAC5C;AAAA,EACF;AAEA,UAAQ,IAAIA,IAAG,KAAK,WAAW,OAAO,IAAI;AAAA,CAAI,CAAC;AAE/C,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,iBAAW,OAAO,SAAS;AAC3B;AAAA,IACF,KAAK;AACH,iBAAW,OAAO,SAAS;AAC3B;AAAA,IACF,KAAK;AACH,uBAAiB,OAAO,SAAS;AACjC;AAAA,IACF,KAAK;AACH,oBAAc,OAAO,SAAS;AAC9B;AAAA,EACJ;AACF;AAEA,SAAS,WAAiB;AACxB,QAAM,OAAO,WAAW;AAExB,UAAQ,IAAIA,IAAG,KAAKA,IAAG,KAAK,qBAAqB,CAAC,CAAC;AAEnD,aAAW,OAAO,MAAM;AACtB,UAAM,UAAWA,IAAW,IAAI,KAAK,KAAKA,IAAG;AAC7C,YAAQ,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQA,IAAG,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,WAAW,EAAE;AAG3F,QAAI,MAAM,QAAQ,IAAI,MAAM,GAAG;AAC7B,YAAM,aAAa,MAAM,QAAQ,IAAI,MAAM,IAAI,IAAI,OAAO,SAAS;AACnE,YAAM,aAAa,MAAM,QAAQ,IAAI,MAAM,IAAI,IAAI,OAAO,SAAS;AACnE,YAAM,WAAW,MAAM,QAAQ,IAAI,QAAQ,IAAI,IAAI,SAAS,SAAS;AACrE,cAAQ,IAAIA,IAAG,KAAK,iBAAiB,UAAU,cAAc,UAAU,gBAAgB,QAAQ,EAAE,CAAC;AAAA,IACpG,OAAO;AACL,cAAQ,IAAIA,IAAG,KAAK,8CAA8C,CAAC;AAAA,IACrE;AAAA,EACF;AAEA,UAAQ,IAAI;AAAA,eAAWA,IAAG,KAAK,SAAS,OAAO,EAAE,CAAC,CAAC,+CAA+C;AAClG,UAAQ,IAAI,EAAE;AAChB;AAEA,SAAS,WAAW,WAAyB;AAC3C,QAAM,SAAS,cAAc,UAAU,SAAS;AAEhD,UAAQ,IAAIA,IAAG,KAAKA,IAAG,KAAK,qBAAqB,OAAO,MAAM;AAAA,CAAM,CAAC,CAAC;AAEtE,MAAI,OAAO,WAAW,GAAG;AACvB,YAAQ,IAAIA,IAAG,KAAK,mBAAmB,CAAC;AACxC;AAAA,EACF;AAGA,QAAM,OAAO;AACb,QAAM,OAAO,KAAK,KAAK,OAAO,SAAS,IAAI;AAE3C,WAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,YAAM,MAAM,IAAI,IAAI;AACpB,UAAI,MAAM,OAAO,QAAQ;AACvB,gBAAQA,IAAG,MAAM,OAAO,GAAG,EAAE,KAAK,OAAO,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AACA,UAAQ,IAAI,EAAE;AAChB;AAEA,SAAS,WAAW,WAAyB;AAC3C,QAAM,SAAS,cAAc,UAAU,SAAS,EAAE,OAAO,OAAK,EAAE,KAAK;AAErE,UAAQ,IAAIA,IAAG,KAAKA,IAAG,KAAK,qBAAqB,OAAO,MAAM;AAAA,CAAM,CAAC,CAAC;AAEtE,MAAI,OAAO,WAAW,GAAG;AACvB,YAAQ,IAAIA,IAAG,KAAK,mBAAmB,CAAC;AACxC;AAAA,EACF;AAGA,QAAM,OAAO;AACb,QAAM,OAAO,KAAK,KAAK,OAAO,SAAS,IAAI;AAE3C,WAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,YAAM,MAAM,IAAI,IAAI;AACpB,UAAI,MAAM,OAAO,QAAQ;AACvB,gBAAQA,IAAG,MAAM,OAAO,GAAG,EAAE,KAAK,OAAO,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AACA,UAAQ,IAAI,EAAE;AAChB;AAEA,SAAS,iBAAiB,WAAyB;AACjD,QAAM,WAAW,cAAc,YAAY,SAAS;AAEpD,UAAQ,IAAIA,IAAG,KAAKA,IAAG,KAAK,uBAAuB,SAAS,MAAM;AAAA,CAAM,CAAC,CAAC;AAE1E,MAAI,SAAS,WAAW,GAAG;AACzB,YAAQ,IAAIA,IAAG,KAAK,qBAAqB,CAAC;AAC1C;AAAA,EACF;AAGA,QAAM,QAAQ,SAAS,OAAO,OAAK,CAAC,EAAE,KAAK;AAC3C,QAAM,OAAO,SAAS,OAAO,OAAK,EAAE,KAAK;AAGzC,UAAQ,IAAIA,IAAG,KAAK,kBAAkB,CAAC;AACvC,QAAM,OAAO;AACb,QAAM,OAAO,KAAK,KAAK,MAAM,SAAS,IAAI;AAE1C,WAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,YAAM,MAAM,IAAI,IAAI;AACpB,UAAI,MAAM,MAAM,QAAQ;AACtB,gBAAQA,IAAG,OAAO,MAAM,MAAM,GAAG,EAAE,MAAM,OAAO,EAAE,CAAC;AAAA,MACrD;AAAA,IACF;AACA,YAAQ,IAAI,IAAI;AAAA,EAClB;AAGA,MAAI,KAAK,SAAS,GAAG;AACnB,YAAQ,IAAIA,IAAG,KAAK,qBAAqB,CAAC;AAC1C,eAAW,OAAO,MAAM;AACtB,cAAQ,IAAIA,IAAG,OAAO,QAAQ,IAAI,IAAI,GAAG,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,UAAQ,IAAI,EAAE;AAChB;AAEA,SAAS,cAAc,WAAyB;AAC9C,QAAM,YAAY,cAAc,aAAa,SAAS;AAEtD,UAAQ,IAAIA,IAAG,KAAKA,IAAG,KAAK,wBAAwB,UAAU,MAAM;AAAA,CAAM,CAAC,CAAC;AAE5E,MAAI,UAAU,WAAW,GAAG;AAC1B,YAAQ,IAAIA,IAAG,KAAK,sBAAsB,CAAC;AAC3C;AAAA,EACF;AAEA,aAAW,MAAM,WAAW;AAC1B,YAAQ,IAAIA,IAAG,MAAM,YAAO,GAAG,IAAI,EAAE,CAAC;AAAA,EACxC;AACA,UAAQ,IAAI,EAAE;AAChB;AAhMA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;;;ACHA;AAAA;AAAA;AAAA;AAAA,OAAOC,SAAQ;AACf,SAAS,QAAAC,aAAY;AACrB,OAAOC,SAAQ;AACf,OAAOC,UAAS;AAMhB,eAAsB,cAAc,UAA+B,CAAC,GAAkB;AACpF,QAAM,aAAa,QAAQ,IAAI;AAG/B,MAAI,CAAC,YAAY,UAAU,GAAG;AAC5B,YAAQ,IAAID,IAAG,IAAI,uBAAuB,CAAC;AAC3C,YAAQ,IAAIA,IAAG,KAAK,sBAAsB,CAAC;AAC3C;AAAA,EACF;AAGA,QAAM,QAAQ,MAAM,UAAU,UAAU;AACxC,MAAI,CAAC,OAAO;AACV,YAAQ,IAAIA,IAAG,IAAI,sBAAsB,CAAC;AAC1C,YAAQ,IAAIA,IAAG,KAAK,+EAA+E,CAAC;AACpG;AAAA,EACF;AAGA,QAAM,aAAa,QAAQ,UAAU,MAAM;AAC3C,QAAM,SAAS,cAAc,UAAU;AACvC,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAIA,IAAG,IAAI,UAAU,OAAO,KAAK,EAAE,CAAC;AAC5C;AAAA,EACF;AAEA,UAAQ,IAAIA,IAAG,KAAK,WAAW,OAAO,IAAI,EAAE,CAAC;AAC7C,UAAQ,IAAIA,IAAG,KAAK,WAAW,MAAM,MAAM,EAAE,CAAC;AAC9C,UAAQ,IAAI,EAAE;AAEd,QAAM,UAAUC,KAAI,yBAAyB,EAAE,MAAM;AAErD,MAAI;AAEF,UAAM,SAAS,MAAM,gBAAgB,UAAU;AAC/C,QAAI,WAAW,QAAQ;AACrB,cAAQ,KAAKD,IAAG,IAAI,OAAO,KAAK,CAAC;AACjC;AAAA,IACF;AAEA,UAAM,EAAE,UAAU,UAAU,IAAI;AAGhC,QAAI,gBAAgB,CAAC,UAAU,UAAU,YAAY,WAAW;AAChE,QAAI,QAAQ,OAAQ,iBAAgB,CAAC,QAAQ;AAC7C,QAAI,QAAQ,OAAQ,iBAAgB,CAAC,QAAQ;AAC7C,QAAI,QAAQ,SAAU,iBAAgB,CAAC,UAAU;AAGjD,UAAM,eAAuC,CAAC;AAC9C,eAAW,QAAQ,eAAe;AAChC,YAAM,UAAUD,MAAK,OAAO,WAAW,IAAI;AAC3C,UAAID,IAAG,WAAW,OAAO,GAAG;AAC1B,cAAM,SAAS,MAAM,cAAc,OAAO;AAC1C,mBAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,uBAAa,GAAG,IAAI,IAAI,IAAI,EAAE,IAAI;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAGA,UAAM,WAAqB,CAAC;AAC5B,UAAM,UAAoB,CAAC;AAC3B,UAAM,WAAqB,CAAC;AAE5B,eAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC7D,YAAM,cAAcC,MAAK,WAAW,IAAI;AACxC,YAAM,eAAe,MAAM,iBAAiB,IAAI;AAChD,YAAM,cAAcD,IAAG,WAAW,WAAW,IAAI,SAAS,WAAW,IAAI;AAEzE,UAAI,CAAC,aAAa;AAEhB,iBAAS,KAAK,IAAI;AAAA,MACpB,WAAW,gBAAgB,cAAc;AAEvC,YAAI,eAAe,aAAa;AAC9B,mBAAS,KAAK,IAAI;AAAA,QACpB;AAAA,MACF,OAAO;AAEL,YAAI,eAAe,cAAc;AAC/B,kBAAQ,KAAK,IAAI;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,KAAK;AAGb,QAAI,SAAS,WAAW,KAAK,SAAS,WAAW,GAAG;AAClD,cAAQ,IAAIE,IAAG,MAAM,4BAAuB,CAAC;AAC7C,UAAI,QAAQ,SAAS,GAAG;AACtB,gBAAQ,IAAIA,IAAG,OAAO,KAAK,QAAQ,MAAM,qCAAqC,CAAC;AAAA,MACjF;AACA;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,KAAK,oBAAoB,CAAC;AACzC,YAAQ,IAAIA,IAAG,MAAM,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAC9D,YAAQ,IAAIA,IAAG,KAAK,KAAK,SAAS,MAAM,cAAc,CAAC;AACvD,QAAI,QAAQ,SAAS,GAAG;AACtB,cAAQ,IAAIA,IAAG,OAAO,KAAK,QAAQ,MAAM,qCAAqC,CAAC;AAAA,IACjF;AACA,YAAQ,IAAI,EAAE;AAGd,QAAI,QAAQ,QAAQ;AAClB,cAAQ,IAAIA,IAAG,KAAK,2BAA2B,CAAC;AAChD,cAAQ,IAAIA,IAAG,KAAK,gCAAgC,CAAC;AACrD,OAAC,GAAG,UAAU,GAAG,QAAQ,EAAE,QAAQ,OAAK,QAAQ,IAAIA,IAAG,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;AACtE,UAAI,QAAQ,SAAS,GAAG;AACtB,gBAAQ,IAAIA,IAAG,KAAK,gCAAgC,CAAC;AACrD,gBAAQ,QAAQ,OAAK,QAAQ,IAAIA,IAAG,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;AAAA,MACzD;AACA;AAAA,IACF;AAGA,QAAI,CAAC,QAAQ,OAAO;AAClB,YAAM,YAAY,MAAM,oBAAoB;AAAA,QAC1C,UAAU,CAAC,GAAG,UAAU,GAAG,QAAQ;AAAA,QACnC;AAAA,MACF,CAAC;AACD,UAAI,CAAC,WAAW;AACd,gBAAQ,IAAIA,IAAG,OAAO,YAAY,CAAC;AACnC;AAAA,MACF;AAAA,IACF;AAGA,UAAM,gBAAgBC,KAAI,qBAAqB,EAAE,MAAM;AAEvD,QAAI,UAAU;AACd,QAAI,SAAS;AAEb,eAAW,QAAQ,CAAC,GAAG,UAAU,GAAG,QAAQ,GAAG;AAC7C,UAAI;AACF,cAAM,UAAUF,MAAK,OAAO,WAAW,IAAI;AAC3C,cAAM,WAAWA,MAAK,WAAW,IAAI;AAErC,cAAMD,IAAG,UAAUC,MAAK,WAAW,KAAK,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;AAC1E,cAAMD,IAAG,KAAK,SAAS,UAAU,EAAE,WAAW,KAAK,CAAC;AACpD;AAAA,MACF,SAAS,KAAU;AACjB;AACA,YAAI,QAAQ,IAAI,OAAO;AACrB,kBAAQ,MAAM,oBAAoB,IAAI,KAAK,IAAI,OAAO,EAAE;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAGA,UAAM,YAAY,MAAM,cAAc,SAAS;AAC/C,UAAM,YAAY,YAAY;AAAA,MAC5B,QAAQ,OAAO;AAAA,MACf,gBAAgB;AAAA,IAClB,CAAC;AAED,kBAAc,QAAQE,IAAG,MAAM,WAAW,OAAO,UAAU,CAAC;AAE5D,QAAI,SAAS,GAAG;AACd,cAAQ,IAAIA,IAAG,OAAO,KAAK,MAAM,2BAA2B,CAAC;AAAA,IAC/D;AAEA,QAAI,QAAQ,SAAS,GAAG;AACtB,cAAQ,IAAIA,IAAG,KAAK;AAAA,kCAAqC,CAAC;AAC1D,cAAQ,MAAM,GAAG,CAAC,EAAE,QAAQ,OAAK,QAAQ,IAAIA,IAAG,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;AACnE,UAAI,QAAQ,SAAS,GAAG;AACtB,gBAAQ,IAAIA,IAAG,KAAK,aAAa,QAAQ,SAAS,CAAC,OAAO,CAAC;AAAA,MAC7D;AAAA,IACF;AAAA,EAEF,SAAS,OAAY;AACnB,YAAQ,KAAKA,IAAG,IAAI,eAAe,CAAC;AACpC,YAAQ,MAAMA,IAAG,IAAI,MAAM,OAAO,CAAC;AACnC,QAAI,QAAQ,IAAI,OAAO;AACrB,cAAQ,MAAM,MAAM,KAAK;AAAA,IAC3B;AAAA,EACF;AACF;AA5LA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AAAA;AAAA;;;ACPA;AAAA;AAAA;AAAA;AAAA,OAAOE,SAAQ;AAGf,OAAOC,SAAQ;AAEf,eAAsB,cAAc,UAA+B,CAAC,GAAkB;AACpF,QAAM,aAAa,QAAQ,IAAI;AAG/B,MAAI,CAAC,YAAY,UAAU,GAAG;AAC5B,YAAQ,IAAID,IAAG,IAAI,uBAAuB,CAAC;AAC3C,YAAQ,IAAIA,IAAG,KAAK,sBAAsB,CAAC;AAC3C;AAAA,EACF;AAGA,QAAM,QAAQ,MAAM,UAAU,UAAU;AACxC,MAAI,CAAC,OAAO;AACV,YAAQ,IAAIA,IAAG,OAAO,sBAAsB,CAAC;AAC7C,YAAQ,IAAIA,IAAG,KAAK,gDAAgD,CAAC;AACrE;AAAA,EACF;AAGA,UAAQ,IAAIA,IAAG,KAAKA,IAAG,KAAK,oBAAoB,CAAC,CAAC;AAClD,UAAQ,IAAIA,IAAG,MAAM,cAAc,MAAM,GAAG,EAAE,CAAC;AAC/C,UAAQ,IAAIA,IAAG,MAAM,cAAc,MAAM,MAAM,EAAE,CAAC;AAClD,UAAQ,IAAIA,IAAG,MAAM,cAAc,MAAM,MAAM,EAAE,CAAC;AAClD,UAAQ,IAAIA,IAAG,KAAK,cAAc,IAAI,KAAK,MAAM,SAAS,EAAE,mBAAmB,CAAC,EAAE,CAAC;AACnF,UAAQ,IAAIA,IAAG,KAAK,cAAc,IAAI,KAAK,MAAM,UAAU,EAAE,mBAAmB,CAAC,EAAE,CAAC;AACpF,UAAQ,IAAI,EAAE;AAGd,QAAM,SAAS,MAAM,gBAAgB,UAAU;AAE/C,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAIA,IAAG,IAAI,UAAU,OAAO,KAAK,EAAE,CAAC;AAC5C;AAAA,EACF;AAEA,QAAM,EAAE,SAAS,IAAI;AAGrB,QAAM,QAAQ,SAAS,UAAU,SAAS,SAAS,SAAS,SAAS,SAAS,MAAM;AACpF,UAAQ,IAAIA,IAAG,KAAK,cAAc,CAAC;AACnC,UAAQ,IAAIA,IAAG,MAAM,YAAO,SAAS,UAAU,MAAM,YAAY,CAAC;AAClE,MAAI,SAAS,SAAS,SAAS,GAAG;AAChC,YAAQ,IAAIA,IAAG,OAAO,OAAO,SAAS,SAAS,MAAM,WAAW,CAAC;AAAA,EACnE;AACA,MAAI,SAAS,MAAM,SAAS,GAAG;AAC7B,YAAQ,IAAIA,IAAG,KAAK,OAAO,SAAS,MAAM,MAAM,gBAAgB,CAAC;AAAA,EACnE;AACA,MAAI,SAAS,QAAQ,SAAS,GAAG;AAC/B,YAAQ,IAAIA,IAAG,IAAI,OAAO,SAAS,QAAQ,MAAM,UAAU,CAAC;AAAA,EAC9D;AACA,UAAQ,IAAIA,IAAG,KAAK,YAAY,KAAK,gBAAgB,CAAC;AACtD,UAAQ,IAAI,EAAE;AAGd,MAAI,SAAS,SAAS,SAAS,MAAM,QAAQ,WAAW,SAAS,SAAS,UAAU,KAAK;AACvF,YAAQ,IAAIA,IAAG,OAAO,iBAAiB,CAAC;AACxC,eAAW,QAAQ,SAAS,UAAU;AACpC,cAAQ,IAAIA,IAAG,OAAO,OAAO,IAAI,EAAE,CAAC;AAAA,IACtC;AACA,YAAQ,IAAI,EAAE;AAAA,EAChB,WAAW,SAAS,SAAS,SAAS,IAAI;AACxC,YAAQ,IAAIA,IAAG,OAAO,2DAA2D,CAAC;AAClF,eAAW,QAAQ,SAAS,SAAS,MAAM,GAAG,EAAE,GAAG;AACjD,cAAQ,IAAIA,IAAG,OAAO,OAAO,IAAI,EAAE,CAAC;AAAA,IACtC;AACA,YAAQ,IAAIA,IAAG,KAAK,aAAa,SAAS,SAAS,SAAS,EAAE,OAAO,CAAC;AACtE,YAAQ,IAAI,EAAE;AAAA,EAChB;AAGA,MAAI,SAAS,MAAM,SAAS,MAAM,QAAQ,WAAW,SAAS,MAAM,UAAU,IAAI;AAChF,YAAQ,IAAIA,IAAG,KAAK,gBAAgB,CAAC;AACrC,eAAW,QAAQ,SAAS,OAAO;AACjC,cAAQ,IAAIA,IAAG,KAAK,OAAO,IAAI,EAAE,CAAC;AAAA,IACpC;AACA,YAAQ,IAAI,EAAE;AAAA,EAChB;AAGA,MAAI,MAAM,WAAW;AACnB,YAAQ,IAAIA,IAAG,KAAK,uBAAuB,CAAC;AAC5C,UAAM,EAAE,QAAQ,QAAQ,UAAU,WAAW,QAAQ,MAAM,IAAI,MAAM;AAErE,QAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,cAAQ,IAAIA,IAAG,KAAK,gBAAgB,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,MAAM,EAAE,CAAC;AAAA,IACvF;AACA,QAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,cAAQ,IAAIA,IAAG,KAAK,gBAAgB,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,MAAM,EAAE,CAAC;AAAA,IACvF;AACA,QAAI,YAAY,SAAS,SAAS,GAAG;AACnC,cAAQ,IAAIA,IAAG,KAAK,gBAAgB,SAAS,SAAS,KAAK,IAAI,QAAQ,SAAS,MAAM,EAAE,CAAC;AAAA,IAC3F;AACA,QAAI,aAAa,UAAU,SAAS,GAAG;AACrC,cAAQ,IAAIA,IAAG,KAAK,gBAAgB,UAAU,SAAS,KAAK,IAAI,QAAQ,UAAU,MAAM,EAAE,CAAC;AAAA,IAC7F;AACA,QAAI,OAAQ,SAAQ,IAAIA,IAAG,KAAK,qBAAgB,CAAC;AACjD,QAAI,MAAO,SAAQ,IAAIA,IAAG,KAAK,qBAAgB,CAAC;AAChD,YAAQ,IAAI,EAAE;AAAA,EAChB;AAGA,MAAI,MAAM,UAAU,CAACC,IAAG,WAAW,MAAM,MAAM,GAAG;AAChD,YAAQ,IAAID,IAAG,OAAO,yDAAoD,CAAC;AAC3E,YAAQ,IAAIA,IAAG,KAAK,eAAe,MAAM,MAAM,EAAE,CAAC;AAClD,YAAQ,IAAI,EAAE;AAAA,EAChB;AACF;AA/GA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;;;ACFA;AAAA;AAAA;AAAA;AAAA,OAAOE,SAAQ;AACf,SAAS,QAAAC,aAAY;AACrB,OAAOC,SAAQ;AAuBf,eAAsB,cAAc,UAA+B,CAAC,GAAkD;AACpH,QAAM,aAAa,QAAQ,IAAI;AAG/B,MAAI,YAAkE;AACtE,aAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,OAAO,GAAG;AACpD,UAAM,MAAMD,MAAK,YAAY,MAAM;AACnC,QAAID,IAAG,WAAW,GAAG,GAAG;AACtB,kBAAY,EAAE,MAAM,QAAQ,IAAI;AAChC;AAAA,IACF;AAAA,EACF;AAGA,MAAI,QAAQ,MAAM,UAAU,UAAU;AAGtC,QAAM,SAAkB;AAAA,IACtB;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM,YAAY,UAAU;AAAA,MACnC,KAAK,YAAY;AACf,cAAMA,IAAG,UAAUC,MAAK,YAAY,KAAK,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM,UAAU;AAAA,MACvB,KAAK,YAAY;AAEf,cAAM,MAAM;AACZ,cAAM,SAAS;AACf,cAAM,SAAS,YAAY,UAAU,SAAS;AAG9C,cAAM,YAAiB,CAAC;AACxB,YAAI,WAAW;AACb,gBAAM,OAAO,CAAC,UAAU,UAAU,YAAY,WAAW;AACzD,qBAAW,OAAO,MAAM;AACtB,kBAAM,WAAWA,MAAK,UAAU,KAAK,GAAG;AACxC,gBAAID,IAAG,WAAW,QAAQ,GAAG;AAC3B,oBAAM,QAAQA,IAAG,YAAY,QAAQ,EAAE,OAAO,OAAK,CAAC,EAAE,WAAW,GAAG,CAAC;AACrE,kBAAI,MAAM,SAAS,GAAG;AACpB,0BAAU,GAAG,IAAI;AAAA,cACnB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,cAAM,mBAAmB,YAAY,EAAE,KAAK,QAAQ,QAAQ,UAAU,CAAC;AACvE,gBAAQ,MAAM,UAAU,UAAU;AAAA,MACpC;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM,cAAc;AAAA,MAC3B,SAAS,MAAM,YAAY,EAAE,QAAQ,UAAU,OAAO,IAAI,CAAC;AAAA,IAC7D;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAMA,IAAG,WAAWC,MAAK,YAAY,WAAW,CAAC;AAAA,IAC1D;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM;AACX,YAAI,CAAC,SAAS,CAAC,MAAM,OAAQ,QAAO;AACpC,eAAOD,IAAG,WAAW,MAAM,MAAM;AAAA,MACnC;AAAA,MACA,SAAS,MAAM,SAAS,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,IACrE;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM;AACX,YAAI,CAAC,UAAW,QAAO;AACvB,eAAOA,IAAG,WAAWC,MAAK,UAAU,KAAK,QAAQ,CAAC;AAAA,MACpD;AAAA,MACA,KAAK,YAAY;AACf,YAAI,WAAW;AACb,gBAAMD,IAAG,UAAUC,MAAK,UAAU,KAAK,QAAQ,CAAC;AAAA,QAClD;AAAA,MACF;AAAA,MACA,SAAS,MAAM;AACb,YAAI,CAAC,UAAW,QAAO,CAAC;AACxB,cAAM,WAAWA,MAAK,UAAU,KAAK,QAAQ;AAC7C,YAAID,IAAG,WAAW,QAAQ,GAAG;AAC3B,gBAAM,QAAQA,IAAG,YAAY,QAAQ,EAAE;AACvC,iBAAO,EAAE,MAAM;AAAA,QACjB;AACA,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM;AACX,YAAI,CAAC,UAAW,QAAO;AACvB,eAAOA,IAAG,WAAWC,MAAK,UAAU,KAAK,UAAU,CAAC;AAAA,MACtD;AAAA,MACA,KAAK,YAAY;AACf,YAAI,WAAW;AACb,gBAAMD,IAAG,UAAUC,MAAK,UAAU,KAAK,UAAU,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,MACA,SAAS,MAAM;AACb,YAAI,CAAC,UAAW,QAAO,CAAC;AACxB,cAAM,WAAWA,MAAK,UAAU,KAAK,UAAU;AAC/C,YAAID,IAAG,WAAW,QAAQ,GAAG;AAC3B,gBAAM,QAAQA,IAAG,YAAY,QAAQ,EAAE;AACvC,iBAAO,EAAE,MAAM;AAAA,QACjB;AACA,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM;AACX,YAAI,CAAC,UAAW,QAAO;AACvB,eAAOA,IAAG,WAAWC,MAAK,UAAU,KAAK,QAAQ,CAAC;AAAA,MACpD;AAAA,MACA,KAAK,YAAY;AACf,YAAI,WAAW;AACb,gBAAMD,IAAG,UAAUC,MAAK,UAAU,KAAK,QAAQ,CAAC;AAAA,QAClD;AAAA,MACF;AAAA,MACA,SAAS,MAAM;AACb,YAAI,CAAC,UAAW,QAAO,CAAC;AACxB,cAAM,WAAWA,MAAK,UAAU,KAAK,QAAQ;AAC7C,YAAID,IAAG,WAAW,QAAQ,GAAG;AAC3B,gBAAM,QAAQA,IAAG,YAAY,QAAQ,EAAE;AACvC,iBAAO,EAAE,MAAM;AAAA,QACjB;AACA,eAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM;AACX,YAAI,CAAC,UAAW,QAAO;AACvB,eAAOA,IAAG,WAAWC,MAAK,UAAU,KAAK,SAAS,CAAC;AAAA,MACrD;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM;AACX,YAAI,CAAC,UAAW,QAAO;AACvB,eAAOD,IAAG,WAAWC,MAAK,UAAU,KAAK,OAAO,CAAC;AAAA,MACnD;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO,MAAM;AACX,YAAI,CAAC,UAAW,QAAO;AACvB,eAAOD,IAAG,WAAWC,MAAK,UAAU,KAAK,gBAAgB,CAAC,KACnDD,IAAG,WAAWC,MAAK,UAAU,KAAK,eAAe,CAAC;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAGA,QAAM,UAAU,MAAM,UAAU,QAAQ,OAAO;AAG/C,MAAI,QAAQ,MAAM;AAChB,UAAM,WAAW,YAAY,OAAO;AACpC,WAAO,eAAe,OAAO;AAAA,EAC/B;AAEA,MAAI,QAAQ,QAAQ;AAClB,UAAM,aAAa,YAAY,SAAS,OAAO;AAAA,EACjD;AAEA,MAAI,QAAQ,WAAW;AACrB,UAAM,UAAU,eAAe,OAAO;AACtC,QAAI,QAAQ,SAAS,GAAG;AACtB,cAAQ,KAAK,CAAC;AAAA,IAChB,OAAO;AACL,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAGA,QAAM,cAAc,YAAY,SAAS,OAAO,SAAS;AAEzD,SAAO,eAAe,OAAO;AAC/B;AAEA,eAAe,UAAU,QAAiB,SAAsD;AAC9F,QAAM,UAAyB,CAAC;AAEhC,aAAW,KAAK,QAAQ;AACtB,UAAM,SAAS,MAAM,EAAE,MAAM;AAC7B,UAAM,OAAO,EAAE,UAAU,MAAM,EAAE,QAAQ,IAAI;AAC7C,UAAM,SAAsB;AAAA,MAC1B,MAAM,EAAE;AAAA,MACR,OAAO,EAAE;AAAA,MACT;AAAA,MACA,UAAU,EAAE;AAAA,MACZ;AAAA,IACF;AAEA,QAAI,CAAC,UAAU,QAAQ,OAAO,EAAE,KAAK;AACnC,UAAI;AACF,cAAM,EAAE,IAAI;AACZ,eAAO,QAAQ;AACf,eAAO,SAAS;AAAA,MAClB,SAAS,GAAQ;AACf,eAAO,WAAW,EAAE;AAAA,MACtB;AAAA,IACF;AAEA,YAAQ,KAAK,MAAM;AAAA,EACrB;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,SAA8D;AACpF,MAAI,SAAS;AACb,MAAI,WAAW;AAEf,aAAW,KAAK,SAAS;AACvB,QAAI,CAAC,EAAE,UAAU,EAAE,aAAa,SAAS;AACvC;AAAA,IACF;AACA,QAAI,CAAC,EAAE,UAAU,EAAE,aAAa,WAAW;AACzC;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAEA,eAAe,WAAW,YAAoB,SAAuC;AACnF,QAAM,UAAU,eAAe,OAAO;AACtC,QAAM,QAAQ,QAAQ,OAAO,OAAK,EAAE,KAAK,EAAE;AAE3C,QAAM,SAAS;AAAA,IACb,SAAS;AAAA,IACT,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IAClC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ,OAAO,OAAK,EAAE,MAAM,EAAE;AAAA,MACtC,QAAQ,QAAQ,OAAO,OAAK,CAAC,EAAE,MAAM,EAAE;AAAA,MACvC,UAAU,QAAQ;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,UAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC7C;AAEA,eAAe,aAAa,YAAoB,SAAwB,SAA6C;AACnH,QAAM,UAAU,eAAe,OAAO;AACtC,QAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AAEzC,MAAI,WAAW;AAAA;AAAA;AACf,cAAY,gBAAgB,UAAU;AAAA;AACtC,cAAY,kBAAkB,SAAS;AAAA;AAAA;AAEvC,cAAY;AAAA;AAAA;AACZ,cAAY,mBAAmB,QAAQ,MAAM;AAAA;AAC7C,cAAY,aAAa,QAAQ,OAAO,OAAK,EAAE,MAAM,EAAE,MAAM;AAAA;AAC7D,cAAY,aAAa,QAAQ,OAAO,OAAK,CAAC,EAAE,MAAM,EAAE,MAAM;AAAA;AAC9D,cAAY,aAAa,QAAQ,MAAM;AAAA;AACvC,cAAY,eAAe,QAAQ,QAAQ;AAAA;AAC3C,MAAI,QAAQ,KAAK;AACf,gBAAY,YAAY,QAAQ,OAAO,OAAK,EAAE,KAAK,EAAE,MAAM;AAAA;AAAA,EAC7D;AACA,cAAY;AAAA;AAEZ,cAAY;AAAA;AAAA;AACZ,aAAW,KAAK,SAAS;AACvB,UAAM,OAAO,EAAE,SAAS,WAAO,EAAE,aAAa,UAAU,WAAM;AAC9D,gBAAY,OAAO,IAAI,IAAI,EAAE,KAAK;AAAA;AAAA;AAClC,gBAAY,iBAAiB,EAAE,SAAS,SAAS,MAAM;AAAA;AACvD,gBAAY,mBAAmB,EAAE,QAAQ;AAAA;AACzC,QAAI,EAAE,OAAO;AACX,kBAAY;AAAA;AAAA,IACd;AACA,QAAI,EAAE,UAAU;AACd,kBAAY,oBAAoB,EAAE,QAAQ;AAAA;AAAA,IAC5C;AACA,QAAI,EAAE,QAAQ,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,GAAG;AAC5C,kBAAY,kBAAkB,KAAK,UAAU,EAAE,IAAI,CAAC;AAAA;AAAA,IACtD;AACA,gBAAY;AAAA;AAAA,EACd;AAEA,cAAY;AAAA;AAAA;AACZ,QAAM,eAAe,QAAQ,OAAO,OAAK,CAAC,EAAE,MAAM;AAClD,MAAI,aAAa,WAAW,GAAG;AAC7B,gBAAY;AAAA;AAAA,EACd,OAAO;AACL,eAAW,KAAK,cAAc;AAC5B,UAAI,EAAE,SAAS,WAAW;AACxB,oBAAY;AAAA;AAAA,MACd;AACA,UAAI,EAAE,SAAS,SAAS;AACtB,oBAAY;AAAA;AAAA,MACd;AACA,UAAI,EAAE,SAAS,YAAY,EAAE,MAAM,QAAQ;AACzC,oBAAY;AAAA;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAaA,MAAK,YAAY,OAAO,kBAAkB;AAC7D,QAAMD,IAAG,UAAUC,MAAK,YAAY,KAAK,CAAC;AAC1C,QAAMD,IAAG,UAAU,YAAY,UAAU,OAAO;AAEhD,MAAI,CAAC,QAAQ,MAAM;AACjB,YAAQ,IAAIE,IAAG,MAAM;AAAA,yBAAuB,UAAU;AAAA,CAAI,CAAC;AAAA,EAC7D;AACF;AAEA,eAAe,cACb,YACA,SACA,OACA,WACe;AACf,UAAQ,IAAIA,IAAG,KAAKA,IAAG,KAAK,sBAAsB,CAAC,CAAC;AACpD,UAAQ,IAAIA,IAAG,KAAK,8BAA8B,CAAC;AAGnD,aAAW,KAAK,SAAS;AACvB,QAAI,EAAE,QAAQ;AACZ,UAAI,MAAM,UAAK,EAAE,KAAK;AACtB,UAAI,EAAE,SAAS,YAAY,EAAE,MAAM,QAAQ;AACzC,eAAO,KAAK,EAAE,KAAK,MAAM;AAAA,MAC3B;AACA,UAAI,EAAE,KAAK,WAAW,UAAU,KAAK,EAAE,MAAM,UAAU,QAAW;AAChE,eAAO,KAAK,EAAE,KAAK,KAAK;AAAA,MAC1B;AACA,cAAQ,IAAIA,IAAG,MAAM,GAAG,CAAC;AAAA,IAC3B,OAAO;AACL,YAAM,OAAO,EAAE,aAAa,UAAU,WAAM;AAC5C,YAAM,QAAQ,EAAE,aAAa,UAAUA,IAAG,MAAMA,IAAG;AACnD,UAAI,MAAM,GAAG,IAAI,IAAI,EAAE,KAAK;AAC5B,UAAI,EAAE,SAAS,UAAU;AACvB,cAAM,GAAG,IAAI;AAAA,MACf;AACA,UAAI,EAAE,SAAS,aAAa;AAC1B,cAAM,GAAG,IAAI;AAAA,MACf;AACA,UAAI,EAAE,SAAS,YAAY,EAAE,MAAM,QAAQ;AACzC,cAAM,GAAG,IAAI,gCAAgC,EAAE,KAAK,MAAM;AAAA,MAC5D;AACA,UAAI,EAAE,KAAK,WAAW,UAAU,GAAG;AACjC,cAAM,MAAM,EAAE,KAAK,QAAQ,YAAY,EAAE;AACzC,cAAM,GAAG,IAAI,IAAI,GAAG;AAAA,MACtB;AACA,cAAQ,IAAI,MAAM,GAAG,CAAC;AAAA,IACxB;AAAA,EACF;AAGA,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAIA,IAAG,KAAK,mBAAmB,CAAC;AACxC,QAAM,SAAS,cAAc;AAC7B,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAIA,IAAG,OAAO,YAAO,OAAO,KAAK,EAAE,CAAC;AAAA,EAC9C,OAAO;AACL,YAAQ,IAAIA,IAAG,MAAM,0BAAqB,OAAO,IAAI,EAAE,CAAC;AACxD,YAAQ,IAAIA,IAAG,KAAK,aAAa,OAAO,QAAQ,SAAS,EAAE,CAAC;AAAA,EAC9D;AAGA,QAAM,UAAU,eAAe,OAAO;AACtC,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAIA,IAAG,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AAEnC,MAAI,QAAQ,WAAW,KAAK,QAAQ,aAAa,GAAG;AAClD,YAAQ,IAAIA,IAAG,KAAKA,IAAG,MAAM,+BAA0B,CAAC,CAAC;AAAA,EAC3D,WAAW,QAAQ,WAAW,GAAG;AAC/B,YAAQ,IAAIA,IAAG,OAAO;AAAA,SAAO,QAAQ,QAAQ;AAAA,CAAmC,CAAC;AAAA,EACnF,OAAO;AACL,YAAQ,IAAIA,IAAG,IAAI;AAAA,SAAO,QAAQ,MAAM,cAAc,QAAQ,QAAQ;AAAA,CAAe,CAAC;AAAA,EACxF;AAGA,MAAI,QAAQ,SAAS,KAAK,QAAQ,WAAW,GAAG;AAC9C,YAAQ,IAAIA,IAAG,KAAK,cAAc,CAAC;AAEnC,UAAM,YAAY,QAAQ,KAAK,OAAK,EAAE,SAAS,SAAS,GAAG;AAC3D,UAAM,WAAW,QAAQ,KAAK,OAAK,EAAE,SAAS,OAAO,GAAG;AAExD,QAAI,CAAC,WAAW;AACd,cAAQ,IAAIA,IAAG,MAAM,uDAAkD,CAAC;AAAA,IAC1E;AAEA,QAAI,CAAC,YAAY,WAAW;AAC1B,cAAQ,IAAIA,IAAG,MAAM,qEAAgE,CAAC;AAAA,IACxF;AAEA,QAAI,SAAS,MAAM,UAAU,CAACF,IAAG,WAAW,MAAM,MAAM,GAAG;AACzD,cAAQ,IAAIE,IAAG,MAAM,4DAAuD,CAAC;AAAA,IAC/E;AAEA,YAAQ,IAAI,EAAE;AAAA,EAChB;AACF;AAhcA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;;;ACJA;AAAA;AAAA;AAAA;AAAA,SAAS,YAAY;AACrB,OAAOC,SAAQ;AAIf,eAAsB,YAAY,SAA6C;AAC7E,UAAQ,IAAIA,IAAG,KAAK,iDAA0C,CAAC;AAC/D,UAAQ,IAAIA,IAAG,MAAM,MAAM,QAAQ;AAAA,CAAI,CAAC;AACxC,QAAM,cAAc,QAAQ,aAAa,WAAW,SAChC,QAAQ,aAAa,UAAU,UAAU;AAC7D,OAAK,GAAG,WAAW,IAAI,QAAQ,EAAE;AACnC;AAXA,IAGM;AAHN;AAAA;AAAA;AAGA,IAAM,WAAW;AAAA;AAAA;;;ACHjB;AAAA;AAAA;AAAA;AAAA,OAAOC,SAAQ;AACf,SAAS,QAAAC,aAAY;AACrB,OAAOC,SAAQ;AACf,OAAOC,UAAS;AAChB,YAAYC,QAAO;AAYnB,eAAsB,iBAAiB,SAA6C;AAClF,EAAE,SAAMF,IAAG,OAAOA,IAAG,MAAM,gBAAgB,CAAC,CAAC;AAG7C,QAAM,UAAgD,CAAC;AAEvD,MAAI,QAAQ,SAAU,CAAC,QAAQ,UAAU,CAAC,QAAQ,OAAQ;AACxD,YAAQ,KAAK,EAAE,MAAM,SAAS,KAAK,QAAQ,IAAI,EAAE,CAAC;AAAA,EACpD;AACA,MAAI,QAAQ,QAAQ;AAClB,YAAQ,KAAK,EAAE,MAAM,UAAU,KAAK,qBAAqB,EAAE,CAAC;AAAA,EAC9D;AAEA,MAAI,eAAe;AAEnB,aAAW,UAAU,SAAS;AAC5B,UAAM,QAAQ,MAAM,iBAAiB,OAAO,MAAM,OAAO,KAAK,OAAO;AACrE,oBAAgB;AAAA,EAClB;AAEA,MAAI,iBAAiB,GAAG;AACtB,IAAE,SAAMA,IAAG,OAAO,mCAAmC,CAAC;AAAA,EACxD,OAAO;AACL,IAAE,SAAMA,IAAG,MAAM,wBAAwB,YAAY,WAAW,CAAC;AAAA,EACnE;AACF;AAEA,eAAe,iBACb,MACA,KACA,SACiB;AACjB,QAAM,UAAUC,KAAI,YAAY,IAAI,oBAAoBD,IAAG,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM;AAG7E,QAAM,QAAQ,MAAM,UAAU,GAAG;AAGjC,QAAM,kBAAyD,CAAC;AAChE,aAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,OAAO,GAAG;AACpD,UAAM,aAAaD,MAAK,KAAK,MAAM;AACnC,QAAID,IAAG,WAAW,UAAU,GAAG;AAC7B,sBAAgB,KAAK,EAAE,MAAM,MAAM,WAAW,CAAC;AAAA,IACjD;AAAA,EACF;AAGA,QAAM,QAAQC,MAAK,KAAK,KAAK;AAC7B,QAAM,aAAaD,IAAG,WAAW,KAAK;AAEtC,MAAI,gBAAgB,WAAW,KAAK,CAAC,YAAY;AAC/C,YAAQ,KAAKE,IAAG,OAAO,+BAA+B,IAAI,EAAE,CAAC;AAC7D,WAAO;AAAA,EACT;AAEA,UAAQ,QAAQA,IAAG,MAAM,4BAA4B,IAAI,EAAE,CAAC;AAG5D,QAAM,cAAwB,CAAC;AAG/B,aAAW,UAAU,iBAAiB;AACpC,eAAW,UAAU,YAAY;AAC/B,YAAM,aAAaD,MAAK,OAAO,MAAM,MAAM;AAC3C,UAAID,IAAG,WAAW,UAAU,GAAG;AAC7B,oBAAY,KAAK,UAAU;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAGA,MAAI,YAAY;AACd,gBAAY,KAAK,KAAK;AAAA,EACxB;AAEA,MAAI,YAAY,WAAW,GAAG;AAC5B,YAAQ,IAAIE,IAAG,OAAO,6BAA6B,IAAI,EAAE,CAAC;AAC1D,WAAO;AAAA,EACT;AAGA,UAAQ,IAAIA,IAAG,KAAK;AAAA,yBAA4B,IAAI,GAAG,CAAC;AACxD,aAAW,QAAQ,aAAa;AAC9B,UAAM,eAAe,KAAK,QAAQ,MAAM,KAAK,EAAE;AAC/C,YAAQ,IAAIA,IAAG,IAAI,cAAS,YAAY,EAAE,CAAC;AAAA,EAC7C;AAEA,MAAI,OAAO;AACT,YAAQ,IAAIA,IAAG,IAAI;AAAA,SAAY,MAAM,GAAG,EAAE,CAAC;AAC3C,YAAQ,IAAIA,IAAG,IAAI,aAAa,MAAM,MAAM,EAAE,CAAC;AAAA,EACjD;AAEA,UAAQ,IAAIA,IAAG,OAAO;AAAA,qBAAwB,gBAAgB,KAAK,IAAI,CAAC,EAAE,CAAC;AAG3E,MAAI,QAAQ,QAAQ;AAClB,YAAQ,IAAIA,IAAG,OAAO;AAAA,2BAA8B,YAAY,MAAM,UAAU,CAAC;AACjF,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,QAAQ,KAAK;AAChB,UAAM,YAAY,MAAQ,WAAQ;AAAA,MAChC,SAAS,UAAU,YAAY,MAAM,iBAAiB,IAAI;AAAA,MAC1D,cAAc;AAAA,IAChB,CAAC;AAED,QAAM,YAAS,SAAS,KAAK,CAAC,WAAW;AACvC,cAAQ,IAAIA,IAAG,IAAI,cAAc,CAAC;AAClC,aAAO;AAAA,IACT;AAAA,EACF;AAGA,QAAM,SAAS,MAAM,YAAY,aAAa,GAAG;AAGjD,MAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,YAAQ,IAAIA,IAAG,MAAM;AAAA,mBAAiB,OAAO,QAAQ,MAAM,iBAAiB,IAAI,EAAE,CAAC;AACnF,eAAW,QAAQ,OAAO,SAAS;AACjC,YAAM,eAAe,KAAK,QAAQ,MAAM,KAAK,EAAE;AAC/C,cAAQ,IAAIA,IAAG,IAAI,cAAS,YAAY,EAAE,CAAC;AAAA,IAC7C;AAAA,EACF;AAEA,MAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,YAAQ,IAAIA,IAAG,IAAI;AAAA,4BAA0B,OAAO,OAAO,MAAM,WAAW,CAAC;AAC7E,eAAW,SAAS,OAAO,QAAQ;AACjC,YAAM,eAAe,MAAM,KAAK,QAAQ,MAAM,KAAK,EAAE;AACrD,cAAQ,IAAIA,IAAG,IAAI,cAAS,YAAY,KAAK,MAAM,KAAK,EAAE,CAAC;AAAA,IAC7D;AAAA,EACF;AAEA,SAAO,OAAO,QAAQ;AACxB;AAEA,eAAe,YAAY,OAAiB,SAA2C;AACrF,QAAM,SAA0B;AAAA,IAC9B,SAAS,CAAC;AAAA,IACV,QAAQ,CAAC;AAAA,EACX;AAEA,aAAW,QAAQ,OAAO;AAExB,QAAI,CAAC,KAAK,WAAW,OAAO,GAAG;AAC7B,aAAO,OAAO,KAAK;AAAA,QACjB;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AACD;AAAA,IACF;AAGA,UAAM,iBACJ,KAAK,SAAS,MAAM,KACpB,WAAW,KAAK,YAAU,KAAK,SAAS,IAAI,MAAM,EAAE,CAAC;AAEvD,QAAI,CAAC,gBAAgB;AACnB,aAAO,OAAO,KAAK;AAAA,QACjB;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AACD;AAAA,IACF;AAEA,QAAI;AACF,YAAMF,IAAG,OAAO,IAAI;AACpB,aAAO,QAAQ,KAAK,IAAI;AAAA,IAC1B,SAAS,OAAO;AACd,aAAO,OAAO,KAAK;AAAA,QACjB;AAAA,QACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAjMA,IAQM,iBACA;AATN;AAAA;AAAA;AAKA;AACA;AAEA,IAAM,kBAAkB,CAAC,aAAa,iBAAiB,WAAW;AAClE,IAAM,aAAa,CAAC,UAAU,UAAU,YAAY,aAAa,SAAS,QAAQ;AAAA;AAAA;;;ACTlF,SAAS,gBAAgB;AAMlB,SAAS,gBAAgB,UAAkB,iBAA2B;AAC3E,QAAM,SAAS,SAAS,yBAAyB,OAAO,KAAK;AAAA,IAC3D,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,EAChC,CAAC;AAED,SAAO,OAAO,MAAM,IAAI,EACrB,OAAO,UAAQ,KAAK,SAAS,YAAY,CAAC,EAC1C,IAAI,UAAQ;AACX,UAAM,MAAM,KAAK,MAAM,YAAY,EAAE,CAAC,GAAG,QAAQ,OAAO,EAAE;AAC1D,WAAO;AAAA,EACT,CAAC,EACA,OAAO,OAAO,EACd,OAAO,CAAC,GAAG,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC3C;AAEO,SAAS,WAAW,MAA0B;AACnD,SAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM;AAC9B,UAAM,KAAK,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,MAAM;AAC3C,UAAM,KAAK,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,MAAM;AAC3C,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK;AACvD,YAAM,KAAK,SAAS,GAAG,CAAC,CAAC,KAAK;AAC9B,YAAM,KAAK,SAAS,GAAG,CAAC,CAAC,KAAK;AAC9B,UAAI,OAAO,GAAI,QAAO,KAAK;AAAA,IAC7B;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAlCA,IAEM;AAFN;AAAA;AAAA;AAEA,IAAM,kBAAkB;AAAA;AAAA;;;ACFxB;AAAA;AAAA;AAAA;AAAA,OAAOK,UAAQ;AACf,OAAOC,UAAS;AAGhB,eAAsB,gBAAgB,SAA6C;AACjF,QAAM,UAAUA,KAAI,gCAAgC,EAAE,MAAM;AAE5D,MAAI;AACF,UAAM,OAAO,gBAAgB;AAC7B,YAAQ,KAAK;AAEb,QAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAC9B,cAAQ,IAAID,KAAG,OAAO,sBAAsB,CAAC;AAC7C;AAAA,IACF;AAGA,QAAI,WAAW;AACf,QAAI,CAAC,QAAQ,KAAK;AAChB,iBAAW,KAAK,OAAO,SAAO,CAAC,IAAI,SAAS,GAAG,CAAC;AAAA,IAClD;AAGA,UAAM,SAAS,WAAW,QAAQ;AAGlC,UAAM,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,OAAO,EAAE,IAAI;AAC5D,UAAM,UAAU,OAAO,MAAM,GAAG,KAAK;AAErC,YAAQ,IAAIA,KAAG,KAAK,yBAAyB,CAAC;AAE9C,YAAQ,QAAQ,CAAC,KAAK,UAAU;AAC9B,YAAM,WAAW,UAAU;AAC3B,YAAM,SAAS,WAAWA,KAAG,MAAM,WAAW,IAAI;AAClD,cAAQ,IAAI,KAAKA,KAAG,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE;AAAA,IAC1C,CAAC;AAED,QAAI,OAAO,SAAS,QAAQ,QAAQ;AAClC,cAAQ,IAAIA,KAAG,KAAK;AAAA,YAAe,OAAO,SAAS,QAAQ,MAAM,8BAA8B,CAAC;AAAA,IAClG;AAEA,YAAQ,IAAI,EAAE;AAAA,EAChB,SAAS,KAAU;AACjB,YAAQ,KAAK;AACb,YAAQ,IAAIA,KAAG,IAAI,6BAA6B,CAAC;AACjD,YAAQ,IAAIA,KAAG,KAAK,IAAI,OAAO,CAAC;AAEhC,QAAI,IAAI,QAAQ,SAAS,SAAS,GAAG;AACnC,cAAQ,IAAIA,KAAG,KAAK,yCAAyC,CAAC;AAAA,IAChE;AAAA,EACF;AACF;AAnDA;AAAA;AAAA;AAEA;AAAA;AAAA;;;ACFA;AAAA;AAAA;AAAA;AAAA,SAAS,YAAAE,iBAAgB;AACzB,OAAOC,UAAQ;AACf,OAAOC,UAAS;AAEhB,SAAS,oBAAoB;AAC7B,SAAS,QAAAC,cAAY;AAErB,SAAS,oBAA4B;AACnC,MAAI;AACF,UAAM,MAAM,KAAK,MAAM,aAAaA,OAAK,UAAU,cAAc,GAAG,OAAO,CAAC;AAC5E,WAAO,IAAI;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,mBAA2B;AAClC,QAAM,SAASH,UAAS,kCAAkC;AAAA,IACxD,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,EAChC,CAAC;AACD,SAAO,OAAO,KAAK;AACrB;AAEA,eAAsB,iBAAiB,SAA6C;AAClF,QAAM,UAAU,kBAAkB;AAClC,QAAM,UAAUE,KAAI,yBAAyB,EAAE,MAAM;AAErD,MAAI;AACF,UAAM,SAAS,QAAQ,WAAW,iBAAiB;AACnD,YAAQ,KAAK;AAEb,YAAQ,IAAI;AAAA,aAAgBD,KAAG,KAAK,OAAO,CAAC,EAAE;AAC9C,YAAQ,IAAI,cAAcA,KAAG,MAAM,MAAM,CAAC,EAAE;AAE5C,QAAI,YAAY,UAAU,CAAC,QAAQ,WAAW,CAAC,QAAQ,OAAO;AAC5D,cAAQ,IAAIA,KAAG,MAAM,uBAAuB,CAAC;AAC7C,cAAQ,IAAIA,KAAG,KAAK,kCAAkC,CAAC;AACvD;AAAA,IACF;AAEA,QAAI,QAAQ,OAAO;AACjB,cAAQ,IAAIA,KAAG,OAAO,qDAAqD,CAAC;AAC5E;AAAA,IACF;AAGA,UAAM,SAAS,QAAQ,WAAW;AAClC,UAAM,iBAAiBC,KAAI,4BAA4B,MAAM,KAAK,EAAE,MAAM;AAE1E,IAAAF,UAAS,gCAAgC,MAAM,IAAI;AAAA,MACjD,UAAU;AAAA,MACV,SAAS;AAAA,MACT,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,IAChC,CAAC;AAED,mBAAe,QAAQC,KAAG,MAAM,cAAc,MAAM,GAAG,CAAC;AAAA,EAC1D,SAAS,KAAU;AACjB,YAAQ,KAAK;AACb,YAAQ,IAAIA,KAAG,IAAI,kBAAkB,CAAC;AACtC,YAAQ,IAAIA,KAAG,KAAK,IAAI,OAAO,CAAC;AAChC,YAAQ,IAAIA,KAAG,KAAK,8CAA8C,CAAC;AAAA,EACrE;AACF;AAhEA;AAAA;AAAA;AAGA;AAAA;AAAA;;;ACHA;AAAA;AAAA;AAAA;AAAA,OAAOG,UAAQ;AACf,OAAOC,UAAQ;AACf,SAAS,QAAAC,cAAY;AACrB,YAAYC,QAAO;AAWnB,eAAsB,cAAc,SAA6C;AAC/E,QAAM,EAAE,MAAM,OAAO,MAAM,WAAW,WAAW,IAAI,IAAI;AAGzD,MAAI,QAAS,CAAC,QAAQ,CAAC,WAAY;AACjC,UAAM,qBAAqB;AAC3B;AAAA,EACF;AAGA,MAAI,aAAa,CAAC,MAAM;AACtB,UAAM,oBAAoB;AAC1B;AAAA,EACF;AAGA,MAAI,CAAC,MAAM;AACT,YAAQ,IAAIH,KAAG,IAAI,mCAAmC,CAAC;AACvD,YAAQ,IAAIA,KAAG,KAAK,kEAAkE,CAAC;AACvF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,eAAe,YAAY,KAAK;AAGtC,MAAI,WAAW;AACb,UAAM,eAAe,MAAM,cAAc,GAAG;AAC5C;AAAA,EACF;AAGA,QAAM,aAAa,MAAM,cAAc,GAAG;AAC5C;AAKA,eAAe,uBAAsC;AACnD,QAAM,SAAS,cAAc;AAC7B,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAIA,KAAG,IAAI,UAAU,OAAO,KAAK,EAAE,CAAC;AAC5C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,SAAS,cAAc,UAAU,OAAO,SAAS,EAAE,OAAO,OAAK,EAAE,KAAK;AAE5E,MAAI,OAAO,WAAW,GAAG;AACvB,YAAQ,IAAIA,KAAG,OAAO,2BAA2B,CAAC;AAClD;AAAA,EACF;AAEA,UAAQ,IAAIA,KAAG,KAAKA,KAAG,KAAK;AAAA,oBAAuB,OAAO,MAAM,IAAI,CAAC,CAAC;AACtE,UAAQ,IAAIA,KAAG,KAAK,WAAW,OAAO,IAAI;AAAA,CAAI,CAAC;AAG/C,QAAM,SAAS,UAAU,OAAO,EAAE,IAAI;AACtC,UAAQ,IAAIA,KAAG,KAAK,MAAM,CAAC;AAC3B,UAAQ,IAAIA,KAAG,KAAK,OAAO,SAAI,OAAO,EAAE,CAAC,CAAC;AAG1C,aAAW,SAAS,QAAQ;AAC1B,UAAM,kBAAkB,iBAAiB,MAAM,MAAM,QAAQ;AAC7D,UAAM,kBAAkB,iBAAiB,MAAM,MAAM,QAAQ;AAC7D,UAAM,iBAAiB,iBAAiB,MAAM,MAAM,OAAO;AAE3D,UAAM,aACJ,OACA,MAAM,KAAK,OAAO,EAAE,KACnB,kBAAkBA,KAAG,MAAM,QAAG,IAAIA,KAAG,KAAK,GAAG,GAAG,OAAO,CAAC,KACxD,kBAAkBA,KAAG,MAAM,QAAG,IAAIA,KAAG,KAAK,GAAG,GAAG,OAAO,CAAC,KACxD,iBAAiBA,KAAG,MAAM,QAAG,IAAIA,KAAG,KAAK,GAAG;AAE/C,YAAQ,IAAI,UAAU;AAAA,EACxB;AAEA,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAIA,KAAG,KAAK,iEAAiE,CAAC;AACtF,UAAQ,IAAI,EAAE;AAChB;AAKA,eAAe,sBAAqC;AAClD,UAAQ,IAAIA,KAAG,KAAKA,KAAG,KAAK,uBAAuB,CAAC,CAAC;AAErD,MAAI,SAAS;AAEb,aAAW,CAAC,WAAW,SAAS,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AACtE,UAAM,YAAY,mBAAmB,SAAS;AAC9C,QAAI,UAAU,SAAS,GAAG;AACxB,eAAS;AACT,cAAQ,IAAIA,KAAG,KAAK,KAAK,SAAS,GAAG,CAAC;AACtC,iBAAW,SAAS,WAAW;AAC7B,gBAAQ,IAAIA,KAAG,MAAM,cAAS,KAAK,EAAE,CAAC;AAAA,MACxC;AACA,cAAQ,IAAI,EAAE;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ;AACX,YAAQ,IAAIA,KAAG,KAAK,uBAAuB,CAAC;AAC5C,YAAQ,IAAI,EAAE;AAAA,EAChB;AACF;AAKA,eAAe,aAAa,WAAmB,QAAkB,aAAqC;AACpG,QAAM,SAAS,cAAc;AAC7B,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAIA,KAAG,IAAI,UAAU,OAAO,KAAK,EAAE,CAAC;AAC5C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,YAAYE,OAAK,OAAO,WAAW,UAAU,SAAS;AAC5D,MAAI,CAACD,KAAG,WAAW,SAAS,GAAG;AAC7B,YAAQ,IAAID,KAAG,IAAI,iBAAiB,SAAS,uBAAuB,CAAC;AACrE,YAAQ,IAAIA,KAAG,KAAK,oCAAoC,CAAC;AACzD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,MAAI,CAAC,aAAa;AAChB,UAAMI,WAAU,MAAQ,WAAQ;AAAA,MAC9B,SAAS,kBAAkB,SAAS,QAAQ,OAAO,KAAK,IAAI,CAAC;AAAA,IAC/D,CAAC;AAED,QAAM,YAASA,QAAO,KAAK,CAACA,UAAS;AACnC,cAAQ,IAAIJ,KAAG,KAAK,WAAW,CAAC;AAChC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAGA,QAAM,UAAsE,CAAC;AAE7E,aAAW,SAAS,QAAQ;AAC1B,QAAI;AACF,YAAM,aAAaE,OAAK,QAAQ,IAAI,GAAG,kBAAkB,KAAK,GAAG,SAAS;AAG1E,YAAMD,KAAG,UAAUC,OAAK,QAAQ,IAAI,GAAG,kBAAkB,KAAK,CAAC,CAAC;AAGhE,YAAMD,KAAG,KAAK,WAAW,YAAY,EAAE,WAAW,KAAK,CAAC;AAExD,cAAQ,KAAK,EAAE,OAAO,SAAS,KAAK,CAAC;AAAA,IACvC,SAAS,KAAU;AACjB,cAAQ,KAAK,EAAE,OAAO,SAAS,OAAO,OAAO,IAAI,QAAQ,CAAC;AAAA,IAC5D;AAAA,EACF;AAGA,UAAQ,IAAI,EAAE;AACd,QAAM,aAAa,QAAQ,MAAM,OAAK,EAAE,OAAO;AAE/C,MAAI,YAAY;AACd,YAAQ,IAAID,KAAG,MAAM,qBAAgB,SAAS,QAAQ,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAC5E,OAAO;AACL,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,SAAS;AAClB,gBAAQ,IAAIA,KAAG,MAAM,UAAK,OAAO,KAAK,aAAa,CAAC;AAAA,MACtD,OAAO;AACL,gBAAQ,IAAIA,KAAG,IAAI,UAAK,OAAO,KAAK,KAAK,OAAO,KAAK,EAAE,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AACA,UAAQ,IAAI,EAAE;AAChB;AAKA,eAAe,eAAe,WAAmB,QAAkB,aAAqC;AAEtG,QAAM,cAAc,OAAO,OAAO,WAAS,iBAAiB,WAAW,KAAK,CAAC;AAE7E,MAAI,YAAY,WAAW,GAAG;AAC5B,YAAQ,IAAIA,KAAG,OAAO,UAAU,SAAS,yBAAyB,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;AACtF,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,MAAI,CAAC,aAAa;AAChB,UAAMI,WAAU,MAAQ,WAAQ;AAAA,MAC9B,SAAS,oBAAoB,SAAS,UAAU,YAAY,KAAK,IAAI,CAAC;AAAA,IACxE,CAAC;AAED,QAAM,YAASA,QAAO,KAAK,CAACA,UAAS;AACnC,cAAQ,IAAIJ,KAAG,KAAK,WAAW,CAAC;AAChC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAGA,QAAM,UAAsE,CAAC;AAE7E,aAAW,SAAS,aAAa;AAC/B,QAAI;AACF,YAAM,aAAaE,OAAK,QAAQ,IAAI,GAAG,kBAAkB,KAAK,GAAG,SAAS;AAC1E,YAAMD,KAAG,OAAO,UAAU;AAC1B,cAAQ,KAAK,EAAE,OAAO,SAAS,KAAK,CAAC;AAAA,IACvC,SAAS,KAAU;AACjB,cAAQ,KAAK,EAAE,OAAO,SAAS,OAAO,OAAO,IAAI,QAAQ,CAAC;AAAA,IAC5D;AAAA,EACF;AAGA,UAAQ,IAAI,EAAE;AACd,QAAM,aAAa,QAAQ,MAAM,OAAK,EAAE,OAAO;AAE/C,MAAI,YAAY;AACd,YAAQ,IAAID,KAAG,MAAM,uBAAkB,SAAS,UAAU,YAAY,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EACrF,OAAO;AACL,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,SAAS;AAClB,gBAAQ,IAAIA,KAAG,MAAM,UAAK,OAAO,KAAK,eAAe,CAAC;AAAA,MACxD,OAAO;AACL,gBAAQ,IAAIA,KAAG,IAAI,UAAK,OAAO,KAAK,KAAK,OAAO,KAAK,EAAE,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AACA,UAAQ,IAAI,EAAE;AAChB;AAKA,SAAS,YAAY,WAA8B;AACjD,MAAI,CAAC,WAAW;AACd,WAAO,CAAC,QAAQ;AAAA,EAClB;AAEA,QAAM,SAAS,UAAU,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,EAAE,YAAY,CAAC;AACnE,QAAM,QAAQ,OAAO,OAAO,OAAK,KAAK,iBAAiB;AAEvD,MAAI,MAAM,WAAW,GAAG;AACtB,YAAQ,IAAIA,KAAG,IAAI,kCAAkC,CAAC;AACtD,YAAQ,IAAIA,KAAG,KAAK,qCAAqC,CAAC;AAC1D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,SAAO;AACT;AAKA,SAAS,iBAAiB,WAAmB,OAAwB;AACnE,QAAM,YAAYE,OAAK,QAAQ,IAAI,GAAG,kBAAkB,KAAK,GAAG,SAAS;AACzE,SAAOD,KAAG,WAAW,SAAS;AAChC;AAKA,SAAS,mBAAmB,OAAyB;AACnD,QAAM,YAAYC,OAAK,QAAQ,IAAI,GAAG,kBAAkB,KAAK,CAAC;AAE9D,MAAI,CAACD,KAAG,WAAW,SAAS,GAAG;AAC7B,WAAO,CAAC;AAAA,EACV;AAEA,MAAI;AACF,UAAM,QAAQA,KAAG,YAAY,SAAS;AACtC,WAAO,MAAM,OAAO,UAAQ;AAC1B,YAAM,WAAWC,OAAK,WAAW,IAAI;AACrC,aAAOD,KAAG,SAAS,QAAQ,EAAE,YAAY;AAAA,IAC3C,CAAC;AAAA,EACH,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAlSA,IAQM;AARN;AAAA;AAAA;AAIA;AACA;AAGA,IAAM,oBAA4C;AAAA,MAChD,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA;AAAA;;;ACXA,OAAO,SAAS;AAChB,SAAS,gBAAAI,qBAAoB;AAC7B,SAAS,iBAAAC,sBAAqB;AAC9B,SAAS,WAAAC,UAAS,QAAAC,cAAY;AAC9B,OAAOC,UAAQ;;;ACHR,SAAS,iBAAiBC,MAAgB;AAE/C,EAAAA,KACG,QAAQ,uBAAuB,4CAA4C,EAC3E,OAAO,oBAAoB,kEAAkE,EAC7F,OAAO,yBAAyB,uDAAuD,EACvF,OAAO,uBAAuB,kCAAkC,EAChE,OAAO,eAAe,8BAA8B,EACpD,OAAO,gBAAgB,wCAAwC,EAC/D,OAAO,WAAW,6CAA6C,EAC/D,OAAO,aAAa,4BAA4B,EAChD,OAAO,wBAAwB,sCAAsC,EACrE,OAAO,qBAAqB,oDAAoD,EAChF,OAAO,OAAO,aAAiC,YAAiC;AAC/E,UAAM,EAAE,aAAAC,aAAY,IAAI,MAAM;AAC9B,UAAMA,aAAY,aAAa,OAAO;AAAA,EACxC,CAAC;AAGH,EAAAD,KACG,QAAQ,cAAc,6DAA6D,EACnF,OAAO,uBAAuB,oBAAoB,EAClD,OAAO,qBAAqB,qBAAqB,EACjD,OAAO,OAAO,MAAc,YAAiC;AAC5D,UAAM,EAAE,YAAAE,YAAW,IAAI,MAAM;AAC7B,UAAMA,YAAW,MAAM,OAAO;AAAA,EAChC,CAAC;AAGH,EAAAF,KACG,QAAQ,eAAe,kDAAkD,EACzE,OAAO,uBAAuB,oBAAoB,EAClD,OAAO,OAAO,MAA0B,YAAiC;AACxE,UAAM,EAAE,aAAAG,aAAY,IAAI,MAAM;AAC9B,UAAMA,aAAY,MAAM,OAAO;AAAA,EACjC,CAAC;AAGH,EAAAH,KACG,QAAQ,UAAU,mCAAmC,EACrD,OAAO,uBAAuB,0BAA0B,EACxD,OAAO,YAAY,oBAAoB,EACvC,OAAO,YAAY,oBAAoB,EACvC,OAAO,cAAc,sBAAsB,EAC3C,OAAO,SAAS,mBAAmB,EACnC,OAAO,iBAAiB,mDAAmD,EAC3E,OAAO,eAAe,mCAAmC,EACzD,OAAO,OAAO,YAAiC;AAC9C,UAAM,EAAE,eAAAI,eAAc,IAAI,MAAM;AAChC,UAAMA,eAAc,OAAO;AAAA,EAC7B,CAAC;AAGH,EAAAJ,KACG,QAAQ,UAAU,sCAAsC,EACxD,OAAO,iBAAiB,gBAAgB,EACxC,OAAO,OAAO,YAAiC;AAC9C,UAAM,EAAE,eAAAK,eAAc,IAAI,MAAM;AAChC,UAAMA,eAAc,OAAO;AAAA,EAC7B,CAAC;AAGH,EAAAL,KACG,QAAQ,UAAU,0CAA0C,EAC5D,OAAO,SAAS,wBAAwB,EACxC,OAAO,YAAY,4BAA4B,EAC/C,OAAO,UAAU,oBAAoB,EACrC,OAAO,gBAAgB,6BAA6B,EACpD,OAAO,OAAO,YAAiC;AAC9C,UAAM,EAAE,eAAAM,eAAc,IAAI,MAAM;AAChC,UAAMA,eAAc,OAAO;AAAA,EAC7B,CAAC;AAGH,EAAAN,KACG,QAAQ,QAAQ,yBAAyB,EACzC,OAAO,YAAY;AAClB,UAAM,EAAE,aAAAG,aAAY,IAAI,MAAM;AAC9B,UAAMA,aAAY,QAAQ,CAAC,CAAC;AAAA,EAC9B,CAAC;AAGH,EAAAH,KACG,QAAQ,QAAQ,gDAAgD,EAChE,OAAO,uBAAuB,oBAAoB,EAClD,OAAO,OAAO,YAAiC;AAC9C,UAAM,EAAE,aAAAO,aAAY,IAAI,MAAM;AAC9B,UAAMA,aAAY,OAAO;AAAA,EAC3B,CAAC;AAGH,EAAAP,KACG,QAAQ,aAAa,gCAAgC,EACrD,OAAO,aAAa,mBAAmB,EACvC,OAAO,eAAe,mCAAmC,EACzD,OAAO,gBAAgB,oCAAoC,EAC3D,OAAO,aAAa,+BAA+B,EACnD,OAAO,OAAO,YAAiC;AAC9C,UAAM,EAAE,kBAAAQ,kBAAiB,IAAI,MAAM;AACnC,UAAMA,kBAAiB,OAAO;AAAA,EAChC,CAAC;AAGH,EAAAR,KACG,QAAQ,YAAY,yBAAyB,EAC7C,OAAO,eAAe,eAAe,EACrC,OAAO,mBAAmB,4BAA4B,EACtD,OAAO,SAAS,gCAAgC,EAChD,OAAO,OAAO,YAAiC;AAC9C,UAAM,EAAE,iBAAAS,iBAAgB,IAAI,MAAM;AAClC,UAAMA,iBAAgB,OAAO;AAAA,EAC/B,CAAC;AAGH,EAAAT,KACG,QAAQ,cAAc,yCAAyC,EAC/D,OAAO,WAAW,sCAAsC,EACxD,OAAO,uBAAuB,4BAA4B,EAC1D,OAAO,eAAe,4CAA4C,EAClE,OAAO,OAAO,YAAiC;AAC9C,UAAM,EAAE,kBAAAU,kBAAiB,IAAI,MAAM;AACnC,UAAMA,kBAAiB,OAAO;AAAA,EAChC,CAAC;AAGH,EAAAV,KACG,QAAQ,UAAU,oCAAoC,EACtD,OAAO,sBAAsB,YAAY,EACzC,OAAO,wBAAwB,eAAe,EAC9C,OAAO,cAAc,uBAAuB,EAC5C,OAAO,eAAe,uBAAuB,EAC7C,OAAO,mBAAmB,iBAAiB,EAC3C,OAAO,aAAa,mBAAmB,EACvC,OAAO,OAAO,YAAiC;AAC9C,UAAM,EAAE,eAAAW,eAAc,IAAI,MAAM;AAChC,UAAMA,eAAc,OAAO;AAAA,EAC7B,CAAC;AACL;;;AC3IA,SAAS,QAAAC,cAAY;AACrB,SAAS,WAAAC,gBAAe;AACxB,SAAS,cAAAC,aAAY,gBAAAC,eAAc,eAAe,iBAAiB;AAGnE,IAAM,YAAYC,OAAKC,SAAQ,GAAG,YAAY;AAC9C,IAAM,aAAaD,OAAK,WAAW,oBAAoB;AACvD,IAAM,YAAY,IAAI,KAAK,KAAK,KAAK;AA0C9B,SAAS,0BAAyC;AACvD,MAAI;AACF,QAAIE,YAAW,UAAU,GAAG;AAC1B,YAAM,QAAsB,KAAK,MAAMC,cAAa,YAAY,OAAO,CAAC;AACxE,aAAO,MAAM;AAAA,IACf;AAAA,EACF,QAAQ;AAAA,EAAe;AACvB,SAAO;AACT;AAKO,SAAS,eAAe,SAAiB,QAAyB;AACvE,QAAM,IAAI,QAAQ,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AACzD,QAAM,IAAI,OAAO,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AACxD,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,SAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,GAAI,QAAO;AACtC,SAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK,GAAI,QAAO;AAAA,EACxC;AACA,SAAO;AACT;;;AF7DA,IAAMC,cAAaC,eAAc,YAAY,GAAG;AAChD,IAAMC,aAAYC,SAAQH,WAAU;AAEpC,SAAS,aAAqB;AAC5B,MAAI;AACF,UAAM,MAAM,KAAK,MAAMI,cAAaC,OAAKH,YAAW,MAAM,cAAc,GAAG,OAAO,CAAC;AACnF,WAAO,IAAI;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,MAAM,IAAI,IAAI;AACpB,iBAAiB,GAAG;AACpB,IAAI,KAAK;AACT,IAAI,QAAQ,WAAW,CAAC;AACxB,IAAI,MAAM;AAGV,IAAI;AACF,QAAM,UAAU,WAAW;AAC3B,QAAM,eAAe,wBAAwB;AAC7C,MAAI,gBAAgB,eAAe,SAAS,YAAY,GAAG;AACzD,YAAQ,IAAII,KAAG,OAAO;AAAA,uBAA0B,OAAO,YAAO,YAAY,EAAE,CAAC;AAC7E,YAAQ,IAAIA,KAAG,KAAK,mCAAmC,CAAC;AAAA,EAC1D;AACF,QAAQ;AAAe;","names":["join","dirname","fs","join","fs","join","kit","fs","join","resolve","pc","p","fs","join","pc","ora","pc","fs","join","pc","ora","pc","fs","fs","join","pc","pc","fs","join","pc","ora","p","pc","ora","execSync","pc","ora","join","pc","fs","join","p","confirm","readFileSync","fileURLToPath","dirname","join","pc","cli","initCommand","addCommand","listCommand","updateCommand","statusCommand","doctorCommand","helpCommand","uninstallCommand","versionsCommand","updateCliCommand","skillsCommand","join","homedir","existsSync","readFileSync","join","homedir","existsSync","readFileSync","__filename","fileURLToPath","__dirname","dirname","readFileSync","join","pc"]}
1
+ {"version":3,"sources":["../src/kits/index.ts","../src/utils/paths.ts","../src/utils/copy.ts","../src/utils/hash.ts","../src/utils/state.ts","../src/utils/prompts.ts","../src/commands/init.ts","../src/commands/add.ts","../src/commands/list.ts","../src/commands/update.ts","../src/commands/status.ts","../src/commands/doctor.ts","../src/commands/help.ts","../src/commands/uninstall.ts","../src/utils/git-tags.ts","../src/commands/versions.ts","../src/commands/update-cli.ts","../src/commands/skills.ts","../src/index.ts","../src/cli/command-registry.ts","../src/utils/version-check.ts"],"sourcesContent":["export interface Kit {\n name: string;\n description: string;\n emoji: string;\n color: string;\n agents: string[] | 'all';\n commands: string[] | 'all';\n skills: string[] | 'all';\n workflows: string[] | 'all';\n includeRouter: boolean;\n includeHooks: boolean;\n}\n\nexport const KITS: Record<string, Kit> = {\n engineer: {\n name: 'engineer',\n description: 'Full-stack development kit for building applications',\n emoji: '🛠️',\n color: 'blue',\n agents: [\n 'planner',\n 'debugger',\n 'fullstack-developer',\n 'tester',\n 'code-reviewer',\n 'git-manager',\n 'database-admin'\n ],\n commands: [\n 'plan', 'plan/parallel', 'plan/fast', 'plan/hard',\n 'code', 'code/auto', 'code/parallel',\n 'fix', 'fix/test', 'fix/types', 'fix/fast', 'fix/ci',\n 'test', 'test/ui',\n 'review', 'review/codebase',\n 'scout', 'build', 'lint'\n ],\n skills: [\n 'frontend-development',\n 'backend-development',\n 'databases',\n 'debugging',\n 'code-review',\n 'planning',\n 'problem-solving'\n ],\n workflows: ['feature-development', 'bug-fixing'],\n includeRouter: true,\n includeHooks: true\n },\n\n researcher: {\n name: 'researcher',\n description: 'Research and analysis kit for exploring codebases',\n emoji: '🔬',\n color: 'green',\n agents: [\n 'researcher',\n 'scout',\n 'scout-external',\n 'brainstormer',\n 'docs-manager',\n 'planner'\n ],\n commands: [\n 'scout', 'scout/ext',\n 'investigate', 'brainstorm',\n 'docs', 'docs/init', 'docs/update', 'docs/summarize',\n 'plan', 'ask', 'context'\n ],\n skills: [\n 'research',\n 'planning-with-files',\n 'documentation',\n 'project-index'\n ],\n workflows: [],\n includeRouter: true,\n includeHooks: false\n },\n\n designer: {\n name: 'designer',\n description: 'UI/UX design and frontend development kit',\n emoji: '🎨',\n color: 'magenta',\n agents: [\n 'ui-ux-designer',\n 'fullstack-developer',\n 'code-reviewer'\n ],\n commands: [\n 'code', 'fix', 'fix/ui', 'test/ui', 'review'\n ],\n skills: [\n 'ui-ux-pro-max',\n 'frontend-development',\n 'frontend-design'\n ],\n workflows: [],\n includeRouter: false,\n includeHooks: true\n },\n\n minimal: {\n name: 'minimal',\n description: 'Lightweight kit with essential agents only',\n emoji: '📦',\n color: 'yellow',\n agents: ['planner', 'debugger'],\n commands: ['plan', 'fix', 'code'],\n skills: ['planning', 'debugging'],\n workflows: [],\n includeRouter: false,\n includeHooks: false\n },\n\n full: {\n name: 'full',\n description: 'Complete kit with ALL agents, commands, and skills',\n emoji: '🚀',\n color: 'cyan',\n agents: 'all',\n commands: 'all',\n skills: 'all',\n workflows: 'all',\n includeRouter: true,\n includeHooks: true\n }\n};\n\nexport const getKit = (name: string): Kit | null => KITS[name] || null;\nexport const getKitNames = (): string[] => Object.keys(KITS);\nexport const getKitList = (): Kit[] => Object.values(KITS);\n","import { fileURLToPath } from 'url';\nimport { dirname, join, resolve } from 'path';\nimport { existsSync, statSync } from 'fs';\nimport { homedir } from 'os';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// When bundled with tsup, all code is in dist/index.js, so __dirname is 'dist'\n// When unbundled (dev), this file is in src/utils, so __dirname is 'src/utils'\n// We need to go up one level from dist, or two levels from src/utils\nexport const CLI_ROOT = __dirname.endsWith('dist')\n ? resolve(__dirname, '..')\n : resolve(__dirname, '../..');\nexport const TEMPLATES_DIR = join(CLI_ROOT, 'templates');\n\nexport const TARGETS: Record<string, string> = {\n claude: '.claude',\n gemini: '.gemini',\n opencode: '.opencode',\n generic: '.agent'\n};\n\nexport type CliTarget = 'claude' | 'gemini';\n\nexport interface SourceInfo {\n path: string;\n type: string;\n claudeDir: string;\n agentsMd: string | null;\n error?: undefined;\n}\n\nexport interface SourceError {\n error: string;\n}\n\n/**\n * Get embedded templates (bundled with CLI)\n */\nexport function getEmbeddedTemplates(): SourceInfo | null {\n if (existsSync(TEMPLATES_DIR)) {\n const agentsMd = join(TEMPLATES_DIR, 'AGENTS.md');\n return {\n path: TEMPLATES_DIR,\n type: 'embedded',\n claudeDir: TEMPLATES_DIR,\n agentsMd: existsSync(agentsMd) ? agentsMd : null\n };\n }\n return null;\n}\n\n/**\n * Get global installation path\n */\nexport function getGlobalInstallPath(): string {\n if (process.platform === 'win32') {\n return join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'claude');\n }\n return join(homedir(), '.claude');\n}\n\n/**\n * Check if current directory is an ak project\n */\nexport function isAkProject(dir: string = process.cwd()): boolean {\n const akConfig = join(dir, '.ak', 'state.json');\n const claudeDir = join(dir, '.claude');\n const geminiDir = join(dir, '.gemini');\n const opencodeDir = join(dir, '.opencode');\n const agentDir = join(dir, '.agent');\n\n return existsSync(akConfig) ||\n existsSync(claudeDir) ||\n existsSync(geminiDir) ||\n existsSync(opencodeDir) ||\n existsSync(agentDir);\n}\n\n/**\n * Get target directory path\n */\nexport function getTargetDir(projectDir: string, target: string = 'claude'): string {\n const folder = TARGETS[target] || TARGETS.claude;\n return join(projectDir, folder);\n}\n\n/**\n * Resolve source path (from --source flag or embedded templates)\n * Priority: 1. --source flag 2. Embedded templates\n */\nexport function resolveSource(sourceFlag?: string): SourceInfo | SourceError {\n // 1. If --source flag provided, use it\n if (sourceFlag) {\n const resolved = resolve(sourceFlag);\n if (!existsSync(resolved)) {\n return { error: `Source path not found: ${sourceFlag}` };\n }\n\n // Check if it's a valid source\n const claudeDir = join(resolved, '.claude');\n const opencodeDir = join(resolved, '.opencode');\n\n if (existsSync(claudeDir)) {\n return {\n path: resolved,\n type: 'custom',\n claudeDir,\n agentsMd: existsSync(join(resolved, 'AGENTS.md')) ? join(resolved, 'AGENTS.md') : null\n };\n }\n\n if (existsSync(opencodeDir)) {\n return {\n path: resolved,\n type: 'custom',\n claudeDir: opencodeDir,\n agentsMd: existsSync(join(resolved, 'AGENTS.md')) ? join(resolved, 'AGENTS.md') : null\n };\n }\n\n // If source flag points directly to a templates dir (no .claude wrapper)\n if (existsSync(join(resolved, 'agents')) || existsSync(join(resolved, 'commands'))) {\n return {\n path: resolved,\n type: 'custom',\n claudeDir: resolved,\n agentsMd: existsSync(join(resolved, 'AGENTS.md')) ? join(resolved, 'AGENTS.md') : null\n };\n }\n\n return { error: `No templates found in: ${sourceFlag}` };\n }\n\n // 2. Use embedded templates (bundled with CLI)\n const embedded = getEmbeddedTemplates();\n if (embedded) {\n return embedded;\n }\n\n return {\n error: 'No templates found. Reinstall: npm install -g apero-kit-cli'\n };\n}\n","import fs from 'fs-extra';\nimport { join, basename, dirname } from 'path';\nimport type { CliTarget } from './paths.js';\nimport { CLI_ROOT } from './paths.js';\n\n/**\n * Parse frontmatter from markdown file\n */\nfunction parseFrontmatter(content: string): { description: string; argumentHint: string; body: string } {\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n\n if (!frontmatterMatch) {\n return { description: '', argumentHint: '', body: content };\n }\n\n const frontmatter = frontmatterMatch[1];\n const body = frontmatterMatch[2].trim();\n\n const descMatch = frontmatter.match(/description:\\s*(.+)/);\n const argMatch = frontmatter.match(/argument-hint:\\s*(.+)/);\n\n return {\n description: descMatch ? descMatch[1].trim() : '',\n argumentHint: argMatch ? argMatch[1].trim() : '',\n body\n };\n}\n\n/**\n * Escape TOML basic string (single line)\n */\nfunction escapeTomlBasicString(str: string): string {\n return str\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\t/g, '\\\\t');\n}\n\n/**\n * Convert Claude MD command to Gemini TOML format\n * Uses literal strings (''') for prompts to avoid escape issues\n */\nexport function convertMdToToml(mdContent: string): string {\n const { description, body } = parseFrontmatter(mdContent);\n\n // Convert $ARGUMENTS to {{args}}\n const prompt = body.replace(/\\$ARGUMENTS/g, '{{args}}');\n\n const lines: string[] = [];\n\n if (description) {\n // Use basic string for short description (escape special chars)\n lines.push(`description = \"${escapeTomlBasicString(description)}\"`);\n }\n\n // Use multi-line LITERAL strings (''') for prompt - no escape processing\n // This avoids issues with backslashes in shell commands\n lines.push(`prompt = '''\\n${prompt}\\n'''`);\n\n return lines.join('\\n');\n}\n\nexport interface CopyResult {\n copied: string[];\n skipped: string[];\n errors: Array<{ item: string; error: string }>;\n}\n\nexport interface CopyStatusResult {\n success: boolean;\n error?: string;\n}\n\nexport interface AvailableItem {\n name: string;\n isDir: boolean;\n path: string;\n}\n\n/**\n * Copy specific items from source to destination\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyItems(\n items: string[],\n type: string,\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyResult> {\n const typeDir = join(sourceDir, type);\n const destTypeDir = join(destDir, type);\n\n if (!fs.existsSync(typeDir)) {\n return { copied: [], skipped: items, errors: [] };\n }\n\n await fs.ensureDir(destTypeDir);\n\n const copied: string[] = [];\n const skipped: string[] = [];\n const errors: Array<{ item: string; error: string }> = [];\n\n for (const item of items) {\n try {\n // Handle nested paths like \"plan/parallel\"\n const itemPath = join(typeDir, item);\n const itemPathMd = itemPath + '.md';\n\n let srcPath: string;\n if (fs.existsSync(itemPath)) {\n srcPath = itemPath;\n } else if (fs.existsSync(itemPathMd)) {\n srcPath = itemPathMd;\n } else {\n skipped.push(item);\n continue;\n }\n\n // Determine destination path\n const stat = fs.statSync(srcPath);\n if (stat.isDirectory()) {\n await fs.copy(srcPath, join(destTypeDir, item), { overwrite: !mergeMode });\n } else {\n // Preserve directory structure for nested items\n const destPath = srcPath.endsWith('.md')\n ? join(destTypeDir, item + '.md')\n : join(destTypeDir, item);\n await fs.ensureDir(join(destTypeDir, item.split('/').slice(0, -1).join('/')));\n await fs.copy(srcPath, destPath, { overwrite: !mergeMode });\n }\n\n copied.push(item);\n } catch (err: any) {\n errors.push({ item, error: err.message });\n }\n }\n\n return { copied, skipped, errors };\n}\n\n/**\n * Copy all items of a type\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyAllOfType(\n type: string,\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyStatusResult> {\n const typeDir = join(sourceDir, type);\n const destTypeDir = join(destDir, type);\n\n if (!fs.existsSync(typeDir)) {\n return { success: false, error: `${type} directory not found` };\n }\n\n try {\n await fs.copy(typeDir, destTypeDir, { overwrite: !mergeMode });\n return { success: true };\n } catch (err: any) {\n return { success: false, error: err.message };\n }\n}\n\n/**\n * Copy router directory\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyRouter(\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyStatusResult> {\n const routerDir = join(sourceDir, 'router');\n\n if (!fs.existsSync(routerDir)) {\n return { success: false, error: 'Router directory not found' };\n }\n\n try {\n await fs.copy(routerDir, join(destDir, 'router'), { overwrite: !mergeMode });\n return { success: true };\n } catch (err: any) {\n return { success: false, error: err.message };\n }\n}\n\n/**\n * Copy hooks directory\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyHooks(\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyStatusResult> {\n const hooksDir = join(sourceDir, 'hooks');\n\n if (!fs.existsSync(hooksDir)) {\n return { success: false, error: 'Hooks directory not found' };\n }\n\n try {\n await fs.copy(hooksDir, join(destDir, 'hooks'), { overwrite: !mergeMode });\n return { success: true };\n } catch (err: any) {\n return { success: false, error: err.message };\n }\n}\n\n/**\n * Copy workflows directory\n */\nexport async function copyWorkflows(\n items: string[] | 'all',\n sourceDir: string,\n destDir: string\n): Promise<CopyResult | CopyStatusResult> {\n if (items === 'all') {\n return copyAllOfType('workflows', sourceDir, destDir);\n }\n return copyItems(items, 'workflows', sourceDir, destDir);\n}\n\n/**\n * Copy base files (README, settings, statusline, etc.)\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyBaseFiles(\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<string[]> {\n const baseFiles = ['README.md', 'settings.json', '.env.example', 'statusline.cjs', 'statusline.ps1', 'statusline.sh'];\n const copied: string[] = [];\n\n for (const file of baseFiles) {\n const srcPath = join(sourceDir, file);\n const destPath = join(destDir, file);\n\n // Skip if merge mode and file exists\n if (mergeMode && fs.existsSync(destPath)) {\n continue;\n }\n\n if (fs.existsSync(srcPath)) {\n await fs.copy(srcPath, destPath, { overwrite: !mergeMode });\n copied.push(file);\n }\n }\n\n return copied;\n}\n\n/**\n * Copy a directory (memory, output-styles, scripts, etc.)\n * @param {boolean} mergeMode - If true, skip existing files\n */\nexport async function copyDirectory(\n dirName: string,\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyStatusResult> {\n const srcPath = join(sourceDir, dirName);\n\n if (!fs.existsSync(srcPath)) {\n return { success: false, error: `${dirName} directory not found` };\n }\n\n try {\n await fs.copy(srcPath, join(destDir, dirName), { overwrite: !mergeMode });\n return { success: true };\n } catch (err: any) {\n return { success: false, error: err.message };\n }\n}\n\n/**\n * Copy AGENTS.md to project root\n * @param {boolean} mergeMode - If true, skip if file exists\n */\nexport async function copyAgentsMd(\n agentsMdPath: string | null,\n projectDir: string,\n mergeMode: boolean = false\n): Promise<boolean> {\n if (!agentsMdPath || !fs.existsSync(agentsMdPath)) {\n return false;\n }\n\n const destPath = join(projectDir, 'AGENTS.md');\n\n // Skip if merge mode and file exists\n if (mergeMode && fs.existsSync(destPath)) {\n return false;\n }\n\n await fs.copy(agentsMdPath, destPath, { overwrite: !mergeMode });\n return true;\n}\n\n/**\n * List available items of a type\n */\nexport function listAvailable(type: string, sourceDir: string): AvailableItem[] {\n const typeDir = join(sourceDir, type);\n\n if (!fs.existsSync(typeDir)) {\n return [];\n }\n\n const items = fs.readdirSync(typeDir);\n return items.map(item => {\n const itemPath = join(typeDir, item);\n const isDir = fs.statSync(itemPath).isDirectory();\n const name = item.replace(/\\.md$/, '');\n return { name, isDir, path: itemPath };\n });\n}\n\n/**\n * Copy commands to Gemini target (converts MD to TOML)\n */\nexport async function copyCommandsForGemini(\n items: string[] | 'all',\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyResult> {\n const typeDir = join(sourceDir, 'commands');\n const destTypeDir = join(destDir, 'commands');\n\n if (!fs.existsSync(typeDir)) {\n return { copied: [], skipped: [], errors: [] };\n }\n\n await fs.ensureDir(destTypeDir);\n\n const copied: string[] = [];\n const skipped: string[] = [];\n const errors: Array<{ item: string; error: string }> = [];\n\n // Get all items if 'all'\n let itemList: string[];\n if (items === 'all') {\n // Get top-level items (files and directories)\n const entries = fs.readdirSync(typeDir);\n itemList = entries.map(e => e.replace(/\\.md$/, ''));\n // Remove duplicates (plan.md and plan/ both become 'plan')\n itemList = [...new Set(itemList)];\n } else {\n itemList = items;\n }\n\n for (const item of itemList) {\n try {\n const srcPathMd = join(typeDir, item + '.md');\n const srcPathDir = join(typeDir, item);\n\n // Handle both file and directory with same name (e.g., plan.md AND plan/)\n let copiedSomething = false;\n\n // 1. Check if .md file exists - convert it\n if (fs.existsSync(srcPathMd) && fs.statSync(srcPathMd).isFile()) {\n const destPath = join(destTypeDir, item + '.toml');\n\n if (!(mergeMode && fs.existsSync(destPath))) {\n await fs.ensureDir(dirname(destPath));\n const mdContent = fs.readFileSync(srcPathMd, 'utf-8');\n const tomlContent = convertMdToToml(mdContent);\n await fs.writeFile(destPath, tomlContent, 'utf-8');\n copiedSomething = true;\n }\n }\n\n // 2. Check if directory exists - convert recursively\n if (fs.existsSync(srcPathDir) && fs.statSync(srcPathDir).isDirectory()) {\n await convertDirectoryToToml(srcPathDir, join(destTypeDir, item), mergeMode);\n copiedSomething = true;\n }\n\n if (copiedSomething) {\n copied.push(item);\n } else {\n skipped.push(item);\n }\n } catch (err: any) {\n errors.push({ item, error: err.message });\n }\n }\n\n return { copied, skipped, errors };\n}\n\n/**\n * Recursively convert a directory of MD files to TOML\n */\nasync function convertDirectoryToToml(\n srcDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<void> {\n await fs.ensureDir(destDir);\n\n const entries = fs.readdirSync(srcDir);\n\n for (const entry of entries) {\n const srcPath = join(srcDir, entry);\n const stat = fs.statSync(srcPath);\n\n if (stat.isDirectory()) {\n await convertDirectoryToToml(srcPath, join(destDir, entry), mergeMode);\n } else if (entry.endsWith('.md')) {\n const destPath = join(destDir, entry.replace(/\\.md$/, '.toml'));\n\n if (mergeMode && fs.existsSync(destPath)) {\n continue;\n }\n\n const mdContent = fs.readFileSync(srcPath, 'utf-8');\n const tomlContent = convertMdToToml(mdContent);\n await fs.writeFile(destPath, tomlContent, 'utf-8');\n } else {\n // Copy non-MD files as-is\n const destPath = join(destDir, entry);\n if (mergeMode && fs.existsSync(destPath)) {\n continue;\n }\n await fs.copy(srcPath, destPath, { overwrite: !mergeMode });\n }\n }\n}\n\n/**\n * List all files recursively (relative paths)\n */\nfunction listAvailableRecursive(dir: string, base: string = ''): string[] {\n const results: string[] = [];\n const entries = fs.readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const relativePath = base ? `${base}/${entry}` : entry;\n const stat = fs.statSync(fullPath);\n\n if (stat.isDirectory()) {\n results.push(...listAvailableRecursive(fullPath, relativePath));\n } else {\n results.push(relativePath);\n }\n }\n\n return results;\n}\n\n/**\n * Convert Claude agent MD to Gemini-compatible format\n * Maps Claude model names to Gemini equivalents\n * Converts tools from string to array format\n */\nfunction convertAgentForGemini(mdContent: string): string {\n // Parse frontmatter\n const frontmatterMatch = mdContent.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/);\n if (!frontmatterMatch) return mdContent;\n\n let frontmatter = frontmatterMatch[1];\n const body = frontmatterMatch[2];\n\n // Map Claude models to Gemini models\n const modelMap: Record<string, string> = {\n 'opus': 'gemini-2.5-pro',\n 'sonnet': 'gemini-2.5-flash',\n 'haiku': 'gemini-2.0-flash-lite',\n 'inherit': '' // Remove inherit, let Gemini use default\n };\n\n // Replace model field\n for (const [claudeModel, geminiModel] of Object.entries(modelMap)) {\n const regex = new RegExp(`^model:\\\\s*${claudeModel}\\\\s*$`, 'm');\n if (geminiModel) {\n frontmatter = frontmatter.replace(regex, `model: ${geminiModel}`);\n } else {\n // Remove the model line if it's 'inherit'\n frontmatter = frontmatter.replace(regex, '');\n }\n }\n\n // Convert tools from string to array format\n // Claude: \"tools: Glob, Grep, Read, Bash\"\n // Gemini: \"tools: [Glob, Grep, Read, Bash]\"\n const toolsMatch = frontmatter.match(/^tools:\\s*(.+)$/m);\n if (toolsMatch) {\n const toolsValue = toolsMatch[1].trim();\n // Check if already array format\n if (!toolsValue.startsWith('[')) {\n // Convert comma-separated string to array\n const toolsArray = toolsValue.split(',').map(t => t.trim());\n frontmatter = frontmatter.replace(\n /^tools:\\s*.+$/m,\n `tools: [${toolsArray.join(', ')}]`\n );\n }\n }\n\n // Add kind: local if not present\n if (!frontmatter.includes('kind:')) {\n frontmatter = frontmatter.trim() + '\\nkind: local';\n }\n\n return `---\\n${frontmatter.trim()}\\n---\\n${body}`;\n}\n\n/**\n * Copy agents to Gemini target (converts Claude agent format)\n * Gemini agents: .gemini/agents/*.md\n */\nexport async function copyAgentsForGemini(\n items: string[] | 'all',\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyResult> {\n const typeDir = join(sourceDir, 'agents');\n const destTypeDir = join(destDir, 'agents');\n\n if (!fs.existsSync(typeDir)) {\n return { copied: [], skipped: [], errors: [] };\n }\n\n await fs.ensureDir(destTypeDir);\n\n const copied: string[] = [];\n const skipped: string[] = [];\n const errors: Array<{ item: string; error: string }> = [];\n\n // Get agent files\n let agentList: string[];\n if (items === 'all') {\n const entries = fs.readdirSync(typeDir);\n agentList = entries\n .filter(e => e.endsWith('.md') && e !== 'README.md')\n .map(e => e.replace(/\\.md$/, ''));\n } else {\n agentList = items;\n }\n\n for (const agent of agentList) {\n try {\n const srcPath = join(typeDir, agent + '.md');\n\n if (!fs.existsSync(srcPath)) {\n skipped.push(agent);\n continue;\n }\n\n const destPath = join(destTypeDir, agent + '.md');\n\n // Skip if merge mode and destination exists\n if (mergeMode && fs.existsSync(destPath)) {\n skipped.push(agent);\n continue;\n }\n\n // Convert and write\n const mdContent = fs.readFileSync(srcPath, 'utf-8');\n const convertedContent = convertAgentForGemini(mdContent);\n await fs.writeFile(destPath, convertedContent, 'utf-8');\n copied.push(agent);\n } catch (err: any) {\n errors.push({ item: agent, error: err.message });\n }\n }\n\n return { copied, skipped, errors };\n}\n\n/**\n * Copy skills to Gemini target (skills use same SKILL.md format)\n * Gemini skills: .gemini/skills/<skill-name>/SKILL.md\n */\nexport async function copySkillsForGemini(\n items: string[] | 'all',\n sourceDir: string,\n destDir: string,\n mergeMode: boolean = false\n): Promise<CopyResult> {\n const typeDir = join(sourceDir, 'skills');\n const destTypeDir = join(destDir, 'skills');\n\n if (!fs.existsSync(typeDir)) {\n return { copied: [], skipped: [], errors: [] };\n }\n\n await fs.ensureDir(destTypeDir);\n\n const copied: string[] = [];\n const skipped: string[] = [];\n const errors: Array<{ item: string; error: string }> = [];\n\n // Get skill directories\n let skillList: string[];\n if (items === 'all') {\n const entries = fs.readdirSync(typeDir);\n skillList = entries.filter(e => {\n const fullPath = join(typeDir, e);\n return fs.statSync(fullPath).isDirectory() && fs.existsSync(join(fullPath, 'SKILL.md'));\n });\n } else {\n skillList = items;\n }\n\n for (const skill of skillList) {\n try {\n const srcPath = join(typeDir, skill);\n\n // Check if it's a valid skill directory with SKILL.md\n if (!fs.existsSync(srcPath) || !fs.statSync(srcPath).isDirectory()) {\n skipped.push(skill);\n continue;\n }\n\n const skillMdPath = join(srcPath, 'SKILL.md');\n if (!fs.existsSync(skillMdPath)) {\n skipped.push(skill);\n continue;\n }\n\n const destPath = join(destTypeDir, skill);\n\n // Skip if merge mode and destination exists\n if (mergeMode && fs.existsSync(destPath)) {\n skipped.push(skill);\n continue;\n }\n\n // Copy entire skill directory (SKILL.md + references, assets, etc.)\n await fs.copy(srcPath, destPath, { overwrite: !mergeMode });\n copied.push(skill);\n } catch (err: any) {\n errors.push({ skill, error: err.message });\n }\n }\n\n return { copied, skipped, errors };\n}\n\n/**\n * Copy Gemini-specific base files (settings.json with plan mode enabled)\n */\nexport async function copyGeminiBaseFiles(\n destDir: string,\n mergeMode: boolean = false\n): Promise<string[]> {\n const geminiTemplates = join(CLI_ROOT, 'templates', 'gemini');\n const copied: string[] = [];\n\n // Copy settings.json if exists\n const settingsPath = join(geminiTemplates, 'settings.json');\n const destSettingsPath = join(destDir, 'settings.json');\n\n if (fs.existsSync(settingsPath)) {\n // Skip if merge mode and file exists\n if (mergeMode && fs.existsSync(destSettingsPath)) {\n return copied;\n }\n\n await fs.copy(settingsPath, destSettingsPath, { overwrite: !mergeMode });\n copied.push('settings.json');\n }\n\n return copied;\n}\n\n/**\n * Copy only unchanged files (for update)\n */\nexport async function copyUnchangedOnly(\n sourceDir: string,\n destDir: string,\n unchangedFiles: string[]\n): Promise<{ copied: string[]; skipped: string[] }> {\n const copied: string[] = [];\n const skipped: string[] = [];\n\n for (const file of unchangedFiles) {\n const srcPath = join(sourceDir, file);\n const destPath = join(destDir, file);\n\n if (fs.existsSync(srcPath)) {\n await fs.ensureDir(join(destDir, file.split('/').slice(0, -1).join('/')));\n await fs.copy(srcPath, destPath, { overwrite: true });\n copied.push(file);\n } else {\n skipped.push(file);\n }\n }\n\n return { copied, skipped };\n}\n","import { createHash } from 'crypto';\nimport fs from 'fs-extra';\nimport { join, relative } from 'path';\n\n/**\n * Calculate MD5 hash of a file\n */\nexport function hashFile(filePath: string): string | null {\n if (!fs.existsSync(filePath)) {\n return null;\n }\n\n const content = fs.readFileSync(filePath);\n return createHash('md5').update(content).digest('hex');\n}\n\n/**\n * Calculate hashes for all files in a directory\n */\nexport async function hashDirectory(dirPath: string, baseDir: string = dirPath): Promise<Record<string, string>> {\n const hashes: Record<string, string> = {};\n\n if (!fs.existsSync(dirPath)) {\n return hashes;\n }\n\n const items = await fs.readdir(dirPath, { withFileTypes: true });\n\n for (const item of items) {\n const itemPath = join(dirPath, item.name);\n const relativePath = relative(baseDir, itemPath);\n\n if (item.isDirectory()) {\n const subHashes = await hashDirectory(itemPath, baseDir);\n Object.assign(hashes, subHashes);\n } else if (item.isFile()) {\n const hash = hashFile(itemPath);\n if (hash) {\n hashes[relativePath] = hash;\n }\n }\n }\n\n return hashes;\n}\n\nexport interface HashComparison {\n unchanged: string[];\n modified: string[];\n added: string[];\n deleted: string[];\n}\n\n/**\n * Compare two hash maps and return differences\n */\nexport function compareHashes(original: Record<string, string>, current: Record<string, string>): HashComparison {\n const result: HashComparison = {\n unchanged: [],\n modified: [],\n added: [],\n deleted: []\n };\n\n // Check original files\n for (const [path, hash] of Object.entries(original)) {\n if (current[path] === undefined) {\n result.deleted.push(path);\n } else if (current[path] !== hash) {\n result.modified.push(path);\n } else {\n result.unchanged.push(path);\n }\n }\n\n // Check for new files\n for (const path of Object.keys(current)) {\n if (original[path] === undefined) {\n result.added.push(path);\n }\n }\n\n return result;\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport { hashDirectory } from './hash.js';\n\nconst STATE_DIR = '.ak';\nconst STATE_FILE = 'state.json';\n\nexport interface ProjectState {\n version: string;\n createdAt: string;\n lastUpdate: string;\n kit: string;\n source: string;\n target: string;\n targets?: string[]; // Multiple CLI targets (claude, gemini)\n installed: {\n agents?: string[];\n skills?: string[];\n commands?: string[];\n workflows?: string[];\n router?: boolean;\n hooks?: boolean;\n };\n originalHashes: Record<string, string>;\n}\n\n/**\n * Get state file path\n */\nexport function getStatePath(projectDir: string): string {\n return join(projectDir, STATE_DIR, STATE_FILE);\n}\n\n/**\n * Load state from .ak/state.json\n */\nexport async function loadState(projectDir: string): Promise<ProjectState | null> {\n const statePath = getStatePath(projectDir);\n\n if (!fs.existsSync(statePath)) {\n return null;\n }\n\n try {\n return await fs.readJson(statePath);\n } catch {\n return null;\n }\n}\n\n/**\n * Save state to .ak/state.json\n */\nexport async function saveState(projectDir: string, state: ProjectState): Promise<void> {\n const stateDir = join(projectDir, STATE_DIR);\n const statePath = join(stateDir, STATE_FILE);\n\n await fs.ensureDir(stateDir);\n await fs.writeJson(statePath, state, { spaces: 2 });\n}\n\nexport interface CreateStateOptions {\n kit: string;\n source: string;\n target: string;\n targets?: string[];\n installed: ProjectState['installed'];\n}\n\n/**\n * Create initial state after init\n */\nexport async function createInitialState(projectDir: string, options: CreateStateOptions): Promise<ProjectState> {\n const { kit, source, target, targets, installed } = options;\n\n // Calculate hashes for all target directories\n const allHashes: Record<string, string> = {};\n const targetList = targets || [target.replace('.', '')]; // fallback to single target\n\n for (const t of targetList) {\n const targetDirName = t.startsWith('.') ? t : `.${t}`;\n const targetDir = join(projectDir, targetDirName);\n if (fs.existsSync(targetDir)) {\n const hashes = await hashDirectory(targetDir);\n // Prefix hashes with target name for uniqueness\n for (const [path, hash] of Object.entries(hashes)) {\n allHashes[`${targetDirName}/${path}`] = hash;\n }\n }\n }\n\n const state: ProjectState = {\n version: '1.0.0',\n createdAt: new Date().toISOString(),\n lastUpdate: new Date().toISOString(),\n kit,\n source,\n target,\n targets,\n installed,\n originalHashes: allHashes\n };\n\n await saveState(projectDir, state);\n return state;\n}\n\n/**\n * Update state after update command\n */\nexport async function updateState(projectDir: string, updates: Partial<ProjectState>): Promise<ProjectState> {\n const state = await loadState(projectDir);\n\n if (!state) {\n throw new Error('No state found. Is this an ak project?');\n }\n\n const targetDir = join(projectDir, state.target || '.claude');\n const newHashes = await hashDirectory(targetDir);\n\n const updatedState: ProjectState = {\n ...state,\n ...updates,\n lastUpdate: new Date().toISOString(),\n originalHashes: newHashes\n };\n\n await saveState(projectDir, updatedState);\n return updatedState;\n}\n\nexport interface FileStatuses {\n state: ProjectState;\n statuses: {\n unchanged: string[];\n modified: string[];\n added: string[];\n deleted: string[];\n };\n targetDir: string;\n}\n\nexport interface FileStatusError {\n error: string;\n}\n\n/**\n * Get file status (unchanged, modified, added, deleted)\n */\nexport async function getFileStatuses(projectDir: string): Promise<FileStatuses | FileStatusError> {\n const state = await loadState(projectDir);\n\n if (!state) {\n return { error: 'No state found' };\n }\n\n const targetDir = join(projectDir, state.target || '.claude');\n const currentHashes = await hashDirectory(targetDir);\n const originalHashes = state.originalHashes || {};\n\n const statuses = {\n unchanged: [] as string[],\n modified: [] as string[],\n added: [] as string[],\n deleted: [] as string[]\n };\n\n // Check original files\n for (const [path, hash] of Object.entries(originalHashes)) {\n if (currentHashes[path] === undefined) {\n statuses.deleted.push(path);\n } else if (currentHashes[path] !== hash) {\n statuses.modified.push(path);\n } else {\n statuses.unchanged.push(path);\n }\n }\n\n // Check for new files\n for (const path of Object.keys(currentHashes)) {\n if (originalHashes[path] === undefined) {\n statuses.added.push(path);\n }\n }\n\n return {\n state,\n statuses,\n targetDir\n };\n}\n","import * as p from '@clack/prompts';\nimport pc from 'picocolors';\nimport { getKitList } from '../kits/index.js';\nimport { listAvailable } from './copy.js';\nimport type { CliTarget } from './paths.js';\n\nexport async function promptProjectName(): Promise<string> {\n const name = await p.text({\n message: 'Project name:',\n placeholder: 'my-project',\n validate: (value) => {\n if (!value || !value.trim()) return 'Project name is required';\n if (!/^[a-zA-Z0-9-_]+$/.test(String(value))) return 'Only letters, numbers, dashes, underscores';\n }\n });\n if (p.isCancel(name)) process.exit(0);\n return name as string;\n}\n\nexport async function promptKit(): Promise<string> {\n const kits = getKitList();\n const options = [\n ...kits.map((kit) => ({\n value: kit.name,\n label: `${kit.emoji} ${kit.name}`,\n hint: kit.description\n })),\n { value: 'custom', label: '🔧 custom', hint: 'Pick your own agents, skills, and commands' }\n ];\n const kit = await p.select({ message: 'Select a kit:', options });\n if (p.isCancel(kit)) process.exit(0);\n return kit as string;\n}\n\nexport async function promptTarget(): Promise<string> {\n const target = await p.select({\n message: 'Target folder:',\n options: [\n { value: 'claude', label: '.claude/', hint: 'Claude Code' },\n { value: 'gemini', label: '.gemini/', hint: 'Gemini CLI' },\n { value: 'opencode', label: '.opencode/', hint: 'OpenCode' },\n { value: 'generic', label: '.agent/', hint: 'Generic' }\n ]\n });\n if (p.isCancel(target)) process.exit(0);\n return target as string;\n}\n\nexport async function promptCliTargets(): Promise<CliTarget[]> {\n const selection = await p.select({\n message: 'Select AI CLI target:',\n options: [\n { value: 'claude', label: 'Claude Code only', hint: '.claude/' },\n { value: 'gemini', label: 'Gemini CLI only', hint: '.gemini/' },\n { value: 'both', label: 'Both Claude + Gemini', hint: '.claude/ + .gemini/' }\n ]\n });\n if (p.isCancel(selection)) process.exit(0);\n\n if (selection === 'both') {\n return ['claude', 'gemini'];\n }\n return [selection as CliTarget];\n}\n\nexport async function promptAgents(sourceDir: string): Promise<string[]> {\n const available = listAvailable('agents', sourceDir);\n if (available.length === 0) return [];\n const selected = await p.multiselect({\n message: 'Select agents:',\n options: available.map((item) => ({\n value: item.name,\n label: item.name,\n hint: ['planner', 'debugger'].includes(item.name) ? '(recommended)' : undefined\n })),\n initialValues: ['planner', 'debugger'].filter(n => available.some((a) => a.name === n))\n });\n if (p.isCancel(selected)) process.exit(0);\n return selected as string[];\n}\n\nexport async function promptSkills(sourceDir: string): Promise<string[]> {\n const available = listAvailable('skills', sourceDir).filter((s) => s.isDir);\n if (available.length === 0) return [];\n const selected = await p.multiselect({\n message: 'Select skills:',\n options: available.map((item) => ({\n value: item.name,\n label: item.name,\n hint: ['planning', 'debugging'].includes(item.name) ? '(recommended)' : undefined\n })),\n initialValues: ['planning', 'debugging'].filter(n => available.some((a) => a.name === n))\n });\n if (p.isCancel(selected)) process.exit(0);\n return selected as string[];\n}\n\nexport async function promptCommands(sourceDir: string): Promise<string[]> {\n const available = listAvailable('commands', sourceDir);\n if (available.length === 0) return [];\n const selected = await p.multiselect({\n message: 'Select commands:',\n options: available.map((item) => ({\n value: item.name,\n label: item.name,\n hint: ['plan', 'fix', 'code'].includes(item.name) ? '(recommended)' : undefined\n })),\n initialValues: ['plan', 'fix', 'code'].filter(n => available.some((a) => a.name === n))\n });\n if (p.isCancel(selected)) process.exit(0);\n return selected as string[];\n}\n\nexport async function promptIncludeRouter(): Promise<boolean> {\n const result = await p.confirm({ message: 'Include router?', initialValue: true });\n if (p.isCancel(result)) process.exit(0);\n return result as boolean;\n}\n\nexport async function promptIncludeHooks(): Promise<boolean> {\n const result = await p.confirm({ message: 'Include hooks?', initialValue: false });\n if (p.isCancel(result)) process.exit(0);\n return result as boolean;\n}\n\nexport async function promptConfirm(message: string, defaultValue: boolean = true): Promise<boolean> {\n const result = await p.confirm({ message, initialValue: defaultValue });\n if (p.isCancel(result)) process.exit(0);\n return result as boolean;\n}\n\nexport async function promptExistingTarget(targetPath: string): Promise<string> {\n const action = await p.select({\n message: `${targetPath} already exists. What do you want to do?`,\n options: [\n { value: 'override', label: 'Override', hint: 'Replace all files' },\n { value: 'merge', label: 'Merge', hint: 'Only add missing files' },\n { value: 'skip', label: 'Skip', hint: 'Do nothing' }\n ]\n });\n if (p.isCancel(action)) process.exit(0);\n return action as string;\n}\n\nexport async function promptUpdateConfirm(updates: { toUpdate: string[]; skipped: string[] }): Promise<boolean> {\n console.log(pc.cyan('\\nChanges to apply:'));\n if (updates.toUpdate.length > 0) {\n console.log(pc.green(' Will update:'));\n updates.toUpdate.slice(0, 10).forEach(f => console.log(pc.green(` ✓ ${f}`)));\n if (updates.toUpdate.length > 10) console.log(pc.gray(` ... and ${updates.toUpdate.length - 10} more`));\n }\n if (updates.skipped.length > 0) {\n console.log(pc.yellow(' Will skip (modified locally):'));\n updates.skipped.slice(0, 5).forEach(f => console.log(pc.yellow(` ~ ${f}`)));\n if (updates.skipped.length > 5) console.log(pc.gray(` ... and ${updates.skipped.length - 5} more`));\n }\n console.log('');\n return promptConfirm('Apply these updates?', true);\n}\n","import fs from 'fs-extra';\nimport { join, resolve } from 'path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { KITS, getKit } from '../kits/index.js';\nimport { resolveSource, getTargetDir, TARGETS, getGlobalInstallPath, type CliTarget } from '../utils/paths.js';\nimport { copyItems, copyAllOfType, copyRouter, copyHooks, copyBaseFiles, copyAgentsMd, copyDirectory, copyCommandsForGemini, copySkillsForGemini, copyAgentsForGemini, copyGeminiBaseFiles } from '../utils/copy.js';\nimport { createInitialState } from '../utils/state.js';\nimport {\n promptProjectName,\n promptKit,\n promptTarget,\n promptAgents,\n promptSkills,\n promptCommands,\n promptIncludeRouter,\n promptIncludeHooks,\n promptConfirm,\n promptExistingTarget,\n promptCliTargets\n} from '../utils/prompts.js';\n\n/**\n * Filter components based on --exclude and --only patterns\n */\nfunction filterComponents(list: string[] | 'all', exclude?: string, only?: string): string[] | 'all' {\n if (!list || list === 'all') return list;\n let filtered = [...list];\n\n if (only) {\n const patterns = only.split(',').map(s => s.trim());\n filtered = filtered.filter(item => patterns.some(p => item.includes(p)));\n }\n\n if (exclude) {\n const patterns = exclude.split(',').map(s => s.trim());\n filtered = filtered.filter(item => !patterns.some(p => item.includes(p)));\n }\n\n return filtered;\n}\n\nexport async function initCommand(projectName: string | undefined, options: Record<string, any>): Promise<void> {\n console.log('');\n\n // 1. Get project name (support current directory with \".\" or empty)\n let projectDir: string;\n let isCurrentDir = false;\n\n // Handle --global flag\n if (options.global) {\n projectDir = getGlobalInstallPath();\n isCurrentDir = true;\n console.log(pc.cyan(`Installing globally to ${projectDir}`));\n } else if (!projectName || projectName === '.') {\n // Use current directory\n projectDir = process.cwd();\n projectName = '.';\n isCurrentDir = true;\n console.log(pc.gray(`Initializing in current directory: ${projectDir}`));\n } else {\n projectDir = resolve(process.cwd(), projectName);\n }\n\n // 2. Get CLI targets (Claude, Gemini, or both)\n let cliTargets: CliTarget[];\n if (options.target) {\n // Support comma-separated targets: --target claude,gemini\n const targetsFromFlag = options.target.split(',').map((t: string) => t.trim()) as CliTarget[];\n cliTargets = targetsFromFlag.filter(t => t === 'claude' || t === 'gemini');\n if (cliTargets.length === 0) {\n console.log(pc.yellow(`Unknown target \"${options.target}\", using \"claude\"`));\n cliTargets = ['claude'];\n }\n } else if (!process.stdin.isTTY || options.yes) {\n cliTargets = ['claude'];\n } else {\n cliTargets = await promptCliTargets();\n }\n\n // Check existing for each target\n let existingAction: string | null = null;\n const existingTargets: string[] = [];\n\n for (const target of cliTargets) {\n const targetDir = getTargetDir(projectDir, target);\n\n // Handle --fresh flag (remove existing installation)\n if (options.fresh && fs.existsSync(targetDir)) {\n await fs.remove(targetDir);\n existingTargets.push(TARGETS[target]);\n } else if (fs.existsSync(targetDir) && !options.force) {\n existingTargets.push(TARGETS[target]);\n }\n }\n\n if (options.fresh && existingTargets.length > 0) {\n const akDir = join(projectDir, '.ak');\n if (fs.existsSync(akDir)) {\n await fs.remove(akDir);\n }\n console.log(pc.cyan(`Fresh install: removed existing files (${existingTargets.join(', ')})`));\n existingAction = null;\n } else if (existingTargets.length > 0 && !options.force) {\n if (!process.stdin.isTTY || options.yes) {\n if (options.yes) {\n existingAction = 'override';\n } else {\n console.log(pc.yellow(`${existingTargets.join(', ')} already exists. Use --force to override.`));\n return;\n }\n } else {\n existingAction = await promptExistingTarget(existingTargets.join(', '));\n\n if (existingAction === 'skip') {\n console.log(pc.yellow('Skipped. No changes made.'));\n return;\n }\n }\n }\n\n // For new project directory, check if it exists\n if (!isCurrentDir && fs.existsSync(projectDir) && !options.force) {\n const files = fs.readdirSync(projectDir);\n if (files.length > 0 && !existingAction) {\n console.log(pc.red(`Directory \"${projectName}\" already exists and is not empty.`));\n console.log(pc.gray('Use --force to overwrite.'));\n return;\n }\n }\n\n // 3. Resolve source\n const source = resolveSource(options.source);\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n return;\n }\n\n console.log(pc.gray(`Source: ${source.path}`));\n\n // 4. Get kit\n let kitName = options.kit;\n if (!kitName && !options.force && !options.yes) {\n kitName = await promptKit();\n } else if (!kitName) {\n kitName = 'engineer'; // Default kit for --force/--yes mode\n }\n\n // 5. Set merge mode based on existing action\n const mergeMode = existingAction === 'merge';\n\n // 6. Prepare what to install\n let toInstall: {\n agents: string[] | 'all';\n commands: string[] | 'all';\n skills: string[] | 'all';\n workflows: string[] | 'all';\n includeRouter: boolean;\n includeHooks: boolean;\n } = {\n agents: [],\n commands: [],\n skills: [],\n workflows: [],\n includeRouter: false,\n includeHooks: false\n };\n\n if (kitName === 'custom' && !options.yes) {\n // Custom mode - prompt for everything (unless --yes is set)\n console.log(pc.cyan('\\nCustom kit configuration:'));\n toInstall.agents = await promptAgents(source.claudeDir);\n toInstall.skills = await promptSkills(source.claudeDir);\n toInstall.commands = await promptCommands(source.claudeDir);\n toInstall.includeRouter = await promptIncludeRouter();\n toInstall.includeHooks = await promptIncludeHooks();\n } else {\n const kit = getKit(kitName);\n if (!kit) {\n console.log(pc.red(`Unknown kit: ${kitName}`));\n console.log(pc.gray(`Available kits: ${Object.keys(KITS).join(', ')}`));\n return;\n }\n\n toInstall = {\n agents: kit.agents,\n commands: kit.commands,\n skills: kit.skills,\n workflows: kit.workflows || [],\n includeRouter: kit.includeRouter,\n includeHooks: kit.includeHooks\n };\n }\n\n // Apply --exclude and --only filters\n if (options.exclude || options.only) {\n toInstall.agents = filterComponents(toInstall.agents, options.exclude, options.only);\n toInstall.skills = filterComponents(toInstall.skills, options.exclude, options.only);\n toInstall.commands = filterComponents(toInstall.commands, options.exclude, options.only);\n toInstall.workflows = filterComponents(toInstall.workflows, options.exclude, options.only);\n }\n\n // 6. Confirm\n console.log(pc.cyan('\\nWill create:'));\n console.log(pc.white(` Project: ${projectName}/`));\n console.log(pc.white(` Targets: ${cliTargets.map(t => TARGETS[t]).join(', ')}/`));\n console.log(pc.white(` Kit: ${kitName}`));\n\n if (Array.isArray(toInstall.agents)) {\n console.log(pc.gray(` Agents: ${toInstall.agents.length}`));\n }\n if (Array.isArray(toInstall.skills)) {\n console.log(pc.gray(` Skills: ${toInstall.skills.length}`));\n }\n if (Array.isArray(toInstall.commands)) {\n console.log(pc.gray(` Commands: ${toInstall.commands.length}`));\n }\n\n console.log('');\n\n // Skip confirmation if --force or --yes is set\n if (!options.force && !options.yes) {\n if (!await promptConfirm('Proceed?')) {\n console.log(pc.yellow('Cancelled.'));\n return;\n }\n }\n\n // 7. Create project\n const spinner = ora('Creating project...').start();\n\n try {\n // Create project directory\n await fs.ensureDir(projectDir);\n\n // Install for each CLI target\n for (const target of cliTargets) {\n const targetDir = getTargetDir(projectDir, target);\n await fs.ensureDir(targetDir);\n\n const targetLabel = target === 'gemini' ? 'Gemini' : 'Claude';\n\n // Copy agents (both Claude and Gemini support agents with similar format)\n spinner.text = mergeMode ? `Merging agents (${targetLabel})...` : `Copying agents (${targetLabel})...`;\n if (target === 'gemini') {\n // Convert Claude agent format to Gemini (map model names)\n await copyAgentsForGemini(toInstall.agents, source.claudeDir, targetDir, mergeMode);\n } else {\n if (toInstall.agents === 'all') {\n await copyAllOfType('agents', source.claudeDir, targetDir, mergeMode);\n } else if (toInstall.agents.length > 0) {\n await copyItems(toInstall.agents, 'agents', source.claudeDir, targetDir, mergeMode);\n }\n }\n\n // Copy skills (both Claude and Gemini support SKILL.md format)\n spinner.text = mergeMode ? `Merging skills (${targetLabel})...` : `Copying skills (${targetLabel})...`;\n if (target === 'gemini') {\n // Gemini uses same SKILL.md format, copy directly\n await copySkillsForGemini(toInstall.skills, source.claudeDir, targetDir, mergeMode);\n } else {\n if (toInstall.skills === 'all') {\n await copyAllOfType('skills', source.claudeDir, targetDir, mergeMode);\n } else if (toInstall.skills.length > 0) {\n await copyItems(toInstall.skills, 'skills', source.claudeDir, targetDir, mergeMode);\n }\n }\n\n // Copy commands (convert to TOML for Gemini)\n spinner.text = mergeMode ? `Merging commands (${targetLabel})...` : `Copying commands (${targetLabel})...`;\n if (target === 'gemini') {\n // Convert MD to TOML for Gemini\n await copyCommandsForGemini(toInstall.commands, source.claudeDir, targetDir, mergeMode);\n } else {\n if (toInstall.commands === 'all') {\n await copyAllOfType('commands', source.claudeDir, targetDir, mergeMode);\n } else if (toInstall.commands.length > 0) {\n await copyItems(toInstall.commands, 'commands', source.claudeDir, targetDir, mergeMode);\n }\n }\n\n // Copy workflows (Claude only)\n if (target === 'claude') {\n spinner.text = mergeMode ? `Merging workflows (${targetLabel})...` : `Copying workflows (${targetLabel})...`;\n if (toInstall.workflows === 'all') {\n await copyAllOfType('workflows', source.claudeDir, targetDir, mergeMode);\n } else if (toInstall.workflows && toInstall.workflows.length > 0) {\n await copyItems(toInstall.workflows, 'workflows', source.claudeDir, targetDir, mergeMode);\n }\n }\n\n // Copy router (Claude only)\n if (target === 'claude' && toInstall.includeRouter) {\n spinner.text = mergeMode ? `Merging router (${targetLabel})...` : `Copying router (${targetLabel})...`;\n await copyRouter(source.claudeDir, targetDir, mergeMode);\n }\n\n // Copy hooks (Claude only)\n if (target === 'claude' && toInstall.includeHooks) {\n spinner.text = mergeMode ? `Merging hooks (${targetLabel})...` : `Copying hooks (${targetLabel})...`;\n await copyHooks(source.claudeDir, targetDir, mergeMode);\n }\n\n // Copy extra directories and base files\n if (target === 'claude') {\n spinner.text = mergeMode ? `Merging extras (${targetLabel})...` : `Copying extras (${targetLabel})...`;\n await copyDirectory('memory', source.claudeDir, targetDir, mergeMode);\n await copyDirectory('output-styles', source.claudeDir, targetDir, mergeMode);\n await copyDirectory('scripts', source.claudeDir, targetDir, mergeMode);\n // Copy base files (includes statusline files)\n spinner.text = mergeMode ? `Merging base files (${targetLabel})...` : `Copying base files (${targetLabel})...`;\n await copyBaseFiles(source.claudeDir, targetDir, mergeMode);\n } else if (target === 'gemini') {\n // Copy Gemini settings.json (with plan mode & subagents enabled)\n spinner.text = mergeMode ? `Merging settings (${targetLabel})...` : `Copying settings (${targetLabel})...`;\n await copyGeminiBaseFiles(targetDir, mergeMode);\n }\n }\n\n // Copy AGENTS.md (project root)\n if (source.agentsMd && cliTargets.includes('claude')) {\n await copyAgentsMd(source.agentsMd, projectDir, mergeMode);\n }\n\n // Create state file\n spinner.text = 'Saving state...';\n await createInitialState(projectDir, {\n kit: kitName,\n source: source.path,\n targets: cliTargets,\n target: TARGETS[cliTargets[0]], // Keep backward compat\n installed: {\n agents: toInstall.agents === 'all' ? ['all'] : toInstall.agents,\n skills: toInstall.skills === 'all' ? ['all'] : toInstall.skills,\n commands: toInstall.commands === 'all' ? ['all'] : toInstall.commands,\n workflows: toInstall.workflows === 'all' ? ['all'] : (toInstall.workflows || []),\n router: toInstall.includeRouter,\n hooks: toInstall.includeHooks\n }\n });\n\n const actionWord = mergeMode ? 'merged' : (existingAction === 'override' ? 'overridden' : 'created');\n spinner.succeed(pc.green(`Project ${actionWord} successfully!`));\n\n // Print next steps\n console.log('');\n if (!isCurrentDir) {\n console.log(pc.cyan('Next steps:'));\n console.log(pc.white(` cd ${projectName}`));\n }\n\n const targetNames = cliTargets.map(t => t === 'gemini' ? 'Gemini CLI' : 'Claude Code').join(' & ');\n console.log(pc.cyan(`Ready to code with ${targetNames}!`));\n\n console.log('');\n console.log(pc.gray('Useful commands:'));\n console.log(pc.gray(' ak status - Check file status'));\n console.log(pc.gray(' ak add <item> - Add more agents/skills'));\n console.log(pc.gray(' ak update - Sync from source'));\n console.log('');\n\n } catch (error: any) {\n spinner.fail(pc.red('Failed to create project'));\n console.error(pc.red(error.message));\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n }\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { resolveSource, isAkProject } from '../utils/paths.js';\nimport { copyItems, listAvailable } from '../utils/copy.js';\nimport { loadState, updateState } from '../utils/state.js';\nimport { hashDirectory } from '../utils/hash.js';\n\nexport async function addCommand(item: string, options: Record<string, any> = {}): Promise<void> {\n // Parse item format: type:name (e.g., skill:databases, agent:debugger)\n const parts = item.split(':');\n if (parts.length !== 2) {\n console.log(pc.red('Invalid format. Use: ak add <type>:<name>'));\n console.log(pc.gray('Examples:'));\n console.log(pc.gray(' ak add skill:databases'));\n console.log(pc.gray(' ak add agent:debugger'));\n console.log(pc.gray(' ak add command:fix/ci'));\n return;\n }\n\n const [type, name] = parts;\n const validTypes = ['agent', 'agents', 'skill', 'skills', 'command', 'commands', 'workflow', 'workflows'];\n\n if (!validTypes.includes(type)) {\n console.log(pc.red(`Invalid type: ${type}`));\n console.log(pc.gray(`Valid types: agent, skill, command, workflow`));\n return;\n }\n\n // Normalize type to plural\n const typeMap: Record<string, string> = {\n agent: 'agents',\n agents: 'agents',\n skill: 'skills',\n skills: 'skills',\n command: 'commands',\n commands: 'commands',\n workflow: 'workflows',\n workflows: 'workflows'\n };\n const normalizedType = typeMap[type];\n\n const projectDir = options.path || process.cwd();\n\n // Check if in ak project\n if (!isAkProject(projectDir)) {\n console.log(pc.red('Not in an ak project.'));\n console.log(pc.gray('Run \"ak init\" first or use --path to specify project directory.'));\n return;\n }\n\n // Load state\n const state = await loadState(projectDir);\n if (!state) {\n console.log(pc.yellow('Warning: No state file found. Creating fresh state after add.'));\n }\n\n // Resolve source\n const sourceFlag = options.source || (state ? state.source : null);\n const source = resolveSource(sourceFlag);\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n return;\n }\n\n // Check if item exists in source\n const available = listAvailable(normalizedType, source.claudeDir);\n const exists = available.some(a => a.name === name);\n\n if (!exists) {\n console.log(pc.red(`${type} \"${name}\" not found in source.`));\n console.log(pc.gray(`Use \"ak list ${normalizedType}\" to see available options.`));\n return;\n }\n\n // Determine target directory\n const targetFolder = state?.target || '.claude';\n const targetDir = join(projectDir, targetFolder);\n\n // Check if already installed\n const destPath = join(targetDir, normalizedType, name);\n const destPathMd = destPath + '.md';\n if (fs.existsSync(destPath) || fs.existsSync(destPathMd)) {\n console.log(pc.yellow(`${type} \"${name}\" already exists in project.`));\n console.log(pc.gray('Use \"ak update\" to refresh from source.'));\n return;\n }\n\n // Copy\n const spinner = ora(`Adding ${type} \"${name}\"...`).start();\n\n try {\n const result = await copyItems([name], normalizedType, source.claudeDir, targetDir);\n\n if (result.copied.length > 0) {\n spinner.succeed(pc.green(`Added ${type}: ${name}`));\n\n // Update state\n if (state) {\n const installed = state.installed || {};\n const typeArray = installed[normalizedType as keyof typeof installed];\n if (!typeArray) {\n (installed as any)[normalizedType] = [name];\n } else if (Array.isArray(typeArray) && !typeArray.includes(name)) {\n typeArray.push(name);\n }\n\n // Recalculate hashes\n const newHashes = await hashDirectory(targetDir);\n\n await updateState(projectDir, {\n installed,\n originalHashes: newHashes\n });\n }\n\n console.log(pc.gray(`Location: ${targetFolder}/${normalizedType}/${name}`));\n } else if (result.skipped.length > 0) {\n spinner.fail(pc.red(`Could not find ${type}: ${name}`));\n } else if (result.errors.length > 0) {\n spinner.fail(pc.red(`Error adding ${type}: ${result.errors[0].error}`));\n }\n } catch (error: any) {\n spinner.fail(pc.red(`Failed to add ${type}`));\n console.error(pc.red(error.message));\n }\n}\n","import pc from 'picocolors';\nimport { getKitList } from '../kits/index.js';\nimport { resolveSource } from '../utils/paths.js';\nimport { listAvailable, type AvailableItem } from '../utils/copy.js';\n\nexport async function listCommand(type: string | undefined, options: Record<string, any> = {}): Promise<void> {\n const validTypes = ['kits', 'agents', 'skills', 'commands', 'workflows'];\n\n // If no type specified, show help\n if (!type) {\n console.log(pc.cyan('\\nAvailable list commands:'));\n console.log(pc.white(' ak list kits - List available kits'));\n console.log(pc.white(' ak list agents - List available agents'));\n console.log(pc.white(' ak list skills - List available skills'));\n console.log(pc.white(' ak list commands - List available commands'));\n console.log(pc.white(' ak list workflows - List available workflows'));\n console.log('');\n return;\n }\n\n // Normalize type\n type = type.toLowerCase();\n if (!validTypes.includes(type)) {\n console.log(pc.red(`Unknown type: ${type}`));\n console.log(pc.gray(`Valid types: ${validTypes.join(', ')}`));\n return;\n }\n\n // List kits (doesn't need source)\n if (type === 'kits') {\n listKits();\n return;\n }\n\n // For other types, need source\n const source = resolveSource(options.source);\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n return;\n }\n\n console.log(pc.gray(`Source: ${source.path}\\n`));\n\n switch (type) {\n case 'agents':\n listAgents(source.claudeDir);\n break;\n case 'skills':\n listSkills(source.claudeDir);\n break;\n case 'commands':\n listCommandsList(source.claudeDir);\n break;\n case 'workflows':\n listWorkflows(source.claudeDir);\n break;\n }\n}\n\nfunction listKits(): void {\n const kits = getKitList();\n\n console.log(pc.bold(pc.cyan('\\nAvailable Kits:\\n')));\n\n for (const kit of kits) {\n const colorFn = (pc as any)[kit.color] || pc.white;\n console.log(` ${kit.emoji} ${colorFn(pc.bold(kit.name.padEnd(12)))} - ${kit.description}`);\n\n // Show details\n if (Array.isArray(kit.agents)) {\n const agentCount = Array.isArray(kit.agents) ? kit.agents.length : 'all';\n const skillCount = Array.isArray(kit.skills) ? kit.skills.length : 'all';\n const cmdCount = Array.isArray(kit.commands) ? kit.commands.length : 'all';\n console.log(pc.gray(` Agents: ${agentCount} | Skills: ${skillCount} | Commands: ${cmdCount}`));\n } else {\n console.log(pc.gray(' Includes: ALL agents, skills, commands'));\n }\n }\n\n console.log(`\\n 🔧 ${pc.bold('custom'.padEnd(12))} - Pick your own agents, skills, and commands`);\n console.log('');\n}\n\nfunction listAgents(sourceDir: string): void {\n const agents = listAvailable('agents', sourceDir);\n\n console.log(pc.bold(pc.cyan(`Available Agents (${agents.length}):\\n`)));\n\n if (agents.length === 0) {\n console.log(pc.gray(' No agents found'));\n return;\n }\n\n // Group into columns\n const cols = 3;\n const rows = Math.ceil(agents.length / cols);\n\n for (let i = 0; i < rows; i++) {\n let line = ' ';\n for (let j = 0; j < cols; j++) {\n const idx = i + j * rows;\n if (idx < agents.length) {\n line += pc.white(agents[idx].name.padEnd(25));\n }\n }\n console.log(line);\n }\n console.log('');\n}\n\nfunction listSkills(sourceDir: string): void {\n const skills = listAvailable('skills', sourceDir).filter(s => s.isDir);\n\n console.log(pc.bold(pc.cyan(`Available Skills (${skills.length}):\\n`)));\n\n if (skills.length === 0) {\n console.log(pc.gray(' No skills found'));\n return;\n }\n\n // Group into columns\n const cols = 2;\n const rows = Math.ceil(skills.length / cols);\n\n for (let i = 0; i < rows; i++) {\n let line = ' ';\n for (let j = 0; j < cols; j++) {\n const idx = i + j * rows;\n if (idx < skills.length) {\n line += pc.white(skills[idx].name.padEnd(35));\n }\n }\n console.log(line);\n }\n console.log('');\n}\n\nfunction listCommandsList(sourceDir: string): void {\n const commands = listAvailable('commands', sourceDir);\n\n console.log(pc.bold(pc.cyan(`Available Commands (${commands.length}):\\n`)));\n\n if (commands.length === 0) {\n console.log(pc.gray(' No commands found'));\n return;\n }\n\n // Separate files and directories\n const files = commands.filter(c => !c.isDir);\n const dirs = commands.filter(c => c.isDir);\n\n // Print main commands (files)\n console.log(pc.gray(' Main commands:'));\n const cols = 4;\n const rows = Math.ceil(files.length / cols);\n\n for (let i = 0; i < rows; i++) {\n let line = ' ';\n for (let j = 0; j < cols; j++) {\n const idx = i + j * rows;\n if (idx < files.length) {\n line += pc.white(('/' + files[idx].name).padEnd(18));\n }\n }\n console.log(line);\n }\n\n // Print command groups (directories)\n if (dirs.length > 0) {\n console.log(pc.gray('\\n Command groups:'));\n for (const dir of dirs) {\n console.log(pc.yellow(` /${dir.name}/`));\n }\n }\n\n console.log('');\n}\n\nfunction listWorkflows(sourceDir: string): void {\n const workflows = listAvailable('workflows', sourceDir);\n\n console.log(pc.bold(pc.cyan(`Available Workflows (${workflows.length}):\\n`)));\n\n if (workflows.length === 0) {\n console.log(pc.gray(' No workflows found'));\n return;\n }\n\n for (const wf of workflows) {\n console.log(pc.white(` • ${wf.name}`));\n }\n console.log('');\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { resolveSource, isAkProject } from '../utils/paths.js';\nimport { loadState, updateState, getFileStatuses } from '../utils/state.js';\nimport { hashFile, hashDirectory } from '../utils/hash.js';\nimport { promptUpdateConfirm } from '../utils/prompts.js';\n\nexport async function updateCommand(options: Record<string, any> = {}): Promise<void> {\n const projectDir = process.cwd();\n\n // Check if in ak project\n if (!isAkProject(projectDir)) {\n console.log(pc.red('Not in an ak project.'));\n console.log(pc.gray('Run \"ak init\" first.'));\n return;\n }\n\n // Load state\n const state = await loadState(projectDir);\n if (!state) {\n console.log(pc.red('No state file found.'));\n console.log(pc.gray('This project may have been created without ak. Run \"ak doctor\" for more info.'));\n return;\n }\n\n // Resolve source\n const sourceFlag = options.source || state.source;\n const source = resolveSource(sourceFlag);\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n return;\n }\n\n console.log(pc.gray(`Source: ${source.path}`));\n console.log(pc.gray(`Target: ${state.target}`));\n console.log('');\n\n const spinner = ora('Checking for updates...').start();\n\n try {\n // Get current file statuses\n const result = await getFileStatuses(projectDir);\n if ('error' in result) {\n spinner.fail(pc.red(result.error));\n return;\n }\n\n const { statuses, targetDir } = result;\n\n // Determine what types to update\n let typesToUpdate = ['agents', 'skills', 'commands', 'workflows'];\n if (options.agents) typesToUpdate = ['agents'];\n if (options.skills) typesToUpdate = ['skills'];\n if (options.commands) typesToUpdate = ['commands'];\n\n // Get source hashes\n const sourceHashes: Record<string, string> = {};\n for (const type of typesToUpdate) {\n const typeDir = join(source.claudeDir, type);\n if (fs.existsSync(typeDir)) {\n const hashes = await hashDirectory(typeDir);\n for (const [path, hash] of Object.entries(hashes)) {\n sourceHashes[`${type}/${path}`] = hash;\n }\n }\n }\n\n // Compare with current\n const toUpdate: string[] = [];\n const skipped: string[] = [];\n const newFiles: string[] = [];\n\n for (const [path, sourceHash] of Object.entries(sourceHashes)) {\n const currentPath = join(targetDir, path);\n const originalHash = state.originalHashes?.[path];\n const currentHash = fs.existsSync(currentPath) ? hashFile(currentPath) : null;\n\n if (!currentHash) {\n // New file from source\n newFiles.push(path);\n } else if (currentHash === originalHash) {\n // File unchanged locally, can update\n if (sourceHash !== currentHash) {\n toUpdate.push(path);\n }\n } else {\n // File modified locally, skip\n if (sourceHash !== originalHash) {\n skipped.push(path);\n }\n }\n }\n\n spinner.stop();\n\n // Show summary\n if (toUpdate.length === 0 && newFiles.length === 0) {\n console.log(pc.green('✓ Already up to date!'));\n if (skipped.length > 0) {\n console.log(pc.yellow(` ${skipped.length} file(s) skipped (modified locally)`));\n }\n return;\n }\n\n console.log(pc.cyan('Updates available:'));\n console.log(pc.green(` ${toUpdate.length} file(s) to update`));\n console.log(pc.blue(` ${newFiles.length} new file(s)`));\n if (skipped.length > 0) {\n console.log(pc.yellow(` ${skipped.length} file(s) skipped (modified locally)`));\n }\n console.log('');\n\n // Dry run mode\n if (options.dryRun) {\n console.log(pc.cyan('Dry run - no changes made'));\n console.log(pc.gray('\\nFiles that would be updated:'));\n [...toUpdate, ...newFiles].forEach(f => console.log(pc.gray(` ${f}`)));\n if (skipped.length > 0) {\n console.log(pc.gray('\\nFiles that would be skipped:'));\n skipped.forEach(f => console.log(pc.yellow(` ~ ${f}`)));\n }\n return;\n }\n\n // Confirm\n if (!options.force) {\n const confirmed = await promptUpdateConfirm({\n toUpdate: [...toUpdate, ...newFiles],\n skipped\n });\n if (!confirmed) {\n console.log(pc.yellow('Cancelled.'));\n return;\n }\n }\n\n // Apply updates\n const updateSpinner = ora('Applying updates...').start();\n\n let updated = 0;\n let failed = 0;\n\n for (const path of [...toUpdate, ...newFiles]) {\n try {\n const srcPath = join(source.claudeDir, path);\n const destPath = join(targetDir, path);\n\n await fs.ensureDir(join(targetDir, path.split('/').slice(0, -1).join('/')));\n await fs.copy(srcPath, destPath, { overwrite: true });\n updated++;\n } catch (err: any) {\n failed++;\n if (process.env.DEBUG) {\n console.error(`Failed to update ${path}: ${err.message}`);\n }\n }\n }\n\n // Update state with new hashes\n const newHashes = await hashDirectory(targetDir);\n await updateState(projectDir, {\n source: source.path,\n originalHashes: newHashes\n });\n\n updateSpinner.succeed(pc.green(`Updated ${updated} file(s)`));\n\n if (failed > 0) {\n console.log(pc.yellow(` ${failed} file(s) failed to update`));\n }\n\n if (skipped.length > 0) {\n console.log(pc.gray(`\\nSkipped files (modified locally):`));\n skipped.slice(0, 5).forEach(f => console.log(pc.yellow(` ~ ${f}`)));\n if (skipped.length > 5) {\n console.log(pc.gray(` ... and ${skipped.length - 5} more`));\n }\n }\n\n } catch (error: any) {\n spinner.fail(pc.red('Update failed'));\n console.error(pc.red(error.message));\n if (process.env.DEBUG) {\n console.error(error.stack);\n }\n }\n}\n","import pc from 'picocolors';\nimport { isAkProject } from '../utils/paths.js';\nimport { loadState, getFileStatuses } from '../utils/state.js';\nimport fs from 'fs-extra';\n\nexport async function statusCommand(options: Record<string, any> = {}): Promise<void> {\n const projectDir = process.cwd();\n\n // Check if in ak project\n if (!isAkProject(projectDir)) {\n console.log(pc.red('Not in an ak project.'));\n console.log(pc.gray('Run \"ak init\" first.'));\n return;\n }\n\n // Load state\n const state = await loadState(projectDir);\n if (!state) {\n console.log(pc.yellow('No state file found.'));\n console.log(pc.gray('This project may have been created without ak.'));\n return;\n }\n\n // Print project info\n console.log(pc.bold(pc.cyan('\\nProject Status\\n')));\n console.log(pc.white(` Kit: ${state.kit}`));\n console.log(pc.white(` Target: ${state.target}`));\n console.log(pc.white(` Source: ${state.source}`));\n console.log(pc.gray(` Created: ${new Date(state.createdAt).toLocaleDateString()}`));\n console.log(pc.gray(` Updated: ${new Date(state.lastUpdate).toLocaleDateString()}`));\n console.log('');\n\n // Get file statuses\n const result = await getFileStatuses(projectDir);\n\n if ('error' in result) {\n console.log(pc.red(`Error: ${result.error}`));\n return;\n }\n\n const { statuses } = result;\n\n // Summary\n const total = statuses.unchanged.length + statuses.modified.length + statuses.added.length;\n console.log(pc.cyan('File Status:'));\n console.log(pc.green(` ✓ ${statuses.unchanged.length} unchanged`));\n if (statuses.modified.length > 0) {\n console.log(pc.yellow(` ~ ${statuses.modified.length} modified`));\n }\n if (statuses.added.length > 0) {\n console.log(pc.blue(` + ${statuses.added.length} added locally`));\n }\n if (statuses.deleted.length > 0) {\n console.log(pc.red(` - ${statuses.deleted.length} deleted`));\n }\n console.log(pc.gray(` Total: ${total} files tracked`));\n console.log('');\n\n // Show modified files\n if (statuses.modified.length > 0 && (options.verbose || statuses.modified.length <= 10)) {\n console.log(pc.yellow('Modified files:'));\n for (const file of statuses.modified) {\n console.log(pc.yellow(` ~ ${file}`));\n }\n console.log('');\n } else if (statuses.modified.length > 10) {\n console.log(pc.yellow(`Modified files: (showing first 10, use --verbose for all)`));\n for (const file of statuses.modified.slice(0, 10)) {\n console.log(pc.yellow(` ~ ${file}`));\n }\n console.log(pc.gray(` ... and ${statuses.modified.length - 10} more`));\n console.log('');\n }\n\n // Show added files\n if (statuses.added.length > 0 && (options.verbose || statuses.added.length <= 5)) {\n console.log(pc.blue('Added locally:'));\n for (const file of statuses.added) {\n console.log(pc.blue(` + ${file}`));\n }\n console.log('');\n }\n\n // Installed components\n if (state.installed) {\n console.log(pc.cyan('Installed Components:'));\n const { agents, skills, commands, workflows, router, hooks } = state.installed;\n\n if (agents && agents.length > 0) {\n console.log(pc.gray(` Agents: ${agents.includes('all') ? 'ALL' : agents.length}`));\n }\n if (skills && skills.length > 0) {\n console.log(pc.gray(` Skills: ${skills.includes('all') ? 'ALL' : skills.length}`));\n }\n if (commands && commands.length > 0) {\n console.log(pc.gray(` Commands: ${commands.includes('all') ? 'ALL' : commands.length}`));\n }\n if (workflows && workflows.length > 0) {\n console.log(pc.gray(` Workflows: ${workflows.includes('all') ? 'ALL' : workflows.length}`));\n }\n if (router) console.log(pc.gray(' Router: ✓'));\n if (hooks) console.log(pc.gray(' Hooks: ✓'));\n console.log('');\n }\n\n // Check source availability\n if (state.source && !fs.existsSync(state.source)) {\n console.log(pc.yellow('⚠ Source directory not found. Update may not work.'));\n console.log(pc.gray(` Expected: ${state.source}`));\n console.log('');\n }\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport pc from 'picocolors';\nimport { isAkProject, resolveSource, TARGETS } from '../utils/paths.js';\nimport { loadState, createInitialState } from '../utils/state.js';\n\ninterface CheckResult {\n name: string;\n label: string;\n passed: boolean;\n severity: 'error' | 'warning';\n fixed?: boolean;\n fixError?: string;\n meta?: Record<string, any>;\n}\n\ninterface Check {\n name: string;\n label: string;\n severity: 'error' | 'warning';\n check: () => boolean | Promise<boolean>;\n fix?: () => void | Promise<void>;\n getMeta?: () => Record<string, any> | Promise<Record<string, any>>;\n}\n\nexport async function doctorCommand(options: Record<string, any> = {}): Promise<{ issues: number; warnings: number }> {\n const projectDir = process.cwd();\n\n // Detect target directory for use across checks\n let targetDir: { name: string; folder: string; dir: string } | null = null;\n for (const [name, folder] of Object.entries(TARGETS)) {\n const dir = join(projectDir, folder);\n if (fs.existsSync(dir)) {\n targetDir = { name, folder, dir };\n break;\n }\n }\n\n // Load state once\n let state = await loadState(projectDir);\n\n // Define all checks\n const checks: Check[] = [\n {\n name: 'project',\n label: 'ak project detected',\n severity: 'error',\n check: () => isAkProject(projectDir),\n fix: async () => {\n await fs.ensureDir(join(projectDir, '.ak'));\n }\n },\n {\n name: 'state',\n label: 'State file (.ak/state.json) exists',\n severity: 'warning',\n check: () => state !== null,\n fix: async () => {\n // Create state with detected values\n const kit = 'unknown';\n const source = '';\n const target = targetDir ? targetDir.folder : '.claude';\n\n // Detect installed components\n const installed: any = {};\n if (targetDir) {\n const dirs = ['agents', 'skills', 'commands', 'workflows'];\n for (const dir of dirs) {\n const fullPath = join(targetDir.dir, dir);\n if (fs.existsSync(fullPath)) {\n const items = fs.readdirSync(fullPath).filter(f => !f.startsWith('.'));\n if (items.length > 0) {\n installed[dir] = items;\n }\n }\n }\n }\n\n await createInitialState(projectDir, { kit, source, target, installed });\n state = await loadState(projectDir); // Reload state\n }\n },\n {\n name: 'target',\n label: 'Target directory exists',\n severity: 'error',\n check: () => targetDir !== null,\n getMeta: () => targetDir ? { folder: targetDir.folder } : {}\n },\n {\n name: 'agents_md',\n label: 'AGENTS.md exists',\n severity: 'warning',\n check: () => fs.existsSync(join(projectDir, 'AGENTS.md'))\n },\n {\n name: 'source',\n label: 'Source directory accessible',\n severity: 'error',\n check: () => {\n if (!state || !state.source) return true; // Skip if no state/source\n return fs.existsSync(state.source);\n },\n getMeta: () => state && state.source ? { source: state.source } : {}\n },\n {\n name: 'subdirs_agents',\n label: 'agents/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'agents'));\n },\n fix: async () => {\n if (targetDir) {\n await fs.ensureDir(join(targetDir.dir, 'agents'));\n }\n },\n getMeta: () => {\n if (!targetDir) return {};\n const fullPath = join(targetDir.dir, 'agents');\n if (fs.existsSync(fullPath)) {\n const items = fs.readdirSync(fullPath).length;\n return { items };\n }\n return {};\n }\n },\n {\n name: 'subdirs_commands',\n label: 'commands/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'commands'));\n },\n fix: async () => {\n if (targetDir) {\n await fs.ensureDir(join(targetDir.dir, 'commands'));\n }\n },\n getMeta: () => {\n if (!targetDir) return {};\n const fullPath = join(targetDir.dir, 'commands');\n if (fs.existsSync(fullPath)) {\n const items = fs.readdirSync(fullPath).length;\n return { items };\n }\n return {};\n }\n },\n {\n name: 'subdirs_skills',\n label: 'skills/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'skills'));\n },\n fix: async () => {\n if (targetDir) {\n await fs.ensureDir(join(targetDir.dir, 'skills'));\n }\n },\n getMeta: () => {\n if (!targetDir) return {};\n const fullPath = join(targetDir.dir, 'skills');\n if (fs.existsSync(fullPath)) {\n const items = fs.readdirSync(fullPath).length;\n return { items };\n }\n return {};\n }\n },\n {\n name: 'subdirs_scripts',\n label: 'scripts/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'scripts'));\n }\n },\n {\n name: 'subdirs_hooks',\n label: 'hooks/ exists',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'hooks'));\n }\n },\n {\n name: 'statusline',\n label: 'statusline files exist',\n severity: 'warning',\n check: () => {\n if (!targetDir) return false;\n return fs.existsSync(join(targetDir.dir, 'statusline.cjs')) ||\n fs.existsSync(join(targetDir.dir, 'statusline.sh'));\n }\n }\n ];\n\n // Run checks\n const results = await runChecks(checks, options);\n\n // Handle output modes\n if (options.json) {\n await outputJson(projectDir, results);\n return computeSummary(results);\n }\n\n if (options.report) {\n await outputReport(projectDir, results, options);\n }\n\n if (options.checkOnly) {\n const summary = computeSummary(results);\n if (summary.issues > 0) {\n process.exit(1);\n } else {\n process.exit(0);\n }\n }\n\n // Default colored output (backward compatible)\n await outputColored(projectDir, results, state, targetDir);\n\n return computeSummary(results);\n}\n\nasync function runChecks(checks: Check[], options: Record<string, any>): Promise<CheckResult[]> {\n const results: CheckResult[] = [];\n\n for (const c of checks) {\n const passed = await c.check();\n const meta = c.getMeta ? await c.getMeta() : undefined;\n const result: CheckResult = {\n name: c.name,\n label: c.label,\n passed,\n severity: c.severity,\n meta\n };\n\n if (!passed && options.fix && c.fix) {\n try {\n await c.fix();\n result.fixed = true;\n result.passed = true;\n } catch (e: any) {\n result.fixError = e.message;\n }\n }\n\n results.push(result);\n }\n\n return results;\n}\n\nfunction computeSummary(results: CheckResult[]): { issues: number; warnings: number } {\n let issues = 0;\n let warnings = 0;\n\n for (const r of results) {\n if (!r.passed && r.severity === 'error') {\n issues++;\n }\n if (!r.passed && r.severity === 'warning') {\n warnings++;\n }\n }\n\n return { issues, warnings };\n}\n\nasync function outputJson(projectDir: string, results: CheckResult[]): Promise<void> {\n const summary = computeSummary(results);\n const fixed = results.filter(r => r.fixed).length;\n\n const output = {\n project: projectDir,\n timestamp: new Date().toISOString(),\n checks: results,\n summary: {\n total: results.length,\n passed: results.filter(r => r.passed).length,\n failed: results.filter(r => !r.passed).length,\n warnings: summary.warnings,\n fixed\n }\n };\n\n console.log(JSON.stringify(output, null, 2));\n}\n\nasync function outputReport(projectDir: string, results: CheckResult[], options: Record<string, any>): Promise<void> {\n const summary = computeSummary(results);\n const timestamp = new Date().toISOString();\n\n let markdown = `# Apero Kit Doctor Report\\n\\n`;\n markdown += `**Project:** ${projectDir}\\n`;\n markdown += `**Timestamp:** ${timestamp}\\n\\n`;\n\n markdown += `## Summary\\n\\n`;\n markdown += `- Total checks: ${results.length}\\n`;\n markdown += `- Passed: ${results.filter(r => r.passed).length}\\n`;\n markdown += `- Failed: ${results.filter(r => !r.passed).length}\\n`;\n markdown += `- Errors: ${summary.issues}\\n`;\n markdown += `- Warnings: ${summary.warnings}\\n`;\n if (options.fix) {\n markdown += `- Fixed: ${results.filter(r => r.fixed).length}\\n`;\n }\n markdown += `\\n`;\n\n markdown += `## Check Results\\n\\n`;\n for (const r of results) {\n const icon = r.passed ? '✓' : (r.severity === 'error' ? '✗' : '⚠');\n markdown += `### ${icon} ${r.label}\\n\\n`;\n markdown += `- **Status:** ${r.passed ? 'PASS' : 'FAIL'}\\n`;\n markdown += `- **Severity:** ${r.severity}\\n`;\n if (r.fixed) {\n markdown += `- **Fixed:** Yes\\n`;\n }\n if (r.fixError) {\n markdown += `- **Fix Error:** ${r.fixError}\\n`;\n }\n if (r.meta && Object.keys(r.meta).length > 0) {\n markdown += `- **Details:** ${JSON.stringify(r.meta)}\\n`;\n }\n markdown += `\\n`;\n }\n\n markdown += `## Suggestions\\n\\n`;\n const failedChecks = results.filter(r => !r.passed);\n if (failedChecks.length === 0) {\n markdown += `All checks passed! No suggestions.\\n`;\n } else {\n for (const r of failedChecks) {\n if (r.name === 'project') {\n markdown += `- Run \"ak init .\" to initialize this directory\\n`;\n }\n if (r.name === 'state') {\n markdown += `- State file is missing. Re-run \"ak init\" or create manually\\n`;\n }\n if (r.name === 'source' && r.meta?.source) {\n markdown += `- Update source path: ak update --source <new-path>\\n`;\n }\n }\n }\n\n const reportPath = join(projectDir, '.ak', 'doctor-report.md');\n await fs.ensureDir(join(projectDir, '.ak'));\n await fs.writeFile(reportPath, markdown, 'utf-8');\n\n if (!options.json) {\n console.log(pc.green(`\\n✓ Report saved to ${reportPath}\\n`));\n }\n}\n\nasync function outputColored(\n projectDir: string,\n results: CheckResult[],\n state: any,\n targetDir: { name: string; folder: string; dir: string } | null\n): Promise<void> {\n console.log(pc.bold(pc.cyan('\\nApero Kit Doctor\\n')));\n console.log(pc.gray('Checking project health...\\n'));\n\n // Output each check result\n for (const r of results) {\n if (r.passed) {\n let msg = `✓ ${r.label}`;\n if (r.name === 'target' && r.meta?.folder) {\n msg += ` (${r.meta.folder})`;\n }\n if (r.name.startsWith('subdirs_') && r.meta?.items !== undefined) {\n msg += ` (${r.meta.items} items)`;\n }\n console.log(pc.green(msg));\n } else {\n const icon = r.severity === 'error' ? '✗' : '⚠';\n const color = r.severity === 'error' ? pc.red : pc.yellow;\n let msg = `${icon} ${r.label}`;\n if (r.name === 'target') {\n msg = `${icon} No target directory (.claude/, .opencode/, .agent/)`;\n }\n if (r.name === 'agents_md') {\n msg = `${icon} AGENTS.md not found (optional but recommended)`;\n }\n if (r.name === 'source' && r.meta?.source) {\n msg = `${icon} Source directory not found: ${r.meta.source}`;\n }\n if (r.name.startsWith('subdirs_')) {\n const dir = r.name.replace('subdirs_', '');\n msg = `${icon} ${dir}/ not found`;\n }\n console.log(color(msg));\n }\n }\n\n // Source detection (special formatting)\n console.log('');\n console.log(pc.gray('Source detection:'));\n const source = resolveSource();\n if ('error' in source) {\n console.log(pc.yellow(` ⚠ ${source.error}`));\n } else {\n console.log(pc.green(` ✓ Found source: ${source.path}`));\n console.log(pc.gray(` Type: ${source.type || 'unknown'}`));\n }\n\n // Summary\n const summary = computeSummary(results);\n console.log('');\n console.log(pc.cyan('─'.repeat(40)));\n\n if (summary.issues === 0 && summary.warnings === 0) {\n console.log(pc.bold(pc.green('\\n✓ All checks passed!\\n')));\n } else if (summary.issues === 0) {\n console.log(pc.yellow(`\\n⚠ ${summary.warnings} warning(s), no critical issues\\n`));\n } else {\n console.log(pc.red(`\\n✗ ${summary.issues} issue(s), ${summary.warnings} warning(s)\\n`));\n }\n\n // Suggestions\n if (summary.issues > 0 || summary.warnings > 0) {\n console.log(pc.cyan('Suggestions:'));\n\n const isProject = results.find(r => r.name === 'project')?.passed;\n const hasState = results.find(r => r.name === 'state')?.passed;\n\n if (!isProject) {\n console.log(pc.white(' • Run \"ak init .\" to initialize this directory'));\n }\n\n if (!hasState && isProject) {\n console.log(pc.white(' • State file is missing. Re-run \"ak init\" or create manually'));\n }\n\n if (state && state.source && !fs.existsSync(state.source)) {\n console.log(pc.white(' • Update source path: ak update --source <new-path>'));\n }\n\n console.log('');\n }\n}\n","import { exec } from 'child_process';\nimport pc from 'picocolors';\n\nconst HELP_URL = 'https://www.vividkit.dev/vi/guides/what-is-claudekit';\n\nexport async function helpCommand(options: Record<string, any>): Promise<void> {\n console.log(pc.cyan('\\n📚 Opening VividKit documentation...\\n'));\n console.log(pc.green(` ${HELP_URL}\\n`));\n const openCommand = process.platform === 'darwin' ? 'open' :\n process.platform === 'win32' ? 'start' : 'xdg-open';\n exec(`${openCommand} ${HELP_URL}`);\n}\n","import fs from 'fs-extra';\nimport { join } from 'path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport * as p from '@clack/prompts';\nimport { getGlobalInstallPath, TARGETS } from '../utils/paths.js';\nimport { loadState } from '../utils/state.js';\n\nconst PRESERVED_FILES = ['CLAUDE.md', 'settings.json', 'AGENTS.md'];\nconst AK_SUBDIRS = ['agents', 'skills', 'commands', 'workflows', 'hooks', 'router'];\n\ninterface UninstallResult {\n removed: string[];\n errors: Array<{ path: string; error: string }>;\n}\n\nexport async function uninstallCommand(options: Record<string, any>): Promise<void> {\n p.intro(pc.bgCyan(pc.black(' AK Uninstall ')));\n\n // Determine scope\n const targets: Array<{ type: string; dir: string }> = [];\n\n if (options.local || (!options.global && !options.local)) {\n targets.push({ type: 'local', dir: process.cwd() });\n }\n if (options.global) {\n targets.push({ type: 'global', dir: getGlobalInstallPath() });\n }\n\n let totalRemoved = 0;\n\n for (const target of targets) {\n const count = await uninstallFromDir(target.type, target.dir, options);\n totalRemoved += count;\n }\n\n if (totalRemoved === 0) {\n p.outro(pc.yellow('No installations found to remove.'));\n } else {\n p.outro(pc.green(`Successfully removed ${totalRemoved} item(s).`));\n }\n}\n\nasync function uninstallFromDir(\n type: string,\n dir: string,\n options: Record<string, any>\n): Promise<number> {\n const spinner = ora(`Scanning ${type} installation at ${pc.dim(dir)}`).start();\n\n // Load state\n const state = await loadState(dir);\n\n // Detect which target directories exist\n const existingTargets: Array<{ name: string; path: string }> = [];\n for (const [name, folder] of Object.entries(TARGETS)) {\n const targetPath = join(dir, folder);\n if (fs.existsSync(targetPath)) {\n existingTargets.push({ name, path: targetPath });\n }\n }\n\n // Check for .ak directory\n const akDir = join(dir, '.ak');\n const hasAkState = fs.existsSync(akDir);\n\n if (existingTargets.length === 0 && !hasAkState) {\n spinner.warn(pc.yellow(`No AK installation found in ${type}`));\n return 0;\n }\n\n spinner.succeed(pc.green(`Found AK installation in ${type}`));\n\n // Build removal list\n const removalList: string[] = [];\n\n // Add all AK-managed subdirectories inside target directories\n for (const target of existingTargets) {\n for (const subdir of AK_SUBDIRS) {\n const subdirPath = join(target.path, subdir);\n if (fs.existsSync(subdirPath)) {\n removalList.push(subdirPath);\n }\n }\n }\n\n // Add .ak state directory\n if (hasAkState) {\n removalList.push(akDir);\n }\n\n if (removalList.length === 0) {\n console.log(pc.yellow(` No files to remove from ${type}`));\n return 0;\n }\n\n // Display what will be removed\n console.log(pc.cyan(`\\n Items to remove from ${type}:`));\n for (const path of removalList) {\n const relativePath = path.replace(dir + '/', '');\n console.log(pc.dim(` • ${relativePath}`));\n }\n\n if (state) {\n console.log(pc.dim(`\\n Kit: ${state.kit}`));\n console.log(pc.dim(` Target: ${state.target}`));\n }\n\n console.log(pc.yellow(`\\n Preserved files: ${PRESERVED_FILES.join(', ')}`));\n\n // Dry run - just preview\n if (options.dryRun) {\n console.log(pc.yellow(`\\n [DRY RUN] Would remove ${removalList.length} item(s)`));\n return 0;\n }\n\n // Confirmation prompt (unless --yes)\n if (!options.yes) {\n const confirmed = await p.confirm({\n message: `Remove ${removalList.length} item(s) from ${type}?`,\n initialValue: false\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n console.log(pc.dim(' Cancelled.'));\n return 0;\n }\n }\n\n // Perform removal\n const result = await removeItems(removalList, dir);\n\n // Display results\n if (result.removed.length > 0) {\n console.log(pc.green(`\\n ✓ Removed ${result.removed.length} item(s) from ${type}`));\n for (const path of result.removed) {\n const relativePath = path.replace(dir + '/', '');\n console.log(pc.dim(` • ${relativePath}`));\n }\n }\n\n if (result.errors.length > 0) {\n console.log(pc.red(`\\n ✗ Failed to remove ${result.errors.length} item(s):`));\n for (const error of result.errors) {\n const relativePath = error.path.replace(dir + '/', '');\n console.log(pc.red(` • ${relativePath}: ${error.error}`));\n }\n }\n\n return result.removed.length;\n}\n\nasync function removeItems(paths: string[], baseDir: string): Promise<UninstallResult> {\n const result: UninstallResult = {\n removed: [],\n errors: []\n };\n\n for (const path of paths) {\n // Security check: ensure path is within baseDir\n if (!path.startsWith(baseDir)) {\n result.errors.push({\n path,\n error: 'Path outside base directory (security check failed)'\n });\n continue;\n }\n\n // Security check: ensure path contains expected directories\n const isExpectedPath =\n path.includes('/.ak') ||\n AK_SUBDIRS.some(subdir => path.includes(`/${subdir}`));\n\n if (!isExpectedPath) {\n result.errors.push({\n path,\n error: 'Path is not an expected AK directory (security check failed)'\n });\n continue;\n }\n\n try {\n await fs.remove(path);\n result.removed.push(path);\n } catch (error) {\n result.errors.push({\n path,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n }\n\n return result;\n}\n","import { execSync } from 'child_process';\n\nconst REMOTE_REPO_URL = 'https://github.com/Thanhnguyen6702/CK-Internal.git';\n\nexport { REMOTE_REPO_URL };\n\nexport function fetchRemoteTags(repoUrl: string = REMOTE_REPO_URL): string[] {\n const output = execSync(`git ls-remote --tags \"${repoUrl}\"`, {\n encoding: 'utf-8',\n timeout: 15000,\n stdio: ['pipe', 'pipe', 'pipe']\n });\n\n return output.split('\\n')\n .filter(line => line.includes('refs/tags/'))\n .map(line => {\n const tag = line.split('refs/tags/')[1]?.replace('^{}', '');\n return tag;\n })\n .filter(Boolean)\n .filter((v, i, a) => a.indexOf(v) === i); // dedupe\n}\n\nexport function sortSemver(tags: string[]): string[] {\n return [...tags].sort((a, b) => {\n const pa = a.replace(/^v/, '').split(/[.-]/);\n const pb = b.replace(/^v/, '').split(/[.-]/);\n for (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n const na = parseInt(pa[i]) || 0;\n const nb = parseInt(pb[i]) || 0;\n if (na !== nb) return nb - na; // descending\n }\n return 0;\n });\n}\n","import pc from 'picocolors';\nimport ora from 'ora';\nimport { fetchRemoteTags, sortSemver } from '../utils/git-tags.js';\n\nexport async function versionsCommand(options: Record<string, any>): Promise<void> {\n const spinner = ora('Fetching available versions...').start();\n\n try {\n const tags = fetchRemoteTags();\n spinner.stop();\n\n if (!tags || tags.length === 0) {\n console.log(pc.yellow('\\nNo versions found.'));\n return;\n }\n\n // Filter pre-releases unless --all\n let filtered = tags;\n if (!options.all) {\n filtered = tags.filter(tag => !tag.includes('-'));\n }\n\n // Sort by semver\n const sorted = sortSemver(filtered);\n\n // Apply limit\n const limit = options.limit ? parseInt(options.limit, 10) : 10;\n const limited = sorted.slice(0, limit);\n\n console.log(pc.bold('\\nAvailable versions:\\n'));\n\n limited.forEach((tag, index) => {\n const isLatest = index === 0;\n const marker = isLatest ? pc.green(' (latest)') : '';\n console.log(` ${pc.cyan(tag)}${marker}`);\n });\n\n if (sorted.length > limited.length) {\n console.log(pc.gray(`\\n ... and ${sorted.length - limited.length} more (use --limit or --all)`));\n }\n\n console.log('');\n } catch (err: any) {\n spinner.stop();\n console.log(pc.red('\\nFailed to fetch versions.'));\n console.log(pc.gray(err.message));\n\n if (err.message.includes('timeout')) {\n console.log(pc.gray('Network timeout. Check your connection.'));\n }\n }\n}\n","import { execSync } from 'child_process';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { CLI_ROOT } from '../utils/paths.js';\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\n\nfunction getCurrentVersion(): string {\n try {\n const pkg = JSON.parse(readFileSync(join(CLI_ROOT, 'package.json'), 'utf-8'));\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n}\n\nfunction getLatestVersion(): string {\n const output = execSync('npm view apero-kit-cli version', {\n encoding: 'utf-8',\n timeout: 15000,\n stdio: ['pipe', 'pipe', 'pipe']\n });\n return output.trim();\n}\n\nexport async function updateCliCommand(options: Record<string, any>): Promise<void> {\n const current = getCurrentVersion();\n const spinner = ora('Checking for updates...').start();\n\n try {\n const latest = options.version || getLatestVersion();\n spinner.stop();\n\n console.log(`\\n Current: ${pc.gray(current)}`);\n console.log(` Latest: ${pc.green(latest)}`);\n\n if (current === latest && !options.version && !options.force) {\n console.log(pc.green('\\nAlready up to date!'));\n console.log(pc.gray('Use --force to reinstall anyway.'));\n return;\n }\n\n if (options.check) {\n console.log(pc.yellow('\\nUpdate available! Run \"ak update-cli\" to install.'));\n return;\n }\n\n // Install\n const target = options.version || 'latest';\n const installSpinner = ora(`Installing apero-kit-cli@${target}...`).start();\n\n execSync(`npm install -g apero-kit-cli@${target}`, {\n encoding: 'utf-8',\n timeout: 60000,\n stdio: ['pipe', 'pipe', 'pipe']\n });\n\n installSpinner.succeed(pc.green(`Updated to ${target}!`));\n } catch (err: any) {\n spinner.stop();\n console.log(pc.red('\\nUpdate failed.'));\n console.log(pc.gray(err.message));\n console.log(pc.gray('\\nTry manually: npm install -g apero-kit-cli'));\n }\n}\n","import pc from 'picocolors';\nimport fs from 'fs-extra';\nimport { join } from 'path';\nimport * as p from '@clack/prompts';\nimport { resolveSource } from '../utils/paths.js';\nimport { listAvailable } from '../utils/copy.js';\n\n// Map agent types to their skill directories\nconst AGENT_SKILL_PATHS: Record<string, string> = {\n claude: '.claude/skills',\n cursor: '.cursor/rules',\n codex: '.codex/skills',\n};\n\nexport async function skillsCommand(options: Record<string, any>): Promise<void> {\n const { name, agent, list, installed, uninstall, yes } = options;\n\n // List mode - show available skills with installation status\n if (list || (!name && !installed)) {\n await listSkillsWithStatus();\n return;\n }\n\n // Show installed skills only\n if (installed && !name) {\n await showInstalledSkills();\n return;\n }\n\n // Install or uninstall mode requires skill name\n if (!name) {\n console.log(pc.red('Error: --name <skill> is required'));\n console.log(pc.gray('Usage: ak skills --name <skill> [--agent <agents>] [--uninstall]'));\n process.exit(1);\n }\n\n // Parse target agents (default: claude)\n const targetAgents = parseAgents(agent);\n\n // Uninstall mode\n if (uninstall) {\n await uninstallSkill(name, targetAgents, yes);\n return;\n }\n\n // Install mode\n await installSkill(name, targetAgents, yes);\n}\n\n/**\n * List all available skills with installation status per agent\n */\nasync function listSkillsWithStatus(): Promise<void> {\n const source = resolveSource();\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n process.exit(1);\n }\n\n const skills = listAvailable('skills', source.claudeDir).filter(s => s.isDir);\n\n if (skills.length === 0) {\n console.log(pc.yellow('No skills found in source'));\n return;\n }\n\n console.log(pc.bold(pc.cyan(`\\nAvailable Skills (${skills.length}):`)));\n console.log(pc.gray(`Source: ${source.path}\\n`));\n\n // Header\n const header = ' Skill'.padEnd(40) + 'Claude Cursor Codex';\n console.log(pc.bold(header));\n console.log(pc.gray(' ' + '─'.repeat(58)));\n\n // List each skill with installation status\n for (const skill of skills) {\n const claudeInstalled = isSkillInstalled(skill.name, 'claude');\n const cursorInstalled = isSkillInstalled(skill.name, 'cursor');\n const codexInstalled = isSkillInstalled(skill.name, 'codex');\n\n const statusLine =\n ' ' +\n skill.name.padEnd(38) +\n (claudeInstalled ? pc.green('✓') : pc.gray('-')).padEnd(8) +\n (cursorInstalled ? pc.green('✓') : pc.gray('-')).padEnd(8) +\n (codexInstalled ? pc.green('✓') : pc.gray('-'));\n\n console.log(statusLine);\n }\n\n console.log('');\n console.log(pc.gray('Install: ak skills --name <skill> --agent <claude|cursor|codex>'));\n console.log('');\n}\n\n/**\n * Show only installed skills\n */\nasync function showInstalledSkills(): Promise<void> {\n console.log(pc.bold(pc.cyan('\\nInstalled Skills:\\n')));\n\n let hasAny = false;\n\n for (const [agentType, skillPath] of Object.entries(AGENT_SKILL_PATHS)) {\n const installed = getInstalledSkills(agentType);\n if (installed.length > 0) {\n hasAny = true;\n console.log(pc.bold(` ${agentType}:`));\n for (const skill of installed) {\n console.log(pc.white(` • ${skill}`));\n }\n console.log('');\n }\n }\n\n if (!hasAny) {\n console.log(pc.gray(' No skills installed'));\n console.log('');\n }\n}\n\n/**\n * Install a skill to target agents\n */\nasync function installSkill(skillName: string, agents: string[], skipConfirm: boolean): Promise<void> {\n const source = resolveSource();\n if ('error' in source) {\n console.log(pc.red(`Error: ${source.error}`));\n process.exit(1);\n }\n\n // Find skill in source\n const skillPath = join(source.claudeDir, 'skills', skillName);\n if (!fs.existsSync(skillPath)) {\n console.log(pc.red(`Error: Skill \"${skillName}\" not found in source`));\n console.log(pc.gray(`Available skills: ak skills --list`));\n process.exit(1);\n }\n\n // Confirm installation unless --yes\n if (!skipConfirm) {\n const confirm = await p.confirm({\n message: `Install skill \"${skillName}\" to ${agents.join(', ')}?`,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n console.log(pc.gray('Cancelled'));\n process.exit(0);\n }\n }\n\n // Install to each agent\n const results: Array<{ agent: string; success: boolean; error?: string }> = [];\n\n for (const agent of agents) {\n try {\n const targetPath = join(process.cwd(), AGENT_SKILL_PATHS[agent], skillName);\n\n // Ensure target directory exists\n await fs.ensureDir(join(process.cwd(), AGENT_SKILL_PATHS[agent]));\n\n // Copy skill directory\n await fs.copy(skillPath, targetPath, { overwrite: true });\n\n results.push({ agent, success: true });\n } catch (err: any) {\n results.push({ agent, success: false, error: err.message });\n }\n }\n\n // Report results\n console.log('');\n const allSuccess = results.every(r => r.success);\n\n if (allSuccess) {\n console.log(pc.green(`✓ Installed \"${skillName}\" to ${agents.join(', ')}`));\n } else {\n for (const result of results) {\n if (result.success) {\n console.log(pc.green(`✓ ${result.agent}: installed`));\n } else {\n console.log(pc.red(`✗ ${result.agent}: ${result.error}`));\n }\n }\n }\n console.log('');\n}\n\n/**\n * Uninstall a skill from target agents\n */\nasync function uninstallSkill(skillName: string, agents: string[], skipConfirm: boolean): Promise<void> {\n // Check if skill is installed in any target agent\n const installedIn = agents.filter(agent => isSkillInstalled(skillName, agent));\n\n if (installedIn.length === 0) {\n console.log(pc.yellow(`Skill \"${skillName}\" is not installed in ${agents.join(', ')}`));\n process.exit(0);\n }\n\n // Confirm removal unless --yes\n if (!skipConfirm) {\n const confirm = await p.confirm({\n message: `Uninstall skill \"${skillName}\" from ${installedIn.join(', ')}?`,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n console.log(pc.gray('Cancelled'));\n process.exit(0);\n }\n }\n\n // Remove from each agent\n const results: Array<{ agent: string; success: boolean; error?: string }> = [];\n\n for (const agent of installedIn) {\n try {\n const targetPath = join(process.cwd(), AGENT_SKILL_PATHS[agent], skillName);\n await fs.remove(targetPath);\n results.push({ agent, success: true });\n } catch (err: any) {\n results.push({ agent, success: false, error: err.message });\n }\n }\n\n // Report results\n console.log('');\n const allSuccess = results.every(r => r.success);\n\n if (allSuccess) {\n console.log(pc.green(`✓ Uninstalled \"${skillName}\" from ${installedIn.join(', ')}`));\n } else {\n for (const result of results) {\n if (result.success) {\n console.log(pc.green(`✓ ${result.agent}: uninstalled`));\n } else {\n console.log(pc.red(`✗ ${result.agent}: ${result.error}`));\n }\n }\n }\n console.log('');\n}\n\n/**\n * Parse agent flag into array (comma-separated, defaults to claude)\n */\nfunction parseAgents(agentFlag?: string): string[] {\n if (!agentFlag) {\n return ['claude'];\n }\n\n const agents = agentFlag.split(',').map(a => a.trim().toLowerCase());\n const valid = agents.filter(a => a in AGENT_SKILL_PATHS);\n\n if (valid.length === 0) {\n console.log(pc.red('Error: No valid agents specified'));\n console.log(pc.gray('Valid agents: claude, cursor, codex'));\n process.exit(1);\n }\n\n return valid;\n}\n\n/**\n * Check if skill is installed for an agent\n */\nfunction isSkillInstalled(skillName: string, agent: string): boolean {\n const skillPath = join(process.cwd(), AGENT_SKILL_PATHS[agent], skillName);\n return fs.existsSync(skillPath);\n}\n\n/**\n * Get list of installed skills for an agent\n */\nfunction getInstalledSkills(agent: string): string[] {\n const skillsDir = join(process.cwd(), AGENT_SKILL_PATHS[agent]);\n\n if (!fs.existsSync(skillsDir)) {\n return [];\n }\n\n try {\n const items = fs.readdirSync(skillsDir);\n return items.filter(item => {\n const itemPath = join(skillsDir, item);\n return fs.statSync(itemPath).isDirectory();\n });\n } catch {\n return [];\n }\n}\n","#!/usr/bin/env node\nimport cac from 'cac';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\nimport pc from 'picocolors';\nimport { registerCommands } from './cli/command-registry.js';\nimport { getCachedVersionNoFetch, isNewerVersion } from './utils/version-check.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction getVersion(): string {\n try {\n const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n}\n\nconst cli = cac('ak');\nregisterCommands(cli);\ncli.help();\ncli.version(getVersion());\ncli.parse();\n\n// Non-blocking update check (cache-only, no network)\ntry {\n const version = getVersion();\n const cachedLatest = getCachedVersionNoFetch();\n if (cachedLatest && isNewerVersion(version, cachedLatest)) {\n console.log(pc.yellow(`\\n Update available: v${version} → v${cachedLatest}`));\n console.log(pc.gray(' Run \"ak update-cli\" to update\\n'));\n }\n} catch { /* silent */ }\n","import type { CAC } from 'cac';\n\nexport function registerCommands(cli: CAC): void {\n // init\n cli\n .command('init [project-name]', 'Initialize a new project with an agent kit')\n .option('-k, --kit <type>', 'Kit type (engineer, researcher, designer, minimal, full, custom)')\n .option('-t, --target <target>', 'Target CLI (claude, gemini or claude,gemini for both)')\n .option('-s, --source <path>', 'Custom source path for templates')\n .option('-f, --force', 'Overwrite existing directory')\n .option('-g, --global', 'Install to global ~/.claude/ directory')\n .option('--fresh', 'Remove existing installation before re-init')\n .option('-y, --yes', 'Skip prompts, use defaults')\n .option('--exclude <patterns>', 'Exclude components (comma-separated)')\n .option('--only <patterns>', 'Include only matching components (comma-separated)')\n .action(async (projectName: string | undefined, options: Record<string, any>) => {\n const { initCommand } = await import('../commands/init.js');\n await initCommand(projectName, options);\n });\n\n // add\n cli\n .command('add <item>', 'Add agent, skill, or command (e.g., ak add skill:databases)')\n .option('-s, --source <path>', 'Custom source path')\n .option('-p, --path <path>', 'Target project path')\n .action(async (item: string, options: Record<string, any>) => {\n const { addCommand } = await import('../commands/add.js');\n await addCommand(item, options);\n });\n\n // list\n cli\n .command('list [type]', 'List available kits, agents, skills, or commands')\n .option('-s, --source <path>', 'Custom source path')\n .action(async (type: string | undefined, options: Record<string, any>) => {\n const { listCommand } = await import('../commands/list.js');\n await listCommand(type, options);\n });\n\n // update (template sync)\n cli\n .command('update', 'Update/sync from source templates')\n .option('-s, --source <path>', 'Source path to sync from')\n .option('--agents', 'Update only agents')\n .option('--skills', 'Update only skills')\n .option('--commands', 'Update only commands')\n .option('--all', 'Update everything')\n .option('-n, --dry-run', 'Show what would be updated without making changes')\n .option('-f, --force', 'Force update without confirmation')\n .action(async (options: Record<string, any>) => {\n const { updateCommand } = await import('../commands/update.js');\n await updateCommand(options);\n });\n\n // status\n cli\n .command('status', 'Show project status and file changes')\n .option('-v, --verbose', 'Show all files')\n .action(async (options: Record<string, any>) => {\n const { statusCommand } = await import('../commands/status.js');\n await statusCommand(options);\n });\n\n // doctor\n cli\n .command('doctor', 'Check project health and diagnose issues')\n .option('--fix', 'Auto-fix common issues')\n .option('--report', 'Generate diagnostic report')\n .option('--json', 'Output JSON format')\n .option('--check-only', 'CI mode: exit 1 on failures')\n .action(async (options: Record<string, any>) => {\n const { doctorCommand } = await import('../commands/doctor.js');\n await doctorCommand(options);\n });\n\n // kits alias\n cli\n .command('kits', 'List all available kits')\n .action(async () => {\n const { listCommand } = await import('../commands/list.js');\n await listCommand('kits', {});\n });\n\n // help - open docs\n cli\n .command('help', 'Open interactive help documentation in browser')\n .option('-s, --source <path>', 'Custom source path')\n .action(async (options: Record<string, any>) => {\n const { helpCommand } = await import('../commands/help.js');\n await helpCommand(options);\n });\n\n // uninstall\n cli\n .command('uninstall', 'Remove ClaudeKit installations')\n .option('-y, --yes', 'Skip confirmation')\n .option('-l, --local', 'Uninstall only local installation')\n .option('-g, --global', 'Uninstall only global installation')\n .option('--dry-run', 'Preview what would be removed')\n .action(async (options: Record<string, any>) => {\n const { uninstallCommand } = await import('../commands/uninstall.js');\n await uninstallCommand(options);\n });\n\n // versions\n cli\n .command('versions', 'List available versions')\n .option('--kit <kit>', 'Filter by kit')\n .option('--limit <limit>', 'Number of versions to show')\n .option('--all', 'Show all including prereleases')\n .action(async (options: Record<string, any>) => {\n const { versionsCommand } = await import('../commands/versions.js');\n await versionsCommand(options);\n });\n\n // update-cli\n cli\n .command('update-cli', 'Update the CLI itself to latest version')\n .option('--check', 'Check for updates without installing')\n .option('--version <version>', 'Update to specific version')\n .option('-f, --force', 'Force reinstall even if already up to date')\n .action(async (options: Record<string, any>) => {\n const { updateCliCommand } = await import('../commands/update-cli.js');\n await updateCliCommand(options);\n });\n\n // skills\n cli\n .command('skills', 'Manage skills across coding agents')\n .option('-n, --name <skill>', 'Skill name')\n .option('-a, --agent <agents>', 'Target agents')\n .option('-l, --list', 'List available skills')\n .option('--installed', 'Show installed skills')\n .option('-u, --uninstall', 'Uninstall skill')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (options: Record<string, any>) => {\n const { skillsCommand } = await import('../commands/skills.js');\n await skillsCommand(options);\n });\n}\n","import { join } from 'path';\nimport { homedir } from 'os';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { execSync } from 'child_process';\n\nconst CACHE_DIR = join(homedir(), '.apero-kit');\nconst CACHE_FILE = join(CACHE_DIR, 'version-check.json');\nconst CACHE_TTL = 7 * 24 * 60 * 60 * 1000; // 7 days\n\ninterface VersionCache {\n version: string;\n timestamp: number;\n}\n\n/**\n * Get latest version from npm, with 7-day cache\n */\nexport function getCachedLatestVersion(): string | null {\n // Try cache first\n try {\n if (existsSync(CACHE_FILE)) {\n const cache: VersionCache = JSON.parse(readFileSync(CACHE_FILE, 'utf-8'));\n if (Date.now() - cache.timestamp < CACHE_TTL) {\n return cache.version;\n }\n }\n } catch { /* ignore corrupt cache */ }\n\n // Fetch fresh from npm\n try {\n const version = execSync('npm view apero-kit-cli version', {\n encoding: 'utf-8',\n timeout: 5000,\n stdio: ['pipe', 'pipe', 'pipe']\n }).trim();\n\n // Save to cache\n if (!existsSync(CACHE_DIR)) mkdirSync(CACHE_DIR, { recursive: true });\n writeFileSync(CACHE_FILE, JSON.stringify({ version, timestamp: Date.now() } satisfies VersionCache));\n\n return version;\n } catch {\n return null; // offline or error\n }\n}\n\n/**\n * Read cache only (no network). For non-blocking startup check.\n */\nexport function getCachedVersionNoFetch(): string | null {\n try {\n if (existsSync(CACHE_FILE)) {\n const cache: VersionCache = JSON.parse(readFileSync(CACHE_FILE, 'utf-8'));\n return cache.version;\n }\n } catch { /* ignore */ }\n return null;\n}\n\n/**\n * Compare semver: returns true if latest > current\n */\nexport function isNewerVersion(current: string, latest: string): boolean {\n const c = current.replace(/^v/, '').split('.').map(Number);\n const l = latest.replace(/^v/, '').split('.').map(Number);\n for (let i = 0; i < 3; i++) {\n if ((l[i] || 0) > (c[i] || 0)) return true;\n if ((l[i] || 0) < (c[i] || 0)) return false;\n }\n return false;\n}\n"],"mappings":"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","names":["join","dirname","fs","join","fs","join","kit","fs","join","resolve","pc","p","fs","join","pc","ora","pc","fs","join","pc","ora","pc","fs","fs","join","pc","pc","fs","join","pc","ora","p","pc","ora","execSync","pc","ora","join","pc","fs","join","p","confirm","readFileSync","fileURLToPath","dirname","join","pc","cli","initCommand","addCommand","listCommand","updateCommand","statusCommand","doctorCommand","helpCommand","uninstallCommand","versionsCommand","updateCliCommand","skillsCommand","join","homedir","existsSync","readFileSync","join","homedir","existsSync","readFileSync","__filename","fileURLToPath","__dirname","dirname","readFileSync","join","pc"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apero-kit-cli",
3
- "version": "2.2.2",
3
+ "version": "2.2.4",
4
4
  "description": "CLI tool to scaffold AI agent projects with pre-configured kits (Claude, OpenCode, Codex)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,3 +1,11 @@
1
+ ---
2
+ name: code-simplifier
3
+ description: >-
4
+ Simplifies and refines code for clarity, consistency, and maintainability
5
+ while preserving all functionality. Use when refactoring requests mention
6
+ "simplify", "clean up", or "reduce complexity".
7
+ ---
8
+
1
9
  # Code Simplifier Agent
2
10
 
3
11
  Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality. Focuses on recently modified code unless instructed otherwise.