@skillkit/cli 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +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"],"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 { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { resolve, join } from 'node:path';\nimport chalk from 'chalk';\nimport {\n type ProjectProfile,\n type SkillSummary,\n type SkillIndex,\n type ScoredSkill,\n ContextManager,\n RecommendationEngine,\n} from '@skillkit/core';\n\nconst INDEX_PATH = join(process.env.HOME || '~', '.skillkit', 'index.json');\nconst INDEX_CACHE_HOURS = 24;\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 --search \"authentication\"'],\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\n search = Option.String('--search,-s', {\n description: 'Search skills by task/query',\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 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\n if (this.search) {\n return this.handleSearch(engine, this.search);\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(): SkillIndex | null {\n if (!existsSync(INDEX_PATH)) {\n return null;\n }\n\n try {\n const content = readFileSync(INDEX_PATH, 'utf-8');\n const index = JSON.parse(content) as SkillIndex;\n\n // Check if index is stale\n const lastUpdated = new Date(index.lastUpdated);\n const hoursSinceUpdate = (Date.now() - lastUpdated.getTime()) / (1000 * 60 * 60);\n\n if (hoursSinceUpdate > INDEX_CACHE_HOURS && !this.json) {\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 } catch {\n return null;\n }\n }\n\n /**\n * Update skill index from sources\n */\n private updateIndex(): number {\n console.log(chalk.cyan('Updating skill index...\\n'));\n\n // For now, create a sample index with well-known skill repositories\n // In the future, this would fetch from a registry or known skill sources\n const sampleIndex: SkillIndex = {\n version: 1,\n lastUpdated: new Date().toISOString(),\n skills: getSampleSkills(),\n sources: [\n {\n name: 'vercel-labs',\n url: 'https://github.com/vercel-labs/agent-skills',\n lastFetched: new Date().toISOString(),\n skillCount: 5,\n },\n {\n name: 'anthropics',\n url: 'https://github.com/anthropics/skills',\n lastFetched: new Date().toISOString(),\n skillCount: 3,\n },\n ],\n };\n\n // Save index\n const indexDir = join(process.env.HOME || '~', '.skillkit');\n if (!existsSync(indexDir)) {\n mkdirSync(indexDir, { recursive: true });\n }\n\n writeFileSync(INDEX_PATH, JSON.stringify(sampleIndex, null, 2));\n\n console.log(chalk.green(`✓ Updated index with ${sampleIndex.skills.length} skills`));\n console.log(chalk.dim(` Sources: ${sampleIndex.sources.map((s) => s.name).join(', ')}`));\n console.log(chalk.dim(` Saved to: ${INDEX_PATH}\\n`));\n\n return 0;\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\n/**\n * Sample skills for the index (in a real implementation, this would fetch from sources)\n */\nfunction getSampleSkills(): SkillSummary[] {\n return [\n {\n name: 'vercel-react-best-practices',\n description: 'Modern React patterns including Server Components, hooks best practices, and performance optimization',\n source: 'vercel-labs/agent-skills',\n tags: ['react', 'frontend', 'typescript', 'nextjs', 'performance'],\n compatibility: {\n frameworks: ['react', 'nextjs'],\n languages: ['typescript', 'javascript'],\n libraries: [],\n },\n popularity: 1500,\n quality: 95,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'tailwind-v4-patterns',\n description: 'Tailwind CSS v4 utility patterns, responsive design, and component styling best practices',\n source: 'vercel-labs/agent-skills',\n tags: ['tailwind', 'css', 'styling', 'frontend', 'responsive'],\n compatibility: {\n frameworks: [],\n languages: ['typescript', 'javascript'],\n libraries: ['tailwindcss'],\n },\n popularity: 1200,\n quality: 92,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'nextjs-app-router',\n description: 'Next.js App Router patterns including layouts, server actions, and data fetching',\n source: 'vercel-labs/agent-skills',\n tags: ['nextjs', 'react', 'routing', 'server-actions', 'frontend'],\n compatibility: {\n frameworks: ['nextjs'],\n languages: ['typescript', 'javascript'],\n libraries: [],\n },\n popularity: 1100,\n quality: 94,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'typescript-strict-patterns',\n description: 'TypeScript strict mode patterns, type safety, and advanced type utilities',\n source: 'anthropics/skills',\n tags: ['typescript', 'types', 'safety', 'patterns'],\n compatibility: {\n frameworks: [],\n languages: ['typescript'],\n libraries: [],\n },\n popularity: 900,\n quality: 90,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'supabase-best-practices',\n description: 'Supabase integration patterns including auth, database queries, and real-time subscriptions',\n source: 'anthropics/skills',\n tags: ['supabase', 'database', 'auth', 'backend', 'postgresql'],\n compatibility: {\n frameworks: [],\n languages: ['typescript', 'javascript'],\n libraries: ['@supabase/supabase-js'],\n },\n popularity: 800,\n quality: 88,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'vitest-testing-patterns',\n description: 'Testing patterns with Vitest including mocking, assertions, and test organization',\n source: 'anthropics/skills',\n tags: ['vitest', 'testing', 'typescript', 'mocking', 'tdd'],\n compatibility: {\n frameworks: [],\n languages: ['typescript', 'javascript'],\n libraries: ['vitest'],\n },\n popularity: 700,\n quality: 86,\n lastUpdated: new Date().toISOString(),\n verified: false,\n },\n {\n name: 'prisma-database-patterns',\n description: 'Prisma ORM patterns for schema design, migrations, and efficient queries',\n source: 'vercel-labs/agent-skills',\n tags: ['prisma', 'database', 'orm', 'postgresql', 'backend'],\n compatibility: {\n frameworks: [],\n languages: ['typescript'],\n libraries: ['@prisma/client'],\n },\n popularity: 850,\n quality: 89,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'security-best-practices',\n description: 'Security patterns for web applications including XSS prevention, CSRF, and secure headers',\n source: 'trailofbits/skills',\n tags: ['security', 'xss', 'csrf', 'headers', 'owasp'],\n compatibility: {\n frameworks: [],\n languages: ['typescript', 'javascript', 'python'],\n libraries: [],\n },\n popularity: 600,\n quality: 95,\n lastUpdated: new Date().toISOString(),\n verified: true,\n },\n {\n name: 'python-fastapi-patterns',\n description: 'FastAPI best practices for building high-performance Python APIs',\n source: 'python-skills/fastapi',\n tags: ['python', 'fastapi', 'backend', 'api', 'async'],\n compatibility: {\n frameworks: ['fastapi'],\n languages: ['python'],\n libraries: [],\n },\n popularity: 550,\n quality: 85,\n lastUpdated: new Date().toISOString(),\n verified: false,\n },\n {\n name: 'zustand-state-management',\n description: 'Zustand state management patterns for React applications',\n source: 'react-skills/state',\n tags: ['zustand', 'react', 'state-management', 'frontend'],\n compatibility: {\n frameworks: ['react'],\n languages: ['typescript', 'javascript'],\n libraries: ['zustand'],\n },\n popularity: 650,\n quality: 84,\n lastUpdated: new Date().toISOString(),\n verified: false,\n },\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","existsSync","readFileSync","writeFileSync","mkdirSync","resolve","join","chalk","ContextManager","truncate"]}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@skillkit/cli",
3
+ "version": "1.3.0",
4
+ "description": "CLI commands for SkillKit",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "dependencies": {
18
+ "chalk": "^5.3.0",
19
+ "clipanion": "^4.0.0-rc.4",
20
+ "got": "^14.4.1",
21
+ "isomorphic-git": "^1.27.1",
22
+ "ora": "^8.1.0",
23
+ "@skillkit/core": "1.3.0",
24
+ "@skillkit/agents": "1.3.0",
25
+ "@skillkit/tui": "1.3.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^22.10.5",
29
+ "tsup": "^8.3.5",
30
+ "typescript": "^5.7.2",
31
+ "vitest": "^2.1.8"
32
+ },
33
+ "engines": {
34
+ "node": ">=18.0.0"
35
+ },
36
+ "license": "Apache-2.0",
37
+ "scripts": {
38
+ "build": "tsup",
39
+ "dev": "tsup --watch",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "vitest run"
42
+ }
43
+ }