@skillkit/cli 1.4.0 → 1.5.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.d.ts +82 -1
- package/dist/index.js +1213 -14
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/list.ts","../src/helpers.ts","../src/commands/read.ts","../src/commands/sync.ts","../src/commands/init.ts","../src/commands/enable.ts","../src/commands/remove.ts","../src/commands/install.ts","../src/commands/update.ts","../src/commands/validate.ts","../src/commands/create.ts","../src/commands/ui.ts","../src/commands/translate.ts","../src/commands/context.ts","../src/commands/recommend.ts","../src/commands/status.ts","../src/commands/pause.ts","../src/commands/resume.ts","../src/commands/workflow/run.ts","../src/commands/workflow/list.ts","../src/commands/workflow/create.ts","../src/commands/run.ts","../src/commands/test.ts","../src/commands/marketplace.ts","../src/commands/memory.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { findAllSkills } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\n\nexport class ListCommand extends Command {\n static override paths = [['list'], ['ls'], ['l']];\n\n static override usage = Command.Usage({\n description: 'List all installed skills',\n examples: [\n ['List all skills', '$0 list'],\n ['Show only enabled skills', '$0 list --enabled'],\n ['Show JSON output', '$0 list --json'],\n ],\n });\n\n enabled = Option.Boolean('--enabled,-e', false, {\n description: 'Show only enabled skills',\n });\n\n disabled = Option.Boolean('--disabled,-d', false, {\n description: 'Show only disabled skills',\n });\n\n json = Option.Boolean('--json,-j', false, {\n description: 'Output as JSON',\n });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n let skills = findAllSkills(searchDirs);\n\n if (this.enabled) {\n skills = skills.filter(s => s.enabled);\n } else if (this.disabled) {\n skills = skills.filter(s => !s.enabled);\n }\n\n skills.sort((a, b) => {\n if (a.location !== b.location) {\n return a.location === 'project' ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n\n if (this.json) {\n console.log(JSON.stringify(skills, null, 2));\n return 0;\n }\n\n if (skills.length === 0) {\n console.log(chalk.yellow('No skills installed'));\n console.log(chalk.dim('Install skills with: skillkit install <source>'));\n return 0;\n }\n\n console.log(chalk.cyan(`Installed skills (${skills.length}):\\n`));\n\n const projectSkills = skills.filter(s => s.location === 'project');\n const globalSkills = skills.filter(s => s.location === 'global');\n\n if (projectSkills.length > 0) {\n console.log(chalk.blue('Project skills:'));\n for (const skill of projectSkills) {\n printSkill(skill);\n }\n console.log();\n }\n\n if (globalSkills.length > 0) {\n console.log(chalk.dim('Global skills:'));\n for (const skill of globalSkills) {\n printSkill(skill);\n }\n console.log();\n }\n\n const enabledCount = skills.filter(s => s.enabled).length;\n const disabledCount = skills.length - enabledCount;\n\n console.log(\n chalk.dim(\n `${projectSkills.length} project, ${globalSkills.length} global` +\n (disabledCount > 0 ? `, ${disabledCount} disabled` : '')\n )\n );\n\n return 0;\n }\n}\n\nfunction printSkill(skill: { name: string; description: string; enabled: boolean; location: string }) {\n const status = skill.enabled ? chalk.green('✓') : chalk.red('○');\n const name = skill.enabled ? skill.name : chalk.dim(skill.name);\n const desc = chalk.dim(truncate(skill.description, 50));\n\n console.log(` ${status} ${name}`);\n if (skill.description) {\n console.log(` ${desc}`);\n }\n}\n\nfunction truncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 3) + '...';\n}\n","// Re-export commonly used functions with proper adapters\nimport {\n loadConfig,\n getSearchDirs as coreGetSearchDirs,\n getInstallDir as coreGetInstallDir,\n getAgentConfigPath as coreGetAgentConfigPath,\n initProject as coreInitProject,\n loadSkillMetadata as coreLoadSkillMetadata,\n saveSkillMetadata as coreSaveSkillMetadata,\n} from '@skillkit/core';\nimport { getAdapter, detectAgent } from '@skillkit/agents';\nimport type { AgentType, AgentAdapterInfo } from '@skillkit/core';\n\n// Re-export metadata functions directly (they don't need adapter bridging)\nexport const loadSkillMetadata = coreLoadSkillMetadata;\nexport const saveSkillMetadata = coreSaveSkillMetadata;\n\nexport function getSearchDirs(agentType?: AgentType): string[] {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetSearchDirs(adapterInfo);\n}\n\nexport function getInstallDir(global = false, agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetInstallDir(adapterInfo, global);\n}\n\nexport function getAgentConfigPath(agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetAgentConfigPath(adapterInfo);\n}\n\nexport async function initProject(agentType?: AgentType): Promise<void> {\n const type = agentType || (await detectAgent());\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreInitProject(type, adapterInfo);\n}\n","import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { findSkill, readSkillContent } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\n\nexport class ReadCommand extends Command {\n static override paths = [['read'], ['r']];\n\n static override usage = Command.Usage({\n description: 'Read skill content for AI agent consumption',\n examples: [\n ['Read a single skill', '$0 read pdf'],\n ['Read multiple skills', '$0 read pdf,xlsx,docx'],\n ['Read with verbose output', '$0 read pdf --verbose'],\n ],\n });\n\n skills = Option.String({ required: true });\n\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show additional information',\n });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n\n const skillNames = this.skills\n .split(',')\n .map(s => s.trim())\n .filter(s => s.length > 0);\n\n if (skillNames.length === 0) {\n console.error(chalk.red('No skill names provided'));\n return 1;\n }\n\n let exitCode = 0;\n\n for (const skillName of skillNames) {\n const skill = findSkill(skillName, searchDirs);\n\n if (!skill) {\n console.error(chalk.red(`Skill not found: ${skillName}`));\n console.error(chalk.dim('Available directories:'));\n searchDirs.forEach(d => console.error(chalk.dim(` - ${d}`)));\n exitCode = 1;\n continue;\n }\n\n if (!skill.enabled) {\n console.error(chalk.yellow(`Skill disabled: ${skillName}`));\n console.error(chalk.dim('Enable with: skillkit enable ' + skillName));\n exitCode = 1;\n continue;\n }\n\n const content = readSkillContent(skill.path);\n\n if (!content) {\n console.error(chalk.red(`Could not read SKILL.md for: ${skillName}`));\n exitCode = 1;\n continue;\n }\n\n console.log(`Reading: ${skillName}`);\n console.log(`Base directory: ${skill.path}`);\n console.log();\n console.log(content);\n console.log();\n console.log(`Skill read: ${skillName}`);\n\n if (skillNames.length > 1 && skillName !== skillNames[skillNames.length - 1]) {\n console.log('\\n---\\n');\n }\n }\n\n return exitCode;\n }\n}\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { loadConfig, findAllSkills } from '@skillkit/core';\nimport type { AgentType } from '@skillkit/core';\nimport { getAdapter, detectAgent } from '@skillkit/agents';\nimport { getSearchDirs, getAgentConfigPath } from '../helpers.js';\n\nexport class SyncCommand extends Command {\n static override paths = [['sync'], ['s']];\n\n static override usage = Command.Usage({\n description: 'Sync skills to agent configuration file',\n examples: [\n ['Sync all enabled skills', '$0 sync'],\n ['Sync to specific file', '$0 sync --output AGENTS.md'],\n ['Sync for specific agent', '$0 sync --agent cursor'],\n ['Only sync enabled skills', '$0 sync --enabled-only'],\n ],\n });\n\n output = Option.String('--output,-o', {\n description: 'Output file path (default: agent-specific config file)',\n });\n\n agent = Option.String('--agent,-a', {\n description: 'Target agent type (claude-code, cursor, codex, etc.)',\n });\n\n enabledOnly = Option.Boolean('--enabled-only,-e', true, {\n description: 'Only include enabled skills (default: true)',\n });\n\n yes = Option.Boolean('--yes,-y', false, {\n description: 'Skip confirmation prompts',\n });\n\n async execute(): Promise<number> {\n try {\n let agentType: AgentType;\n\n if (this.agent) {\n agentType = this.agent as AgentType;\n } else {\n const config = loadConfig();\n agentType = config.agent || (await detectAgent());\n }\n\n const adapter = getAdapter(agentType);\n\n const outputPath = this.output || getAgentConfigPath(agentType);\n\n const searchDirs = getSearchDirs(agentType);\n let skills = findAllSkills(searchDirs);\n\n if (this.enabledOnly) {\n skills = skills.filter(s => s.enabled);\n }\n\n if (skills.length === 0) {\n console.log(chalk.yellow('No skills found to sync'));\n console.log(chalk.dim('Install skills with: skillkit install <source>'));\n return 0;\n }\n\n console.log(chalk.cyan(`Syncing ${skills.length} skill(s) for ${adapter.name}:`));\n skills.forEach(s => {\n const status = s.enabled ? chalk.green('✓') : chalk.dim('○');\n const location = s.location === 'project' ? chalk.blue('[project]') : chalk.dim('[global]');\n console.log(` ${status} ${s.name} ${location}`);\n });\n console.log();\n\n const config = adapter.generateConfig(skills);\n\n if (!config) {\n console.log(chalk.yellow('No configuration generated'));\n return 0;\n }\n\n let existingContent = '';\n if (existsSync(outputPath)) {\n existingContent = readFileSync(outputPath, 'utf-8');\n }\n\n const newContent = updateConfigContent(existingContent, config, agentType);\n\n const dir = dirname(outputPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(outputPath, newContent, 'utf-8');\n\n console.log(chalk.green(`Synced to ${outputPath}`));\n console.log(chalk.dim(`Agent: ${adapter.name}`));\n\n return 0;\n } catch (error) {\n console.error(chalk.red('Sync failed'));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n\nfunction updateConfigContent(existing: string, newConfig: string, agentType: AgentType): string {\n const markers: Record<string, { start: string; end: string }> = {\n 'claude-code': {\n start: '<!-- SKILLS_TABLE_START -->',\n end: '<!-- SKILLS_TABLE_END -->',\n },\n cursor: {\n start: '<!-- SKILLS_DATA_START -->',\n end: '<!-- SKILLS_DATA_END -->',\n },\n universal: {\n start: '<!-- SKILLKIT_SKILLS_START -->',\n end: '<!-- SKILLKIT_SKILLS_END -->',\n },\n };\n\n const agentMarkers = markers[agentType] || markers.universal;\n\n const startIdx = existing.indexOf(agentMarkers.start);\n const endIdx = existing.indexOf(agentMarkers.end);\n\n if (startIdx !== -1 && endIdx !== -1) {\n return (\n existing.slice(0, startIdx) +\n newConfig.slice(newConfig.indexOf(agentMarkers.start)) +\n existing.slice(endIdx + agentMarkers.end.length)\n );\n }\n\n const genericStart = '<!-- SKILLKIT_SKILLS_START -->';\n const genericEnd = '<!-- SKILLKIT_SKILLS_END -->';\n const gStartIdx = existing.indexOf(genericStart);\n const gEndIdx = existing.indexOf(genericEnd);\n\n if (gStartIdx !== -1 && gEndIdx !== -1) {\n return (\n existing.slice(0, gStartIdx) + newConfig + existing.slice(gEndIdx + genericEnd.length)\n );\n }\n\n if (existing.trim()) {\n return existing + '\\n\\n' + newConfig;\n }\n\n return newConfig;\n}\n","import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport type { AgentType } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { initProject } from '../helpers.js';\n\nexport class InitCommand extends Command {\n static override paths = [['init']];\n\n static override usage = Command.Usage({\n description: 'Initialize skillkit in a project',\n examples: [\n ['Auto-detect agent and initialize', '$0 init'],\n ['Initialize for specific agent', '$0 init --agent cursor'],\n ['List supported agents', '$0 init --list'],\n ],\n });\n\n agent = Option.String('--agent,-a', {\n description: 'Target agent type',\n });\n\n list = Option.Boolean('--list,-l', false, {\n description: 'List supported agents',\n });\n\n async execute(): Promise<number> {\n if (this.list) {\n console.log(chalk.cyan('Supported agents:\\n'));\n const adapters = getAllAdapters();\n\n for (const adapter of adapters) {\n console.log(` ${chalk.green(adapter.type)}`);\n console.log(` Name: ${adapter.name}`);\n console.log(` Skills dir: ${adapter.skillsDir}`);\n console.log(` Config file: ${adapter.configFile}`);\n console.log();\n }\n\n return 0;\n }\n\n try {\n let agentType: AgentType;\n\n if (this.agent) {\n agentType = this.agent as AgentType;\n } else {\n console.log(chalk.dim('Auto-detecting agent...'));\n agentType = await detectAgent();\n }\n\n const adapter = getAdapter(agentType);\n\n console.log(chalk.cyan(`Initializing for ${adapter.name}...`));\n\n await initProject(agentType);\n\n console.log();\n console.log(chalk.green('Initialized successfully!'));\n console.log();\n console.log(chalk.dim('Created:'));\n console.log(chalk.dim(` - ${adapter.skillsDir}/ (skills directory)`));\n console.log(chalk.dim(` - skillkit.yaml (config file)`));\n console.log(chalk.dim(` - ${adapter.configFile} (agent config)`));\n console.log();\n console.log(chalk.cyan('Next steps:'));\n console.log(chalk.dim(' 1. Install skills: skillkit install owner/repo'));\n console.log(chalk.dim(' 2. Sync config: skillkit sync'));\n console.log(chalk.dim(' 3. Use skills: skillkit read <skill-name>'));\n\n return 0;\n } catch (error) {\n console.error(chalk.red('Initialization failed'));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n","import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { setSkillEnabled, findSkill } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\n\nexport class EnableCommand extends Command {\n static override paths = [['enable']];\n\n static override usage = Command.Usage({\n description: 'Enable one or more skills',\n examples: [\n ['Enable a skill', '$0 enable pdf'],\n ['Enable multiple skills', '$0 enable pdf xlsx docx'],\n ],\n });\n\n skills = Option.Rest({ required: 1 });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n let success = 0;\n let failed = 0;\n\n for (const skillName of this.skills) {\n const skill = findSkill(skillName, searchDirs);\n\n if (!skill) {\n console.log(chalk.red(`Skill not found: ${skillName}`));\n failed++;\n continue;\n }\n\n if (skill.enabled) {\n console.log(chalk.dim(`Already enabled: ${skillName}`));\n continue;\n }\n\n const result = setSkillEnabled(skill.path, true);\n\n if (result) {\n console.log(chalk.green(`Enabled: ${skillName}`));\n success++;\n } else {\n console.log(chalk.red(`Failed to enable: ${skillName}`));\n failed++;\n }\n }\n\n if (success > 0) {\n console.log(chalk.dim('\\nRun `skillkit sync` to update your agent config'));\n }\n\n return failed > 0 ? 1 : 0;\n }\n}\n\nexport class DisableCommand extends Command {\n static override paths = [['disable']];\n\n static override usage = Command.Usage({\n description: 'Disable one or more skills',\n examples: [\n ['Disable a skill', '$0 disable pdf'],\n ['Disable multiple skills', '$0 disable pdf xlsx docx'],\n ],\n });\n\n skills = Option.Rest({ required: 1 });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n let success = 0;\n let failed = 0;\n\n for (const skillName of this.skills) {\n const skill = findSkill(skillName, searchDirs);\n\n if (!skill) {\n console.log(chalk.red(`Skill not found: ${skillName}`));\n failed++;\n continue;\n }\n\n if (!skill.enabled) {\n console.log(chalk.dim(`Already disabled: ${skillName}`));\n continue;\n }\n\n const result = setSkillEnabled(skill.path, false);\n\n if (result) {\n console.log(chalk.yellow(`Disabled: ${skillName}`));\n success++;\n } else {\n console.log(chalk.red(`Failed to disable: ${skillName}`));\n failed++;\n }\n }\n\n if (success > 0) {\n console.log(chalk.dim('\\nRun `skillkit sync` to update your agent config'));\n }\n\n return failed > 0 ? 1 : 0;\n }\n}\n","import { existsSync, rmSync } from 'node:fs';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { findSkill } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\n\nexport class RemoveCommand extends Command {\n static override paths = [['remove'], ['rm'], ['uninstall']];\n\n static override usage = Command.Usage({\n description: 'Remove installed skills',\n examples: [\n ['Remove a skill', '$0 remove pdf'],\n ['Remove multiple skills', '$0 remove pdf xlsx docx'],\n ['Force removal without confirmation', '$0 remove pdf --force'],\n ],\n });\n\n skills = Option.Rest({ required: 1 });\n\n force = Option.Boolean('--force,-f', false, {\n description: 'Skip confirmation',\n });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n let removed = 0;\n let failed = 0;\n\n for (const skillName of this.skills) {\n const skill = findSkill(skillName, searchDirs);\n\n if (!skill) {\n console.log(chalk.yellow(`Skill not found: ${skillName}`));\n continue;\n }\n\n if (!existsSync(skill.path)) {\n console.log(chalk.yellow(`Path not found: ${skill.path}`));\n continue;\n }\n\n try {\n rmSync(skill.path, { recursive: true, force: true });\n console.log(chalk.green(`Removed: ${skillName}`));\n removed++;\n } catch (error) {\n console.log(chalk.red(`Failed to remove: ${skillName}`));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n failed++;\n }\n }\n\n if (removed > 0) {\n console.log(chalk.dim('\\nRun `skillkit sync` to update your agent config'));\n }\n\n return failed > 0 ? 1 : 0;\n }\n}\n","import { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Command, Option } from 'clipanion';\nimport { detectProvider, isLocalPath, getProvider } from '@skillkit/core';\nimport type { SkillMetadata, GitProvider, AgentType } from '@skillkit/core';\nimport { isPathInside } from '@skillkit/core';\nimport { getAdapter, detectAgent } from '@skillkit/agents';\nimport { getInstallDir, saveSkillMetadata } from '../helpers.js';\n\nexport class InstallCommand extends Command {\n static override paths = [['install'], ['i']];\n\n static override usage = Command.Usage({\n description: 'Install skills from GitHub, GitLab, Bitbucket, or local path',\n examples: [\n ['Install from GitHub', '$0 install owner/repo'],\n ['Install from GitLab', '$0 install gitlab:owner/repo'],\n ['Install from Bitbucket', '$0 install bitbucket:owner/repo'],\n ['Install specific skills (CI/CD)', '$0 install owner/repo --skills=pdf,xlsx'],\n ['Install all skills non-interactively', '$0 install owner/repo --all'],\n ['Install from local path', '$0 install ./my-skills'],\n ['Install globally', '$0 install owner/repo --global'],\n ['List available skills', '$0 install owner/repo --list'],\n ['Install to specific agents', '$0 install owner/repo --agent claude-code --agent cursor'],\n ],\n });\n\n source = Option.String({ required: true });\n\n skills = Option.String('--skills,-s', {\n description: 'Comma-separated list of skills to install (non-interactive)',\n });\n\n all = Option.Boolean('--all,-a', false, {\n description: 'Install all discovered skills (non-interactive)',\n });\n\n yes = Option.Boolean('--yes,-y', false, {\n description: 'Skip confirmation prompts',\n });\n\n global = Option.Boolean('--global,-g', false, {\n description: 'Install to global skills directory',\n });\n\n force = Option.Boolean('--force,-f', false, {\n description: 'Overwrite existing skills',\n });\n\n provider = Option.String('--provider,-p', {\n description: 'Force specific provider (github, gitlab, bitbucket)',\n });\n\n list = Option.Boolean('--list,-l', false, {\n description: 'List available skills without installing',\n });\n\n agent = Option.Array('--agent', {\n description: 'Target specific agents (can specify multiple)',\n });\n\n async execute(): Promise<number> {\n const spinner = ora();\n\n try {\n let providerAdapter = detectProvider(this.source);\n\n if (this.provider) {\n providerAdapter = getProvider(this.provider as GitProvider);\n }\n\n if (!providerAdapter) {\n console.error(chalk.red(`Could not detect provider for: ${this.source}`));\n console.error(chalk.dim('Use --provider flag or specify source as:'));\n console.error(chalk.dim(' GitHub: owner/repo or https://github.com/owner/repo'));\n console.error(chalk.dim(' GitLab: gitlab:owner/repo or https://gitlab.com/owner/repo'));\n console.error(chalk.dim(' Bitbucket: bitbucket:owner/repo'));\n console.error(chalk.dim(' Local: ./path or ~/path'));\n return 1;\n }\n\n spinner.start(`Fetching from ${providerAdapter.name}...`);\n\n const result = await providerAdapter.clone(this.source, '', { depth: 1 });\n\n if (!result.success || !result.path) {\n spinner.fail(chalk.red(result.error || 'Failed to fetch source'));\n return 1;\n }\n\n spinner.succeed(`Found ${result.skills?.length || 0} skill(s)`);\n\n const discoveredSkills = result.discoveredSkills || [];\n\n if (this.list) {\n if (discoveredSkills.length === 0) {\n console.log(chalk.yellow('\\nNo skills found in this repository'));\n } else {\n console.log(chalk.cyan('\\nAvailable skills:\\n'));\n for (const skill of discoveredSkills) {\n console.log(` ${chalk.green(skill.name)}`);\n }\n console.log();\n console.log(chalk.dim(`Total: ${discoveredSkills.length} skill(s)`));\n console.log(chalk.dim('\\nTo install specific skills: skillkit install <source> --skills=skill1,skill2'));\n console.log(chalk.dim('To install all skills: skillkit install <source> --all'));\n }\n\n const cleanupPath = result.tempRoot || result.path;\n if (!isLocalPath(this.source) && cleanupPath && existsSync(cleanupPath)) {\n rmSync(cleanupPath, { recursive: true, force: true });\n }\n\n return 0;\n }\n\n let skillsToInstall = discoveredSkills;\n\n if (this.skills) {\n const requestedSkills = this.skills.split(',').map(s => s.trim());\n const available = discoveredSkills.map(s => s.name);\n const notFound = requestedSkills.filter(s => !available.includes(s));\n\n if (notFound.length > 0) {\n console.error(chalk.red(`Skills not found: ${notFound.join(', ')}`));\n console.error(chalk.dim(`Available: ${available.join(', ')}`));\n return 1;\n }\n\n skillsToInstall = discoveredSkills.filter(s => requestedSkills.includes(s.name));\n } else if (this.all || this.yes) {\n skillsToInstall = discoveredSkills;\n } else {\n skillsToInstall = discoveredSkills;\n\n if (skillsToInstall.length > 0) {\n console.log(chalk.cyan('\\nSkills to install:'));\n skillsToInstall.forEach(s => console.log(chalk.dim(` - ${s.name}`)));\n console.log();\n }\n }\n\n if (skillsToInstall.length === 0) {\n console.log(chalk.yellow('No skills to install'));\n return 0;\n }\n\n let targetAgents: AgentType[];\n if (this.agent && this.agent.length > 0) {\n targetAgents = this.agent as AgentType[];\n } else {\n const detectedAgent = await detectAgent();\n targetAgents = [detectedAgent];\n }\n\n let totalInstalled = 0;\n const installResults: { agent: string; dir: string; count: number }[] = [];\n\n for (const agentType of targetAgents) {\n const adapter = getAdapter(agentType);\n const installDir = getInstallDir(this.global, agentType);\n\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n if (targetAgents.length > 1) {\n console.log(chalk.cyan(`\\nInstalling to ${adapter.name}...`));\n }\n\n let installed = 0;\n for (const skill of skillsToInstall) {\n const skillName = skill.name;\n const sourcePath = skill.path;\n const targetPath = join(installDir, skillName);\n\n if (existsSync(targetPath) && !this.force) {\n console.log(chalk.yellow(` Skipping ${skillName} (already exists, use --force to overwrite)`));\n continue;\n }\n\n const securityRoot = result.tempRoot || result.path;\n if (!isPathInside(sourcePath, securityRoot)) {\n console.log(chalk.red(` Skipping ${skillName} (path traversal detected)`));\n continue;\n }\n\n spinner.start(`Installing ${skillName}...`);\n\n try {\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n\n cpSync(sourcePath, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: this.source,\n sourceType: providerAdapter.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n spinner.succeed(chalk.green(`Installed ${skillName}`));\n installed++;\n } catch (error) {\n spinner.fail(chalk.red(`Failed to install ${skillName}`));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n }\n }\n\n totalInstalled += installed;\n installResults.push({ agent: adapter.name, dir: installDir, count: installed });\n }\n\n const cleanupPath = result.tempRoot || result.path;\n if (!isLocalPath(this.source) && cleanupPath && existsSync(cleanupPath)) {\n rmSync(cleanupPath, { recursive: true, force: true });\n }\n\n console.log();\n if (targetAgents.length > 1) {\n console.log(chalk.green(`Installed ${totalInstalled} skill(s) across ${targetAgents.length} agents:`));\n for (const r of installResults) {\n console.log(chalk.dim(` - ${r.agent}: ${r.count} skill(s) to ${r.dir}`));\n }\n } else {\n console.log(chalk.green(`Installed ${totalInstalled} skill(s) to ${installResults[0]?.dir}`));\n }\n\n if (!this.yes) {\n console.log(chalk.dim('\\nRun `skillkit sync` to update your agent config'));\n }\n\n return 0;\n } catch (error) {\n spinner.fail(chalk.red('Installation failed'));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n","import { existsSync, rmSync, cpSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Command, Option } from 'clipanion';\nimport { findAllSkills, findSkill, detectProvider, isLocalPath } from '@skillkit/core';\nimport { getSearchDirs, loadSkillMetadata, saveSkillMetadata } from '../helpers.js';\n\nexport class UpdateCommand extends Command {\n static override paths = [['update'], ['u']];\n\n static override usage = Command.Usage({\n description: 'Update skills from their original sources',\n examples: [\n ['Update all skills', '$0 update'],\n ['Update specific skills', '$0 update pdf xlsx'],\n ['Force update (overwrite local changes)', '$0 update --force'],\n ],\n });\n\n skills = Option.Rest();\n\n force = Option.Boolean('--force,-f', false, {\n description: 'Force update even if local changes exist',\n });\n\n async execute(): Promise<number> {\n const spinner = ora();\n const searchDirs = getSearchDirs();\n\n let skillsToUpdate;\n\n if (this.skills.length > 0) {\n skillsToUpdate = this.skills\n .map(name => findSkill(name, searchDirs))\n .filter((s): s is NonNullable<typeof s> => s !== null);\n\n const notFound = this.skills.filter(name => !findSkill(name, searchDirs));\n if (notFound.length > 0) {\n console.log(chalk.yellow(`Skills not found: ${notFound.join(', ')}`));\n }\n } else {\n skillsToUpdate = findAllSkills(searchDirs);\n }\n\n if (skillsToUpdate.length === 0) {\n console.log(chalk.yellow('No skills to update'));\n return 0;\n }\n\n console.log(chalk.cyan(`Updating ${skillsToUpdate.length} skill(s)...\\n`));\n\n let updated = 0;\n let skipped = 0;\n let failed = 0;\n\n for (const skill of skillsToUpdate) {\n const metadata = loadSkillMetadata(skill.path);\n\n if (!metadata) {\n console.log(chalk.dim(`Skipping ${skill.name} (no metadata, reinstall needed)`));\n skipped++;\n continue;\n }\n\n spinner.start(`Updating ${skill.name}...`);\n\n try {\n if (isLocalPath(metadata.source)) {\n const localPath = metadata.subpath\n ? join(metadata.source, metadata.subpath)\n : metadata.source;\n\n if (!existsSync(localPath)) {\n spinner.warn(chalk.yellow(`${skill.name}: local source missing`));\n skipped++;\n continue;\n }\n\n const skillMdPath = join(localPath, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n spinner.warn(chalk.yellow(`${skill.name}: no SKILL.md at source`));\n skipped++;\n continue;\n }\n\n rmSync(skill.path, { recursive: true, force: true });\n cpSync(localPath, skill.path, { recursive: true, dereference: true });\n\n metadata.updatedAt = new Date().toISOString();\n saveSkillMetadata(skill.path, metadata);\n\n spinner.succeed(chalk.green(`Updated ${skill.name}`));\n updated++;\n } else {\n const provider = detectProvider(metadata.source);\n\n if (!provider) {\n spinner.warn(chalk.yellow(`${skill.name}: unknown provider`));\n skipped++;\n continue;\n }\n\n const result = await provider.clone(metadata.source, '', { depth: 1 });\n\n if (!result.success || !result.path) {\n spinner.fail(chalk.red(`${skill.name}: ${result.error || 'clone failed'}`));\n failed++;\n continue;\n }\n\n const sourcePath = metadata.subpath\n ? join(result.path, metadata.subpath)\n : result.path;\n\n const skillMdPath = join(sourcePath, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n spinner.warn(chalk.yellow(`${skill.name}: no SKILL.md in source`));\n rmSync(result.path, { recursive: true, force: true });\n skipped++;\n continue;\n }\n\n rmSync(skill.path, { recursive: true, force: true });\n cpSync(sourcePath, skill.path, { recursive: true, dereference: true });\n\n rmSync(result.path, { recursive: true, force: true });\n\n metadata.updatedAt = new Date().toISOString();\n saveSkillMetadata(skill.path, metadata);\n\n spinner.succeed(chalk.green(`Updated ${skill.name}`));\n updated++;\n }\n } catch (error) {\n spinner.fail(chalk.red(`Failed to update ${skill.name}`));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n failed++;\n }\n }\n\n console.log();\n console.log(\n chalk.cyan(\n `Updated: ${updated}, Skipped: ${skipped}, Failed: ${failed}`\n )\n );\n\n return failed > 0 ? 1 : 0;\n }\n}\n","import { existsSync, readdirSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { validateSkill } from '@skillkit/core';\n\nexport class ValidateCommand extends Command {\n static override paths = [['validate'], ['v']];\n\n static override usage = Command.Usage({\n description: 'Validate skill(s) against the Agent Skills specification (agentskills.io)',\n examples: [\n ['Validate a skill directory', '$0 validate ./my-skill'],\n ['Validate all skills in a directory', '$0 validate ./skills --all'],\n ],\n });\n\n skillPath = Option.String({ required: true });\n\n all = Option.Boolean('--all,-a', false, {\n description: 'Validate all skills in the directory',\n });\n\n async execute(): Promise<number> {\n const targetPath = this.skillPath;\n\n if (!existsSync(targetPath)) {\n console.error(chalk.red(`Path does not exist: ${targetPath}`));\n return 1;\n }\n\n const skillPaths: string[] = [];\n\n if (this.all) {\n const entries = readdirSync(targetPath, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const skillPath = join(targetPath, entry.name);\n if (existsSync(join(skillPath, 'SKILL.md'))) {\n skillPaths.push(skillPath);\n }\n }\n }\n\n if (skillPaths.length === 0) {\n console.error(chalk.yellow('No skills found in directory'));\n return 1;\n }\n } else {\n skillPaths.push(targetPath);\n }\n\n let hasErrors = false;\n\n for (const skillPath of skillPaths) {\n const skillName = basename(skillPath);\n const result = validateSkill(skillPath);\n\n if (result.valid) {\n console.log(chalk.green(`✓ ${skillName}`));\n\n if (result.warnings && result.warnings.length > 0) {\n result.warnings.forEach(w => {\n console.log(chalk.yellow(` ⚠ ${w}`));\n });\n }\n } else {\n console.log(chalk.red(`✗ ${skillName}`));\n result.errors.forEach(e => {\n console.log(chalk.red(` • ${e}`));\n });\n hasErrors = true;\n }\n }\n\n console.log();\n\n if (hasErrors) {\n console.log(chalk.red('Validation failed'));\n console.log(chalk.dim('See https://agentskills.io/specification for the complete format'));\n return 1;\n }\n\n console.log(chalk.green(`Validated ${skillPaths.length} skill(s) successfully`));\n return 0;\n }\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\n\nexport class CreateCommand extends Command {\n static override paths = [['create'], ['new']];\n\n static override usage = Command.Usage({\n description: 'Create a new skill with proper structure',\n examples: [\n ['Create a new skill', '$0 create my-skill'],\n ['Create with all optional directories', '$0 create my-skill --full'],\n ['Create with scripts directory', '$0 create my-skill --scripts'],\n ],\n });\n\n name = Option.String({ required: true, name: 'skill-name' });\n\n full = Option.Boolean('--full,-f', false, {\n description: 'Include all optional directories (references, scripts, assets)',\n });\n\n scripts = Option.Boolean('--scripts', false, {\n description: 'Include scripts directory',\n });\n\n references = Option.Boolean('--references', false, {\n description: 'Include references directory',\n });\n\n assets = Option.Boolean('--assets', false, {\n description: 'Include assets directory',\n });\n\n directory = Option.String('--dir,-d', {\n description: 'Parent directory to create skill in (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const skillName = this.name.toLowerCase();\n\n if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(skillName)) {\n console.error(chalk.red('Invalid skill name'));\n console.error(chalk.dim('Must be lowercase alphanumeric with hyphens (e.g., my-skill)'));\n return 1;\n }\n\n const parentDir = this.directory || process.cwd();\n const skillDir = join(parentDir, skillName);\n\n if (existsSync(skillDir)) {\n console.error(chalk.red(`Directory already exists: ${skillDir}`));\n return 1;\n }\n\n try {\n mkdirSync(skillDir, { recursive: true });\n\n const skillMd = generateSkillMd(skillName);\n writeFileSync(join(skillDir, 'SKILL.md'), skillMd);\n\n if (this.full || this.references) {\n const refsDir = join(skillDir, 'references');\n mkdirSync(refsDir);\n writeFileSync(join(refsDir, '.gitkeep'), '');\n }\n\n if (this.full || this.scripts) {\n const scriptsDir = join(skillDir, 'scripts');\n mkdirSync(scriptsDir);\n writeFileSync(join(scriptsDir, '.gitkeep'), '');\n }\n\n if (this.full || this.assets) {\n const assetsDir = join(skillDir, 'assets');\n mkdirSync(assetsDir);\n writeFileSync(join(assetsDir, '.gitkeep'), '');\n }\n\n console.log(chalk.green(`Created skill: ${skillName}`));\n console.log();\n console.log(chalk.dim('Structure:'));\n console.log(chalk.dim(` ${skillDir}/`));\n console.log(chalk.dim(' ├── SKILL.md'));\n if (this.full || this.references) console.log(chalk.dim(' ├── references/'));\n if (this.full || this.scripts) console.log(chalk.dim(' ├── scripts/'));\n if (this.full || this.assets) console.log(chalk.dim(' └── assets/'));\n console.log();\n console.log(chalk.cyan('Next steps:'));\n console.log(chalk.dim(' 1. Edit SKILL.md with your instructions'));\n console.log(chalk.dim(' 2. Validate: skillkit validate ' + skillDir));\n console.log(chalk.dim(' 3. Test: skillkit read ' + skillName));\n\n return 0;\n } catch (error) {\n console.error(chalk.red('Failed to create skill'));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n\nfunction generateSkillMd(name: string): string {\n const title = name\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n return `---\nname: ${name}\ndescription: Describe what this skill does and when to use it. Include trigger keywords.\n---\n\n# ${title}\n\nInstructions for the AI agent on how to use this skill.\n\n## When to Use\n\n- Scenario 1\n- Scenario 2\n\n## Steps\n\n1. First step\n2. Second step\n3. Third step\n`;\n}\n","import { Command } from 'clipanion';\n\nexport class UICommand extends Command {\n static override paths = [['ui'], ['tui']];\n\n static override usage = Command.Usage({\n description: 'Launch the interactive TUI (Terminal User Interface)',\n examples: [\n ['Open interactive TUI', '$0 ui'],\n ['Alias for TUI', '$0 tui'],\n ],\n });\n\n async execute(): Promise<number> {\n const { startTUI } = await import('@skillkit/tui');\n await startTUI();\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join, basename, dirname } from 'node:path';\nimport chalk from 'chalk';\nimport {\n type AgentType,\n translateSkill,\n translateSkillFile,\n getSupportedTranslationAgents,\n translatorRegistry,\n findAllSkills,\n} from '@skillkit/core';\nimport { getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { getSearchDirs } from '../helpers.js';\n\n/**\n * Translate skills between different AI agent formats\n */\nexport class TranslateCommand extends Command {\n static override paths = [['translate']];\n\n static override usage = Command.Usage({\n description: 'Translate skills between different AI agent formats',\n details: `\n This command translates skills from one AI agent format to another.\n\n Supported formats:\n - SKILL.md (Claude Code, Codex, Gemini CLI, and 10+ more)\n - Cursor MDC (.mdc files with globs)\n - Windsurf rules (.windsurfrules)\n - GitHub Copilot instructions (copilot-instructions.md)\n\n Translation is bidirectional - you can translate from any format to any other.\n `,\n examples: [\n ['Translate a skill to Cursor format', '$0 translate my-skill --to cursor'],\n ['Translate all skills to Windsurf', '$0 translate --all --to windsurf'],\n ['Translate a file directly', '$0 translate ./SKILL.md --to cursor --output ./my-skill.mdc'],\n ['List all supported agents', '$0 translate --list'],\n ['Preview translation without writing', '$0 translate my-skill --to cursor --dry-run'],\n ],\n });\n\n // Skill name or path\n source = Option.String({ required: false });\n\n // Target agent\n to = Option.String('--to,-t', {\n description: 'Target agent to translate to',\n });\n\n // Source agent (auto-detected if not specified)\n from = Option.String('--from,-f', {\n description: 'Source agent format (auto-detected if not specified)',\n });\n\n // Output path\n output = Option.String('--output,-o', {\n description: 'Output file path (default: agent skills directory)',\n });\n\n // Translate all installed skills\n all = Option.Boolean('--all,-a', false, {\n description: 'Translate all installed skills',\n });\n\n // Dry run (preview without writing)\n dryRun = Option.Boolean('--dry-run,-n', false, {\n description: 'Preview translation without writing files',\n });\n\n // Add metadata comments\n metadata = Option.Boolean('--metadata,-m', false, {\n description: 'Add translation metadata to output',\n });\n\n // Force overwrite\n force = Option.Boolean('--force', false, {\n description: 'Overwrite existing files',\n });\n\n // List supported agents\n list = Option.Boolean('--list,-l', false, {\n description: 'List all supported agents and formats',\n });\n\n // Show compatibility info\n compat = Option.Boolean('--compat,-c', false, {\n description: 'Show compatibility info between agents',\n });\n\n async execute(): Promise<number> {\n // List supported agents\n if (this.list) {\n return this.listAgents();\n }\n\n // Show compatibility info\n if (this.compat) {\n return this.showCompatibility();\n }\n\n // Validate target agent\n if (!this.to) {\n console.error(chalk.red('Error: --to/-t target agent is required'));\n console.log(chalk.gray('Use --list to see all supported agents'));\n return 1;\n }\n\n const targetAgent = this.to as AgentType;\n if (!getSupportedTranslationAgents().includes(targetAgent)) {\n console.error(chalk.red(`Error: Unknown target agent \"${this.to}\"`));\n console.log(chalk.gray('Use --list to see all supported agents'));\n return 1;\n }\n\n // Translate all skills\n if (this.all) {\n return this.translateAll(targetAgent);\n }\n\n // Translate single skill\n if (!this.source) {\n console.error(chalk.red('Error: Please specify a skill name or path, or use --all'));\n return 1;\n }\n\n return this.translateSingle(this.source, targetAgent);\n }\n\n /**\n * List all supported agents and their formats\n */\n private listAgents(): number {\n console.log(chalk.bold('\\nSupported Agents for Translation:\\n'));\n\n const agents = getSupportedTranslationAgents();\n const adapters = getAllAdapters();\n\n // Group by format\n const byFormat: Record<string, AgentType[]> = {};\n for (const agent of agents) {\n const format = translatorRegistry.getFormatForAgent(agent);\n if (!byFormat[format]) byFormat[format] = [];\n byFormat[format].push(agent);\n }\n\n // Display by format\n const formatNames: Record<string, string> = {\n 'skill-md': 'SKILL.md Format (Standard)',\n 'cursor-mdc': 'Cursor MDC Format',\n 'markdown-rules': 'Markdown Rules Format',\n 'external': 'External Systems',\n };\n\n for (const [format, formatAgents] of Object.entries(byFormat)) {\n console.log(chalk.cyan(` ${formatNames[format] || format}:`));\n for (const agent of formatAgents) {\n const adapter = adapters.find(a => a.type === agent);\n const name = adapter?.name || agent;\n console.log(` ${chalk.green(agent.padEnd(16))} ${chalk.gray(name)}`);\n }\n console.log();\n }\n\n console.log(chalk.gray('All formats can translate to any other format.'));\n console.log(chalk.gray('Use --compat to see compatibility details.\\n'));\n\n return 0;\n }\n\n /**\n * Show compatibility between agents\n */\n private showCompatibility(): number {\n if (!this.from || !this.to) {\n console.error(chalk.red('Error: Both --from and --to are required for compatibility check'));\n return 1;\n }\n\n const fromAgent = this.from as AgentType;\n const toAgent = this.to as AgentType;\n\n const info = translatorRegistry.getCompatibilityInfo(fromAgent, toAgent);\n\n console.log(chalk.bold(`\\nTranslation: ${fromAgent} → ${toAgent}\\n`));\n\n if (info.supported) {\n console.log(chalk.green(' ✓ Translation supported'));\n } else {\n console.log(chalk.red(' ✗ Translation not supported'));\n return 1;\n }\n\n if (info.warnings.length > 0) {\n console.log(chalk.yellow('\\n Warnings:'));\n for (const warning of info.warnings) {\n console.log(chalk.yellow(` • ${warning}`));\n }\n }\n\n if (info.lossyFields.length > 0) {\n console.log(chalk.gray('\\n Fields with reduced functionality:'));\n for (const field of info.lossyFields) {\n console.log(chalk.gray(` • ${field}`));\n }\n }\n\n console.log();\n return 0;\n }\n\n /**\n * Translate all installed skills\n */\n private async translateAll(targetAgent: AgentType): Promise<number> {\n const searchDirs = getSearchDirs();\n const skills = findAllSkills(searchDirs);\n\n if (skills.length === 0) {\n console.log(chalk.yellow('No skills found to translate'));\n return 0;\n }\n\n console.log(chalk.bold(`\\nTranslating ${skills.length} skill(s) to ${targetAgent}...\\n`));\n\n let success = 0;\n let failed = 0;\n\n for (const skill of skills) {\n const skillMdPath = join(skill.path, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n console.log(chalk.yellow(` ⚠ ${skill.name}: No SKILL.md found`));\n failed++;\n continue;\n }\n\n const result = translateSkillFile(skillMdPath, targetAgent, {\n addMetadata: this.metadata,\n });\n\n if (result.success) {\n if (this.dryRun) {\n console.log(chalk.green(` ✓ ${skill.name} → ${result.filename} (dry run)`));\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) {\n console.log(chalk.gray(` ${warning}`));\n }\n }\n } else {\n // Determine output path\n const targetAdapter = getAdapter(targetAgent);\n const outputDir = this.output || join(process.cwd(), targetAdapter.skillsDir, skill.name);\n\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n const outputPath = join(outputDir, result.filename);\n\n if (existsSync(outputPath) && !this.force) {\n console.log(chalk.yellow(` ⚠ ${skill.name}: ${outputPath} exists (use --force)`));\n failed++;\n continue;\n }\n\n writeFileSync(outputPath, result.content, 'utf-8');\n console.log(chalk.green(` ✓ ${skill.name} → ${outputPath}`));\n }\n\n if (result.incompatible.length > 0) {\n for (const item of result.incompatible) {\n console.log(chalk.gray(` ⚠ ${item}`));\n }\n }\n\n success++;\n } else {\n console.log(chalk.red(` ✗ ${skill.name}: Translation failed`));\n for (const item of result.incompatible) {\n console.log(chalk.red(` ${item}`));\n }\n failed++;\n }\n }\n\n console.log();\n console.log(chalk.bold(`Translated: ${success}, Failed: ${failed}`));\n\n return failed > 0 ? 1 : 0;\n }\n\n /**\n * Translate a single skill\n */\n private async translateSingle(source: string, targetAgent: AgentType): Promise<number> {\n let sourcePath: string;\n let skillName: string;\n\n // Check if source is a file path\n if (existsSync(source)) {\n sourcePath = source;\n skillName = basename(dirname(source));\n if (skillName === '.') {\n skillName = basename(source).replace(/\\.(md|mdc)$/i, '');\n }\n } else {\n // Search for skill by name\n const searchDirs = getSearchDirs();\n let found = false;\n\n for (const dir of searchDirs) {\n const skillPath = join(dir, source);\n const skillMdPath = join(skillPath, 'SKILL.md');\n\n if (existsSync(skillMdPath)) {\n sourcePath = skillMdPath;\n skillName = source;\n found = true;\n break;\n }\n }\n\n if (!found) {\n console.error(chalk.red(`Error: Skill \"${source}\" not found`));\n console.log(chalk.gray('Searched in:'));\n for (const dir of searchDirs) {\n console.log(chalk.gray(` ${dir}`));\n }\n return 1;\n }\n }\n\n // Read and translate\n const content = readFileSync(sourcePath!, 'utf-8');\n const result = translateSkill(content, targetAgent, {\n addMetadata: this.metadata,\n sourceFilename: basename(sourcePath!),\n });\n\n if (!result.success) {\n console.error(chalk.red('Translation failed:'));\n for (const item of result.incompatible) {\n console.error(chalk.red(` ${item}`));\n }\n return 1;\n }\n\n // Show warnings\n if (result.warnings.length > 0) {\n console.log(chalk.yellow('\\nWarnings:'));\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` • ${warning}`));\n }\n }\n\n // Show incompatible features\n if (result.incompatible.length > 0) {\n console.log(chalk.gray('\\nIncompatible features:'));\n for (const item of result.incompatible) {\n console.log(chalk.gray(` • ${item}`));\n }\n }\n\n // Dry run - just show preview\n if (this.dryRun) {\n console.log(chalk.bold(`\\nTranslated content (${result.filename}):\\n`));\n console.log(chalk.gray('─'.repeat(60)));\n console.log(result.content);\n console.log(chalk.gray('─'.repeat(60)));\n return 0;\n }\n\n // Determine output path\n let outputPath: string;\n if (this.output) {\n outputPath = this.output;\n } else {\n const targetAdapter = getAdapter(targetAgent);\n const outputDir = join(process.cwd(), targetAdapter.skillsDir, skillName!);\n\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n outputPath = join(outputDir, result.filename);\n }\n\n // Check for existing file\n if (existsSync(outputPath) && !this.force) {\n console.error(chalk.red(`Error: ${outputPath} already exists`));\n console.log(chalk.gray('Use --force to overwrite'));\n return 1;\n }\n\n // Write output\n const outputDir = dirname(outputPath);\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n writeFileSync(outputPath, result.content, 'utf-8');\n\n console.log(chalk.green(`\\n✓ Translated to ${outputPath}`));\n console.log(chalk.gray(` Format: ${result.targetFormat}`));\n console.log(chalk.gray(` Agent: ${result.targetAgent}`));\n\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport {\n type AgentType,\n type ProjectContext,\n ContextManager,\n createContextSync,\n analyzeProject,\n getStackTags,\n} from '@skillkit/core';\nimport { getAllAdapters } from '@skillkit/agents';\n\n/**\n * Context command - manage project context for multi-agent sync\n */\nexport class ContextCommand extends Command {\n static override paths = [['context']];\n\n static override usage = Command.Usage({\n description: 'Manage project context for multi-agent skill synchronization',\n details: `\n The context command helps you configure your project once and sync skills\n across all AI coding agents.\n\n Subcommands:\n - init: Initialize project context with auto-detection\n - show: Display current project context\n - export: Export context to a file\n - import: Import context from a file\n - sync: Sync skills to all configured agents\n - detect: Run project detection\n `,\n examples: [\n ['Initialize project context', '$0 context init'],\n ['Show current context', '$0 context show'],\n ['Sync skills to all agents', '$0 context sync'],\n ['Sync to specific agent', '$0 context sync --agent cursor'],\n ['Export context', '$0 context export --output context.yaml'],\n ],\n });\n\n // Subcommand (init, show, export, import, sync, detect)\n action = Option.String({ required: false });\n\n // Agent filter\n agent = Option.String('--agent,-a', {\n description: 'Target agent for sync',\n });\n\n // Output file for export\n output = Option.String('--output,-o', {\n description: 'Output file path',\n });\n\n // Input file for import\n input = Option.String('--input,-i', {\n description: 'Input file path',\n });\n\n // Force overwrite\n force = Option.Boolean('--force,-f', false, {\n description: 'Force overwrite existing files',\n });\n\n // Dry run\n dryRun = Option.Boolean('--dry-run,-n', false, {\n description: 'Preview without making changes',\n });\n\n // Merge on import\n merge = Option.Boolean('--merge,-m', false, {\n description: 'Merge with existing context on import',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed output',\n });\n\n async execute(): Promise<number> {\n const action = this.action || 'show';\n\n switch (action) {\n case 'init':\n return this.initContext();\n case 'show':\n return this.showContext();\n case 'export':\n return this.exportContext();\n case 'import':\n return this.importContext();\n case 'sync':\n return this.syncContext();\n case 'detect':\n return this.detectProject();\n case 'agents':\n return this.listAgents();\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.gray('Available actions: init, show, export, import, sync, detect, agents'));\n return 1;\n }\n }\n\n /**\n * Initialize project context\n */\n private async initContext(): Promise<number> {\n const manager = new ContextManager(process.cwd());\n\n if (manager.exists() && !this.force) {\n console.log(chalk.yellow('Context already exists. Use --force to reinitialize.'));\n return this.showContext();\n }\n\n console.log(chalk.cyan('Initializing project context...\\n'));\n\n const context = manager.init({ force: this.force });\n\n console.log(chalk.green('✓ Context initialized\\n'));\n console.log(chalk.gray(` Location: .skillkit/context.yaml\\n`));\n\n // Show summary\n this.printContextSummary(context);\n\n // Detect agents\n const sync = createContextSync(process.cwd());\n const detected = sync.detectAgents();\n if (detected.length > 0) {\n console.log(chalk.cyan('\\nDetected agents:'));\n for (const agent of detected) {\n console.log(` ${chalk.green('•')} ${agent}`);\n }\n\n // Update context with detected agents\n manager.updateAgents({\n detected,\n synced: detected,\n });\n }\n\n console.log(chalk.gray('\\nRun `skillkit context sync` to sync skills to all agents.'));\n\n return 0;\n }\n\n /**\n * Show current context\n */\n private async showContext(): Promise<number> {\n const manager = new ContextManager(process.cwd());\n const context = manager.load();\n\n if (!context) {\n console.log(chalk.yellow('No context found. Run `skillkit context init` first.'));\n return 1;\n }\n\n if (this.json) {\n console.log(JSON.stringify(context, null, 2));\n return 0;\n }\n\n this.printContextSummary(context);\n\n if (this.verbose) {\n console.log(chalk.gray('\\nFull context:'));\n console.log(chalk.gray(JSON.stringify(context, null, 2)));\n }\n\n return 0;\n }\n\n /**\n * Export context to file\n */\n private async exportContext(): Promise<number> {\n const manager = new ContextManager(process.cwd());\n const context = manager.get();\n\n if (!context) {\n console.error(chalk.red('No context found. Run `skillkit context init` first.'));\n return 1;\n }\n\n const format = this.json ? 'json' : 'yaml';\n const content = manager.export({\n format,\n includeSkills: true,\n includeAgents: true,\n });\n\n if (this.output) {\n const outputPath = resolve(this.output);\n if (existsSync(outputPath) && !this.force) {\n console.error(chalk.red(`File exists: ${outputPath}. Use --force to overwrite.`));\n return 1;\n }\n\n writeFileSync(outputPath, content, 'utf-8');\n console.log(chalk.green(`✓ Context exported to ${outputPath}`));\n } else {\n // Print to stdout\n console.log(content);\n }\n\n return 0;\n }\n\n /**\n * Import context from file\n */\n private async importContext(): Promise<number> {\n if (!this.input) {\n console.error(chalk.red('Error: --input/-i file path is required'));\n return 1;\n }\n\n const inputPath = resolve(this.input);\n if (!existsSync(inputPath)) {\n console.error(chalk.red(`File not found: ${inputPath}`));\n return 1;\n }\n\n const manager = new ContextManager(process.cwd());\n const content = readFileSync(inputPath, 'utf-8');\n\n try {\n const context = manager.import(content, {\n merge: this.merge,\n overwrite: this.force,\n });\n\n console.log(chalk.green('✓ Context imported successfully'));\n this.printContextSummary(context);\n return 0;\n } catch (error) {\n console.error(chalk.red(`Import failed: ${error}`));\n return 1;\n }\n }\n\n /**\n * Sync skills to all configured agents\n */\n private async syncContext(): Promise<number> {\n const manager = new ContextManager(process.cwd());\n const context = manager.get();\n\n if (!context) {\n console.log(chalk.yellow('No context found. Initializing...'));\n manager.init();\n }\n\n const sync = createContextSync(process.cwd());\n\n console.log(chalk.cyan('Syncing skills across agents...\\n'));\n\n // Determine target agents\n const agents = this.agent ? [this.agent as AgentType] : undefined;\n\n const report = await sync.syncAll({\n agents,\n force: this.force,\n dryRun: this.dryRun,\n });\n\n // Print results\n for (const result of report.results) {\n const status = result.success ? chalk.green('✓') : chalk.red('✗');\n console.log(`${status} ${result.agent}: ${result.skillsSynced} synced, ${result.skillsSkipped} skipped`);\n\n if (this.verbose && result.files.length > 0) {\n for (const file of result.files) {\n console.log(chalk.gray(` → ${file}`));\n }\n }\n\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` ⚠ ${warning}`));\n }\n }\n\n if (result.errors.length > 0) {\n for (const error of result.errors) {\n console.log(chalk.red(` ✗ ${error}`));\n }\n }\n }\n\n console.log();\n console.log(chalk.bold(`Summary: ${report.successfulAgents}/${report.totalAgents} agents, ${report.totalSkills} skills`));\n\n if (this.dryRun) {\n console.log(chalk.gray('\\n(Dry run - no files were written)'));\n }\n\n return report.successfulAgents === report.totalAgents ? 0 : 1;\n }\n\n /**\n * Detect project stack\n */\n private async detectProject(): Promise<number> {\n console.log(chalk.cyan('Analyzing project...\\n'));\n\n const stack = analyzeProject(process.cwd());\n const tags = getStackTags(stack);\n\n // Languages\n if (stack.languages.length > 0) {\n console.log(chalk.bold('Languages:'));\n for (const lang of stack.languages) {\n const version = lang.version ? ` (${lang.version})` : '';\n console.log(` ${chalk.green('•')} ${lang.name}${version}`);\n }\n console.log();\n }\n\n // Frameworks\n if (stack.frameworks.length > 0) {\n console.log(chalk.bold('Frameworks:'));\n for (const fw of stack.frameworks) {\n const version = fw.version ? ` (${fw.version})` : '';\n console.log(` ${chalk.green('•')} ${fw.name}${version}`);\n }\n console.log();\n }\n\n // Libraries\n if (stack.libraries.length > 0) {\n console.log(chalk.bold('Libraries:'));\n for (const lib of stack.libraries) {\n const version = lib.version ? ` (${lib.version})` : '';\n console.log(` ${chalk.green('•')} ${lib.name}${version}`);\n }\n console.log();\n }\n\n // Styling\n if (stack.styling.length > 0) {\n console.log(chalk.bold('Styling:'));\n for (const style of stack.styling) {\n console.log(` ${chalk.green('•')} ${style.name}`);\n }\n console.log();\n }\n\n // Testing\n if (stack.testing.length > 0) {\n console.log(chalk.bold('Testing:'));\n for (const test of stack.testing) {\n console.log(` ${chalk.green('•')} ${test.name}`);\n }\n console.log();\n }\n\n // Databases\n if (stack.databases.length > 0) {\n console.log(chalk.bold('Databases:'));\n for (const db of stack.databases) {\n console.log(` ${chalk.green('•')} ${db.name}`);\n }\n console.log();\n }\n\n // Tools\n if (stack.tools.length > 0) {\n console.log(chalk.bold('Tools:'));\n for (const tool of stack.tools) {\n console.log(` ${chalk.green('•')} ${tool.name}`);\n }\n console.log();\n }\n\n // Tags\n if (tags.length > 0) {\n console.log(chalk.bold('Recommended skill tags:'));\n console.log(` ${chalk.cyan(tags.join(', '))}`);\n console.log();\n }\n\n if (this.json) {\n console.log(chalk.gray('\\nJSON:'));\n console.log(JSON.stringify(stack, null, 2));\n }\n\n return 0;\n }\n\n /**\n * List detected agents\n */\n private async listAgents(): Promise<number> {\n const sync = createContextSync(process.cwd());\n const detected = sync.detectAgents();\n const status = sync.checkStatus();\n const adapters = getAllAdapters();\n\n console.log(chalk.bold('\\nAgent Status:\\n'));\n\n for (const [agent, info] of Object.entries(status)) {\n const adapter = adapters.find(a => a.type === agent);\n const name = adapter?.name || agent;\n const isDetected = detected.includes(agent as AgentType);\n\n const statusIcon = info.hasSkills ? chalk.green('●') : isDetected ? chalk.yellow('○') : chalk.gray('○');\n const skillInfo = info.skillCount > 0 ? chalk.gray(` (${info.skillCount} skills)`) : '';\n\n console.log(` ${statusIcon} ${name.padEnd(20)} ${chalk.gray(agent)}${skillInfo}`);\n\n if (this.verbose && info.skills.length > 0) {\n for (const skill of info.skills) {\n console.log(chalk.gray(` └─ ${skill}`));\n }\n }\n }\n\n console.log();\n console.log(chalk.gray('Legend: ● has skills, ○ detected/configured, ○ not detected'));\n console.log();\n\n return 0;\n }\n\n /**\n * Print context summary\n */\n private printContextSummary(context: ProjectContext): void {\n console.log(chalk.bold('Project:'));\n console.log(` Name: ${chalk.cyan(context.project.name)}`);\n if (context.project.type) {\n console.log(` Type: ${context.project.type}`);\n }\n if (context.project.description) {\n console.log(` Description: ${context.project.description}`);\n }\n\n // Stack summary\n const stackItems: string[] = [];\n if (context.stack.languages.length > 0) {\n stackItems.push(`${context.stack.languages.length} languages`);\n }\n if (context.stack.frameworks.length > 0) {\n stackItems.push(`${context.stack.frameworks.length} frameworks`);\n }\n if (context.stack.libraries.length > 0) {\n stackItems.push(`${context.stack.libraries.length} libraries`);\n }\n if (context.stack.databases.length > 0) {\n stackItems.push(`${context.stack.databases.length} databases`);\n }\n\n if (stackItems.length > 0) {\n console.log(`\\n${chalk.bold('Stack:')} ${stackItems.join(', ')}`);\n\n // Show top items\n const topFrameworks = context.stack.frameworks.slice(0, 3).map(f => f.name);\n if (topFrameworks.length > 0) {\n console.log(` Frameworks: ${chalk.cyan(topFrameworks.join(', '))}`);\n }\n\n const topLibs = context.stack.libraries.slice(0, 3).map(l => l.name);\n if (topLibs.length > 0) {\n console.log(` Libraries: ${chalk.cyan(topLibs.join(', '))}`);\n }\n }\n\n // Skills summary\n if (context.skills) {\n console.log(`\\n${chalk.bold('Skills:')}`);\n console.log(` Installed: ${context.skills.installed?.length || 0}`);\n console.log(` Auto-sync: ${context.skills.autoSync ? 'enabled' : 'disabled'}`);\n }\n\n // Agents summary\n if (context.agents) {\n console.log(`\\n${chalk.bold('Agents:')}`);\n if (context.agents.primary) {\n console.log(` Primary: ${chalk.cyan(context.agents.primary)}`);\n }\n if (context.agents.synced?.length) {\n console.log(` Synced: ${context.agents.synced.join(', ')}`);\n }\n }\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n type ProjectProfile,\n type ScoredSkill,\n ContextManager,\n RecommendationEngine,\n buildSkillIndex,\n saveIndex,\n loadIndex as loadIndexFromCache,\n isIndexStale,\n INDEX_PATH,\n KNOWN_SKILL_REPOS,\n} from '@skillkit/core';\n\n/**\n * Recommend command - get smart skill recommendations based on project analysis\n */\nexport class RecommendCommand extends Command {\n static override paths = [['recommend'], ['rec']];\n\n static override usage = Command.Usage({\n description: 'Get skill recommendations based on your project',\n details: `\n The recommend command analyzes your project and suggests skills that match\n your technology stack, frameworks, and patterns.\n\n It scores skills based on:\n - Framework compatibility (React, Vue, Next.js, etc.)\n - Language match (TypeScript, Python, etc.)\n - Library alignment (Tailwind, Prisma, etc.)\n - Tag relevance\n - Popularity and quality metrics\n\n Run \"skillkit recommend --update\" to refresh the skill index from known sources.\n `,\n examples: [\n ['Get recommendations', '$0 recommend'],\n ['Show top 5 recommendations', '$0 recommend --limit 5'],\n ['Filter by category', '$0 recommend --category security'],\n ['Show detailed reasons', '$0 recommend --verbose'],\n ['Update skill index', '$0 recommend --update'],\n ['Search for skills by task', '$0 recommend --task \"authentication\"'],\n ['Search for skills (alias)', '$0 recommend --search \"testing\"'],\n ],\n });\n\n // Limit number of results\n limit = Option.String('--limit,-l', {\n description: 'Maximum number of recommendations',\n });\n\n // Minimum score threshold\n minScore = Option.String('--min-score', {\n description: 'Minimum match score (0-100)',\n });\n\n // Filter by category/tag\n category = Option.Array('--category,-c', {\n description: 'Filter by category (can be used multiple times)',\n });\n\n // Verbose output with reasons\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed match reasons',\n });\n\n // Update index\n update = Option.Boolean('--update,-u', false, {\n description: 'Update skill index from sources',\n });\n\n // Search mode (--search or --task)\n search = Option.String('--search,-s', {\n description: 'Search skills by task/query',\n });\n\n // Task alias for search (GSD-style)\n task = Option.String('--task,-t', {\n description: 'Search skills by task (alias for --search)',\n });\n\n // Include installed skills\n includeInstalled = Option.Boolean('--include-installed', false, {\n description: 'Include already installed skills',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n // Handle index update\n if (this.update) {\n return await this.updateIndex();\n }\n\n // Load or create project profile\n const profile = await this.getProjectProfile(targetPath);\n if (!profile) {\n console.error(chalk.red('Failed to analyze project'));\n return 1;\n }\n\n // Load skill index\n const index = this.loadIndex();\n if (!index || index.skills.length === 0) {\n console.log(chalk.yellow('No skill index found.'));\n console.log(chalk.dim('Run \"skillkit recommend --update\" to fetch skills from known sources.'));\n console.log(chalk.dim('Or install skills manually with \"skillkit install <source>\"\\n'));\n\n // Still show project profile\n this.showProjectProfile(profile);\n return 0;\n }\n\n // Create recommendation engine\n const engine = new RecommendationEngine();\n engine.loadIndex(index);\n\n // Handle search mode (--search or --task)\n const searchQuery = this.search || this.task;\n if (searchQuery) {\n return this.handleSearch(engine, searchQuery);\n }\n\n // Get recommendations\n const result = engine.recommend(profile, {\n limit: this.limit ? parseInt(this.limit, 10) : 10,\n minScore: this.minScore ? parseInt(this.minScore, 10) : 30,\n categories: this.category,\n excludeInstalled: !this.includeInstalled,\n includeReasons: this.verbose,\n });\n\n // Output results\n if (this.json) {\n console.log(JSON.stringify(result, null, 2));\n return 0;\n }\n\n this.displayRecommendations(result.recommendations, profile, result.totalSkillsScanned);\n return 0;\n }\n\n /**\n * Get project profile from context or by analyzing project\n */\n private async getProjectProfile(projectPath: string): Promise<ProjectProfile | null> {\n const manager = new ContextManager(projectPath);\n let context = manager.get();\n\n if (!context) {\n // Auto-analyze project\n if (!this.json) {\n console.log(chalk.dim('Analyzing project...\\n'));\n }\n context = manager.init();\n }\n\n if (!context) {\n return null;\n }\n\n // Convert ProjectContext to ProjectProfile\n return {\n name: context.project.name,\n type: context.project.type,\n stack: context.stack,\n patterns: context.patterns,\n installedSkills: context.skills?.installed || [],\n excludedSkills: context.skills?.excluded || [],\n };\n }\n\n /**\n * Show project profile summary\n */\n private showProjectProfile(profile: ProjectProfile): void {\n console.log(chalk.cyan('Project Profile:'));\n console.log(` Name: ${chalk.bold(profile.name)}`);\n if (profile.type) {\n console.log(` Type: ${profile.type}`);\n }\n\n const stackItems: string[] = [];\n for (const lang of profile.stack.languages) {\n stackItems.push(`${lang.name}${lang.version ? ` ${lang.version}` : ''}`);\n }\n for (const fw of profile.stack.frameworks) {\n stackItems.push(`${fw.name}${fw.version ? ` ${fw.version}` : ''}`);\n }\n\n if (stackItems.length > 0) {\n console.log(` Stack: ${chalk.dim(stackItems.join(', '))}`);\n }\n console.log();\n }\n\n /**\n * Display recommendations\n */\n private displayRecommendations(\n recommendations: ScoredSkill[],\n profile: ProjectProfile,\n totalScanned: number\n ): void {\n // Show project profile\n this.showProjectProfile(profile);\n\n if (recommendations.length === 0) {\n console.log(chalk.yellow('No matching skills found.'));\n console.log(chalk.dim('Try lowering the minimum score with --min-score'));\n return;\n }\n\n console.log(chalk.cyan(`Recommended Skills (${recommendations.length} of ${totalScanned} scanned):\\n`));\n\n for (const rec of recommendations) {\n const scoreColor = rec.score >= 70 ? chalk.green : rec.score >= 50 ? chalk.yellow : chalk.dim;\n const scoreBar = this.getScoreBar(rec.score);\n\n console.log(` ${scoreColor(`${rec.score}%`)} ${scoreBar} ${chalk.bold(rec.skill.name)}`);\n\n if (rec.skill.description) {\n console.log(` ${chalk.dim(truncate(rec.skill.description, 70))}`);\n }\n\n if (rec.skill.source) {\n console.log(` ${chalk.dim('Source:')} ${rec.skill.source}`);\n }\n\n if (this.verbose && rec.reasons.length > 0) {\n console.log(chalk.dim(' Reasons:'));\n for (const reason of rec.reasons.filter(r => r.weight > 0)) {\n console.log(` ${chalk.dim('•')} ${reason.description} (+${reason.weight})`);\n }\n }\n\n if (rec.warnings.length > 0) {\n for (const warning of rec.warnings) {\n console.log(` ${chalk.yellow('⚠')} ${warning}`);\n }\n }\n\n console.log();\n }\n\n console.log(chalk.dim('Install with: skillkit install <source>'));\n }\n\n /**\n * Generate a visual score bar\n */\n private getScoreBar(score: number): string {\n const filled = Math.round(score / 10);\n const empty = 10 - filled;\n return chalk.green('█'.repeat(filled)) + chalk.dim('░'.repeat(empty));\n }\n\n /**\n * Handle search mode\n */\n private handleSearch(engine: RecommendationEngine, query: string): number {\n const results = engine.search({\n query,\n limit: this.limit ? parseInt(this.limit, 10) : 10,\n semantic: true,\n filters: {\n minScore: this.minScore ? parseInt(this.minScore, 10) : undefined,\n },\n });\n\n if (this.json) {\n console.log(JSON.stringify(results, null, 2));\n return 0;\n }\n\n if (results.length === 0) {\n console.log(chalk.yellow(`No skills found matching \"${query}\"`));\n return 0;\n }\n\n console.log(chalk.cyan(`Search results for \"${query}\" (${results.length} found):\\n`));\n\n for (const result of results) {\n const relevanceColor =\n result.relevance >= 70 ? chalk.green : result.relevance >= 50 ? chalk.yellow : chalk.dim;\n\n console.log(` ${relevanceColor(`${result.relevance}%`)} ${chalk.bold(result.skill.name)}`);\n\n if (result.snippet) {\n console.log(` ${chalk.dim(result.snippet)}`);\n }\n\n if (result.matchedTerms.length > 0) {\n console.log(` ${chalk.dim('Matched:')} ${result.matchedTerms.join(', ')}`);\n }\n\n console.log();\n }\n\n return 0;\n }\n\n /**\n * Load skill index from cache\n */\n private loadIndex() {\n const index = loadIndexFromCache();\n\n if (!index) {\n return null;\n }\n\n // Check if index is stale\n if (isIndexStale(index) && !this.json) {\n const lastUpdated = new Date(index.lastUpdated);\n const hoursSinceUpdate = (Date.now() - lastUpdated.getTime()) / (1000 * 60 * 60);\n console.log(\n chalk.dim(`Index is ${Math.round(hoursSinceUpdate)} hours old. Run --update to refresh.\\n`)\n );\n }\n\n return index;\n }\n\n /**\n * Update skill index from sources\n */\n private async updateIndex(): Promise<number> {\n console.log(chalk.cyan('Updating skill index from GitHub repositories...\\n'));\n console.log(chalk.dim(`Sources: ${KNOWN_SKILL_REPOS.map(r => `${r.owner}/${r.repo}`).join(', ')}\\n`));\n\n const spinner = ora('Fetching skills...').start();\n\n try {\n const { index, errors } = await buildSkillIndex(KNOWN_SKILL_REPOS, (message) => {\n spinner.text = message;\n });\n\n spinner.stop();\n\n // Report any errors\n if (errors.length > 0) {\n console.log(chalk.yellow('\\nWarnings:'));\n for (const error of errors) {\n console.log(chalk.dim(` • ${error}`));\n }\n console.log();\n }\n\n // Save the index\n saveIndex(index);\n\n console.log(chalk.green(`✓ Updated index with ${index.skills.length} skills`));\n if (index.sources.length > 0) {\n console.log(chalk.dim(` Sources: ${index.sources.map((s) => s.name).join(', ')}`));\n }\n console.log(chalk.dim(` Saved to: ${INDEX_PATH}\\n`));\n\n return 0;\n } catch (error) {\n spinner.fail('Failed to update index');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n\n/**\n * Truncate string to max length\n */\nfunction truncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 3) + '...';\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { SessionManager } from '@skillkit/core';\n\n/**\n * Status command - show current session state\n */\nexport class StatusCommand extends Command {\n static override paths = [['status'], ['st']];\n\n static override usage = Command.Usage({\n description: 'Show current session state and execution progress',\n details: `\n The status command shows the current state of skill execution sessions,\n including any paused executions and recent history.\n `,\n examples: [\n ['Show session status', '$0 status'],\n ['Show with history', '$0 status --history'],\n ['Show JSON output', '$0 status --json'],\n ],\n });\n\n // Show history\n history = Option.Boolean('--history,-h', false, {\n description: 'Show execution history',\n });\n\n // History limit\n limit = Option.String('--limit,-l', {\n description: 'Limit history entries (default: 10)',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n const manager = new SessionManager(targetPath);\n const state = manager.get();\n\n if (this.json) {\n console.log(JSON.stringify(state || { message: 'No session found' }, null, 2));\n return 0;\n }\n\n if (!state) {\n console.log(chalk.dim('No active session found.'));\n console.log(chalk.dim('Run a skill with \"skillkit run <skill>\" to start a session.'));\n return 0;\n }\n\n // Show current execution\n if (state.currentExecution) {\n const exec = state.currentExecution;\n const statusColor = exec.status === 'paused' ? chalk.yellow : chalk.green;\n\n console.log(chalk.cyan('Current Execution:\\n'));\n console.log(` Skill: ${chalk.bold(exec.skillName)}`);\n console.log(` Source: ${chalk.dim(exec.skillSource)}`);\n console.log(` Status: ${statusColor(exec.status)}`);\n console.log(` Progress: ${exec.currentStep}/${exec.totalSteps} tasks`);\n console.log(` Started: ${chalk.dim(new Date(exec.startedAt).toLocaleString())}`);\n\n if (exec.pausedAt) {\n console.log(` Paused: ${chalk.dim(new Date(exec.pausedAt).toLocaleString())}`);\n }\n\n console.log(chalk.cyan('\\n Tasks:'));\n for (const task of exec.tasks) {\n const statusIcon = this.getStatusIcon(task.status);\n const statusText = this.getStatusColor(task.status)(task.status);\n console.log(` ${statusIcon} ${task.name} - ${statusText}`);\n if (task.error) {\n console.log(` ${chalk.red('Error:')} ${task.error}`);\n }\n }\n\n if (exec.status === 'paused') {\n console.log(chalk.yellow('\\n Resume with: skillkit resume'));\n }\n } else {\n console.log(chalk.dim('No active execution.'));\n }\n\n // Show history\n if (this.history || (!state.currentExecution && state.history.length > 0)) {\n const limit = this.limit ? parseInt(this.limit, 10) : 10;\n const history = manager.getHistory(limit);\n\n if (history.length > 0) {\n console.log(chalk.cyan('\\nExecution History:\\n'));\n\n for (const entry of history) {\n const statusColor = entry.status === 'completed' ? chalk.green : chalk.red;\n const duration = this.formatDuration(entry.durationMs);\n\n console.log(` ${statusColor('●')} ${chalk.bold(entry.skillName)}`);\n console.log(` ${chalk.dim(entry.skillSource)} • ${duration}`);\n console.log(` ${chalk.dim(new Date(entry.completedAt).toLocaleString())}`);\n\n if (entry.commits.length > 0) {\n console.log(` Commits: ${chalk.dim(entry.commits.join(', '))}`);\n }\n\n if (entry.error) {\n console.log(` ${chalk.red('Error:')} ${entry.error}`);\n }\n\n console.log();\n }\n }\n }\n\n // Show decisions\n if (state.decisions.length > 0) {\n console.log(chalk.cyan('Saved Decisions:\\n'));\n for (const decision of state.decisions.slice(0, 5)) {\n console.log(` ${chalk.dim(decision.key)}: ${decision.value}`);\n }\n if (state.decisions.length > 5) {\n console.log(chalk.dim(` ... and ${state.decisions.length - 5} more`));\n }\n }\n\n return 0;\n }\n\n private getStatusIcon(status: string): string {\n switch (status) {\n case 'completed':\n return chalk.green('✓');\n case 'failed':\n return chalk.red('✗');\n case 'in_progress':\n return chalk.blue('●');\n case 'paused':\n return chalk.yellow('⏸');\n default:\n return chalk.dim('○');\n }\n }\n\n private getStatusColor(status: string): (text: string) => string {\n switch (status) {\n case 'completed':\n return chalk.green;\n case 'failed':\n return chalk.red;\n case 'in_progress':\n return chalk.blue;\n case 'paused':\n return chalk.yellow;\n default:\n return chalk.dim;\n }\n }\n\n private formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const minutes = Math.floor(ms / 60000);\n const seconds = Math.floor((ms % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { SessionManager } from '@skillkit/core';\n\n/**\n * Pause command - pause current skill execution\n */\nexport class PauseCommand extends Command {\n static override paths = [['pause']];\n\n static override usage = Command.Usage({\n description: 'Pause current skill execution for later resumption',\n details: `\n The pause command saves the current execution state so you can\n continue later with \"skillkit resume\".\n\n This is useful when you need to:\n - Take a break from a long skill execution\n - Handle an interruption\n - Review progress before continuing\n `,\n examples: [\n ['Pause current execution', '$0 pause'],\n ],\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n const manager = new SessionManager(targetPath);\n const state = manager.get();\n\n if (!state) {\n console.log(chalk.yellow('No active session found.'));\n return 1;\n }\n\n if (!state.currentExecution) {\n console.log(chalk.yellow('No skill execution in progress.'));\n return 1;\n }\n\n if (state.currentExecution.status === 'paused') {\n console.log(chalk.yellow('Execution is already paused.'));\n console.log(chalk.dim('Resume with: skillkit resume'));\n return 0;\n }\n\n const success = manager.pause();\n\n if (success) {\n const exec = state.currentExecution;\n console.log(chalk.green('✓ Execution paused'));\n console.log();\n console.log(` Skill: ${chalk.bold(exec.skillName)}`);\n console.log(` Progress: ${exec.currentStep}/${exec.totalSteps} tasks completed`);\n console.log();\n console.log(chalk.dim('Resume with: skillkit resume'));\n console.log(chalk.dim('View status: skillkit status'));\n return 0;\n } else {\n console.log(chalk.red('Failed to pause execution.'));\n return 1;\n }\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { SessionManager } from '@skillkit/core';\n\n/**\n * Resume command - resume paused skill execution\n */\nexport class ResumeCommand extends Command {\n static override paths = [['resume']];\n\n static override usage = Command.Usage({\n description: 'Resume a paused skill execution',\n details: `\n The resume command continues a previously paused skill execution\n from where it left off.\n\n The execution state is preserved, including:\n - Completed tasks\n - User decisions\n - Modified files\n `,\n examples: [\n ['Resume paused execution', '$0 resume'],\n ],\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n const manager = new SessionManager(targetPath);\n const state = manager.get();\n\n if (!state) {\n console.log(chalk.yellow('No active session found.'));\n return 1;\n }\n\n if (!state.currentExecution) {\n console.log(chalk.yellow('No skill execution to resume.'));\n console.log(chalk.dim('Start a new execution with: skillkit run <skill>'));\n return 1;\n }\n\n if (state.currentExecution.status !== 'paused') {\n if (state.currentExecution.status === 'running') {\n console.log(chalk.yellow('Execution is already running.'));\n } else {\n console.log(chalk.yellow(`Execution is ${state.currentExecution.status}.`));\n }\n return 1;\n }\n\n const success = manager.resume();\n\n if (success) {\n const exec = state.currentExecution;\n console.log(chalk.green('✓ Execution resumed'));\n console.log();\n console.log(` Skill: ${chalk.bold(exec.skillName)}`);\n console.log(` Progress: ${exec.currentStep}/${exec.totalSteps} tasks`);\n console.log();\n\n // Show next task\n const nextTask = exec.tasks.find((t) => t.status === 'pending' || t.status === 'in_progress');\n if (nextTask) {\n console.log(` Next task: ${chalk.cyan(nextTask.name)}`);\n }\n\n console.log();\n console.log(chalk.dim('The execution will continue from where it left off.'));\n console.log(chalk.dim('View status: skillkit status'));\n return 0;\n } else {\n console.log(chalk.red('Failed to resume execution.'));\n return 1;\n }\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n loadWorkflowByName,\n loadWorkflow,\n validateWorkflow,\n createWorkflowOrchestrator,\n} from '@skillkit/core';\n\n/**\n * Workflow Run command - execute a workflow\n */\nexport class WorkflowRunCommand extends Command {\n static override paths = [['workflow', 'run'], ['wf', 'run']];\n\n static override usage = Command.Usage({\n description: 'Execute a skill workflow',\n details: `\n The workflow run command executes a workflow definition,\n running skills in waves with parallel or sequential execution.\n\n Workflows are defined in YAML files in .skillkit/workflows/\n `,\n examples: [\n ['Run a workflow by name', '$0 workflow run setup-project'],\n ['Run a workflow from file', '$0 workflow run --file my-workflow.yaml'],\n ['Dry run (no execution)', '$0 workflow run setup-project --dry-run'],\n ],\n });\n\n // Workflow name\n workflowName = Option.String({ required: false });\n\n // Workflow file path\n file = Option.String('--file,-f', {\n description: 'Path to workflow YAML file',\n });\n\n // Dry run\n dryRun = Option.Boolean('--dry-run,-n', false, {\n description: 'Show what would be executed without running',\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed execution progress',\n });\n\n // Continue on error\n continueOnError = Option.Boolean('--continue-on-error', false, {\n description: 'Continue execution even if a skill fails',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n // Load workflow\n let workflow;\n try {\n if (this.file) {\n workflow = loadWorkflow(resolve(this.file));\n } else if (this.workflowName) {\n workflow = loadWorkflowByName(targetPath, this.workflowName);\n if (!workflow) {\n console.error(chalk.red(`Workflow \"${this.workflowName}\" not found`));\n console.log(chalk.dim('List available workflows: skillkit workflow list'));\n return 1;\n }\n } else {\n console.error(chalk.red('Please specify a workflow name or --file'));\n return 1;\n }\n } catch (error) {\n console.error(chalk.red(`Failed to load workflow: ${error}`));\n return 1;\n }\n\n // Validate workflow\n const validation = validateWorkflow(workflow);\n if (!validation.valid) {\n console.error(chalk.red('Invalid workflow:'));\n for (const error of validation.errors) {\n console.error(chalk.red(` • ${error}`));\n }\n return 1;\n }\n\n // Dry run mode\n if (this.dryRun) {\n this.showDryRun(workflow);\n return 0;\n }\n\n // Execute workflow\n console.log(chalk.cyan(`Executing workflow: ${chalk.bold(workflow.name)}`));\n if (workflow.description) {\n console.log(chalk.dim(workflow.description));\n }\n console.log();\n\n const spinner = ora();\n let currentWave = -1;\n\n // Create orchestrator with mock executor (for now)\n const orchestrator = createWorkflowOrchestrator(\n async (_skillName, _config) => {\n // TODO: Integrate with actual skill execution\n // For now, simulate execution\n await new Promise((resolve) => setTimeout(resolve, 500));\n return { success: true };\n },\n (event) => {\n if (this.json) return;\n\n switch (event.type) {\n case 'wave_start':\n currentWave = event.waveIndex || 0;\n spinner.start(`Wave ${currentWave + 1}: ${event.waveName || 'Executing...'}`);\n break;\n\n case 'skill_start':\n if (this.verbose) {\n spinner.text = `Wave ${currentWave + 1}: Running ${event.skillName}...`;\n }\n break;\n\n case 'skill_complete':\n if (this.verbose) {\n const icon = event.status === 'completed' ? chalk.green('✓') : chalk.red('✗');\n console.log(` ${icon} ${event.skillName}`);\n }\n break;\n\n case 'wave_complete':\n const waveIcon = event.status === 'completed' ? chalk.green('✓') : chalk.red('✗');\n spinner.stopAndPersist({\n symbol: waveIcon,\n text: `Wave ${(event.waveIndex || 0) + 1}: ${event.waveName || 'Complete'}`,\n });\n break;\n\n case 'workflow_complete':\n console.log();\n if (event.status === 'completed') {\n console.log(chalk.green('✓ Workflow completed successfully'));\n } else {\n console.log(chalk.red(`✗ Workflow ${event.status}`));\n if (event.error) {\n console.log(chalk.red(` Error: ${event.error}`));\n }\n }\n break;\n }\n }\n );\n\n const execution = await orchestrator.execute(workflow);\n\n if (this.json) {\n console.log(JSON.stringify(execution, null, 2));\n }\n\n return execution.status === 'completed' ? 0 : 1;\n }\n\n private showDryRun(workflow: { name: string; description?: string; waves: Array<{ name?: string; parallel: boolean; skills: Array<string | { skill: string }> }> }): void {\n console.log(chalk.cyan('Dry Run - Workflow Execution Plan'));\n console.log();\n console.log(`Workflow: ${chalk.bold(workflow.name)}`);\n if (workflow.description) {\n console.log(`Description: ${chalk.dim(workflow.description)}`);\n }\n console.log();\n\n for (let i = 0; i < workflow.waves.length; i++) {\n const wave = workflow.waves[i];\n const modeLabel = wave.parallel ? chalk.blue('[parallel]') : chalk.yellow('[sequential]');\n\n console.log(`${chalk.cyan(`Wave ${i + 1}`)}: ${wave.name || 'Unnamed'} ${modeLabel}`);\n\n for (const skill of wave.skills) {\n const skillName = typeof skill === 'string' ? skill : skill.skill;\n console.log(` • ${skillName}`);\n }\n\n console.log();\n }\n\n console.log(chalk.dim('This is a dry run. No skills were executed.'));\n console.log(chalk.dim('Remove --dry-run to execute the workflow.'));\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { listWorkflows } from '@skillkit/core';\n\n/**\n * Workflow List command - list available workflows\n */\nexport class WorkflowListCommand extends Command {\n static override paths = [['workflow', 'list'], ['wf', 'list'], ['workflow', 'ls'], ['wf', 'ls']];\n\n static override usage = Command.Usage({\n description: 'List available workflows',\n details: `\n The workflow list command shows all available workflows\n defined in .skillkit/workflows/\n `,\n examples: [\n ['List all workflows', '$0 workflow list'],\n ['List with details', '$0 workflow list --verbose'],\n ],\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed workflow information',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n let workflows: ReturnType<typeof listWorkflows>;\n try {\n workflows = listWorkflows(targetPath);\n } catch (err) {\n console.log(chalk.red('Failed to list workflows.'));\n console.log(chalk.dim(String(err)));\n return 1;\n }\n\n if (this.json) {\n console.log(JSON.stringify(workflows, null, 2));\n return 0;\n }\n\n if (workflows.length === 0) {\n console.log(chalk.yellow('No workflows found.'));\n console.log(chalk.dim('Create a workflow with: skillkit workflow create'));\n console.log(chalk.dim('Or add YAML files to .skillkit/workflows/'));\n return 0;\n }\n\n console.log(chalk.cyan(`Available Workflows (${workflows.length}):\\n`));\n\n for (const workflow of workflows) {\n console.log(` ${chalk.bold(workflow.name)}`);\n\n if (workflow.description) {\n console.log(` ${chalk.dim(workflow.description)}`);\n }\n\n if (this.verbose) {\n console.log(` Version: ${chalk.dim(workflow.version || 'N/A')}`);\n console.log(` Waves: ${chalk.dim(workflow.waves.length.toString())}`);\n\n const totalSkills = workflow.waves.reduce(\n (sum, wave) => sum + wave.skills.length,\n 0\n );\n console.log(` Total Skills: ${chalk.dim(totalSkills.toString())}`);\n\n if (workflow.tags && workflow.tags.length > 0) {\n console.log(` Tags: ${chalk.dim(workflow.tags.join(', '))}`);\n }\n }\n\n console.log();\n }\n\n console.log(chalk.dim('Run a workflow with: skillkit workflow run <name>'));\n\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { createWorkflowTemplate, saveWorkflow, serializeWorkflow } from '@skillkit/core';\n\n/**\n * Workflow Create command - create a new workflow\n */\nexport class WorkflowCreateCommand extends Command {\n static override paths = [['workflow', 'create'], ['wf', 'create'], ['workflow', 'new'], ['wf', 'new']];\n\n static override usage = Command.Usage({\n description: 'Create a new workflow',\n details: `\n The workflow create command creates a new workflow template\n that you can customize with your skill composition.\n `,\n examples: [\n ['Create a new workflow', '$0 workflow create my-workflow'],\n ['Create with description', '$0 workflow create setup-project --description \"Project setup workflow\"'],\n ['Print to stdout', '$0 workflow create my-workflow --stdout'],\n ],\n });\n\n // Workflow name\n workflowName = Option.String({ required: true });\n\n // Description\n description = Option.String('--description,-d', {\n description: 'Workflow description',\n });\n\n // Print to stdout instead of saving\n stdout = Option.Boolean('--stdout', false, {\n description: 'Print workflow YAML to stdout instead of saving',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n const workflow = createWorkflowTemplate(this.workflowName, this.description);\n\n if (this.stdout) {\n console.log(serializeWorkflow(workflow));\n return 0;\n }\n\n const filePath = saveWorkflow(targetPath, workflow);\n\n console.log(chalk.green(`✓ Created workflow: ${chalk.bold(this.workflowName)}`));\n console.log(chalk.dim(` File: ${filePath}`));\n console.log();\n console.log(chalk.dim('Edit the workflow file to add skills and configure waves.'));\n console.log(chalk.dim('Run with: skillkit workflow run ' + this.workflowName));\n\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve, join } from 'node:path';\nimport { existsSync, readFileSync, statSync } from 'node:fs';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n createExecutionEngine,\n discoverSkills,\n extractFrontmatter,\n type ExecutableSkill,\n type ExecutableTask,\n type AgentType,\n} from '@skillkit/core';\n\n/**\n * Run command - execute a skill\n */\nexport class RunCommand extends Command {\n static override paths = [['run']];\n\n static override usage = Command.Usage({\n description: 'Execute a skill with task-based orchestration',\n details: `\n The run command executes a skill, optionally breaking it down into\n tasks with verification checkpoints.\n\n Skills can be:\n - Installed skills (by name)\n - Local skill files (by path)\n - Remote skills (owner/repo/path)\n `,\n examples: [\n ['Run an installed skill', '$0 run typescript-strict-mode'],\n ['Run a local skill file', '$0 run ./my-skill/SKILL.md'],\n ['Dry run (show what would happen)', '$0 run typescript-strict-mode --dry-run'],\n ['Run with verification', '$0 run setup-testing --verify'],\n ],\n });\n\n // Skill name or path\n skillRef = Option.String({ required: true });\n\n // Target agent\n agent = Option.String('--agent,-a', {\n description: 'Target agent (claude-code, cursor, etc.)',\n });\n\n // Dry run\n dryRun = Option.Boolean('--dry-run,-n', false, {\n description: 'Show what would be executed without running',\n });\n\n // Enable verification\n verify = Option.Boolean('--verify', false, {\n description: 'Run verification checks after each task',\n });\n\n // Auto-commit\n autoCommit = Option.Boolean('--auto-commit', false, {\n description: 'Create git commits after each task',\n });\n\n // Continue on error\n continueOnError = Option.Boolean('--continue-on-error', false, {\n description: 'Continue execution even if a task fails',\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed execution progress',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n // Load the skill\n const skill = await this.loadSkill(targetPath);\n if (!skill) {\n return 1;\n }\n\n // Show skill info\n if (!this.json) {\n console.log(chalk.cyan(`Executing skill: ${chalk.bold(skill.name)}`));\n if (skill.description) {\n console.log(chalk.dim(skill.description));\n }\n console.log();\n }\n\n // Dry run mode\n if (this.dryRun) {\n this.showDryRun(skill);\n return 0;\n }\n\n const spinner = ora();\n let currentTask = '';\n\n // Create execution engine\n const engine = createExecutionEngine(targetPath, {\n onProgress: (event) => {\n if (this.json) return;\n\n switch (event.type) {\n case 'task_start':\n currentTask = event.taskName || '';\n spinner.start(`Task ${(event.taskIndex || 0) + 1}/${event.totalTasks}: ${currentTask}`);\n break;\n\n case 'task_complete':\n const icon = event.status === 'completed' ? chalk.green('✓') : chalk.red('✗');\n spinner.stopAndPersist({\n symbol: icon,\n text: `Task ${(event.taskIndex || 0) + 1}/${event.totalTasks}: ${currentTask}`,\n });\n if (event.error && this.verbose) {\n console.log(chalk.red(` Error: ${event.error}`));\n }\n break;\n\n case 'checkpoint':\n spinner.info(`Checkpoint: ${event.message}`);\n break;\n\n case 'verification':\n if (this.verbose) {\n console.log(chalk.dim(` ${event.message}`));\n }\n break;\n\n case 'complete':\n console.log();\n if (event.status === 'completed') {\n console.log(chalk.green('✓ Skill execution completed'));\n } else {\n console.log(chalk.red(`✗ Skill execution ${event.status}`));\n if (event.error) {\n console.log(chalk.red(` Error: ${event.error}`));\n }\n }\n break;\n }\n },\n checkpointHandler: async (task, _context) => {\n // For CLI, we auto-continue but could add interactive prompts\n if (task.type === 'checkpoint:decision' && task.options) {\n // Use first option by default\n return {\n continue: true,\n selectedOption: task.options[0],\n };\n }\n return { continue: true };\n },\n });\n\n // Execute the skill\n const result = await engine.execute(skill, {\n agent: this.agent as AgentType | undefined,\n autoCommit: this.autoCommit,\n verify: this.verify,\n continueOnError: this.continueOnError,\n });\n\n if (this.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n // Show summary\n console.log();\n console.log(chalk.cyan('Summary:'));\n console.log(` Duration: ${chalk.dim(this.formatDuration(result.durationMs || 0))}`);\n console.log(` Tasks: ${chalk.dim(`${result.tasks.filter(t => t.status === 'completed').length}/${result.tasks.length} completed`)}`);\n\n if (result.filesModified.length > 0) {\n console.log(` Files modified: ${chalk.dim(result.filesModified.length.toString())}`);\n }\n\n if (result.commits.length > 0) {\n console.log(` Commits: ${chalk.dim(result.commits.join(', '))}`);\n }\n }\n\n return result.status === 'completed' ? 0 : 1;\n }\n\n private async loadSkill(projectPath: string): Promise<ExecutableSkill | null> {\n // Check if it's a file path (must be a file, not directory)\n if (this.skillRef.endsWith('.md') || (existsSync(this.skillRef) && statSync(this.skillRef).isFile())) {\n return this.loadSkillFromFile(resolve(this.skillRef));\n }\n\n // Check installed skills\n const skill = this.findInstalledSkill(projectPath, this.skillRef);\n if (skill) {\n return skill;\n }\n\n console.error(chalk.red(`Skill \"${this.skillRef}\" not found`));\n console.log(chalk.dim('Install skills with: skillkit install <source>'));\n return null;\n }\n\n private loadSkillFromFile(filePath: string): ExecutableSkill | null {\n if (!existsSync(filePath)) {\n console.error(chalk.red(`File not found: ${filePath}`));\n return null;\n }\n\n try {\n const content = readFileSync(filePath, 'utf-8');\n const frontmatter = extractFrontmatter(content);\n\n // Parse tasks from frontmatter if present\n const tasks = this.parseTasksFromFrontmatter(frontmatter);\n\n return {\n name: (frontmatter?.name as string) || this.skillRef,\n description: frontmatter?.description as string,\n version: frontmatter?.version as string,\n source: filePath,\n content,\n tasks,\n };\n } catch (error) {\n console.error(chalk.red(`Failed to load skill: ${error}`));\n return null;\n }\n }\n\n private findInstalledSkill(projectPath: string, skillName: string): ExecutableSkill | null {\n // Search in common skill directories\n const skillDirs = [\n join(projectPath, '.claude', 'skills'),\n join(projectPath, '.cursor', 'skills'),\n join(projectPath, 'skills'),\n join(projectPath, '.skillkit', 'skills'),\n ];\n\n for (const dir of skillDirs) {\n if (!existsSync(dir)) continue;\n\n const skills = discoverSkills(dir);\n const skill = skills.find((s) => s.name === skillName);\n\n if (skill) {\n const skillMdPath = join(skill.path, 'SKILL.md');\n if (existsSync(skillMdPath)) {\n return this.loadSkillFromFile(skillMdPath);\n }\n }\n }\n\n return null;\n }\n\n private parseTasksFromFrontmatter(frontmatter: Record<string, unknown> | null): ExecutableTask[] | undefined {\n if (!frontmatter?.tasks || !Array.isArray(frontmatter.tasks)) {\n return undefined;\n }\n\n return frontmatter.tasks.map((task: Record<string, unknown>, index: number) => ({\n id: (task.id as string) || `task-${index}`,\n name: (task.name as string) || `Task ${index + 1}`,\n type: (task.type as ExecutableTask['type']) || 'auto',\n action: (task.action as string) || '',\n files: task.files as string[] | undefined,\n options: task.options as string[] | undefined,\n verify: task.verify as ExecutableTask['verify'],\n }));\n }\n\n private showDryRun(skill: ExecutableSkill): void {\n console.log(chalk.cyan('Dry Run - Execution Plan'));\n console.log();\n console.log(`Skill: ${chalk.bold(skill.name)}`);\n if (skill.description) {\n console.log(`Description: ${chalk.dim(skill.description)}`);\n }\n console.log(`Source: ${chalk.dim(skill.source)}`);\n console.log();\n\n if (skill.tasks && skill.tasks.length > 0) {\n console.log(chalk.cyan('Tasks:'));\n for (let i = 0; i < skill.tasks.length; i++) {\n const task = skill.tasks[i];\n const typeLabel = this.getTaskTypeLabel(task.type);\n console.log(` ${i + 1}. ${task.name} ${typeLabel}`);\n if (task.action) {\n console.log(` ${chalk.dim(task.action)}`);\n }\n if (task.files && task.files.length > 0) {\n console.log(` Files: ${chalk.dim(task.files.join(', '))}`);\n }\n }\n } else {\n console.log(chalk.dim('No structured tasks defined. Skill will be executed as a single unit.'));\n }\n\n console.log();\n console.log(chalk.dim('This is a dry run. Remove --dry-run to execute.'));\n }\n\n private getTaskTypeLabel(type: string): string {\n switch (type) {\n case 'auto':\n return chalk.green('[auto]');\n case 'checkpoint:human-verify':\n return chalk.yellow('[verify]');\n case 'checkpoint:decision':\n return chalk.blue('[decision]');\n case 'checkpoint:human-action':\n return chalk.magenta('[manual]');\n default:\n return '';\n }\n }\n\n private formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const minutes = Math.floor(ms / 60000);\n const seconds = Math.floor((ms % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve, join } from 'node:path';\nimport { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport chalk from 'chalk';\nimport {\n runTestSuite,\n createTestSuiteFromFrontmatter,\n type SkillTestSuite,\n type TestSuiteResult,\n} from '@skillkit/core';\nimport { parse as parseYaml } from 'yaml';\n\n/**\n * Test command - run skill tests\n */\nexport class TestCommand extends Command {\n static override paths = [['test']];\n\n static override usage = Command.Usage({\n description: 'Run skill tests',\n details: `\n The test command runs test cases defined in skill frontmatter.\n\n Tests are defined in the skill's YAML frontmatter using the 'tests' key.\n\n Example skill with tests:\n \\`\\`\\`yaml\n ---\n name: my-skill\n tests:\n - name: \"Creates config file\"\n assertions:\n - type: file_exists\n target: config.json\n - name: \"Types check\"\n assertions:\n - type: type_check\n ---\n \\`\\`\\`\n `,\n examples: [\n ['Run all skill tests', '$0 test'],\n ['Run tests for a specific skill', '$0 test my-skill'],\n ['Run with verbose output', '$0 test --verbose'],\n ['Stop on first failure', '$0 test --bail'],\n ['Run tests with specific tags', '$0 test --tags unit,integration'],\n ],\n });\n\n skill = Option.String({ required: false });\n\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Verbose output',\n });\n\n bail = Option.Boolean('--bail,-b', false, {\n description: 'Stop on first failure',\n });\n\n tags = Option.String('--tags,-t', {\n description: 'Only run tests with these tags (comma-separated)',\n });\n\n skipTags = Option.String('--skip-tags', {\n description: 'Skip tests with these tags (comma-separated)',\n });\n\n json = Option.Boolean('--json,-j', false, {\n description: 'Output results as JSON',\n });\n\n projectPath = Option.String('--path,-p', {\n description: 'Project path',\n });\n\n timeout = Option.String('--timeout', {\n description: 'Test timeout in milliseconds',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n // Find skills to test\n const skillFiles = this.findSkillFiles(targetPath);\n\n if (skillFiles.length === 0) {\n if (!this.json) {\n console.log(chalk.yellow('No skills found with tests.'));\n console.log(chalk.dim('Add tests to your skills using YAML frontmatter.'));\n } else {\n console.log(JSON.stringify({ results: [], passed: true, total: 0 }));\n }\n return 0;\n }\n\n // Filter by skill name if provided\n const filesToTest = this.skill\n ? skillFiles.filter((f) => f.name.includes(this.skill!))\n : skillFiles;\n\n if (filesToTest.length === 0) {\n if (!this.json) {\n console.log(chalk.yellow(`No skills found matching \"${this.skill}\"`));\n }\n return 1;\n }\n\n if (!this.json) {\n console.log(chalk.bold('Running skill tests...\\n'));\n }\n\n // Parse tags\n const tags = this.tags?.split(',').map((t) => t.trim());\n const skipTags = this.skipTags?.split(',').map((t) => t.trim());\n const timeout = this.timeout ? parseInt(this.timeout, 10) : undefined;\n\n // Run tests for each skill\n const results: TestSuiteResult[] = [];\n let allPassed = true;\n\n for (const file of filesToTest) {\n const suite = this.parseSkillTests(file.path, file.name);\n\n if (!suite || suite.tests.length === 0) {\n continue;\n }\n\n if (!this.json) {\n console.log(chalk.blue(`Testing: ${suite.skillName}`));\n }\n\n const result = await runTestSuite(suite, {\n cwd: targetPath,\n verbose: this.verbose,\n bail: this.bail,\n tags,\n skipTags,\n timeout,\n onProgress: (event) => {\n if (this.json || !this.verbose) return;\n\n switch (event.type) {\n case 'test_start':\n console.log(chalk.dim(` Running: ${event.testName}`));\n break;\n case 'test_end':\n if (event.passed) {\n console.log(chalk.green(` ✓ ${event.testName}`));\n } else {\n console.log(chalk.red(` ✗ ${event.testName}`));\n if (event.error) {\n console.log(chalk.red(` ${event.error}`));\n }\n }\n break;\n case 'assertion_end':\n if (this.verbose && !event.passed) {\n console.log(chalk.red(` - ${event.assertionType}: ${event.error}`));\n }\n break;\n }\n },\n });\n\n results.push(result);\n\n if (!result.passed) {\n allPassed = false;\n }\n\n if (!this.json) {\n const icon = result.passed ? chalk.green('✓') : chalk.red('✗');\n const status = result.passed ? 'PASSED' : 'FAILED';\n console.log(\n `${icon} ${suite.skillName}: ${result.passedCount}/${result.tests.length} tests ${status} (${result.duration}ms)\\n`\n );\n }\n\n if (this.bail && !result.passed) {\n break;\n }\n }\n\n // Summary\n if (this.json) {\n console.log(\n JSON.stringify({\n results: results.map((r) => ({\n skill: r.skillName,\n passed: r.passed,\n tests: r.passedCount,\n failed: r.failedCount,\n skipped: r.skippedCount,\n duration: r.duration,\n })),\n passed: allPassed,\n total: results.length,\n })\n );\n } else {\n const totalTests = results.reduce((acc, r) => acc + r.tests.length, 0);\n const passedTests = results.reduce((acc, r) => acc + r.passedCount, 0);\n const failedTests = results.reduce((acc, r) => acc + r.failedCount, 0);\n const skippedTests = results.reduce((acc, r) => acc + r.skippedCount, 0);\n\n console.log(chalk.bold('Summary:'));\n console.log(` Skills tested: ${results.length}`);\n console.log(` Total tests: ${totalTests}`);\n console.log(chalk.green(` Passed: ${passedTests}`));\n if (failedTests > 0) {\n console.log(chalk.red(` Failed: ${failedTests}`));\n }\n if (skippedTests > 0) {\n console.log(chalk.yellow(` Skipped: ${skippedTests}`));\n }\n\n if (allPassed) {\n console.log(chalk.green('\\n✓ All tests passed!'));\n } else {\n console.log(chalk.red('\\n✗ Some tests failed.'));\n }\n }\n\n return allPassed ? 0 : 1;\n }\n\n /**\n * Find skill files with tests\n */\n private findSkillFiles(projectPath: string): { name: string; path: string }[] {\n const files: { name: string; path: string }[] = [];\n\n // Check common skill directories\n const skillDirs = [\n '.claude/skills',\n '.cursor/skills',\n '.skillkit/skills',\n 'skills',\n ];\n\n for (const dir of skillDirs) {\n const fullDir = join(projectPath, dir);\n if (!existsSync(fullDir)) continue;\n\n try {\n const entries = readdirSync(fullDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && (entry.name.endsWith('.md') || entry.name.endsWith('.mdc'))) {\n files.push({\n name: entry.name.replace(/\\.(md|mdc)$/, ''),\n path: join(fullDir, entry.name),\n });\n }\n }\n } catch {\n // Directory not readable\n }\n }\n\n return files;\n }\n\n /**\n * Parse skill file for tests\n */\n private parseSkillTests(filePath: string, skillName: string): SkillTestSuite | null {\n try {\n const content = readFileSync(filePath, 'utf-8');\n\n // Extract frontmatter\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!frontmatterMatch) {\n return null;\n }\n\n const frontmatter = parseYaml(frontmatterMatch[1]) as Record<string, unknown>;\n\n if (!frontmatter.tests) {\n return null;\n }\n\n return createTestSuiteFromFrontmatter(skillName, frontmatter);\n } catch {\n return null;\n }\n }\n}\n","import { Command, Option } from 'clipanion';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n createMarketplaceAggregator,\n type MarketplaceSearchOptions,\n} from '@skillkit/core';\n\n/**\n * Marketplace command - browse and install skills from the marketplace\n */\nexport class MarketplaceCommand extends Command {\n static override paths = [['marketplace'], ['market'], ['mp']];\n\n static override usage = Command.Usage({\n description: 'Browse and install skills from the marketplace',\n details: `\n The marketplace command lets you discover and install skills\n from curated repositories.\n\n Skills are aggregated from multiple sources including:\n - composioHQ/awesome-claude-code-skills\n - anthropics/courses\n - User-added custom sources\n `,\n examples: [\n ['Browse marketplace', '$0 marketplace'],\n ['Search for skills', '$0 marketplace search typescript'],\n ['Refresh marketplace index', '$0 marketplace refresh'],\n ['Show popular tags', '$0 marketplace tags'],\n ['List sources', '$0 marketplace sources'],\n ],\n });\n\n action = Option.String({ required: false });\n query = Option.String({ required: false });\n\n limit = Option.String('--limit,-l', {\n description: 'Limit results',\n });\n\n tags = Option.String('--tags,-t', {\n description: 'Filter by tags (comma-separated)',\n });\n\n source = Option.String('--source,-s', {\n description: 'Filter by source',\n });\n\n json = Option.Boolean('--json,-j', false, {\n description: 'Output as JSON',\n });\n\n async execute(): Promise<number> {\n const marketplace = createMarketplaceAggregator();\n\n switch (this.action) {\n case 'search':\n return this.searchSkills(marketplace);\n case 'refresh':\n return this.refreshIndex(marketplace);\n case 'tags':\n return this.showTags(marketplace);\n case 'sources':\n return this.showSources(marketplace);\n default:\n // Default: browse/search\n if (this.query || this.action) {\n return this.searchSkills(marketplace);\n }\n return this.browseMarketplace(marketplace);\n }\n }\n\n private async browseMarketplace(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const spinner = ora('Loading marketplace...').start();\n\n try {\n const index = await marketplace.getIndex();\n spinner.stop();\n\n if (this.json) {\n console.log(JSON.stringify({\n totalSkills: index.totalCount,\n sources: index.sources.length,\n updatedAt: index.updatedAt,\n }));\n return 0;\n }\n\n console.log(chalk.bold('Skill Marketplace\\n'));\n console.log(`Total skills: ${chalk.cyan(index.totalCount)}`);\n console.log(`Sources: ${chalk.cyan(index.sources.length)}`);\n console.log(`Last updated: ${chalk.dim(new Date(index.updatedAt).toLocaleString())}\\n`);\n\n // Show sample skills\n console.log(chalk.bold('Featured Skills:\\n'));\n const featured = index.skills.slice(0, 10);\n\n for (const skill of featured) {\n console.log(` ${chalk.cyan(skill.name)}`);\n if (skill.description) {\n console.log(` ${chalk.dim(skill.description.slice(0, 60))}${skill.description.length > 60 ? '...' : ''}`);\n }\n console.log(` ${chalk.dim(`Source: ${skill.source.name}`)}`);\n console.log();\n }\n\n console.log(chalk.dim('Use \"skillkit marketplace search <query>\" to search for skills.'));\n console.log(chalk.dim('Use \"skillkit marketplace tags\" to see popular tags.'));\n\n return 0;\n } catch (error) {\n spinner.fail('Failed to load marketplace');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n\n private async searchSkills(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const query = this.query || this.action;\n\n // Validate and parse limit\n let limit = 20;\n if (this.limit) {\n const parsed = parseInt(this.limit, 10);\n if (isNaN(parsed) || parsed <= 0) {\n console.error(chalk.red('Invalid --limit value. Must be a positive number.'));\n return 1;\n }\n limit = parsed;\n }\n\n // Sanitize tags - filter out empty strings\n const tags = this.tags\n ?.split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n\n const spinner = ora(`Searching for \"${query}\"...`).start();\n\n try {\n const options: MarketplaceSearchOptions = {\n query: query || undefined,\n limit,\n tags: tags && tags.length > 0 ? tags : undefined,\n source: this.source,\n };\n\n const result = await marketplace.search(options);\n spinner.stop();\n\n if (this.json) {\n console.log(JSON.stringify(result));\n return 0;\n }\n\n if (result.skills.length === 0) {\n console.log(chalk.yellow(`No skills found${query ? ` matching \"${query}\"` : ''}.`));\n return 0;\n }\n\n console.log(chalk.bold(`Found ${result.total} skill(s):\\n`));\n\n for (const skill of result.skills) {\n console.log(`${chalk.cyan(skill.name)} ${chalk.dim(`(${skill.source.name})`)}`);\n if (skill.description) {\n console.log(` ${skill.description}`);\n }\n if (skill.tags.length > 0) {\n console.log(` Tags: ${chalk.dim(skill.tags.join(', '))}`);\n }\n console.log();\n }\n\n if (result.total > result.skills.length) {\n console.log(chalk.dim(`Showing ${result.skills.length} of ${result.total} results. Use --limit to see more.`));\n }\n\n return 0;\n } catch (error) {\n spinner.fail('Search failed');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n\n private async refreshIndex(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const spinner = ora('Refreshing marketplace index...').start();\n\n try {\n const index = await marketplace.refresh();\n spinner.succeed(`Marketplace refreshed: ${index.totalCount} skills from ${index.sources.length} sources`);\n return 0;\n } catch (error) {\n spinner.fail('Refresh failed');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n\n private async showTags(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const spinner = ora('Loading tags...').start();\n\n try {\n const tags = await marketplace.getPopularTags(30);\n spinner.stop();\n\n if (this.json) {\n console.log(JSON.stringify(tags));\n return 0;\n }\n\n console.log(chalk.bold('Popular Tags:\\n'));\n\n for (const { tag, count } of tags) {\n const bar = '█'.repeat(Math.min(count, 20));\n console.log(` ${tag.padEnd(15)} ${chalk.cyan(bar)} ${count}`);\n }\n\n return 0;\n } catch (error) {\n spinner.fail('Failed to load tags');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n\n private async showSources(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const sources = marketplace.getSources();\n\n if (this.json) {\n console.log(JSON.stringify(sources));\n return 0;\n }\n\n console.log(chalk.bold('Skill Sources:\\n'));\n\n for (const source of sources) {\n console.log(`${chalk.cyan(source.name)} ${source.official ? chalk.green('(official)') : ''}`);\n console.log(` ${chalk.dim(`${source.owner}/${source.repo}`)}`);\n if (source.description) {\n console.log(` ${source.description}`);\n }\n console.log();\n }\n\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport chalk from 'chalk';\nimport {\n ObservationStore,\n LearningStore,\n getMemoryPaths,\n initializeMemoryDirectory,\n getMemoryStatus,\n createMemoryCompressor,\n createMemoryInjector,\n type Learning,\n} from '@skillkit/core';\n\n/**\n * Memory command - manage session memory across AI agents\n */\nexport class MemoryCommand extends Command {\n static override paths = [['memory'], ['mem']];\n\n static override usage = Command.Usage({\n description: 'Manage session memory across AI coding agents',\n details: `\n The memory command helps you view, search, and manage learnings\n captured from coding sessions across all AI agents.\n\n Subcommands:\n - status: Show current memory status\n - search: Search memories by query\n - list: List all learnings\n - show: Show a specific learning\n - compress: Compress observations into learnings\n - export: Export a learning as a skill\n - import: Import memories from another project\n - clear: Clear session observations\n - add: Manually add a learning\n - rate: Rate a learning's effectiveness\n - config: Configure memory settings\n `,\n examples: [\n ['Show memory status', '$0 memory status'],\n ['Search memories', '$0 memory search \"authentication\"'],\n ['Search global memories', '$0 memory search --global \"react hooks\"'],\n ['List project learnings', '$0 memory list'],\n ['List global learnings', '$0 memory list --global'],\n ['Show a learning', '$0 memory show <id>'],\n ['Compress observations', '$0 memory compress'],\n ['Export as skill', '$0 memory export <id> --name my-skill'],\n ['Clear session', '$0 memory clear'],\n ['Add manual learning', '$0 memory add --title \"...\" --content \"...\"'],\n ['Rate effectiveness', '$0 memory rate <id> 85'],\n ],\n });\n\n // Subcommand (status, search, list, show, compress, export, import, clear, add, rate, config)\n action = Option.String({ required: false });\n\n // Second argument (query for search, id for show/export/rate)\n arg = Option.String({ required: false });\n\n // Third argument (rating value for rate command)\n ratingArg = Option.String({ required: false });\n\n // Global scope\n global = Option.Boolean('--global,-g', false, {\n description: 'Use global memories instead of project',\n });\n\n // Tags filter\n tags = Option.String('--tags,-t', {\n description: 'Filter by tags (comma-separated)',\n });\n\n // Limit results\n limit = Option.String('--limit,-l', {\n description: 'Maximum number of results',\n });\n\n // Title for add\n title = Option.String('--title', {\n description: 'Title for new learning',\n });\n\n // Content for add\n content = Option.String('--content,-c', {\n description: 'Content for new learning',\n });\n\n // Name for export\n name = Option.String('--name,-n', {\n description: 'Name for exported skill',\n });\n\n // Output file\n output = Option.String('--output,-o', {\n description: 'Output file path',\n });\n\n // Input file\n input = Option.String('--input,-i', {\n description: 'Input file path',\n });\n\n // Keep learnings when clearing\n keepLearnings = Option.Boolean('--keep-learnings', false, {\n description: 'Keep learnings when clearing',\n });\n\n // Dry run\n dryRun = Option.Boolean('--dry-run', false, {\n description: 'Preview without making changes',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed output',\n });\n\n async execute(): Promise<number> {\n const action = this.action || 'status';\n\n switch (action) {\n case 'status':\n return this.showStatus();\n case 'search':\n return this.searchMemories();\n case 'list':\n return this.listLearnings();\n case 'show':\n return this.showLearning();\n case 'compress':\n return this.compressObservations();\n case 'export':\n return this.exportLearning();\n case 'import':\n return this.importMemories();\n case 'clear':\n return this.clearMemory();\n case 'add':\n return this.addLearning();\n case 'rate':\n return this.rateLearning();\n case 'config':\n return this.showConfig();\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.gray('Available actions: status, search, list, show, compress, export, import, clear, add, rate, config'));\n return 1;\n }\n }\n\n /**\n * Show memory status\n */\n private async showStatus(): Promise<number> {\n const projectPath = process.cwd();\n const status = getMemoryStatus(projectPath);\n const paths = getMemoryPaths(projectPath);\n\n // Get counts from stores\n const observationStore = new ObservationStore(projectPath);\n const projectLearningStore = new LearningStore('project', projectPath);\n const globalLearningStore = new LearningStore('global');\n\n const sessionObservations = status.hasObservations ? observationStore.count() : 0;\n const projectLearnings = status.hasLearnings ? projectLearningStore.count() : 0;\n const globalLearnings = status.hasGlobalLearnings ? globalLearningStore.count() : 0;\n const sessionId = status.hasObservations ? observationStore.getSessionId() : null;\n\n if (this.json) {\n console.log(JSON.stringify({\n ...status,\n sessionObservations,\n projectLearnings,\n globalLearnings,\n sessionId,\n paths,\n }, null, 2));\n return 0;\n }\n\n console.log(chalk.bold('\\nMemory Status\\n'));\n\n // Session observations\n console.log(chalk.cyan('Session:'));\n console.log(` Observations: ${sessionObservations}`);\n if (sessionId) {\n console.log(` Session ID: ${chalk.gray(sessionId.slice(0, 8))}`);\n }\n console.log();\n\n // Project learnings\n console.log(chalk.cyan('Project:'));\n console.log(` Learnings: ${projectLearnings}`);\n console.log(` Path: ${chalk.gray(status.projectMemoryExists ? paths.projectMemoryDir : 'Not initialized')}`);\n console.log();\n\n // Global learnings\n console.log(chalk.cyan('Global:'));\n console.log(` Learnings: ${globalLearnings}`);\n console.log(` Path: ${chalk.gray(status.globalMemoryExists ? paths.globalMemoryDir : 'Not initialized')}`);\n console.log();\n\n // Recommendations\n if (sessionObservations >= 50) {\n console.log(chalk.yellow('💡 You have many uncompressed observations. Consider running:'));\n console.log(chalk.gray(' skillkit memory compress'));\n }\n\n return 0;\n }\n\n /**\n * Search memories\n */\n private async searchMemories(): Promise<number> {\n const query = this.arg;\n if (!query) {\n console.error(chalk.red('Error: Search query is required'));\n console.log(chalk.gray('Usage: skillkit memory search \"your query\"'));\n return 1;\n }\n\n const projectPath = process.cwd();\n const injector = createMemoryInjector(projectPath);\n\n // Validate and parse limit\n let maxLearnings = 10;\n if (this.limit) {\n const parsed = parseInt(this.limit, 10);\n if (isNaN(parsed) || parsed <= 0) {\n console.log(chalk.red('Invalid --limit value. Must be a positive number.'));\n return 1;\n }\n maxLearnings = parsed;\n }\n\n // Sanitize tags - filter out empty strings\n const tags = this.tags\n ?.split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n\n const results = injector.search(query, {\n includeGlobal: this.global,\n tags: tags && tags.length > 0 ? tags : undefined,\n maxLearnings,\n minRelevance: 0,\n });\n\n if (this.json) {\n console.log(JSON.stringify(results, null, 2));\n return 0;\n }\n\n if (results.length === 0) {\n console.log(chalk.yellow(`No memories found for: \"${query}\"`));\n return 0;\n }\n\n console.log(chalk.bold(`\\nFound ${results.length} memories:\\n`));\n\n for (const { learning, relevanceScore, matchedBy } of results) {\n console.log(`${chalk.cyan('●')} ${chalk.bold(learning.title)}`);\n console.log(` ID: ${chalk.gray(learning.id.slice(0, 8))}`);\n console.log(` Relevance: ${this.formatScore(relevanceScore)}%`);\n console.log(` Tags: ${learning.tags.join(', ')}`);\n console.log(` Scope: ${learning.scope}`);\n\n if (this.verbose) {\n console.log(` Matched: ${this.formatMatchedBy(matchedBy)}`);\n console.log(` Created: ${new Date(learning.createdAt).toLocaleDateString()}`);\n console.log(` Uses: ${learning.useCount}`);\n }\n\n // Show excerpt\n const excerpt = learning.content.slice(0, 100);\n console.log(` ${chalk.gray(excerpt)}${learning.content.length > 100 ? '...' : ''}`);\n console.log();\n }\n\n return 0;\n }\n\n /**\n * List all learnings\n */\n private async listLearnings(): Promise<number> {\n const projectPath = process.cwd();\n const store = new LearningStore(\n this.global ? 'global' : 'project',\n this.global ? undefined : projectPath\n );\n\n let learnings = store.getAll();\n\n // Filter by tags if specified\n if (this.tags) {\n const tagList = this.tags.split(',').map((t) => t.trim().toLowerCase());\n learnings = learnings.filter((l) =>\n l.tags.some((t) => tagList.includes(t.toLowerCase()))\n );\n }\n\n // Limit results\n const limit = this.limit ? parseInt(this.limit, 10) : learnings.length;\n learnings = learnings.slice(0, limit);\n\n if (this.json) {\n console.log(JSON.stringify(learnings, null, 2));\n return 0;\n }\n\n const scope = this.global ? 'Global' : 'Project';\n console.log(chalk.bold(`\\n${scope} Learnings (${learnings.length}):\\n`));\n\n if (learnings.length === 0) {\n console.log(chalk.gray('No learnings found.'));\n console.log(chalk.gray('\\nCapture learnings by running skills or add manually:'));\n console.log(chalk.gray(' skillkit memory add --title \"...\" --content \"...\"'));\n return 0;\n }\n\n for (const learning of learnings) {\n const effectiveness = learning.effectiveness !== undefined\n ? ` [${this.formatScore(learning.effectiveness)}%]`\n : '';\n\n console.log(`${chalk.cyan('●')} ${learning.title}${chalk.green(effectiveness)}`);\n console.log(` ${chalk.gray(learning.id.slice(0, 8))} | ${learning.tags.join(', ')} | ${learning.useCount} uses`);\n\n if (this.verbose) {\n const excerpt = learning.content.slice(0, 80);\n console.log(` ${chalk.gray(excerpt)}${learning.content.length > 80 ? '...' : ''}`);\n }\n }\n\n console.log();\n return 0;\n }\n\n /**\n * Show a specific learning\n */\n private async showLearning(): Promise<number> {\n const id = this.arg;\n if (!id) {\n console.error(chalk.red('Error: Learning ID is required'));\n console.log(chalk.gray('Usage: skillkit memory show <id>'));\n return 1;\n }\n\n const projectPath = process.cwd();\n\n // Try project store first\n let learning = new LearningStore('project', projectPath).getById(id);\n\n // Try global store\n if (!learning) {\n learning = new LearningStore('global').getById(id);\n }\n\n // Try matching by prefix\n if (!learning) {\n const projectLearnings = new LearningStore('project', projectPath).getAll();\n const globalLearnings = new LearningStore('global').getAll();\n const all = [...projectLearnings, ...globalLearnings];\n\n learning = all.find((l) => l.id.startsWith(id));\n }\n\n if (!learning) {\n console.error(chalk.red(`Learning not found: ${id}`));\n return 1;\n }\n\n if (this.json) {\n console.log(JSON.stringify(learning, null, 2));\n return 0;\n }\n\n console.log(chalk.bold(`\\n${learning.title}\\n`));\n console.log(chalk.gray(`ID: ${learning.id}`));\n console.log(chalk.gray(`Scope: ${learning.scope}`));\n console.log(chalk.gray(`Source: ${learning.source}`));\n console.log(chalk.gray(`Tags: ${learning.tags.join(', ')}`));\n\n if (learning.frameworks?.length) {\n console.log(chalk.gray(`Frameworks: ${learning.frameworks.join(', ')}`));\n }\n\n if (learning.patterns?.length) {\n console.log(chalk.gray(`Patterns: ${learning.patterns.join(', ')}`));\n }\n\n console.log(chalk.gray(`Created: ${new Date(learning.createdAt).toLocaleString()}`));\n console.log(chalk.gray(`Updated: ${new Date(learning.updatedAt).toLocaleString()}`));\n console.log(chalk.gray(`Uses: ${learning.useCount}`));\n\n if (learning.effectiveness !== undefined) {\n console.log(chalk.gray(`Effectiveness: ${this.formatScore(learning.effectiveness)}%`));\n }\n\n console.log(chalk.bold('\\nContent:\\n'));\n console.log(learning.content);\n console.log();\n\n return 0;\n }\n\n /**\n * Compress observations into learnings\n */\n private async compressObservations(): Promise<number> {\n const projectPath = process.cwd();\n\n // Initialize memory directory if needed\n initializeMemoryDirectory(projectPath);\n\n const observationStore = new ObservationStore(projectPath);\n const observations = observationStore.getAll();\n\n if (observations.length === 0) {\n console.log(chalk.yellow('No observations to compress.'));\n return 0;\n }\n\n console.log(chalk.cyan(`Found ${observations.length} observations to compress...\\n`));\n\n const compressor = createMemoryCompressor(projectPath);\n const compressionOptions = {\n minObservations: 2,\n additionalTags: this.tags?.split(',').map((t) => t.trim()),\n };\n\n if (this.dryRun) {\n console.log(chalk.gray('(Dry run - no changes will be made)\\n'));\n\n // For dry-run, only compress without storing\n const result = await compressor.compress(observations, compressionOptions);\n\n console.log(chalk.green(`✓ Would compress ${result.stats.inputCount} observations into ${result.stats.outputCount} learnings\\n`));\n\n if (result.learnings.length > 0) {\n console.log(chalk.bold('Learnings that would be created:'));\n for (const learning of result.learnings) {\n console.log(` ${chalk.cyan('●')} ${learning.title}`);\n console.log(` Tags: ${learning.tags.join(', ')}`);\n }\n console.log();\n }\n\n return 0;\n }\n\n // Actual compression with storage\n const { learnings, result } = await compressor.compressAndStore(observations, compressionOptions);\n\n console.log(chalk.green(`✓ Compressed ${result.stats.inputCount} observations into ${result.stats.outputCount} learnings\\n`));\n\n if (learnings.length > 0) {\n console.log(chalk.bold('New Learnings:'));\n for (const learning of learnings) {\n console.log(` ${chalk.cyan('●')} ${learning.title}`);\n console.log(` Tags: ${learning.tags.join(', ')}`);\n }\n console.log();\n }\n\n if (result.processedObservationIds.length > 0) {\n // Remove processed observations\n const deleted = observationStore.deleteMany(result.processedObservationIds);\n console.log(chalk.gray(`Cleared ${deleted} processed observations.`));\n }\n\n return 0;\n }\n\n /**\n * Export a learning as a skill\n */\n private async exportLearning(): Promise<number> {\n const id = this.arg;\n if (!id) {\n console.error(chalk.red('Error: Learning ID is required'));\n console.log(chalk.gray('Usage: skillkit memory export <id> --name my-skill'));\n return 1;\n }\n\n const projectPath = process.cwd();\n\n // Find the learning\n let learning = new LearningStore('project', projectPath).getById(id);\n if (!learning) {\n learning = new LearningStore('global').getById(id);\n }\n\n // Try matching by prefix\n if (!learning) {\n const projectLearnings = new LearningStore('project', projectPath).getAll();\n const globalLearnings = new LearningStore('global').getAll();\n const all = [...projectLearnings, ...globalLearnings];\n learning = all.find((l) => l.id.startsWith(id));\n }\n\n if (!learning) {\n console.error(chalk.red(`Learning not found: ${id}`));\n return 1;\n }\n\n // Generate skill name\n const skillName = this.name || this.slugify(learning.title);\n\n // Generate skill content\n const skillContent = this.generateSkillContent(learning, skillName);\n\n if (this.dryRun) {\n console.log(chalk.gray('(Dry run preview)\\n'));\n console.log(skillContent);\n return 0;\n }\n\n // Determine output path\n const outputPath = this.output || `.skillkit/exports/${skillName}/SKILL.md`;\n const { dirname } = await import('node:path');\n const { existsSync, mkdirSync, writeFileSync } = await import('node:fs');\n\n const outputDir = dirname(outputPath);\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n writeFileSync(outputPath, skillContent, 'utf-8');\n\n console.log(chalk.green(`✓ Exported learning as skill: ${skillName}`));\n console.log(chalk.gray(` Path: ${outputPath}`));\n\n return 0;\n }\n\n /**\n * Import memories from another project\n */\n private async importMemories(): Promise<number> {\n const inputPath = this.input || this.arg;\n if (!inputPath) {\n console.error(chalk.red('Error: Input path is required'));\n console.log(chalk.gray('Usage: skillkit memory import --input <path>'));\n return 1;\n }\n\n const { existsSync, readFileSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n\n const fullPath = resolve(inputPath);\n if (!existsSync(fullPath)) {\n console.error(chalk.red(`File not found: ${fullPath}`));\n return 1;\n }\n\n const projectPath = process.cwd();\n const store = new LearningStore(\n this.global ? 'global' : 'project',\n this.global ? undefined : projectPath\n );\n\n try {\n const content = readFileSync(fullPath, 'utf-8');\n const { parse: parseYaml } = await import('yaml');\n const data = parseYaml(content) as { learnings?: Learning[] };\n\n if (!data.learnings || !Array.isArray(data.learnings)) {\n console.error(chalk.red('Invalid memory file format'));\n return 1;\n }\n\n let imported = 0;\n for (const learning of data.learnings) {\n if (this.dryRun) {\n console.log(chalk.gray(`Would import: ${learning.title}`));\n } else {\n store.add({\n source: 'imported',\n title: learning.title,\n content: learning.content,\n // Default to empty arrays if not present in imported YAML\n tags: Array.isArray(learning.tags) ? learning.tags : [],\n frameworks: Array.isArray(learning.frameworks) ? learning.frameworks : [],\n patterns: Array.isArray(learning.patterns) ? learning.patterns : [],\n });\n imported++;\n }\n }\n\n if (this.dryRun) {\n console.log(chalk.gray(`\\n(Dry run - ${data.learnings.length} learnings would be imported)`));\n } else {\n console.log(chalk.green(`✓ Imported ${imported} learnings`));\n }\n\n return 0;\n } catch (error) {\n console.error(chalk.red(`Import failed: ${error}`));\n return 1;\n }\n }\n\n /**\n * Clear session observations\n */\n private async clearMemory(): Promise<number> {\n const projectPath = process.cwd();\n\n if (this.dryRun) {\n const observationStore = new ObservationStore(projectPath);\n const learningStore = new LearningStore('project', projectPath);\n\n console.log(chalk.gray('(Dry run preview)\\n'));\n console.log(`Would clear ${observationStore.count()} observations`);\n if (!this.keepLearnings) {\n console.log(`Would clear ${learningStore.count()} learnings`);\n }\n return 0;\n }\n\n const observationStore = new ObservationStore(projectPath);\n observationStore.clear();\n console.log(chalk.green('✓ Cleared session observations'));\n\n if (!this.keepLearnings) {\n const learningStore = new LearningStore('project', projectPath);\n learningStore.clear();\n console.log(chalk.green('✓ Cleared project learnings'));\n }\n\n return 0;\n }\n\n /**\n * Add a manual learning\n */\n private async addLearning(): Promise<number> {\n if (!this.title) {\n console.error(chalk.red('Error: --title is required'));\n console.log(chalk.gray('Usage: skillkit memory add --title \"...\" --content \"...\"'));\n return 1;\n }\n\n if (!this.content) {\n console.error(chalk.red('Error: --content is required'));\n console.log(chalk.gray('Usage: skillkit memory add --title \"...\" --content \"...\"'));\n return 1;\n }\n\n const projectPath = process.cwd();\n const store = new LearningStore(\n this.global ? 'global' : 'project',\n this.global ? undefined : projectPath\n );\n\n const tags = this.tags?.split(',').map((t) => t.trim()) || [];\n\n const learning = store.add({\n source: 'manual',\n title: this.title,\n content: this.content,\n tags,\n });\n\n console.log(chalk.green(`✓ Added learning: ${learning.title}`));\n console.log(chalk.gray(` ID: ${learning.id}`));\n\n return 0;\n }\n\n /**\n * Rate a learning's effectiveness\n */\n private async rateLearning(): Promise<number> {\n const id = this.arg;\n if (!id) {\n console.error(chalk.red('Error: Learning ID is required'));\n console.log(chalk.gray('Usage: skillkit memory rate <id> <rating>'));\n return 1;\n }\n\n const rating = parseInt(this.ratingArg || '0', 10);\n if (isNaN(rating) || rating < 0 || rating > 100) {\n console.error(chalk.red('Error: Rating must be 0-100'));\n console.log(chalk.gray('Usage: skillkit memory rate <id> <rating>'));\n return 1;\n }\n\n const projectPath = process.cwd();\n\n // Try project store first\n const projectStore = new LearningStore('project', projectPath);\n let learning = projectStore.getById(id);\n let store = projectStore;\n\n if (!learning) {\n const globalStore = new LearningStore('global');\n learning = globalStore.getById(id);\n store = globalStore;\n }\n\n // Try prefix match\n if (!learning) {\n const projectLearnings = projectStore.getAll();\n const globalStore = new LearningStore('global');\n const globalLearnings = globalStore.getAll();\n\n learning = projectLearnings.find((l) => l.id.startsWith(id));\n if (learning) {\n store = projectStore;\n } else {\n learning = globalLearnings.find((l) => l.id.startsWith(id));\n if (learning) {\n store = globalStore;\n }\n }\n }\n\n if (!learning) {\n console.error(chalk.red(`Learning not found: ${id}`));\n return 1;\n }\n\n store.setEffectiveness(learning.id, rating);\n console.log(chalk.green(`✓ Rated \"${learning.title}\" as ${rating}% effective`));\n\n return 0;\n }\n\n /**\n * Show memory configuration\n */\n private async showConfig(): Promise<number> {\n const projectPath = process.cwd();\n const paths = getMemoryPaths(projectPath);\n\n if (this.json) {\n console.log(JSON.stringify(paths, null, 2));\n return 0;\n }\n\n console.log(chalk.bold('\\nMemory Configuration\\n'));\n\n console.log(chalk.cyan('Paths:'));\n console.log(` Project observations: ${chalk.gray(paths.observationsFile)}`);\n console.log(` Project learnings: ${chalk.gray(paths.learningsFile)}`);\n console.log(` Project index: ${chalk.gray(paths.indexFile)}`);\n console.log(` Global learnings: ${chalk.gray(paths.globalLearningsFile)}`);\n console.log(` Global index: ${chalk.gray(paths.globalIndexFile)}`);\n console.log();\n\n return 0;\n }\n\n /**\n * Format relevance/effectiveness score with color\n */\n private formatScore(score: number): string {\n if (score >= 80) return chalk.green(score.toString());\n if (score >= 50) return chalk.yellow(score.toString());\n return chalk.red(score.toString());\n }\n\n /**\n * Format matched by info\n */\n private formatMatchedBy(matchedBy: {\n frameworks: string[];\n tags: string[];\n keywords: string[];\n patterns: string[];\n }): string {\n const parts: string[] = [];\n if (matchedBy.frameworks.length > 0) {\n parts.push(`frameworks: ${matchedBy.frameworks.join(', ')}`);\n }\n if (matchedBy.tags.length > 0) {\n parts.push(`tags: ${matchedBy.tags.join(', ')}`);\n }\n if (matchedBy.keywords.length > 0) {\n parts.push(`keywords: ${matchedBy.keywords.slice(0, 3).join(', ')}`);\n }\n if (matchedBy.patterns.length > 0) {\n parts.push(`patterns: ${matchedBy.patterns.join(', ')}`);\n }\n return parts.join(' | ') || 'general';\n }\n\n /**\n * Convert title to slug\n */\n private slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n .slice(0, 50);\n }\n\n /**\n * Escape a YAML scalar value if it contains special characters\n */\n private escapeYamlValue(value: string): string {\n // Check if value needs quoting (contains special YAML characters)\n if (/[:#\\[\\]{}|>&*!?,'\"\\\\@`]/.test(value) || value.includes('\\n')) {\n // Use double quotes and escape internal quotes/backslashes\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n }\n return value;\n }\n\n /**\n * Generate skill content from learning\n */\n private generateSkillContent(learning: Learning, skillName: string): string {\n // Escape values that might contain special YAML characters\n const escapedName = this.escapeYamlValue(skillName);\n const escapedDesc = this.escapeYamlValue(learning.title);\n const escapedTags = learning.tags.map((t) => this.escapeYamlValue(t));\n\n const lines: string[] = [\n '---',\n `name: ${escapedName}`,\n `description: ${escapedDesc}`,\n `version: 1.0.0`,\n `tags: [${escapedTags.join(', ')}]`,\n `source: skillkit-memory`,\n `sourceType: local`,\n ];\n\n if (learning.frameworks?.length) {\n const escapedFrameworks = learning.frameworks.map((f) => this.escapeYamlValue(f));\n lines.push(`compatibility:`);\n lines.push(` frameworks: [${escapedFrameworks.join(', ')}]`);\n }\n\n lines.push('---', '', `# ${learning.title}`, '');\n\n if (learning.patterns?.length) {\n lines.push(`## Patterns`, '');\n for (const pattern of learning.patterns) {\n lines.push(`- ${pattern}`);\n }\n lines.push('');\n }\n\n lines.push(`## Content`, '', learning.content, '');\n\n lines.push(\n '---',\n '',\n '*Exported from SkillKit session memory*',\n `*Created: ${new Date(learning.createdAt).toLocaleDateString()}*`,\n `*Uses: ${learning.useCount}*`\n );\n\n if (learning.effectiveness !== undefined) {\n lines.push(`*Effectiveness: ${learning.effectiveness}%*`);\n }\n\n return lines.join('\\n');\n }\n}\n"],"mappings":";AAAA,OAAO,WAAW;AAClB,SAAS,SAAS,cAAc;AAChC,SAAS,qBAAqB;;;ACD9B;AAAA,EACE;AAAA,EACA,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,OAChB;AACP,SAAS,YAAY,mBAAmB;AAIjC,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAE1B,SAAS,cAAc,WAAiC;AAC7D,QAAM,OAAO,aAAa,WAAW,EAAE;AACvC,QAAM,UAAU,WAAW,IAAI;AAC/B,QAAM,cAAgC;AAAA,IACpC,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,EACtB;AACA,SAAO,kBAAkB,WAAW;AACtC;AAEO,SAAS,cAAc,SAAS,OAAO,WAA+B;AAC3E,QAAM,OAAO,aAAa,WAAW,EAAE;AACvC,QAAM,UAAU,WAAW,IAAI;AAC/B,QAAM,cAAgC;AAAA,IACpC,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,EACtB;AACA,SAAO,kBAAkB,aAAa,MAAM;AAC9C;AAEO,SAAS,mBAAmB,WAA+B;AAChE,QAAM,OAAO,aAAa,WAAW,EAAE;AACvC,QAAM,UAAU,WAAW,IAAI;AAC/B,QAAM,cAAgC;AAAA,IACpC,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,EACtB;AACA,SAAO,uBAAuB,WAAW;AAC3C;AAEA,eAAsB,YAAY,WAAsC;AACtE,QAAM,OAAO,aAAc,MAAM,YAAY;AAC7C,QAAM,UAAU,WAAW,IAAI;AAC/B,QAAM,cAAgC;AAAA,IACpC,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,EACtB;AACA,SAAO,gBAAgB,MAAM,WAAW;AAC1C;;;AD1DO,IAAM,cAAN,cAA0B,QAAQ;AAAA,EACvC,OAAgB,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;AAAA,EAEhD,OAAgB,QAAQ,QAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,mBAAmB,SAAS;AAAA,MAC7B,CAAC,4BAA4B,mBAAmB;AAAA,MAChD,CAAC,oBAAoB,gBAAgB;AAAA,IACvC;AAAA,EACF,CAAC;AAAA,EAED,UAAU,OAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,WAAW,OAAO,QAAQ,iBAAiB,OAAO;AAAA,IAChD,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAO,OAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAa,cAAc;AACjC,QAAI,SAAS,cAAc,UAAU;AAErC,QAAI,KAAK,SAAS;AAChB,eAAS,OAAO,OAAO,OAAK,EAAE,OAAO;AAAA,IACvC,WAAW,KAAK,UAAU;AACxB,eAAS,OAAO,OAAO,OAAK,CAAC,EAAE,OAAO;AAAA,IACxC;AAEA,WAAO,KAAK,CAAC,GAAG,MAAM;AACpB,UAAI,EAAE,aAAa,EAAE,UAAU;AAC7B,eAAO,EAAE,aAAa,YAAY,KAAK;AAAA,MACzC;AACA,aAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,IACpC,CAAC;AAED,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,WAAW,GAAG;AACvB,cAAQ,IAAI,MAAM,OAAO,qBAAqB,CAAC;AAC/C,cAAQ,IAAI,MAAM,IAAI,gDAAgD,CAAC;AACvE,aAAO;AAAA,IACT;AAEA,YAAQ,IAAI,MAAM,KAAK,qBAAqB,OAAO,MAAM;AAAA,CAAM,CAAC;AAEhE,UAAM,gBAAgB,OAAO,OAAO,OAAK,EAAE,aAAa,SAAS;AACjE,UAAM,eAAe,OAAO,OAAO,OAAK,EAAE,aAAa,QAAQ;AAE/D,QAAI,cAAc,SAAS,GAAG;AAC5B,cAAQ,IAAI,MAAM,KAAK,iBAAiB,CAAC;AACzC,iBAAW,SAAS,eAAe;AACjC,mBAAW,KAAK;AAAA,MAClB;AACA,cAAQ,IAAI;AAAA,IACd;AAEA,QAAI,aAAa,SAAS,GAAG;AAC3B,cAAQ,IAAI,MAAM,IAAI,gBAAgB,CAAC;AACvC,iBAAW,SAAS,cAAc;AAChC,mBAAW,KAAK;AAAA,MAClB;AACA,cAAQ,IAAI;AAAA,IACd;AAEA,UAAM,eAAe,OAAO,OAAO,OAAK,EAAE,OAAO,EAAE;AACnD,UAAM,gBAAgB,OAAO,SAAS;AAEtC,YAAQ;AAAA,MACN,MAAM;AAAA,QACJ,GAAG,cAAc,MAAM,aAAa,aAAa,MAAM,aACpD,gBAAgB,IAAI,KAAK,aAAa,cAAc;AAAA,MACzD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,OAAkF;AACpG,QAAM,SAAS,MAAM,UAAU,MAAM,MAAM,QAAG,IAAI,MAAM,IAAI,QAAG;AAC/D,QAAM,OAAO,MAAM,UAAU,MAAM,OAAO,MAAM,IAAI,MAAM,IAAI;AAC9D,QAAM,OAAO,MAAM,IAAI,SAAS,MAAM,aAAa,EAAE,CAAC;AAEtD,UAAQ,IAAI,KAAK,MAAM,IAAI,IAAI,EAAE;AACjC,MAAI,MAAM,aAAa;AACrB,YAAQ,IAAI,OAAO,IAAI,EAAE;AAAA,EAC3B;AACF;AAEA,SAAS,SAAS,KAAa,QAAwB;AACrD,MAAI,IAAI,UAAU,OAAQ,QAAO;AACjC,SAAO,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI;AACpC;;;AE1GA,OAAOA,YAAW;AAClB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,WAAW,wBAAwB;AAGrC,IAAM,cAAN,cAA0BC,SAAQ;AAAA,EACvC,OAAgB,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;AAAA,EAExC,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,uBAAuB,aAAa;AAAA,MACrC,CAAC,wBAAwB,uBAAuB;AAAA,MAChD,CAAC,4BAA4B,uBAAuB;AAAA,IACtD;AAAA,EACF,CAAC;AAAA,EAED,SAASC,QAAO,OAAO,EAAE,UAAU,KAAK,CAAC;AAAA,EAEzC,UAAUA,QAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAa,cAAc;AAEjC,UAAM,aAAa,KAAK,OACrB,MAAM,GAAG,EACT,IAAI,OAAK,EAAE,KAAK,CAAC,EACjB,OAAO,OAAK,EAAE,SAAS,CAAC;AAE3B,QAAI,WAAW,WAAW,GAAG;AAC3B,cAAQ,MAAMC,OAAM,IAAI,yBAAyB,CAAC;AAClD,aAAO;AAAA,IACT;AAEA,QAAI,WAAW;AAEf,eAAW,aAAa,YAAY;AAClC,YAAM,QAAQ,UAAU,WAAW,UAAU;AAE7C,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAMA,OAAM,IAAI,oBAAoB,SAAS,EAAE,CAAC;AACxD,gBAAQ,MAAMA,OAAM,IAAI,wBAAwB,CAAC;AACjD,mBAAW,QAAQ,OAAK,QAAQ,MAAMA,OAAM,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC;AAC5D,mBAAW;AACX;AAAA,MACF;AAEA,UAAI,CAAC,MAAM,SAAS;AAClB,gBAAQ,MAAMA,OAAM,OAAO,mBAAmB,SAAS,EAAE,CAAC;AAC1D,gBAAQ,MAAMA,OAAM,IAAI,kCAAkC,SAAS,CAAC;AACpE,mBAAW;AACX;AAAA,MACF;AAEA,YAAM,UAAU,iBAAiB,MAAM,IAAI;AAE3C,UAAI,CAAC,SAAS;AACZ,gBAAQ,MAAMA,OAAM,IAAI,gCAAgC,SAAS,EAAE,CAAC;AACpE,mBAAW;AACX;AAAA,MACF;AAEA,cAAQ,IAAI,YAAY,SAAS,EAAE;AACnC,cAAQ,IAAI,mBAAmB,MAAM,IAAI,EAAE;AAC3C,cAAQ,IAAI;AACZ,cAAQ,IAAI,OAAO;AACnB,cAAQ,IAAI;AACZ,cAAQ,IAAI,eAAe,SAAS,EAAE;AAEtC,UAAI,WAAW,SAAS,KAAK,cAAc,WAAW,WAAW,SAAS,CAAC,GAAG;AAC5E,gBAAQ,IAAI,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;;;AC9EA,SAAS,YAAY,cAAc,eAAe,iBAAiB;AACnE,SAAS,eAAe;AACxB,OAAOC,YAAW;AAClB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,cAAAC,aAAY,iBAAAC,sBAAqB;AAE1C,SAAS,cAAAC,aAAY,eAAAC,oBAAmB;AAGjC,IAAM,cAAN,cAA0BC,SAAQ;AAAA,EACvC,OAAgB,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;AAAA,EAExC,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,2BAA2B,SAAS;AAAA,MACrC,CAAC,yBAAyB,4BAA4B;AAAA,MACtD,CAAC,2BAA2B,wBAAwB;AAAA,MACpD,CAAC,4BAA4B,wBAAwB;AAAA,IACvD;AAAA,EACF,CAAC;AAAA,EAED,SAASC,QAAO,OAAO,eAAe;AAAA,IACpC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,QAAQA,QAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,cAAcA,QAAO,QAAQ,qBAAqB,MAAM;AAAA,IACtD,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAMA,QAAO,QAAQ,YAAY,OAAO;AAAA,IACtC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,QAAI;AACF,UAAI;AAEJ,UAAI,KAAK,OAAO;AACd,oBAAY,KAAK;AAAA,MACnB,OAAO;AACL,cAAMC,UAASC,YAAW;AAC1B,oBAAYD,QAAO,SAAU,MAAME,aAAY;AAAA,MACjD;AAEA,YAAM,UAAUC,YAAW,SAAS;AAEpC,YAAM,aAAa,KAAK,UAAU,mBAAmB,SAAS;AAE9D,YAAM,aAAa,cAAc,SAAS;AAC1C,UAAI,SAASC,eAAc,UAAU;AAErC,UAAI,KAAK,aAAa;AACpB,iBAAS,OAAO,OAAO,OAAK,EAAE,OAAO;AAAA,MACvC;AAEA,UAAI,OAAO,WAAW,GAAG;AACvB,gBAAQ,IAAIC,OAAM,OAAO,yBAAyB,CAAC;AACnD,gBAAQ,IAAIA,OAAM,IAAI,gDAAgD,CAAC;AACvE,eAAO;AAAA,MACT;AAEA,cAAQ,IAAIA,OAAM,KAAK,WAAW,OAAO,MAAM,iBAAiB,QAAQ,IAAI,GAAG,CAAC;AAChF,aAAO,QAAQ,OAAK;AAClB,cAAM,SAAS,EAAE,UAAUA,OAAM,MAAM,QAAG,IAAIA,OAAM,IAAI,QAAG;AAC3D,cAAM,WAAW,EAAE,aAAa,YAAYA,OAAM,KAAK,WAAW,IAAIA,OAAM,IAAI,UAAU;AAC1F,gBAAQ,IAAI,KAAK,MAAM,IAAI,EAAE,IAAI,IAAI,QAAQ,EAAE;AAAA,MACjD,CAAC;AACD,cAAQ,IAAI;AAEZ,YAAM,SAAS,QAAQ,eAAe,MAAM;AAE5C,UAAI,CAAC,QAAQ;AACX,gBAAQ,IAAIA,OAAM,OAAO,4BAA4B,CAAC;AACtD,eAAO;AAAA,MACT;AAEA,UAAI,kBAAkB;AACtB,UAAI,WAAW,UAAU,GAAG;AAC1B,0BAAkB,aAAa,YAAY,OAAO;AAAA,MACpD;AAEA,YAAM,aAAa,oBAAoB,iBAAiB,QAAQ,SAAS;AAEzE,YAAM,MAAM,QAAQ,UAAU;AAC9B,UAAI,CAAC,WAAW,GAAG,GAAG;AACpB,kBAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,MACpC;AAEA,oBAAc,YAAY,YAAY,OAAO;AAE7C,cAAQ,IAAIA,OAAM,MAAM,aAAa,UAAU,EAAE,CAAC;AAClD,cAAQ,IAAIA,OAAM,IAAI,UAAU,QAAQ,IAAI,EAAE,CAAC;AAE/C,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAMA,OAAM,IAAI,aAAa,CAAC;AACtC,cAAQ,MAAMA,OAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,oBAAoB,UAAkB,WAAmB,WAA8B;AAC9F,QAAM,UAA0D;AAAA,IAC9D,eAAe;AAAA,MACb,OAAO;AAAA,MACP,KAAK;AAAA,IACP;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,IACP;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AAEA,QAAM,eAAe,QAAQ,SAAS,KAAK,QAAQ;AAEnD,QAAM,WAAW,SAAS,QAAQ,aAAa,KAAK;AACpD,QAAM,SAAS,SAAS,QAAQ,aAAa,GAAG;AAEhD,MAAI,aAAa,MAAM,WAAW,IAAI;AACpC,WACE,SAAS,MAAM,GAAG,QAAQ,IAC1B,UAAU,MAAM,UAAU,QAAQ,aAAa,KAAK,CAAC,IACrD,SAAS,MAAM,SAAS,aAAa,IAAI,MAAM;AAAA,EAEnD;AAEA,QAAM,eAAe;AACrB,QAAM,aAAa;AACnB,QAAM,YAAY,SAAS,QAAQ,YAAY;AAC/C,QAAM,UAAU,SAAS,QAAQ,UAAU;AAE3C,MAAI,cAAc,MAAM,YAAY,IAAI;AACtC,WACE,SAAS,MAAM,GAAG,SAAS,IAAI,YAAY,SAAS,MAAM,UAAU,WAAW,MAAM;AAAA,EAEzF;AAEA,MAAI,SAAS,KAAK,GAAG;AACnB,WAAO,WAAW,SAAS;AAAA,EAC7B;AAEA,SAAO;AACT;;;ACxJA,OAAOC,YAAW;AAClB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAEhC,SAAS,eAAAC,cAAa,cAAAC,aAAY,sBAAsB;AAGjD,IAAM,cAAN,cAA0BC,SAAQ;AAAA,EACvC,OAAgB,QAAQ,CAAC,CAAC,MAAM,CAAC;AAAA,EAEjC,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,oCAAoC,SAAS;AAAA,MAC9C,CAAC,iCAAiC,wBAAwB;AAAA,MAC1D,CAAC,yBAAyB,gBAAgB;AAAA,IAC5C;AAAA,EACF,CAAC;AAAA,EAED,QAAQC,QAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAOA,QAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,QAAI,KAAK,MAAM;AACb,cAAQ,IAAIC,OAAM,KAAK,qBAAqB,CAAC;AAC7C,YAAM,WAAW,eAAe;AAEhC,iBAAW,WAAW,UAAU;AAC9B,gBAAQ,IAAI,KAAKA,OAAM,MAAM,QAAQ,IAAI,CAAC,EAAE;AAC5C,gBAAQ,IAAI,aAAa,QAAQ,IAAI,EAAE;AACvC,gBAAQ,IAAI,mBAAmB,QAAQ,SAAS,EAAE;AAClD,gBAAQ,IAAI,oBAAoB,QAAQ,UAAU,EAAE;AACpD,gBAAQ,IAAI;AAAA,MACd;AAEA,aAAO;AAAA,IACT;AAEA,QAAI;AACF,UAAI;AAEJ,UAAI,KAAK,OAAO;AACd,oBAAY,KAAK;AAAA,MACnB,OAAO;AACL,gBAAQ,IAAIA,OAAM,IAAI,yBAAyB,CAAC;AAChD,oBAAY,MAAMC,aAAY;AAAA,MAChC;AAEA,YAAM,UAAUC,YAAW,SAAS;AAEpC,cAAQ,IAAIF,OAAM,KAAK,oBAAoB,QAAQ,IAAI,KAAK,CAAC;AAE7D,YAAM,YAAY,SAAS;AAE3B,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,MAAM,2BAA2B,CAAC;AACpD,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,IAAI,UAAU,CAAC;AACjC,cAAQ,IAAIA,OAAM,IAAI,OAAO,QAAQ,SAAS,sBAAsB,CAAC;AACrE,cAAQ,IAAIA,OAAM,IAAI,iCAAiC,CAAC;AACxD,cAAQ,IAAIA,OAAM,IAAI,OAAO,QAAQ,UAAU,iBAAiB,CAAC;AACjE,cAAQ,IAAI;AACZ,cAAQ,IAAIA,OAAM,KAAK,aAAa,CAAC;AACrC,cAAQ,IAAIA,OAAM,IAAI,kDAAkD,CAAC;AACzE,cAAQ,IAAIA,OAAM,IAAI,iCAAiC,CAAC;AACxD,cAAQ,IAAIA,OAAM,IAAI,6CAA6C,CAAC;AAEpE,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAMA,OAAM,IAAI,uBAAuB,CAAC;AAChD,cAAQ,MAAMA,OAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AC9EA,OAAOG,YAAW;AAClB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,iBAAiB,aAAAC,kBAAiB;AAGpC,IAAM,gBAAN,cAA4BC,SAAQ;AAAA,EACzC,OAAgB,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAAA,EAEnC,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,kBAAkB,eAAe;AAAA,MAClC,CAAC,0BAA0B,yBAAyB;AAAA,IACtD;AAAA,EACF,CAAC;AAAA,EAED,SAASC,QAAO,KAAK,EAAE,UAAU,EAAE,CAAC;AAAA,EAEpC,MAAM,UAA2B;AAC/B,UAAM,aAAa,cAAc;AACjC,QAAI,UAAU;AACd,QAAI,SAAS;AAEb,eAAW,aAAa,KAAK,QAAQ;AACnC,YAAM,QAAQC,WAAU,WAAW,UAAU;AAE7C,UAAI,CAAC,OAAO;AACV,gBAAQ,IAAIC,OAAM,IAAI,oBAAoB,SAAS,EAAE,CAAC;AACtD;AACA;AAAA,MACF;AAEA,UAAI,MAAM,SAAS;AACjB,gBAAQ,IAAIA,OAAM,IAAI,oBAAoB,SAAS,EAAE,CAAC;AACtD;AAAA,MACF;AAEA,YAAM,SAAS,gBAAgB,MAAM,MAAM,IAAI;AAE/C,UAAI,QAAQ;AACV,gBAAQ,IAAIA,OAAM,MAAM,YAAY,SAAS,EAAE,CAAC;AAChD;AAAA,MACF,OAAO;AACL,gBAAQ,IAAIA,OAAM,IAAI,qBAAqB,SAAS,EAAE,CAAC;AACvD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,GAAG;AACf,cAAQ,IAAIA,OAAM,IAAI,mDAAmD,CAAC;AAAA,IAC5E;AAEA,WAAO,SAAS,IAAI,IAAI;AAAA,EAC1B;AACF;AAEO,IAAM,iBAAN,cAA6BH,SAAQ;AAAA,EAC1C,OAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC;AAAA,EAEpC,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,mBAAmB,gBAAgB;AAAA,MACpC,CAAC,2BAA2B,0BAA0B;AAAA,IACxD;AAAA,EACF,CAAC;AAAA,EAED,SAASC,QAAO,KAAK,EAAE,UAAU,EAAE,CAAC;AAAA,EAEpC,MAAM,UAA2B;AAC/B,UAAM,aAAa,cAAc;AACjC,QAAI,UAAU;AACd,QAAI,SAAS;AAEb,eAAW,aAAa,KAAK,QAAQ;AACnC,YAAM,QAAQC,WAAU,WAAW,UAAU;AAE7C,UAAI,CAAC,OAAO;AACV,gBAAQ,IAAIC,OAAM,IAAI,oBAAoB,SAAS,EAAE,CAAC;AACtD;AACA;AAAA,MACF;AAEA,UAAI,CAAC,MAAM,SAAS;AAClB,gBAAQ,IAAIA,OAAM,IAAI,qBAAqB,SAAS,EAAE,CAAC;AACvD;AAAA,MACF;AAEA,YAAM,SAAS,gBAAgB,MAAM,MAAM,KAAK;AAEhD,UAAI,QAAQ;AACV,gBAAQ,IAAIA,OAAM,OAAO,aAAa,SAAS,EAAE,CAAC;AAClD;AAAA,MACF,OAAO;AACL,gBAAQ,IAAIA,OAAM,IAAI,sBAAsB,SAAS,EAAE,CAAC;AACxD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,GAAG;AACf,cAAQ,IAAIA,OAAM,IAAI,mDAAmD,CAAC;AAAA,IAC5E;AAEA,WAAO,SAAS,IAAI,IAAI;AAAA,EAC1B;AACF;;;ACzGA,SAAS,cAAAC,aAAY,cAAc;AACnC,OAAOC,YAAW;AAClB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,aAAAC,kBAAiB;AAGnB,IAAM,gBAAN,cAA4BC,SAAQ;AAAA,EACzC,OAAgB,QAAQ,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC;AAAA,EAE1D,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,kBAAkB,eAAe;AAAA,MAClC,CAAC,0BAA0B,yBAAyB;AAAA,MACpD,CAAC,sCAAsC,uBAAuB;AAAA,IAChE;AAAA,EACF,CAAC;AAAA,EAED,SAASC,QAAO,KAAK,EAAE,UAAU,EAAE,CAAC;AAAA,EAEpC,QAAQA,QAAO,QAAQ,cAAc,OAAO;AAAA,IAC1C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAa,cAAc;AACjC,QAAI,UAAU;AACd,QAAI,SAAS;AAEb,eAAW,aAAa,KAAK,QAAQ;AACnC,YAAM,QAAQC,WAAU,WAAW,UAAU;AAE7C,UAAI,CAAC,OAAO;AACV,gBAAQ,IAAIC,OAAM,OAAO,oBAAoB,SAAS,EAAE,CAAC;AACzD;AAAA,MACF;AAEA,UAAI,CAACC,YAAW,MAAM,IAAI,GAAG;AAC3B,gBAAQ,IAAID,OAAM,OAAO,mBAAmB,MAAM,IAAI,EAAE,CAAC;AACzD;AAAA,MACF;AAEA,UAAI;AACF,eAAO,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACnD,gBAAQ,IAAIA,OAAM,MAAM,YAAY,SAAS,EAAE,CAAC;AAChD;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,IAAIA,OAAM,IAAI,qBAAqB,SAAS,EAAE,CAAC;AACvD,gBAAQ,MAAMA,OAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,GAAG;AACf,cAAQ,IAAIA,OAAM,IAAI,mDAAmD,CAAC;AAAA,IAC5E;AAEA,WAAO,SAAS,IAAI,IAAI;AAAA,EAC1B;AACF;;;AC3DA,SAAS,cAAAE,aAAY,aAAAC,YAAW,QAAQ,UAAAC,eAAc;AACtD,SAAS,YAAY;AACrB,OAAOC,YAAW;AAClB,OAAO,SAAS;AAChB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,gBAAgB,aAAa,mBAAmB;AAEzD,SAAS,oBAAoB;AAC7B,SAAS,cAAAC,aAAY,eAAAC,oBAAmB;AAGjC,IAAM,iBAAN,cAA6BC,SAAQ;AAAA,EAC1C,OAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC;AAAA,EAE3C,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,uBAAuB,uBAAuB;AAAA,MAC/C,CAAC,uBAAuB,8BAA8B;AAAA,MACtD,CAAC,0BAA0B,iCAAiC;AAAA,MAC5D,CAAC,mCAAmC,yCAAyC;AAAA,MAC7E,CAAC,wCAAwC,6BAA6B;AAAA,MACtE,CAAC,2BAA2B,wBAAwB;AAAA,MACpD,CAAC,oBAAoB,gCAAgC;AAAA,MACrD,CAAC,yBAAyB,8BAA8B;AAAA,MACxD,CAAC,8BAA8B,0DAA0D;AAAA,IAC3F;AAAA,EACF,CAAC;AAAA,EAED,SAASC,QAAO,OAAO,EAAE,UAAU,KAAK,CAAC;AAAA,EAEzC,SAASA,QAAO,OAAO,eAAe;AAAA,IACpC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAMA,QAAO,QAAQ,YAAY,OAAO;AAAA,IACtC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAMA,QAAO,QAAQ,YAAY,OAAO;AAAA,IACtC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,SAASA,QAAO,QAAQ,eAAe,OAAO;AAAA,IAC5C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,QAAQA,QAAO,QAAQ,cAAc,OAAO;AAAA,IAC1C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,WAAWA,QAAO,OAAO,iBAAiB;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAOA,QAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,QAAQA,QAAO,MAAM,WAAW;AAAA,IAC9B,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,UAAU,IAAI;AAEpB,QAAI;AACF,UAAI,kBAAkB,eAAe,KAAK,MAAM;AAEhD,UAAI,KAAK,UAAU;AACjB,0BAAkB,YAAY,KAAK,QAAuB;AAAA,MAC5D;AAEA,UAAI,CAAC,iBAAiB;AACpB,gBAAQ,MAAMC,OAAM,IAAI,kCAAkC,KAAK,MAAM,EAAE,CAAC;AACxE,gBAAQ,MAAMA,OAAM,IAAI,2CAA2C,CAAC;AACpE,gBAAQ,MAAMA,OAAM,IAAI,uDAAuD,CAAC;AAChF,gBAAQ,MAAMA,OAAM,IAAI,8DAA8D,CAAC;AACvF,gBAAQ,MAAMA,OAAM,IAAI,mCAAmC,CAAC;AAC5D,gBAAQ,MAAMA,OAAM,IAAI,2BAA2B,CAAC;AACpD,eAAO;AAAA,MACT;AAEA,cAAQ,MAAM,iBAAiB,gBAAgB,IAAI,KAAK;AAExD,YAAM,SAAS,MAAM,gBAAgB,MAAM,KAAK,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC;AAExE,UAAI,CAAC,OAAO,WAAW,CAAC,OAAO,MAAM;AACnC,gBAAQ,KAAKA,OAAM,IAAI,OAAO,SAAS,wBAAwB,CAAC;AAChE,eAAO;AAAA,MACT;AAEA,cAAQ,QAAQ,SAAS,OAAO,QAAQ,UAAU,CAAC,WAAW;AAE9D,YAAM,mBAAmB,OAAO,oBAAoB,CAAC;AAErD,UAAI,KAAK,MAAM;AACb,YAAI,iBAAiB,WAAW,GAAG;AACjC,kBAAQ,IAAIA,OAAM,OAAO,sCAAsC,CAAC;AAAA,QAClE,OAAO;AACL,kBAAQ,IAAIA,OAAM,KAAK,uBAAuB,CAAC;AAC/C,qBAAW,SAAS,kBAAkB;AACpC,oBAAQ,IAAI,KAAKA,OAAM,MAAM,MAAM,IAAI,CAAC,EAAE;AAAA,UAC5C;AACA,kBAAQ,IAAI;AACZ,kBAAQ,IAAIA,OAAM,IAAI,UAAU,iBAAiB,MAAM,WAAW,CAAC;AACnE,kBAAQ,IAAIA,OAAM,IAAI,gFAAgF,CAAC;AACvG,kBAAQ,IAAIA,OAAM,IAAI,wDAAwD,CAAC;AAAA,QACjF;AAEA,cAAMC,eAAc,OAAO,YAAY,OAAO;AAC9C,YAAI,CAAC,YAAY,KAAK,MAAM,KAAKA,gBAAeC,YAAWD,YAAW,GAAG;AACvE,UAAAE,QAAOF,cAAa,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,QACtD;AAEA,eAAO;AAAA,MACT;AAEA,UAAI,kBAAkB;AAEtB,UAAI,KAAK,QAAQ;AACf,cAAM,kBAAkB,KAAK,OAAO,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAChE,cAAM,YAAY,iBAAiB,IAAI,OAAK,EAAE,IAAI;AAClD,cAAM,WAAW,gBAAgB,OAAO,OAAK,CAAC,UAAU,SAAS,CAAC,CAAC;AAEnE,YAAI,SAAS,SAAS,GAAG;AACvB,kBAAQ,MAAMD,OAAM,IAAI,qBAAqB,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC;AACnE,kBAAQ,MAAMA,OAAM,IAAI,cAAc,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;AAC7D,iBAAO;AAAA,QACT;AAEA,0BAAkB,iBAAiB,OAAO,OAAK,gBAAgB,SAAS,EAAE,IAAI,CAAC;AAAA,MACjF,WAAW,KAAK,OAAO,KAAK,KAAK;AAC/B,0BAAkB;AAAA,MACpB,OAAO;AACL,0BAAkB;AAElB,YAAI,gBAAgB,SAAS,GAAG;AAC9B,kBAAQ,IAAIA,OAAM,KAAK,sBAAsB,CAAC;AAC9C,0BAAgB,QAAQ,OAAK,QAAQ,IAAIA,OAAM,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACpE,kBAAQ,IAAI;AAAA,QACd;AAAA,MACF;AAEA,UAAI,gBAAgB,WAAW,GAAG;AAChC,gBAAQ,IAAIA,OAAM,OAAO,sBAAsB,CAAC;AAChD,eAAO;AAAA,MACT;AAEA,UAAI;AACJ,UAAI,KAAK,SAAS,KAAK,MAAM,SAAS,GAAG;AACvC,uBAAe,KAAK;AAAA,MACtB,OAAO;AACL,cAAM,gBAAgB,MAAMI,aAAY;AACxC,uBAAe,CAAC,aAAa;AAAA,MAC/B;AAEA,UAAI,iBAAiB;AACrB,YAAM,iBAAkE,CAAC;AAEzE,iBAAW,aAAa,cAAc;AACpC,cAAM,UAAUC,YAAW,SAAS;AACpC,cAAM,aAAa,cAAc,KAAK,QAAQ,SAAS;AAEvD,YAAI,CAACH,YAAW,UAAU,GAAG;AAC3B,UAAAI,WAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AAAA,QAC3C;AAEA,YAAI,aAAa,SAAS,GAAG;AAC3B,kBAAQ,IAAIN,OAAM,KAAK;AAAA,gBAAmB,QAAQ,IAAI,KAAK,CAAC;AAAA,QAC9D;AAEA,YAAI,YAAY;AAChB,mBAAW,SAAS,iBAAiB;AACnC,gBAAM,YAAY,MAAM;AACxB,gBAAM,aAAa,MAAM;AACzB,gBAAM,aAAa,KAAK,YAAY,SAAS;AAE7C,cAAIE,YAAW,UAAU,KAAK,CAAC,KAAK,OAAO;AACzC,oBAAQ,IAAIF,OAAM,OAAO,cAAc,SAAS,6CAA6C,CAAC;AAC9F;AAAA,UACF;AAEA,gBAAM,eAAe,OAAO,YAAY,OAAO;AAC/C,cAAI,CAAC,aAAa,YAAY,YAAY,GAAG;AAC3C,oBAAQ,IAAIA,OAAM,IAAI,cAAc,SAAS,4BAA4B,CAAC;AAC1E;AAAA,UACF;AAEA,kBAAQ,MAAM,cAAc,SAAS,KAAK;AAE1C,cAAI;AACF,gBAAIE,YAAW,UAAU,GAAG;AAC1B,cAAAC,QAAO,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,YACrD;AAEA,mBAAO,YAAY,YAAY,EAAE,WAAW,MAAM,aAAa,KAAK,CAAC;AAErE,kBAAM,WAA0B;AAAA,cAC9B,MAAM;AAAA,cACN,aAAa;AAAA,cACb,QAAQ,KAAK;AAAA,cACb,YAAY,gBAAgB;AAAA,cAC5B,SAAS;AAAA,cACT,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,cACpC,SAAS;AAAA,YACX;AACA,8BAAkB,YAAY,QAAQ;AAEtC,oBAAQ,QAAQH,OAAM,MAAM,aAAa,SAAS,EAAE,CAAC;AACrD;AAAA,UACF,SAAS,OAAO;AACd,oBAAQ,KAAKA,OAAM,IAAI,qBAAqB,SAAS,EAAE,CAAC;AACxD,oBAAQ,MAAMA,OAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAAA,UACjF;AAAA,QACF;AAEA,0BAAkB;AAClB,uBAAe,KAAK,EAAE,OAAO,QAAQ,MAAM,KAAK,YAAY,OAAO,UAAU,CAAC;AAAA,MAChF;AAEA,YAAM,cAAc,OAAO,YAAY,OAAO;AAC9C,UAAI,CAAC,YAAY,KAAK,MAAM,KAAK,eAAeE,YAAW,WAAW,GAAG;AACvE,QAAAC,QAAO,aAAa,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MACtD;AAEA,cAAQ,IAAI;AACZ,UAAI,aAAa,SAAS,GAAG;AAC3B,gBAAQ,IAAIH,OAAM,MAAM,aAAa,cAAc,oBAAoB,aAAa,MAAM,UAAU,CAAC;AACrG,mBAAW,KAAK,gBAAgB;AAC9B,kBAAQ,IAAIA,OAAM,IAAI,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,gBAAgB,EAAE,GAAG,EAAE,CAAC;AAAA,QAC1E;AAAA,MACF,OAAO;AACL,gBAAQ,IAAIA,OAAM,MAAM,aAAa,cAAc,gBAAgB,eAAe,CAAC,GAAG,GAAG,EAAE,CAAC;AAAA,MAC9F;AAEA,UAAI,CAAC,KAAK,KAAK;AACb,gBAAQ,IAAIA,OAAM,IAAI,mDAAmD,CAAC;AAAA,MAC5E;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAKA,OAAM,IAAI,qBAAqB,CAAC;AAC7C,cAAQ,MAAMA,OAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ACvPA,SAAS,cAAAO,aAAY,UAAAC,SAAQ,UAAAC,eAAc;AAC3C,SAAS,QAAAC,aAAY;AACrB,OAAOC,YAAW;AAClB,OAAOC,UAAS;AAChB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,iBAAAC,gBAAe,aAAAC,YAAW,kBAAAC,iBAAgB,eAAAC,oBAAmB;AAG/D,IAAM,gBAAN,cAA4BC,SAAQ;AAAA,EACzC,OAAgB,QAAQ,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC;AAAA,EAE1C,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,qBAAqB,WAAW;AAAA,MACjC,CAAC,0BAA0B,oBAAoB;AAAA,MAC/C,CAAC,0CAA0C,mBAAmB;AAAA,IAChE;AAAA,EACF,CAAC;AAAA,EAED,SAASC,QAAO,KAAK;AAAA,EAErB,QAAQA,QAAO,QAAQ,cAAc,OAAO;AAAA,IAC1C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,UAAUC,KAAI;AACpB,UAAM,aAAa,cAAc;AAEjC,QAAI;AAEJ,QAAI,KAAK,OAAO,SAAS,GAAG;AAC1B,uBAAiB,KAAK,OACnB,IAAI,UAAQC,WAAU,MAAM,UAAU,CAAC,EACvC,OAAO,CAAC,MAAkC,MAAM,IAAI;AAEvD,YAAM,WAAW,KAAK,OAAO,OAAO,UAAQ,CAACA,WAAU,MAAM,UAAU,CAAC;AACxE,UAAI,SAAS,SAAS,GAAG;AACvB,gBAAQ,IAAIC,OAAM,OAAO,qBAAqB,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,MACtE;AAAA,IACF,OAAO;AACL,uBAAiBC,eAAc,UAAU;AAAA,IAC3C;AAEA,QAAI,eAAe,WAAW,GAAG;AAC/B,cAAQ,IAAID,OAAM,OAAO,qBAAqB,CAAC;AAC/C,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,OAAM,KAAK,YAAY,eAAe,MAAM;AAAA,CAAgB,CAAC;AAEzE,QAAI,UAAU;AACd,QAAI,UAAU;AACd,QAAI,SAAS;AAEb,eAAW,SAAS,gBAAgB;AAClC,YAAM,WAAW,kBAAkB,MAAM,IAAI;AAE7C,UAAI,CAAC,UAAU;AACb,gBAAQ,IAAIA,OAAM,IAAI,YAAY,MAAM,IAAI,kCAAkC,CAAC;AAC/E;AACA;AAAA,MACF;AAEA,cAAQ,MAAM,YAAY,MAAM,IAAI,KAAK;AAEzC,UAAI;AACF,YAAIE,aAAY,SAAS,MAAM,GAAG;AAChC,gBAAM,YAAY,SAAS,UACvBC,MAAK,SAAS,QAAQ,SAAS,OAAO,IACtC,SAAS;AAEb,cAAI,CAACC,YAAW,SAAS,GAAG;AAC1B,oBAAQ,KAAKJ,OAAM,OAAO,GAAG,MAAM,IAAI,wBAAwB,CAAC;AAChE;AACA;AAAA,UACF;AAEA,gBAAM,cAAcG,MAAK,WAAW,UAAU;AAC9C,cAAI,CAACC,YAAW,WAAW,GAAG;AAC5B,oBAAQ,KAAKJ,OAAM,OAAO,GAAG,MAAM,IAAI,yBAAyB,CAAC;AACjE;AACA;AAAA,UACF;AAEA,UAAAK,QAAO,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACnD,UAAAC,QAAO,WAAW,MAAM,MAAM,EAAE,WAAW,MAAM,aAAa,KAAK,CAAC;AAEpE,mBAAS,aAAY,oBAAI,KAAK,GAAE,YAAY;AAC5C,4BAAkB,MAAM,MAAM,QAAQ;AAEtC,kBAAQ,QAAQN,OAAM,MAAM,WAAW,MAAM,IAAI,EAAE,CAAC;AACpD;AAAA,QACF,OAAO;AACL,gBAAM,WAAWO,gBAAe,SAAS,MAAM;AAE/C,cAAI,CAAC,UAAU;AACb,oBAAQ,KAAKP,OAAM,OAAO,GAAG,MAAM,IAAI,oBAAoB,CAAC;AAC5D;AACA;AAAA,UACF;AAEA,gBAAM,SAAS,MAAM,SAAS,MAAM,SAAS,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC;AAErE,cAAI,CAAC,OAAO,WAAW,CAAC,OAAO,MAAM;AACnC,oBAAQ,KAAKA,OAAM,IAAI,GAAG,MAAM,IAAI,KAAK,OAAO,SAAS,cAAc,EAAE,CAAC;AAC1E;AACA;AAAA,UACF;AAEA,gBAAM,aAAa,SAAS,UACxBG,MAAK,OAAO,MAAM,SAAS,OAAO,IAClC,OAAO;AAEX,gBAAM,cAAcA,MAAK,YAAY,UAAU;AAC/C,cAAI,CAACC,YAAW,WAAW,GAAG;AAC5B,oBAAQ,KAAKJ,OAAM,OAAO,GAAG,MAAM,IAAI,yBAAyB,CAAC;AACjE,YAAAK,QAAO,OAAO,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpD;AACA;AAAA,UACF;AAEA,UAAAA,QAAO,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACnD,UAAAC,QAAO,YAAY,MAAM,MAAM,EAAE,WAAW,MAAM,aAAa,KAAK,CAAC;AAErE,UAAAD,QAAO,OAAO,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAEpD,mBAAS,aAAY,oBAAI,KAAK,GAAE,YAAY;AAC5C,4BAAkB,MAAM,MAAM,QAAQ;AAEtC,kBAAQ,QAAQL,OAAM,MAAM,WAAW,MAAM,IAAI,EAAE,CAAC;AACpD;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,KAAKA,OAAM,IAAI,oBAAoB,MAAM,IAAI,EAAE,CAAC;AACxD,gBAAQ,MAAMA,OAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ;AAAA,MACNA,OAAM;AAAA,QACJ,YAAY,OAAO,cAAc,OAAO,aAAa,MAAM;AAAA,MAC7D;AAAA,IACF;AAEA,WAAO,SAAS,IAAI,IAAI;AAAA,EAC1B;AACF;;;ACtJA,SAAS,cAAAQ,aAAY,mBAAmB;AACxC,SAAS,QAAAC,OAAM,gBAAgB;AAC/B,OAAOC,YAAW;AAClB,SAAS,WAAAC,UAAS,UAAAC,eAAc;AAChC,SAAS,qBAAqB;AAEvB,IAAM,kBAAN,cAA8BD,SAAQ;AAAA,EAC3C,OAAgB,QAAQ,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC;AAAA,EAE5C,OAAgB,QAAQA,SAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,8BAA8B,wBAAwB;AAAA,MACvD,CAAC,sCAAsC,4BAA4B;AAAA,IACrE;AAAA,EACF,CAAC;AAAA,EAED,YAAYC,QAAO,OAAO,EAAE,UAAU,KAAK,CAAC;AAAA,EAE5C,MAAMA,QAAO,QAAQ,YAAY,OAAO;AAAA,IACtC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAa,KAAK;AAExB,QAAI,CAACJ,YAAW,UAAU,GAAG;AAC3B,cAAQ,MAAME,OAAM,IAAI,wBAAwB,UAAU,EAAE,CAAC;AAC7D,aAAO;AAAA,IACT;AAEA,UAAM,aAAuB,CAAC;AAE9B,QAAI,KAAK,KAAK;AACZ,YAAM,UAAU,YAAY,YAAY,EAAE,eAAe,KAAK,CAAC;AAC/D,iBAAW,SAAS,SAAS;AAC3B,YAAI,MAAM,YAAY,GAAG;AACvB,gBAAM,YAAYD,MAAK,YAAY,MAAM,IAAI;AAC7C,cAAID,YAAWC,MAAK,WAAW,UAAU,CAAC,GAAG;AAC3C,uBAAW,KAAK,SAAS;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAEA,UAAI,WAAW,WAAW,GAAG;AAC3B,gBAAQ,MAAMC,OAAM,OAAO,8BAA8B,CAAC;AAC1D,eAAO;AAAA,MACT;AAAA,IACF,OAAO;AACL,iBAAW,KAAK,UAAU;AAAA,IAC5B;AAEA,QAAI,YAAY;AAEhB,eAAW,aAAa,YAAY;AAClC,YAAM,YAAY,SAAS,SAAS;AACpC,YAAM,SAAS,cAAc,SAAS;AAEtC,UAAI,OAAO,OAAO;AAChB,gBAAQ,IAAIA,OAAM,MAAM,UAAK,SAAS,EAAE,CAAC;AAEzC,YAAI,OAAO,YAAY,OAAO,SAAS,SAAS,GAAG;AACjD,iBAAO,SAAS,QAAQ,OAAK;AAC3B,oBAAQ,IAAIA,OAAM,OAAO,YAAO,CAAC,EAAE,CAAC;AAAA,UACtC,CAAC;AAAA,QACH;AAAA,MACF,OAAO;AACL,gBAAQ,IAAIA,OAAM,IAAI,UAAK,SAAS,EAAE,CAAC;AACvC,eAAO,OAAO,QAAQ,OAAK;AACzB,kBAAQ,IAAIA,OAAM,IAAI,YAAO,CAAC,EAAE,CAAC;AAAA,QACnC,CAAC;AACD,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,YAAQ,IAAI;AAEZ,QAAI,WAAW;AACb,cAAQ,IAAIA,OAAM,IAAI,mBAAmB,CAAC;AAC1C,cAAQ,IAAIA,OAAM,IAAI,kEAAkE,CAAC;AACzF,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,OAAM,MAAM,aAAa,WAAW,MAAM,wBAAwB,CAAC;AAC/E,WAAO;AAAA,EACT;AACF;;;ACtFA,SAAS,cAAAG,aAAY,aAAAC,YAAW,iBAAAC,sBAAqB;AACrD,SAAS,QAAAC,aAAY;AACrB,OAAOC,aAAW;AAClB,SAAS,WAAAC,WAAS,UAAAC,gBAAc;AAEzB,IAAM,gBAAN,cAA4BD,UAAQ;AAAA,EACzC,OAAgB,QAAQ,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;AAAA,EAE5C,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,sBAAsB,oBAAoB;AAAA,MAC3C,CAAC,wCAAwC,2BAA2B;AAAA,MACpE,CAAC,iCAAiC,8BAA8B;AAAA,IAClE;AAAA,EACF,CAAC;AAAA,EAED,OAAOC,SAAO,OAAO,EAAE,UAAU,MAAM,MAAM,aAAa,CAAC;AAAA,EAE3D,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,UAAUA,SAAO,QAAQ,aAAa,OAAO;AAAA,IAC3C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,aAAaA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IACjD,aAAa;AAAA,EACf,CAAC;AAAA,EAED,SAASA,SAAO,QAAQ,YAAY,OAAO;AAAA,IACzC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,YAAYA,SAAO,OAAO,YAAY;AAAA,IACpC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,YAAY,KAAK,KAAK,YAAY;AAExC,QAAI,CAAC,2BAA2B,KAAK,SAAS,GAAG;AAC/C,cAAQ,MAAMF,QAAM,IAAI,oBAAoB,CAAC;AAC7C,cAAQ,MAAMA,QAAM,IAAI,8DAA8D,CAAC;AACvF,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,KAAK,aAAa,QAAQ,IAAI;AAChD,UAAM,WAAWD,MAAK,WAAW,SAAS;AAE1C,QAAIH,YAAW,QAAQ,GAAG;AACxB,cAAQ,MAAMI,QAAM,IAAI,6BAA6B,QAAQ,EAAE,CAAC;AAChE,aAAO;AAAA,IACT;AAEA,QAAI;AACF,MAAAH,WAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAEvC,YAAM,UAAU,gBAAgB,SAAS;AACzC,MAAAC,eAAcC,MAAK,UAAU,UAAU,GAAG,OAAO;AAEjD,UAAI,KAAK,QAAQ,KAAK,YAAY;AAChC,cAAM,UAAUA,MAAK,UAAU,YAAY;AAC3C,QAAAF,WAAU,OAAO;AACjB,QAAAC,eAAcC,MAAK,SAAS,UAAU,GAAG,EAAE;AAAA,MAC7C;AAEA,UAAI,KAAK,QAAQ,KAAK,SAAS;AAC7B,cAAM,aAAaA,MAAK,UAAU,SAAS;AAC3C,QAAAF,WAAU,UAAU;AACpB,QAAAC,eAAcC,MAAK,YAAY,UAAU,GAAG,EAAE;AAAA,MAChD;AAEA,UAAI,KAAK,QAAQ,KAAK,QAAQ;AAC5B,cAAM,YAAYA,MAAK,UAAU,QAAQ;AACzC,QAAAF,WAAU,SAAS;AACnB,QAAAC,eAAcC,MAAK,WAAW,UAAU,GAAG,EAAE;AAAA,MAC/C;AAEA,cAAQ,IAAIC,QAAM,MAAM,kBAAkB,SAAS,EAAE,CAAC;AACtD,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,IAAI,YAAY,CAAC;AACnC,cAAQ,IAAIA,QAAM,IAAI,KAAK,QAAQ,GAAG,CAAC;AACvC,cAAQ,IAAIA,QAAM,IAAI,+BAAgB,CAAC;AACvC,UAAI,KAAK,QAAQ,KAAK,WAAY,SAAQ,IAAIA,QAAM,IAAI,kCAAmB,CAAC;AAC5E,UAAI,KAAK,QAAQ,KAAK,QAAS,SAAQ,IAAIA,QAAM,IAAI,+BAAgB,CAAC;AACtE,UAAI,KAAK,QAAQ,KAAK,OAAQ,SAAQ,IAAIA,QAAM,IAAI,8BAAe,CAAC;AACpE,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,aAAa,CAAC;AACrC,cAAQ,IAAIA,QAAM,IAAI,2CAA2C,CAAC;AAClE,cAAQ,IAAIA,QAAM,IAAI,sCAAsC,QAAQ,CAAC;AACrE,cAAQ,IAAIA,QAAM,IAAI,8BAA8B,SAAS,CAAC;AAE9D,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAMA,QAAM,IAAI,wBAAwB,CAAC;AACjD,cAAQ,MAAMA,QAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,MAAsB;AAC7C,QAAM,QAAQ,KACX,MAAM,GAAG,EACT,IAAI,UAAQ,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EACxD,KAAK,GAAG;AAEX,SAAO;AAAA,QACD,IAAI;AAAA;AAAA;AAAA;AAAA,IAIR,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeT;;;ACjIA,SAAS,WAAAG,iBAAe;AAEjB,IAAM,YAAN,cAAwBA,UAAQ;AAAA,EACrC,OAAgB,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;AAAA,EAExC,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,UAAU;AAAA,MACR,CAAC,wBAAwB,OAAO;AAAA,MAChC,CAAC,iBAAiB,QAAQ;AAAA,IAC5B;AAAA,EACF,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,EAAE,SAAS,IAAI,MAAM,OAAO,eAAe;AACjD,UAAM,SAAS;AACf,WAAO;AAAA,EACT;AACF;;;AClBA,SAAS,WAAAC,WAAS,UAAAC,gBAAc;AAChC,SAAS,cAAAC,aAAY,gBAAAC,eAAc,iBAAAC,gBAAe,aAAAC,kBAAiB;AACnE,SAAS,QAAAC,OAAM,YAAAC,WAAU,WAAAC,gBAAe;AACxC,OAAOC,aAAW;AAClB;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAAC;AAAA,OACK;AACP,SAAS,cAAAC,aAAY,kBAAAC,uBAAsB;AAMpC,IAAM,mBAAN,cAA+BC,UAAQ;AAAA,EAC5C,OAAgB,QAAQ,CAAC,CAAC,WAAW,CAAC;AAAA,EAEtC,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWT,UAAU;AAAA,MACR,CAAC,sCAAsC,mCAAmC;AAAA,MAC1E,CAAC,oCAAoC,kCAAkC;AAAA,MACvE,CAAC,6BAA6B,6DAA6D;AAAA,MAC3F,CAAC,6BAA6B,qBAAqB;AAAA,MACnD,CAAC,uCAAuC,6CAA6C;AAAA,IACvF;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,SAASC,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA;AAAA,EAG1C,KAAKA,SAAO,OAAO,WAAW;AAAA,IAC5B,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,OAAO,aAAa;AAAA,IAChC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,OAAO,eAAe;AAAA,IACpC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,MAAMA,SAAO,QAAQ,YAAY,OAAO;AAAA,IACtC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC7C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,WAAWA,SAAO,QAAQ,iBAAiB,OAAO;AAAA,IAChD,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,QAAQA,SAAO,QAAQ,WAAW,OAAO;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,eAAe,OAAO;AAAA,IAC5C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAE/B,QAAI,KAAK,MAAM;AACb,aAAO,KAAK,WAAW;AAAA,IACzB;AAGA,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK,kBAAkB;AAAA,IAChC;AAGA,QAAI,CAAC,KAAK,IAAI;AACZ,cAAQ,MAAMC,QAAM,IAAI,yCAAyC,CAAC;AAClE,cAAQ,IAAIA,QAAM,KAAK,wCAAwC,CAAC;AAChE,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,KAAK;AACzB,QAAI,CAAC,8BAA8B,EAAE,SAAS,WAAW,GAAG;AAC1D,cAAQ,MAAMA,QAAM,IAAI,gCAAgC,KAAK,EAAE,GAAG,CAAC;AACnE,cAAQ,IAAIA,QAAM,KAAK,wCAAwC,CAAC;AAChE,aAAO;AAAA,IACT;AAGA,QAAI,KAAK,KAAK;AACZ,aAAO,KAAK,aAAa,WAAW;AAAA,IACtC;AAGA,QAAI,CAAC,KAAK,QAAQ;AAChB,cAAQ,MAAMA,QAAM,IAAI,0DAA0D,CAAC;AACnF,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,gBAAgB,KAAK,QAAQ,WAAW;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAqB;AAC3B,YAAQ,IAAIA,QAAM,KAAK,uCAAuC,CAAC;AAE/D,UAAM,SAAS,8BAA8B;AAC7C,UAAM,WAAWC,gBAAe;AAGhC,UAAM,WAAwC,CAAC;AAC/C,eAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,mBAAmB,kBAAkB,KAAK;AACzD,UAAI,CAAC,SAAS,MAAM,EAAG,UAAS,MAAM,IAAI,CAAC;AAC3C,eAAS,MAAM,EAAE,KAAK,KAAK;AAAA,IAC7B;AAGA,UAAM,cAAsC;AAAA,MAC1C,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,YAAY;AAAA,IACd;AAEA,eAAW,CAAC,QAAQ,YAAY,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC7D,cAAQ,IAAID,QAAM,KAAK,KAAK,YAAY,MAAM,KAAK,MAAM,GAAG,CAAC;AAC7D,iBAAW,SAAS,cAAc;AAChC,cAAM,UAAU,SAAS,KAAK,OAAK,EAAE,SAAS,KAAK;AACnD,cAAM,OAAO,SAAS,QAAQ;AAC9B,gBAAQ,IAAI,OAAOA,QAAM,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC,IAAIA,QAAM,KAAK,IAAI,CAAC,EAAE;AAAA,MACxE;AACA,cAAQ,IAAI;AAAA,IACd;AAEA,YAAQ,IAAIA,QAAM,KAAK,gDAAgD,CAAC;AACxE,YAAQ,IAAIA,QAAM,KAAK,8CAA8C,CAAC;AAEtE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAA4B;AAClC,QAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,IAAI;AAC1B,cAAQ,MAAMA,QAAM,IAAI,kEAAkE,CAAC;AAC3F,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,KAAK;AACvB,UAAM,UAAU,KAAK;AAErB,UAAM,OAAO,mBAAmB,qBAAqB,WAAW,OAAO;AAEvE,YAAQ,IAAIA,QAAM,KAAK;AAAA,eAAkB,SAAS,WAAM,OAAO;AAAA,CAAI,CAAC;AAEpE,QAAI,KAAK,WAAW;AAClB,cAAQ,IAAIA,QAAM,MAAM,gCAA2B,CAAC;AAAA,IACtD,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,oCAA+B,CAAC;AACtD,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,cAAQ,IAAIA,QAAM,OAAO,eAAe,CAAC;AACzC,iBAAW,WAAW,KAAK,UAAU;AACnC,gBAAQ,IAAIA,QAAM,OAAO,cAAS,OAAO,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AAEA,QAAI,KAAK,YAAY,SAAS,GAAG;AAC/B,cAAQ,IAAIA,QAAM,KAAK,wCAAwC,CAAC;AAChE,iBAAW,SAAS,KAAK,aAAa;AACpC,gBAAQ,IAAIA,QAAM,KAAK,cAAS,KAAK,EAAE,CAAC;AAAA,MAC1C;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAa,aAAyC;AAClE,UAAM,aAAa,cAAc;AACjC,UAAM,SAASE,eAAc,UAAU;AAEvC,QAAI,OAAO,WAAW,GAAG;AACvB,cAAQ,IAAIF,QAAM,OAAO,8BAA8B,CAAC;AACxD,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK;AAAA,cAAiB,OAAO,MAAM,gBAAgB,WAAW;AAAA,CAAO,CAAC;AAExF,QAAI,UAAU;AACd,QAAI,SAAS;AAEb,eAAW,SAAS,QAAQ;AAC1B,YAAM,cAAcG,MAAK,MAAM,MAAM,UAAU;AAC/C,UAAI,CAACC,YAAW,WAAW,GAAG;AAC5B,gBAAQ,IAAIJ,QAAM,OAAO,YAAO,MAAM,IAAI,qBAAqB,CAAC;AAChE;AACA;AAAA,MACF;AAEA,YAAM,SAAS,mBAAmB,aAAa,aAAa;AAAA,QAC1D,aAAa,KAAK;AAAA,MACpB,CAAC;AAED,UAAI,OAAO,SAAS;AAClB,YAAI,KAAK,QAAQ;AACf,kBAAQ,IAAIA,QAAM,MAAM,YAAO,MAAM,IAAI,WAAM,OAAO,QAAQ,YAAY,CAAC;AAC3E,cAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,uBAAW,WAAW,OAAO,UAAU;AACrC,sBAAQ,IAAIA,QAAM,KAAK,SAAS,OAAO,EAAE,CAAC;AAAA,YAC5C;AAAA,UACF;AAAA,QACF,OAAO;AAEL,gBAAM,gBAAgBK,YAAW,WAAW;AAC5C,gBAAM,YAAY,KAAK,UAAUF,MAAK,QAAQ,IAAI,GAAG,cAAc,WAAW,MAAM,IAAI;AAExF,cAAI,CAACC,YAAW,SAAS,GAAG;AAC1B,YAAAE,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,UAC1C;AAEA,gBAAM,aAAaH,MAAK,WAAW,OAAO,QAAQ;AAElD,cAAIC,YAAW,UAAU,KAAK,CAAC,KAAK,OAAO;AACzC,oBAAQ,IAAIJ,QAAM,OAAO,YAAO,MAAM,IAAI,KAAK,UAAU,uBAAuB,CAAC;AACjF;AACA;AAAA,UACF;AAEA,UAAAO,eAAc,YAAY,OAAO,SAAS,OAAO;AACjD,kBAAQ,IAAIP,QAAM,MAAM,YAAO,MAAM,IAAI,WAAM,UAAU,EAAE,CAAC;AAAA,QAC9D;AAEA,YAAI,OAAO,aAAa,SAAS,GAAG;AAClC,qBAAW,QAAQ,OAAO,cAAc;AACtC,oBAAQ,IAAIA,QAAM,KAAK,gBAAW,IAAI,EAAE,CAAC;AAAA,UAC3C;AAAA,QACF;AAEA;AAAA,MACF,OAAO;AACL,gBAAQ,IAAIA,QAAM,IAAI,YAAO,MAAM,IAAI,sBAAsB,CAAC;AAC9D,mBAAW,QAAQ,OAAO,cAAc;AACtC,kBAAQ,IAAIA,QAAM,IAAI,SAAS,IAAI,EAAE,CAAC;AAAA,QACxC;AACA;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,eAAe,OAAO,aAAa,MAAM,EAAE,CAAC;AAEnE,WAAO,SAAS,IAAI,IAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAgB,QAAgB,aAAyC;AACrF,QAAI;AACJ,QAAI;AAGJ,QAAII,YAAW,MAAM,GAAG;AACtB,mBAAa;AACb,kBAAYI,UAASC,SAAQ,MAAM,CAAC;AACpC,UAAI,cAAc,KAAK;AACrB,oBAAYD,UAAS,MAAM,EAAE,QAAQ,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF,OAAO;AAEL,YAAM,aAAa,cAAc;AACjC,UAAI,QAAQ;AAEZ,iBAAW,OAAO,YAAY;AAC5B,cAAM,YAAYL,MAAK,KAAK,MAAM;AAClC,cAAM,cAAcA,MAAK,WAAW,UAAU;AAE9C,YAAIC,YAAW,WAAW,GAAG;AAC3B,uBAAa;AACb,sBAAY;AACZ,kBAAQ;AACR;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAMJ,QAAM,IAAI,iBAAiB,MAAM,aAAa,CAAC;AAC7D,gBAAQ,IAAIA,QAAM,KAAK,cAAc,CAAC;AACtC,mBAAW,OAAO,YAAY;AAC5B,kBAAQ,IAAIA,QAAM,KAAK,KAAK,GAAG,EAAE,CAAC;AAAA,QACpC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,UAAUU,cAAa,YAAa,OAAO;AACjD,UAAM,SAAS,eAAe,SAAS,aAAa;AAAA,MAClD,aAAa,KAAK;AAAA,MAClB,gBAAgBF,UAAS,UAAW;AAAA,IACtC,CAAC;AAED,QAAI,CAAC,OAAO,SAAS;AACnB,cAAQ,MAAMR,QAAM,IAAI,qBAAqB,CAAC;AAC9C,iBAAW,QAAQ,OAAO,cAAc;AACtC,gBAAQ,MAAMA,QAAM,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,MACtC;AACA,aAAO;AAAA,IACT;AAGA,QAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,cAAQ,IAAIA,QAAM,OAAO,aAAa,CAAC;AACvC,iBAAW,WAAW,OAAO,UAAU;AACrC,gBAAQ,IAAIA,QAAM,OAAO,YAAO,OAAO,EAAE,CAAC;AAAA,MAC5C;AAAA,IACF;AAGA,QAAI,OAAO,aAAa,SAAS,GAAG;AAClC,cAAQ,IAAIA,QAAM,KAAK,0BAA0B,CAAC;AAClD,iBAAW,QAAQ,OAAO,cAAc;AACtC,gBAAQ,IAAIA,QAAM,KAAK,YAAO,IAAI,EAAE,CAAC;AAAA,MACvC;AAAA,IACF;AAGA,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAIA,QAAM,KAAK;AAAA,sBAAyB,OAAO,QAAQ;AAAA,CAAM,CAAC;AACtE,cAAQ,IAAIA,QAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,cAAQ,IAAI,OAAO,OAAO;AAC1B,cAAQ,IAAIA,QAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,aAAO;AAAA,IACT;AAGA,QAAI;AACJ,QAAI,KAAK,QAAQ;AACf,mBAAa,KAAK;AAAA,IACpB,OAAO;AACL,YAAM,gBAAgBK,YAAW,WAAW;AAC5C,YAAMM,aAAYR,MAAK,QAAQ,IAAI,GAAG,cAAc,WAAW,SAAU;AAEzE,UAAI,CAACC,YAAWO,UAAS,GAAG;AAC1B,QAAAL,WAAUK,YAAW,EAAE,WAAW,KAAK,CAAC;AAAA,MAC1C;AAEA,mBAAaR,MAAKQ,YAAW,OAAO,QAAQ;AAAA,IAC9C;AAGA,QAAIP,YAAW,UAAU,KAAK,CAAC,KAAK,OAAO;AACzC,cAAQ,MAAMJ,QAAM,IAAI,UAAU,UAAU,iBAAiB,CAAC;AAC9D,cAAQ,IAAIA,QAAM,KAAK,0BAA0B,CAAC;AAClD,aAAO;AAAA,IACT;AAGA,UAAM,YAAYS,SAAQ,UAAU;AACpC,QAAI,CAACL,YAAW,SAAS,GAAG;AAC1B,MAAAE,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC1C;AAEA,IAAAC,eAAc,YAAY,OAAO,SAAS,OAAO;AAEjD,YAAQ,IAAIP,QAAM,MAAM;AAAA,uBAAqB,UAAU,EAAE,CAAC;AAC1D,YAAQ,IAAIA,QAAM,KAAK,aAAa,OAAO,YAAY,EAAE,CAAC;AAC1D,YAAQ,IAAIA,QAAM,KAAK,YAAY,OAAO,WAAW,EAAE,CAAC;AAExD,WAAO;AAAA,EACT;AACF;;;ACzZA,SAAS,WAAAY,WAAS,UAAAC,gBAAc;AAChC,SAAS,cAAAC,aAAY,gBAAAC,eAAc,iBAAAC,sBAAqB;AACxD,SAAS,eAAe;AACxB,OAAOC,aAAW;AAClB;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAAC,uBAAsB;AAKxB,IAAM,iBAAN,cAA6BN,UAAQ;AAAA,EAC1C,OAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC;AAAA,EAEpC,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYT,UAAU;AAAA,MACR,CAAC,8BAA8B,iBAAiB;AAAA,MAChD,CAAC,wBAAwB,iBAAiB;AAAA,MAC1C,CAAC,6BAA6B,iBAAiB;AAAA,MAC/C,CAAC,0BAA0B,gCAAgC;AAAA,MAC3D,CAAC,kBAAkB,yCAAyC;AAAA,IAC9D;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,SAASC,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA;AAAA,EAG1C,QAAQA,SAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,OAAO,eAAe;AAAA,IACpC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,QAAQA,SAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,QAAQA,SAAO,QAAQ,cAAc,OAAO;AAAA,IAC1C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC7C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,QAAQA,SAAO,QAAQ,cAAc,OAAO;AAAA,IAC1C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,UAAUA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,SAAS,KAAK,UAAU;AAE9B,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,eAAO,KAAK,YAAY;AAAA,MAC1B,KAAK;AACH,eAAO,KAAK,YAAY;AAAA,MAC1B,KAAK;AACH,eAAO,KAAK,cAAc;AAAA,MAC5B,KAAK;AACH,eAAO,KAAK,cAAc;AAAA,MAC5B,KAAK;AACH,eAAO,KAAK,YAAY;AAAA,MAC1B,KAAK;AACH,eAAO,KAAK,cAAc;AAAA,MAC5B,KAAK;AACH,eAAO,KAAK,WAAW;AAAA,MACzB;AACE,gBAAQ,MAAMI,QAAM,IAAI,mBAAmB,MAAM,EAAE,CAAC;AACpD,gBAAQ,IAAIA,QAAM,KAAK,qEAAqE,CAAC;AAC7F,eAAO;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAA+B;AAC3C,UAAM,UAAU,IAAI,eAAe,QAAQ,IAAI,CAAC;AAEhD,QAAI,QAAQ,OAAO,KAAK,CAAC,KAAK,OAAO;AACnC,cAAQ,IAAIA,QAAM,OAAO,sDAAsD,CAAC;AAChF,aAAO,KAAK,YAAY;AAAA,IAC1B;AAEA,YAAQ,IAAIA,QAAM,KAAK,mCAAmC,CAAC;AAE3D,UAAM,UAAU,QAAQ,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;AAElD,YAAQ,IAAIA,QAAM,MAAM,8BAAyB,CAAC;AAClD,YAAQ,IAAIA,QAAM,KAAK;AAAA,CAAsC,CAAC;AAG9D,SAAK,oBAAoB,OAAO;AAGhC,UAAM,OAAO,kBAAkB,QAAQ,IAAI,CAAC;AAC5C,UAAM,WAAW,KAAK,aAAa;AACnC,QAAI,SAAS,SAAS,GAAG;AACvB,cAAQ,IAAIA,QAAM,KAAK,oBAAoB,CAAC;AAC5C,iBAAW,SAAS,UAAU;AAC5B,gBAAQ,IAAI,KAAKA,QAAM,MAAM,QAAG,CAAC,IAAI,KAAK,EAAE;AAAA,MAC9C;AAGA,cAAQ,aAAa;AAAA,QACnB;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAEA,YAAQ,IAAIA,QAAM,KAAK,6DAA6D,CAAC;AAErF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAA+B;AAC3C,UAAM,UAAU,IAAI,eAAe,QAAQ,IAAI,CAAC;AAChD,UAAM,UAAU,QAAQ,KAAK;AAE7B,QAAI,CAAC,SAAS;AACZ,cAAQ,IAAIA,QAAM,OAAO,sDAAsD,CAAC;AAChF,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C,aAAO;AAAA,IACT;AAEA,SAAK,oBAAoB,OAAO;AAEhC,QAAI,KAAK,SAAS;AAChB,cAAQ,IAAIA,QAAM,KAAK,iBAAiB,CAAC;AACzC,cAAQ,IAAIA,QAAM,KAAK,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC,CAAC;AAAA,IAC1D;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAiC;AAC7C,UAAM,UAAU,IAAI,eAAe,QAAQ,IAAI,CAAC;AAChD,UAAM,UAAU,QAAQ,IAAI;AAE5B,QAAI,CAAC,SAAS;AACZ,cAAQ,MAAMA,QAAM,IAAI,sDAAsD,CAAC;AAC/E,aAAO;AAAA,IACT;AAEA,UAAM,SAAS,KAAK,OAAO,SAAS;AACpC,UAAM,UAAU,QAAQ,OAAO;AAAA,MAC7B;AAAA,MACA,eAAe;AAAA,MACf,eAAe;AAAA,IACjB,CAAC;AAED,QAAI,KAAK,QAAQ;AACf,YAAM,aAAa,QAAQ,KAAK,MAAM;AACtC,UAAIH,YAAW,UAAU,KAAK,CAAC,KAAK,OAAO;AACzC,gBAAQ,MAAMG,QAAM,IAAI,gBAAgB,UAAU,6BAA6B,CAAC;AAChF,eAAO;AAAA,MACT;AAEA,MAAAD,eAAc,YAAY,SAAS,OAAO;AAC1C,cAAQ,IAAIC,QAAM,MAAM,8BAAyB,UAAU,EAAE,CAAC;AAAA,IAChE,OAAO;AAEL,cAAQ,IAAI,OAAO;AAAA,IACrB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAiC;AAC7C,QAAI,CAAC,KAAK,OAAO;AACf,cAAQ,MAAMA,QAAM,IAAI,yCAAyC,CAAC;AAClE,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,QAAQ,KAAK,KAAK;AACpC,QAAI,CAACH,YAAW,SAAS,GAAG;AAC1B,cAAQ,MAAMG,QAAM,IAAI,mBAAmB,SAAS,EAAE,CAAC;AACvD,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,IAAI,eAAe,QAAQ,IAAI,CAAC;AAChD,UAAM,UAAUF,cAAa,WAAW,OAAO;AAE/C,QAAI;AACF,YAAM,UAAU,QAAQ,OAAO,SAAS;AAAA,QACtC,OAAO,KAAK;AAAA,QACZ,WAAW,KAAK;AAAA,MAClB,CAAC;AAED,cAAQ,IAAIE,QAAM,MAAM,sCAAiC,CAAC;AAC1D,WAAK,oBAAoB,OAAO;AAChC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAMA,QAAM,IAAI,kBAAkB,KAAK,EAAE,CAAC;AAClD,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAA+B;AAC3C,UAAM,UAAU,IAAI,eAAe,QAAQ,IAAI,CAAC;AAChD,UAAM,UAAU,QAAQ,IAAI;AAE5B,QAAI,CAAC,SAAS;AACZ,cAAQ,IAAIA,QAAM,OAAO,mCAAmC,CAAC;AAC7D,cAAQ,KAAK;AAAA,IACf;AAEA,UAAM,OAAO,kBAAkB,QAAQ,IAAI,CAAC;AAE5C,YAAQ,IAAIA,QAAM,KAAK,mCAAmC,CAAC;AAG3D,UAAM,SAAS,KAAK,QAAQ,CAAC,KAAK,KAAkB,IAAI;AAExD,UAAM,SAAS,MAAM,KAAK,QAAQ;AAAA,MAChC;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,IACf,CAAC;AAGD,eAAW,UAAU,OAAO,SAAS;AACnC,YAAM,SAAS,OAAO,UAAUA,QAAM,MAAM,QAAG,IAAIA,QAAM,IAAI,QAAG;AAChE,cAAQ,IAAI,GAAG,MAAM,IAAI,OAAO,KAAK,KAAK,OAAO,YAAY,YAAY,OAAO,aAAa,UAAU;AAEvG,UAAI,KAAK,WAAW,OAAO,MAAM,SAAS,GAAG;AAC3C,mBAAW,QAAQ,OAAO,OAAO;AAC/B,kBAAQ,IAAIA,QAAM,KAAK,cAAS,IAAI,EAAE,CAAC;AAAA,QACzC;AAAA,MACF;AAEA,UAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,mBAAW,WAAW,OAAO,UAAU;AACrC,kBAAQ,IAAIA,QAAM,OAAO,cAAS,OAAO,EAAE,CAAC;AAAA,QAC9C;AAAA,MACF;AAEA,UAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,mBAAW,SAAS,OAAO,QAAQ;AACjC,kBAAQ,IAAIA,QAAM,IAAI,cAAS,KAAK,EAAE,CAAC;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,YAAY,OAAO,gBAAgB,IAAI,OAAO,WAAW,YAAY,OAAO,WAAW,SAAS,CAAC;AAExH,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAIA,QAAM,KAAK,qCAAqC,CAAC;AAAA,IAC/D;AAEA,WAAO,OAAO,qBAAqB,OAAO,cAAc,IAAI;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAiC;AAC7C,YAAQ,IAAIA,QAAM,KAAK,wBAAwB,CAAC;AAEhD,UAAM,QAAQ,eAAe,QAAQ,IAAI,CAAC;AAC1C,UAAM,OAAO,aAAa,KAAK;AAG/B,QAAI,MAAM,UAAU,SAAS,GAAG;AAC9B,cAAQ,IAAIA,QAAM,KAAK,YAAY,CAAC;AACpC,iBAAW,QAAQ,MAAM,WAAW;AAClC,cAAM,UAAU,KAAK,UAAU,KAAK,KAAK,OAAO,MAAM;AACtD,gBAAQ,IAAI,KAAKA,QAAM,MAAM,QAAG,CAAC,IAAI,KAAK,IAAI,GAAG,OAAO,EAAE;AAAA,MAC5D;AACA,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,cAAQ,IAAIA,QAAM,KAAK,aAAa,CAAC;AACrC,iBAAW,MAAM,MAAM,YAAY;AACjC,cAAM,UAAU,GAAG,UAAU,KAAK,GAAG,OAAO,MAAM;AAClD,gBAAQ,IAAI,KAAKA,QAAM,MAAM,QAAG,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,EAAE;AAAA,MAC1D;AACA,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,MAAM,UAAU,SAAS,GAAG;AAC9B,cAAQ,IAAIA,QAAM,KAAK,YAAY,CAAC;AACpC,iBAAW,OAAO,MAAM,WAAW;AACjC,cAAM,UAAU,IAAI,UAAU,KAAK,IAAI,OAAO,MAAM;AACpD,gBAAQ,IAAI,KAAKA,QAAM,MAAM,QAAG,CAAC,IAAI,IAAI,IAAI,GAAG,OAAO,EAAE;AAAA,MAC3D;AACA,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,cAAQ,IAAIA,QAAM,KAAK,UAAU,CAAC;AAClC,iBAAW,SAAS,MAAM,SAAS;AACjC,gBAAQ,IAAI,KAAKA,QAAM,MAAM,QAAG,CAAC,IAAI,MAAM,IAAI,EAAE;AAAA,MACnD;AACA,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,cAAQ,IAAIA,QAAM,KAAK,UAAU,CAAC;AAClC,iBAAW,QAAQ,MAAM,SAAS;AAChC,gBAAQ,IAAI,KAAKA,QAAM,MAAM,QAAG,CAAC,IAAI,KAAK,IAAI,EAAE;AAAA,MAClD;AACA,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,MAAM,UAAU,SAAS,GAAG;AAC9B,cAAQ,IAAIA,QAAM,KAAK,YAAY,CAAC;AACpC,iBAAW,MAAM,MAAM,WAAW;AAChC,gBAAQ,IAAI,KAAKA,QAAM,MAAM,QAAG,CAAC,IAAI,GAAG,IAAI,EAAE;AAAA,MAChD;AACA,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,MAAM,MAAM,SAAS,GAAG;AAC1B,cAAQ,IAAIA,QAAM,KAAK,QAAQ,CAAC;AAChC,iBAAW,QAAQ,MAAM,OAAO;AAC9B,gBAAQ,IAAI,KAAKA,QAAM,MAAM,QAAG,CAAC,IAAI,KAAK,IAAI,EAAE;AAAA,MAClD;AACA,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,KAAK,SAAS,GAAG;AACnB,cAAQ,IAAIA,QAAM,KAAK,yBAAyB,CAAC;AACjD,cAAQ,IAAI,KAAKA,QAAM,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE;AAC9C,cAAQ,IAAI;AAAA,IACd;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAIA,QAAM,KAAK,SAAS,CAAC;AACjC,cAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,IAC5C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAA8B;AAC1C,UAAM,OAAO,kBAAkB,QAAQ,IAAI,CAAC;AAC5C,UAAM,WAAW,KAAK,aAAa;AACnC,UAAM,SAAS,KAAK,YAAY;AAChC,UAAM,WAAWC,gBAAe;AAEhC,YAAQ,IAAID,QAAM,KAAK,mBAAmB,CAAC;AAE3C,eAAW,CAAC,OAAO,IAAI,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,YAAM,UAAU,SAAS,KAAK,OAAK,EAAE,SAAS,KAAK;AACnD,YAAM,OAAO,SAAS,QAAQ;AAC9B,YAAM,aAAa,SAAS,SAAS,KAAkB;AAEvD,YAAM,aAAa,KAAK,YAAYA,QAAM,MAAM,QAAG,IAAI,aAAaA,QAAM,OAAO,QAAG,IAAIA,QAAM,KAAK,QAAG;AACtG,YAAM,YAAY,KAAK,aAAa,IAAIA,QAAM,KAAK,KAAK,KAAK,UAAU,UAAU,IAAI;AAErF,cAAQ,IAAI,KAAK,UAAU,IAAI,KAAK,OAAO,EAAE,CAAC,IAAIA,QAAM,KAAK,KAAK,CAAC,GAAG,SAAS,EAAE;AAEjF,UAAI,KAAK,WAAW,KAAK,OAAO,SAAS,GAAG;AAC1C,mBAAW,SAAS,KAAK,QAAQ;AAC/B,kBAAQ,IAAIA,QAAM,KAAK,sBAAY,KAAK,EAAE,CAAC;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,KAAK,4EAA6D,CAAC;AACrF,YAAQ,IAAI;AAEZ,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,SAA+B;AACzD,YAAQ,IAAIA,QAAM,KAAK,UAAU,CAAC;AAClC,YAAQ,IAAI,WAAWA,QAAM,KAAK,QAAQ,QAAQ,IAAI,CAAC,EAAE;AACzD,QAAI,QAAQ,QAAQ,MAAM;AACxB,cAAQ,IAAI,WAAW,QAAQ,QAAQ,IAAI,EAAE;AAAA,IAC/C;AACA,QAAI,QAAQ,QAAQ,aAAa;AAC/B,cAAQ,IAAI,kBAAkB,QAAQ,QAAQ,WAAW,EAAE;AAAA,IAC7D;AAGA,UAAM,aAAuB,CAAC;AAC9B,QAAI,QAAQ,MAAM,UAAU,SAAS,GAAG;AACtC,iBAAW,KAAK,GAAG,QAAQ,MAAM,UAAU,MAAM,YAAY;AAAA,IAC/D;AACA,QAAI,QAAQ,MAAM,WAAW,SAAS,GAAG;AACvC,iBAAW,KAAK,GAAG,QAAQ,MAAM,WAAW,MAAM,aAAa;AAAA,IACjE;AACA,QAAI,QAAQ,MAAM,UAAU,SAAS,GAAG;AACtC,iBAAW,KAAK,GAAG,QAAQ,MAAM,UAAU,MAAM,YAAY;AAAA,IAC/D;AACA,QAAI,QAAQ,MAAM,UAAU,SAAS,GAAG;AACtC,iBAAW,KAAK,GAAG,QAAQ,MAAM,UAAU,MAAM,YAAY;AAAA,IAC/D;AAEA,QAAI,WAAW,SAAS,GAAG;AACzB,cAAQ,IAAI;AAAA,EAAKA,QAAM,KAAK,QAAQ,CAAC,IAAI,WAAW,KAAK,IAAI,CAAC,EAAE;AAGhE,YAAM,gBAAgB,QAAQ,MAAM,WAAW,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,EAAE,IAAI;AAC1E,UAAI,cAAc,SAAS,GAAG;AAC5B,gBAAQ,IAAI,iBAAiBA,QAAM,KAAK,cAAc,KAAK,IAAI,CAAC,CAAC,EAAE;AAAA,MACrE;AAEA,YAAM,UAAU,QAAQ,MAAM,UAAU,MAAM,GAAG,CAAC,EAAE,IAAI,OAAK,EAAE,IAAI;AACnE,UAAI,QAAQ,SAAS,GAAG;AACtB,gBAAQ,IAAI,gBAAgBA,QAAM,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,EAAE;AAAA,MAC9D;AAAA,IACF;AAGA,QAAI,QAAQ,QAAQ;AAClB,cAAQ,IAAI;AAAA,EAAKA,QAAM,KAAK,SAAS,CAAC,EAAE;AACxC,cAAQ,IAAI,gBAAgB,QAAQ,OAAO,WAAW,UAAU,CAAC,EAAE;AACnE,cAAQ,IAAI,gBAAgB,QAAQ,OAAO,WAAW,YAAY,UAAU,EAAE;AAAA,IAChF;AAGA,QAAI,QAAQ,QAAQ;AAClB,cAAQ,IAAI;AAAA,EAAKA,QAAM,KAAK,SAAS,CAAC,EAAE;AACxC,UAAI,QAAQ,OAAO,SAAS;AAC1B,gBAAQ,IAAI,cAAcA,QAAM,KAAK,QAAQ,OAAO,OAAO,CAAC,EAAE;AAAA,MAChE;AACA,UAAI,QAAQ,OAAO,QAAQ,QAAQ;AACjC,gBAAQ,IAAI,aAAa,QAAQ,OAAO,OAAO,KAAK,IAAI,CAAC,EAAE;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AACF;;;AC9eA,SAAS,WAAAE,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,gBAAe;AACxB,OAAOC,aAAW;AAClB,OAAOC,UAAS;AAChB;AAAA,EAGE,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAKA,IAAM,mBAAN,cAA+BL,UAAQ;AAAA,EAC5C,OAAgB,QAAQ,CAAC,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC;AAAA,EAE/C,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaT,UAAU;AAAA,MACR,CAAC,uBAAuB,cAAc;AAAA,MACtC,CAAC,8BAA8B,wBAAwB;AAAA,MACvD,CAAC,sBAAsB,kCAAkC;AAAA,MACzD,CAAC,yBAAyB,wBAAwB;AAAA,MAClD,CAAC,sBAAsB,uBAAuB;AAAA,MAC9C,CAAC,6BAA6B,sCAAsC;AAAA,MACpE,CAAC,6BAA6B,iCAAiC;AAAA,IACjE;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,QAAQC,SAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,WAAWA,SAAO,OAAO,eAAe;AAAA,IACtC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,WAAWA,SAAO,MAAM,iBAAiB;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,UAAUA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,eAAe,OAAO;AAAA,IAC5C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,OAAO,eAAe;AAAA,IACpC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,OAAO,aAAa;AAAA,IAChC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,mBAAmBA,SAAO,QAAQ,uBAAuB,OAAO;AAAA,IAC9D,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,cAAcA,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,SAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAG5D,QAAI,KAAK,QAAQ;AACf,aAAO,MAAM,KAAK,YAAY;AAAA,IAChC;AAGA,UAAM,UAAU,MAAM,KAAK,kBAAkB,UAAU;AACvD,QAAI,CAAC,SAAS;AACZ,cAAQ,MAAMC,QAAM,IAAI,2BAA2B,CAAC;AACpD,aAAO;AAAA,IACT;AAGA,UAAM,QAAQ,KAAK,UAAU;AAC7B,QAAI,CAAC,SAAS,MAAM,OAAO,WAAW,GAAG;AACvC,cAAQ,IAAIA,QAAM,OAAO,uBAAuB,CAAC;AACjD,cAAQ,IAAIA,QAAM,IAAI,uEAAuE,CAAC;AAC9F,cAAQ,IAAIA,QAAM,IAAI,+DAA+D,CAAC;AAGtF,WAAK,mBAAmB,OAAO;AAC/B,aAAO;AAAA,IACT;AAGA,UAAM,SAAS,IAAI,qBAAqB;AACxC,WAAO,UAAU,KAAK;AAGtB,UAAM,cAAc,KAAK,UAAU,KAAK;AACxC,QAAI,aAAa;AACf,aAAO,KAAK,aAAa,QAAQ,WAAW;AAAA,IAC9C;AAGA,UAAM,SAAS,OAAO,UAAU,SAAS;AAAA,MACvC,OAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,EAAE,IAAI;AAAA,MAC/C,UAAU,KAAK,WAAW,SAAS,KAAK,UAAU,EAAE,IAAI;AAAA,MACxD,YAAY,KAAK;AAAA,MACjB,kBAAkB,CAAC,KAAK;AAAA,MACxB,gBAAgB,KAAK;AAAA,IACvB,CAAC;AAGD,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C,aAAO;AAAA,IACT;AAEA,SAAK,uBAAuB,OAAO,iBAAiB,SAAS,OAAO,kBAAkB;AACtF,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,aAAqD;AACnF,UAAM,UAAU,IAAIE,gBAAe,WAAW;AAC9C,QAAI,UAAU,QAAQ,IAAI;AAE1B,QAAI,CAAC,SAAS;AAEZ,UAAI,CAAC,KAAK,MAAM;AACd,gBAAQ,IAAIF,QAAM,IAAI,wBAAwB,CAAC;AAAA,MACjD;AACA,gBAAU,QAAQ,KAAK;AAAA,IACzB;AAEA,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,MACL,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,QAAQ,QAAQ;AAAA,MACtB,OAAO,QAAQ;AAAA,MACf,UAAU,QAAQ;AAAA,MAClB,iBAAiB,QAAQ,QAAQ,aAAa,CAAC;AAAA,MAC/C,gBAAgB,QAAQ,QAAQ,YAAY,CAAC;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,SAA+B;AACxD,YAAQ,IAAIA,QAAM,KAAK,kBAAkB,CAAC;AAC1C,YAAQ,IAAI,WAAWA,QAAM,KAAK,QAAQ,IAAI,CAAC,EAAE;AACjD,QAAI,QAAQ,MAAM;AAChB,cAAQ,IAAI,WAAW,QAAQ,IAAI,EAAE;AAAA,IACvC;AAEA,UAAM,aAAuB,CAAC;AAC9B,eAAW,QAAQ,QAAQ,MAAM,WAAW;AAC1C,iBAAW,KAAK,GAAG,KAAK,IAAI,GAAG,KAAK,UAAU,IAAI,KAAK,OAAO,KAAK,EAAE,EAAE;AAAA,IACzE;AACA,eAAW,MAAM,QAAQ,MAAM,YAAY;AACzC,iBAAW,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG,UAAU,IAAI,GAAG,OAAO,KAAK,EAAE,EAAE;AAAA,IACnE;AAEA,QAAI,WAAW,SAAS,GAAG;AACzB,cAAQ,IAAI,YAAYA,QAAM,IAAI,WAAW,KAAK,IAAI,CAAC,CAAC,EAAE;AAAA,IAC5D;AACA,YAAQ,IAAI;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,uBACN,iBACA,SACA,cACM;AAEN,SAAK,mBAAmB,OAAO;AAE/B,QAAI,gBAAgB,WAAW,GAAG;AAChC,cAAQ,IAAIA,QAAM,OAAO,2BAA2B,CAAC;AACrD,cAAQ,IAAIA,QAAM,IAAI,iDAAiD,CAAC;AACxE;AAAA,IACF;AAEA,YAAQ,IAAIA,QAAM,KAAK,uBAAuB,gBAAgB,MAAM,OAAO,YAAY;AAAA,CAAc,CAAC;AAEtG,eAAW,OAAO,iBAAiB;AACjC,YAAM,aAAa,IAAI,SAAS,KAAKA,QAAM,QAAQ,IAAI,SAAS,KAAKA,QAAM,SAASA,QAAM;AAC1F,YAAM,WAAW,KAAK,YAAY,IAAI,KAAK;AAE3C,cAAQ,IAAI,KAAK,WAAW,GAAG,IAAI,KAAK,GAAG,CAAC,IAAI,QAAQ,IAAIA,QAAM,KAAK,IAAI,MAAM,IAAI,CAAC,EAAE;AAExF,UAAI,IAAI,MAAM,aAAa;AACzB,gBAAQ,IAAI,SAASA,QAAM,IAAIG,UAAS,IAAI,MAAM,aAAa,EAAE,CAAC,CAAC,EAAE;AAAA,MACvE;AAEA,UAAI,IAAI,MAAM,QAAQ;AACpB,gBAAQ,IAAI,SAASH,QAAM,IAAI,SAAS,CAAC,IAAI,IAAI,MAAM,MAAM,EAAE;AAAA,MACjE;AAEA,UAAI,KAAK,WAAW,IAAI,QAAQ,SAAS,GAAG;AAC1C,gBAAQ,IAAIA,QAAM,IAAI,gBAAgB,CAAC;AACvC,mBAAW,UAAU,IAAI,QAAQ,OAAO,OAAK,EAAE,SAAS,CAAC,GAAG;AAC1D,kBAAQ,IAAI,WAAWA,QAAM,IAAI,QAAG,CAAC,IAAI,OAAO,WAAW,MAAM,OAAO,MAAM,GAAG;AAAA,QACnF;AAAA,MACF;AAEA,UAAI,IAAI,SAAS,SAAS,GAAG;AAC3B,mBAAW,WAAW,IAAI,UAAU;AAClC,kBAAQ,IAAI,SAASA,QAAM,OAAO,QAAG,CAAC,IAAI,OAAO,EAAE;AAAA,QACrD;AAAA,MACF;AAEA,cAAQ,IAAI;AAAA,IACd;AAEA,YAAQ,IAAIA,QAAM,IAAI,yCAAyC,CAAC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAAuB;AACzC,UAAM,SAAS,KAAK,MAAM,QAAQ,EAAE;AACpC,UAAM,QAAQ,KAAK;AACnB,WAAOA,QAAM,MAAM,SAAI,OAAO,MAAM,CAAC,IAAIA,QAAM,IAAI,SAAI,OAAO,KAAK,CAAC;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,QAA8B,OAAuB;AACxE,UAAM,UAAU,OAAO,OAAO;AAAA,MAC5B;AAAA,MACA,OAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,EAAE,IAAI;AAAA,MAC/C,UAAU;AAAA,MACV,SAAS;AAAA,QACP,UAAU,KAAK,WAAW,SAAS,KAAK,UAAU,EAAE,IAAI;AAAA,MAC1D;AAAA,IACF,CAAC;AAED,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIA,QAAM,OAAO,6BAA6B,KAAK,GAAG,CAAC;AAC/D,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK,uBAAuB,KAAK,MAAM,QAAQ,MAAM;AAAA,CAAY,CAAC;AAEpF,eAAW,UAAU,SAAS;AAC5B,YAAM,iBACJ,OAAO,aAAa,KAAKA,QAAM,QAAQ,OAAO,aAAa,KAAKA,QAAM,SAASA,QAAM;AAEvF,cAAQ,IAAI,KAAK,eAAe,GAAG,OAAO,SAAS,GAAG,CAAC,IAAIA,QAAM,KAAK,OAAO,MAAM,IAAI,CAAC,EAAE;AAE1F,UAAI,OAAO,SAAS;AAClB,gBAAQ,IAAI,SAASA,QAAM,IAAI,OAAO,OAAO,CAAC,EAAE;AAAA,MAClD;AAEA,UAAI,OAAO,aAAa,SAAS,GAAG;AAClC,gBAAQ,IAAI,SAASA,QAAM,IAAI,UAAU,CAAC,IAAI,OAAO,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,MAChF;AAEA,cAAQ,IAAI;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY;AAClB,UAAM,QAAQ,mBAAmB;AAEjC,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAGA,QAAI,aAAa,KAAK,KAAK,CAAC,KAAK,MAAM;AACrC,YAAM,cAAc,IAAI,KAAK,MAAM,WAAW;AAC9C,YAAM,oBAAoB,KAAK,IAAI,IAAI,YAAY,QAAQ,MAAM,MAAO,KAAK;AAC7E,cAAQ;AAAA,QACNA,QAAM,IAAI,YAAY,KAAK,MAAM,gBAAgB,CAAC;AAAA,CAAwC;AAAA,MAC5F;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAA+B;AAC3C,YAAQ,IAAIA,QAAM,KAAK,oDAAoD,CAAC;AAC5E,YAAQ,IAAIA,QAAM,IAAI,YAAY,kBAAkB,IAAI,OAAK,GAAG,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,CAAI,CAAC;AAEpG,UAAM,UAAUC,KAAI,oBAAoB,EAAE,MAAM;AAEhD,QAAI;AACF,YAAM,EAAE,OAAO,OAAO,IAAI,MAAM,gBAAgB,mBAAmB,CAAC,YAAY;AAC9E,gBAAQ,OAAO;AAAA,MACjB,CAAC;AAED,cAAQ,KAAK;AAGb,UAAI,OAAO,SAAS,GAAG;AACrB,gBAAQ,IAAID,QAAM,OAAO,aAAa,CAAC;AACvC,mBAAW,SAAS,QAAQ;AAC1B,kBAAQ,IAAIA,QAAM,IAAI,YAAO,KAAK,EAAE,CAAC;AAAA,QACvC;AACA,gBAAQ,IAAI;AAAA,MACd;AAGA,gBAAU,KAAK;AAEf,cAAQ,IAAIA,QAAM,MAAM,6BAAwB,MAAM,OAAO,MAAM,SAAS,CAAC;AAC7E,UAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,gBAAQ,IAAIA,QAAM,IAAI,cAAc,MAAM,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,MACpF;AACA,cAAQ,IAAIA,QAAM,IAAI,eAAe,UAAU;AAAA,CAAI,CAAC;AAEpD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,wBAAwB;AACrC,cAAQ,MAAMA,QAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAKA,SAASG,UAAS,KAAa,QAAwB;AACrD,MAAI,IAAI,UAAU,OAAQ,QAAO;AACjC,SAAO,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI;AACpC;;;AClYA,SAAS,WAAAC,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,gBAAe;AACxB,OAAOC,aAAW;AAClB,SAAS,sBAAsB;AAKxB,IAAM,gBAAN,cAA4BH,UAAQ;AAAA,EACzC,OAAgB,QAAQ,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;AAAA,EAE3C,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,UAAU;AAAA,MACR,CAAC,uBAAuB,WAAW;AAAA,MACnC,CAAC,qBAAqB,qBAAqB;AAAA,MAC3C,CAAC,oBAAoB,kBAAkB;AAAA,IACzC;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,UAAUC,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,QAAQA,SAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,cAAcA,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,SAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAC5D,UAAM,UAAU,IAAI,eAAe,UAAU;AAC7C,UAAM,QAAQ,QAAQ,IAAI;AAE1B,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,EAAE,SAAS,mBAAmB,GAAG,MAAM,CAAC,CAAC;AAC7E,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,OAAO;AACV,cAAQ,IAAIC,QAAM,IAAI,0BAA0B,CAAC;AACjD,cAAQ,IAAIA,QAAM,IAAI,6DAA6D,CAAC;AACpF,aAAO;AAAA,IACT;AAGA,QAAI,MAAM,kBAAkB;AAC1B,YAAM,OAAO,MAAM;AACnB,YAAM,cAAc,KAAK,WAAW,WAAWA,QAAM,SAASA,QAAM;AAEpE,cAAQ,IAAIA,QAAM,KAAK,sBAAsB,CAAC;AAC9C,cAAQ,IAAI,YAAYA,QAAM,KAAK,KAAK,SAAS,CAAC,EAAE;AACpD,cAAQ,IAAI,aAAaA,QAAM,IAAI,KAAK,WAAW,CAAC,EAAE;AACtD,cAAQ,IAAI,aAAa,YAAY,KAAK,MAAM,CAAC,EAAE;AACnD,cAAQ,IAAI,eAAe,KAAK,WAAW,IAAI,KAAK,UAAU,QAAQ;AACtE,cAAQ,IAAI,cAAcA,QAAM,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE;AAEhF,UAAI,KAAK,UAAU;AACjB,gBAAQ,IAAI,aAAaA,QAAM,IAAI,IAAI,KAAK,KAAK,QAAQ,EAAE,eAAe,CAAC,CAAC,EAAE;AAAA,MAChF;AAEA,cAAQ,IAAIA,QAAM,KAAK,YAAY,CAAC;AACpC,iBAAW,QAAQ,KAAK,OAAO;AAC7B,cAAM,aAAa,KAAK,cAAc,KAAK,MAAM;AACjD,cAAM,aAAa,KAAK,eAAe,KAAK,MAAM,EAAE,KAAK,MAAM;AAC/D,gBAAQ,IAAI,OAAO,UAAU,IAAI,KAAK,IAAI,MAAM,UAAU,EAAE;AAC5D,YAAI,KAAK,OAAO;AACd,kBAAQ,IAAI,SAASA,QAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE;AAAA,QAC1D;AAAA,MACF;AAEA,UAAI,KAAK,WAAW,UAAU;AAC5B,gBAAQ,IAAIA,QAAM,OAAO,kCAAkC,CAAC;AAAA,MAC9D;AAAA,IACF,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,sBAAsB,CAAC;AAAA,IAC/C;AAGA,QAAI,KAAK,WAAY,CAAC,MAAM,oBAAoB,MAAM,QAAQ,SAAS,GAAI;AACzE,YAAM,QAAQ,KAAK,QAAQ,SAAS,KAAK,OAAO,EAAE,IAAI;AACtD,YAAM,UAAU,QAAQ,WAAW,KAAK;AAExC,UAAI,QAAQ,SAAS,GAAG;AACtB,gBAAQ,IAAIA,QAAM,KAAK,wBAAwB,CAAC;AAEhD,mBAAW,SAAS,SAAS;AAC3B,gBAAM,cAAc,MAAM,WAAW,cAAcA,QAAM,QAAQA,QAAM;AACvE,gBAAM,WAAW,KAAK,eAAe,MAAM,UAAU;AAErD,kBAAQ,IAAI,KAAK,YAAY,QAAG,CAAC,IAAIA,QAAM,KAAK,MAAM,SAAS,CAAC,EAAE;AAClE,kBAAQ,IAAI,OAAOA,QAAM,IAAI,MAAM,WAAW,CAAC,WAAM,QAAQ,EAAE;AAC/D,kBAAQ,IAAI,OAAOA,QAAM,IAAI,IAAI,KAAK,MAAM,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE;AAE5E,cAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,oBAAQ,IAAI,gBAAgBA,QAAM,IAAI,MAAM,QAAQ,KAAK,IAAI,CAAC,CAAC,EAAE;AAAA,UACnE;AAEA,cAAI,MAAM,OAAO;AACf,oBAAQ,IAAI,OAAOA,QAAM,IAAI,QAAQ,CAAC,IAAI,MAAM,KAAK,EAAE;AAAA,UACzD;AAEA,kBAAQ,IAAI;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAGA,QAAI,MAAM,UAAU,SAAS,GAAG;AAC9B,cAAQ,IAAIA,QAAM,KAAK,oBAAoB,CAAC;AAC5C,iBAAW,YAAY,MAAM,UAAU,MAAM,GAAG,CAAC,GAAG;AAClD,gBAAQ,IAAI,KAAKA,QAAM,IAAI,SAAS,GAAG,CAAC,KAAK,SAAS,KAAK,EAAE;AAAA,MAC/D;AACA,UAAI,MAAM,UAAU,SAAS,GAAG;AAC9B,gBAAQ,IAAIA,QAAM,IAAI,aAAa,MAAM,UAAU,SAAS,CAAC,OAAO,CAAC;AAAA,MACvE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,QAAwB;AAC5C,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,eAAOA,QAAM,MAAM,QAAG;AAAA,MACxB,KAAK;AACH,eAAOA,QAAM,IAAI,QAAG;AAAA,MACtB,KAAK;AACH,eAAOA,QAAM,KAAK,QAAG;AAAA,MACvB,KAAK;AACH,eAAOA,QAAM,OAAO,QAAG;AAAA,MACzB;AACE,eAAOA,QAAM,IAAI,QAAG;AAAA,IACxB;AAAA,EACF;AAAA,EAEQ,eAAe,QAA0C;AAC/D,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,eAAOA,QAAM;AAAA,MACf,KAAK;AACH,eAAOA,QAAM;AAAA,MACf,KAAK;AACH,eAAOA,QAAM;AAAA,MACf,KAAK;AACH,eAAOA,QAAM;AAAA,MACf;AACE,eAAOA,QAAM;AAAA,IACjB;AAAA,EACF;AAAA,EAEQ,eAAe,IAAoB;AACzC,QAAI,KAAK,IAAM,QAAO,GAAG,EAAE;AAC3B,QAAI,KAAK,IAAO,QAAO,IAAI,KAAK,KAAM,QAAQ,CAAC,CAAC;AAChD,UAAM,UAAU,KAAK,MAAM,KAAK,GAAK;AACrC,UAAM,UAAU,KAAK,MAAO,KAAK,MAAS,GAAI;AAC9C,WAAO,GAAG,OAAO,KAAK,OAAO;AAAA,EAC/B;AACF;;;AC7KA,SAAS,WAAAC,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,gBAAe;AACxB,OAAOC,aAAW;AAClB,SAAS,kBAAAC,uBAAsB;AAKxB,IAAM,eAAN,cAA2BJ,UAAQ;AAAA,EACxC,OAAgB,QAAQ,CAAC,CAAC,OAAO,CAAC;AAAA,EAElC,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAST,UAAU;AAAA,MACR,CAAC,2BAA2B,UAAU;AAAA,IACxC;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,cAAcC,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,SAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAC5D,UAAM,UAAU,IAAIE,gBAAe,UAAU;AAC7C,UAAM,QAAQ,QAAQ,IAAI;AAE1B,QAAI,CAAC,OAAO;AACV,cAAQ,IAAID,QAAM,OAAO,0BAA0B,CAAC;AACpD,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,MAAM,kBAAkB;AAC3B,cAAQ,IAAIA,QAAM,OAAO,iCAAiC,CAAC;AAC3D,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,iBAAiB,WAAW,UAAU;AAC9C,cAAQ,IAAIA,QAAM,OAAO,8BAA8B,CAAC;AACxD,cAAQ,IAAIA,QAAM,IAAI,8BAA8B,CAAC;AACrD,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,QAAQ,MAAM;AAE9B,QAAI,SAAS;AACX,YAAM,OAAO,MAAM;AACnB,cAAQ,IAAIA,QAAM,MAAM,yBAAoB,CAAC;AAC7C,cAAQ,IAAI;AACZ,cAAQ,IAAI,YAAYA,QAAM,KAAK,KAAK,SAAS,CAAC,EAAE;AACpD,cAAQ,IAAI,eAAe,KAAK,WAAW,IAAI,KAAK,UAAU,kBAAkB;AAChF,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,IAAI,8BAA8B,CAAC;AACrD,cAAQ,IAAIA,QAAM,IAAI,8BAA8B,CAAC;AACrD,aAAO;AAAA,IACT,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,4BAA4B,CAAC;AACnD,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;ACtEA,SAAS,WAAAE,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,gBAAe;AACxB,OAAOC,aAAW;AAClB,SAAS,kBAAAC,uBAAsB;AAKxB,IAAM,gBAAN,cAA4BJ,UAAQ;AAAA,EACzC,OAAgB,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAAA,EAEnC,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAST,UAAU;AAAA,MACR,CAAC,2BAA2B,WAAW;AAAA,IACzC;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,cAAcC,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,SAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAC5D,UAAM,UAAU,IAAIE,gBAAe,UAAU;AAC7C,UAAM,QAAQ,QAAQ,IAAI;AAE1B,QAAI,CAAC,OAAO;AACV,cAAQ,IAAID,QAAM,OAAO,0BAA0B,CAAC;AACpD,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,MAAM,kBAAkB;AAC3B,cAAQ,IAAIA,QAAM,OAAO,+BAA+B,CAAC;AACzD,cAAQ,IAAIA,QAAM,IAAI,kDAAkD,CAAC;AACzE,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,iBAAiB,WAAW,UAAU;AAC9C,UAAI,MAAM,iBAAiB,WAAW,WAAW;AAC/C,gBAAQ,IAAIA,QAAM,OAAO,+BAA+B,CAAC;AAAA,MAC3D,OAAO;AACL,gBAAQ,IAAIA,QAAM,OAAO,gBAAgB,MAAM,iBAAiB,MAAM,GAAG,CAAC;AAAA,MAC5E;AACA,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,QAAQ,OAAO;AAE/B,QAAI,SAAS;AACX,YAAM,OAAO,MAAM;AACnB,cAAQ,IAAIA,QAAM,MAAM,0BAAqB,CAAC;AAC9C,cAAQ,IAAI;AACZ,cAAQ,IAAI,YAAYA,QAAM,KAAK,KAAK,SAAS,CAAC,EAAE;AACpD,cAAQ,IAAI,eAAe,KAAK,WAAW,IAAI,KAAK,UAAU,QAAQ;AACtE,cAAQ,IAAI;AAGZ,YAAM,WAAW,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,aAAa,EAAE,WAAW,aAAa;AAC5F,UAAI,UAAU;AACZ,gBAAQ,IAAI,gBAAgBA,QAAM,KAAK,SAAS,IAAI,CAAC,EAAE;AAAA,MACzD;AAEA,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,IAAI,qDAAqD,CAAC;AAC5E,cAAQ,IAAIA,QAAM,IAAI,8BAA8B,CAAC;AACrD,aAAO;AAAA,IACT,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,6BAA6B,CAAC;AACpD,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AClFA,SAAS,WAAAE,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,gBAAe;AACxB,OAAOC,aAAW;AAClB,OAAOC,UAAS;AAChB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAKA,IAAM,qBAAN,cAAiCJ,UAAQ;AAAA,EAC9C,OAAgB,QAAQ,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC;AAAA,EAE3D,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMT,UAAU;AAAA,MACR,CAAC,0BAA0B,+BAA+B;AAAA,MAC1D,CAAC,4BAA4B,yCAAyC;AAAA,MACtE,CAAC,0BAA0B,yCAAyC;AAAA,IACtE;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,eAAeC,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA;AAAA,EAGhD,OAAOA,SAAO,OAAO,aAAa;AAAA,IAChC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC7C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,UAAUA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,kBAAkBA,SAAO,QAAQ,uBAAuB,OAAO;AAAA,IAC7D,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,cAAcA,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,SAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAG5D,QAAI;AACJ,QAAI;AACF,UAAI,KAAK,MAAM;AACb,mBAAW,aAAaA,SAAQ,KAAK,IAAI,CAAC;AAAA,MAC5C,WAAW,KAAK,cAAc;AAC5B,mBAAW,mBAAmB,YAAY,KAAK,YAAY;AAC3D,YAAI,CAAC,UAAU;AACb,kBAAQ,MAAMC,QAAM,IAAI,aAAa,KAAK,YAAY,aAAa,CAAC;AACpE,kBAAQ,IAAIA,QAAM,IAAI,kDAAkD,CAAC;AACzE,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,gBAAQ,MAAMA,QAAM,IAAI,0CAA0C,CAAC;AACnE,eAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAMA,QAAM,IAAI,4BAA4B,KAAK,EAAE,CAAC;AAC5D,aAAO;AAAA,IACT;AAGA,UAAM,aAAa,iBAAiB,QAAQ;AAC5C,QAAI,CAAC,WAAW,OAAO;AACrB,cAAQ,MAAMA,QAAM,IAAI,mBAAmB,CAAC;AAC5C,iBAAW,SAAS,WAAW,QAAQ;AACrC,gBAAQ,MAAMA,QAAM,IAAI,YAAO,KAAK,EAAE,CAAC;AAAA,MACzC;AACA,aAAO;AAAA,IACT;AAGA,QAAI,KAAK,QAAQ;AACf,WAAK,WAAW,QAAQ;AACxB,aAAO;AAAA,IACT;AAGA,YAAQ,IAAIA,QAAM,KAAK,uBAAuBA,QAAM,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC;AAC1E,QAAI,SAAS,aAAa;AACxB,cAAQ,IAAIA,QAAM,IAAI,SAAS,WAAW,CAAC;AAAA,IAC7C;AACA,YAAQ,IAAI;AAEZ,UAAM,UAAUC,KAAI;AACpB,QAAI,cAAc;AAGlB,UAAM,eAAe;AAAA,MACnB,OAAO,YAAY,YAAY;AAG7B,cAAM,IAAI,QAAQ,CAACF,cAAY,WAAWA,WAAS,GAAG,CAAC;AACvD,eAAO,EAAE,SAAS,KAAK;AAAA,MACzB;AAAA,MACA,CAAC,UAAU;AACT,YAAI,KAAK,KAAM;AAEf,gBAAQ,MAAM,MAAM;AAAA,UAClB,KAAK;AACH,0BAAc,MAAM,aAAa;AACjC,oBAAQ,MAAM,QAAQ,cAAc,CAAC,KAAK,MAAM,YAAY,cAAc,EAAE;AAC5E;AAAA,UAEF,KAAK;AACH,gBAAI,KAAK,SAAS;AAChB,sBAAQ,OAAO,QAAQ,cAAc,CAAC,aAAa,MAAM,SAAS;AAAA,YACpE;AACA;AAAA,UAEF,KAAK;AACH,gBAAI,KAAK,SAAS;AAChB,oBAAM,OAAO,MAAM,WAAW,cAAcC,QAAM,MAAM,QAAG,IAAIA,QAAM,IAAI,QAAG;AAC5E,sBAAQ,IAAI,KAAK,IAAI,IAAI,MAAM,SAAS,EAAE;AAAA,YAC5C;AACA;AAAA,UAEF,KAAK;AACH,kBAAM,WAAW,MAAM,WAAW,cAAcA,QAAM,MAAM,QAAG,IAAIA,QAAM,IAAI,QAAG;AAChF,oBAAQ,eAAe;AAAA,cACrB,QAAQ;AAAA,cACR,MAAM,SAAS,MAAM,aAAa,KAAK,CAAC,KAAK,MAAM,YAAY,UAAU;AAAA,YAC3E,CAAC;AACD;AAAA,UAEF,KAAK;AACH,oBAAQ,IAAI;AACZ,gBAAI,MAAM,WAAW,aAAa;AAChC,sBAAQ,IAAIA,QAAM,MAAM,wCAAmC,CAAC;AAAA,YAC9D,OAAO;AACL,sBAAQ,IAAIA,QAAM,IAAI,mBAAc,MAAM,MAAM,EAAE,CAAC;AACnD,kBAAI,MAAM,OAAO;AACf,wBAAQ,IAAIA,QAAM,IAAI,YAAY,MAAM,KAAK,EAAE,CAAC;AAAA,cAClD;AAAA,YACF;AACA;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,MAAM,aAAa,QAAQ,QAAQ;AAErD,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,WAAW,MAAM,CAAC,CAAC;AAAA,IAChD;AAEA,WAAO,UAAU,WAAW,cAAc,IAAI;AAAA,EAChD;AAAA,EAEQ,WAAW,UAAuJ;AACxK,YAAQ,IAAIA,QAAM,KAAK,mCAAmC,CAAC;AAC3D,YAAQ,IAAI;AACZ,YAAQ,IAAI,aAAaA,QAAM,KAAK,SAAS,IAAI,CAAC,EAAE;AACpD,QAAI,SAAS,aAAa;AACxB,cAAQ,IAAI,gBAAgBA,QAAM,IAAI,SAAS,WAAW,CAAC,EAAE;AAAA,IAC/D;AACA,YAAQ,IAAI;AAEZ,aAAS,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,KAAK;AAC9C,YAAM,OAAO,SAAS,MAAM,CAAC;AAC7B,YAAM,YAAY,KAAK,WAAWA,QAAM,KAAK,YAAY,IAAIA,QAAM,OAAO,cAAc;AAExF,cAAQ,IAAI,GAAGA,QAAM,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,QAAQ,SAAS,IAAI,SAAS,EAAE;AAEpF,iBAAW,SAAS,KAAK,QAAQ;AAC/B,cAAM,YAAY,OAAO,UAAU,WAAW,QAAQ,MAAM;AAC5D,gBAAQ,IAAI,YAAO,SAAS,EAAE;AAAA,MAChC;AAEA,cAAQ,IAAI;AAAA,IACd;AAEA,YAAQ,IAAIA,QAAM,IAAI,6CAA6C,CAAC;AACpE,YAAQ,IAAIA,QAAM,IAAI,2CAA2C,CAAC;AAAA,EACpE;AACF;;;AC3MA,SAAS,WAAAE,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,gBAAe;AACxB,OAAOC,aAAW;AAClB,SAAS,qBAAqB;AAKvB,IAAM,sBAAN,cAAkCH,UAAQ;AAAA,EAC/C,OAAgB,QAAQ,CAAC,CAAC,YAAY,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;AAAA,EAE/F,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,UAAU;AAAA,MACR,CAAC,sBAAsB,kBAAkB;AAAA,MACzC,CAAC,qBAAqB,4BAA4B;AAAA,IACpD;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,UAAUC,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,cAAcA,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,SAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAE5D,QAAI;AACJ,QAAI;AACF,kBAAY,cAAc,UAAU;AAAA,IACtC,SAAS,KAAK;AACZ,cAAQ,IAAIC,QAAM,IAAI,2BAA2B,CAAC;AAClD,cAAQ,IAAIA,QAAM,IAAI,OAAO,GAAG,CAAC,CAAC;AAClC,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,WAAW,MAAM,CAAC,CAAC;AAC9C,aAAO;AAAA,IACT;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,IAAIA,QAAM,OAAO,qBAAqB,CAAC;AAC/C,cAAQ,IAAIA,QAAM,IAAI,kDAAkD,CAAC;AACzE,cAAQ,IAAIA,QAAM,IAAI,2CAA2C,CAAC;AAClE,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK,wBAAwB,UAAU,MAAM;AAAA,CAAM,CAAC;AAEtE,eAAW,YAAY,WAAW;AAChC,cAAQ,IAAI,KAAKA,QAAM,KAAK,SAAS,IAAI,CAAC,EAAE;AAE5C,UAAI,SAAS,aAAa;AACxB,gBAAQ,IAAI,OAAOA,QAAM,IAAI,SAAS,WAAW,CAAC,EAAE;AAAA,MACtD;AAEA,UAAI,KAAK,SAAS;AAChB,gBAAQ,IAAI,gBAAgBA,QAAM,IAAI,SAAS,WAAW,KAAK,CAAC,EAAE;AAClE,gBAAQ,IAAI,cAAcA,QAAM,IAAI,SAAS,MAAM,OAAO,SAAS,CAAC,CAAC,EAAE;AAEvE,cAAM,cAAc,SAAS,MAAM;AAAA,UACjC,CAAC,KAAK,SAAS,MAAM,KAAK,OAAO;AAAA,UACjC;AAAA,QACF;AACA,gBAAQ,IAAI,qBAAqBA,QAAM,IAAI,YAAY,SAAS,CAAC,CAAC,EAAE;AAEpE,YAAI,SAAS,QAAQ,SAAS,KAAK,SAAS,GAAG;AAC7C,kBAAQ,IAAI,aAAaA,QAAM,IAAI,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE;AAAA,QAChE;AAAA,MACF;AAEA,cAAQ,IAAI;AAAA,IACd;AAEA,YAAQ,IAAIA,QAAM,IAAI,mDAAmD,CAAC;AAE1E,WAAO;AAAA,EACT;AACF;;;AC7FA,SAAS,WAAAC,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,gBAAe;AACxB,OAAOC,aAAW;AAClB,SAAS,wBAAwB,cAAc,yBAAyB;AAKjE,IAAM,wBAAN,cAAoCH,UAAQ;AAAA,EACjD,OAAgB,QAAQ,CAAC,CAAC,YAAY,QAAQ,GAAG,CAAC,MAAM,QAAQ,GAAG,CAAC,YAAY,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC;AAAA,EAErG,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,UAAU;AAAA,MACR,CAAC,yBAAyB,gCAAgC;AAAA,MAC1D,CAAC,2BAA2B,yEAAyE;AAAA,MACrG,CAAC,mBAAmB,yCAAyC;AAAA,IAC/D;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,eAAeC,SAAO,OAAO,EAAE,UAAU,KAAK,CAAC;AAAA;AAAA,EAG/C,cAAcA,SAAO,OAAO,oBAAoB;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,YAAY,OAAO;AAAA,IACzC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,cAAcA,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,SAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAE5D,UAAM,WAAW,uBAAuB,KAAK,cAAc,KAAK,WAAW;AAE3E,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAI,kBAAkB,QAAQ,CAAC;AACvC,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,aAAa,YAAY,QAAQ;AAElD,YAAQ,IAAIC,QAAM,MAAM,4BAAuBA,QAAM,KAAK,KAAK,YAAY,CAAC,EAAE,CAAC;AAC/E,YAAQ,IAAIA,QAAM,IAAI,WAAW,QAAQ,EAAE,CAAC;AAC5C,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,IAAI,2DAA2D,CAAC;AAClF,YAAQ,IAAIA,QAAM,IAAI,qCAAqC,KAAK,YAAY,CAAC;AAE7E,WAAO;AAAA,EACT;AACF;;;AC9DA,SAAS,WAAAC,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAC9B,SAAS,cAAAC,aAAY,gBAAAC,eAAc,gBAAgB;AACnD,OAAOC,aAAW;AAClB,OAAOC,UAAS;AAChB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAKA,IAAM,aAAN,cAAyBP,UAAQ;AAAA,EACtC,OAAgB,QAAQ,CAAC,CAAC,KAAK,CAAC;AAAA,EAEhC,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAST,UAAU;AAAA,MACR,CAAC,0BAA0B,+BAA+B;AAAA,MAC1D,CAAC,0BAA0B,4BAA4B;AAAA,MACvD,CAAC,oCAAoC,yCAAyC;AAAA,MAC9E,CAAC,yBAAyB,+BAA+B;AAAA,IAC3D;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,WAAWC,SAAO,OAAO,EAAE,UAAU,KAAK,CAAC;AAAA;AAAA,EAG3C,QAAQA,SAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC7C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,YAAY,OAAO;AAAA,IACzC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,aAAaA,SAAO,QAAQ,iBAAiB,OAAO;AAAA,IAClD,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,kBAAkBA,SAAO,QAAQ,uBAAuB,OAAO;AAAA,IAC7D,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,UAAUA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,cAAcA,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,SAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAG5D,UAAM,QAAQ,MAAM,KAAK,UAAU,UAAU;AAC7C,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAGA,QAAI,CAAC,KAAK,MAAM;AACd,cAAQ,IAAII,QAAM,KAAK,oBAAoBA,QAAM,KAAK,MAAM,IAAI,CAAC,EAAE,CAAC;AACpE,UAAI,MAAM,aAAa;AACrB,gBAAQ,IAAIA,QAAM,IAAI,MAAM,WAAW,CAAC;AAAA,MAC1C;AACA,cAAQ,IAAI;AAAA,IACd;AAGA,QAAI,KAAK,QAAQ;AACf,WAAK,WAAW,KAAK;AACrB,aAAO;AAAA,IACT;AAEA,UAAM,UAAUC,KAAI;AACpB,QAAI,cAAc;AAGlB,UAAM,SAAS,sBAAsB,YAAY;AAAA,MAC/C,YAAY,CAAC,UAAU;AACrB,YAAI,KAAK,KAAM;AAEf,gBAAQ,MAAM,MAAM;AAAA,UAClB,KAAK;AACH,0BAAc,MAAM,YAAY;AAChC,oBAAQ,MAAM,SAAS,MAAM,aAAa,KAAK,CAAC,IAAI,MAAM,UAAU,KAAK,WAAW,EAAE;AACtF;AAAA,UAEF,KAAK;AACH,kBAAM,OAAO,MAAM,WAAW,cAAcD,QAAM,MAAM,QAAG,IAAIA,QAAM,IAAI,QAAG;AAC5E,oBAAQ,eAAe;AAAA,cACrB,QAAQ;AAAA,cACR,MAAM,SAAS,MAAM,aAAa,KAAK,CAAC,IAAI,MAAM,UAAU,KAAK,WAAW;AAAA,YAC9E,CAAC;AACD,gBAAI,MAAM,SAAS,KAAK,SAAS;AAC/B,sBAAQ,IAAIA,QAAM,IAAI,cAAc,MAAM,KAAK,EAAE,CAAC;AAAA,YACpD;AACA;AAAA,UAEF,KAAK;AACH,oBAAQ,KAAK,eAAe,MAAM,OAAO,EAAE;AAC3C;AAAA,UAEF,KAAK;AACH,gBAAI,KAAK,SAAS;AAChB,sBAAQ,IAAIA,QAAM,IAAI,OAAO,MAAM,OAAO,EAAE,CAAC;AAAA,YAC/C;AACA;AAAA,UAEF,KAAK;AACH,oBAAQ,IAAI;AACZ,gBAAI,MAAM,WAAW,aAAa;AAChC,sBAAQ,IAAIA,QAAM,MAAM,kCAA6B,CAAC;AAAA,YACxD,OAAO;AACL,sBAAQ,IAAIA,QAAM,IAAI,0BAAqB,MAAM,MAAM,EAAE,CAAC;AAC1D,kBAAI,MAAM,OAAO;AACf,wBAAQ,IAAIA,QAAM,IAAI,YAAY,MAAM,KAAK,EAAE,CAAC;AAAA,cAClD;AAAA,YACF;AACA;AAAA,QACJ;AAAA,MACF;AAAA,MACA,mBAAmB,OAAO,MAAM,aAAa;AAE3C,YAAI,KAAK,SAAS,yBAAyB,KAAK,SAAS;AAEvD,iBAAO;AAAA,YACL,UAAU;AAAA,YACV,gBAAgB,KAAK,QAAQ,CAAC;AAAA,UAChC;AAAA,QACF;AACA,eAAO,EAAE,UAAU,KAAK;AAAA,MAC1B;AAAA,IACF,CAAC;AAGD,UAAM,SAAS,MAAM,OAAO,QAAQ,OAAO;AAAA,MACzC,OAAO,KAAK;AAAA,MACZ,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,IAC7C,OAAO;AAEL,cAAQ,IAAI;AACZ,cAAQ,IAAIA,QAAM,KAAK,UAAU,CAAC;AAClC,cAAQ,IAAI,eAAeA,QAAM,IAAI,KAAK,eAAe,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE;AACnF,cAAQ,IAAI,YAAYA,QAAM,IAAI,GAAG,OAAO,MAAM,OAAO,OAAK,EAAE,WAAW,WAAW,EAAE,MAAM,IAAI,OAAO,MAAM,MAAM,YAAY,CAAC,EAAE;AAEpI,UAAI,OAAO,cAAc,SAAS,GAAG;AACnC,gBAAQ,IAAI,qBAAqBA,QAAM,IAAI,OAAO,cAAc,OAAO,SAAS,CAAC,CAAC,EAAE;AAAA,MACtF;AAEA,UAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,gBAAQ,IAAI,cAAcA,QAAM,IAAI,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,EAAE;AAAA,MAClE;AAAA,IACF;AAEA,WAAO,OAAO,WAAW,cAAc,IAAI;AAAA,EAC7C;AAAA,EAEA,MAAc,UAAU,aAAsD;AAE5E,QAAI,KAAK,SAAS,SAAS,KAAK,KAAMF,YAAW,KAAK,QAAQ,KAAK,SAAS,KAAK,QAAQ,EAAE,OAAO,GAAI;AACpG,aAAO,KAAK,kBAAkBF,SAAQ,KAAK,QAAQ,CAAC;AAAA,IACtD;AAGA,UAAM,QAAQ,KAAK,mBAAmB,aAAa,KAAK,QAAQ;AAChE,QAAI,OAAO;AACT,aAAO;AAAA,IACT;AAEA,YAAQ,MAAMI,QAAM,IAAI,UAAU,KAAK,QAAQ,aAAa,CAAC;AAC7D,YAAQ,IAAIA,QAAM,IAAI,gDAAgD,CAAC;AACvE,WAAO;AAAA,EACT;AAAA,EAEQ,kBAAkB,UAA0C;AAClE,QAAI,CAACF,YAAW,QAAQ,GAAG;AACzB,cAAQ,MAAME,QAAM,IAAI,mBAAmB,QAAQ,EAAE,CAAC;AACtD,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,UAAUD,cAAa,UAAU,OAAO;AAC9C,YAAM,cAAc,mBAAmB,OAAO;AAG9C,YAAM,QAAQ,KAAK,0BAA0B,WAAW;AAExD,aAAO;AAAA,QACL,MAAO,aAAa,QAAmB,KAAK;AAAA,QAC5C,aAAa,aAAa;AAAA,QAC1B,SAAS,aAAa;AAAA,QACtB,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAMC,QAAM,IAAI,yBAAyB,KAAK,EAAE,CAAC;AACzD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,mBAAmB,aAAqB,WAA2C;AAEzF,UAAM,YAAY;AAAA,MAChBH,MAAK,aAAa,WAAW,QAAQ;AAAA,MACrCA,MAAK,aAAa,WAAW,QAAQ;AAAA,MACrCA,MAAK,aAAa,QAAQ;AAAA,MAC1BA,MAAK,aAAa,aAAa,QAAQ;AAAA,IACzC;AAEA,eAAW,OAAO,WAAW;AAC3B,UAAI,CAACC,YAAW,GAAG,EAAG;AAEtB,YAAM,SAAS,eAAe,GAAG;AACjC,YAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS;AAErD,UAAI,OAAO;AACT,cAAM,cAAcD,MAAK,MAAM,MAAM,UAAU;AAC/C,YAAIC,YAAW,WAAW,GAAG;AAC3B,iBAAO,KAAK,kBAAkB,WAAW;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,0BAA0B,aAA2E;AAC3G,QAAI,CAAC,aAAa,SAAS,CAAC,MAAM,QAAQ,YAAY,KAAK,GAAG;AAC5D,aAAO;AAAA,IACT;AAEA,WAAO,YAAY,MAAM,IAAI,CAAC,MAA+B,WAAmB;AAAA,MAC9E,IAAK,KAAK,MAAiB,QAAQ,KAAK;AAAA,MACxC,MAAO,KAAK,QAAmB,QAAQ,QAAQ,CAAC;AAAA,MAChD,MAAO,KAAK,QAAmC;AAAA,MAC/C,QAAS,KAAK,UAAqB;AAAA,MACnC,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,MACd,QAAQ,KAAK;AAAA,IACf,EAAE;AAAA,EACJ;AAAA,EAEQ,WAAW,OAA8B;AAC/C,YAAQ,IAAIE,QAAM,KAAK,0BAA0B,CAAC;AAClD,YAAQ,IAAI;AACZ,YAAQ,IAAI,UAAUA,QAAM,KAAK,MAAM,IAAI,CAAC,EAAE;AAC9C,QAAI,MAAM,aAAa;AACrB,cAAQ,IAAI,gBAAgBA,QAAM,IAAI,MAAM,WAAW,CAAC,EAAE;AAAA,IAC5D;AACA,YAAQ,IAAI,WAAWA,QAAM,IAAI,MAAM,MAAM,CAAC,EAAE;AAChD,YAAQ,IAAI;AAEZ,QAAI,MAAM,SAAS,MAAM,MAAM,SAAS,GAAG;AACzC,cAAQ,IAAIA,QAAM,KAAK,QAAQ,CAAC;AAChC,eAAS,IAAI,GAAG,IAAI,MAAM,MAAM,QAAQ,KAAK;AAC3C,cAAM,OAAO,MAAM,MAAM,CAAC;AAC1B,cAAM,YAAY,KAAK,iBAAiB,KAAK,IAAI;AACjD,gBAAQ,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,EAAE;AACnD,YAAI,KAAK,QAAQ;AACf,kBAAQ,IAAI,QAAQA,QAAM,IAAI,KAAK,MAAM,CAAC,EAAE;AAAA,QAC9C;AACA,YAAI,KAAK,SAAS,KAAK,MAAM,SAAS,GAAG;AACvC,kBAAQ,IAAI,eAAeA,QAAM,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,EAAE;AAAA,QAC/D;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,IAAIA,QAAM,IAAI,uEAAuE,CAAC;AAAA,IAChG;AAEA,YAAQ,IAAI;AACZ,YAAQ,IAAIA,QAAM,IAAI,iDAAiD,CAAC;AAAA,EAC1E;AAAA,EAEQ,iBAAiB,MAAsB;AAC7C,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAOA,QAAM,MAAM,QAAQ;AAAA,MAC7B,KAAK;AACH,eAAOA,QAAM,OAAO,UAAU;AAAA,MAChC,KAAK;AACH,eAAOA,QAAM,KAAK,YAAY;AAAA,MAChC,KAAK;AACH,eAAOA,QAAM,QAAQ,UAAU;AAAA,MACjC;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,eAAe,IAAoB;AACzC,QAAI,KAAK,IAAM,QAAO,GAAG,EAAE;AAC3B,QAAI,KAAK,IAAO,QAAO,IAAI,KAAK,KAAM,QAAQ,CAAC,CAAC;AAChD,UAAM,UAAU,KAAK,MAAM,KAAK,GAAK;AACrC,UAAM,UAAU,KAAK,MAAO,KAAK,MAAS,GAAI;AAC9C,WAAO,GAAG,OAAO,KAAK,OAAO;AAAA,EAC/B;AACF;;;AC/UA,SAAS,WAAAE,WAAS,UAAAC,gBAAc;AAChC,SAAS,WAAAC,WAAS,QAAAC,aAAY;AAC9B,SAAS,cAAAC,cAAY,gBAAAC,eAAc,eAAAC,oBAAmB;AACtD,OAAOC,aAAW;AAClB;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP,SAAS,SAAS,iBAAiB;AAK5B,IAAM,cAAN,cAA0BP,UAAQ;AAAA,EACvC,OAAgB,QAAQ,CAAC,CAAC,MAAM,CAAC;AAAA,EAEjC,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBT,UAAU;AAAA,MACR,CAAC,uBAAuB,SAAS;AAAA,MACjC,CAAC,kCAAkC,kBAAkB;AAAA,MACrD,CAAC,2BAA2B,mBAAmB;AAAA,MAC/C,CAAC,yBAAyB,gBAAgB;AAAA,MAC1C,CAAC,gCAAgC,iCAAiC;AAAA,IACpE;AAAA,EACF,CAAC;AAAA,EAED,QAAQC,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA,EAEzC,UAAUA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAOA,SAAO,OAAO,aAAa;AAAA,IAChC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,WAAWA,SAAO,OAAO,eAAe;AAAA,IACtC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,cAAcA,SAAO,OAAO,aAAa;AAAA,IACvC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,UAAUA,SAAO,OAAO,aAAa;AAAA,IACnC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,aAAaC,UAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC;AAG5D,UAAM,aAAa,KAAK,eAAe,UAAU;AAEjD,QAAI,WAAW,WAAW,GAAG;AAC3B,UAAI,CAAC,KAAK,MAAM;AACd,gBAAQ,IAAIK,QAAM,OAAO,6BAA6B,CAAC;AACvD,gBAAQ,IAAIA,QAAM,IAAI,kDAAkD,CAAC;AAAA,MAC3E,OAAO;AACL,gBAAQ,IAAI,KAAK,UAAU,EAAE,SAAS,CAAC,GAAG,QAAQ,MAAM,OAAO,EAAE,CAAC,CAAC;AAAA,MACrE;AACA,aAAO;AAAA,IACT;AAGA,UAAM,cAAc,KAAK,QACrB,WAAW,OAAO,CAAC,MAAM,EAAE,KAAK,SAAS,KAAK,KAAM,CAAC,IACrD;AAEJ,QAAI,YAAY,WAAW,GAAG;AAC5B,UAAI,CAAC,KAAK,MAAM;AACd,gBAAQ,IAAIA,QAAM,OAAO,6BAA6B,KAAK,KAAK,GAAG,CAAC;AAAA,MACtE;AACA,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,KAAK,MAAM;AACd,cAAQ,IAAIA,QAAM,KAAK,0BAA0B,CAAC;AAAA,IACpD;AAGA,UAAM,OAAO,KAAK,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACtD,UAAM,WAAW,KAAK,UAAU,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAC9D,UAAM,UAAU,KAAK,UAAU,SAAS,KAAK,SAAS,EAAE,IAAI;AAG5D,UAAM,UAA6B,CAAC;AACpC,QAAI,YAAY;AAEhB,eAAW,QAAQ,aAAa;AAC9B,YAAM,QAAQ,KAAK,gBAAgB,KAAK,MAAM,KAAK,IAAI;AAEvD,UAAI,CAAC,SAAS,MAAM,MAAM,WAAW,GAAG;AACtC;AAAA,MACF;AAEA,UAAI,CAAC,KAAK,MAAM;AACd,gBAAQ,IAAIA,QAAM,KAAK,YAAY,MAAM,SAAS,EAAE,CAAC;AAAA,MACvD;AAEA,YAAM,SAAS,MAAM,aAAa,OAAO;AAAA,QACvC,KAAK;AAAA,QACL,SAAS,KAAK;AAAA,QACd,MAAM,KAAK;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY,CAAC,UAAU;AACrB,cAAI,KAAK,QAAQ,CAAC,KAAK,QAAS;AAEhC,kBAAQ,MAAM,MAAM;AAAA,YAClB,KAAK;AACH,sBAAQ,IAAIA,QAAM,IAAI,cAAc,MAAM,QAAQ,EAAE,CAAC;AACrD;AAAA,YACF,KAAK;AACH,kBAAI,MAAM,QAAQ;AAChB,wBAAQ,IAAIA,QAAM,MAAM,YAAO,MAAM,QAAQ,EAAE,CAAC;AAAA,cAClD,OAAO;AACL,wBAAQ,IAAIA,QAAM,IAAI,YAAO,MAAM,QAAQ,EAAE,CAAC;AAC9C,oBAAI,MAAM,OAAO;AACf,0BAAQ,IAAIA,QAAM,IAAI,OAAO,MAAM,KAAK,EAAE,CAAC;AAAA,gBAC7C;AAAA,cACF;AACA;AAAA,YACF,KAAK;AACH,kBAAI,KAAK,WAAW,CAAC,MAAM,QAAQ;AACjC,wBAAQ,IAAIA,QAAM,IAAI,SAAS,MAAM,aAAa,KAAK,MAAM,KAAK,EAAE,CAAC;AAAA,cACvE;AACA;AAAA,UACJ;AAAA,QACF;AAAA,MACF,CAAC;AAED,cAAQ,KAAK,MAAM;AAEnB,UAAI,CAAC,OAAO,QAAQ;AAClB,oBAAY;AAAA,MACd;AAEA,UAAI,CAAC,KAAK,MAAM;AACd,cAAM,OAAO,OAAO,SAASA,QAAM,MAAM,QAAG,IAAIA,QAAM,IAAI,QAAG;AAC7D,cAAM,SAAS,OAAO,SAAS,WAAW;AAC1C,gBAAQ;AAAA,UACN,GAAG,IAAI,IAAI,MAAM,SAAS,KAAK,OAAO,WAAW,IAAI,OAAO,MAAM,MAAM,UAAU,MAAM,KAAK,OAAO,QAAQ;AAAA;AAAA,QAC9G;AAAA,MACF;AAEA,UAAI,KAAK,QAAQ,CAAC,OAAO,QAAQ;AAC/B;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,MAAM;AACb,cAAQ;AAAA,QACN,KAAK,UAAU;AAAA,UACb,SAAS,QAAQ,IAAI,CAAC,OAAO;AAAA,YAC3B,OAAO,EAAE;AAAA,YACT,QAAQ,EAAE;AAAA,YACV,OAAO,EAAE;AAAA,YACT,QAAQ,EAAE;AAAA,YACV,SAAS,EAAE;AAAA,YACX,UAAU,EAAE;AAAA,UACd,EAAE;AAAA,UACF,QAAQ;AAAA,UACR,OAAO,QAAQ;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,YAAM,aAAa,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrE,YAAM,cAAc,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,aAAa,CAAC;AACrE,YAAM,cAAc,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,aAAa,CAAC;AACrE,YAAM,eAAe,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,cAAc,CAAC;AAEvE,cAAQ,IAAIA,QAAM,KAAK,UAAU,CAAC;AAClC,cAAQ,IAAI,oBAAoB,QAAQ,MAAM,EAAE;AAChD,cAAQ,IAAI,kBAAkB,UAAU,EAAE;AAC1C,cAAQ,IAAIA,QAAM,MAAM,aAAa,WAAW,EAAE,CAAC;AACnD,UAAI,cAAc,GAAG;AACnB,gBAAQ,IAAIA,QAAM,IAAI,aAAa,WAAW,EAAE,CAAC;AAAA,MACnD;AACA,UAAI,eAAe,GAAG;AACpB,gBAAQ,IAAIA,QAAM,OAAO,cAAc,YAAY,EAAE,CAAC;AAAA,MACxD;AAEA,UAAI,WAAW;AACb,gBAAQ,IAAIA,QAAM,MAAM,4BAAuB,CAAC;AAAA,MAClD,OAAO;AACL,gBAAQ,IAAIA,QAAM,IAAI,6BAAwB,CAAC;AAAA,MACjD;AAAA,IACF;AAEA,WAAO,YAAY,IAAI;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,aAAuD;AAC5E,UAAM,QAA0C,CAAC;AAGjD,UAAM,YAAY;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,eAAW,OAAO,WAAW;AAC3B,YAAM,UAAUJ,MAAK,aAAa,GAAG;AACrC,UAAI,CAACC,aAAW,OAAO,EAAG;AAE1B,UAAI;AACF,cAAM,UAAUE,aAAY,SAAS,EAAE,eAAe,KAAK,CAAC;AAE5D,mBAAW,SAAS,SAAS;AAC3B,cAAI,MAAM,OAAO,MAAM,MAAM,KAAK,SAAS,KAAK,KAAK,MAAM,KAAK,SAAS,MAAM,IAAI;AACjF,kBAAM,KAAK;AAAA,cACT,MAAM,MAAM,KAAK,QAAQ,eAAe,EAAE;AAAA,cAC1C,MAAMH,MAAK,SAAS,MAAM,IAAI;AAAA,YAChC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,UAAkB,WAA0C;AAClF,QAAI;AACF,YAAM,UAAUE,cAAa,UAAU,OAAO;AAG9C,YAAM,mBAAmB,QAAQ,MAAM,uBAAuB;AAC9D,UAAI,CAAC,kBAAkB;AACrB,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,UAAU,iBAAiB,CAAC,CAAC;AAEjD,UAAI,CAAC,YAAY,OAAO;AACtB,eAAO;AAAA,MACT;AAEA,aAAO,+BAA+B,WAAW,WAAW;AAAA,IAC9D,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AC/RA,SAAS,WAAAG,WAAS,UAAAC,gBAAc;AAChC,OAAOC,aAAW;AAClB,OAAOC,UAAS;AAChB;AAAA,EACE;AAAA,OAEK;AAKA,IAAM,qBAAN,cAAiCH,UAAQ;AAAA,EAC9C,OAAgB,QAAQ,CAAC,CAAC,aAAa,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;AAAA,EAE5D,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAST,UAAU;AAAA,MACR,CAAC,sBAAsB,gBAAgB;AAAA,MACvC,CAAC,qBAAqB,kCAAkC;AAAA,MACxD,CAAC,6BAA6B,wBAAwB;AAAA,MACtD,CAAC,qBAAqB,qBAAqB;AAAA,MAC3C,CAAC,gBAAgB,wBAAwB;AAAA,IAC3C;AAAA,EACF,CAAC;AAAA,EAED,SAASC,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA,EAC1C,QAAQA,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA,EAEzC,QAAQA,SAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAOA,SAAO,OAAO,aAAa;AAAA,IAChC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,SAASA,SAAO,OAAO,eAAe;AAAA,IACpC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,cAAc,4BAA4B;AAEhD,YAAQ,KAAK,QAAQ;AAAA,MACnB,KAAK;AACH,eAAO,KAAK,aAAa,WAAW;AAAA,MACtC,KAAK;AACH,eAAO,KAAK,aAAa,WAAW;AAAA,MACtC,KAAK;AACH,eAAO,KAAK,SAAS,WAAW;AAAA,MAClC,KAAK;AACH,eAAO,KAAK,YAAY,WAAW;AAAA,MACrC;AAEE,YAAI,KAAK,SAAS,KAAK,QAAQ;AAC7B,iBAAO,KAAK,aAAa,WAAW;AAAA,QACtC;AACA,eAAO,KAAK,kBAAkB,WAAW;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAc,kBAAkB,aAA8E;AAC5G,UAAM,UAAUE,KAAI,wBAAwB,EAAE,MAAM;AAEpD,QAAI;AACF,YAAM,QAAQ,MAAM,YAAY,SAAS;AACzC,cAAQ,KAAK;AAEb,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU;AAAA,UACzB,aAAa,MAAM;AAAA,UACnB,SAAS,MAAM,QAAQ;AAAA,UACvB,WAAW,MAAM;AAAA,QACnB,CAAC,CAAC;AACF,eAAO;AAAA,MACT;AAEA,cAAQ,IAAID,QAAM,KAAK,qBAAqB,CAAC;AAC7C,cAAQ,IAAI,iBAAiBA,QAAM,KAAK,MAAM,UAAU,CAAC,EAAE;AAC3D,cAAQ,IAAI,YAAYA,QAAM,KAAK,MAAM,QAAQ,MAAM,CAAC,EAAE;AAC1D,cAAQ,IAAI,iBAAiBA,QAAM,IAAI,IAAI,KAAK,MAAM,SAAS,EAAE,eAAe,CAAC,CAAC;AAAA,CAAI;AAGtF,cAAQ,IAAIA,QAAM,KAAK,oBAAoB,CAAC;AAC5C,YAAM,WAAW,MAAM,OAAO,MAAM,GAAG,EAAE;AAEzC,iBAAW,SAAS,UAAU;AAC5B,gBAAQ,IAAI,KAAKA,QAAM,KAAK,MAAM,IAAI,CAAC,EAAE;AACzC,YAAI,MAAM,aAAa;AACrB,kBAAQ,IAAI,KAAKA,QAAM,IAAI,MAAM,YAAY,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,YAAY,SAAS,KAAK,QAAQ,EAAE,EAAE;AAAA,QAC3G;AACA,gBAAQ,IAAI,KAAKA,QAAM,IAAI,WAAW,MAAM,OAAO,IAAI,EAAE,CAAC,EAAE;AAC5D,gBAAQ,IAAI;AAAA,MACd;AAEA,cAAQ,IAAIA,QAAM,IAAI,iEAAiE,CAAC;AACxF,cAAQ,IAAIA,QAAM,IAAI,sDAAsD,CAAC;AAE7E,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,4BAA4B;AACzC,cAAQ,MAAMA,QAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,aAAa,aAA8E;AACvG,UAAM,QAAQ,KAAK,SAAS,KAAK;AAGjC,QAAI,QAAQ;AACZ,QAAI,KAAK,OAAO;AACd,YAAM,SAAS,SAAS,KAAK,OAAO,EAAE;AACtC,UAAI,MAAM,MAAM,KAAK,UAAU,GAAG;AAChC,gBAAQ,MAAMA,QAAM,IAAI,mDAAmD,CAAC;AAC5E,eAAO;AAAA,MACT;AACA,cAAQ;AAAA,IACV;AAGA,UAAM,OAAO,KAAK,MACd,MAAM,GAAG,EACV,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAE7B,UAAM,UAAUC,KAAI,kBAAkB,KAAK,MAAM,EAAE,MAAM;AAEzD,QAAI;AACF,YAAM,UAAoC;AAAA,QACxC,OAAO,SAAS;AAAA,QAChB;AAAA,QACA,MAAM,QAAQ,KAAK,SAAS,IAAI,OAAO;AAAA,QACvC,QAAQ,KAAK;AAAA,MACf;AAEA,YAAM,SAAS,MAAM,YAAY,OAAO,OAAO;AAC/C,cAAQ,KAAK;AAEb,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,MAAM,CAAC;AAClC,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,OAAO,WAAW,GAAG;AAC9B,gBAAQ,IAAID,QAAM,OAAO,kBAAkB,QAAQ,cAAc,KAAK,MAAM,EAAE,GAAG,CAAC;AAClF,eAAO;AAAA,MACT;AAEA,cAAQ,IAAIA,QAAM,KAAK,SAAS,OAAO,KAAK;AAAA,CAAc,CAAC;AAE3D,iBAAW,SAAS,OAAO,QAAQ;AACjC,gBAAQ,IAAI,GAAGA,QAAM,KAAK,MAAM,IAAI,CAAC,IAAIA,QAAM,IAAI,IAAI,MAAM,OAAO,IAAI,GAAG,CAAC,EAAE;AAC9E,YAAI,MAAM,aAAa;AACrB,kBAAQ,IAAI,KAAK,MAAM,WAAW,EAAE;AAAA,QACtC;AACA,YAAI,MAAM,KAAK,SAAS,GAAG;AACzB,kBAAQ,IAAI,WAAWA,QAAM,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE;AAAA,QAC3D;AACA,gBAAQ,IAAI;AAAA,MACd;AAEA,UAAI,OAAO,QAAQ,OAAO,OAAO,QAAQ;AACvC,gBAAQ,IAAIA,QAAM,IAAI,WAAW,OAAO,OAAO,MAAM,OAAO,OAAO,KAAK,oCAAoC,CAAC;AAAA,MAC/G;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,eAAe;AAC5B,cAAQ,MAAMA,QAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,aAAa,aAA8E;AACvG,UAAM,UAAUC,KAAI,iCAAiC,EAAE,MAAM;AAE7D,QAAI;AACF,YAAM,QAAQ,MAAM,YAAY,QAAQ;AACxC,cAAQ,QAAQ,0BAA0B,MAAM,UAAU,gBAAgB,MAAM,QAAQ,MAAM,UAAU;AACxG,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,gBAAgB;AAC7B,cAAQ,MAAMD,QAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,SAAS,aAA8E;AACnG,UAAM,UAAUC,KAAI,iBAAiB,EAAE,MAAM;AAE7C,QAAI;AACF,YAAM,OAAO,MAAM,YAAY,eAAe,EAAE;AAChD,cAAQ,KAAK;AAEb,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,IAAI,CAAC;AAChC,eAAO;AAAA,MACT;AAEA,cAAQ,IAAID,QAAM,KAAK,iBAAiB,CAAC;AAEzC,iBAAW,EAAE,KAAK,MAAM,KAAK,MAAM;AACjC,cAAM,MAAM,SAAI,OAAO,KAAK,IAAI,OAAO,EAAE,CAAC;AAC1C,gBAAQ,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC,IAAIA,QAAM,KAAK,GAAG,CAAC,IAAI,KAAK,EAAE;AAAA,MAC/D;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,KAAK,qBAAqB;AAClC,cAAQ,MAAMA,QAAM,IAAI,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC;AAC/E,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,YAAY,aAA8E;AACtG,UAAM,UAAU,YAAY,WAAW;AAEvC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,OAAO,CAAC;AACnC,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK,kBAAkB,CAAC;AAE1C,eAAW,UAAU,SAAS;AAC5B,cAAQ,IAAI,GAAGA,QAAM,KAAK,OAAO,IAAI,CAAC,IAAI,OAAO,WAAWA,QAAM,MAAM,YAAY,IAAI,EAAE,EAAE;AAC5F,cAAQ,IAAI,KAAKA,QAAM,IAAI,GAAG,OAAO,KAAK,IAAI,OAAO,IAAI,EAAE,CAAC,EAAE;AAC9D,UAAI,OAAO,aAAa;AACtB,gBAAQ,IAAI,KAAK,OAAO,WAAW,EAAE;AAAA,MACvC;AACA,cAAQ,IAAI;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AACF;;;ACzPA,SAAS,WAAAE,WAAS,UAAAC,gBAAc;AAChC,OAAOC,aAAW;AAClB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAKA,IAAM,gBAAN,cAA4BF,UAAQ;AAAA,EACzC,OAAgB,QAAQ,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;AAAA,EAE5C,OAAgB,QAAQA,UAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBT,UAAU;AAAA,MACR,CAAC,sBAAsB,kBAAkB;AAAA,MACzC,CAAC,mBAAmB,mCAAmC;AAAA,MACvD,CAAC,0BAA0B,yCAAyC;AAAA,MACpE,CAAC,0BAA0B,gBAAgB;AAAA,MAC3C,CAAC,yBAAyB,yBAAyB;AAAA,MACnD,CAAC,mBAAmB,qBAAqB;AAAA,MACzC,CAAC,yBAAyB,oBAAoB;AAAA,MAC9C,CAAC,mBAAmB,uCAAuC;AAAA,MAC3D,CAAC,iBAAiB,iBAAiB;AAAA,MACnC,CAAC,uBAAuB,6CAA6C;AAAA,MACrE,CAAC,sBAAsB,wBAAwB;AAAA,IACjD;AAAA,EACF,CAAC;AAAA;AAAA,EAGD,SAASC,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA;AAAA,EAG1C,MAAMA,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA;AAAA,EAGvC,YAAYA,SAAO,OAAO,EAAE,UAAU,MAAM,CAAC;AAAA;AAAA,EAG7C,SAASA,SAAO,QAAQ,eAAe,OAAO;AAAA,IAC5C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,OAAO,aAAa;AAAA,IAChC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,QAAQA,SAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,QAAQA,SAAO,OAAO,WAAW;AAAA,IAC/B,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,UAAUA,SAAO,OAAO,gBAAgB;AAAA,IACtC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,OAAO,aAAa;AAAA,IAChC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,OAAO,eAAe;AAAA,IACpC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,QAAQA,SAAO,OAAO,cAAc;AAAA,IAClC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,gBAAgBA,SAAO,QAAQ,oBAAoB,OAAO;AAAA,IACxD,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,SAASA,SAAO,QAAQ,aAAa,OAAO;AAAA,IAC1C,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,OAAOA,SAAO,QAAQ,aAAa,OAAO;AAAA,IACxC,aAAa;AAAA,EACf,CAAC;AAAA;AAAA,EAGD,UAAUA,SAAO,QAAQ,gBAAgB,OAAO;AAAA,IAC9C,aAAa;AAAA,EACf,CAAC;AAAA,EAED,MAAM,UAA2B;AAC/B,UAAM,SAAS,KAAK,UAAU;AAE9B,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,eAAO,KAAK,WAAW;AAAA,MACzB,KAAK;AACH,eAAO,KAAK,eAAe;AAAA,MAC7B,KAAK;AACH,eAAO,KAAK,cAAc;AAAA,MAC5B,KAAK;AACH,eAAO,KAAK,aAAa;AAAA,MAC3B,KAAK;AACH,eAAO,KAAK,qBAAqB;AAAA,MACnC,KAAK;AACH,eAAO,KAAK,eAAe;AAAA,MAC7B,KAAK;AACH,eAAO,KAAK,eAAe;AAAA,MAC7B,KAAK;AACH,eAAO,KAAK,YAAY;AAAA,MAC1B,KAAK;AACH,eAAO,KAAK,YAAY;AAAA,MAC1B,KAAK;AACH,eAAO,KAAK,aAAa;AAAA,MAC3B,KAAK;AACH,eAAO,KAAK,WAAW;AAAA,MACzB;AACE,gBAAQ,MAAMC,QAAM,IAAI,mBAAmB,MAAM,EAAE,CAAC;AACpD,gBAAQ,IAAIA,QAAM,KAAK,mGAAmG,CAAC;AAC3H,eAAO;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAA8B;AAC1C,UAAM,cAAc,QAAQ,IAAI;AAChC,UAAM,SAAS,gBAAgB,WAAW;AAC1C,UAAM,QAAQ,eAAe,WAAW;AAGxC,UAAM,mBAAmB,IAAI,iBAAiB,WAAW;AACzD,UAAM,uBAAuB,IAAI,cAAc,WAAW,WAAW;AACrE,UAAM,sBAAsB,IAAI,cAAc,QAAQ;AAEtD,UAAM,sBAAsB,OAAO,kBAAkB,iBAAiB,MAAM,IAAI;AAChF,UAAM,mBAAmB,OAAO,eAAe,qBAAqB,MAAM,IAAI;AAC9E,UAAM,kBAAkB,OAAO,qBAAqB,oBAAoB,MAAM,IAAI;AAClF,UAAM,YAAY,OAAO,kBAAkB,iBAAiB,aAAa,IAAI;AAE7E,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU;AAAA,QACzB,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG,MAAM,CAAC,CAAC;AACX,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK,mBAAmB,CAAC;AAG3C,YAAQ,IAAIA,QAAM,KAAK,UAAU,CAAC;AAClC,YAAQ,IAAI,mBAAmB,mBAAmB,EAAE;AACpD,QAAI,WAAW;AACb,cAAQ,IAAI,iBAAiBA,QAAM,KAAK,UAAU,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;AAAA,IAClE;AACA,YAAQ,IAAI;AAGZ,YAAQ,IAAIA,QAAM,KAAK,UAAU,CAAC;AAClC,YAAQ,IAAI,gBAAgB,gBAAgB,EAAE;AAC9C,YAAQ,IAAI,WAAWA,QAAM,KAAK,OAAO,sBAAsB,MAAM,mBAAmB,iBAAiB,CAAC,EAAE;AAC5G,YAAQ,IAAI;AAGZ,YAAQ,IAAIA,QAAM,KAAK,SAAS,CAAC;AACjC,YAAQ,IAAI,gBAAgB,eAAe,EAAE;AAC7C,YAAQ,IAAI,WAAWA,QAAM,KAAK,OAAO,qBAAqB,MAAM,kBAAkB,iBAAiB,CAAC,EAAE;AAC1G,YAAQ,IAAI;AAGZ,QAAI,uBAAuB,IAAI;AAC7B,cAAQ,IAAIA,QAAM,OAAO,sEAA+D,CAAC;AACzF,cAAQ,IAAIA,QAAM,KAAK,6BAA6B,CAAC;AAAA,IACvD;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAkC;AAC9C,UAAM,QAAQ,KAAK;AACnB,QAAI,CAAC,OAAO;AACV,cAAQ,MAAMA,QAAM,IAAI,iCAAiC,CAAC;AAC1D,cAAQ,IAAIA,QAAM,KAAK,4CAA4C,CAAC;AACpE,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,QAAQ,IAAI;AAChC,UAAM,WAAW,qBAAqB,WAAW;AAGjD,QAAI,eAAe;AACnB,QAAI,KAAK,OAAO;AACd,YAAM,SAAS,SAAS,KAAK,OAAO,EAAE;AACtC,UAAI,MAAM,MAAM,KAAK,UAAU,GAAG;AAChC,gBAAQ,IAAIA,QAAM,IAAI,mDAAmD,CAAC;AAC1E,eAAO;AAAA,MACT;AACA,qBAAe;AAAA,IACjB;AAGA,UAAM,OAAO,KAAK,MACd,MAAM,GAAG,EACV,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAE7B,UAAM,UAAU,SAAS,OAAO,OAAO;AAAA,MACrC,eAAe,KAAK;AAAA,MACpB,MAAM,QAAQ,KAAK,SAAS,IAAI,OAAO;AAAA,MACvC;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAIA,QAAM,OAAO,2BAA2B,KAAK,GAAG,CAAC;AAC7D,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK;AAAA,QAAW,QAAQ,MAAM;AAAA,CAAc,CAAC;AAE/D,eAAW,EAAE,UAAU,gBAAgB,UAAU,KAAK,SAAS;AAC7D,cAAQ,IAAI,GAAGA,QAAM,KAAK,QAAG,CAAC,IAAIA,QAAM,KAAK,SAAS,KAAK,CAAC,EAAE;AAC9D,cAAQ,IAAI,SAASA,QAAM,KAAK,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;AAC1D,cAAQ,IAAI,gBAAgB,KAAK,YAAY,cAAc,CAAC,GAAG;AAC/D,cAAQ,IAAI,WAAW,SAAS,KAAK,KAAK,IAAI,CAAC,EAAE;AACjD,cAAQ,IAAI,YAAY,SAAS,KAAK,EAAE;AAExC,UAAI,KAAK,SAAS;AAChB,gBAAQ,IAAI,cAAc,KAAK,gBAAgB,SAAS,CAAC,EAAE;AAC3D,gBAAQ,IAAI,cAAc,IAAI,KAAK,SAAS,SAAS,EAAE,mBAAmB,CAAC,EAAE;AAC7E,gBAAQ,IAAI,WAAW,SAAS,QAAQ,EAAE;AAAA,MAC5C;AAGA,YAAM,UAAU,SAAS,QAAQ,MAAM,GAAG,GAAG;AAC7C,cAAQ,IAAI,KAAKA,QAAM,KAAK,OAAO,CAAC,GAAG,SAAS,QAAQ,SAAS,MAAM,QAAQ,EAAE,EAAE;AACnF,cAAQ,IAAI;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAiC;AAC7C,UAAM,cAAc,QAAQ,IAAI;AAChC,UAAM,QAAQ,IAAI;AAAA,MAChB,KAAK,SAAS,WAAW;AAAA,MACzB,KAAK,SAAS,SAAY;AAAA,IAC5B;AAEA,QAAI,YAAY,MAAM,OAAO;AAG7B,QAAI,KAAK,MAAM;AACb,YAAM,UAAU,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC;AACtE,kBAAY,UAAU;AAAA,QAAO,CAAC,MAC5B,EAAE,KAAK,KAAK,CAAC,MAAM,QAAQ,SAAS,EAAE,YAAY,CAAC,CAAC;AAAA,MACtD;AAAA,IACF;AAGA,UAAM,QAAQ,KAAK,QAAQ,SAAS,KAAK,OAAO,EAAE,IAAI,UAAU;AAChE,gBAAY,UAAU,MAAM,GAAG,KAAK;AAEpC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,WAAW,MAAM,CAAC,CAAC;AAC9C,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAW;AACvC,YAAQ,IAAIA,QAAM,KAAK;AAAA,EAAK,KAAK,eAAe,UAAU,MAAM;AAAA,CAAM,CAAC;AAEvE,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,IAAIA,QAAM,KAAK,qBAAqB,CAAC;AAC7C,cAAQ,IAAIA,QAAM,KAAK,wDAAwD,CAAC;AAChF,cAAQ,IAAIA,QAAM,KAAK,qDAAqD,CAAC;AAC7E,aAAO;AAAA,IACT;AAEA,eAAW,YAAY,WAAW;AAChC,YAAM,gBAAgB,SAAS,kBAAkB,SAC7C,KAAK,KAAK,YAAY,SAAS,aAAa,CAAC,OAC7C;AAEJ,cAAQ,IAAI,GAAGA,QAAM,KAAK,QAAG,CAAC,IAAI,SAAS,KAAK,GAAGA,QAAM,MAAM,aAAa,CAAC,EAAE;AAC/E,cAAQ,IAAI,KAAKA,QAAM,KAAK,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,SAAS,KAAK,KAAK,IAAI,CAAC,MAAM,SAAS,QAAQ,OAAO;AAEhH,UAAI,KAAK,SAAS;AAChB,cAAM,UAAU,SAAS,QAAQ,MAAM,GAAG,EAAE;AAC5C,gBAAQ,IAAI,KAAKA,QAAM,KAAK,OAAO,CAAC,GAAG,SAAS,QAAQ,SAAS,KAAK,QAAQ,EAAE,EAAE;AAAA,MACpF;AAAA,IACF;AAEA,YAAQ,IAAI;AACZ,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAgC;AAC5C,UAAM,KAAK,KAAK;AAChB,QAAI,CAAC,IAAI;AACP,cAAQ,MAAMA,QAAM,IAAI,gCAAgC,CAAC;AACzD,cAAQ,IAAIA,QAAM,KAAK,kCAAkC,CAAC;AAC1D,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,QAAQ,IAAI;AAGhC,QAAI,WAAW,IAAI,cAAc,WAAW,WAAW,EAAE,QAAQ,EAAE;AAGnE,QAAI,CAAC,UAAU;AACb,iBAAW,IAAI,cAAc,QAAQ,EAAE,QAAQ,EAAE;AAAA,IACnD;AAGA,QAAI,CAAC,UAAU;AACb,YAAM,mBAAmB,IAAI,cAAc,WAAW,WAAW,EAAE,OAAO;AAC1E,YAAM,kBAAkB,IAAI,cAAc,QAAQ,EAAE,OAAO;AAC3D,YAAM,MAAM,CAAC,GAAG,kBAAkB,GAAG,eAAe;AAEpD,iBAAW,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;AAAA,IAChD;AAEA,QAAI,CAAC,UAAU;AACb,cAAQ,MAAMA,QAAM,IAAI,uBAAuB,EAAE,EAAE,CAAC;AACpD,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAC7C,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK;AAAA,EAAK,SAAS,KAAK;AAAA,CAAI,CAAC;AAC/C,YAAQ,IAAIA,QAAM,KAAK,OAAO,SAAS,EAAE,EAAE,CAAC;AAC5C,YAAQ,IAAIA,QAAM,KAAK,UAAU,SAAS,KAAK,EAAE,CAAC;AAClD,YAAQ,IAAIA,QAAM,KAAK,WAAW,SAAS,MAAM,EAAE,CAAC;AACpD,YAAQ,IAAIA,QAAM,KAAK,SAAS,SAAS,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;AAE3D,QAAI,SAAS,YAAY,QAAQ;AAC/B,cAAQ,IAAIA,QAAM,KAAK,eAAe,SAAS,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,IACzE;AAEA,QAAI,SAAS,UAAU,QAAQ;AAC7B,cAAQ,IAAIA,QAAM,KAAK,aAAa,SAAS,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,IACrE;AAEA,YAAQ,IAAIA,QAAM,KAAK,YAAY,IAAI,KAAK,SAAS,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC;AACnF,YAAQ,IAAIA,QAAM,KAAK,YAAY,IAAI,KAAK,SAAS,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC;AACnF,YAAQ,IAAIA,QAAM,KAAK,SAAS,SAAS,QAAQ,EAAE,CAAC;AAEpD,QAAI,SAAS,kBAAkB,QAAW;AACxC,cAAQ,IAAIA,QAAM,KAAK,kBAAkB,KAAK,YAAY,SAAS,aAAa,CAAC,GAAG,CAAC;AAAA,IACvF;AAEA,YAAQ,IAAIA,QAAM,KAAK,cAAc,CAAC;AACtC,YAAQ,IAAI,SAAS,OAAO;AAC5B,YAAQ,IAAI;AAEZ,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,uBAAwC;AACpD,UAAM,cAAc,QAAQ,IAAI;AAGhC,8BAA0B,WAAW;AAErC,UAAM,mBAAmB,IAAI,iBAAiB,WAAW;AACzD,UAAM,eAAe,iBAAiB,OAAO;AAE7C,QAAI,aAAa,WAAW,GAAG;AAC7B,cAAQ,IAAIA,QAAM,OAAO,8BAA8B,CAAC;AACxD,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK,SAAS,aAAa,MAAM;AAAA,CAAgC,CAAC;AAEpF,UAAM,aAAa,uBAAuB,WAAW;AACrD,UAAM,qBAAqB;AAAA,MACzB,iBAAiB;AAAA,MACjB,gBAAgB,KAAK,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAAA,IAC3D;AAEA,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAIA,QAAM,KAAK,uCAAuC,CAAC;AAG/D,YAAMC,UAAS,MAAM,WAAW,SAAS,cAAc,kBAAkB;AAEzE,cAAQ,IAAID,QAAM,MAAM,yBAAoBC,QAAO,MAAM,UAAU,sBAAsBA,QAAO,MAAM,WAAW;AAAA,CAAc,CAAC;AAEhI,UAAIA,QAAO,UAAU,SAAS,GAAG;AAC/B,gBAAQ,IAAID,QAAM,KAAK,kCAAkC,CAAC;AAC1D,mBAAW,YAAYC,QAAO,WAAW;AACvC,kBAAQ,IAAI,KAAKD,QAAM,KAAK,QAAG,CAAC,IAAI,SAAS,KAAK,EAAE;AACpD,kBAAQ,IAAI,aAAa,SAAS,KAAK,KAAK,IAAI,CAAC,EAAE;AAAA,QACrD;AACA,gBAAQ,IAAI;AAAA,MACd;AAEA,aAAO;AAAA,IACT;AAGA,UAAM,EAAE,WAAW,OAAO,IAAI,MAAM,WAAW,iBAAiB,cAAc,kBAAkB;AAEhG,YAAQ,IAAIA,QAAM,MAAM,qBAAgB,OAAO,MAAM,UAAU,sBAAsB,OAAO,MAAM,WAAW;AAAA,CAAc,CAAC;AAE5H,QAAI,UAAU,SAAS,GAAG;AACxB,cAAQ,IAAIA,QAAM,KAAK,gBAAgB,CAAC;AACxC,iBAAW,YAAY,WAAW;AAChC,gBAAQ,IAAI,KAAKA,QAAM,KAAK,QAAG,CAAC,IAAI,SAAS,KAAK,EAAE;AACpD,gBAAQ,IAAI,aAAa,SAAS,KAAK,KAAK,IAAI,CAAC,EAAE;AAAA,MACrD;AACA,cAAQ,IAAI;AAAA,IACd;AAEA,QAAI,OAAO,wBAAwB,SAAS,GAAG;AAE7C,YAAM,UAAU,iBAAiB,WAAW,OAAO,uBAAuB;AAC1E,cAAQ,IAAIA,QAAM,KAAK,WAAW,OAAO,0BAA0B,CAAC;AAAA,IACtE;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAkC;AAC9C,UAAM,KAAK,KAAK;AAChB,QAAI,CAAC,IAAI;AACP,cAAQ,MAAMA,QAAM,IAAI,gCAAgC,CAAC;AACzD,cAAQ,IAAIA,QAAM,KAAK,oDAAoD,CAAC;AAC5E,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,QAAQ,IAAI;AAGhC,QAAI,WAAW,IAAI,cAAc,WAAW,WAAW,EAAE,QAAQ,EAAE;AACnE,QAAI,CAAC,UAAU;AACb,iBAAW,IAAI,cAAc,QAAQ,EAAE,QAAQ,EAAE;AAAA,IACnD;AAGA,QAAI,CAAC,UAAU;AACb,YAAM,mBAAmB,IAAI,cAAc,WAAW,WAAW,EAAE,OAAO;AAC1E,YAAM,kBAAkB,IAAI,cAAc,QAAQ,EAAE,OAAO;AAC3D,YAAM,MAAM,CAAC,GAAG,kBAAkB,GAAG,eAAe;AACpD,iBAAW,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;AAAA,IAChD;AAEA,QAAI,CAAC,UAAU;AACb,cAAQ,MAAMA,QAAM,IAAI,uBAAuB,EAAE,EAAE,CAAC;AACpD,aAAO;AAAA,IACT;AAGA,UAAM,YAAY,KAAK,QAAQ,KAAK,QAAQ,SAAS,KAAK;AAG1D,UAAM,eAAe,KAAK,qBAAqB,UAAU,SAAS;AAElE,QAAI,KAAK,QAAQ;AACf,cAAQ,IAAIA,QAAM,KAAK,qBAAqB,CAAC;AAC7C,cAAQ,IAAI,YAAY;AACxB,aAAO;AAAA,IACT;AAGA,UAAM,aAAa,KAAK,UAAU,qBAAqB,SAAS;AAChE,UAAM,EAAE,SAAAE,SAAQ,IAAI,MAAM,OAAO,MAAW;AAC5C,UAAM,EAAE,YAAAC,cAAY,WAAAC,YAAW,eAAAC,eAAc,IAAI,MAAM,OAAO,IAAS;AAEvE,UAAM,YAAYH,SAAQ,UAAU;AACpC,QAAI,CAACC,aAAW,SAAS,GAAG;AAC1B,MAAAC,WAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC1C;AAEA,IAAAC,eAAc,YAAY,cAAc,OAAO;AAE/C,YAAQ,IAAIL,QAAM,MAAM,sCAAiC,SAAS,EAAE,CAAC;AACrE,YAAQ,IAAIA,QAAM,KAAK,WAAW,UAAU,EAAE,CAAC;AAE/C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBAAkC;AAC9C,UAAM,YAAY,KAAK,SAAS,KAAK;AACrC,QAAI,CAAC,WAAW;AACd,cAAQ,MAAMA,QAAM,IAAI,+BAA+B,CAAC;AACxD,cAAQ,IAAIA,QAAM,KAAK,8CAA8C,CAAC;AACtE,aAAO;AAAA,IACT;AAEA,UAAM,EAAE,YAAAG,cAAY,cAAAG,cAAa,IAAI,MAAM,OAAO,IAAS;AAC3D,UAAM,EAAE,SAAAC,UAAQ,IAAI,MAAM,OAAO,MAAW;AAE5C,UAAM,WAAWA,UAAQ,SAAS;AAClC,QAAI,CAACJ,aAAW,QAAQ,GAAG;AACzB,cAAQ,MAAMH,QAAM,IAAI,mBAAmB,QAAQ,EAAE,CAAC;AACtD,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,QAAQ,IAAI;AAChC,UAAM,QAAQ,IAAI;AAAA,MAChB,KAAK,SAAS,WAAW;AAAA,MACzB,KAAK,SAAS,SAAY;AAAA,IAC5B;AAEA,QAAI;AACF,YAAM,UAAUM,cAAa,UAAU,OAAO;AAC9C,YAAM,EAAE,OAAOE,WAAU,IAAI,MAAM,OAAO,MAAM;AAChD,YAAM,OAAOA,WAAU,OAAO;AAE9B,UAAI,CAAC,KAAK,aAAa,CAAC,MAAM,QAAQ,KAAK,SAAS,GAAG;AACrD,gBAAQ,MAAMR,QAAM,IAAI,4BAA4B,CAAC;AACrD,eAAO;AAAA,MACT;AAEA,UAAI,WAAW;AACf,iBAAW,YAAY,KAAK,WAAW;AACrC,YAAI,KAAK,QAAQ;AACf,kBAAQ,IAAIA,QAAM,KAAK,iBAAiB,SAAS,KAAK,EAAE,CAAC;AAAA,QAC3D,OAAO;AACL,gBAAM,IAAI;AAAA,YACR,QAAQ;AAAA,YACR,OAAO,SAAS;AAAA,YAChB,SAAS,SAAS;AAAA;AAAA,YAElB,MAAM,MAAM,QAAQ,SAAS,IAAI,IAAI,SAAS,OAAO,CAAC;AAAA,YACtD,YAAY,MAAM,QAAQ,SAAS,UAAU,IAAI,SAAS,aAAa,CAAC;AAAA,YACxE,UAAU,MAAM,QAAQ,SAAS,QAAQ,IAAI,SAAS,WAAW,CAAC;AAAA,UACpE,CAAC;AACD;AAAA,QACF;AAAA,MACF;AAEA,UAAI,KAAK,QAAQ;AACf,gBAAQ,IAAIA,QAAM,KAAK;AAAA,aAAgB,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAAA,MAC9F,OAAO;AACL,gBAAQ,IAAIA,QAAM,MAAM,mBAAc,QAAQ,YAAY,CAAC;AAAA,MAC7D;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ,MAAMA,QAAM,IAAI,kBAAkB,KAAK,EAAE,CAAC;AAClD,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAA+B;AAC3C,UAAM,cAAc,QAAQ,IAAI;AAEhC,QAAI,KAAK,QAAQ;AACf,YAAMS,oBAAmB,IAAI,iBAAiB,WAAW;AACzD,YAAM,gBAAgB,IAAI,cAAc,WAAW,WAAW;AAE9D,cAAQ,IAAIT,QAAM,KAAK,qBAAqB,CAAC;AAC7C,cAAQ,IAAI,eAAeS,kBAAiB,MAAM,CAAC,eAAe;AAClE,UAAI,CAAC,KAAK,eAAe;AACvB,gBAAQ,IAAI,eAAe,cAAc,MAAM,CAAC,YAAY;AAAA,MAC9D;AACA,aAAO;AAAA,IACT;AAEA,UAAM,mBAAmB,IAAI,iBAAiB,WAAW;AACzD,qBAAiB,MAAM;AACvB,YAAQ,IAAIT,QAAM,MAAM,qCAAgC,CAAC;AAEzD,QAAI,CAAC,KAAK,eAAe;AACvB,YAAM,gBAAgB,IAAI,cAAc,WAAW,WAAW;AAC9D,oBAAc,MAAM;AACpB,cAAQ,IAAIA,QAAM,MAAM,kCAA6B,CAAC;AAAA,IACxD;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAA+B;AAC3C,QAAI,CAAC,KAAK,OAAO;AACf,cAAQ,MAAMA,QAAM,IAAI,4BAA4B,CAAC;AACrD,cAAQ,IAAIA,QAAM,KAAK,0DAA0D,CAAC;AAClF,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,KAAK,SAAS;AACjB,cAAQ,MAAMA,QAAM,IAAI,8BAA8B,CAAC;AACvD,cAAQ,IAAIA,QAAM,KAAK,0DAA0D,CAAC;AAClF,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,QAAQ,IAAI;AAChC,UAAM,QAAQ,IAAI;AAAA,MAChB,KAAK,SAAS,WAAW;AAAA,MACzB,KAAK,SAAS,SAAY;AAAA,IAC5B;AAEA,UAAM,OAAO,KAAK,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;AAE5D,UAAM,WAAW,MAAM,IAAI;AAAA,MACzB,QAAQ;AAAA,MACR,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,MACd;AAAA,IACF,CAAC;AAED,YAAQ,IAAIA,QAAM,MAAM,0BAAqB,SAAS,KAAK,EAAE,CAAC;AAC9D,YAAQ,IAAIA,QAAM,KAAK,SAAS,SAAS,EAAE,EAAE,CAAC;AAE9C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAgC;AAC5C,UAAM,KAAK,KAAK;AAChB,QAAI,CAAC,IAAI;AACP,cAAQ,MAAMA,QAAM,IAAI,gCAAgC,CAAC;AACzD,cAAQ,IAAIA,QAAM,KAAK,2CAA2C,CAAC;AACnE,aAAO;AAAA,IACT;AAEA,UAAM,SAAS,SAAS,KAAK,aAAa,KAAK,EAAE;AACjD,QAAI,MAAM,MAAM,KAAK,SAAS,KAAK,SAAS,KAAK;AAC/C,cAAQ,MAAMA,QAAM,IAAI,6BAA6B,CAAC;AACtD,cAAQ,IAAIA,QAAM,KAAK,2CAA2C,CAAC;AACnE,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,QAAQ,IAAI;AAGhC,UAAM,eAAe,IAAI,cAAc,WAAW,WAAW;AAC7D,QAAI,WAAW,aAAa,QAAQ,EAAE;AACtC,QAAI,QAAQ;AAEZ,QAAI,CAAC,UAAU;AACb,YAAM,cAAc,IAAI,cAAc,QAAQ;AAC9C,iBAAW,YAAY,QAAQ,EAAE;AACjC,cAAQ;AAAA,IACV;AAGA,QAAI,CAAC,UAAU;AACb,YAAM,mBAAmB,aAAa,OAAO;AAC7C,YAAM,cAAc,IAAI,cAAc,QAAQ;AAC9C,YAAM,kBAAkB,YAAY,OAAO;AAE3C,iBAAW,iBAAiB,KAAK,CAAC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;AAC3D,UAAI,UAAU;AACZ,gBAAQ;AAAA,MACV,OAAO;AACL,mBAAW,gBAAgB,KAAK,CAAC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;AAC1D,YAAI,UAAU;AACZ,kBAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,UAAU;AACb,cAAQ,MAAMA,QAAM,IAAI,uBAAuB,EAAE,EAAE,CAAC;AACpD,aAAO;AAAA,IACT;AAEA,UAAM,iBAAiB,SAAS,IAAI,MAAM;AAC1C,YAAQ,IAAIA,QAAM,MAAM,iBAAY,SAAS,KAAK,QAAQ,MAAM,aAAa,CAAC;AAE9E,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAA8B;AAC1C,UAAM,cAAc,QAAQ,IAAI;AAChC,UAAM,QAAQ,eAAe,WAAW;AAExC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAC1C,aAAO;AAAA,IACT;AAEA,YAAQ,IAAIA,QAAM,KAAK,0BAA0B,CAAC;AAElD,YAAQ,IAAIA,QAAM,KAAK,QAAQ,CAAC;AAChC,YAAQ,IAAI,2BAA2BA,QAAM,KAAK,MAAM,gBAAgB,CAAC,EAAE;AAC3E,YAAQ,IAAI,wBAAwBA,QAAM,KAAK,MAAM,aAAa,CAAC,EAAE;AACrE,YAAQ,IAAI,oBAAoBA,QAAM,KAAK,MAAM,SAAS,CAAC,EAAE;AAC7D,YAAQ,IAAI,uBAAuBA,QAAM,KAAK,MAAM,mBAAmB,CAAC,EAAE;AAC1E,YAAQ,IAAI,mBAAmBA,QAAM,KAAK,MAAM,eAAe,CAAC,EAAE;AAClE,YAAQ,IAAI;AAEZ,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAAuB;AACzC,QAAI,SAAS,GAAI,QAAOA,QAAM,MAAM,MAAM,SAAS,CAAC;AACpD,QAAI,SAAS,GAAI,QAAOA,QAAM,OAAO,MAAM,SAAS,CAAC;AACrD,WAAOA,QAAM,IAAI,MAAM,SAAS,CAAC;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,WAKb;AACT,UAAM,QAAkB,CAAC;AACzB,QAAI,UAAU,WAAW,SAAS,GAAG;AACnC,YAAM,KAAK,eAAe,UAAU,WAAW,KAAK,IAAI,CAAC,EAAE;AAAA,IAC7D;AACA,QAAI,UAAU,KAAK,SAAS,GAAG;AAC7B,YAAM,KAAK,SAAS,UAAU,KAAK,KAAK,IAAI,CAAC,EAAE;AAAA,IACjD;AACA,QAAI,UAAU,SAAS,SAAS,GAAG;AACjC,YAAM,KAAK,aAAa,UAAU,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,IACrE;AACA,QAAI,UAAU,SAAS,SAAS,GAAG;AACjC,YAAM,KAAK,aAAa,UAAU,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,IACzD;AACA,WAAO,MAAM,KAAK,KAAK,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKQ,QAAQ,MAAsB;AACpC,WAAO,KACJ,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,UAAU,EAAE,EACpB,MAAM,GAAG,EAAE;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,OAAuB;AAE7C,QAAI,0BAA0B,KAAK,KAAK,KAAK,MAAM,SAAS,IAAI,GAAG;AAEjE,aAAO,IAAI,MAAM,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK,CAAC;AAAA,IAC9D;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,UAAoB,WAA2B;AAE1E,UAAM,cAAc,KAAK,gBAAgB,SAAS;AAClD,UAAM,cAAc,KAAK,gBAAgB,SAAS,KAAK;AACvD,UAAM,cAAc,SAAS,KAAK,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC;AAEpE,UAAM,QAAkB;AAAA,MACtB;AAAA,MACA,SAAS,WAAW;AAAA,MACpB,gBAAgB,WAAW;AAAA,MAC3B;AAAA,MACA,UAAU,YAAY,KAAK,IAAI,CAAC;AAAA,MAChC;AAAA,MACA;AAAA,IACF;AAEA,QAAI,SAAS,YAAY,QAAQ;AAC/B,YAAM,oBAAoB,SAAS,WAAW,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC;AAChF,YAAM,KAAK,gBAAgB;AAC3B,YAAM,KAAK,kBAAkB,kBAAkB,KAAK,IAAI,CAAC,GAAG;AAAA,IAC9D;AAEA,UAAM,KAAK,OAAO,IAAI,KAAK,SAAS,KAAK,IAAI,EAAE;AAE/C,QAAI,SAAS,UAAU,QAAQ;AAC7B,YAAM,KAAK,eAAe,EAAE;AAC5B,iBAAW,WAAW,SAAS,UAAU;AACvC,cAAM,KAAK,KAAK,OAAO,EAAE;AAAA,MAC3B;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAEA,UAAM,KAAK,cAAc,IAAI,SAAS,SAAS,EAAE;AAEjD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,IAAI,KAAK,SAAS,SAAS,EAAE,mBAAmB,CAAC;AAAA,MAC9D,UAAU,SAAS,QAAQ;AAAA,IAC7B;AAEA,QAAI,SAAS,kBAAkB,QAAW;AACxC,YAAM,KAAK,mBAAmB,SAAS,aAAa,IAAI;AAAA,IAC1D;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;","names":["chalk","Command","Option","Command","Option","chalk","chalk","Command","Option","loadConfig","findAllSkills","getAdapter","detectAgent","Command","Option","config","loadConfig","detectAgent","getAdapter","findAllSkills","chalk","chalk","Command","Option","detectAgent","getAdapter","Command","Option","chalk","detectAgent","getAdapter","chalk","Command","Option","findSkill","Command","Option","findSkill","chalk","existsSync","chalk","Command","Option","findSkill","Command","Option","findSkill","chalk","existsSync","existsSync","mkdirSync","rmSync","chalk","Command","Option","getAdapter","detectAgent","Command","Option","chalk","cleanupPath","existsSync","rmSync","detectAgent","getAdapter","mkdirSync","existsSync","rmSync","cpSync","join","chalk","ora","Command","Option","findAllSkills","findSkill","detectProvider","isLocalPath","Command","Option","ora","findSkill","chalk","findAllSkills","isLocalPath","join","existsSync","rmSync","cpSync","detectProvider","existsSync","join","chalk","Command","Option","existsSync","mkdirSync","writeFileSync","join","chalk","Command","Option","Command","Command","Option","existsSync","readFileSync","writeFileSync","mkdirSync","join","basename","dirname","chalk","findAllSkills","getAdapter","getAllAdapters","Command","Option","chalk","getAllAdapters","findAllSkills","join","existsSync","getAdapter","mkdirSync","writeFileSync","basename","dirname","readFileSync","outputDir","Command","Option","existsSync","readFileSync","writeFileSync","chalk","getAllAdapters","Command","Option","resolve","chalk","ora","ContextManager","truncate","Command","Option","resolve","chalk","Command","Option","resolve","chalk","SessionManager","Command","Option","resolve","chalk","SessionManager","Command","Option","resolve","chalk","ora","Command","Option","resolve","chalk","Command","Option","resolve","chalk","Command","Option","resolve","join","existsSync","readFileSync","chalk","ora","Command","Option","resolve","join","existsSync","readFileSync","readdirSync","chalk","Command","Option","chalk","ora","Command","Option","chalk","result","dirname","existsSync","mkdirSync","writeFileSync","readFileSync","resolve","parseYaml","observationStore"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/list.ts","../src/helpers.ts","../src/commands/read.ts","../src/commands/sync.ts","../src/commands/init.ts","../src/commands/enable.ts","../src/commands/remove.ts","../src/commands/install.ts","../src/commands/update.ts","../src/commands/validate.ts","../src/commands/create.ts","../src/commands/ui.ts","../src/commands/translate.ts","../src/commands/context.ts","../src/commands/recommend.ts","../src/commands/status.ts","../src/commands/pause.ts","../src/commands/resume.ts","../src/commands/workflow/run.ts","../src/commands/workflow/list.ts","../src/commands/workflow/create.ts","../src/commands/run.ts","../src/commands/test.ts","../src/commands/marketplace.ts","../src/commands/memory.ts","../src/commands/settings.ts","../src/commands/cicd.ts","../src/commands/team.ts","../src/commands/plugin.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { findAllSkills } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\n\nexport class ListCommand extends Command {\n static override paths = [['list'], ['ls'], ['l']];\n\n static override usage = Command.Usage({\n description: 'List all installed skills',\n examples: [\n ['List all skills', '$0 list'],\n ['Show only enabled skills', '$0 list --enabled'],\n ['Show JSON output', '$0 list --json'],\n ],\n });\n\n enabled = Option.Boolean('--enabled,-e', false, {\n description: 'Show only enabled skills',\n });\n\n disabled = Option.Boolean('--disabled,-d', false, {\n description: 'Show only disabled skills',\n });\n\n json = Option.Boolean('--json,-j', false, {\n description: 'Output as JSON',\n });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n let skills = findAllSkills(searchDirs);\n\n if (this.enabled) {\n skills = skills.filter(s => s.enabled);\n } else if (this.disabled) {\n skills = skills.filter(s => !s.enabled);\n }\n\n skills.sort((a, b) => {\n if (a.location !== b.location) {\n return a.location === 'project' ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n\n if (this.json) {\n console.log(JSON.stringify(skills, null, 2));\n return 0;\n }\n\n if (skills.length === 0) {\n console.log(chalk.yellow('No skills installed'));\n console.log(chalk.dim('Install skills with: skillkit install <source>'));\n return 0;\n }\n\n console.log(chalk.cyan(`Installed skills (${skills.length}):\\n`));\n\n const projectSkills = skills.filter(s => s.location === 'project');\n const globalSkills = skills.filter(s => s.location === 'global');\n\n if (projectSkills.length > 0) {\n console.log(chalk.blue('Project skills:'));\n for (const skill of projectSkills) {\n printSkill(skill);\n }\n console.log();\n }\n\n if (globalSkills.length > 0) {\n console.log(chalk.dim('Global skills:'));\n for (const skill of globalSkills) {\n printSkill(skill);\n }\n console.log();\n }\n\n const enabledCount = skills.filter(s => s.enabled).length;\n const disabledCount = skills.length - enabledCount;\n\n console.log(\n chalk.dim(\n `${projectSkills.length} project, ${globalSkills.length} global` +\n (disabledCount > 0 ? `, ${disabledCount} disabled` : '')\n )\n );\n\n return 0;\n }\n}\n\nfunction printSkill(skill: { name: string; description: string; enabled: boolean; location: string }) {\n const status = skill.enabled ? chalk.green('✓') : chalk.red('○');\n const name = skill.enabled ? skill.name : chalk.dim(skill.name);\n const desc = chalk.dim(truncate(skill.description, 50));\n\n console.log(` ${status} ${name}`);\n if (skill.description) {\n console.log(` ${desc}`);\n }\n}\n\nfunction truncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 3) + '...';\n}\n","// Re-export commonly used functions with proper adapters\nimport {\n loadConfig,\n getSearchDirs as coreGetSearchDirs,\n getInstallDir as coreGetInstallDir,\n getAgentConfigPath as coreGetAgentConfigPath,\n initProject as coreInitProject,\n loadSkillMetadata as coreLoadSkillMetadata,\n saveSkillMetadata as coreSaveSkillMetadata,\n} from '@skillkit/core';\nimport { getAdapter, detectAgent } from '@skillkit/agents';\nimport type { AgentType, AgentAdapterInfo } from '@skillkit/core';\n\n// Re-export metadata functions directly (they don't need adapter bridging)\nexport const loadSkillMetadata = coreLoadSkillMetadata;\nexport const saveSkillMetadata = coreSaveSkillMetadata;\n\nexport function getSearchDirs(agentType?: AgentType): string[] {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetSearchDirs(adapterInfo);\n}\n\nexport function getInstallDir(global = false, agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetInstallDir(adapterInfo, global);\n}\n\nexport function getAgentConfigPath(agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreGetAgentConfigPath(adapterInfo);\n}\n\nexport async function initProject(agentType?: AgentType): Promise<void> {\n const type = agentType || (await detectAgent());\n const adapter = getAdapter(type);\n const adapterInfo: AgentAdapterInfo = {\n type: adapter.type,\n name: adapter.name,\n skillsDir: adapter.skillsDir,\n configFile: adapter.configFile,\n };\n return coreInitProject(type, adapterInfo);\n}\n","import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { findSkill, readSkillContent } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\n\nexport class ReadCommand extends Command {\n static override paths = [['read'], ['r']];\n\n static override usage = Command.Usage({\n description: 'Read skill content for AI agent consumption',\n examples: [\n ['Read a single skill', '$0 read pdf'],\n ['Read multiple skills', '$0 read pdf,xlsx,docx'],\n ['Read with verbose output', '$0 read pdf --verbose'],\n ],\n });\n\n skills = Option.String({ required: true });\n\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show additional information',\n });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n\n const skillNames = this.skills\n .split(',')\n .map(s => s.trim())\n .filter(s => s.length > 0);\n\n if (skillNames.length === 0) {\n console.error(chalk.red('No skill names provided'));\n return 1;\n }\n\n let exitCode = 0;\n\n for (const skillName of skillNames) {\n const skill = findSkill(skillName, searchDirs);\n\n if (!skill) {\n console.error(chalk.red(`Skill not found: ${skillName}`));\n console.error(chalk.dim('Available directories:'));\n searchDirs.forEach(d => console.error(chalk.dim(` - ${d}`)));\n exitCode = 1;\n continue;\n }\n\n if (!skill.enabled) {\n console.error(chalk.yellow(`Skill disabled: ${skillName}`));\n console.error(chalk.dim('Enable with: skillkit enable ' + skillName));\n exitCode = 1;\n continue;\n }\n\n const content = readSkillContent(skill.path);\n\n if (!content) {\n console.error(chalk.red(`Could not read SKILL.md for: ${skillName}`));\n exitCode = 1;\n continue;\n }\n\n console.log(`Reading: ${skillName}`);\n console.log(`Base directory: ${skill.path}`);\n console.log();\n console.log(content);\n console.log();\n console.log(`Skill read: ${skillName}`);\n\n if (skillNames.length > 1 && skillName !== skillNames[skillNames.length - 1]) {\n console.log('\\n---\\n');\n }\n }\n\n return exitCode;\n }\n}\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { loadConfig, findAllSkills } from '@skillkit/core';\nimport type { AgentType } from '@skillkit/core';\nimport { getAdapter, detectAgent } from '@skillkit/agents';\nimport { getSearchDirs, getAgentConfigPath } from '../helpers.js';\n\nexport class SyncCommand extends Command {\n static override paths = [['sync'], ['s']];\n\n static override usage = Command.Usage({\n description: 'Sync skills to agent configuration file',\n examples: [\n ['Sync all enabled skills', '$0 sync'],\n ['Sync to specific file', '$0 sync --output AGENTS.md'],\n ['Sync for specific agent', '$0 sync --agent cursor'],\n ['Only sync enabled skills', '$0 sync --enabled-only'],\n ],\n });\n\n output = Option.String('--output,-o', {\n description: 'Output file path (default: agent-specific config file)',\n });\n\n agent = Option.String('--agent,-a', {\n description: 'Target agent type (claude-code, cursor, codex, etc.)',\n });\n\n enabledOnly = Option.Boolean('--enabled-only,-e', true, {\n description: 'Only include enabled skills (default: true)',\n });\n\n yes = Option.Boolean('--yes,-y', false, {\n description: 'Skip confirmation prompts',\n });\n\n async execute(): Promise<number> {\n try {\n let agentType: AgentType;\n\n if (this.agent) {\n agentType = this.agent as AgentType;\n } else {\n const config = loadConfig();\n agentType = config.agent || (await detectAgent());\n }\n\n const adapter = getAdapter(agentType);\n\n const outputPath = this.output || getAgentConfigPath(agentType);\n\n const searchDirs = getSearchDirs(agentType);\n let skills = findAllSkills(searchDirs);\n\n if (this.enabledOnly) {\n skills = skills.filter(s => s.enabled);\n }\n\n if (skills.length === 0) {\n console.log(chalk.yellow('No skills found to sync'));\n console.log(chalk.dim('Install skills with: skillkit install <source>'));\n return 0;\n }\n\n console.log(chalk.cyan(`Syncing ${skills.length} skill(s) for ${adapter.name}:`));\n skills.forEach(s => {\n const status = s.enabled ? chalk.green('✓') : chalk.dim('○');\n const location = s.location === 'project' ? chalk.blue('[project]') : chalk.dim('[global]');\n console.log(` ${status} ${s.name} ${location}`);\n });\n console.log();\n\n const config = adapter.generateConfig(skills);\n\n if (!config) {\n console.log(chalk.yellow('No configuration generated'));\n return 0;\n }\n\n let existingContent = '';\n if (existsSync(outputPath)) {\n existingContent = readFileSync(outputPath, 'utf-8');\n }\n\n const newContent = updateConfigContent(existingContent, config, agentType);\n\n const dir = dirname(outputPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(outputPath, newContent, 'utf-8');\n\n console.log(chalk.green(`Synced to ${outputPath}`));\n console.log(chalk.dim(`Agent: ${adapter.name}`));\n\n return 0;\n } catch (error) {\n console.error(chalk.red('Sync failed'));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n\nfunction updateConfigContent(existing: string, newConfig: string, agentType: AgentType): string {\n const markers: Record<string, { start: string; end: string }> = {\n 'claude-code': {\n start: '<!-- SKILLS_TABLE_START -->',\n end: '<!-- SKILLS_TABLE_END -->',\n },\n cursor: {\n start: '<!-- SKILLS_DATA_START -->',\n end: '<!-- SKILLS_DATA_END -->',\n },\n universal: {\n start: '<!-- SKILLKIT_SKILLS_START -->',\n end: '<!-- SKILLKIT_SKILLS_END -->',\n },\n };\n\n const agentMarkers = markers[agentType] || markers.universal;\n\n const startIdx = existing.indexOf(agentMarkers.start);\n const endIdx = existing.indexOf(agentMarkers.end);\n\n if (startIdx !== -1 && endIdx !== -1) {\n return (\n existing.slice(0, startIdx) +\n newConfig.slice(newConfig.indexOf(agentMarkers.start)) +\n existing.slice(endIdx + agentMarkers.end.length)\n );\n }\n\n const genericStart = '<!-- SKILLKIT_SKILLS_START -->';\n const genericEnd = '<!-- SKILLKIT_SKILLS_END -->';\n const gStartIdx = existing.indexOf(genericStart);\n const gEndIdx = existing.indexOf(genericEnd);\n\n if (gStartIdx !== -1 && gEndIdx !== -1) {\n return (\n existing.slice(0, gStartIdx) + newConfig + existing.slice(gEndIdx + genericEnd.length)\n );\n }\n\n if (existing.trim()) {\n return existing + '\\n\\n' + newConfig;\n }\n\n return newConfig;\n}\n","import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport type { AgentType } from '@skillkit/core';\nimport { detectAgent, getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { initProject } from '../helpers.js';\n\nexport class InitCommand extends Command {\n static override paths = [['init']];\n\n static override usage = Command.Usage({\n description: 'Initialize skillkit in a project',\n examples: [\n ['Auto-detect agent and initialize', '$0 init'],\n ['Initialize for specific agent', '$0 init --agent cursor'],\n ['List supported agents', '$0 init --list'],\n ],\n });\n\n agent = Option.String('--agent,-a', {\n description: 'Target agent type',\n });\n\n list = Option.Boolean('--list,-l', false, {\n description: 'List supported agents',\n });\n\n async execute(): Promise<number> {\n if (this.list) {\n console.log(chalk.cyan('Supported agents:\\n'));\n const adapters = getAllAdapters();\n\n for (const adapter of adapters) {\n console.log(` ${chalk.green(adapter.type)}`);\n console.log(` Name: ${adapter.name}`);\n console.log(` Skills dir: ${adapter.skillsDir}`);\n console.log(` Config file: ${adapter.configFile}`);\n console.log();\n }\n\n return 0;\n }\n\n try {\n let agentType: AgentType;\n\n if (this.agent) {\n agentType = this.agent as AgentType;\n } else {\n console.log(chalk.dim('Auto-detecting agent...'));\n agentType = await detectAgent();\n }\n\n const adapter = getAdapter(agentType);\n\n console.log(chalk.cyan(`Initializing for ${adapter.name}...`));\n\n await initProject(agentType);\n\n console.log();\n console.log(chalk.green('Initialized successfully!'));\n console.log();\n console.log(chalk.dim('Created:'));\n console.log(chalk.dim(` - ${adapter.skillsDir}/ (skills directory)`));\n console.log(chalk.dim(` - skillkit.yaml (config file)`));\n console.log(chalk.dim(` - ${adapter.configFile} (agent config)`));\n console.log();\n console.log(chalk.cyan('Next steps:'));\n console.log(chalk.dim(' 1. Install skills: skillkit install owner/repo'));\n console.log(chalk.dim(' 2. Sync config: skillkit sync'));\n console.log(chalk.dim(' 3. Use skills: skillkit read <skill-name>'));\n\n return 0;\n } catch (error) {\n console.error(chalk.red('Initialization failed'));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n","import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { setSkillEnabled, findSkill } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\n\nexport class EnableCommand extends Command {\n static override paths = [['enable']];\n\n static override usage = Command.Usage({\n description: 'Enable one or more skills',\n examples: [\n ['Enable a skill', '$0 enable pdf'],\n ['Enable multiple skills', '$0 enable pdf xlsx docx'],\n ],\n });\n\n skills = Option.Rest({ required: 1 });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n let success = 0;\n let failed = 0;\n\n for (const skillName of this.skills) {\n const skill = findSkill(skillName, searchDirs);\n\n if (!skill) {\n console.log(chalk.red(`Skill not found: ${skillName}`));\n failed++;\n continue;\n }\n\n if (skill.enabled) {\n console.log(chalk.dim(`Already enabled: ${skillName}`));\n continue;\n }\n\n const result = setSkillEnabled(skill.path, true);\n\n if (result) {\n console.log(chalk.green(`Enabled: ${skillName}`));\n success++;\n } else {\n console.log(chalk.red(`Failed to enable: ${skillName}`));\n failed++;\n }\n }\n\n if (success > 0) {\n console.log(chalk.dim('\\nRun `skillkit sync` to update your agent config'));\n }\n\n return failed > 0 ? 1 : 0;\n }\n}\n\nexport class DisableCommand extends Command {\n static override paths = [['disable']];\n\n static override usage = Command.Usage({\n description: 'Disable one or more skills',\n examples: [\n ['Disable a skill', '$0 disable pdf'],\n ['Disable multiple skills', '$0 disable pdf xlsx docx'],\n ],\n });\n\n skills = Option.Rest({ required: 1 });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n let success = 0;\n let failed = 0;\n\n for (const skillName of this.skills) {\n const skill = findSkill(skillName, searchDirs);\n\n if (!skill) {\n console.log(chalk.red(`Skill not found: ${skillName}`));\n failed++;\n continue;\n }\n\n if (!skill.enabled) {\n console.log(chalk.dim(`Already disabled: ${skillName}`));\n continue;\n }\n\n const result = setSkillEnabled(skill.path, false);\n\n if (result) {\n console.log(chalk.yellow(`Disabled: ${skillName}`));\n success++;\n } else {\n console.log(chalk.red(`Failed to disable: ${skillName}`));\n failed++;\n }\n }\n\n if (success > 0) {\n console.log(chalk.dim('\\nRun `skillkit sync` to update your agent config'));\n }\n\n return failed > 0 ? 1 : 0;\n }\n}\n","import { existsSync, rmSync } from 'node:fs';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { findSkill } from '@skillkit/core';\nimport { getSearchDirs } from '../helpers.js';\n\nexport class RemoveCommand extends Command {\n static override paths = [['remove'], ['rm'], ['uninstall']];\n\n static override usage = Command.Usage({\n description: 'Remove installed skills',\n examples: [\n ['Remove a skill', '$0 remove pdf'],\n ['Remove multiple skills', '$0 remove pdf xlsx docx'],\n ['Force removal without confirmation', '$0 remove pdf --force'],\n ],\n });\n\n skills = Option.Rest({ required: 1 });\n\n force = Option.Boolean('--force,-f', false, {\n description: 'Skip confirmation',\n });\n\n async execute(): Promise<number> {\n const searchDirs = getSearchDirs();\n let removed = 0;\n let failed = 0;\n\n for (const skillName of this.skills) {\n const skill = findSkill(skillName, searchDirs);\n\n if (!skill) {\n console.log(chalk.yellow(`Skill not found: ${skillName}`));\n continue;\n }\n\n if (!existsSync(skill.path)) {\n console.log(chalk.yellow(`Path not found: ${skill.path}`));\n continue;\n }\n\n try {\n rmSync(skill.path, { recursive: true, force: true });\n console.log(chalk.green(`Removed: ${skillName}`));\n removed++;\n } catch (error) {\n console.log(chalk.red(`Failed to remove: ${skillName}`));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n failed++;\n }\n }\n\n if (removed > 0) {\n console.log(chalk.dim('\\nRun `skillkit sync` to update your agent config'));\n }\n\n return failed > 0 ? 1 : 0;\n }\n}\n","import { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Command, Option } from 'clipanion';\nimport { detectProvider, isLocalPath, getProvider } from '@skillkit/core';\nimport type { SkillMetadata, GitProvider, AgentType } from '@skillkit/core';\nimport { isPathInside } from '@skillkit/core';\nimport { getAdapter, detectAgent } from '@skillkit/agents';\nimport { getInstallDir, saveSkillMetadata } from '../helpers.js';\n\nexport class InstallCommand extends Command {\n static override paths = [['install'], ['i']];\n\n static override usage = Command.Usage({\n description: 'Install skills from GitHub, GitLab, Bitbucket, or local path',\n examples: [\n ['Install from GitHub', '$0 install owner/repo'],\n ['Install from GitLab', '$0 install gitlab:owner/repo'],\n ['Install from Bitbucket', '$0 install bitbucket:owner/repo'],\n ['Install specific skills (CI/CD)', '$0 install owner/repo --skills=pdf,xlsx'],\n ['Install all skills non-interactively', '$0 install owner/repo --all'],\n ['Install from local path', '$0 install ./my-skills'],\n ['Install globally', '$0 install owner/repo --global'],\n ['List available skills', '$0 install owner/repo --list'],\n ['Install to specific agents', '$0 install owner/repo --agent claude-code --agent cursor'],\n ],\n });\n\n source = Option.String({ required: true });\n\n skills = Option.String('--skills,-s', {\n description: 'Comma-separated list of skills to install (non-interactive)',\n });\n\n all = Option.Boolean('--all,-a', false, {\n description: 'Install all discovered skills (non-interactive)',\n });\n\n yes = Option.Boolean('--yes,-y', false, {\n description: 'Skip confirmation prompts',\n });\n\n global = Option.Boolean('--global,-g', false, {\n description: 'Install to global skills directory',\n });\n\n force = Option.Boolean('--force,-f', false, {\n description: 'Overwrite existing skills',\n });\n\n provider = Option.String('--provider,-p', {\n description: 'Force specific provider (github, gitlab, bitbucket)',\n });\n\n list = Option.Boolean('--list,-l', false, {\n description: 'List available skills without installing',\n });\n\n agent = Option.Array('--agent', {\n description: 'Target specific agents (can specify multiple)',\n });\n\n async execute(): Promise<number> {\n const spinner = ora();\n\n try {\n let providerAdapter = detectProvider(this.source);\n\n if (this.provider) {\n providerAdapter = getProvider(this.provider as GitProvider);\n }\n\n if (!providerAdapter) {\n console.error(chalk.red(`Could not detect provider for: ${this.source}`));\n console.error(chalk.dim('Use --provider flag or specify source as:'));\n console.error(chalk.dim(' GitHub: owner/repo or https://github.com/owner/repo'));\n console.error(chalk.dim(' GitLab: gitlab:owner/repo or https://gitlab.com/owner/repo'));\n console.error(chalk.dim(' Bitbucket: bitbucket:owner/repo'));\n console.error(chalk.dim(' Local: ./path or ~/path'));\n return 1;\n }\n\n spinner.start(`Fetching from ${providerAdapter.name}...`);\n\n const result = await providerAdapter.clone(this.source, '', { depth: 1 });\n\n if (!result.success || !result.path) {\n spinner.fail(chalk.red(result.error || 'Failed to fetch source'));\n return 1;\n }\n\n spinner.succeed(`Found ${result.skills?.length || 0} skill(s)`);\n\n const discoveredSkills = result.discoveredSkills || [];\n\n if (this.list) {\n if (discoveredSkills.length === 0) {\n console.log(chalk.yellow('\\nNo skills found in this repository'));\n } else {\n console.log(chalk.cyan('\\nAvailable skills:\\n'));\n for (const skill of discoveredSkills) {\n console.log(` ${chalk.green(skill.name)}`);\n }\n console.log();\n console.log(chalk.dim(`Total: ${discoveredSkills.length} skill(s)`));\n console.log(chalk.dim('\\nTo install specific skills: skillkit install <source> --skills=skill1,skill2'));\n console.log(chalk.dim('To install all skills: skillkit install <source> --all'));\n }\n\n const cleanupPath = result.tempRoot || result.path;\n if (!isLocalPath(this.source) && cleanupPath && existsSync(cleanupPath)) {\n rmSync(cleanupPath, { recursive: true, force: true });\n }\n\n return 0;\n }\n\n let skillsToInstall = discoveredSkills;\n\n if (this.skills) {\n const requestedSkills = this.skills.split(',').map(s => s.trim());\n const available = discoveredSkills.map(s => s.name);\n const notFound = requestedSkills.filter(s => !available.includes(s));\n\n if (notFound.length > 0) {\n console.error(chalk.red(`Skills not found: ${notFound.join(', ')}`));\n console.error(chalk.dim(`Available: ${available.join(', ')}`));\n return 1;\n }\n\n skillsToInstall = discoveredSkills.filter(s => requestedSkills.includes(s.name));\n } else if (this.all || this.yes) {\n skillsToInstall = discoveredSkills;\n } else {\n skillsToInstall = discoveredSkills;\n\n if (skillsToInstall.length > 0) {\n console.log(chalk.cyan('\\nSkills to install:'));\n skillsToInstall.forEach(s => console.log(chalk.dim(` - ${s.name}`)));\n console.log();\n }\n }\n\n if (skillsToInstall.length === 0) {\n console.log(chalk.yellow('No skills to install'));\n return 0;\n }\n\n let targetAgents: AgentType[];\n if (this.agent && this.agent.length > 0) {\n targetAgents = this.agent as AgentType[];\n } else {\n const detectedAgent = await detectAgent();\n targetAgents = [detectedAgent];\n }\n\n let totalInstalled = 0;\n const installResults: { agent: string; dir: string; count: number }[] = [];\n\n for (const agentType of targetAgents) {\n const adapter = getAdapter(agentType);\n const installDir = getInstallDir(this.global, agentType);\n\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n if (targetAgents.length > 1) {\n console.log(chalk.cyan(`\\nInstalling to ${adapter.name}...`));\n }\n\n let installed = 0;\n for (const skill of skillsToInstall) {\n const skillName = skill.name;\n const sourcePath = skill.path;\n const targetPath = join(installDir, skillName);\n\n if (existsSync(targetPath) && !this.force) {\n console.log(chalk.yellow(` Skipping ${skillName} (already exists, use --force to overwrite)`));\n continue;\n }\n\n const securityRoot = result.tempRoot || result.path;\n if (!isPathInside(sourcePath, securityRoot)) {\n console.log(chalk.red(` Skipping ${skillName} (path traversal detected)`));\n continue;\n }\n\n spinner.start(`Installing ${skillName}...`);\n\n try {\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n\n cpSync(sourcePath, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: this.source,\n sourceType: providerAdapter.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n spinner.succeed(chalk.green(`Installed ${skillName}`));\n installed++;\n } catch (error) {\n spinner.fail(chalk.red(`Failed to install ${skillName}`));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n }\n }\n\n totalInstalled += installed;\n installResults.push({ agent: adapter.name, dir: installDir, count: installed });\n }\n\n const cleanupPath = result.tempRoot || result.path;\n if (!isLocalPath(this.source) && cleanupPath && existsSync(cleanupPath)) {\n rmSync(cleanupPath, { recursive: true, force: true });\n }\n\n console.log();\n if (targetAgents.length > 1) {\n console.log(chalk.green(`Installed ${totalInstalled} skill(s) across ${targetAgents.length} agents:`));\n for (const r of installResults) {\n console.log(chalk.dim(` - ${r.agent}: ${r.count} skill(s) to ${r.dir}`));\n }\n } else {\n console.log(chalk.green(`Installed ${totalInstalled} skill(s) to ${installResults[0]?.dir}`));\n }\n\n if (!this.yes) {\n console.log(chalk.dim('\\nRun `skillkit sync` to update your agent config'));\n }\n\n return 0;\n } catch (error) {\n spinner.fail(chalk.red('Installation failed'));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n","import { existsSync, rmSync, cpSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Command, Option } from 'clipanion';\nimport { findAllSkills, findSkill, detectProvider, isLocalPath } from '@skillkit/core';\nimport { getSearchDirs, loadSkillMetadata, saveSkillMetadata } from '../helpers.js';\n\nexport class UpdateCommand extends Command {\n static override paths = [['update'], ['u']];\n\n static override usage = Command.Usage({\n description: 'Update skills from their original sources',\n examples: [\n ['Update all skills', '$0 update'],\n ['Update specific skills', '$0 update pdf xlsx'],\n ['Force update (overwrite local changes)', '$0 update --force'],\n ],\n });\n\n skills = Option.Rest();\n\n force = Option.Boolean('--force,-f', false, {\n description: 'Force update even if local changes exist',\n });\n\n async execute(): Promise<number> {\n const spinner = ora();\n const searchDirs = getSearchDirs();\n\n let skillsToUpdate;\n\n if (this.skills.length > 0) {\n skillsToUpdate = this.skills\n .map(name => findSkill(name, searchDirs))\n .filter((s): s is NonNullable<typeof s> => s !== null);\n\n const notFound = this.skills.filter(name => !findSkill(name, searchDirs));\n if (notFound.length > 0) {\n console.log(chalk.yellow(`Skills not found: ${notFound.join(', ')}`));\n }\n } else {\n skillsToUpdate = findAllSkills(searchDirs);\n }\n\n if (skillsToUpdate.length === 0) {\n console.log(chalk.yellow('No skills to update'));\n return 0;\n }\n\n console.log(chalk.cyan(`Updating ${skillsToUpdate.length} skill(s)...\\n`));\n\n let updated = 0;\n let skipped = 0;\n let failed = 0;\n\n for (const skill of skillsToUpdate) {\n const metadata = loadSkillMetadata(skill.path);\n\n if (!metadata) {\n console.log(chalk.dim(`Skipping ${skill.name} (no metadata, reinstall needed)`));\n skipped++;\n continue;\n }\n\n spinner.start(`Updating ${skill.name}...`);\n\n try {\n if (isLocalPath(metadata.source)) {\n const localPath = metadata.subpath\n ? join(metadata.source, metadata.subpath)\n : metadata.source;\n\n if (!existsSync(localPath)) {\n spinner.warn(chalk.yellow(`${skill.name}: local source missing`));\n skipped++;\n continue;\n }\n\n const skillMdPath = join(localPath, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n spinner.warn(chalk.yellow(`${skill.name}: no SKILL.md at source`));\n skipped++;\n continue;\n }\n\n rmSync(skill.path, { recursive: true, force: true });\n cpSync(localPath, skill.path, { recursive: true, dereference: true });\n\n metadata.updatedAt = new Date().toISOString();\n saveSkillMetadata(skill.path, metadata);\n\n spinner.succeed(chalk.green(`Updated ${skill.name}`));\n updated++;\n } else {\n const provider = detectProvider(metadata.source);\n\n if (!provider) {\n spinner.warn(chalk.yellow(`${skill.name}: unknown provider`));\n skipped++;\n continue;\n }\n\n const result = await provider.clone(metadata.source, '', { depth: 1 });\n\n if (!result.success || !result.path) {\n spinner.fail(chalk.red(`${skill.name}: ${result.error || 'clone failed'}`));\n failed++;\n continue;\n }\n\n const sourcePath = metadata.subpath\n ? join(result.path, metadata.subpath)\n : result.path;\n\n const skillMdPath = join(sourcePath, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n spinner.warn(chalk.yellow(`${skill.name}: no SKILL.md in source`));\n rmSync(result.path, { recursive: true, force: true });\n skipped++;\n continue;\n }\n\n rmSync(skill.path, { recursive: true, force: true });\n cpSync(sourcePath, skill.path, { recursive: true, dereference: true });\n\n rmSync(result.path, { recursive: true, force: true });\n\n metadata.updatedAt = new Date().toISOString();\n saveSkillMetadata(skill.path, metadata);\n\n spinner.succeed(chalk.green(`Updated ${skill.name}`));\n updated++;\n }\n } catch (error) {\n spinner.fail(chalk.red(`Failed to update ${skill.name}`));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n failed++;\n }\n }\n\n console.log();\n console.log(\n chalk.cyan(\n `Updated: ${updated}, Skipped: ${skipped}, Failed: ${failed}`\n )\n );\n\n return failed > 0 ? 1 : 0;\n }\n}\n","import { existsSync, readdirSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { validateSkill } from '@skillkit/core';\n\nexport class ValidateCommand extends Command {\n static override paths = [['validate'], ['v']];\n\n static override usage = Command.Usage({\n description: 'Validate skill(s) against the Agent Skills specification (agentskills.io)',\n examples: [\n ['Validate a skill directory', '$0 validate ./my-skill'],\n ['Validate all skills in a directory', '$0 validate ./skills --all'],\n ],\n });\n\n skillPath = Option.String({ required: true });\n\n all = Option.Boolean('--all,-a', false, {\n description: 'Validate all skills in the directory',\n });\n\n async execute(): Promise<number> {\n const targetPath = this.skillPath;\n\n if (!existsSync(targetPath)) {\n console.error(chalk.red(`Path does not exist: ${targetPath}`));\n return 1;\n }\n\n const skillPaths: string[] = [];\n\n if (this.all) {\n const entries = readdirSync(targetPath, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const skillPath = join(targetPath, entry.name);\n if (existsSync(join(skillPath, 'SKILL.md'))) {\n skillPaths.push(skillPath);\n }\n }\n }\n\n if (skillPaths.length === 0) {\n console.error(chalk.yellow('No skills found in directory'));\n return 1;\n }\n } else {\n skillPaths.push(targetPath);\n }\n\n let hasErrors = false;\n\n for (const skillPath of skillPaths) {\n const skillName = basename(skillPath);\n const result = validateSkill(skillPath);\n\n if (result.valid) {\n console.log(chalk.green(`✓ ${skillName}`));\n\n if (result.warnings && result.warnings.length > 0) {\n result.warnings.forEach(w => {\n console.log(chalk.yellow(` ⚠ ${w}`));\n });\n }\n } else {\n console.log(chalk.red(`✗ ${skillName}`));\n result.errors.forEach(e => {\n console.log(chalk.red(` • ${e}`));\n });\n hasErrors = true;\n }\n }\n\n console.log();\n\n if (hasErrors) {\n console.log(chalk.red('Validation failed'));\n console.log(chalk.dim('See https://agentskills.io/specification for the complete format'));\n return 1;\n }\n\n console.log(chalk.green(`Validated ${skillPaths.length} skill(s) successfully`));\n return 0;\n }\n}\n","import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\n\nexport class CreateCommand extends Command {\n static override paths = [['create'], ['new']];\n\n static override usage = Command.Usage({\n description: 'Create a new skill with proper structure',\n examples: [\n ['Create a new skill', '$0 create my-skill'],\n ['Create with all optional directories', '$0 create my-skill --full'],\n ['Create with scripts directory', '$0 create my-skill --scripts'],\n ],\n });\n\n name = Option.String({ required: true, name: 'skill-name' });\n\n full = Option.Boolean('--full,-f', false, {\n description: 'Include all optional directories (references, scripts, assets)',\n });\n\n scripts = Option.Boolean('--scripts', false, {\n description: 'Include scripts directory',\n });\n\n references = Option.Boolean('--references', false, {\n description: 'Include references directory',\n });\n\n assets = Option.Boolean('--assets', false, {\n description: 'Include assets directory',\n });\n\n directory = Option.String('--dir,-d', {\n description: 'Parent directory to create skill in (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const skillName = this.name.toLowerCase();\n\n if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(skillName)) {\n console.error(chalk.red('Invalid skill name'));\n console.error(chalk.dim('Must be lowercase alphanumeric with hyphens (e.g., my-skill)'));\n return 1;\n }\n\n const parentDir = this.directory || process.cwd();\n const skillDir = join(parentDir, skillName);\n\n if (existsSync(skillDir)) {\n console.error(chalk.red(`Directory already exists: ${skillDir}`));\n return 1;\n }\n\n try {\n mkdirSync(skillDir, { recursive: true });\n\n const skillMd = generateSkillMd(skillName);\n writeFileSync(join(skillDir, 'SKILL.md'), skillMd);\n\n if (this.full || this.references) {\n const refsDir = join(skillDir, 'references');\n mkdirSync(refsDir);\n writeFileSync(join(refsDir, '.gitkeep'), '');\n }\n\n if (this.full || this.scripts) {\n const scriptsDir = join(skillDir, 'scripts');\n mkdirSync(scriptsDir);\n writeFileSync(join(scriptsDir, '.gitkeep'), '');\n }\n\n if (this.full || this.assets) {\n const assetsDir = join(skillDir, 'assets');\n mkdirSync(assetsDir);\n writeFileSync(join(assetsDir, '.gitkeep'), '');\n }\n\n console.log(chalk.green(`Created skill: ${skillName}`));\n console.log();\n console.log(chalk.dim('Structure:'));\n console.log(chalk.dim(` ${skillDir}/`));\n console.log(chalk.dim(' ├── SKILL.md'));\n if (this.full || this.references) console.log(chalk.dim(' ├── references/'));\n if (this.full || this.scripts) console.log(chalk.dim(' ├── scripts/'));\n if (this.full || this.assets) console.log(chalk.dim(' └── assets/'));\n console.log();\n console.log(chalk.cyan('Next steps:'));\n console.log(chalk.dim(' 1. Edit SKILL.md with your instructions'));\n console.log(chalk.dim(' 2. Validate: skillkit validate ' + skillDir));\n console.log(chalk.dim(' 3. Test: skillkit read ' + skillName));\n\n return 0;\n } catch (error) {\n console.error(chalk.red('Failed to create skill'));\n console.error(chalk.dim(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n\nfunction generateSkillMd(name: string): string {\n const title = name\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n return `---\nname: ${name}\ndescription: Describe what this skill does and when to use it. Include trigger keywords.\n---\n\n# ${title}\n\nInstructions for the AI agent on how to use this skill.\n\n## When to Use\n\n- Scenario 1\n- Scenario 2\n\n## Steps\n\n1. First step\n2. Second step\n3. Third step\n`;\n}\n","import { Command } from 'clipanion';\n\nexport class UICommand extends Command {\n static override paths = [['ui'], ['tui']];\n\n static override usage = Command.Usage({\n description: 'Launch the interactive TUI (Terminal User Interface)',\n examples: [\n ['Open interactive TUI', '$0 ui'],\n ['Alias for TUI', '$0 tui'],\n ],\n });\n\n async execute(): Promise<number> {\n const { startTUI } = await import('@skillkit/tui');\n await startTUI();\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join, basename, dirname } from 'node:path';\nimport chalk from 'chalk';\nimport {\n type AgentType,\n translateSkill,\n translateSkillFile,\n getSupportedTranslationAgents,\n translatorRegistry,\n findAllSkills,\n} from '@skillkit/core';\nimport { getAdapter, getAllAdapters } from '@skillkit/agents';\nimport { getSearchDirs } from '../helpers.js';\n\n/**\n * Translate skills between different AI agent formats\n */\nexport class TranslateCommand extends Command {\n static override paths = [['translate']];\n\n static override usage = Command.Usage({\n description: 'Translate skills between different AI agent formats',\n details: `\n This command translates skills from one AI agent format to another.\n\n Supported formats:\n - SKILL.md (Claude Code, Codex, Gemini CLI, and 10+ more)\n - Cursor MDC (.mdc files with globs)\n - Windsurf rules (.windsurfrules)\n - GitHub Copilot instructions (copilot-instructions.md)\n\n Translation is bidirectional - you can translate from any format to any other.\n `,\n examples: [\n ['Translate a skill to Cursor format', '$0 translate my-skill --to cursor'],\n ['Translate all skills to Windsurf', '$0 translate --all --to windsurf'],\n ['Translate a file directly', '$0 translate ./SKILL.md --to cursor --output ./my-skill.mdc'],\n ['List all supported agents', '$0 translate --list'],\n ['Preview translation without writing', '$0 translate my-skill --to cursor --dry-run'],\n ],\n });\n\n // Skill name or path\n source = Option.String({ required: false });\n\n // Target agent\n to = Option.String('--to,-t', {\n description: 'Target agent to translate to',\n });\n\n // Source agent (auto-detected if not specified)\n from = Option.String('--from,-f', {\n description: 'Source agent format (auto-detected if not specified)',\n });\n\n // Output path\n output = Option.String('--output,-o', {\n description: 'Output file path (default: agent skills directory)',\n });\n\n // Translate all installed skills\n all = Option.Boolean('--all,-a', false, {\n description: 'Translate all installed skills',\n });\n\n // Dry run (preview without writing)\n dryRun = Option.Boolean('--dry-run,-n', false, {\n description: 'Preview translation without writing files',\n });\n\n // Add metadata comments\n metadata = Option.Boolean('--metadata,-m', false, {\n description: 'Add translation metadata to output',\n });\n\n // Force overwrite\n force = Option.Boolean('--force', false, {\n description: 'Overwrite existing files',\n });\n\n // List supported agents\n list = Option.Boolean('--list,-l', false, {\n description: 'List all supported agents and formats',\n });\n\n // Show compatibility info\n compat = Option.Boolean('--compat,-c', false, {\n description: 'Show compatibility info between agents',\n });\n\n async execute(): Promise<number> {\n // List supported agents\n if (this.list) {\n return this.listAgents();\n }\n\n // Show compatibility info\n if (this.compat) {\n return this.showCompatibility();\n }\n\n // Validate target agent\n if (!this.to) {\n console.error(chalk.red('Error: --to/-t target agent is required'));\n console.log(chalk.gray('Use --list to see all supported agents'));\n return 1;\n }\n\n const targetAgent = this.to as AgentType;\n if (!getSupportedTranslationAgents().includes(targetAgent)) {\n console.error(chalk.red(`Error: Unknown target agent \"${this.to}\"`));\n console.log(chalk.gray('Use --list to see all supported agents'));\n return 1;\n }\n\n // Translate all skills\n if (this.all) {\n return this.translateAll(targetAgent);\n }\n\n // Translate single skill\n if (!this.source) {\n console.error(chalk.red('Error: Please specify a skill name or path, or use --all'));\n return 1;\n }\n\n return this.translateSingle(this.source, targetAgent);\n }\n\n /**\n * List all supported agents and their formats\n */\n private listAgents(): number {\n console.log(chalk.bold('\\nSupported Agents for Translation:\\n'));\n\n const agents = getSupportedTranslationAgents();\n const adapters = getAllAdapters();\n\n // Group by format\n const byFormat: Record<string, AgentType[]> = {};\n for (const agent of agents) {\n const format = translatorRegistry.getFormatForAgent(agent);\n if (!byFormat[format]) byFormat[format] = [];\n byFormat[format].push(agent);\n }\n\n // Display by format\n const formatNames: Record<string, string> = {\n 'skill-md': 'SKILL.md Format (Standard)',\n 'cursor-mdc': 'Cursor MDC Format',\n 'markdown-rules': 'Markdown Rules Format',\n 'external': 'External Systems',\n };\n\n for (const [format, formatAgents] of Object.entries(byFormat)) {\n console.log(chalk.cyan(` ${formatNames[format] || format}:`));\n for (const agent of formatAgents) {\n const adapter = adapters.find(a => a.type === agent);\n const name = adapter?.name || agent;\n console.log(` ${chalk.green(agent.padEnd(16))} ${chalk.gray(name)}`);\n }\n console.log();\n }\n\n console.log(chalk.gray('All formats can translate to any other format.'));\n console.log(chalk.gray('Use --compat to see compatibility details.\\n'));\n\n return 0;\n }\n\n /**\n * Show compatibility between agents\n */\n private showCompatibility(): number {\n if (!this.from || !this.to) {\n console.error(chalk.red('Error: Both --from and --to are required for compatibility check'));\n return 1;\n }\n\n const fromAgent = this.from as AgentType;\n const toAgent = this.to as AgentType;\n\n const info = translatorRegistry.getCompatibilityInfo(fromAgent, toAgent);\n\n console.log(chalk.bold(`\\nTranslation: ${fromAgent} → ${toAgent}\\n`));\n\n if (info.supported) {\n console.log(chalk.green(' ✓ Translation supported'));\n } else {\n console.log(chalk.red(' ✗ Translation not supported'));\n return 1;\n }\n\n if (info.warnings.length > 0) {\n console.log(chalk.yellow('\\n Warnings:'));\n for (const warning of info.warnings) {\n console.log(chalk.yellow(` • ${warning}`));\n }\n }\n\n if (info.lossyFields.length > 0) {\n console.log(chalk.gray('\\n Fields with reduced functionality:'));\n for (const field of info.lossyFields) {\n console.log(chalk.gray(` • ${field}`));\n }\n }\n\n console.log();\n return 0;\n }\n\n /**\n * Translate all installed skills\n */\n private async translateAll(targetAgent: AgentType): Promise<number> {\n const searchDirs = getSearchDirs();\n const skills = findAllSkills(searchDirs);\n\n if (skills.length === 0) {\n console.log(chalk.yellow('No skills found to translate'));\n return 0;\n }\n\n console.log(chalk.bold(`\\nTranslating ${skills.length} skill(s) to ${targetAgent}...\\n`));\n\n let success = 0;\n let failed = 0;\n\n for (const skill of skills) {\n const skillMdPath = join(skill.path, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n console.log(chalk.yellow(` ⚠ ${skill.name}: No SKILL.md found`));\n failed++;\n continue;\n }\n\n const result = translateSkillFile(skillMdPath, targetAgent, {\n addMetadata: this.metadata,\n });\n\n if (result.success) {\n if (this.dryRun) {\n console.log(chalk.green(` ✓ ${skill.name} → ${result.filename} (dry run)`));\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) {\n console.log(chalk.gray(` ${warning}`));\n }\n }\n } else {\n // Determine output path\n const targetAdapter = getAdapter(targetAgent);\n const outputDir = this.output || join(process.cwd(), targetAdapter.skillsDir, skill.name);\n\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n const outputPath = join(outputDir, result.filename);\n\n if (existsSync(outputPath) && !this.force) {\n console.log(chalk.yellow(` ⚠ ${skill.name}: ${outputPath} exists (use --force)`));\n failed++;\n continue;\n }\n\n writeFileSync(outputPath, result.content, 'utf-8');\n console.log(chalk.green(` ✓ ${skill.name} → ${outputPath}`));\n }\n\n if (result.incompatible.length > 0) {\n for (const item of result.incompatible) {\n console.log(chalk.gray(` ⚠ ${item}`));\n }\n }\n\n success++;\n } else {\n console.log(chalk.red(` ✗ ${skill.name}: Translation failed`));\n for (const item of result.incompatible) {\n console.log(chalk.red(` ${item}`));\n }\n failed++;\n }\n }\n\n console.log();\n console.log(chalk.bold(`Translated: ${success}, Failed: ${failed}`));\n\n return failed > 0 ? 1 : 0;\n }\n\n /**\n * Translate a single skill\n */\n private async translateSingle(source: string, targetAgent: AgentType): Promise<number> {\n let sourcePath: string;\n let skillName: string;\n\n // Check if source is a file path\n if (existsSync(source)) {\n sourcePath = source;\n skillName = basename(dirname(source));\n if (skillName === '.') {\n skillName = basename(source).replace(/\\.(md|mdc)$/i, '');\n }\n } else {\n // Search for skill by name\n const searchDirs = getSearchDirs();\n let found = false;\n\n for (const dir of searchDirs) {\n const skillPath = join(dir, source);\n const skillMdPath = join(skillPath, 'SKILL.md');\n\n if (existsSync(skillMdPath)) {\n sourcePath = skillMdPath;\n skillName = source;\n found = true;\n break;\n }\n }\n\n if (!found) {\n console.error(chalk.red(`Error: Skill \"${source}\" not found`));\n console.log(chalk.gray('Searched in:'));\n for (const dir of searchDirs) {\n console.log(chalk.gray(` ${dir}`));\n }\n return 1;\n }\n }\n\n // Read and translate\n const content = readFileSync(sourcePath!, 'utf-8');\n const result = translateSkill(content, targetAgent, {\n addMetadata: this.metadata,\n sourceFilename: basename(sourcePath!),\n });\n\n if (!result.success) {\n console.error(chalk.red('Translation failed:'));\n for (const item of result.incompatible) {\n console.error(chalk.red(` ${item}`));\n }\n return 1;\n }\n\n // Show warnings\n if (result.warnings.length > 0) {\n console.log(chalk.yellow('\\nWarnings:'));\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` • ${warning}`));\n }\n }\n\n // Show incompatible features\n if (result.incompatible.length > 0) {\n console.log(chalk.gray('\\nIncompatible features:'));\n for (const item of result.incompatible) {\n console.log(chalk.gray(` • ${item}`));\n }\n }\n\n // Dry run - just show preview\n if (this.dryRun) {\n console.log(chalk.bold(`\\nTranslated content (${result.filename}):\\n`));\n console.log(chalk.gray('─'.repeat(60)));\n console.log(result.content);\n console.log(chalk.gray('─'.repeat(60)));\n return 0;\n }\n\n // Determine output path\n let outputPath: string;\n if (this.output) {\n outputPath = this.output;\n } else {\n const targetAdapter = getAdapter(targetAgent);\n const outputDir = join(process.cwd(), targetAdapter.skillsDir, skillName!);\n\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n outputPath = join(outputDir, result.filename);\n }\n\n // Check for existing file\n if (existsSync(outputPath) && !this.force) {\n console.error(chalk.red(`Error: ${outputPath} already exists`));\n console.log(chalk.gray('Use --force to overwrite'));\n return 1;\n }\n\n // Write output\n const outputDir = dirname(outputPath);\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n writeFileSync(outputPath, result.content, 'utf-8');\n\n console.log(chalk.green(`\\n✓ Translated to ${outputPath}`));\n console.log(chalk.gray(` Format: ${result.targetFormat}`));\n console.log(chalk.gray(` Agent: ${result.targetAgent}`));\n\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport {\n type AgentType,\n type ProjectContext,\n ContextManager,\n createContextSync,\n analyzeProject,\n getStackTags,\n} from '@skillkit/core';\nimport { getAllAdapters } from '@skillkit/agents';\n\n/**\n * Context command - manage project context for multi-agent sync\n */\nexport class ContextCommand extends Command {\n static override paths = [['context']];\n\n static override usage = Command.Usage({\n description: 'Manage project context for multi-agent skill synchronization',\n details: `\n The context command helps you configure your project once and sync skills\n across all AI coding agents.\n\n Subcommands:\n - init: Initialize project context with auto-detection\n - show: Display current project context\n - export: Export context to a file\n - import: Import context from a file\n - sync: Sync skills to all configured agents\n - detect: Run project detection\n `,\n examples: [\n ['Initialize project context', '$0 context init'],\n ['Show current context', '$0 context show'],\n ['Sync skills to all agents', '$0 context sync'],\n ['Sync to specific agent', '$0 context sync --agent cursor'],\n ['Export context', '$0 context export --output context.yaml'],\n ],\n });\n\n // Subcommand (init, show, export, import, sync, detect)\n action = Option.String({ required: false });\n\n // Agent filter\n agent = Option.String('--agent,-a', {\n description: 'Target agent for sync',\n });\n\n // Output file for export\n output = Option.String('--output,-o', {\n description: 'Output file path',\n });\n\n // Input file for import\n input = Option.String('--input,-i', {\n description: 'Input file path',\n });\n\n // Force overwrite\n force = Option.Boolean('--force,-f', false, {\n description: 'Force overwrite existing files',\n });\n\n // Dry run\n dryRun = Option.Boolean('--dry-run,-n', false, {\n description: 'Preview without making changes',\n });\n\n // Merge on import\n merge = Option.Boolean('--merge,-m', false, {\n description: 'Merge with existing context on import',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed output',\n });\n\n async execute(): Promise<number> {\n const action = this.action || 'show';\n\n switch (action) {\n case 'init':\n return this.initContext();\n case 'show':\n return this.showContext();\n case 'export':\n return this.exportContext();\n case 'import':\n return this.importContext();\n case 'sync':\n return this.syncContext();\n case 'detect':\n return this.detectProject();\n case 'agents':\n return this.listAgents();\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.gray('Available actions: init, show, export, import, sync, detect, agents'));\n return 1;\n }\n }\n\n /**\n * Initialize project context\n */\n private async initContext(): Promise<number> {\n const manager = new ContextManager(process.cwd());\n\n if (manager.exists() && !this.force) {\n console.log(chalk.yellow('Context already exists. Use --force to reinitialize.'));\n return this.showContext();\n }\n\n console.log(chalk.cyan('Initializing project context...\\n'));\n\n const context = manager.init({ force: this.force });\n\n console.log(chalk.green('✓ Context initialized\\n'));\n console.log(chalk.gray(` Location: .skillkit/context.yaml\\n`));\n\n // Show summary\n this.printContextSummary(context);\n\n // Detect agents\n const sync = createContextSync(process.cwd());\n const detected = sync.detectAgents();\n if (detected.length > 0) {\n console.log(chalk.cyan('\\nDetected agents:'));\n for (const agent of detected) {\n console.log(` ${chalk.green('•')} ${agent}`);\n }\n\n // Update context with detected agents\n manager.updateAgents({\n detected,\n synced: detected,\n });\n }\n\n console.log(chalk.gray('\\nRun `skillkit context sync` to sync skills to all agents.'));\n\n return 0;\n }\n\n /**\n * Show current context\n */\n private async showContext(): Promise<number> {\n const manager = new ContextManager(process.cwd());\n const context = manager.load();\n\n if (!context) {\n console.log(chalk.yellow('No context found. Run `skillkit context init` first.'));\n return 1;\n }\n\n if (this.json) {\n console.log(JSON.stringify(context, null, 2));\n return 0;\n }\n\n this.printContextSummary(context);\n\n if (this.verbose) {\n console.log(chalk.gray('\\nFull context:'));\n console.log(chalk.gray(JSON.stringify(context, null, 2)));\n }\n\n return 0;\n }\n\n /**\n * Export context to file\n */\n private async exportContext(): Promise<number> {\n const manager = new ContextManager(process.cwd());\n const context = manager.get();\n\n if (!context) {\n console.error(chalk.red('No context found. Run `skillkit context init` first.'));\n return 1;\n }\n\n const format = this.json ? 'json' : 'yaml';\n const content = manager.export({\n format,\n includeSkills: true,\n includeAgents: true,\n });\n\n if (this.output) {\n const outputPath = resolve(this.output);\n if (existsSync(outputPath) && !this.force) {\n console.error(chalk.red(`File exists: ${outputPath}. Use --force to overwrite.`));\n return 1;\n }\n\n writeFileSync(outputPath, content, 'utf-8');\n console.log(chalk.green(`✓ Context exported to ${outputPath}`));\n } else {\n // Print to stdout\n console.log(content);\n }\n\n return 0;\n }\n\n /**\n * Import context from file\n */\n private async importContext(): Promise<number> {\n if (!this.input) {\n console.error(chalk.red('Error: --input/-i file path is required'));\n return 1;\n }\n\n const inputPath = resolve(this.input);\n if (!existsSync(inputPath)) {\n console.error(chalk.red(`File not found: ${inputPath}`));\n return 1;\n }\n\n const manager = new ContextManager(process.cwd());\n const content = readFileSync(inputPath, 'utf-8');\n\n try {\n const context = manager.import(content, {\n merge: this.merge,\n overwrite: this.force,\n });\n\n console.log(chalk.green('✓ Context imported successfully'));\n this.printContextSummary(context);\n return 0;\n } catch (error) {\n console.error(chalk.red(`Import failed: ${error}`));\n return 1;\n }\n }\n\n /**\n * Sync skills to all configured agents\n */\n private async syncContext(): Promise<number> {\n const manager = new ContextManager(process.cwd());\n const context = manager.get();\n\n if (!context) {\n console.log(chalk.yellow('No context found. Initializing...'));\n manager.init();\n }\n\n const sync = createContextSync(process.cwd());\n\n console.log(chalk.cyan('Syncing skills across agents...\\n'));\n\n // Determine target agents\n const agents = this.agent ? [this.agent as AgentType] : undefined;\n\n const report = await sync.syncAll({\n agents,\n force: this.force,\n dryRun: this.dryRun,\n });\n\n // Print results\n for (const result of report.results) {\n const status = result.success ? chalk.green('✓') : chalk.red('✗');\n console.log(`${status} ${result.agent}: ${result.skillsSynced} synced, ${result.skillsSkipped} skipped`);\n\n if (this.verbose && result.files.length > 0) {\n for (const file of result.files) {\n console.log(chalk.gray(` → ${file}`));\n }\n }\n\n if (result.warnings.length > 0) {\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` ⚠ ${warning}`));\n }\n }\n\n if (result.errors.length > 0) {\n for (const error of result.errors) {\n console.log(chalk.red(` ✗ ${error}`));\n }\n }\n }\n\n console.log();\n console.log(chalk.bold(`Summary: ${report.successfulAgents}/${report.totalAgents} agents, ${report.totalSkills} skills`));\n\n if (this.dryRun) {\n console.log(chalk.gray('\\n(Dry run - no files were written)'));\n }\n\n return report.successfulAgents === report.totalAgents ? 0 : 1;\n }\n\n /**\n * Detect project stack\n */\n private async detectProject(): Promise<number> {\n console.log(chalk.cyan('Analyzing project...\\n'));\n\n const stack = analyzeProject(process.cwd());\n const tags = getStackTags(stack);\n\n // Languages\n if (stack.languages.length > 0) {\n console.log(chalk.bold('Languages:'));\n for (const lang of stack.languages) {\n const version = lang.version ? ` (${lang.version})` : '';\n console.log(` ${chalk.green('•')} ${lang.name}${version}`);\n }\n console.log();\n }\n\n // Frameworks\n if (stack.frameworks.length > 0) {\n console.log(chalk.bold('Frameworks:'));\n for (const fw of stack.frameworks) {\n const version = fw.version ? ` (${fw.version})` : '';\n console.log(` ${chalk.green('•')} ${fw.name}${version}`);\n }\n console.log();\n }\n\n // Libraries\n if (stack.libraries.length > 0) {\n console.log(chalk.bold('Libraries:'));\n for (const lib of stack.libraries) {\n const version = lib.version ? ` (${lib.version})` : '';\n console.log(` ${chalk.green('•')} ${lib.name}${version}`);\n }\n console.log();\n }\n\n // Styling\n if (stack.styling.length > 0) {\n console.log(chalk.bold('Styling:'));\n for (const style of stack.styling) {\n console.log(` ${chalk.green('•')} ${style.name}`);\n }\n console.log();\n }\n\n // Testing\n if (stack.testing.length > 0) {\n console.log(chalk.bold('Testing:'));\n for (const test of stack.testing) {\n console.log(` ${chalk.green('•')} ${test.name}`);\n }\n console.log();\n }\n\n // Databases\n if (stack.databases.length > 0) {\n console.log(chalk.bold('Databases:'));\n for (const db of stack.databases) {\n console.log(` ${chalk.green('•')} ${db.name}`);\n }\n console.log();\n }\n\n // Tools\n if (stack.tools.length > 0) {\n console.log(chalk.bold('Tools:'));\n for (const tool of stack.tools) {\n console.log(` ${chalk.green('•')} ${tool.name}`);\n }\n console.log();\n }\n\n // Tags\n if (tags.length > 0) {\n console.log(chalk.bold('Recommended skill tags:'));\n console.log(` ${chalk.cyan(tags.join(', '))}`);\n console.log();\n }\n\n if (this.json) {\n console.log(chalk.gray('\\nJSON:'));\n console.log(JSON.stringify(stack, null, 2));\n }\n\n return 0;\n }\n\n /**\n * List detected agents\n */\n private async listAgents(): Promise<number> {\n const sync = createContextSync(process.cwd());\n const detected = sync.detectAgents();\n const status = sync.checkStatus();\n const adapters = getAllAdapters();\n\n console.log(chalk.bold('\\nAgent Status:\\n'));\n\n for (const [agent, info] of Object.entries(status)) {\n const adapter = adapters.find(a => a.type === agent);\n const name = adapter?.name || agent;\n const isDetected = detected.includes(agent as AgentType);\n\n const statusIcon = info.hasSkills ? chalk.green('●') : isDetected ? chalk.yellow('○') : chalk.gray('○');\n const skillInfo = info.skillCount > 0 ? chalk.gray(` (${info.skillCount} skills)`) : '';\n\n console.log(` ${statusIcon} ${name.padEnd(20)} ${chalk.gray(agent)}${skillInfo}`);\n\n if (this.verbose && info.skills.length > 0) {\n for (const skill of info.skills) {\n console.log(chalk.gray(` └─ ${skill}`));\n }\n }\n }\n\n console.log();\n console.log(chalk.gray('Legend: ● has skills, ○ detected/configured, ○ not detected'));\n console.log();\n\n return 0;\n }\n\n /**\n * Print context summary\n */\n private printContextSummary(context: ProjectContext): void {\n console.log(chalk.bold('Project:'));\n console.log(` Name: ${chalk.cyan(context.project.name)}`);\n if (context.project.type) {\n console.log(` Type: ${context.project.type}`);\n }\n if (context.project.description) {\n console.log(` Description: ${context.project.description}`);\n }\n\n // Stack summary\n const stackItems: string[] = [];\n if (context.stack.languages.length > 0) {\n stackItems.push(`${context.stack.languages.length} languages`);\n }\n if (context.stack.frameworks.length > 0) {\n stackItems.push(`${context.stack.frameworks.length} frameworks`);\n }\n if (context.stack.libraries.length > 0) {\n stackItems.push(`${context.stack.libraries.length} libraries`);\n }\n if (context.stack.databases.length > 0) {\n stackItems.push(`${context.stack.databases.length} databases`);\n }\n\n if (stackItems.length > 0) {\n console.log(`\\n${chalk.bold('Stack:')} ${stackItems.join(', ')}`);\n\n // Show top items\n const topFrameworks = context.stack.frameworks.slice(0, 3).map(f => f.name);\n if (topFrameworks.length > 0) {\n console.log(` Frameworks: ${chalk.cyan(topFrameworks.join(', '))}`);\n }\n\n const topLibs = context.stack.libraries.slice(0, 3).map(l => l.name);\n if (topLibs.length > 0) {\n console.log(` Libraries: ${chalk.cyan(topLibs.join(', '))}`);\n }\n }\n\n // Skills summary\n if (context.skills) {\n console.log(`\\n${chalk.bold('Skills:')}`);\n console.log(` Installed: ${context.skills.installed?.length || 0}`);\n console.log(` Auto-sync: ${context.skills.autoSync ? 'enabled' : 'disabled'}`);\n }\n\n // Agents summary\n if (context.agents) {\n console.log(`\\n${chalk.bold('Agents:')}`);\n if (context.agents.primary) {\n console.log(` Primary: ${chalk.cyan(context.agents.primary)}`);\n }\n if (context.agents.synced?.length) {\n console.log(` Synced: ${context.agents.synced.join(', ')}`);\n }\n }\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n type ProjectProfile,\n type ScoredSkill,\n ContextManager,\n RecommendationEngine,\n buildSkillIndex,\n saveIndex,\n loadIndex as loadIndexFromCache,\n isIndexStale,\n INDEX_PATH,\n KNOWN_SKILL_REPOS,\n} from '@skillkit/core';\n\n/**\n * Recommend command - get smart skill recommendations based on project analysis\n */\nexport class RecommendCommand extends Command {\n static override paths = [['recommend'], ['rec']];\n\n static override usage = Command.Usage({\n description: 'Get skill recommendations based on your project',\n details: `\n The recommend command analyzes your project and suggests skills that match\n your technology stack, frameworks, and patterns.\n\n It scores skills based on:\n - Framework compatibility (React, Vue, Next.js, etc.)\n - Language match (TypeScript, Python, etc.)\n - Library alignment (Tailwind, Prisma, etc.)\n - Tag relevance\n - Popularity and quality metrics\n\n Run \"skillkit recommend --update\" to refresh the skill index from known sources.\n `,\n examples: [\n ['Get recommendations', '$0 recommend'],\n ['Show top 5 recommendations', '$0 recommend --limit 5'],\n ['Filter by category', '$0 recommend --category security'],\n ['Show detailed reasons', '$0 recommend --verbose'],\n ['Update skill index', '$0 recommend --update'],\n ['Search for skills by task', '$0 recommend --task \"authentication\"'],\n ['Search for skills (alias)', '$0 recommend --search \"testing\"'],\n ],\n });\n\n // Limit number of results\n limit = Option.String('--limit,-l', {\n description: 'Maximum number of recommendations',\n });\n\n // Minimum score threshold\n minScore = Option.String('--min-score', {\n description: 'Minimum match score (0-100)',\n });\n\n // Filter by category/tag\n category = Option.Array('--category,-c', {\n description: 'Filter by category (can be used multiple times)',\n });\n\n // Verbose output with reasons\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed match reasons',\n });\n\n // Update index\n update = Option.Boolean('--update,-u', false, {\n description: 'Update skill index from sources',\n });\n\n // Search mode (--search or --task)\n search = Option.String('--search,-s', {\n description: 'Search skills by task/query',\n });\n\n // Task alias for search (GSD-style)\n task = Option.String('--task,-t', {\n description: 'Search skills by task (alias for --search)',\n });\n\n // Include installed skills\n includeInstalled = Option.Boolean('--include-installed', false, {\n description: 'Include already installed skills',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n // Handle index update\n if (this.update) {\n return await this.updateIndex();\n }\n\n // Load or create project profile\n const profile = await this.getProjectProfile(targetPath);\n if (!profile) {\n console.error(chalk.red('Failed to analyze project'));\n return 1;\n }\n\n // Load skill index\n const index = this.loadIndex();\n if (!index || index.skills.length === 0) {\n console.log(chalk.yellow('No skill index found.'));\n console.log(chalk.dim('Run \"skillkit recommend --update\" to fetch skills from known sources.'));\n console.log(chalk.dim('Or install skills manually with \"skillkit install <source>\"\\n'));\n\n // Still show project profile\n this.showProjectProfile(profile);\n return 0;\n }\n\n // Create recommendation engine\n const engine = new RecommendationEngine();\n engine.loadIndex(index);\n\n // Handle search mode (--search or --task)\n const searchQuery = this.search || this.task;\n if (searchQuery) {\n return this.handleSearch(engine, searchQuery);\n }\n\n // Get recommendations\n const result = engine.recommend(profile, {\n limit: this.limit ? parseInt(this.limit, 10) : 10,\n minScore: this.minScore ? parseInt(this.minScore, 10) : 30,\n categories: this.category,\n excludeInstalled: !this.includeInstalled,\n includeReasons: this.verbose,\n });\n\n // Output results\n if (this.json) {\n console.log(JSON.stringify(result, null, 2));\n return 0;\n }\n\n this.displayRecommendations(result.recommendations, profile, result.totalSkillsScanned);\n return 0;\n }\n\n /**\n * Get project profile from context or by analyzing project\n */\n private async getProjectProfile(projectPath: string): Promise<ProjectProfile | null> {\n const manager = new ContextManager(projectPath);\n let context = manager.get();\n\n if (!context) {\n // Auto-analyze project\n if (!this.json) {\n console.log(chalk.dim('Analyzing project...\\n'));\n }\n context = manager.init();\n }\n\n if (!context) {\n return null;\n }\n\n // Convert ProjectContext to ProjectProfile\n return {\n name: context.project.name,\n type: context.project.type,\n stack: context.stack,\n patterns: context.patterns,\n installedSkills: context.skills?.installed || [],\n excludedSkills: context.skills?.excluded || [],\n };\n }\n\n /**\n * Show project profile summary\n */\n private showProjectProfile(profile: ProjectProfile): void {\n console.log(chalk.cyan('Project Profile:'));\n console.log(` Name: ${chalk.bold(profile.name)}`);\n if (profile.type) {\n console.log(` Type: ${profile.type}`);\n }\n\n const stackItems: string[] = [];\n for (const lang of profile.stack.languages) {\n stackItems.push(`${lang.name}${lang.version ? ` ${lang.version}` : ''}`);\n }\n for (const fw of profile.stack.frameworks) {\n stackItems.push(`${fw.name}${fw.version ? ` ${fw.version}` : ''}`);\n }\n\n if (stackItems.length > 0) {\n console.log(` Stack: ${chalk.dim(stackItems.join(', '))}`);\n }\n console.log();\n }\n\n /**\n * Display recommendations\n */\n private displayRecommendations(\n recommendations: ScoredSkill[],\n profile: ProjectProfile,\n totalScanned: number\n ): void {\n // Show project profile\n this.showProjectProfile(profile);\n\n if (recommendations.length === 0) {\n console.log(chalk.yellow('No matching skills found.'));\n console.log(chalk.dim('Try lowering the minimum score with --min-score'));\n return;\n }\n\n console.log(chalk.cyan(`Recommended Skills (${recommendations.length} of ${totalScanned} scanned):\\n`));\n\n for (const rec of recommendations) {\n const scoreColor = rec.score >= 70 ? chalk.green : rec.score >= 50 ? chalk.yellow : chalk.dim;\n const scoreBar = this.getScoreBar(rec.score);\n\n console.log(` ${scoreColor(`${rec.score}%`)} ${scoreBar} ${chalk.bold(rec.skill.name)}`);\n\n if (rec.skill.description) {\n console.log(` ${chalk.dim(truncate(rec.skill.description, 70))}`);\n }\n\n if (rec.skill.source) {\n console.log(` ${chalk.dim('Source:')} ${rec.skill.source}`);\n }\n\n if (this.verbose && rec.reasons.length > 0) {\n console.log(chalk.dim(' Reasons:'));\n for (const reason of rec.reasons.filter(r => r.weight > 0)) {\n console.log(` ${chalk.dim('•')} ${reason.description} (+${reason.weight})`);\n }\n }\n\n if (rec.warnings.length > 0) {\n for (const warning of rec.warnings) {\n console.log(` ${chalk.yellow('⚠')} ${warning}`);\n }\n }\n\n console.log();\n }\n\n console.log(chalk.dim('Install with: skillkit install <source>'));\n }\n\n /**\n * Generate a visual score bar\n */\n private getScoreBar(score: number): string {\n const filled = Math.round(score / 10);\n const empty = 10 - filled;\n return chalk.green('█'.repeat(filled)) + chalk.dim('░'.repeat(empty));\n }\n\n /**\n * Handle search mode\n */\n private handleSearch(engine: RecommendationEngine, query: string): number {\n const results = engine.search({\n query,\n limit: this.limit ? parseInt(this.limit, 10) : 10,\n semantic: true,\n filters: {\n minScore: this.minScore ? parseInt(this.minScore, 10) : undefined,\n },\n });\n\n if (this.json) {\n console.log(JSON.stringify(results, null, 2));\n return 0;\n }\n\n if (results.length === 0) {\n console.log(chalk.yellow(`No skills found matching \"${query}\"`));\n return 0;\n }\n\n console.log(chalk.cyan(`Search results for \"${query}\" (${results.length} found):\\n`));\n\n for (const result of results) {\n const relevanceColor =\n result.relevance >= 70 ? chalk.green : result.relevance >= 50 ? chalk.yellow : chalk.dim;\n\n console.log(` ${relevanceColor(`${result.relevance}%`)} ${chalk.bold(result.skill.name)}`);\n\n if (result.snippet) {\n console.log(` ${chalk.dim(result.snippet)}`);\n }\n\n if (result.matchedTerms.length > 0) {\n console.log(` ${chalk.dim('Matched:')} ${result.matchedTerms.join(', ')}`);\n }\n\n console.log();\n }\n\n return 0;\n }\n\n /**\n * Load skill index from cache\n */\n private loadIndex() {\n const index = loadIndexFromCache();\n\n if (!index) {\n return null;\n }\n\n // Check if index is stale\n if (isIndexStale(index) && !this.json) {\n const lastUpdated = new Date(index.lastUpdated);\n const hoursSinceUpdate = (Date.now() - lastUpdated.getTime()) / (1000 * 60 * 60);\n console.log(\n chalk.dim(`Index is ${Math.round(hoursSinceUpdate)} hours old. Run --update to refresh.\\n`)\n );\n }\n\n return index;\n }\n\n /**\n * Update skill index from sources\n */\n private async updateIndex(): Promise<number> {\n console.log(chalk.cyan('Updating skill index from GitHub repositories...\\n'));\n console.log(chalk.dim(`Sources: ${KNOWN_SKILL_REPOS.map(r => `${r.owner}/${r.repo}`).join(', ')}\\n`));\n\n const spinner = ora('Fetching skills...').start();\n\n try {\n const { index, errors } = await buildSkillIndex(KNOWN_SKILL_REPOS, (message) => {\n spinner.text = message;\n });\n\n spinner.stop();\n\n // Report any errors\n if (errors.length > 0) {\n console.log(chalk.yellow('\\nWarnings:'));\n for (const error of errors) {\n console.log(chalk.dim(` • ${error}`));\n }\n console.log();\n }\n\n // Save the index\n saveIndex(index);\n\n console.log(chalk.green(`✓ Updated index with ${index.skills.length} skills`));\n if (index.sources.length > 0) {\n console.log(chalk.dim(` Sources: ${index.sources.map((s) => s.name).join(', ')}`));\n }\n console.log(chalk.dim(` Saved to: ${INDEX_PATH}\\n`));\n\n return 0;\n } catch (error) {\n spinner.fail('Failed to update index');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n}\n\n/**\n * Truncate string to max length\n */\nfunction truncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 3) + '...';\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { SessionManager } from '@skillkit/core';\n\n/**\n * Status command - show current session state\n */\nexport class StatusCommand extends Command {\n static override paths = [['status'], ['st']];\n\n static override usage = Command.Usage({\n description: 'Show current session state and execution progress',\n details: `\n The status command shows the current state of skill execution sessions,\n including any paused executions and recent history.\n `,\n examples: [\n ['Show session status', '$0 status'],\n ['Show with history', '$0 status --history'],\n ['Show JSON output', '$0 status --json'],\n ],\n });\n\n // Show history\n history = Option.Boolean('--history,-h', false, {\n description: 'Show execution history',\n });\n\n // History limit\n limit = Option.String('--limit,-l', {\n description: 'Limit history entries (default: 10)',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n const manager = new SessionManager(targetPath);\n const state = manager.get();\n\n if (this.json) {\n console.log(JSON.stringify(state || { message: 'No session found' }, null, 2));\n return 0;\n }\n\n if (!state) {\n console.log(chalk.dim('No active session found.'));\n console.log(chalk.dim('Run a skill with \"skillkit run <skill>\" to start a session.'));\n return 0;\n }\n\n // Show current execution\n if (state.currentExecution) {\n const exec = state.currentExecution;\n const statusColor = exec.status === 'paused' ? chalk.yellow : chalk.green;\n\n console.log(chalk.cyan('Current Execution:\\n'));\n console.log(` Skill: ${chalk.bold(exec.skillName)}`);\n console.log(` Source: ${chalk.dim(exec.skillSource)}`);\n console.log(` Status: ${statusColor(exec.status)}`);\n console.log(` Progress: ${exec.currentStep}/${exec.totalSteps} tasks`);\n console.log(` Started: ${chalk.dim(new Date(exec.startedAt).toLocaleString())}`);\n\n if (exec.pausedAt) {\n console.log(` Paused: ${chalk.dim(new Date(exec.pausedAt).toLocaleString())}`);\n }\n\n console.log(chalk.cyan('\\n Tasks:'));\n for (const task of exec.tasks) {\n const statusIcon = this.getStatusIcon(task.status);\n const statusText = this.getStatusColor(task.status)(task.status);\n console.log(` ${statusIcon} ${task.name} - ${statusText}`);\n if (task.error) {\n console.log(` ${chalk.red('Error:')} ${task.error}`);\n }\n }\n\n if (exec.status === 'paused') {\n console.log(chalk.yellow('\\n Resume with: skillkit resume'));\n }\n } else {\n console.log(chalk.dim('No active execution.'));\n }\n\n // Show history\n if (this.history || (!state.currentExecution && state.history.length > 0)) {\n const limit = this.limit ? parseInt(this.limit, 10) : 10;\n const history = manager.getHistory(limit);\n\n if (history.length > 0) {\n console.log(chalk.cyan('\\nExecution History:\\n'));\n\n for (const entry of history) {\n const statusColor = entry.status === 'completed' ? chalk.green : chalk.red;\n const duration = this.formatDuration(entry.durationMs);\n\n console.log(` ${statusColor('●')} ${chalk.bold(entry.skillName)}`);\n console.log(` ${chalk.dim(entry.skillSource)} • ${duration}`);\n console.log(` ${chalk.dim(new Date(entry.completedAt).toLocaleString())}`);\n\n if (entry.commits.length > 0) {\n console.log(` Commits: ${chalk.dim(entry.commits.join(', '))}`);\n }\n\n if (entry.error) {\n console.log(` ${chalk.red('Error:')} ${entry.error}`);\n }\n\n console.log();\n }\n }\n }\n\n // Show decisions\n if (state.decisions.length > 0) {\n console.log(chalk.cyan('Saved Decisions:\\n'));\n for (const decision of state.decisions.slice(0, 5)) {\n console.log(` ${chalk.dim(decision.key)}: ${decision.value}`);\n }\n if (state.decisions.length > 5) {\n console.log(chalk.dim(` ... and ${state.decisions.length - 5} more`));\n }\n }\n\n return 0;\n }\n\n private getStatusIcon(status: string): string {\n switch (status) {\n case 'completed':\n return chalk.green('✓');\n case 'failed':\n return chalk.red('✗');\n case 'in_progress':\n return chalk.blue('●');\n case 'paused':\n return chalk.yellow('⏸');\n default:\n return chalk.dim('○');\n }\n }\n\n private getStatusColor(status: string): (text: string) => string {\n switch (status) {\n case 'completed':\n return chalk.green;\n case 'failed':\n return chalk.red;\n case 'in_progress':\n return chalk.blue;\n case 'paused':\n return chalk.yellow;\n default:\n return chalk.dim;\n }\n }\n\n private formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const minutes = Math.floor(ms / 60000);\n const seconds = Math.floor((ms % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { SessionManager } from '@skillkit/core';\n\n/**\n * Pause command - pause current skill execution\n */\nexport class PauseCommand extends Command {\n static override paths = [['pause']];\n\n static override usage = Command.Usage({\n description: 'Pause current skill execution for later resumption',\n details: `\n The pause command saves the current execution state so you can\n continue later with \"skillkit resume\".\n\n This is useful when you need to:\n - Take a break from a long skill execution\n - Handle an interruption\n - Review progress before continuing\n `,\n examples: [\n ['Pause current execution', '$0 pause'],\n ],\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n const manager = new SessionManager(targetPath);\n const state = manager.get();\n\n if (!state) {\n console.log(chalk.yellow('No active session found.'));\n return 1;\n }\n\n if (!state.currentExecution) {\n console.log(chalk.yellow('No skill execution in progress.'));\n return 1;\n }\n\n if (state.currentExecution.status === 'paused') {\n console.log(chalk.yellow('Execution is already paused.'));\n console.log(chalk.dim('Resume with: skillkit resume'));\n return 0;\n }\n\n const success = manager.pause();\n\n if (success) {\n const exec = state.currentExecution;\n console.log(chalk.green('✓ Execution paused'));\n console.log();\n console.log(` Skill: ${chalk.bold(exec.skillName)}`);\n console.log(` Progress: ${exec.currentStep}/${exec.totalSteps} tasks completed`);\n console.log();\n console.log(chalk.dim('Resume with: skillkit resume'));\n console.log(chalk.dim('View status: skillkit status'));\n return 0;\n } else {\n console.log(chalk.red('Failed to pause execution.'));\n return 1;\n }\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { SessionManager } from '@skillkit/core';\n\n/**\n * Resume command - resume paused skill execution\n */\nexport class ResumeCommand extends Command {\n static override paths = [['resume']];\n\n static override usage = Command.Usage({\n description: 'Resume a paused skill execution',\n details: `\n The resume command continues a previously paused skill execution\n from where it left off.\n\n The execution state is preserved, including:\n - Completed tasks\n - User decisions\n - Modified files\n `,\n examples: [\n ['Resume paused execution', '$0 resume'],\n ],\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n const manager = new SessionManager(targetPath);\n const state = manager.get();\n\n if (!state) {\n console.log(chalk.yellow('No active session found.'));\n return 1;\n }\n\n if (!state.currentExecution) {\n console.log(chalk.yellow('No skill execution to resume.'));\n console.log(chalk.dim('Start a new execution with: skillkit run <skill>'));\n return 1;\n }\n\n if (state.currentExecution.status !== 'paused') {\n if (state.currentExecution.status === 'running') {\n console.log(chalk.yellow('Execution is already running.'));\n } else {\n console.log(chalk.yellow(`Execution is ${state.currentExecution.status}.`));\n }\n return 1;\n }\n\n const success = manager.resume();\n\n if (success) {\n const exec = state.currentExecution;\n console.log(chalk.green('✓ Execution resumed'));\n console.log();\n console.log(` Skill: ${chalk.bold(exec.skillName)}`);\n console.log(` Progress: ${exec.currentStep}/${exec.totalSteps} tasks`);\n console.log();\n\n // Show next task\n const nextTask = exec.tasks.find((t) => t.status === 'pending' || t.status === 'in_progress');\n if (nextTask) {\n console.log(` Next task: ${chalk.cyan(nextTask.name)}`);\n }\n\n console.log();\n console.log(chalk.dim('The execution will continue from where it left off.'));\n console.log(chalk.dim('View status: skillkit status'));\n return 0;\n } else {\n console.log(chalk.red('Failed to resume execution.'));\n return 1;\n }\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n loadWorkflowByName,\n loadWorkflow,\n validateWorkflow,\n createWorkflowOrchestrator,\n createSkillExecutor,\n createSimulatedSkillExecutor,\n type AgentType,\n} from '@skillkit/core';\n\n/**\n * Workflow Run command - execute a workflow\n */\nexport class WorkflowRunCommand extends Command {\n static override paths = [['workflow', 'run'], ['wf', 'run']];\n\n static override usage = Command.Usage({\n description: 'Execute a skill workflow',\n details: `\n The workflow run command executes a workflow definition,\n running skills in waves with parallel or sequential execution.\n\n Workflows are defined in YAML files in .skillkit/workflows/\n `,\n examples: [\n ['Run a workflow by name', '$0 workflow run setup-project'],\n ['Run a workflow from file', '$0 workflow run --file my-workflow.yaml'],\n ['Dry run (no execution)', '$0 workflow run setup-project --dry-run'],\n ],\n });\n\n // Workflow name\n workflowName = Option.String({ required: false });\n\n // Workflow file path\n file = Option.String('--file,-f', {\n description: 'Path to workflow YAML file',\n });\n\n // Dry run\n dryRun = Option.Boolean('--dry-run,-n', false, {\n description: 'Show what would be executed without running',\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed execution progress',\n });\n\n // Continue on error\n continueOnError = Option.Boolean('--continue-on-error', false, {\n description: 'Continue execution even if a skill fails',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n // Agent to use for execution\n agent = Option.String('--agent,-a', {\n description: 'Agent to use for skill execution (e.g., claude-code, codex)',\n });\n\n // Simulate execution (for testing)\n simulate = Option.Boolean('--simulate', false, {\n description: 'Simulate execution without running skills (for testing)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n // Load workflow\n let workflow;\n try {\n if (this.file) {\n workflow = loadWorkflow(resolve(this.file));\n } else if (this.workflowName) {\n workflow = loadWorkflowByName(targetPath, this.workflowName);\n if (!workflow) {\n console.error(chalk.red(`Workflow \"${this.workflowName}\" not found`));\n console.log(chalk.dim('List available workflows: skillkit workflow list'));\n return 1;\n }\n } else {\n console.error(chalk.red('Please specify a workflow name or --file'));\n return 1;\n }\n } catch (error) {\n console.error(chalk.red(`Failed to load workflow: ${error}`));\n return 1;\n }\n\n // Validate workflow\n const validation = validateWorkflow(workflow);\n if (!validation.valid) {\n console.error(chalk.red('Invalid workflow:'));\n for (const error of validation.errors) {\n console.error(chalk.red(` • ${error}`));\n }\n return 1;\n }\n\n // Dry run mode\n if (this.dryRun) {\n this.showDryRun(workflow);\n return 0;\n }\n\n // Execute workflow\n console.log(chalk.cyan(`Executing workflow: ${chalk.bold(workflow.name)}`));\n if (workflow.description) {\n console.log(chalk.dim(workflow.description));\n }\n console.log();\n\n const spinner = ora();\n let currentWave = -1;\n\n // Create the skill executor (real or simulated)\n const skillExecutor = this.simulate\n ? createSimulatedSkillExecutor({\n delay: 500,\n onExecute: (skillName) => {\n if (this.verbose && !this.json) {\n console.log(chalk.dim(` [Simulated] ${skillName}`));\n }\n },\n })\n : createSkillExecutor({\n projectPath: targetPath,\n preferredAgent: this.agent as AgentType | undefined,\n fallbackToAvailable: true,\n onExecutionEvent: (event) => {\n if (this.verbose && !this.json) {\n switch (event.type) {\n case 'skill_found':\n console.log(chalk.dim(` Found: ${event.message}`));\n break;\n case 'skill_not_found':\n console.log(chalk.red(` Not found: ${event.skillName}`));\n break;\n case 'agent_selected':\n console.log(chalk.dim(` Agent: ${event.agent}`));\n break;\n case 'execution_complete':\n if (!event.success) {\n console.log(chalk.red(` Error: ${event.error}`));\n }\n break;\n }\n }\n },\n });\n\n // Create orchestrator with real skill executor\n const orchestrator = createWorkflowOrchestrator(\n skillExecutor,\n (event) => {\n if (this.json) return;\n\n switch (event.type) {\n case 'wave_start':\n currentWave = event.waveIndex || 0;\n spinner.start(`Wave ${currentWave + 1}: ${event.waveName || 'Executing...'}`);\n break;\n\n case 'skill_start':\n if (this.verbose) {\n spinner.text = `Wave ${currentWave + 1}: Running ${event.skillName}...`;\n }\n break;\n\n case 'skill_complete':\n if (this.verbose) {\n const icon = event.status === 'completed' ? chalk.green('✓') : chalk.red('✗');\n console.log(` ${icon} ${event.skillName}`);\n }\n break;\n\n case 'wave_complete':\n const waveIcon = event.status === 'completed' ? chalk.green('✓') : chalk.red('✗');\n spinner.stopAndPersist({\n symbol: waveIcon,\n text: `Wave ${(event.waveIndex || 0) + 1}: ${event.waveName || 'Complete'}`,\n });\n break;\n\n case 'workflow_complete':\n console.log();\n if (event.status === 'completed') {\n console.log(chalk.green('✓ Workflow completed successfully'));\n } else {\n console.log(chalk.red(`✗ Workflow ${event.status}`));\n if (event.error) {\n console.log(chalk.red(` Error: ${event.error}`));\n }\n }\n break;\n }\n }\n );\n\n const execution = await orchestrator.execute(workflow);\n\n if (this.json) {\n console.log(JSON.stringify(execution, null, 2));\n }\n\n return execution.status === 'completed' ? 0 : 1;\n }\n\n private showDryRun(workflow: { name: string; description?: string; waves: Array<{ name?: string; parallel: boolean; skills: Array<string | { skill: string }> }> }): void {\n console.log(chalk.cyan('Dry Run - Workflow Execution Plan'));\n console.log();\n console.log(`Workflow: ${chalk.bold(workflow.name)}`);\n if (workflow.description) {\n console.log(`Description: ${chalk.dim(workflow.description)}`);\n }\n console.log();\n\n for (let i = 0; i < workflow.waves.length; i++) {\n const wave = workflow.waves[i];\n const modeLabel = wave.parallel ? chalk.blue('[parallel]') : chalk.yellow('[sequential]');\n\n console.log(`${chalk.cyan(`Wave ${i + 1}`)}: ${wave.name || 'Unnamed'} ${modeLabel}`);\n\n for (const skill of wave.skills) {\n const skillName = typeof skill === 'string' ? skill : skill.skill;\n console.log(` • ${skillName}`);\n }\n\n console.log();\n }\n\n console.log(chalk.dim('This is a dry run. No skills were executed.'));\n console.log(chalk.dim('Remove --dry-run to execute the workflow.'));\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { listWorkflows } from '@skillkit/core';\n\n/**\n * Workflow List command - list available workflows\n */\nexport class WorkflowListCommand extends Command {\n static override paths = [['workflow', 'list'], ['wf', 'list'], ['workflow', 'ls'], ['wf', 'ls']];\n\n static override usage = Command.Usage({\n description: 'List available workflows',\n details: `\n The workflow list command shows all available workflows\n defined in .skillkit/workflows/\n `,\n examples: [\n ['List all workflows', '$0 workflow list'],\n ['List with details', '$0 workflow list --verbose'],\n ],\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed workflow information',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n let workflows: ReturnType<typeof listWorkflows>;\n try {\n workflows = listWorkflows(targetPath);\n } catch (err) {\n console.log(chalk.red('Failed to list workflows.'));\n console.log(chalk.dim(String(err)));\n return 1;\n }\n\n if (this.json) {\n console.log(JSON.stringify(workflows, null, 2));\n return 0;\n }\n\n if (workflows.length === 0) {\n console.log(chalk.yellow('No workflows found.'));\n console.log(chalk.dim('Create a workflow with: skillkit workflow create'));\n console.log(chalk.dim('Or add YAML files to .skillkit/workflows/'));\n return 0;\n }\n\n console.log(chalk.cyan(`Available Workflows (${workflows.length}):\\n`));\n\n for (const workflow of workflows) {\n console.log(` ${chalk.bold(workflow.name)}`);\n\n if (workflow.description) {\n console.log(` ${chalk.dim(workflow.description)}`);\n }\n\n if (this.verbose) {\n console.log(` Version: ${chalk.dim(workflow.version || 'N/A')}`);\n console.log(` Waves: ${chalk.dim(workflow.waves.length.toString())}`);\n\n const totalSkills = workflow.waves.reduce(\n (sum, wave) => sum + wave.skills.length,\n 0\n );\n console.log(` Total Skills: ${chalk.dim(totalSkills.toString())}`);\n\n if (workflow.tags && workflow.tags.length > 0) {\n console.log(` Tags: ${chalk.dim(workflow.tags.join(', '))}`);\n }\n }\n\n console.log();\n }\n\n console.log(chalk.dim('Run a workflow with: skillkit workflow run <name>'));\n\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve } from 'node:path';\nimport chalk from 'chalk';\nimport { createWorkflowTemplate, saveWorkflow, serializeWorkflow } from '@skillkit/core';\n\n/**\n * Workflow Create command - create a new workflow\n */\nexport class WorkflowCreateCommand extends Command {\n static override paths = [['workflow', 'create'], ['wf', 'create'], ['workflow', 'new'], ['wf', 'new']];\n\n static override usage = Command.Usage({\n description: 'Create a new workflow',\n details: `\n The workflow create command creates a new workflow template\n that you can customize with your skill composition.\n `,\n examples: [\n ['Create a new workflow', '$0 workflow create my-workflow'],\n ['Create with description', '$0 workflow create setup-project --description \"Project setup workflow\"'],\n ['Print to stdout', '$0 workflow create my-workflow --stdout'],\n ],\n });\n\n // Workflow name\n workflowName = Option.String({ required: true });\n\n // Description\n description = Option.String('--description,-d', {\n description: 'Workflow description',\n });\n\n // Print to stdout instead of saving\n stdout = Option.Boolean('--stdout', false, {\n description: 'Print workflow YAML to stdout instead of saving',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n const workflow = createWorkflowTemplate(this.workflowName, this.description);\n\n if (this.stdout) {\n console.log(serializeWorkflow(workflow));\n return 0;\n }\n\n const filePath = saveWorkflow(targetPath, workflow);\n\n console.log(chalk.green(`✓ Created workflow: ${chalk.bold(this.workflowName)}`));\n console.log(chalk.dim(` File: ${filePath}`));\n console.log();\n console.log(chalk.dim('Edit the workflow file to add skills and configure waves.'));\n console.log(chalk.dim('Run with: skillkit workflow run ' + this.workflowName));\n\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve, join } from 'node:path';\nimport { existsSync, readFileSync, statSync } from 'node:fs';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n createExecutionEngine,\n discoverSkills,\n extractFrontmatter,\n type ExecutableSkill,\n type ExecutableTask,\n type AgentType,\n} from '@skillkit/core';\n\n/**\n * Run command - execute a skill\n */\nexport class RunCommand extends Command {\n static override paths = [['run']];\n\n static override usage = Command.Usage({\n description: 'Execute a skill with task-based orchestration',\n details: `\n The run command executes a skill, optionally breaking it down into\n tasks with verification checkpoints.\n\n Skills can be:\n - Installed skills (by name)\n - Local skill files (by path)\n - Remote skills (owner/repo/path)\n `,\n examples: [\n ['Run an installed skill', '$0 run typescript-strict-mode'],\n ['Run a local skill file', '$0 run ./my-skill/SKILL.md'],\n ['Dry run (show what would happen)', '$0 run typescript-strict-mode --dry-run'],\n ['Run with verification', '$0 run setup-testing --verify'],\n ],\n });\n\n // Skill name or path\n skillRef = Option.String({ required: true });\n\n // Target agent\n agent = Option.String('--agent,-a', {\n description: 'Target agent (claude-code, cursor, etc.)',\n });\n\n // Dry run\n dryRun = Option.Boolean('--dry-run,-n', false, {\n description: 'Show what would be executed without running',\n });\n\n // Enable verification\n verify = Option.Boolean('--verify', false, {\n description: 'Run verification checks after each task',\n });\n\n // Auto-commit\n autoCommit = Option.Boolean('--auto-commit', false, {\n description: 'Create git commits after each task',\n });\n\n // Continue on error\n continueOnError = Option.Boolean('--continue-on-error', false, {\n description: 'Continue execution even if a task fails',\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed execution progress',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Project path\n projectPath = Option.String('--path,-p', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n // Load the skill\n const skill = await this.loadSkill(targetPath);\n if (!skill) {\n return 1;\n }\n\n // Show skill info\n if (!this.json) {\n console.log(chalk.cyan(`Executing skill: ${chalk.bold(skill.name)}`));\n if (skill.description) {\n console.log(chalk.dim(skill.description));\n }\n console.log();\n }\n\n // Dry run mode\n if (this.dryRun) {\n this.showDryRun(skill);\n return 0;\n }\n\n const spinner = ora();\n let currentTask = '';\n\n // Create execution engine\n const engine = createExecutionEngine(targetPath, {\n onProgress: (event) => {\n if (this.json) return;\n\n switch (event.type) {\n case 'task_start':\n currentTask = event.taskName || '';\n spinner.start(`Task ${(event.taskIndex || 0) + 1}/${event.totalTasks}: ${currentTask}`);\n break;\n\n case 'task_complete':\n const icon = event.status === 'completed' ? chalk.green('✓') : chalk.red('✗');\n spinner.stopAndPersist({\n symbol: icon,\n text: `Task ${(event.taskIndex || 0) + 1}/${event.totalTasks}: ${currentTask}`,\n });\n if (event.error && this.verbose) {\n console.log(chalk.red(` Error: ${event.error}`));\n }\n break;\n\n case 'checkpoint':\n spinner.info(`Checkpoint: ${event.message}`);\n break;\n\n case 'verification':\n if (this.verbose) {\n console.log(chalk.dim(` ${event.message}`));\n }\n break;\n\n case 'complete':\n console.log();\n if (event.status === 'completed') {\n console.log(chalk.green('✓ Skill execution completed'));\n } else {\n console.log(chalk.red(`✗ Skill execution ${event.status}`));\n if (event.error) {\n console.log(chalk.red(` Error: ${event.error}`));\n }\n }\n break;\n }\n },\n checkpointHandler: async (task, _context) => {\n // For CLI, we auto-continue but could add interactive prompts\n if (task.type === 'checkpoint:decision' && task.options) {\n // Use first option by default\n return {\n continue: true,\n selectedOption: task.options[0],\n };\n }\n return { continue: true };\n },\n });\n\n // Execute the skill\n const result = await engine.execute(skill, {\n agent: this.agent as AgentType | undefined,\n autoCommit: this.autoCommit,\n verify: this.verify,\n continueOnError: this.continueOnError,\n });\n\n if (this.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n // Show summary\n console.log();\n console.log(chalk.cyan('Summary:'));\n console.log(` Duration: ${chalk.dim(this.formatDuration(result.durationMs || 0))}`);\n console.log(` Tasks: ${chalk.dim(`${result.tasks.filter(t => t.status === 'completed').length}/${result.tasks.length} completed`)}`);\n\n if (result.filesModified.length > 0) {\n console.log(` Files modified: ${chalk.dim(result.filesModified.length.toString())}`);\n }\n\n if (result.commits.length > 0) {\n console.log(` Commits: ${chalk.dim(result.commits.join(', '))}`);\n }\n }\n\n return result.status === 'completed' ? 0 : 1;\n }\n\n private async loadSkill(projectPath: string): Promise<ExecutableSkill | null> {\n // Check if it's a file path (must be a file, not directory)\n if (this.skillRef.endsWith('.md') || (existsSync(this.skillRef) && statSync(this.skillRef).isFile())) {\n return this.loadSkillFromFile(resolve(this.skillRef));\n }\n\n // Check installed skills\n const skill = this.findInstalledSkill(projectPath, this.skillRef);\n if (skill) {\n return skill;\n }\n\n console.error(chalk.red(`Skill \"${this.skillRef}\" not found`));\n console.log(chalk.dim('Install skills with: skillkit install <source>'));\n return null;\n }\n\n private loadSkillFromFile(filePath: string): ExecutableSkill | null {\n if (!existsSync(filePath)) {\n console.error(chalk.red(`File not found: ${filePath}`));\n return null;\n }\n\n try {\n const content = readFileSync(filePath, 'utf-8');\n const frontmatter = extractFrontmatter(content);\n\n // Parse tasks from frontmatter if present\n const tasks = this.parseTasksFromFrontmatter(frontmatter);\n\n return {\n name: (frontmatter?.name as string) || this.skillRef,\n description: frontmatter?.description as string,\n version: frontmatter?.version as string,\n source: filePath,\n content,\n tasks,\n };\n } catch (error) {\n console.error(chalk.red(`Failed to load skill: ${error}`));\n return null;\n }\n }\n\n private findInstalledSkill(projectPath: string, skillName: string): ExecutableSkill | null {\n // Search in common skill directories\n const skillDirs = [\n join(projectPath, '.claude', 'skills'),\n join(projectPath, '.cursor', 'skills'),\n join(projectPath, 'skills'),\n join(projectPath, '.skillkit', 'skills'),\n ];\n\n for (const dir of skillDirs) {\n if (!existsSync(dir)) continue;\n\n const skills = discoverSkills(dir);\n const skill = skills.find((s) => s.name === skillName);\n\n if (skill) {\n const skillMdPath = join(skill.path, 'SKILL.md');\n if (existsSync(skillMdPath)) {\n return this.loadSkillFromFile(skillMdPath);\n }\n }\n }\n\n return null;\n }\n\n private parseTasksFromFrontmatter(frontmatter: Record<string, unknown> | null): ExecutableTask[] | undefined {\n if (!frontmatter?.tasks || !Array.isArray(frontmatter.tasks)) {\n return undefined;\n }\n\n return frontmatter.tasks.map((task: Record<string, unknown>, index: number) => ({\n id: (task.id as string) || `task-${index}`,\n name: (task.name as string) || `Task ${index + 1}`,\n type: (task.type as ExecutableTask['type']) || 'auto',\n action: (task.action as string) || '',\n files: task.files as string[] | undefined,\n options: task.options as string[] | undefined,\n verify: task.verify as ExecutableTask['verify'],\n }));\n }\n\n private showDryRun(skill: ExecutableSkill): void {\n console.log(chalk.cyan('Dry Run - Execution Plan'));\n console.log();\n console.log(`Skill: ${chalk.bold(skill.name)}`);\n if (skill.description) {\n console.log(`Description: ${chalk.dim(skill.description)}`);\n }\n console.log(`Source: ${chalk.dim(skill.source)}`);\n console.log();\n\n if (skill.tasks && skill.tasks.length > 0) {\n console.log(chalk.cyan('Tasks:'));\n for (let i = 0; i < skill.tasks.length; i++) {\n const task = skill.tasks[i];\n const typeLabel = this.getTaskTypeLabel(task.type);\n console.log(` ${i + 1}. ${task.name} ${typeLabel}`);\n if (task.action) {\n console.log(` ${chalk.dim(task.action)}`);\n }\n if (task.files && task.files.length > 0) {\n console.log(` Files: ${chalk.dim(task.files.join(', '))}`);\n }\n }\n } else {\n console.log(chalk.dim('No structured tasks defined. Skill will be executed as a single unit.'));\n }\n\n console.log();\n console.log(chalk.dim('This is a dry run. Remove --dry-run to execute.'));\n }\n\n private getTaskTypeLabel(type: string): string {\n switch (type) {\n case 'auto':\n return chalk.green('[auto]');\n case 'checkpoint:human-verify':\n return chalk.yellow('[verify]');\n case 'checkpoint:decision':\n return chalk.blue('[decision]');\n case 'checkpoint:human-action':\n return chalk.magenta('[manual]');\n default:\n return '';\n }\n }\n\n private formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n const minutes = Math.floor(ms / 60000);\n const seconds = Math.floor((ms % 60000) / 1000);\n return `${minutes}m ${seconds}s`;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport { resolve, join } from 'node:path';\nimport { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport chalk from 'chalk';\nimport {\n runTestSuite,\n createTestSuiteFromFrontmatter,\n type SkillTestSuite,\n type TestSuiteResult,\n} from '@skillkit/core';\nimport { parse as parseYaml } from 'yaml';\n\n/**\n * Test command - run skill tests\n */\nexport class TestCommand extends Command {\n static override paths = [['test']];\n\n static override usage = Command.Usage({\n description: 'Run skill tests',\n details: `\n The test command runs test cases defined in skill frontmatter.\n\n Tests are defined in the skill's YAML frontmatter using the 'tests' key.\n\n Example skill with tests:\n \\`\\`\\`yaml\n ---\n name: my-skill\n tests:\n - name: \"Creates config file\"\n assertions:\n - type: file_exists\n target: config.json\n - name: \"Types check\"\n assertions:\n - type: type_check\n ---\n \\`\\`\\`\n `,\n examples: [\n ['Run all skill tests', '$0 test'],\n ['Run tests for a specific skill', '$0 test my-skill'],\n ['Run with verbose output', '$0 test --verbose'],\n ['Stop on first failure', '$0 test --bail'],\n ['Run tests with specific tags', '$0 test --tags unit,integration'],\n ],\n });\n\n skill = Option.String({ required: false });\n\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Verbose output',\n });\n\n bail = Option.Boolean('--bail,-b', false, {\n description: 'Stop on first failure',\n });\n\n tags = Option.String('--tags,-t', {\n description: 'Only run tests with these tags (comma-separated)',\n });\n\n skipTags = Option.String('--skip-tags', {\n description: 'Skip tests with these tags (comma-separated)',\n });\n\n json = Option.Boolean('--json,-j', false, {\n description: 'Output results as JSON',\n });\n\n projectPath = Option.String('--path,-p', {\n description: 'Project path',\n });\n\n timeout = Option.String('--timeout', {\n description: 'Test timeout in milliseconds',\n });\n\n async execute(): Promise<number> {\n const targetPath = resolve(this.projectPath || process.cwd());\n\n // Find skills to test\n const skillFiles = this.findSkillFiles(targetPath);\n\n if (skillFiles.length === 0) {\n if (!this.json) {\n console.log(chalk.yellow('No skills found with tests.'));\n console.log(chalk.dim('Add tests to your skills using YAML frontmatter.'));\n } else {\n console.log(JSON.stringify({ results: [], passed: true, total: 0 }));\n }\n return 0;\n }\n\n // Filter by skill name if provided\n const filesToTest = this.skill\n ? skillFiles.filter((f) => f.name.includes(this.skill!))\n : skillFiles;\n\n if (filesToTest.length === 0) {\n if (!this.json) {\n console.log(chalk.yellow(`No skills found matching \"${this.skill}\"`));\n }\n return 1;\n }\n\n if (!this.json) {\n console.log(chalk.bold('Running skill tests...\\n'));\n }\n\n // Parse tags\n const tags = this.tags?.split(',').map((t) => t.trim());\n const skipTags = this.skipTags?.split(',').map((t) => t.trim());\n const timeout = this.timeout ? parseInt(this.timeout, 10) : undefined;\n\n // Run tests for each skill\n const results: TestSuiteResult[] = [];\n let allPassed = true;\n\n for (const file of filesToTest) {\n const suite = this.parseSkillTests(file.path, file.name);\n\n if (!suite || suite.tests.length === 0) {\n continue;\n }\n\n if (!this.json) {\n console.log(chalk.blue(`Testing: ${suite.skillName}`));\n }\n\n const result = await runTestSuite(suite, {\n cwd: targetPath,\n verbose: this.verbose,\n bail: this.bail,\n tags,\n skipTags,\n timeout,\n onProgress: (event) => {\n if (this.json || !this.verbose) return;\n\n switch (event.type) {\n case 'test_start':\n console.log(chalk.dim(` Running: ${event.testName}`));\n break;\n case 'test_end':\n if (event.passed) {\n console.log(chalk.green(` ✓ ${event.testName}`));\n } else {\n console.log(chalk.red(` ✗ ${event.testName}`));\n if (event.error) {\n console.log(chalk.red(` ${event.error}`));\n }\n }\n break;\n case 'assertion_end':\n if (this.verbose && !event.passed) {\n console.log(chalk.red(` - ${event.assertionType}: ${event.error}`));\n }\n break;\n }\n },\n });\n\n results.push(result);\n\n if (!result.passed) {\n allPassed = false;\n }\n\n if (!this.json) {\n const icon = result.passed ? chalk.green('✓') : chalk.red('✗');\n const status = result.passed ? 'PASSED' : 'FAILED';\n console.log(\n `${icon} ${suite.skillName}: ${result.passedCount}/${result.tests.length} tests ${status} (${result.duration}ms)\\n`\n );\n }\n\n if (this.bail && !result.passed) {\n break;\n }\n }\n\n // Summary\n if (this.json) {\n console.log(\n JSON.stringify({\n results: results.map((r) => ({\n skill: r.skillName,\n passed: r.passed,\n tests: r.passedCount,\n failed: r.failedCount,\n skipped: r.skippedCount,\n duration: r.duration,\n })),\n passed: allPassed,\n total: results.length,\n })\n );\n } else {\n const totalTests = results.reduce((acc, r) => acc + r.tests.length, 0);\n const passedTests = results.reduce((acc, r) => acc + r.passedCount, 0);\n const failedTests = results.reduce((acc, r) => acc + r.failedCount, 0);\n const skippedTests = results.reduce((acc, r) => acc + r.skippedCount, 0);\n\n console.log(chalk.bold('Summary:'));\n console.log(` Skills tested: ${results.length}`);\n console.log(` Total tests: ${totalTests}`);\n console.log(chalk.green(` Passed: ${passedTests}`));\n if (failedTests > 0) {\n console.log(chalk.red(` Failed: ${failedTests}`));\n }\n if (skippedTests > 0) {\n console.log(chalk.yellow(` Skipped: ${skippedTests}`));\n }\n\n if (allPassed) {\n console.log(chalk.green('\\n✓ All tests passed!'));\n } else {\n console.log(chalk.red('\\n✗ Some tests failed.'));\n }\n }\n\n return allPassed ? 0 : 1;\n }\n\n /**\n * Find skill files with tests\n */\n private findSkillFiles(projectPath: string): { name: string; path: string }[] {\n const files: { name: string; path: string }[] = [];\n\n // Check common skill directories\n const skillDirs = [\n '.claude/skills',\n '.cursor/skills',\n '.skillkit/skills',\n 'skills',\n ];\n\n for (const dir of skillDirs) {\n const fullDir = join(projectPath, dir);\n if (!existsSync(fullDir)) continue;\n\n try {\n const entries = readdirSync(fullDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isFile() && (entry.name.endsWith('.md') || entry.name.endsWith('.mdc'))) {\n files.push({\n name: entry.name.replace(/\\.(md|mdc)$/, ''),\n path: join(fullDir, entry.name),\n });\n }\n }\n } catch {\n // Directory not readable\n }\n }\n\n return files;\n }\n\n /**\n * Parse skill file for tests\n */\n private parseSkillTests(filePath: string, skillName: string): SkillTestSuite | null {\n try {\n const content = readFileSync(filePath, 'utf-8');\n\n // Extract frontmatter\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!frontmatterMatch) {\n return null;\n }\n\n const frontmatter = parseYaml(frontmatterMatch[1]) as Record<string, unknown>;\n\n if (!frontmatter.tests) {\n return null;\n }\n\n return createTestSuiteFromFrontmatter(skillName, frontmatter);\n } catch {\n return null;\n }\n }\n}\n","import { Command, Option } from 'clipanion';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n createMarketplaceAggregator,\n type MarketplaceSearchOptions,\n} from '@skillkit/core';\n\n/**\n * Marketplace command - browse and install skills from the marketplace\n */\nexport class MarketplaceCommand extends Command {\n static override paths = [['marketplace'], ['market'], ['mp']];\n\n static override usage = Command.Usage({\n description: 'Browse and install skills from the marketplace',\n details: `\n The marketplace command lets you discover and install skills\n from curated repositories.\n\n Skills are aggregated from multiple sources including:\n - composioHQ/awesome-claude-code-skills\n - anthropics/courses\n - User-added custom sources\n `,\n examples: [\n ['Browse marketplace', '$0 marketplace'],\n ['Search for skills', '$0 marketplace search typescript'],\n ['Refresh marketplace index', '$0 marketplace refresh'],\n ['Show popular tags', '$0 marketplace tags'],\n ['List sources', '$0 marketplace sources'],\n ],\n });\n\n action = Option.String({ required: false });\n query = Option.String({ required: false });\n\n limit = Option.String('--limit,-l', {\n description: 'Limit results',\n });\n\n tags = Option.String('--tags,-t', {\n description: 'Filter by tags (comma-separated)',\n });\n\n source = Option.String('--source,-s', {\n description: 'Filter by source',\n });\n\n json = Option.Boolean('--json,-j', false, {\n description: 'Output as JSON',\n });\n\n async execute(): Promise<number> {\n const marketplace = createMarketplaceAggregator();\n\n switch (this.action) {\n case 'search':\n return this.searchSkills(marketplace);\n case 'refresh':\n return this.refreshIndex(marketplace);\n case 'tags':\n return this.showTags(marketplace);\n case 'sources':\n return this.showSources(marketplace);\n default:\n // Default: browse/search\n if (this.query || this.action) {\n return this.searchSkills(marketplace);\n }\n return this.browseMarketplace(marketplace);\n }\n }\n\n private async browseMarketplace(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const spinner = ora('Loading marketplace...').start();\n\n try {\n const index = await marketplace.getIndex();\n spinner.stop();\n\n if (this.json) {\n console.log(JSON.stringify({\n totalSkills: index.totalCount,\n sources: index.sources.length,\n updatedAt: index.updatedAt,\n }));\n return 0;\n }\n\n console.log(chalk.bold('Skill Marketplace\\n'));\n console.log(`Total skills: ${chalk.cyan(index.totalCount)}`);\n console.log(`Sources: ${chalk.cyan(index.sources.length)}`);\n console.log(`Last updated: ${chalk.dim(new Date(index.updatedAt).toLocaleString())}\\n`);\n\n // Show sample skills\n console.log(chalk.bold('Featured Skills:\\n'));\n const featured = index.skills.slice(0, 10);\n\n for (const skill of featured) {\n console.log(` ${chalk.cyan(skill.name)}`);\n if (skill.description) {\n console.log(` ${chalk.dim(skill.description.slice(0, 60))}${skill.description.length > 60 ? '...' : ''}`);\n }\n console.log(` ${chalk.dim(`Source: ${skill.source.name}`)}`);\n console.log();\n }\n\n console.log(chalk.dim('Use \"skillkit marketplace search <query>\" to search for skills.'));\n console.log(chalk.dim('Use \"skillkit marketplace tags\" to see popular tags.'));\n\n return 0;\n } catch (error) {\n spinner.fail('Failed to load marketplace');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n\n private async searchSkills(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const query = this.query || this.action;\n\n // Validate and parse limit\n let limit = 20;\n if (this.limit) {\n const parsed = parseInt(this.limit, 10);\n if (isNaN(parsed) || parsed <= 0) {\n console.error(chalk.red('Invalid --limit value. Must be a positive number.'));\n return 1;\n }\n limit = parsed;\n }\n\n // Sanitize tags - filter out empty strings\n const tags = this.tags\n ?.split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n\n const spinner = ora(`Searching for \"${query}\"...`).start();\n\n try {\n const options: MarketplaceSearchOptions = {\n query: query || undefined,\n limit,\n tags: tags && tags.length > 0 ? tags : undefined,\n source: this.source,\n };\n\n const result = await marketplace.search(options);\n spinner.stop();\n\n if (this.json) {\n console.log(JSON.stringify(result));\n return 0;\n }\n\n if (result.skills.length === 0) {\n console.log(chalk.yellow(`No skills found${query ? ` matching \"${query}\"` : ''}.`));\n return 0;\n }\n\n console.log(chalk.bold(`Found ${result.total} skill(s):\\n`));\n\n for (const skill of result.skills) {\n console.log(`${chalk.cyan(skill.name)} ${chalk.dim(`(${skill.source.name})`)}`);\n if (skill.description) {\n console.log(` ${skill.description}`);\n }\n if (skill.tags.length > 0) {\n console.log(` Tags: ${chalk.dim(skill.tags.join(', '))}`);\n }\n console.log();\n }\n\n if (result.total > result.skills.length) {\n console.log(chalk.dim(`Showing ${result.skills.length} of ${result.total} results. Use --limit to see more.`));\n }\n\n return 0;\n } catch (error) {\n spinner.fail('Search failed');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n\n private async refreshIndex(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const spinner = ora('Refreshing marketplace index...').start();\n\n try {\n const index = await marketplace.refresh();\n spinner.succeed(`Marketplace refreshed: ${index.totalCount} skills from ${index.sources.length} sources`);\n return 0;\n } catch (error) {\n spinner.fail('Refresh failed');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n\n private async showTags(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const spinner = ora('Loading tags...').start();\n\n try {\n const tags = await marketplace.getPopularTags(30);\n spinner.stop();\n\n if (this.json) {\n console.log(JSON.stringify(tags));\n return 0;\n }\n\n console.log(chalk.bold('Popular Tags:\\n'));\n\n for (const { tag, count } of tags) {\n const bar = '█'.repeat(Math.min(count, 20));\n console.log(` ${tag.padEnd(15)} ${chalk.cyan(bar)} ${count}`);\n }\n\n return 0;\n } catch (error) {\n spinner.fail('Failed to load tags');\n console.error(chalk.red(error instanceof Error ? error.message : String(error)));\n return 1;\n }\n }\n\n private async showSources(marketplace: ReturnType<typeof createMarketplaceAggregator>): Promise<number> {\n const sources = marketplace.getSources();\n\n if (this.json) {\n console.log(JSON.stringify(sources));\n return 0;\n }\n\n console.log(chalk.bold('Skill Sources:\\n'));\n\n for (const source of sources) {\n console.log(`${chalk.cyan(source.name)} ${source.official ? chalk.green('(official)') : ''}`);\n console.log(` ${chalk.dim(`${source.owner}/${source.repo}`)}`);\n if (source.description) {\n console.log(` ${source.description}`);\n }\n console.log();\n }\n\n return 0;\n }\n}\n","import { Command, Option } from 'clipanion';\nimport chalk from 'chalk';\nimport {\n ObservationStore,\n LearningStore,\n getMemoryPaths,\n initializeMemoryDirectory,\n getMemoryStatus,\n createMemoryCompressor,\n createMemoryInjector,\n type Learning,\n} from '@skillkit/core';\n\n/**\n * Memory command - manage session memory across AI agents\n */\nexport class MemoryCommand extends Command {\n static override paths = [['memory'], ['mem']];\n\n static override usage = Command.Usage({\n description: 'Manage session memory across AI coding agents',\n details: `\n The memory command helps you view, search, and manage learnings\n captured from coding sessions across all AI agents.\n\n Subcommands:\n - status: Show current memory status\n - search: Search memories by query\n - list: List all learnings\n - show: Show a specific learning\n - compress: Compress observations into learnings\n - export: Export a learning as a skill\n - import: Import memories from another project\n - clear: Clear session observations\n - add: Manually add a learning\n - rate: Rate a learning's effectiveness\n - config: Configure memory settings\n `,\n examples: [\n ['Show memory status', '$0 memory status'],\n ['Search memories', '$0 memory search \"authentication\"'],\n ['Search global memories', '$0 memory search --global \"react hooks\"'],\n ['List project learnings', '$0 memory list'],\n ['List global learnings', '$0 memory list --global'],\n ['Show a learning', '$0 memory show <id>'],\n ['Compress observations', '$0 memory compress'],\n ['Export as skill', '$0 memory export <id> --name my-skill'],\n ['Clear session', '$0 memory clear'],\n ['Add manual learning', '$0 memory add --title \"...\" --content \"...\"'],\n ['Rate effectiveness', '$0 memory rate <id> 85'],\n ],\n });\n\n // Subcommand (status, search, list, show, compress, export, import, clear, add, rate, config)\n action = Option.String({ required: false });\n\n // Second argument (query for search, id for show/export/rate)\n arg = Option.String({ required: false });\n\n // Third argument (rating value for rate command)\n ratingArg = Option.String({ required: false });\n\n // Global scope\n global = Option.Boolean('--global,-g', false, {\n description: 'Use global memories instead of project',\n });\n\n // Tags filter\n tags = Option.String('--tags,-t', {\n description: 'Filter by tags (comma-separated)',\n });\n\n // Limit results\n limit = Option.String('--limit,-l', {\n description: 'Maximum number of results',\n });\n\n // Title for add\n title = Option.String('--title', {\n description: 'Title for new learning',\n });\n\n // Content for add\n content = Option.String('--content,-c', {\n description: 'Content for new learning',\n });\n\n // Name for export\n name = Option.String('--name,-n', {\n description: 'Name for exported skill',\n });\n\n // Output file\n output = Option.String('--output,-o', {\n description: 'Output file path',\n });\n\n // Input file\n input = Option.String('--input,-i', {\n description: 'Input file path',\n });\n\n // Keep learnings when clearing\n keepLearnings = Option.Boolean('--keep-learnings', false, {\n description: 'Keep learnings when clearing',\n });\n\n // Dry run\n dryRun = Option.Boolean('--dry-run', false, {\n description: 'Preview without making changes',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output in JSON format',\n });\n\n // Verbose output\n verbose = Option.Boolean('--verbose,-v', false, {\n description: 'Show detailed output',\n });\n\n async execute(): Promise<number> {\n const action = this.action || 'status';\n\n switch (action) {\n case 'status':\n return this.showStatus();\n case 'search':\n return this.searchMemories();\n case 'list':\n return this.listLearnings();\n case 'show':\n return this.showLearning();\n case 'compress':\n return this.compressObservations();\n case 'export':\n return this.exportLearning();\n case 'import':\n return this.importMemories();\n case 'clear':\n return this.clearMemory();\n case 'add':\n return this.addLearning();\n case 'rate':\n return this.rateLearning();\n case 'config':\n return this.showConfig();\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.gray('Available actions: status, search, list, show, compress, export, import, clear, add, rate, config'));\n return 1;\n }\n }\n\n /**\n * Show memory status\n */\n private async showStatus(): Promise<number> {\n const projectPath = process.cwd();\n const status = getMemoryStatus(projectPath);\n const paths = getMemoryPaths(projectPath);\n\n // Get counts from stores\n const observationStore = new ObservationStore(projectPath);\n const projectLearningStore = new LearningStore('project', projectPath);\n const globalLearningStore = new LearningStore('global');\n\n const sessionObservations = status.hasObservations ? observationStore.count() : 0;\n const projectLearnings = status.hasLearnings ? projectLearningStore.count() : 0;\n const globalLearnings = status.hasGlobalLearnings ? globalLearningStore.count() : 0;\n const sessionId = status.hasObservations ? observationStore.getSessionId() : null;\n\n if (this.json) {\n console.log(JSON.stringify({\n ...status,\n sessionObservations,\n projectLearnings,\n globalLearnings,\n sessionId,\n paths,\n }, null, 2));\n return 0;\n }\n\n console.log(chalk.bold('\\nMemory Status\\n'));\n\n // Session observations\n console.log(chalk.cyan('Session:'));\n console.log(` Observations: ${sessionObservations}`);\n if (sessionId) {\n console.log(` Session ID: ${chalk.gray(sessionId.slice(0, 8))}`);\n }\n console.log();\n\n // Project learnings\n console.log(chalk.cyan('Project:'));\n console.log(` Learnings: ${projectLearnings}`);\n console.log(` Path: ${chalk.gray(status.projectMemoryExists ? paths.projectMemoryDir : 'Not initialized')}`);\n console.log();\n\n // Global learnings\n console.log(chalk.cyan('Global:'));\n console.log(` Learnings: ${globalLearnings}`);\n console.log(` Path: ${chalk.gray(status.globalMemoryExists ? paths.globalMemoryDir : 'Not initialized')}`);\n console.log();\n\n // Recommendations\n if (sessionObservations >= 50) {\n console.log(chalk.yellow('💡 You have many uncompressed observations. Consider running:'));\n console.log(chalk.gray(' skillkit memory compress'));\n }\n\n return 0;\n }\n\n /**\n * Search memories\n */\n private async searchMemories(): Promise<number> {\n const query = this.arg;\n if (!query) {\n console.error(chalk.red('Error: Search query is required'));\n console.log(chalk.gray('Usage: skillkit memory search \"your query\"'));\n return 1;\n }\n\n const projectPath = process.cwd();\n const injector = createMemoryInjector(projectPath);\n\n // Validate and parse limit\n let maxLearnings = 10;\n if (this.limit) {\n const parsed = parseInt(this.limit, 10);\n if (isNaN(parsed) || parsed <= 0) {\n console.log(chalk.red('Invalid --limit value. Must be a positive number.'));\n return 1;\n }\n maxLearnings = parsed;\n }\n\n // Sanitize tags - filter out empty strings\n const tags = this.tags\n ?.split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n\n const results = injector.search(query, {\n includeGlobal: this.global,\n tags: tags && tags.length > 0 ? tags : undefined,\n maxLearnings,\n minRelevance: 0,\n });\n\n if (this.json) {\n console.log(JSON.stringify(results, null, 2));\n return 0;\n }\n\n if (results.length === 0) {\n console.log(chalk.yellow(`No memories found for: \"${query}\"`));\n return 0;\n }\n\n console.log(chalk.bold(`\\nFound ${results.length} memories:\\n`));\n\n for (const { learning, relevanceScore, matchedBy } of results) {\n console.log(`${chalk.cyan('●')} ${chalk.bold(learning.title)}`);\n console.log(` ID: ${chalk.gray(learning.id.slice(0, 8))}`);\n console.log(` Relevance: ${this.formatScore(relevanceScore)}%`);\n console.log(` Tags: ${learning.tags.join(', ')}`);\n console.log(` Scope: ${learning.scope}`);\n\n if (this.verbose) {\n console.log(` Matched: ${this.formatMatchedBy(matchedBy)}`);\n console.log(` Created: ${new Date(learning.createdAt).toLocaleDateString()}`);\n console.log(` Uses: ${learning.useCount}`);\n }\n\n // Show excerpt\n const excerpt = learning.content.slice(0, 100);\n console.log(` ${chalk.gray(excerpt)}${learning.content.length > 100 ? '...' : ''}`);\n console.log();\n }\n\n return 0;\n }\n\n /**\n * List all learnings\n */\n private async listLearnings(): Promise<number> {\n const projectPath = process.cwd();\n const store = new LearningStore(\n this.global ? 'global' : 'project',\n this.global ? undefined : projectPath\n );\n\n let learnings = store.getAll();\n\n // Filter by tags if specified\n if (this.tags) {\n const tagList = this.tags.split(',').map((t) => t.trim().toLowerCase());\n learnings = learnings.filter((l) =>\n l.tags.some((t) => tagList.includes(t.toLowerCase()))\n );\n }\n\n // Limit results\n const limit = this.limit ? parseInt(this.limit, 10) : learnings.length;\n learnings = learnings.slice(0, limit);\n\n if (this.json) {\n console.log(JSON.stringify(learnings, null, 2));\n return 0;\n }\n\n const scope = this.global ? 'Global' : 'Project';\n console.log(chalk.bold(`\\n${scope} Learnings (${learnings.length}):\\n`));\n\n if (learnings.length === 0) {\n console.log(chalk.gray('No learnings found.'));\n console.log(chalk.gray('\\nCapture learnings by running skills or add manually:'));\n console.log(chalk.gray(' skillkit memory add --title \"...\" --content \"...\"'));\n return 0;\n }\n\n for (const learning of learnings) {\n const effectiveness = learning.effectiveness !== undefined\n ? ` [${this.formatScore(learning.effectiveness)}%]`\n : '';\n\n console.log(`${chalk.cyan('●')} ${learning.title}${chalk.green(effectiveness)}`);\n console.log(` ${chalk.gray(learning.id.slice(0, 8))} | ${learning.tags.join(', ')} | ${learning.useCount} uses`);\n\n if (this.verbose) {\n const excerpt = learning.content.slice(0, 80);\n console.log(` ${chalk.gray(excerpt)}${learning.content.length > 80 ? '...' : ''}`);\n }\n }\n\n console.log();\n return 0;\n }\n\n /**\n * Show a specific learning\n */\n private async showLearning(): Promise<number> {\n const id = this.arg;\n if (!id) {\n console.error(chalk.red('Error: Learning ID is required'));\n console.log(chalk.gray('Usage: skillkit memory show <id>'));\n return 1;\n }\n\n const projectPath = process.cwd();\n\n // Try project store first\n let learning = new LearningStore('project', projectPath).getById(id);\n\n // Try global store\n if (!learning) {\n learning = new LearningStore('global').getById(id);\n }\n\n // Try matching by prefix\n if (!learning) {\n const projectLearnings = new LearningStore('project', projectPath).getAll();\n const globalLearnings = new LearningStore('global').getAll();\n const all = [...projectLearnings, ...globalLearnings];\n\n learning = all.find((l) => l.id.startsWith(id));\n }\n\n if (!learning) {\n console.error(chalk.red(`Learning not found: ${id}`));\n return 1;\n }\n\n if (this.json) {\n console.log(JSON.stringify(learning, null, 2));\n return 0;\n }\n\n console.log(chalk.bold(`\\n${learning.title}\\n`));\n console.log(chalk.gray(`ID: ${learning.id}`));\n console.log(chalk.gray(`Scope: ${learning.scope}`));\n console.log(chalk.gray(`Source: ${learning.source}`));\n console.log(chalk.gray(`Tags: ${learning.tags.join(', ')}`));\n\n if (learning.frameworks?.length) {\n console.log(chalk.gray(`Frameworks: ${learning.frameworks.join(', ')}`));\n }\n\n if (learning.patterns?.length) {\n console.log(chalk.gray(`Patterns: ${learning.patterns.join(', ')}`));\n }\n\n console.log(chalk.gray(`Created: ${new Date(learning.createdAt).toLocaleString()}`));\n console.log(chalk.gray(`Updated: ${new Date(learning.updatedAt).toLocaleString()}`));\n console.log(chalk.gray(`Uses: ${learning.useCount}`));\n\n if (learning.effectiveness !== undefined) {\n console.log(chalk.gray(`Effectiveness: ${this.formatScore(learning.effectiveness)}%`));\n }\n\n console.log(chalk.bold('\\nContent:\\n'));\n console.log(learning.content);\n console.log();\n\n return 0;\n }\n\n /**\n * Compress observations into learnings\n */\n private async compressObservations(): Promise<number> {\n const projectPath = process.cwd();\n\n // Initialize memory directory if needed\n initializeMemoryDirectory(projectPath);\n\n const observationStore = new ObservationStore(projectPath);\n const observations = observationStore.getAll();\n\n if (observations.length === 0) {\n console.log(chalk.yellow('No observations to compress.'));\n return 0;\n }\n\n console.log(chalk.cyan(`Found ${observations.length} observations to compress...\\n`));\n\n const compressor = createMemoryCompressor(projectPath);\n const compressionOptions = {\n minObservations: 2,\n additionalTags: this.tags?.split(',').map((t) => t.trim()),\n };\n\n if (this.dryRun) {\n console.log(chalk.gray('(Dry run - no changes will be made)\\n'));\n\n // For dry-run, only compress without storing\n const result = await compressor.compress(observations, compressionOptions);\n\n console.log(chalk.green(`✓ Would compress ${result.stats.inputCount} observations into ${result.stats.outputCount} learnings\\n`));\n\n if (result.learnings.length > 0) {\n console.log(chalk.bold('Learnings that would be created:'));\n for (const learning of result.learnings) {\n console.log(` ${chalk.cyan('●')} ${learning.title}`);\n console.log(` Tags: ${learning.tags.join(', ')}`);\n }\n console.log();\n }\n\n return 0;\n }\n\n // Actual compression with storage\n const { learnings, result } = await compressor.compressAndStore(observations, compressionOptions);\n\n console.log(chalk.green(`✓ Compressed ${result.stats.inputCount} observations into ${result.stats.outputCount} learnings\\n`));\n\n if (learnings.length > 0) {\n console.log(chalk.bold('New Learnings:'));\n for (const learning of learnings) {\n console.log(` ${chalk.cyan('●')} ${learning.title}`);\n console.log(` Tags: ${learning.tags.join(', ')}`);\n }\n console.log();\n }\n\n if (result.processedObservationIds.length > 0) {\n // Remove processed observations\n const deleted = observationStore.deleteMany(result.processedObservationIds);\n console.log(chalk.gray(`Cleared ${deleted} processed observations.`));\n }\n\n return 0;\n }\n\n /**\n * Export a learning as a skill\n */\n private async exportLearning(): Promise<number> {\n const id = this.arg;\n if (!id) {\n console.error(chalk.red('Error: Learning ID is required'));\n console.log(chalk.gray('Usage: skillkit memory export <id> --name my-skill'));\n return 1;\n }\n\n const projectPath = process.cwd();\n\n // Find the learning\n let learning = new LearningStore('project', projectPath).getById(id);\n if (!learning) {\n learning = new LearningStore('global').getById(id);\n }\n\n // Try matching by prefix\n if (!learning) {\n const projectLearnings = new LearningStore('project', projectPath).getAll();\n const globalLearnings = new LearningStore('global').getAll();\n const all = [...projectLearnings, ...globalLearnings];\n learning = all.find((l) => l.id.startsWith(id));\n }\n\n if (!learning) {\n console.error(chalk.red(`Learning not found: ${id}`));\n return 1;\n }\n\n // Generate skill name\n const skillName = this.name || this.slugify(learning.title);\n\n // Generate skill content\n const skillContent = this.generateSkillContent(learning, skillName);\n\n if (this.dryRun) {\n console.log(chalk.gray('(Dry run preview)\\n'));\n console.log(skillContent);\n return 0;\n }\n\n // Determine output path\n const outputPath = this.output || `.skillkit/exports/${skillName}/SKILL.md`;\n const { dirname } = await import('node:path');\n const { existsSync, mkdirSync, writeFileSync } = await import('node:fs');\n\n const outputDir = dirname(outputPath);\n if (!existsSync(outputDir)) {\n mkdirSync(outputDir, { recursive: true });\n }\n\n writeFileSync(outputPath, skillContent, 'utf-8');\n\n console.log(chalk.green(`✓ Exported learning as skill: ${skillName}`));\n console.log(chalk.gray(` Path: ${outputPath}`));\n\n return 0;\n }\n\n /**\n * Import memories from another project\n */\n private async importMemories(): Promise<number> {\n const inputPath = this.input || this.arg;\n if (!inputPath) {\n console.error(chalk.red('Error: Input path is required'));\n console.log(chalk.gray('Usage: skillkit memory import --input <path>'));\n return 1;\n }\n\n const { existsSync, readFileSync } = await import('node:fs');\n const { resolve } = await import('node:path');\n\n const fullPath = resolve(inputPath);\n if (!existsSync(fullPath)) {\n console.error(chalk.red(`File not found: ${fullPath}`));\n return 1;\n }\n\n const projectPath = process.cwd();\n const store = new LearningStore(\n this.global ? 'global' : 'project',\n this.global ? undefined : projectPath\n );\n\n try {\n const content = readFileSync(fullPath, 'utf-8');\n const { parse: parseYaml } = await import('yaml');\n const data = parseYaml(content) as { learnings?: Learning[] };\n\n if (!data.learnings || !Array.isArray(data.learnings)) {\n console.error(chalk.red('Invalid memory file format'));\n return 1;\n }\n\n let imported = 0;\n for (const learning of data.learnings) {\n if (this.dryRun) {\n console.log(chalk.gray(`Would import: ${learning.title}`));\n } else {\n store.add({\n source: 'imported',\n title: learning.title,\n content: learning.content,\n // Default to empty arrays if not present in imported YAML\n tags: Array.isArray(learning.tags) ? learning.tags : [],\n frameworks: Array.isArray(learning.frameworks) ? learning.frameworks : [],\n patterns: Array.isArray(learning.patterns) ? learning.patterns : [],\n });\n imported++;\n }\n }\n\n if (this.dryRun) {\n console.log(chalk.gray(`\\n(Dry run - ${data.learnings.length} learnings would be imported)`));\n } else {\n console.log(chalk.green(`✓ Imported ${imported} learnings`));\n }\n\n return 0;\n } catch (error) {\n console.error(chalk.red(`Import failed: ${error}`));\n return 1;\n }\n }\n\n /**\n * Clear session observations\n */\n private async clearMemory(): Promise<number> {\n const projectPath = process.cwd();\n\n if (this.dryRun) {\n const observationStore = new ObservationStore(projectPath);\n const learningStore = new LearningStore('project', projectPath);\n\n console.log(chalk.gray('(Dry run preview)\\n'));\n console.log(`Would clear ${observationStore.count()} observations`);\n if (!this.keepLearnings) {\n console.log(`Would clear ${learningStore.count()} learnings`);\n }\n return 0;\n }\n\n const observationStore = new ObservationStore(projectPath);\n observationStore.clear();\n console.log(chalk.green('✓ Cleared session observations'));\n\n if (!this.keepLearnings) {\n const learningStore = new LearningStore('project', projectPath);\n learningStore.clear();\n console.log(chalk.green('✓ Cleared project learnings'));\n }\n\n return 0;\n }\n\n /**\n * Add a manual learning\n */\n private async addLearning(): Promise<number> {\n if (!this.title) {\n console.error(chalk.red('Error: --title is required'));\n console.log(chalk.gray('Usage: skillkit memory add --title \"...\" --content \"...\"'));\n return 1;\n }\n\n if (!this.content) {\n console.error(chalk.red('Error: --content is required'));\n console.log(chalk.gray('Usage: skillkit memory add --title \"...\" --content \"...\"'));\n return 1;\n }\n\n const projectPath = process.cwd();\n const store = new LearningStore(\n this.global ? 'global' : 'project',\n this.global ? undefined : projectPath\n );\n\n const tags = this.tags?.split(',').map((t) => t.trim()) || [];\n\n const learning = store.add({\n source: 'manual',\n title: this.title,\n content: this.content,\n tags,\n });\n\n console.log(chalk.green(`✓ Added learning: ${learning.title}`));\n console.log(chalk.gray(` ID: ${learning.id}`));\n\n return 0;\n }\n\n /**\n * Rate a learning's effectiveness\n */\n private async rateLearning(): Promise<number> {\n const id = this.arg;\n if (!id) {\n console.error(chalk.red('Error: Learning ID is required'));\n console.log(chalk.gray('Usage: skillkit memory rate <id> <rating>'));\n return 1;\n }\n\n const rating = parseInt(this.ratingArg || '0', 10);\n if (isNaN(rating) || rating < 0 || rating > 100) {\n console.error(chalk.red('Error: Rating must be 0-100'));\n console.log(chalk.gray('Usage: skillkit memory rate <id> <rating>'));\n return 1;\n }\n\n const projectPath = process.cwd();\n\n // Try project store first\n const projectStore = new LearningStore('project', projectPath);\n let learning = projectStore.getById(id);\n let store = projectStore;\n\n if (!learning) {\n const globalStore = new LearningStore('global');\n learning = globalStore.getById(id);\n store = globalStore;\n }\n\n // Try prefix match\n if (!learning) {\n const projectLearnings = projectStore.getAll();\n const globalStore = new LearningStore('global');\n const globalLearnings = globalStore.getAll();\n\n learning = projectLearnings.find((l) => l.id.startsWith(id));\n if (learning) {\n store = projectStore;\n } else {\n learning = globalLearnings.find((l) => l.id.startsWith(id));\n if (learning) {\n store = globalStore;\n }\n }\n }\n\n if (!learning) {\n console.error(chalk.red(`Learning not found: ${id}`));\n return 1;\n }\n\n store.setEffectiveness(learning.id, rating);\n console.log(chalk.green(`✓ Rated \"${learning.title}\" as ${rating}% effective`));\n\n return 0;\n }\n\n /**\n * Show memory configuration\n */\n private async showConfig(): Promise<number> {\n const projectPath = process.cwd();\n const paths = getMemoryPaths(projectPath);\n\n if (this.json) {\n console.log(JSON.stringify(paths, null, 2));\n return 0;\n }\n\n console.log(chalk.bold('\\nMemory Configuration\\n'));\n\n console.log(chalk.cyan('Paths:'));\n console.log(` Project observations: ${chalk.gray(paths.observationsFile)}`);\n console.log(` Project learnings: ${chalk.gray(paths.learningsFile)}`);\n console.log(` Project index: ${chalk.gray(paths.indexFile)}`);\n console.log(` Global learnings: ${chalk.gray(paths.globalLearningsFile)}`);\n console.log(` Global index: ${chalk.gray(paths.globalIndexFile)}`);\n console.log();\n\n return 0;\n }\n\n /**\n * Format relevance/effectiveness score with color\n */\n private formatScore(score: number): string {\n if (score >= 80) return chalk.green(score.toString());\n if (score >= 50) return chalk.yellow(score.toString());\n return chalk.red(score.toString());\n }\n\n /**\n * Format matched by info\n */\n private formatMatchedBy(matchedBy: {\n frameworks: string[];\n tags: string[];\n keywords: string[];\n patterns: string[];\n }): string {\n const parts: string[] = [];\n if (matchedBy.frameworks.length > 0) {\n parts.push(`frameworks: ${matchedBy.frameworks.join(', ')}`);\n }\n if (matchedBy.tags.length > 0) {\n parts.push(`tags: ${matchedBy.tags.join(', ')}`);\n }\n if (matchedBy.keywords.length > 0) {\n parts.push(`keywords: ${matchedBy.keywords.slice(0, 3).join(', ')}`);\n }\n if (matchedBy.patterns.length > 0) {\n parts.push(`patterns: ${matchedBy.patterns.join(', ')}`);\n }\n return parts.join(' | ') || 'general';\n }\n\n /**\n * Convert title to slug\n */\n private slugify(text: string): string {\n return text\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '')\n .slice(0, 50);\n }\n\n /**\n * Escape a YAML scalar value if it contains special characters\n */\n private escapeYamlValue(value: string): string {\n // Check if value needs quoting (contains special YAML characters)\n if (/[:#\\[\\]{}|>&*!?,'\"\\\\@`]/.test(value) || value.includes('\\n')) {\n // Use double quotes and escape internal quotes/backslashes\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n }\n return value;\n }\n\n /**\n * Generate skill content from learning\n */\n private generateSkillContent(learning: Learning, skillName: string): string {\n // Escape values that might contain special YAML characters\n const escapedName = this.escapeYamlValue(skillName);\n const escapedDesc = this.escapeYamlValue(learning.title);\n const escapedTags = learning.tags.map((t) => this.escapeYamlValue(t));\n\n const lines: string[] = [\n '---',\n `name: ${escapedName}`,\n `description: ${escapedDesc}`,\n `version: 1.0.0`,\n `tags: [${escapedTags.join(', ')}]`,\n `source: skillkit-memory`,\n `sourceType: local`,\n ];\n\n if (learning.frameworks?.length) {\n const escapedFrameworks = learning.frameworks.map((f) => this.escapeYamlValue(f));\n lines.push(`compatibility:`);\n lines.push(` frameworks: [${escapedFrameworks.join(', ')}]`);\n }\n\n lines.push('---', '', `# ${learning.title}`, '');\n\n if (learning.patterns?.length) {\n lines.push(`## Patterns`, '');\n for (const pattern of learning.patterns) {\n lines.push(`- ${pattern}`);\n }\n lines.push('');\n }\n\n lines.push(`## Content`, '', learning.content, '');\n\n lines.push(\n '---',\n '',\n '*Exported from SkillKit session memory*',\n `*Created: ${new Date(learning.createdAt).toLocaleDateString()}*`,\n `*Uses: ${learning.useCount}*`\n );\n\n if (learning.effectiveness !== undefined) {\n lines.push(`*Effectiveness: ${learning.effectiveness}%*`);\n }\n\n return lines.join('\\n');\n }\n}\n","import { Command, Option } from 'clipanion';\nimport chalk from 'chalk';\nimport { loadConfig, saveConfig, type SkillkitConfig, type AgentType } from '@skillkit/core';\n\nconst VALID_AGENTS: AgentType[] = [\n 'claude-code', 'cursor', 'codex', 'gemini-cli', 'opencode',\n 'antigravity', 'amp', 'clawdbot', 'droid', 'github-copilot',\n 'goose', 'kilo', 'kiro-cli', 'roo', 'trae', 'windsurf', 'universal',\n];\n\n/**\n * Settings command - view and modify SkillKit configuration\n */\nexport class SettingsCommand extends Command {\n static override paths = [['settings'], ['config']];\n\n static override usage = Command.Usage({\n description: 'View and modify SkillKit settings',\n details: `\n View or modify SkillKit configuration. Settings are stored in skillkit.yaml.\n\n Without arguments, shows all current settings.\n With --set, modifies a specific setting.\n `,\n examples: [\n ['Show all settings', '$0 settings'],\n ['Set default agent', '$0 settings --set agent=claude-code'],\n ['Enable auto-sync', '$0 settings --set autoSync=true'],\n ['Set cache directory', '$0 settings --set cacheDir=~/.cache/skillkit'],\n ['Show settings as JSON', '$0 settings --json'],\n ['Save to global config', '$0 settings --set agent=cursor --global'],\n ],\n });\n\n // Set a setting\n set = Option.String('--set,-s', {\n description: 'Set a config value (key=value)',\n });\n\n // Get a specific setting\n get = Option.String('--get,-g', {\n description: 'Get a specific setting value',\n });\n\n // JSON output\n json = Option.Boolean('--json,-j', false, {\n description: 'Output as JSON',\n });\n\n // Global config\n global = Option.Boolean('--global', false, {\n description: 'Use global config (~/.config/skillkit/)',\n });\n\n // Reset to defaults\n reset = Option.Boolean('--reset', false, {\n description: 'Reset all settings to defaults',\n });\n\n async execute(): Promise<number> {\n // Load current config (respect --global flag)\n const config = loadConfig(this.global);\n\n // Reset to defaults\n if (this.reset) {\n const defaultConfig: SkillkitConfig = {\n version: 1,\n agent: 'universal',\n autoSync: true,\n };\n saveConfig(defaultConfig, this.global);\n console.log(chalk.green('Settings reset to defaults'));\n return 0;\n }\n\n // Get a specific setting\n if (this.get) {\n // Check if the key is a known setting (not just if value is undefined)\n const knownKeys = [\n 'agent', 'autoSync', 'cacheDir', 'skillsDir',\n 'enabledSkills', 'disabledSkills', 'marketplaceSources', 'defaultTimeout'\n ];\n if (!knownKeys.includes(this.get)) {\n console.error(chalk.red(`Unknown setting: ${this.get}`));\n return 1;\n }\n const value = this.getConfigValue(config, this.get);\n if (this.json) {\n // Use null instead of undefined so the key is preserved in JSON output\n console.log(JSON.stringify({ [this.get]: value ?? null }));\n } else {\n console.log(value ?? '(not set)');\n }\n return 0;\n }\n\n // Set a setting\n if (this.set) {\n const [key, ...valueParts] = this.set.split('=');\n const value = valueParts.join('=');\n\n if (!key || !this.set.includes('=')) {\n console.error(chalk.red('Invalid format. Use: --set key=value'));\n return 1;\n }\n\n const result = this.setConfigValue(config, key, value);\n if (!result.success) {\n console.error(chalk.red(result.error));\n return 1;\n }\n\n saveConfig(config, this.global);\n console.log(chalk.green(`${key} = ${value}`));\n return 0;\n }\n\n // Show all settings\n if (this.json) {\n console.log(JSON.stringify(config, null, 2));\n } else {\n console.log(chalk.cyan('SkillKit Settings'));\n console.log(chalk.dim('─'.repeat(40)));\n console.log();\n\n const settings = [\n { key: 'agent', label: 'Default Agent', value: config.agent },\n { key: 'autoSync', label: 'Auto Sync', value: config.autoSync ? 'enabled' : 'disabled' },\n { key: 'cacheDir', label: 'Cache Dir', value: config.cacheDir || '~/.skillkit/cache' },\n { key: 'skillsDir', label: 'Skills Dir', value: config.skillsDir || '(default)' },\n { key: 'defaultTimeout', label: 'Timeout', value: config.defaultTimeout ? `${config.defaultTimeout}ms` : '(default)' },\n ];\n\n for (const setting of settings) {\n console.log(` ${chalk.white(setting.label.padEnd(14))} ${chalk.dim(setting.value)}`);\n }\n\n if (config.enabledSkills?.length) {\n console.log();\n console.log(` ${chalk.white('Enabled Skills'.padEnd(14))} ${chalk.dim(config.enabledSkills.join(', '))}`);\n }\n\n if (config.disabledSkills?.length) {\n console.log(` ${chalk.white('Disabled Skills'.padEnd(14))} ${chalk.dim(config.disabledSkills.join(', '))}`);\n }\n\n if (config.marketplaceSources?.length) {\n console.log(` ${chalk.white('Marketplaces'.padEnd(14))} ${chalk.dim(config.marketplaceSources.join(', '))}`);\n }\n\n console.log();\n console.log(chalk.dim('Use --set key=value to modify settings'));\n console.log(chalk.dim('Available keys: agent, autoSync, cacheDir, skillsDir, defaultTimeout'));\n }\n\n return 0;\n }\n\n private getConfigValue(config: SkillkitConfig, key: string): unknown {\n switch (key) {\n case 'agent':\n return config.agent;\n case 'autoSync':\n return config.autoSync;\n case 'cacheDir':\n return config.cacheDir;\n case 'skillsDir':\n return config.skillsDir;\n case 'enabledSkills':\n return config.enabledSkills;\n case 'disabledSkills':\n return config.disabledSkills;\n case 'marketplaceSources':\n return config.marketplaceSources;\n case 'defaultTimeout':\n return config.defaultTimeout;\n default:\n return undefined;\n }\n }\n\n private setConfigValue(\n config: SkillkitConfig,\n key: string,\n value: string\n ): { success: boolean; error?: string } {\n switch (key) {\n case 'agent':\n if (!VALID_AGENTS.includes(value as AgentType)) {\n return {\n success: false,\n error: `Invalid agent. Valid options: ${VALID_AGENTS.join(', ')}`,\n };\n }\n config.agent = value as AgentType;\n break;\n\n case 'autoSync':\n if (!['true', 'false', 'enabled', 'disabled'].includes(value.toLowerCase())) {\n return { success: false, error: 'autoSync must be true/false or enabled/disabled' };\n }\n config.autoSync = value.toLowerCase() === 'true' || value.toLowerCase() === 'enabled';\n break;\n\n case 'cacheDir':\n config.cacheDir = value || undefined;\n break;\n\n case 'skillsDir':\n config.skillsDir = value || undefined;\n break;\n\n case 'defaultTimeout': {\n const timeout = parseInt(value, 10);\n if (isNaN(timeout) || timeout <= 0) {\n return { success: false, error: 'defaultTimeout must be a positive number (milliseconds)' };\n }\n config.defaultTimeout = timeout;\n break;\n }\n\n default:\n return { success: false, error: `Unknown setting: ${key}` };\n }\n\n return { success: true };\n }\n}\n","import { Command, Option } from 'clipanion';\nimport chalk from 'chalk';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\ntype CICDProvider = 'github' | 'gitlab' | 'circleci';\n\nconst GITHUB_ACTIONS_WORKFLOW = `name: SkillKit CI\n\non:\n push:\n branches: [main, master]\n paths:\n - '.skillkit/**'\n - 'skills/**'\n - '.claude/skills/**'\n - '.cursor/skills/**'\n pull_request:\n branches: [main, master]\n paths:\n - '.skillkit/**'\n - 'skills/**'\n - '.claude/skills/**'\n - '.cursor/skills/**'\n\njobs:\n validate:\n name: Validate Skills\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - uses: actions/setup-node@v4\n with:\n node-version: '20'\n\n - name: Install SkillKit\n run: npm install -g skillkit\n\n - name: Validate Skills\n run: skillkit validate --all\n\n - name: List Skills\n run: skillkit list\n\n test:\n name: Test Skills\n runs-on: ubuntu-latest\n needs: validate\n steps:\n - uses: actions/checkout@v4\n\n - uses: actions/setup-node@v4\n with:\n node-version: '20'\n\n - name: Install SkillKit\n run: npm install -g skillkit\n\n - name: Run Skill Tests\n run: skillkit test --all\n continue-on-error: true\n\n sync:\n name: Sync Skills\n runs-on: ubuntu-latest\n needs: validate\n if: github.event_name == 'push'\n steps:\n - uses: actions/checkout@v4\n\n - uses: actions/setup-node@v4\n with:\n node-version: '20'\n\n - name: Install SkillKit\n run: npm install -g skillkit\n\n - name: Sync Skills to All Agents\n run: skillkit sync --yes\n`;\n\nconst GITLAB_CI = `stages:\n - validate\n - test\n - sync\n\nvariables:\n NODE_VERSION: \"20\"\n\n.skillkit-base:\n image: node:\\${NODE_VERSION}\n before_script:\n - npm install -g skillkit\n rules:\n - changes:\n - .skillkit/**/*\n - skills/**/*\n - .claude/skills/**/*\n - .cursor/skills/**/*\n\nvalidate:\n extends: .skillkit-base\n stage: validate\n script:\n - skillkit validate --all\n - skillkit list\n\ntest:\n extends: .skillkit-base\n stage: test\n script:\n - skillkit test --all\n allow_failure: true\n needs:\n - validate\n\nsync:\n extends: .skillkit-base\n stage: sync\n script:\n - skillkit sync --yes\n needs:\n - validate\n rules:\n - if: $CI_COMMIT_BRANCH == \"main\" || $CI_COMMIT_BRANCH == \"master\"\n changes:\n - .skillkit/**/*\n - skills/**/*\n - .claude/skills/**/*\n - .cursor/skills/**/*\n`;\n\nconst CIRCLECI_CONFIG = `version: 2.1\n\nexecutors:\n node:\n docker:\n - image: cimg/node:20.0\n\njobs:\n validate:\n executor: node\n steps:\n - checkout\n - run:\n name: Install SkillKit\n command: npm install -g skillkit\n - run:\n name: Validate Skills\n command: skillkit validate --all\n - run:\n name: List Skills\n command: skillkit list\n\n test:\n executor: node\n steps:\n - checkout\n - run:\n name: Install SkillKit\n command: npm install -g skillkit\n - run:\n name: Run Skill Tests\n command: skillkit test --all || true\n\n sync:\n executor: node\n steps:\n - checkout\n - run:\n name: Install SkillKit\n command: npm install -g skillkit\n - run:\n name: Sync Skills\n command: skillkit sync --yes\n\nworkflows:\n skillkit:\n jobs:\n - validate:\n filters:\n branches:\n only:\n - main\n - master\n - test:\n requires:\n - validate\n - sync:\n requires:\n - validate\n filters:\n branches:\n only:\n - main\n - master\n`;\n\n/**\n * CICD command - initialize CI/CD workflows for skill validation and testing\n */\nexport class CICDCommand extends Command {\n static override paths = [['cicd', 'init']];\n\n static override usage = Command.Usage({\n description: 'Initialize CI/CD workflows for skill validation',\n details: `\n The cicd command sets up continuous integration workflows to automatically\n validate and test skills on every push or pull request.\n\n Supported providers: github, gitlab, circleci\n `,\n examples: [\n ['Initialize GitHub Actions workflow', '$0 cicd init'],\n ['Initialize GitLab CI', '$0 cicd init --provider gitlab'],\n ['Initialize CircleCI', '$0 cicd init --provider circleci'],\n ['Initialize all providers', '$0 cicd init --all'],\n ['Force overwrite existing files', '$0 cicd init --force'],\n ],\n });\n\n // Provider selection\n provider = Option.String('--provider,-p', 'github', {\n description: 'CI/CD provider (github, gitlab, circleci)',\n });\n\n // Generate for all providers\n all = Option.Boolean('--all,-a', false, {\n description: 'Generate workflows for all supported providers',\n });\n\n // Force overwrite\n force = Option.Boolean('--force,-f', false, {\n description: 'Overwrite existing workflow files',\n });\n\n // Project path\n targetPath = Option.String('--path', {\n description: 'Project path (default: current directory)',\n });\n\n async execute(): Promise<number> {\n const projectPath = this.targetPath || process.cwd();\n\n const providers: CICDProvider[] = this.all\n ? ['github', 'gitlab', 'circleci']\n : [this.provider as CICDProvider];\n\n console.log(chalk.cyan('Initializing CI/CD workflows...'));\n console.log();\n\n let success = true;\n let created = false;\n\n for (const provider of providers) {\n const result = this.createWorkflow(projectPath, provider);\n if (result.skipped) {\n console.log(chalk.yellow(` ${result.message}`));\n continue;\n }\n if (!result.success) {\n success = false;\n console.error(chalk.red(` ${result.message}`));\n continue;\n }\n created = true;\n console.log(chalk.green(` ✓ ${result.message}`));\n }\n\n if (success) {\n console.log();\n console.log(\n created\n ? chalk.green('CI/CD workflows initialized successfully!')\n : chalk.yellow('CI/CD workflows already exist; nothing to do.')\n );\n console.log();\n if (created) {\n console.log(chalk.dim('The workflows will run on push/PR to validate your skills.'));\n console.log(chalk.dim('Commit the generated files to enable CI/CD.'));\n }\n }\n\n return success ? 0 : 1;\n }\n\n private createWorkflow(\n projectPath: string,\n provider: CICDProvider\n ): { success: boolean; message: string; skipped?: boolean } {\n switch (provider) {\n case 'github':\n return this.createGitHubActions(projectPath);\n case 'gitlab':\n return this.createGitLabCI(projectPath);\n case 'circleci':\n return this.createCircleCI(projectPath);\n default:\n return { success: false, message: `Unknown provider: ${provider}` };\n }\n }\n\n private createGitHubActions(projectPath: string): { success: boolean; message: string; skipped?: boolean } {\n const workflowDir = join(projectPath, '.github', 'workflows');\n const workflowFile = join(workflowDir, 'skillkit.yml');\n\n if (existsSync(workflowFile) && !this.force) {\n return {\n success: true,\n message: `GitHub Actions workflow already exists (use --force to overwrite)`,\n skipped: true,\n };\n }\n\n try {\n mkdirSync(workflowDir, { recursive: true });\n writeFileSync(workflowFile, GITHUB_ACTIONS_WORKFLOW);\n return { success: true, message: `Created ${workflowFile}` };\n } catch (error) {\n return { success: false, message: `Failed to create GitHub workflow: ${error}` };\n }\n }\n\n private createGitLabCI(projectPath: string): { success: boolean; message: string; skipped?: boolean } {\n const ciFile = join(projectPath, '.gitlab-ci.yml');\n\n if (existsSync(ciFile) && !this.force) {\n // Check if skillkit jobs already exist for better messaging\n try {\n const content = readFileSync(ciFile, 'utf-8');\n if (content.includes('skillkit')) {\n return {\n success: true,\n message: `.gitlab-ci.yml already contains SkillKit config (use --force to overwrite)`,\n skipped: true,\n };\n }\n return {\n success: true,\n message: `.gitlab-ci.yml already exists (use --force to overwrite)`,\n skipped: true,\n };\n } catch (error) {\n return {\n success: false,\n message: `Failed to read .gitlab-ci.yml: ${error}`,\n };\n }\n }\n\n try {\n writeFileSync(ciFile, GITLAB_CI);\n return { success: true, message: `Created ${ciFile}` };\n } catch (error) {\n return { success: false, message: `Failed to create GitLab CI config: ${error}` };\n }\n }\n\n private createCircleCI(projectPath: string): { success: boolean; message: string; skipped?: boolean } {\n const circleDir = join(projectPath, '.circleci');\n const configFile = join(circleDir, 'config.yml');\n\n if (existsSync(configFile) && !this.force) {\n return {\n success: true,\n message: `CircleCI config already exists (use --force to overwrite)`,\n skipped: true,\n };\n }\n\n try {\n mkdirSync(circleDir, { recursive: true });\n writeFileSync(configFile, CIRCLECI_CONFIG);\n return { success: true, message: `Created ${configFile}` };\n } catch (error) {\n return { success: false, message: `Failed to create CircleCI config: ${error}` };\n }\n }\n}\n","/**\n * Team Command\n *\n * Manage team skill sharing and collaboration\n */\n\nimport { Command, Option } from 'clipanion';\nimport chalk from 'chalk';\nimport { createTeamManager, createSkillBundle, exportBundle, importBundle } from '@skillkit/core';\nimport { join } from 'node:path';\n\nexport class TeamCommand extends Command {\n static override paths = [['team']];\n\n static override usage = Command.Usage({\n description: 'Manage team skill sharing and collaboration',\n examples: [\n ['Initialize team', '$0 team init --name \"My Team\" --registry https://github.com/myteam/skills'],\n ['Share a skill', '$0 team share --name my-skill'],\n ['Import a skill', '$0 team import --name shared-skill'],\n ['List shared skills', '$0 team list'],\n ['Sync with remote', '$0 team sync'],\n ['Create a bundle', '$0 team bundle-create --name my-bundle --skills skill1,skill2'],\n ['Export a bundle', '$0 team bundle-export --name my-bundle --output ./bundle.json'],\n ['Import a bundle', '$0 team bundle-import --source ./bundle.json'],\n ],\n });\n\n action = Option.String({ required: true });\n name = Option.String('--name', { description: 'Team name (for init), skill name, or bundle name' });\n registry = Option.String('--registry', { description: 'Registry URL (for init)' });\n description = Option.String('--description,-d', { description: 'Description (for share/bundle)' });\n tags = Option.String('--tags,-t', { description: 'Comma-separated tags (for share)' });\n skills = Option.String('--skills', { description: 'Comma-separated skill names (for bundle)' });\n output = Option.String('--output,-o', { description: 'Output path (for bundle-export)' });\n source = Option.String('--source,-s', { description: 'Source path (for bundle-import)' });\n overwrite = Option.Boolean('--overwrite', { description: 'Overwrite existing (for import)' });\n dryRun = Option.Boolean('--dry-run', { description: 'Preview without changes' });\n\n async execute(): Promise<number> {\n const projectPath = process.cwd();\n const teamManager = createTeamManager(projectPath);\n\n try {\n switch (this.action) {\n case 'init':\n return await this.initTeam(teamManager);\n case 'share':\n return await this.shareSkill(teamManager);\n case 'import':\n return await this.importSkill(teamManager);\n case 'list':\n return await this.listSkills(teamManager);\n case 'sync':\n return await this.syncTeam(teamManager);\n case 'remove':\n return await this.removeSkill(teamManager);\n case 'bundle-create':\n return await this.createBundle(teamManager);\n case 'bundle-export':\n return await this.exportSkillBundle(teamManager);\n case 'bundle-import':\n return await this.importSkillBundle();\n default:\n this.context.stderr.write(chalk.red(`Unknown action: ${this.action}\\n`));\n this.context.stderr.write('Available actions: init, share, import, list, sync, remove, bundle-create, bundle-export, bundle-import\\n');\n return 1;\n }\n } catch (err) {\n this.context.stderr.write(chalk.red(`✗ ${err instanceof Error ? err.message : 'Unknown error'}\\n`));\n return 1;\n }\n }\n\n private async initTeam(teamManager: ReturnType<typeof createTeamManager>): Promise<number> {\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name is required for init\\n'));\n return 1;\n }\n if (!this.registry) {\n this.context.stderr.write(chalk.red('--registry is required for init\\n'));\n return 1;\n }\n\n const config = await teamManager.init({\n teamName: this.name,\n registryUrl: this.registry,\n });\n\n this.context.stdout.write(chalk.green('✓ Team initialized!\\n'));\n this.context.stdout.write(` Team ID: ${config.teamId}\\n`);\n this.context.stdout.write(` Registry: ${config.registryUrl}\\n`);\n return 0;\n }\n\n private async shareSkill(teamManager: ReturnType<typeof createTeamManager>): Promise<number> {\n const config = teamManager.load();\n if (!config) {\n this.context.stderr.write(chalk.red('Team not initialized. Run `skillkit team init` first.\\n'));\n return 1;\n }\n\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name <skill-name> is required for share\\n'));\n return 1;\n }\n\n const shared = await teamManager.shareSkill({\n skillName: this.name,\n description: this.description,\n tags: this.tags?.split(',').map((t) => t.trim()),\n });\n\n this.context.stdout.write(chalk.green('✓ Skill shared!\\n'));\n this.context.stdout.write(` Name: ${shared.name}\\n`);\n this.context.stdout.write(` Version: ${shared.version}\\n`);\n this.context.stdout.write(` Source: ${shared.source}\\n`);\n return 0;\n }\n\n private async importSkill(teamManager: ReturnType<typeof createTeamManager>): Promise<number> {\n const config = teamManager.load();\n if (!config) {\n this.context.stderr.write(chalk.red('Team not initialized. Run `skillkit team init` first.\\n'));\n return 1;\n }\n\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name <skill-name> is required for import\\n'));\n return 1;\n }\n\n const result = await teamManager.importSkill(this.name, {\n overwrite: this.overwrite,\n dryRun: this.dryRun,\n });\n\n if (!result.success) {\n this.context.stderr.write(chalk.red(`✗ ${result.error}\\n`));\n return 1;\n }\n\n if (this.dryRun) {\n this.context.stdout.write(chalk.cyan(`[dry-run] Would import to: ${result.path}\\n`));\n } else {\n this.context.stdout.write(chalk.green(`✓ Skill imported to: ${result.path}\\n`));\n }\n return 0;\n }\n\n private async listSkills(teamManager: ReturnType<typeof createTeamManager>): Promise<number> {\n const config = teamManager.load();\n if (!config) {\n this.context.stderr.write(chalk.red('Team not initialized. Run `skillkit team init` first.\\n'));\n return 1;\n }\n\n const skills = teamManager.listSharedSkills();\n\n this.context.stdout.write(chalk.cyan(`Team: ${config.teamName}\\n`));\n this.context.stdout.write(chalk.gray(`Registry: ${config.registryUrl}\\n\\n`));\n\n if (skills.length === 0) {\n this.context.stdout.write('No shared skills yet. Use `skillkit team share` to share a skill.\\n');\n return 0;\n }\n\n this.context.stdout.write(`Shared Skills (${skills.length}):\\n`);\n for (const skill of skills) {\n this.context.stdout.write(chalk.cyan(` ${skill.name}`) + ` v${skill.version}\\n`);\n if (skill.description) {\n this.context.stdout.write(chalk.gray(` ${skill.description}\\n`));\n }\n this.context.stdout.write(` by ${skill.author} | ${skill.downloads || 0} downloads\\n`);\n }\n\n return 0;\n }\n\n private async syncTeam(teamManager: ReturnType<typeof createTeamManager>): Promise<number> {\n const config = teamManager.load();\n if (!config) {\n this.context.stderr.write(chalk.red('Team not initialized. Run `skillkit team init` first.\\n'));\n return 1;\n }\n\n this.context.stdout.write(`Syncing with ${config.registryUrl}...\\n`);\n\n const result = await teamManager.sync();\n\n this.context.stdout.write(chalk.green('✓ Sync complete!\\n'));\n if (result.added.length > 0) {\n this.context.stdout.write(` Added: ${result.added.join(', ')}\\n`);\n }\n if (result.updated.length > 0) {\n this.context.stdout.write(` Updated: ${result.updated.join(', ')}\\n`);\n }\n if (result.added.length === 0 && result.updated.length === 0) {\n this.context.stdout.write(' Already up to date.\\n');\n }\n\n return 0;\n }\n\n private async removeSkill(teamManager: ReturnType<typeof createTeamManager>): Promise<number> {\n const config = teamManager.load();\n if (!config) {\n this.context.stderr.write(chalk.red('Team not initialized. Run `skillkit team init` first.\\n'));\n return 1;\n }\n\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name <skill-name> is required for remove\\n'));\n return 1;\n }\n\n const removed = teamManager.removeSkill(this.name);\n if (!removed) {\n this.context.stderr.write(chalk.red(`Skill \"${this.name}\" not found in team registry.\\n`));\n return 1;\n }\n\n this.context.stdout.write(chalk.green(`✓ Skill \"${this.name}\" removed from team registry.\\n`));\n return 0;\n }\n\n private async createBundle(teamManager: ReturnType<typeof createTeamManager>): Promise<number> {\n const config = teamManager.load();\n if (!config) {\n this.context.stderr.write(chalk.red('Team not initialized. Run `skillkit team init` first.\\n'));\n return 1;\n }\n\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name <bundle-name> is required for bundle-create\\n'));\n return 1;\n }\n\n if (!this.skills) {\n this.context.stderr.write(chalk.red('--skills <skill1,skill2,...> is required for bundle-create\\n'));\n return 1;\n }\n\n const skillNames = this.skills.split(',').map((s) => s.trim());\n const projectPath = process.cwd();\n const skillsDir = join(projectPath, 'skills');\n\n // Create the bundle\n const bundle = createSkillBundle(this.name, config.teamName, this.description);\n\n let addedCount = 0;\n for (const skillName of skillNames) {\n const skillPath = join(skillsDir, skillName);\n try {\n bundle.addSkill(skillPath);\n addedCount++;\n this.context.stdout.write(chalk.gray(` + ${skillName}\\n`));\n } catch (err) {\n this.context.stderr.write(chalk.yellow(` ⚠ Skipping ${skillName}: ${err instanceof Error ? err.message : 'Unknown error'}\\n`));\n }\n }\n\n if (addedCount === 0) {\n this.context.stderr.write(chalk.red('No skills were added to the bundle.\\n'));\n return 1;\n }\n\n // Export to default location\n const outputPath = this.output || join(projectPath, '.skillkit', 'bundles', `${this.name}.json`);\n const result = exportBundle(bundle, outputPath);\n\n if (!result.success) {\n this.context.stderr.write(chalk.red(`✗ ${result.error}\\n`));\n return 1;\n }\n\n this.context.stdout.write(chalk.green(`\\n✓ Bundle \"${this.name}\" created with ${addedCount} skills!\\n`));\n this.context.stdout.write(` Checksum: ${bundle.getChecksum()}\\n`);\n this.context.stdout.write(` Output: ${result.path}\\n`);\n return 0;\n }\n\n private async exportSkillBundle(teamManager: ReturnType<typeof createTeamManager>): Promise<number> {\n const config = teamManager.load();\n if (!config) {\n this.context.stderr.write(chalk.red('Team not initialized. Run `skillkit team init` first.\\n'));\n return 1;\n }\n\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name <bundle-name> is required for bundle-export\\n'));\n return 1;\n }\n\n if (!this.output) {\n this.context.stderr.write(chalk.red('--output <path> is required for bundle-export\\n'));\n return 1;\n }\n\n const projectPath = process.cwd();\n const bundlePath = join(projectPath, '.skillkit', 'bundles', `${this.name}.json`);\n\n // Check if bundle exists\n const { existsSync, readFileSync, writeFileSync } = await import('node:fs');\n if (!existsSync(bundlePath)) {\n this.context.stderr.write(chalk.red(`Bundle \"${this.name}\" not found. Create it first with bundle-create.\\n`));\n return 1;\n }\n\n // Copy bundle to output\n const content = readFileSync(bundlePath, 'utf-8');\n writeFileSync(this.output, content, 'utf-8');\n\n this.context.stdout.write(chalk.green(`✓ Bundle exported to: ${this.output}\\n`));\n return 0;\n }\n\n private async importSkillBundle(): Promise<number> {\n if (!this.source) {\n this.context.stderr.write(chalk.red('--source <path> is required for bundle-import\\n'));\n return 1;\n }\n\n const { existsSync } = await import('node:fs');\n if (!existsSync(this.source)) {\n this.context.stderr.write(chalk.red(`Bundle file not found: ${this.source}\\n`));\n return 1;\n }\n\n const projectPath = process.cwd();\n const skillsDir = join(projectPath, 'skills');\n\n if (this.dryRun) {\n this.context.stdout.write(chalk.cyan('[dry-run] Would import bundle to: ' + skillsDir + '\\n'));\n return 0;\n }\n\n const result = importBundle(this.source, skillsDir, { overwrite: this.overwrite });\n\n if (!result.success && result.imported.length === 0) {\n this.context.stderr.write(chalk.red('✗ Failed to import bundle:\\n'));\n for (const error of result.errors) {\n this.context.stderr.write(chalk.red(` - ${error}\\n`));\n }\n return 1;\n }\n\n this.context.stdout.write(chalk.green(`✓ Imported ${result.imported.length} skills from bundle!\\n`));\n for (const name of result.imported) {\n this.context.stdout.write(chalk.gray(` + ${name}\\n`));\n }\n if (result.errors.length > 0) {\n this.context.stdout.write(chalk.yellow('\\nWarnings:\\n'));\n for (const error of result.errors) {\n this.context.stdout.write(chalk.yellow(` - ${error}\\n`));\n }\n }\n return 0;\n }\n}\n","/**\n * Plugin Command\n *\n * Manage SkillKit plugins\n */\n\nimport { Command, Option } from 'clipanion';\nimport { join, isAbsolute, resolve, sep } from 'node:path';\nimport { homedir } from 'node:os';\nimport { existsSync, mkdirSync, copyFileSync, cpSync, rmSync } from 'node:fs';\nimport chalk from 'chalk';\nimport { createPluginManager, loadPlugin, loadPluginsFromDirectory } from '@skillkit/core';\n\nexport class PluginCommand extends Command {\n static override paths = [['plugin']];\n\n static override usage = Command.Usage({\n description: 'Manage SkillKit plugins',\n examples: [\n ['List installed plugins', '$0 plugin list'],\n ['Install a plugin', '$0 plugin install --source ./my-plugin'],\n ['Install from npm', '$0 plugin install --source skillkit-plugin-gitlab'],\n ['Uninstall a plugin', '$0 plugin uninstall --name my-plugin'],\n ['Enable a plugin', '$0 plugin enable --name my-plugin'],\n ['Disable a plugin', '$0 plugin disable --name my-plugin'],\n ],\n });\n\n action = Option.String({ required: true });\n source = Option.String('--source,-s', { description: 'Plugin source (file path or npm package)' });\n name = Option.String('--name,-n', { description: 'Plugin name' });\n global = Option.Boolean('--global,-g', { description: 'Use global plugin directory' });\n\n async execute(): Promise<number> {\n const projectPath = this.global\n ? join(homedir(), '.skillkit')\n : process.cwd();\n const pluginManager = createPluginManager(projectPath);\n\n // Auto-load plugins from directory\n const pluginsDir = this.global\n ? join(projectPath, 'plugins')\n : join(projectPath, '.skillkit', 'plugins');\n try {\n const plugins = await loadPluginsFromDirectory(pluginsDir);\n for (const plugin of plugins) {\n if (pluginManager.isPluginEnabled(plugin.metadata.name)) {\n await pluginManager.register(plugin);\n }\n }\n } catch {\n // Plugins directory may not exist\n }\n\n try {\n switch (this.action) {\n case 'list':\n return this.listPlugins(pluginManager);\n case 'install':\n return await this.installPlugin(pluginManager);\n case 'uninstall':\n return await this.uninstallPlugin(pluginManager);\n case 'enable':\n return this.enablePlugin(pluginManager);\n case 'disable':\n return this.disablePlugin(pluginManager);\n case 'info':\n return this.pluginInfo(pluginManager);\n default:\n this.context.stderr.write(chalk.red(`Unknown action: ${this.action}\\n`));\n this.context.stderr.write('Available actions: list, install, uninstall, enable, disable, info\\n');\n return 1;\n }\n } catch (err) {\n this.context.stderr.write(chalk.red(`✗ ${err instanceof Error ? err.message : 'Unknown error'}\\n`));\n return 1;\n }\n }\n\n private listPlugins(pluginManager: ReturnType<typeof createPluginManager>): number {\n const plugins = pluginManager.listPlugins();\n\n if (plugins.length === 0) {\n this.context.stdout.write('No plugins installed.\\n');\n this.context.stdout.write('Use `skillkit plugin install --source <source>` to install a plugin.\\n');\n return 0;\n }\n\n this.context.stdout.write(chalk.cyan(`Installed Plugins (${plugins.length}):\\n\\n`));\n\n for (const plugin of plugins) {\n const enabled = pluginManager.isPluginEnabled(plugin.name);\n const status = enabled\n ? chalk.green('enabled')\n : chalk.gray('disabled');\n\n this.context.stdout.write(chalk.cyan(` ${plugin.name}`) + ` v${plugin.version} [${status}]\\n`);\n if (plugin.description) {\n this.context.stdout.write(chalk.gray(` ${plugin.description}\\n`));\n }\n }\n\n // Show registered extensions\n const translators = pluginManager.getAllTranslators();\n const providers = pluginManager.getAllProviders();\n const commands = pluginManager.getAllCommands();\n\n if (translators.size > 0 || providers.size > 0 || commands.length > 0) {\n this.context.stdout.write(chalk.cyan('\\nRegistered Extensions:\\n'));\n if (translators.size > 0) {\n this.context.stdout.write(` Translators: ${Array.from(translators.keys()).join(', ')}\\n`);\n }\n if (providers.size > 0) {\n this.context.stdout.write(` Providers: ${Array.from(providers.keys()).join(', ')}\\n`);\n }\n if (commands.length > 0) {\n this.context.stdout.write(` Commands: ${commands.map((c) => c.name).join(', ')}\\n`);\n }\n }\n\n return 0;\n }\n\n /**\n * Validate plugin name to prevent path traversal attacks\n * Allows scoped npm names like @scope/name (mirrors loader.ts validation)\n */\n private isValidPluginName(name: string): boolean {\n if (!name) return false;\n\n // Reject backslashes, path traversal sequences, and names starting with '.'\n if (name.includes('\\\\') || name.includes('..') || name === '.' || name.startsWith('.')) {\n return false;\n }\n\n // Allow scoped npm names (@scope/name) or simple names (no slashes)\n // Use the same regex pattern as loader.ts validatePlugin\n return /^(?:@[a-z0-9-]+\\/)?[a-z0-9-]+$/.test(name);\n }\n\n private async installPlugin(pluginManager: ReturnType<typeof createPluginManager>): Promise<number> {\n if (!this.source) {\n this.context.stderr.write(chalk.red('--source is required for install\\n'));\n return 1;\n }\n\n // Expand tilde to home directory for all operations\n const resolvedSource = this.source.startsWith('~')\n ? join(homedir(), this.source.slice(1))\n : this.source;\n\n this.context.stdout.write(`Installing plugin from ${this.source}...\\n`);\n\n const plugin = await loadPlugin(resolvedSource);\n\n // Validate plugin name from metadata\n const pluginName = plugin.metadata.name;\n if (!this.isValidPluginName(pluginName)) {\n this.context.stderr.write(chalk.red(`Invalid plugin name: ${pluginName}\\n`));\n return 1;\n }\n\n // Determine plugins directory\n const projectPath = this.global\n ? join(homedir(), '.skillkit')\n : process.cwd();\n const pluginsDir = this.global\n ? join(projectPath, 'plugins')\n : join(projectPath, '.skillkit', 'plugins');\n\n // Persist plugin files to disk if source is a local file/directory\n const isLocalPath =\n this.source.startsWith('./') ||\n this.source.startsWith('../') ||\n this.source.startsWith('/') ||\n this.source.startsWith('~') ||\n this.source.includes('\\\\') ||\n isAbsolute(this.source);\n\n if (isLocalPath && existsSync(resolvedSource)) {\n const targetDir = join(pluginsDir, pluginName);\n\n // Verify targetDir is within pluginsDir (defense in depth)\n const resolvedTarget = resolve(targetDir);\n const resolvedPluginsDir = resolve(pluginsDir);\n if (!resolvedTarget.startsWith(resolvedPluginsDir + sep)) {\n this.context.stderr.write(chalk.red('Invalid plugin name\\n'));\n return 1;\n }\n\n // Create plugins directory if needed\n if (!existsSync(pluginsDir)) {\n mkdirSync(pluginsDir, { recursive: true });\n }\n\n // Copy plugin to plugins directory\n const { statSync } = await import('node:fs');\n const sourceStat = statSync(resolvedSource);\n\n if (sourceStat.isDirectory()) {\n // Copy entire directory\n cpSync(resolvedSource, targetDir, { recursive: true });\n } else {\n // Copy single file with a loader-recognized name\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n // Preserve .mjs for ESM plugins, use .js for others\n let destFileName: string;\n if (resolvedSource.endsWith('.json')) {\n destFileName = 'plugin.json';\n } else if (resolvedSource.endsWith('.mjs')) {\n destFileName = 'index.mjs';\n } else {\n destFileName = 'index.js';\n }\n copyFileSync(resolvedSource, join(targetDir, destFileName));\n }\n\n this.context.stdout.write(chalk.dim(` Copied to ${targetDir}\\n`));\n }\n\n await pluginManager.register(plugin);\n\n this.context.stdout.write(chalk.green(`✓ Plugin \"${plugin.metadata.name}\" installed!\\n`));\n this.context.stdout.write(` Version: ${plugin.metadata.version}\\n`);\n if (plugin.metadata.description) {\n this.context.stdout.write(` ${plugin.metadata.description}\\n`);\n }\n\n // Show what was registered\n if (plugin.translators?.length) {\n this.context.stdout.write(` Translators: ${plugin.translators.map((t) => t.agentType).join(', ')}\\n`);\n }\n if (plugin.providers?.length) {\n this.context.stdout.write(` Providers: ${plugin.providers.map((p) => p.providerName).join(', ')}\\n`);\n }\n if (plugin.commands?.length) {\n this.context.stdout.write(` Commands: ${plugin.commands.map((c) => c.name).join(', ')}\\n`);\n }\n\n return 0;\n }\n\n private async uninstallPlugin(pluginManager: ReturnType<typeof createPluginManager>): Promise<number> {\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name is required for uninstall\\n'));\n return 1;\n }\n\n // Validate plugin name to prevent path traversal attacks\n if (!this.isValidPluginName(this.name)) {\n this.context.stderr.write(chalk.red('Invalid plugin name\\n'));\n return 1;\n }\n\n await pluginManager.unregister(this.name);\n\n // Remove plugin files from disk\n const projectPath = this.global\n ? join(homedir(), '.skillkit')\n : process.cwd();\n const pluginsDir = this.global\n ? join(projectPath, 'plugins')\n : join(projectPath, '.skillkit', 'plugins');\n const pluginDir = join(pluginsDir, this.name);\n\n // Verify pluginDir is within pluginsDir (defense in depth)\n const resolvedPluginDir = resolve(pluginDir);\n const resolvedPluginsDir = resolve(pluginsDir);\n if (!resolvedPluginDir.startsWith(resolvedPluginsDir + sep)) {\n this.context.stderr.write(chalk.red('Invalid plugin name\\n'));\n return 1;\n }\n\n if (existsSync(pluginDir)) {\n rmSync(pluginDir, { recursive: true, force: true });\n this.context.stdout.write(chalk.dim(` Removed ${pluginDir}\\n`));\n }\n\n this.context.stdout.write(chalk.green(`✓ Plugin \"${this.name}\" uninstalled.\\n`));\n return 0;\n }\n\n private enablePlugin(pluginManager: ReturnType<typeof createPluginManager>): number {\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name is required for enable\\n'));\n return 1;\n }\n\n pluginManager.enablePlugin(this.name);\n this.context.stdout.write(chalk.green(`✓ Plugin \"${this.name}\" enabled.\\n`));\n return 0;\n }\n\n private disablePlugin(pluginManager: ReturnType<typeof createPluginManager>): number {\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name is required for disable\\n'));\n return 1;\n }\n\n pluginManager.disablePlugin(this.name);\n this.context.stdout.write(chalk.green(`✓ Plugin \"${this.name}\" disabled.\\n`));\n return 0;\n }\n\n private pluginInfo(pluginManager: ReturnType<typeof createPluginManager>): number {\n if (!this.name) {\n this.context.stderr.write(chalk.red('--name is required for info\\n'));\n return 1;\n }\n\n const plugin = pluginManager.getPlugin(this.name);\n if (!plugin) {\n this.context.stderr.write(chalk.red(`Plugin \"${this.name}\" not found.\\n`));\n return 1;\n }\n\n const { metadata } = plugin;\n const enabled = pluginManager.isPluginEnabled(this.name);\n\n this.context.stdout.write(chalk.cyan(`${metadata.name}`) + ` v${metadata.version}\\n`);\n this.context.stdout.write(`Status: ${enabled ? 'enabled' : 'disabled'}\\n`);\n if (metadata.description) {\n this.context.stdout.write(`Description: ${metadata.description}\\n`);\n }\n if (metadata.author) {\n this.context.stdout.write(`Author: ${metadata.author}\\n`);\n }\n if (metadata.homepage) {\n this.context.stdout.write(`Homepage: ${metadata.homepage}\\n`);\n }\n if (metadata.keywords?.length) {\n this.context.stdout.write(`Keywords: ${metadata.keywords.join(', ')}\\n`);\n }\n if (metadata.dependencies?.length) {\n this.context.stdout.write(`Dependencies: ${metadata.dependencies.join(', ')}\\n`);\n }\n\n return 0;\n }\n}\n"],"mappings":"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","names":["chalk","Command","Option","Command","Option","chalk","chalk","Command","Option","loadConfig","findAllSkills","getAdapter","detectAgent","Command","Option","config","loadConfig","detectAgent","getAdapter","findAllSkills","chalk","chalk","Command","Option","detectAgent","getAdapter","Command","Option","chalk","detectAgent","getAdapter","chalk","Command","Option","findSkill","Command","Option","findSkill","chalk","existsSync","chalk","Command","Option","findSkill","Command","Option","findSkill","chalk","existsSync","existsSync","mkdirSync","rmSync","chalk","Command","Option","getAdapter","detectAgent","Command","Option","chalk","cleanupPath","existsSync","rmSync","detectAgent","getAdapter","mkdirSync","existsSync","rmSync","cpSync","join","chalk","ora","Command","Option","findAllSkills","findSkill","detectProvider","isLocalPath","Command","Option","ora","findSkill","chalk","findAllSkills","isLocalPath","join","existsSync","rmSync","cpSync","detectProvider","existsSync","join","chalk","Command","Option","existsSync","mkdirSync","writeFileSync","join","chalk","Command","Option","Command","Command","Option","existsSync","readFileSync","writeFileSync","mkdirSync","join","basename","dirname","chalk","findAllSkills","getAdapter","getAllAdapters","Command","Option","chalk","getAllAdapters","findAllSkills","join","existsSync","getAdapter","mkdirSync","writeFileSync","basename","dirname","readFileSync","outputDir","Command","Option","existsSync","readFileSync","writeFileSync","chalk","getAllAdapters","Command","Option","resolve","chalk","ora","ContextManager","truncate","Command","Option","resolve","chalk","Command","Option","resolve","chalk","SessionManager","Command","Option","resolve","chalk","SessionManager","Command","Option","resolve","chalk","ora","Command","Option","resolve","chalk","Command","Option","resolve","chalk","Command","Option","resolve","join","existsSync","readFileSync","chalk","ora","Command","Option","resolve","join","existsSync","readFileSync","readdirSync","chalk","Command","Option","chalk","ora","Command","Option","chalk","result","dirname","existsSync","mkdirSync","writeFileSync","readFileSync","resolve","parseYaml","observationStore","Command","Option","chalk","loadConfig","Command","Option","chalk","existsSync","mkdirSync","writeFileSync","readFileSync","join","Command","Option","chalk","join","existsSync","readFileSync","writeFileSync","Command","Option","join","resolve","existsSync","mkdirSync","cpSync","rmSync","chalk","isLocalPath","statSync"]}
|