apero-kit-cli 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -327,7 +327,7 @@ async function copyHooks(sourceDir, destDir, mergeMode = false) {
327
327
  }
328
328
  }
329
329
  async function copyBaseFiles(sourceDir, destDir, mergeMode = false) {
330
- const baseFiles = ["README.md", "settings.json", ".env.example"];
330
+ const baseFiles = ["README.md", "settings.json", ".env.example", "statusline.cjs", "statusline.ps1", "statusline.sh"];
331
331
  const copied = [];
332
332
  for (const file of baseFiles) {
333
333
  const srcPath = join2(sourceDir, file);
@@ -342,6 +342,18 @@ async function copyBaseFiles(sourceDir, destDir, mergeMode = false) {
342
342
  }
343
343
  return copied;
344
344
  }
345
+ async function copyDirectory(dirName, sourceDir, destDir, mergeMode = false) {
346
+ const srcPath = join2(sourceDir, dirName);
347
+ if (!fs.existsSync(srcPath)) {
348
+ return { success: false, error: `${dirName} directory not found` };
349
+ }
350
+ try {
351
+ await fs.copy(srcPath, join2(destDir, dirName), { overwrite: !mergeMode });
352
+ return { success: true };
353
+ } catch (err) {
354
+ return { success: false, error: err.message };
355
+ }
356
+ }
345
357
  async function copyAgentsMd(agentsMdPath, projectDir, mergeMode = false) {
346
358
  if (!agentsMdPath || !fs.existsSync(agentsMdPath)) {
347
359
  return false;
@@ -806,6 +818,10 @@ async function initCommand(projectName, options) {
806
818
  spinner.text = mergeMode ? "Merging hooks..." : "Copying hooks...";
807
819
  await copyHooks(source.claudeDir, targetDir2, mergeMode);
808
820
  }
821
+ spinner.text = mergeMode ? "Merging extras..." : "Copying extras...";
822
+ await copyDirectory("memory", source.claudeDir, targetDir2, mergeMode);
823
+ await copyDirectory("output-styles", source.claudeDir, targetDir2, mergeMode);
824
+ await copyDirectory("scripts", source.claudeDir, targetDir2, mergeMode);
809
825
  spinner.text = mergeMode ? "Merging base files..." : "Copying base files...";
810
826
  await copyBaseFiles(source.claudeDir, targetDir2, mergeMode);
811
827
  if (source.agentsMd) {
@@ -1541,6 +1557,33 @@ async function doctorCommand(options = {}) {
1541
1557
  }
1542
1558
  return {};
1543
1559
  }
1560
+ },
1561
+ {
1562
+ name: "subdirs_scripts",
1563
+ label: "scripts/ exists",
1564
+ severity: "warning",
1565
+ check: () => {
1566
+ if (!targetDir) return false;
1567
+ return fs8.existsSync(join8(targetDir.dir, "scripts"));
1568
+ }
1569
+ },
1570
+ {
1571
+ name: "subdirs_hooks",
1572
+ label: "hooks/ exists",
1573
+ severity: "warning",
1574
+ check: () => {
1575
+ if (!targetDir) return false;
1576
+ return fs8.existsSync(join8(targetDir.dir, "hooks"));
1577
+ }
1578
+ },
1579
+ {
1580
+ name: "statusline",
1581
+ label: "statusline files exist",
1582
+ severity: "warning",
1583
+ check: () => {
1584
+ if (!targetDir) return false;
1585
+ return fs8.existsSync(join8(targetDir.dir, "statusline.cjs")) || fs8.existsSync(join8(targetDir.dir, "statusline.sh"));
1586
+ }
1544
1587
  }
1545
1588
  ];
1546
1589
  const results = await runChecks(checks, options);
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 opencode: '.opencode',\n generic: '.agent'\n};\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 opencodeDir = join(dir, '.opencode');\n const agentDir = join(dir, '.agent');\n\n return existsSync(akConfig) ||\n existsSync(claudeDir) ||\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 } from 'path';\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, 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'];\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 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 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 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 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, installed } = options;\n\n // Calculate hashes of all installed files\n const targetDir = join(projectDir, target);\n const hashes = await hashDirectory(targetDir);\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 installed,\n originalHashes: hashes\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';\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: '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 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 } from '../utils/paths.js';\nimport { copyItems, copyAllOfType, copyRouter, copyHooks, copyBaseFiles, copyAgentsMd } 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} 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 target early to check existing\n let target = options.target || 'claude';\n if (!TARGETS[target]) {\n console.log(pc.yellow(`Unknown target \"${target}\", using \"claude\"`));\n target = 'claude';\n }\n\n const targetDir = getTargetDir(projectDir, target);\n let existingAction: string | null = null;\n\n // Handle --fresh flag (remove existing installation)\n if (options.fresh && fs.existsSync(targetDir)) {\n await fs.remove(targetDir);\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'));\n // Skip prompt since we already cleaned up\n existingAction = null;\n } else if (fs.existsSync(targetDir) && !options.force) {\n // Check if target directory (.claude, .opencode, etc.) already exists\n if (!process.stdin.isTTY || options.yes) {\n // Non-interactive mode or --yes flag - auto-override\n if (options.yes) {\n existingAction = 'override';\n } else {\n console.log(pc.yellow(`${TARGETS[target]} already exists. Use --force to override.`));\n return;\n }\n } else {\n existingAction = await promptExistingTarget(TARGETS[target]);\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(` Target: ${TARGETS[target]}/`));\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 // Create target directory\n const targetDir = getTargetDir(projectDir, target);\n await fs.ensureDir(targetDir);\n\n // Copy agents\n spinner.text = mergeMode ? 'Merging agents...' : 'Copying agents...';\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 // Copy skills\n spinner.text = mergeMode ? 'Merging skills...' : 'Copying skills...';\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 // Copy commands\n spinner.text = mergeMode ? 'Merging commands...' : 'Copying commands...';\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 // Copy workflows\n spinner.text = mergeMode ? 'Merging workflows...' : 'Copying workflows...';\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 // Copy router\n if (toInstall.includeRouter) {\n spinner.text = mergeMode ? 'Merging router...' : 'Copying router...';\n await copyRouter(source.claudeDir, targetDir, mergeMode);\n }\n\n // Copy hooks\n if (toInstall.includeHooks) {\n spinner.text = mergeMode ? 'Merging hooks...' : 'Copying hooks...';\n await copyHooks(source.claudeDir, targetDir, mergeMode);\n }\n\n // Copy base files\n spinner.text = mergeMode ? 'Merging base files...' : 'Copying base files...';\n await copyBaseFiles(source.claudeDir, targetDir, mergeMode);\n\n // Copy AGENTS.md\n if (source.agentsMd) {\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 target: TARGETS[target],\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 console.log(pc.white(' # Start coding with Claude Code'));\n } else {\n console.log(pc.cyan('Ready to code with Claude Code!'));\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\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) {\n console.log(pc.green('\\nAlready up to date!'));\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 folder (claude, opencode, generic)')\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 .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;AAkCjB,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,cAAc,KAAK,KAAK,WAAW;AACzC,QAAM,WAAW,KAAK,KAAK,QAAQ;AAEnC,SAAO,WAAW,QAAQ,KACnB,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;AA3IA,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,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA;AAAA;;;ACpBA,OAAO,QAAQ;AACf,SAAS,QAAAA,aAAsB;AAuB/B,eAAsB,UACpB,OACA,MACA,WACA,SACA,YAAqB,OACA;AACrB,QAAM,UAAUA,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,cAAc;AAC/D,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,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;AA9OA;AAAA;AAAA;AAAA;AAAA;;;ACAA,SAAS,kBAAkB;AAC3B,OAAOC,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;AA2Bd,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;AAYA,eAAsB,mBAAmB,YAAoB,SAAoD;AAC/G,QAAM,EAAE,KAAK,QAAQ,QAAQ,UAAU,IAAI;AAG3C,QAAM,YAAYC,MAAK,YAAY,MAAM;AACzC,QAAM,SAAS,MAAM,cAAc,SAAS;AAE5C,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,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,YAAYA,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;AA/KA,IAIM,WACA;AALN;AAAA;AAAA;AAEA;AAEA,IAAM,YAAY;AAClB,IAAM,aAAa;AAAA;AAAA;;;ACLnB,YAAY,OAAO;AACnB,OAAO,QAAQ;AAiBf,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;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;AA3IA;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;AAqBhB,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,SAAS,QAAQ,UAAU;AAC/B,MAAI,CAAC,QAAQ,MAAM,GAAG;AACpB,YAAQ,IAAIC,IAAG,OAAO,mBAAmB,MAAM,mBAAmB,CAAC;AACnE,aAAS;AAAA,EACX;AAEA,QAAM,YAAY,aAAa,YAAY,MAAM;AACjD,MAAI,iBAAgC;AAGpC,MAAI,QAAQ,SAASH,IAAG,WAAW,SAAS,GAAG;AAC7C,UAAMA,IAAG,OAAO,SAAS;AACzB,UAAM,QAAQC,MAAK,YAAY,KAAK;AACpC,QAAID,IAAG,WAAW,KAAK,GAAG;AACxB,YAAMA,IAAG,OAAO,KAAK;AAAA,IACvB;AACA,YAAQ,IAAIG,IAAG,KAAK,uCAAuC,CAAC;AAE5D,qBAAiB;AAAA,EACnB,WAAWH,IAAG,WAAW,SAAS,KAAK,CAAC,QAAQ,OAAO;AAErD,QAAI,CAAC,QAAQ,MAAM,SAAS,QAAQ,KAAK;AAEvC,UAAI,QAAQ,KAAK;AACf,yBAAiB;AAAA,MACnB,OAAO;AACL,gBAAQ,IAAIG,IAAG,OAAO,GAAG,QAAQ,MAAM,CAAC,2CAA2C,CAAC;AACpF;AAAA,MACF;AAAA,IACF,OAAO;AACL,uBAAiB,MAAM,qBAAqB,QAAQ,MAAM,CAAC;AAE3D,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,QAAQ,MAAM,CAAC,GAAG,CAAC;AACtD,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,UAAMK,aAAY,aAAa,YAAY,MAAM;AACjD,UAAML,IAAG,UAAUK,UAAS;AAG5B,YAAQ,OAAO,YAAY,sBAAsB;AACjD,QAAI,UAAU,WAAW,OAAO;AAC9B,YAAM,cAAc,UAAU,OAAO,WAAWA,YAAW,SAAS;AAAA,IACtE,WAAW,UAAU,OAAO,SAAS,GAAG;AACtC,YAAM,UAAU,UAAU,QAAQ,UAAU,OAAO,WAAWA,YAAW,SAAS;AAAA,IACpF;AAGA,YAAQ,OAAO,YAAY,sBAAsB;AACjD,QAAI,UAAU,WAAW,OAAO;AAC9B,YAAM,cAAc,UAAU,OAAO,WAAWA,YAAW,SAAS;AAAA,IACtE,WAAW,UAAU,OAAO,SAAS,GAAG;AACtC,YAAM,UAAU,UAAU,QAAQ,UAAU,OAAO,WAAWA,YAAW,SAAS;AAAA,IACpF;AAGA,YAAQ,OAAO,YAAY,wBAAwB;AACnD,QAAI,UAAU,aAAa,OAAO;AAChC,YAAM,cAAc,YAAY,OAAO,WAAWA,YAAW,SAAS;AAAA,IACxE,WAAW,UAAU,SAAS,SAAS,GAAG;AACxC,YAAM,UAAU,UAAU,UAAU,YAAY,OAAO,WAAWA,YAAW,SAAS;AAAA,IACxF;AAGA,YAAQ,OAAO,YAAY,yBAAyB;AACpD,QAAI,UAAU,cAAc,OAAO;AACjC,YAAM,cAAc,aAAa,OAAO,WAAWA,YAAW,SAAS;AAAA,IACzE,WAAW,UAAU,aAAa,UAAU,UAAU,SAAS,GAAG;AAChE,YAAM,UAAU,UAAU,WAAW,aAAa,OAAO,WAAWA,YAAW,SAAS;AAAA,IAC1F;AAGA,QAAI,UAAU,eAAe;AAC3B,cAAQ,OAAO,YAAY,sBAAsB;AACjD,YAAM,WAAW,OAAO,WAAWA,YAAW,SAAS;AAAA,IACzD;AAGA,QAAI,UAAU,cAAc;AAC1B,cAAQ,OAAO,YAAY,qBAAqB;AAChD,YAAM,UAAU,OAAO,WAAWA,YAAW,SAAS;AAAA,IACxD;AAGA,YAAQ,OAAO,YAAY,0BAA0B;AACrD,UAAM,cAAc,OAAO,WAAWA,YAAW,SAAS;AAG1D,QAAI,OAAO,UAAU;AACnB,YAAM,aAAa,OAAO,UAAU,YAAY,SAAS;AAAA,IAC3D;AAGA,YAAQ,OAAO;AACf,UAAM,mBAAmB,YAAY;AAAA,MACnC,KAAK;AAAA,MACL,QAAQ,OAAO;AAAA,MACf,QAAQ,QAAQ,MAAM;AAAA,MACtB,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,QAAQF,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;AAC3C,cAAQ,IAAIA,IAAG,MAAM,mCAAmC,CAAC;AAAA,IAC3D,OAAO;AACL,cAAQ,IAAIA,IAAG,KAAK,iCAAiC,CAAC;AAAA,IACxD;AACA,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;AA5TA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;ACRA;AAAA;AAAA;AAAA;AAAA,OAAOG,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,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,aAAaC,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;AApaA;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,SAAS;AAC1C,cAAQ,IAAIA,KAAG,MAAM,uBAAuB,CAAC;AAC7C;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;AA/DA;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,2CAA2C,EAC3E,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,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;;;AC1IA,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","fs","join","fs","join","kit","fs","join","resolve","pc","p","targetDir","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 opencode: '.opencode',\n generic: '.agent'\n};\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 opencodeDir = join(dir, '.opencode');\n const agentDir = join(dir, '.agent');\n\n return existsSync(akConfig) ||\n existsSync(claudeDir) ||\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 } from 'path';\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 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 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 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, installed } = options;\n\n // Calculate hashes of all installed files\n const targetDir = join(projectDir, target);\n const hashes = await hashDirectory(targetDir);\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 installed,\n originalHashes: hashes\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';\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: '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 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 } from '../utils/paths.js';\nimport { copyItems, copyAllOfType, copyRouter, copyHooks, copyBaseFiles, copyAgentsMd, copyDirectory } 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} 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 target early to check existing\n let target = options.target || 'claude';\n if (!TARGETS[target]) {\n console.log(pc.yellow(`Unknown target \"${target}\", using \"claude\"`));\n target = 'claude';\n }\n\n const targetDir = getTargetDir(projectDir, target);\n let existingAction: string | null = null;\n\n // Handle --fresh flag (remove existing installation)\n if (options.fresh && fs.existsSync(targetDir)) {\n await fs.remove(targetDir);\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'));\n // Skip prompt since we already cleaned up\n existingAction = null;\n } else if (fs.existsSync(targetDir) && !options.force) {\n // Check if target directory (.claude, .opencode, etc.) already exists\n if (!process.stdin.isTTY || options.yes) {\n // Non-interactive mode or --yes flag - auto-override\n if (options.yes) {\n existingAction = 'override';\n } else {\n console.log(pc.yellow(`${TARGETS[target]} already exists. Use --force to override.`));\n return;\n }\n } else {\n existingAction = await promptExistingTarget(TARGETS[target]);\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(` Target: ${TARGETS[target]}/`));\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 // Create target directory\n const targetDir = getTargetDir(projectDir, target);\n await fs.ensureDir(targetDir);\n\n // Copy agents\n spinner.text = mergeMode ? 'Merging agents...' : 'Copying agents...';\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 // Copy skills\n spinner.text = mergeMode ? 'Merging skills...' : 'Copying skills...';\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 // Copy commands\n spinner.text = mergeMode ? 'Merging commands...' : 'Copying commands...';\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 // Copy workflows\n spinner.text = mergeMode ? 'Merging workflows...' : 'Copying workflows...';\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 // Copy router\n if (toInstall.includeRouter) {\n spinner.text = mergeMode ? 'Merging router...' : 'Copying router...';\n await copyRouter(source.claudeDir, targetDir, mergeMode);\n }\n\n // Copy hooks\n if (toInstall.includeHooks) {\n spinner.text = mergeMode ? 'Merging hooks...' : 'Copying hooks...';\n await copyHooks(source.claudeDir, targetDir, mergeMode);\n }\n\n // Copy memory, output-styles, scripts directories\n spinner.text = mergeMode ? 'Merging extras...' : 'Copying extras...';\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\n // Copy base files (includes statusline files)\n spinner.text = mergeMode ? 'Merging base files...' : 'Copying base files...';\n await copyBaseFiles(source.claudeDir, targetDir, mergeMode);\n\n // Copy AGENTS.md\n if (source.agentsMd) {\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 target: TARGETS[target],\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 console.log(pc.white(' # Start coding with Claude Code'));\n } else {\n console.log(pc.cyan('Ready to code with Claude Code!'));\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) {\n console.log(pc.green('\\nAlready up to date!'));\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 folder (claude, opencode, generic)')\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 .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","fs","join","fs","join","kit","fs","join","resolve","pc","p","targetDir","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.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "CLI tool to scaffold AI agent projects with pre-configured kits (Claude, OpenCode, Codex)",
5
5
  "type": "module",
6
6
  "bin": {