skillkit 1.2.0 → 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.
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/providers/base.ts","../src/core/types.ts","../src/core/skills.ts","../src/providers/github.ts","../src/providers/gitlab.ts","../src/providers/bitbucket.ts","../src/providers/local.ts","../src/providers/index.ts","../src/agents/base.ts","../src/agents/claude-code.ts","../src/agents/cursor.ts","../src/agents/codex.ts","../src/agents/gemini-cli.ts","../src/agents/opencode.ts","../src/agents/antigravity.ts","../src/agents/amp.ts","../src/agents/clawdbot.ts","../src/agents/droid.ts","../src/agents/github-copilot.ts","../src/agents/goose.ts","../src/agents/kilo.ts","../src/agents/kiro-cli.ts","../src/agents/roo.ts","../src/agents/trae.ts","../src/agents/windsurf.ts","../src/agents/universal.ts","../src/agents/index.ts","../src/core/config.ts","../src/tui/theme.ts","../src/tui/components/Sidebar.tsx","../src/tui/screens/Home.tsx","../src/tui/hooks/useMarketplace.ts","../src/tui/screens/Browse.tsx","../src/tui/hooks/useSkills.ts","../src/tui/screens/Installed.tsx","../src/tui/screens/Sync.tsx","../src/tui/screens/Settings.tsx","../src/tui/App.tsx","../src/tui/index.tsx","../src/cli.ts","../src/commands/install.ts","../src/commands/sync.ts","../src/commands/read.ts","../src/commands/list.ts","../src/commands/enable.ts","../src/commands/update.ts","../src/commands/remove.ts","../src/commands/init.ts","../src/commands/validate.ts","../src/commands/create.ts","../src/commands/ui.ts"],"sourcesContent":["import type { GitProvider, CloneResult } from '../core/types.js';\n\nexport interface GitProviderAdapter {\n \n readonly type: GitProvider;\n\n readonly name: string;\n\n readonly baseUrl: string;\n\n parseSource(source: string): { owner: string; repo: string; subpath?: string } | null;\n\n matches(source: string): boolean;\n\n getCloneUrl(owner: string, repo: string): string;\n\n getSshUrl(owner: string, repo: string): string;\n\n clone(source: string, targetDir: string, options?: CloneOptions): Promise<CloneResult>;\n}\n\nexport interface CloneOptions {\n depth?: number; \n branch?: string; \n ssh?: boolean; \n}\n\nexport function parseShorthand(source: string): { owner: string; repo: string; subpath?: string } | null {\n \n const cleaned = source.replace(/^\\/+|\\/+$/g, '');\n const parts = cleaned.split('/');\n\n if (parts.length < 2) {\n return null;\n }\n\n const owner = parts[0];\n const repo = parts[1];\n const subpath = parts.length > 2 ? parts.slice(2).join('/') : undefined;\n\n return { owner, repo, subpath };\n}\n\nexport function isLocalPath(source: string): boolean {\n return (\n source.startsWith('/') ||\n source.startsWith('./') ||\n source.startsWith('../') ||\n source.startsWith('~/') ||\n source.startsWith('.')\n );\n}\n\nexport function isGitUrl(source: string): boolean {\n return (\n source.startsWith('git@') ||\n source.startsWith('https://') ||\n source.startsWith('http://') ||\n source.startsWith('ssh://')\n );\n}\n","import { z } from 'zod';\n\nexport const AgentType = z.enum([\n 'claude-code',\n 'codex',\n 'cursor',\n 'antigravity',\n 'opencode',\n 'gemini-cli',\n 'amp',\n 'clawdbot',\n 'droid',\n 'github-copilot',\n 'goose',\n 'kilo',\n 'kiro-cli',\n 'roo',\n 'trae',\n 'windsurf',\n 'universal',\n]);\nexport type AgentType = z.infer<typeof AgentType>;\n\nexport const GitProvider = z.enum(['github', 'gitlab', 'bitbucket', 'local']);\nexport type GitProvider = z.infer<typeof GitProvider>;\n\nexport const SkillFrontmatter = z.object({\n name: z.string()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, 'Skill name must be lowercase alphanumeric with hyphens, no leading/trailing/consecutive hyphens'),\n description: z.string().min(1).max(1024),\n license: z.string().optional(),\n compatibility: z.string().max(500).optional(),\n metadata: z.record(z.string()).optional(),\n 'allowed-tools': z.string().optional(),\n version: z.string().optional(),\n author: z.string().optional(),\n tags: z.array(z.string()).optional(),\n agents: z.array(AgentType).optional(),\n});\nexport type SkillFrontmatter = z.infer<typeof SkillFrontmatter>;\n\nexport const SkillMetadata = z.object({\n name: z.string(),\n description: z.string(),\n source: z.string(),\n sourceType: GitProvider,\n subpath: z.string().optional(),\n installedAt: z.string().datetime(),\n updatedAt: z.string().datetime().optional(),\n enabled: z.boolean().default(true),\n version: z.string().optional(),\n checksum: z.string().optional(),\n});\nexport type SkillMetadata = z.infer<typeof SkillMetadata>;\n\nexport const SkillLocation = z.enum(['project', 'global']);\nexport type SkillLocation = z.infer<typeof SkillLocation>;\n\nexport const Skill = z.object({\n name: z.string(),\n description: z.string(),\n path: z.string(),\n location: SkillLocation,\n metadata: SkillMetadata.optional(),\n enabled: z.boolean().default(true),\n});\nexport type Skill = z.infer<typeof Skill>;\n\nexport const SkillkitConfig = z.object({\n version: z.literal(1),\n agent: AgentType.default('universal'),\n skillsDir: z.string().optional(),\n enabledSkills: z.array(z.string()).optional(),\n disabledSkills: z.array(z.string()).optional(),\n autoSync: z.boolean().default(true),\n});\nexport type SkillkitConfig = z.infer<typeof SkillkitConfig>;\n\nexport interface InstallOptions {\n global?: boolean;\n skills?: string[];\n provider?: GitProvider;\n yes?: boolean;\n force?: boolean;\n}\n\nexport interface SyncOptions {\n output?: string;\n agent?: AgentType;\n yes?: boolean;\n enabledOnly?: boolean;\n}\n\nexport interface UpdateOptions {\n skills?: string[];\n all?: boolean;\n force?: boolean;\n}\n\nexport interface RegistrySkill {\n name: string;\n description: string;\n source: string;\n provider: GitProvider;\n downloads?: number;\n stars?: number;\n tags?: string[];\n}\n\nexport interface DiscoveredSkill {\n name: string;\n dirName: string;\n path: string;\n}\n\nexport interface CloneResult {\n success: boolean;\n path?: string;\n tempRoot?: string;\n error?: string;\n skills?: string[];\n discoveredSkills?: DiscoveredSkill[];\n}\n\nexport interface CommandResult {\n success: boolean;\n message: string;\n data?: unknown;\n}\n","import { existsSync, readdirSync, readFileSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport { parse as parseYaml } from 'yaml';\nimport { SkillFrontmatter, SkillMetadata, type Skill, type SkillLocation } from './types.js';\n\nexport const SKILL_DISCOVERY_PATHS = [\n 'skills',\n 'skills/.curated',\n 'skills/.experimental',\n 'skills/.system',\n '.agents/skills',\n '.agent/skills',\n '.claude/skills',\n '.codex/skills',\n '.cursor/skills',\n '.factory/skills',\n '.gemini/skills',\n '.github/skills',\n '.goose/skills',\n '.kilocode/skills',\n '.kiro/skills',\n '.opencode/skills',\n '.roo/skills',\n '.trae/skills',\n '.windsurf/skills',\n '.clawdbot/skills',\n '.antigravity/skills',\n '.copilot/skills',\n];\n\nfunction discoverSkillsInDir(dir: string): Skill[] {\n const skills: Skill[] = [];\n\n if (!existsSync(dir)) {\n return skills;\n }\n\n const entries = readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n const skillPath = join(dir, entry.name);\n const skillMdPath = join(skillPath, 'SKILL.md');\n\n if (existsSync(skillMdPath)) {\n const skill = parseSkill(skillPath);\n if (skill) {\n skills.push(skill);\n }\n }\n }\n\n return skills;\n}\n\n/**\n * Recursively search for skills in all subdirectories\n */\nfunction discoverSkillsRecursive(\n dir: string,\n seen: Set<string>,\n maxDepth: number = 5,\n currentDepth: number = 0\n): Skill[] {\n const skills: Skill[] = [];\n\n if (currentDepth >= maxDepth || !existsSync(dir)) {\n return skills;\n }\n\n try {\n const entries = readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.name === 'node_modules' || entry.name === '.git') {\n continue;\n }\n\n if (!entry.isDirectory()) continue;\n\n const entryPath = join(dir, entry.name);\n const skillMdPath = join(entryPath, 'SKILL.md');\n\n if (existsSync(skillMdPath)) {\n const skill = parseSkill(entryPath);\n if (skill && !seen.has(skill.name)) {\n seen.add(skill.name);\n skills.push(skill);\n }\n } else {\n const subSkills = discoverSkillsRecursive(entryPath, seen, maxDepth, currentDepth + 1);\n skills.push(...subSkills);\n }\n }\n } catch {}\n\n return skills;\n}\n\nexport function discoverSkills(rootDir: string): Skill[] {\n const skills: Skill[] = [];\n const seen = new Set<string>();\n\n const rootSkillMd = join(rootDir, 'SKILL.md');\n if (existsSync(rootSkillMd)) {\n const skill = parseSkill(rootDir);\n if (skill && !seen.has(skill.name)) {\n seen.add(skill.name);\n skills.push(skill);\n }\n }\n\n // Search all standard paths\n for (const searchPath of SKILL_DISCOVERY_PATHS) {\n const fullPath = join(rootDir, searchPath);\n if (existsSync(fullPath)) {\n for (const skill of discoverSkillsInDir(fullPath)) {\n if (!seen.has(skill.name)) {\n seen.add(skill.name);\n skills.push(skill);\n }\n }\n }\n }\n\n // Try direct discovery in root (for flat structures)\n for (const skill of discoverSkillsInDir(rootDir)) {\n if (!seen.has(skill.name)) {\n seen.add(skill.name);\n skills.push(skill);\n }\n }\n\n // Fallback: recursive search if nothing found\n if (skills.length === 0) {\n skills.push(...discoverSkillsRecursive(rootDir, seen));\n }\n\n return skills;\n}\n\nexport function parseSkill(skillPath: string, location: SkillLocation = 'project'): Skill | null {\n const skillMdPath = join(skillPath, 'SKILL.md');\n\n if (!existsSync(skillMdPath)) {\n return null;\n }\n\n try {\n const content = readFileSync(skillMdPath, 'utf-8');\n const frontmatter = extractFrontmatter(content);\n\n if (!frontmatter) {\n const name = basename(skillPath);\n return {\n name,\n description: 'No description available',\n path: skillPath,\n location,\n enabled: true,\n };\n }\n\n const parsed = SkillFrontmatter.safeParse(frontmatter);\n\n if (!parsed.success) {\n return {\n name: (frontmatter.name as string) || basename(skillPath),\n description: (frontmatter.description as string) || 'No description available',\n path: skillPath,\n location,\n enabled: true,\n };\n }\n\n const metadata = loadMetadata(skillPath);\n\n return {\n name: parsed.data.name,\n description: parsed.data.description,\n path: skillPath,\n location,\n metadata: metadata ?? undefined,\n enabled: metadata?.enabled ?? true,\n };\n } catch {\n return null;\n }\n}\n\nexport function extractFrontmatter(content: string): Record<string, unknown> | null {\n const match = content.match(/^---\\s*\\n([\\s\\S]*?)\\n---/);\n\n if (!match) {\n return null;\n }\n\n try {\n return parseYaml(match[1]) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nexport function extractField(content: string, field: string): string | null {\n const frontmatter = extractFrontmatter(content);\n if (!frontmatter || !(field in frontmatter)) {\n return null;\n }\n\n const value = frontmatter[field];\n return typeof value === 'string' ? value : null;\n}\n\nexport function loadMetadata(skillPath: string): SkillMetadata | null {\n const metadataPath = join(skillPath, '.skillkit.json');\n\n if (!existsSync(metadataPath)) {\n return null;\n }\n\n try {\n const content = readFileSync(metadataPath, 'utf-8');\n const data = JSON.parse(content);\n const parsed = SkillMetadata.safeParse(data);\n\n return parsed.success ? parsed.data : null;\n } catch {\n return null;\n }\n}\n\nexport function readSkillContent(skillPath: string): string | null {\n const skillMdPath = join(skillPath, 'SKILL.md');\n\n if (!existsSync(skillMdPath)) {\n return null;\n }\n\n try {\n return readFileSync(skillMdPath, 'utf-8');\n } catch {\n return null;\n }\n}\n\nexport function findSkill(name: string, searchDirs: string[]): Skill | null {\n for (const dir of searchDirs) {\n if (!existsSync(dir)) continue;\n\n const skillPath = join(dir, name);\n if (existsSync(skillPath)) {\n const location: SkillLocation = dir.includes(process.cwd()) ? 'project' : 'global';\n return parseSkill(skillPath, location);\n }\n }\n\n return null;\n}\n\nexport function findAllSkills(searchDirs: string[]): Skill[] {\n const skills: Skill[] = [];\n const seen = new Set<string>();\n\n for (const dir of searchDirs) {\n if (!existsSync(dir)) continue;\n\n const location: SkillLocation = dir.includes(process.cwd()) ? 'project' : 'global';\n const discovered = discoverSkills(dir);\n\n for (const skill of discovered) {\n if (!seen.has(skill.name)) {\n seen.add(skill.name);\n skills.push({ ...skill, location });\n }\n }\n }\n\n return skills;\n}\n\nexport function validateSkill(skillPath: string): { valid: boolean; errors: string[]; warnings?: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n const dirName = basename(skillPath);\n\n const skillMdPath = join(skillPath, 'SKILL.md');\n if (!existsSync(skillMdPath)) {\n errors.push('Missing SKILL.md file');\n return { valid: false, errors };\n }\n\n const content = readFileSync(skillMdPath, 'utf-8');\n const frontmatter = extractFrontmatter(content);\n\n if (!frontmatter) {\n errors.push('Missing YAML frontmatter in SKILL.md');\n return { valid: false, errors };\n }\n\n const parsed = SkillFrontmatter.safeParse(frontmatter);\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n errors.push(`${issue.path.join('.') || 'frontmatter'}: ${issue.message}`);\n }\n }\n\n if (parsed.success) {\n const data = parsed.data;\n\n if (data.name !== dirName) {\n warnings.push(`name \"${data.name}\" does not match directory name \"${dirName}\"`);\n }\n\n if (data.description && data.description.length < 50) {\n warnings.push('description is short; consider describing what the skill does AND when to use it');\n }\n }\n\n const bodyContent = content.replace(/^---[\\s\\S]*?---\\s*/, '');\n const lineCount = bodyContent.split('\\n').length;\n if (lineCount > 500) {\n warnings.push(`SKILL.md has ${lineCount} lines; consider moving detailed content to references/`);\n }\n\n return { valid: errors.length === 0, errors, warnings };\n}\n\nexport function isPathInside(child: string, parent: string): boolean {\n const relative = child.replace(parent, '');\n return !relative.startsWith('..') && !relative.includes('/..');\n}\n","import { execSync } from 'node:child_process';\nimport { existsSync, rmSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { randomUUID } from 'node:crypto';\nimport type { GitProviderAdapter, CloneOptions } from './base.js';\nimport { parseShorthand, isGitUrl } from './base.js';\nimport type { GitProvider, CloneResult } from '../core/types.js';\nimport { discoverSkills } from '../core/skills.js';\n\nexport class GitHubProvider implements GitProviderAdapter {\n readonly type: GitProvider = 'github';\n readonly name = 'GitHub';\n readonly baseUrl = 'https://github.com';\n\n parseSource(source: string): { owner: string; repo: string; subpath?: string } | null {\n \n if (source.startsWith('https://github.com/')) {\n const path = source.replace('https://github.com/', '').replace(/\\.git$/, '');\n return parseShorthand(path);\n }\n\n if (source.startsWith('git@github.com:')) {\n const path = source.replace('git@github.com:', '').replace(/\\.git$/, '');\n return parseShorthand(path);\n }\n\n if (!isGitUrl(source) && !source.includes(':')) {\n return parseShorthand(source);\n }\n\n return null;\n }\n\n matches(source: string): boolean {\n return (\n source.startsWith('https://github.com/') ||\n source.startsWith('git@github.com:') ||\n \n (!isGitUrl(source) && !source.includes(':') && source.includes('/'))\n );\n }\n\n getCloneUrl(owner: string, repo: string): string {\n return `https://github.com/${owner}/${repo}.git`;\n }\n\n getSshUrl(owner: string, repo: string): string {\n return `git@github.com:${owner}/${repo}.git`;\n }\n\n async clone(source: string, _targetDir: string, options: CloneOptions = {}): Promise<CloneResult> {\n const parsed = this.parseSource(source);\n if (!parsed) {\n return { success: false, error: `Invalid GitHub source: ${source}` };\n }\n\n const { owner, repo, subpath } = parsed;\n const cloneUrl = options.ssh ? this.getSshUrl(owner, repo) : this.getCloneUrl(owner, repo);\n\n const tempDir = join(tmpdir(), `skillkit-${randomUUID()}`);\n\n try {\n \n const args = ['clone'];\n if (options.depth) {\n args.push('--depth', String(options.depth));\n }\n if (options.branch) {\n args.push('--branch', options.branch);\n }\n args.push(cloneUrl, tempDir);\n\n execSync(`git ${args.join(' ')}`, {\n stdio: ['pipe', 'pipe', 'pipe'],\n encoding: 'utf-8',\n });\n\n const searchDir = subpath ? join(tempDir, subpath) : tempDir;\n const skills = discoverSkills(searchDir);\n\n return {\n success: true,\n path: searchDir, \n tempRoot: tempDir, \n skills: skills.map(s => s.name),\n discoveredSkills: skills.map(s => ({\n name: s.name,\n dirName: basename(s.path),\n path: s.path,\n })),\n };\n } catch (error) {\n \n if (existsSync(tempDir)) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, error: `Failed to clone: ${message}` };\n }\n }\n}\n","import { execSync } from 'node:child_process';\nimport { existsSync, rmSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { randomUUID } from 'node:crypto';\nimport type { GitProviderAdapter, CloneOptions } from './base.js';\nimport { parseShorthand } from './base.js';\nimport type { GitProvider, CloneResult } from '../core/types.js';\nimport { discoverSkills } from '../core/skills.js';\n\nexport class GitLabProvider implements GitProviderAdapter {\n readonly type: GitProvider = 'gitlab';\n readonly name = 'GitLab';\n readonly baseUrl = 'https://gitlab.com';\n\n parseSource(source: string): { owner: string; repo: string; subpath?: string } | null {\n \n if (source.startsWith('https://gitlab.com/')) {\n const path = source.replace('https://gitlab.com/', '').replace(/\\.git$/, '');\n return parseShorthand(path);\n }\n\n if (source.startsWith('git@gitlab.com:')) {\n const path = source.replace('git@gitlab.com:', '').replace(/\\.git$/, '');\n return parseShorthand(path);\n }\n\n if (source.startsWith('gitlab:')) {\n return parseShorthand(source.replace('gitlab:', ''));\n }\n\n if (source.startsWith('gitlab.com/')) {\n return parseShorthand(source.replace('gitlab.com/', ''));\n }\n\n return null;\n }\n\n matches(source: string): boolean {\n return (\n source.startsWith('https://gitlab.com/') ||\n source.startsWith('git@gitlab.com:') ||\n source.startsWith('gitlab:') ||\n source.startsWith('gitlab.com/')\n );\n }\n\n getCloneUrl(owner: string, repo: string): string {\n return `https://gitlab.com/${owner}/${repo}.git`;\n }\n\n getSshUrl(owner: string, repo: string): string {\n return `git@gitlab.com:${owner}/${repo}.git`;\n }\n\n async clone(source: string, _targetDir: string, options: CloneOptions = {}): Promise<CloneResult> {\n const parsed = this.parseSource(source);\n if (!parsed) {\n return { success: false, error: `Invalid GitLab source: ${source}` };\n }\n\n const { owner, repo, subpath } = parsed;\n const cloneUrl = options.ssh ? this.getSshUrl(owner, repo) : this.getCloneUrl(owner, repo);\n\n const tempDir = join(tmpdir(), `skillkit-${randomUUID()}`);\n\n try {\n \n const args = ['clone'];\n if (options.depth) {\n args.push('--depth', String(options.depth));\n }\n if (options.branch) {\n args.push('--branch', options.branch);\n }\n args.push(cloneUrl, tempDir);\n\n execSync(`git ${args.join(' ')}`, {\n stdio: ['pipe', 'pipe', 'pipe'],\n encoding: 'utf-8',\n });\n\n const searchDir = subpath ? join(tempDir, subpath) : tempDir;\n const skills = discoverSkills(searchDir);\n\n return {\n success: true,\n path: searchDir, \n tempRoot: tempDir, \n skills: skills.map(s => s.name),\n discoveredSkills: skills.map(s => ({\n name: s.name,\n dirName: basename(s.path),\n path: s.path,\n })),\n };\n } catch (error) {\n \n if (existsSync(tempDir)) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, error: `Failed to clone: ${message}` };\n }\n }\n}\n","import { execSync } from 'node:child_process';\nimport { existsSync, rmSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { randomUUID } from 'node:crypto';\nimport type { GitProviderAdapter, CloneOptions } from './base.js';\nimport { parseShorthand } from './base.js';\nimport type { GitProvider, CloneResult } from '../core/types.js';\nimport { discoverSkills } from '../core/skills.js';\n\nexport class BitbucketProvider implements GitProviderAdapter {\n readonly type: GitProvider = 'bitbucket';\n readonly name = 'Bitbucket';\n readonly baseUrl = 'https://bitbucket.org';\n\n parseSource(source: string): { owner: string; repo: string; subpath?: string } | null {\n \n if (source.startsWith('https://bitbucket.org/')) {\n const path = source.replace('https://bitbucket.org/', '').replace(/\\.git$/, '');\n return parseShorthand(path);\n }\n\n if (source.startsWith('git@bitbucket.org:')) {\n const path = source.replace('git@bitbucket.org:', '').replace(/\\.git$/, '');\n return parseShorthand(path);\n }\n\n if (source.startsWith('bitbucket:')) {\n return parseShorthand(source.replace('bitbucket:', ''));\n }\n\n if (source.startsWith('bitbucket.org/')) {\n return parseShorthand(source.replace('bitbucket.org/', ''));\n }\n\n return null;\n }\n\n matches(source: string): boolean {\n return (\n source.startsWith('https://bitbucket.org/') ||\n source.startsWith('git@bitbucket.org:') ||\n source.startsWith('bitbucket:') ||\n source.startsWith('bitbucket.org/')\n );\n }\n\n getCloneUrl(owner: string, repo: string): string {\n return `https://bitbucket.org/${owner}/${repo}.git`;\n }\n\n getSshUrl(owner: string, repo: string): string {\n return `git@bitbucket.org:${owner}/${repo}.git`;\n }\n\n async clone(source: string, _targetDir: string, options: CloneOptions = {}): Promise<CloneResult> {\n const parsed = this.parseSource(source);\n if (!parsed) {\n return { success: false, error: `Invalid Bitbucket source: ${source}` };\n }\n\n const { owner, repo, subpath } = parsed;\n const cloneUrl = options.ssh ? this.getSshUrl(owner, repo) : this.getCloneUrl(owner, repo);\n\n const tempDir = join(tmpdir(), `skillkit-${randomUUID()}`);\n\n try {\n \n const args = ['clone'];\n if (options.depth) {\n args.push('--depth', String(options.depth));\n }\n if (options.branch) {\n args.push('--branch', options.branch);\n }\n args.push(cloneUrl, tempDir);\n\n execSync(`git ${args.join(' ')}`, {\n stdio: ['pipe', 'pipe', 'pipe'],\n encoding: 'utf-8',\n });\n\n const searchDir = subpath ? join(tempDir, subpath) : tempDir;\n const skills = discoverSkills(searchDir);\n\n return {\n success: true,\n path: searchDir, \n tempRoot: tempDir, \n skills: skills.map(s => s.name),\n discoveredSkills: skills.map(s => ({\n name: s.name,\n dirName: basename(s.path),\n path: s.path,\n })),\n };\n } catch (error) {\n \n if (existsSync(tempDir)) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, error: `Failed to clone: ${message}` };\n }\n }\n}\n","import { existsSync, statSync, realpathSync } from 'node:fs';\nimport { join, resolve, basename } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { GitProviderAdapter, CloneOptions } from './base.js';\nimport { isLocalPath } from './base.js';\nimport type { GitProvider, CloneResult } from '../core/types.js';\nimport { discoverSkills } from '../core/skills.js';\n\nexport class LocalProvider implements GitProviderAdapter {\n readonly type: GitProvider = 'local';\n readonly name = 'Local Filesystem';\n readonly baseUrl = '';\n\n parseSource(source: string): { owner: string; repo: string; subpath?: string } | null {\n if (!isLocalPath(source)) {\n return null;\n }\n\n let expandedPath = source;\n if (source.startsWith('~/')) {\n expandedPath = join(homedir(), source.slice(2));\n }\n\n const absolutePath = resolve(expandedPath);\n\n const dirName = basename(absolutePath);\n\n return {\n owner: 'local',\n repo: dirName,\n subpath: absolutePath, \n };\n }\n\n matches(source: string): boolean {\n return isLocalPath(source);\n }\n\n getCloneUrl(_owner: string, _repo: string): string {\n return ''; \n }\n\n getSshUrl(_owner: string, _repo: string): string {\n return ''; \n }\n\n async clone(source: string, _targetDir: string, _options: CloneOptions = {}): Promise<CloneResult> {\n const parsed = this.parseSource(source);\n if (!parsed || !parsed.subpath) {\n return { success: false, error: `Invalid local path: ${source}` };\n }\n\n const sourcePath = parsed.subpath;\n\n if (!existsSync(sourcePath)) {\n return { success: false, error: `Path does not exist: ${sourcePath}` };\n }\n\n const stats = statSync(sourcePath);\n if (!stats.isDirectory()) {\n return { success: false, error: `Path is not a directory: ${sourcePath}` };\n }\n\n try {\n \n let actualPath = sourcePath;\n try {\n actualPath = realpathSync(sourcePath);\n } catch {\n \n }\n\n const skills = discoverSkills(actualPath);\n\n return {\n success: true,\n path: actualPath,\n skills: skills.map(s => s.name),\n discoveredSkills: skills.map(s => ({\n name: s.name,\n dirName: basename(s.path),\n path: s.path,\n })),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, error: `Failed to process local path: ${message}` };\n }\n }\n}\n","import type { GitProviderAdapter } from './base.js';\nimport type { GitProvider } from '../core/types.js';\nimport { GitHubProvider } from './github.js';\nimport { GitLabProvider } from './gitlab.js';\nimport { BitbucketProvider } from './bitbucket.js';\nimport { LocalProvider } from './local.js';\n\nexport * from './base.js';\nexport * from './github.js';\nexport * from './gitlab.js';\nexport * from './bitbucket.js';\nexport * from './local.js';\n\nconst providers: GitProviderAdapter[] = [\n new LocalProvider(), \n new GitLabProvider(), \n new BitbucketProvider(),\n new GitHubProvider(), \n];\n\nexport function getProvider(type: GitProvider): GitProviderAdapter | undefined {\n return providers.find(p => p.type === type);\n}\n\nexport function getAllProviders(): GitProviderAdapter[] {\n return providers;\n}\n\nexport function detectProvider(source: string): GitProviderAdapter | undefined {\n return providers.find(p => p.matches(source));\n}\n\nexport function parseSource(source: string): {\n provider: GitProviderAdapter;\n owner: string;\n repo: string;\n subpath?: string;\n} | null {\n for (const provider of providers) {\n if (provider.matches(source)) {\n const parsed = provider.parseSource(source);\n if (parsed) {\n return { provider, ...parsed };\n }\n }\n }\n return null;\n}\n","import type { Skill, AgentType } from '../core/types.js';\n\nexport interface AgentAdapter {\n \n readonly type: AgentType;\n\n readonly name: string;\n\n readonly skillsDir: string;\n\n readonly configFile: string;\n\n generateConfig(skills: Skill[]): string;\n\n parseConfig(content: string): string[];\n\n getInvokeCommand(skillName: string): string;\n\n isDetected(): Promise<boolean>;\n}\n\nexport function createSkillXml(skill: Skill): string {\n return `<skill>\n<name>${skill.name}</name>\n<description>${escapeXml(skill.description)}</description>\n<location>${skill.location}</location>\n</skill>`;\n}\n\nexport function escapeXml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class ClaudeCodeAdapter implements AgentAdapter {\n readonly type: AgentType = 'claude-code';\n readonly name = 'Claude Code';\n readonly skillsDir = '.claude/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n \n const projectClaude = join(process.cwd(), '.claude');\n const globalClaude = join(homedir(), '.claude');\n const claudeMd = join(process.cwd(), 'CLAUDE.md');\n\n return existsSync(projectClaude) || existsSync(globalClaude) || existsSync(claudeMd);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class CursorAdapter implements AgentAdapter {\n readonly type: AgentType = 'cursor';\n readonly name = 'Cursor';\n readonly skillsDir = '.cursor/skills';\n readonly configFile = '.cursorrules';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsList = enabledSkills\n .map(s => `- **${s.name}**: ${s.description}`)\n .join('\\n');\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `# Skills System\n\nYou have access to specialized skills that can help complete tasks. Use the skillkit CLI to load skill instructions when needed.\n\n## Available Skills\n\n${skillsList}\n\n## How to Use Skills\n\nWhen a task matches a skill's description, load it with:\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nThe skill will provide detailed instructions for completing the task.\n\n<!-- SKILLS_DATA_START -->\n${skillsXml}\n<!-- SKILLS_DATA_END -->\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const cursorRules = join(process.cwd(), '.cursorrules');\n const cursorDir = join(process.cwd(), '.cursor');\n\n return existsSync(cursorRules) || existsSync(cursorDir);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class CodexAdapter implements AgentAdapter {\n readonly type: AgentType = 'codex';\n readonly name = 'OpenAI Codex CLI';\n readonly skillsDir = '.codex/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsList = enabledSkills\n .map(s => `| ${s.name} | ${s.description} | \\`skillkit read ${s.name}\\` |`)\n .join('\\n');\n\n return `# Skills\n\nYou have access to specialized skills for completing complex tasks.\n\n| Skill | Description | Command |\n|-------|-------------|---------|\n${skillsList}\n\n## Usage\n\nWhen a task matches a skill's capability, run the command to load detailed instructions:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nSkills are loaded on-demand to keep context clean. Only load skills when relevant to the current task.\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n \n const tableRegex = /^\\|\\s*([a-z0-9-]+)\\s*\\|/gm;\n let match;\n\n while ((match = tableRegex.exec(content)) !== null) {\n const name = match[1].trim();\n if (name && name !== 'Skill' && name !== '-------') {\n skillNames.push(name);\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const codexDir = join(process.cwd(), '.codex');\n const globalCodex = join(homedir(), '.codex');\n\n return existsSync(codexDir) || existsSync(globalCodex);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class GeminiCliAdapter implements AgentAdapter {\n readonly type: AgentType = 'gemini-cli';\n readonly name = 'Gemini CLI';\n readonly skillsDir = '.gemini/skills';\n readonly configFile = 'GEMINI.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsJson = enabledSkills.map(s => ({\n name: s.name,\n description: s.description,\n invoke: `skillkit read ${s.name}`,\n location: s.location,\n }));\n\n return `# Skills Configuration\n\nYou have access to specialized skills that extend your capabilities.\n\n## Available Skills\n\n${enabledSkills.map(s => `### ${s.name}\\n${s.description}\\n\\nInvoke: \\`skillkit read ${s.name}\\``).join('\\n\\n')}\n\n## Skills Data\n\n\\`\\`\\`json\n${JSON.stringify(skillsJson, null, 2)}\n\\`\\`\\`\n\n## Usage Instructions\n\n1. When a task matches a skill's description, load it using the invoke command\n2. Skills provide step-by-step instructions for complex tasks\n3. Each skill is self-contained with its own resources\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const jsonMatch = content.match(/```json\\s*([\\s\\S]*?)```/);\n if (jsonMatch) {\n try {\n const skills = JSON.parse(jsonMatch[1]);\n if (Array.isArray(skills)) {\n skills.forEach(s => {\n if (s.name) skillNames.push(s.name);\n });\n }\n } catch {\n \n }\n }\n\n if (skillNames.length === 0) {\n const headerRegex = /^### ([a-z0-9-]+)$/gm;\n let match;\n while ((match = headerRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const geminiMd = join(process.cwd(), 'GEMINI.md');\n const geminiDir = join(process.cwd(), '.gemini');\n const globalGemini = join(homedir(), '.gemini');\n\n return existsSync(geminiMd) || existsSync(geminiDir) || existsSync(globalGemini);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class OpenCodeAdapter implements AgentAdapter {\n readonly type: AgentType = 'opencode';\n readonly name = 'OpenCode';\n readonly skillsDir = '.opencode/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<!-- SKILLKIT_START -->\n# Skills\n\nThe following skills are available to help complete tasks:\n\n<skills>\n${skillsXml}\n</skills>\n\n## How to Use\n\nWhen a task matches a skill's description:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nThis loads the skill's instructions into context.\n\n<!-- SKILLKIT_END -->`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const opencodeDir = join(process.cwd(), '.opencode');\n const globalOpencode = join(homedir(), '.opencode');\n\n return existsSync(opencodeDir) || existsSync(globalOpencode);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class AntigravityAdapter implements AgentAdapter {\n readonly type: AgentType = 'antigravity';\n readonly name = 'Antigravity';\n readonly skillsDir = '.antigravity/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsYaml = enabledSkills\n .map(s => ` - name: ${s.name}\\n description: \"${s.description}\"\\n invoke: skillkit read ${s.name}`)\n .join('\\n');\n\n return `# Antigravity Skills Configuration\n\n<!-- skills:\n${skillsYaml}\n-->\n\n## Available Skills\n\n${enabledSkills.map(s => `### ${s.name}\n\n${s.description}\n\n**Usage:** \\`skillkit read ${s.name}\\`\n`).join('\\n')}\n\n## How Skills Work\n\n1. Skills provide specialized knowledge for specific tasks\n2. Load a skill when the current task matches its description\n3. Skills are loaded on-demand to preserve context window\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const yamlMatch = content.match(/<!-- skills:\\s*([\\s\\S]*?)-->/);\n if (yamlMatch) {\n const nameRegex = /name:\\s*([a-z0-9-]+)/g;\n let match;\n while ((match = nameRegex.exec(yamlMatch[1])) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n if (skillNames.length === 0) {\n const headerRegex = /^### ([a-z0-9-]+)$/gm;\n let match;\n while ((match = headerRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const agDir = join(process.cwd(), '.antigravity');\n const globalAg = join(homedir(), '.antigravity');\n\n return existsSync(agDir) || existsSync(globalAg);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class AmpAdapter implements AgentAdapter {\n readonly type: AgentType = 'amp';\n readonly name = 'Amp';\n readonly skillsDir = '.agents/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.config', 'agents', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectAgents = join(process.cwd(), '.agents');\n const globalAgents = join(homedir(), '.config', 'agents');\n\n return existsSync(projectAgents) || existsSync(globalAgents);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class ClawdbotAdapter implements AgentAdapter {\n readonly type: AgentType = 'clawdbot';\n readonly name = 'Clawdbot';\n readonly skillsDir = 'skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.clawdbot', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectSkills = join(process.cwd(), 'skills');\n const globalClawdbot = join(homedir(), '.clawdbot');\n\n return existsSync(globalClawdbot) || (existsSync(projectSkills) && existsSync(join(process.cwd(), '.clawdbot')));\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class DroidAdapter implements AgentAdapter {\n readonly type: AgentType = 'droid';\n readonly name = 'Droid (Factory)';\n readonly skillsDir = '.factory/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.factory', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectFactory = join(process.cwd(), '.factory');\n const globalFactory = join(homedir(), '.factory');\n\n return existsSync(projectFactory) || existsSync(globalFactory);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class GitHubCopilotAdapter implements AgentAdapter {\n readonly type: AgentType = 'github-copilot';\n readonly name = 'GitHub Copilot';\n readonly skillsDir = '.github/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.copilot', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectGithub = join(process.cwd(), '.github', 'skills');\n const globalCopilot = join(homedir(), '.copilot');\n\n return existsSync(projectGithub) || existsSync(globalCopilot);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class GooseAdapter implements AgentAdapter {\n readonly type: AgentType = 'goose';\n readonly name = 'Goose';\n readonly skillsDir = '.goose/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.config', 'goose', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectGoose = join(process.cwd(), '.goose');\n const globalGoose = join(homedir(), '.config', 'goose');\n\n return existsSync(projectGoose) || existsSync(globalGoose);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class KiloAdapter implements AgentAdapter {\n readonly type: AgentType = 'kilo';\n readonly name = 'Kilo Code';\n readonly skillsDir = '.kilocode/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.kilocode', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectKilo = join(process.cwd(), '.kilocode');\n const globalKilo = join(homedir(), '.kilocode');\n\n return existsSync(projectKilo) || existsSync(globalKilo);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class KiroCliAdapter implements AgentAdapter {\n readonly type: AgentType = 'kiro-cli';\n readonly name = 'Kiro CLI';\n readonly skillsDir = '.kiro/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.kiro', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>\n\n**Note for Kiro CLI users:** After installing skills, you need to manually add them to your custom agent's \\`resources\\` in \\`.kiro/agents/<agent>.json\\`:\n\n\\`\\`\\`json\n{\n \"resources\": [\n \"skill://.kiro/skills/**/SKILL.md\"\n ]\n}\n\\`\\`\\``;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectKiro = join(process.cwd(), '.kiro');\n const globalKiro = join(homedir(), '.kiro');\n\n return existsSync(projectKiro) || existsSync(globalKiro);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class RooAdapter implements AgentAdapter {\n readonly type: AgentType = 'roo';\n readonly name = 'Roo Code';\n readonly skillsDir = '.roo/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.roo', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectRoo = join(process.cwd(), '.roo');\n const globalRoo = join(homedir(), '.roo');\n\n return existsSync(projectRoo) || existsSync(globalRoo);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class TraeAdapter implements AgentAdapter {\n readonly type: AgentType = 'trae';\n readonly name = 'Trae';\n readonly skillsDir = '.trae/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.trae', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectTrae = join(process.cwd(), '.trae');\n const globalTrae = join(homedir(), '.trae');\n\n return existsSync(projectTrae) || existsSync(globalTrae);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class WindsurfAdapter implements AgentAdapter {\n readonly type: AgentType = 'windsurf';\n readonly name = 'Windsurf';\n readonly skillsDir = '.windsurf/skills';\n readonly configFile = 'AGENTS.md';\n readonly globalSkillsDir = join(homedir(), '.codeium', 'windsurf', 'skills');\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n\n return `<skills_system priority=\"1\">\n\n## Available Skills\n\n<!-- SKILLS_TABLE_START -->\n<usage>\nWhen users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.\n\nHow to use skills:\n- Invoke: \\`skillkit read <skill-name>\\` or \\`npx skillkit read <skill-name>\\`\n- The skill content will load with detailed instructions on how to complete the task\n- Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)\n\nUsage notes:\n- Only use skills listed in <available_skills> below\n- Do not invoke a skill that is already loaded in your context\n- Each skill invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n<!-- SKILLS_TABLE_END -->\n\n</skills_system>`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n const projectWindsurf = join(process.cwd(), '.windsurf');\n const globalWindsurf = join(homedir(), '.codeium', 'windsurf');\n\n return existsSync(projectWindsurf) || existsSync(globalWindsurf);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { AgentAdapter } from './base.js';\nimport { createSkillXml } from './base.js';\nimport type { Skill, AgentType } from '../core/types.js';\n\nexport class UniversalAdapter implements AgentAdapter {\n readonly type: AgentType = 'universal';\n readonly name = 'Universal (Any Agent)';\n readonly skillsDir = '.agent/skills';\n readonly configFile = 'AGENTS.md';\n\n generateConfig(skills: Skill[]): string {\n const enabledSkills = skills.filter(s => s.enabled);\n\n if (enabledSkills.length === 0) {\n return '';\n }\n\n const skillsXml = enabledSkills.map(createSkillXml).join('\\n\\n');\n const skillsList = enabledSkills\n .map(s => `- **${s.name}**: ${s.description}`)\n .join('\\n');\n\n return `# Skills System\n\n<!-- SKILLKIT_SKILLS_START -->\n\n## Available Skills\n\n${skillsList}\n\n## How to Use Skills\n\nWhen a task matches one of the available skills, load it to get detailed instructions:\n\n\\`\\`\\`bash\nskillkit read <skill-name>\n\\`\\`\\`\n\nOr with npx:\n\n\\`\\`\\`bash\nnpx skillkit read <skill-name>\n\\`\\`\\`\n\n## Skills Data\n\n<skills_system>\n<usage>\nSkills provide specialized capabilities and domain knowledge.\n- Invoke: \\`skillkit read <skill-name>\\`\n- Base directory provided in output for resolving resources\n- Only use skills listed below\n- Each invocation is stateless\n</usage>\n\n<available_skills>\n\n${skillsXml}\n\n</available_skills>\n</skills_system>\n\n<!-- SKILLKIT_SKILLS_END -->\n`;\n }\n\n parseConfig(content: string): string[] {\n const skillNames: string[] = [];\n\n const skillRegex = /<name>([^<]+)<\\/name>/g;\n let match;\n while ((match = skillRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n\n if (skillNames.length === 0) {\n const listRegex = /^- \\*\\*([a-z0-9-]+)\\*\\*:/gm;\n while ((match = listRegex.exec(content)) !== null) {\n skillNames.push(match[1].trim());\n }\n }\n\n return skillNames;\n }\n\n getInvokeCommand(skillName: string): string {\n return `skillkit read ${skillName}`;\n }\n\n async isDetected(): Promise<boolean> {\n \n const agentDir = join(process.cwd(), '.agent');\n const agentsMd = join(process.cwd(), 'AGENTS.md');\n\n return existsSync(agentDir) || existsSync(agentsMd);\n }\n}\n","import type { AgentAdapter } from './base.js';\nimport type { AgentType } from '../core/types.js';\nimport { ClaudeCodeAdapter } from './claude-code.js';\nimport { CursorAdapter } from './cursor.js';\nimport { CodexAdapter } from './codex.js';\nimport { GeminiCliAdapter } from './gemini-cli.js';\nimport { OpenCodeAdapter } from './opencode.js';\nimport { AntigravityAdapter } from './antigravity.js';\nimport { AmpAdapter } from './amp.js';\nimport { ClawdbotAdapter } from './clawdbot.js';\nimport { DroidAdapter } from './droid.js';\nimport { GitHubCopilotAdapter } from './github-copilot.js';\nimport { GooseAdapter } from './goose.js';\nimport { KiloAdapter } from './kilo.js';\nimport { KiroCliAdapter } from './kiro-cli.js';\nimport { RooAdapter } from './roo.js';\nimport { TraeAdapter } from './trae.js';\nimport { WindsurfAdapter } from './windsurf.js';\nimport { UniversalAdapter } from './universal.js';\n\nexport * from './base.js';\nexport * from './claude-code.js';\nexport * from './cursor.js';\nexport * from './codex.js';\nexport * from './gemini-cli.js';\nexport * from './opencode.js';\nexport * from './antigravity.js';\nexport * from './amp.js';\nexport * from './clawdbot.js';\nexport * from './droid.js';\nexport * from './github-copilot.js';\nexport * from './goose.js';\nexport * from './kilo.js';\nexport * from './kiro-cli.js';\nexport * from './roo.js';\nexport * from './trae.js';\nexport * from './windsurf.js';\nexport * from './universal.js';\n\nconst adapters: Record<AgentType, AgentAdapter> = {\n 'claude-code': new ClaudeCodeAdapter(),\n cursor: new CursorAdapter(),\n codex: new CodexAdapter(),\n 'gemini-cli': new GeminiCliAdapter(),\n opencode: new OpenCodeAdapter(),\n antigravity: new AntigravityAdapter(),\n amp: new AmpAdapter(),\n clawdbot: new ClawdbotAdapter(),\n droid: new DroidAdapter(),\n 'github-copilot': new GitHubCopilotAdapter(),\n goose: new GooseAdapter(),\n kilo: new KiloAdapter(),\n 'kiro-cli': new KiroCliAdapter(),\n roo: new RooAdapter(),\n trae: new TraeAdapter(),\n windsurf: new WindsurfAdapter(),\n universal: new UniversalAdapter(),\n};\n\nexport function getAdapter(type: AgentType): AgentAdapter {\n return adapters[type];\n}\n\nexport function getAllAdapters(): AgentAdapter[] {\n return Object.values(adapters);\n}\n\nexport async function detectAgent(): Promise<AgentType> {\n const checkOrder: AgentType[] = [\n 'claude-code',\n 'cursor',\n 'codex',\n 'gemini-cli',\n 'opencode',\n 'antigravity',\n 'amp',\n 'clawdbot',\n 'droid',\n 'github-copilot',\n 'goose',\n 'kilo',\n 'kiro-cli',\n 'roo',\n 'trae',\n 'windsurf',\n 'universal',\n ];\n\n for (const type of checkOrder) {\n const adapter = adapters[type];\n if (await adapter.isDetected()) {\n return type;\n }\n }\n\n return 'universal';\n}\n\nexport function getSkillsDir(type: AgentType): string {\n return adapters[type].skillsDir;\n}\n\nexport function getConfigFile(type: AgentType): string {\n return adapters[type].configFile;\n}\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml';\nimport { SkillkitConfig, type AgentType, type SkillMetadata } from './types.js';\nimport { getAdapter, detectAgent } from '../agents/index.js';\n\nconst CONFIG_FILE = 'skillkit.yaml';\nconst METADATA_FILE = '.skillkit.json';\n\nexport function getProjectConfigPath(): string {\n return join(process.cwd(), CONFIG_FILE);\n}\n\nexport function getGlobalConfigPath(): string {\n return join(homedir(), '.config', 'skillkit', CONFIG_FILE);\n}\n\nexport function loadConfig(): SkillkitConfig {\n const projectPath = getProjectConfigPath();\n const globalPath = getGlobalConfigPath();\n\n if (existsSync(projectPath)) {\n try {\n const content = readFileSync(projectPath, 'utf-8');\n const data = parseYaml(content);\n const parsed = SkillkitConfig.safeParse(data);\n if (parsed.success) {\n return parsed.data;\n }\n } catch {\n \n }\n }\n\n if (existsSync(globalPath)) {\n try {\n const content = readFileSync(globalPath, 'utf-8');\n const data = parseYaml(content);\n const parsed = SkillkitConfig.safeParse(data);\n if (parsed.success) {\n return parsed.data;\n }\n } catch {\n \n }\n }\n\n return {\n version: 1,\n agent: 'universal',\n autoSync: true,\n };\n}\n\nexport function saveConfig(config: SkillkitConfig, global = false): void {\n const configPath = global ? getGlobalConfigPath() : getProjectConfigPath();\n const dir = dirname(configPath);\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const content = stringifyYaml(config);\n writeFileSync(configPath, content, 'utf-8');\n}\n\nexport function getSearchDirs(agentType?: AgentType): string[] {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n const dirs: string[] = [];\n\n dirs.push(join(process.cwd(), adapter.skillsDir));\n\n dirs.push(join(process.cwd(), '.agent', 'skills'));\n\n dirs.push(join(homedir(), adapter.skillsDir));\n\n dirs.push(join(homedir(), '.agent', 'skills'));\n\n return dirs;\n}\n\nexport function getInstallDir(global = false, agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n\n if (global) {\n return join(homedir(), adapter.skillsDir);\n }\n\n return join(process.cwd(), adapter.skillsDir);\n}\n\nexport function getAgentConfigPath(agentType?: AgentType): string {\n const type = agentType || loadConfig().agent;\n const adapter = getAdapter(type);\n\n return join(process.cwd(), adapter.configFile);\n}\n\nexport function saveSkillMetadata(skillPath: string, metadata: SkillMetadata): void {\n const metadataPath = join(skillPath, METADATA_FILE);\n writeFileSync(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');\n}\n\nexport function loadSkillMetadata(skillPath: string): SkillMetadata | null {\n const metadataPath = join(skillPath, METADATA_FILE);\n\n if (!existsSync(metadataPath)) {\n return null;\n }\n\n try {\n const content = readFileSync(metadataPath, 'utf-8');\n return JSON.parse(content) as SkillMetadata;\n } catch {\n return null;\n }\n}\n\nexport function setSkillEnabled(skillPath: string, enabled: boolean): boolean {\n const metadata = loadSkillMetadata(skillPath);\n\n if (!metadata) {\n return false;\n }\n\n metadata.enabled = enabled;\n metadata.updatedAt = new Date().toISOString();\n saveSkillMetadata(skillPath, metadata);\n\n return true;\n}\n\nexport async function initProject(agentType?: AgentType): Promise<void> {\n \n const type = agentType || (await detectAgent());\n const adapter = getAdapter(type);\n\n const skillsDir = join(process.cwd(), adapter.skillsDir);\n if (!existsSync(skillsDir)) {\n mkdirSync(skillsDir, { recursive: true });\n }\n\n const config: SkillkitConfig = {\n version: 1,\n agent: type,\n autoSync: true,\n };\n saveConfig(config);\n\n const agentConfigPath = join(process.cwd(), adapter.configFile);\n if (!existsSync(agentConfigPath)) {\n writeFileSync(agentConfigPath, `# ${adapter.name} Configuration\\n\\n`, 'utf-8');\n }\n}\n","import chalk from 'chalk';\n\nexport const colors = {\n primary: 'white',\n secondary: 'white',\n secondaryDim: 'gray',\n success: 'white',\n danger: 'white',\n warning: 'white',\n background: 'bgBlack',\n borderDim: 'gray',\n};\n\nexport const symbols = {\n pointer: chalk.white('❯'),\n bullet: '●',\n checkboxOn: chalk.white('✔'),\n checkboxOff: chalk.dim('✖'),\n check: chalk.white('✓'),\n star: '★',\n spinner: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],\n};\n\nexport const logo = `\n███████╗██╗ ██╗██╗██╗ ██╗ ██╗ ██╗██╗████████╗\n██╔════╝██║ ██╔╝██║██║ ██║ ██║ ██╔╝██║╚══██╔══╝\n███████╗█████╔╝ ██║██║ ██║ █████╔╝ ██║ ██║ \n╚════██║██╔═██╗ ██║██║ ██║ ██╔═██╗ ██║ ██║ \n███████║██║ ██╗██║███████╗███████╗██║ ██╗██║ ██║ \n╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ \n`;\n","import { Box, Text } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport type { Screen } from '../App.js';\n\ninterface SidebarProps {\n screen: Screen;\n onNavigate: (screen: Screen) => void;\n isCompact?: boolean;\n}\n\nconst NAV: { id: Screen; label: string }[] = [\n { id: 'home', label: 'Home' },\n { id: 'browse', label: 'Browse' },\n { id: 'installed', label: 'List' },\n { id: 'sync', label: 'Sync' },\n { id: 'settings', label: 'Config' },\n];\n\nexport function Sidebar({ screen }: SidebarProps) {\n return (\n <Box flexDirection=\"column\" width={14} borderStyle=\"single\" paddingX={1}>\n <Text bold color={colors.primary}>SkillKit</Text>\n \n {NAV.slice(0, 2).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n \n <Text> </Text>\n \n {NAV.slice(2).map((item) => (\n <Text key={item.id} inverse={screen === item.id}>\n {screen === item.id ? symbols.bullet : ' '}{item.label}\n </Text>\n ))}\n\n <Box flexGrow={1} />\n\n <Text dimColor>? Help</Text>\n <Text dimColor>q Quit</Text>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { colors, logo } from '../theme.js';\nimport type { Screen } from '../App.js';\n\ninterface HomeProps {\n onNavigate: (screen: Screen) => void;\n cols?: number;\n rows?: number;\n}\n\nconst CHARS = '01█▓▒░╔╗╚╝║═';\n\nconst logoSmall = `\n╔═╗╦╔═╦╦ ╦ ╦╔═╦╔╦╗\n╚═╗╠╩╗║║ ║ ╠╩╗║ ║ \n╚═╝╩ ╩╩╩═╝╩═╝╩ ╩╩ ╩ \n`.trim();\n\nfunction scramble(target: string, progress: number): string {\n return target.split('\\n').map(line => {\n return line.split('').map((char, i) => {\n if (char === ' ') return char;\n if (progress > (i / line.length) * 100) return char;\n return CHARS[Math.floor(Math.random() * CHARS.length)];\n }).join('');\n }).join('\\n');\n}\n\nexport function Home({ cols = 80, rows = 24 }: HomeProps) {\n const [progress, setProgress] = useState(0);\n const [display, setDisplay] = useState('');\n\n const useLogo = cols < 80 ? logoSmall : logo;\n\n useEffect(() => {\n if (progress >= 100) {\n setDisplay(useLogo);\n return;\n }\n const t = setInterval(() => {\n setProgress(p => {\n const next = p + 12;\n setDisplay(scramble(useLogo, next));\n return next;\n });\n }, 35);\n return () => clearInterval(t);\n }, [progress, useLogo]);\n\n return (\n <Box flexDirection=\"column\">\n <Text color={colors.primary}>{display || useLogo}</Text>\n\n <Box marginTop={1}>\n <Text>Manage AI agent skills from your terminal.</Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Quick Actions:</Text>\n <Text dimColor> [b] Browse skills marketplace</Text>\n <Text dimColor> [l] View installed skills</Text>\n <Text dimColor> [s] Sync skills across agents</Text>\n <Text dimColor> [,] Settings</Text>\n </Box>\n\n {rows >= 18 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>Navigation:</Text>\n <Text dimColor> ↑↓ Navigate lists</Text>\n <Text dimColor> Enter Select / Confirm</Text>\n <Text dimColor> Esc Go back / Home</Text>\n <Text dimColor> q Quit</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>v1.1.0 - Works with 17 AI agents</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { detectProvider } from '../../providers/index.js';\nimport type { SkillItem } from '../components/SkillList.js';\n\nexport interface RepoInfo {\n source: string;\n name: string;\n}\n\nconst POPULAR_REPOS: RepoInfo[] = [\n { source: 'anthropics/skills', name: 'Anthropic Official' },\n { source: 'vercel-labs/agent-skills', name: 'Vercel Labs' },\n { source: 'expo/skills', name: 'Expo / React Native' },\n { source: 'remotion-dev/skills', name: 'Remotion Video' },\n { source: 'ComposioHQ/awesome-claude-skills', name: 'Composio Awesome' },\n { source: 'travisvn/awesome-claude-skills', name: 'Travis Awesome' },\n { source: 'mhattingpete/claude-skills-marketplace', name: 'Skills Marketplace' },\n { source: 'coreyhaines31/marketingskills', name: 'Marketing Skills' },\n { source: 'obra/superpowers', name: 'Superpowers TDD' },\n { source: 'softaworks/agent-toolkit', name: 'Softaworks Toolkit' },\n { source: 'wshobson/agents', name: 'Dev Patterns' },\n { source: 'langgenius/dify', name: 'Dify Frontend' },\n { source: 'trailofbits/skills', name: 'Trail of Bits Security' },\n { source: 'better-auth/skills', name: 'Better Auth' },\n { source: 'onmax/nuxt-skills', name: 'Nuxt / Vue' },\n { source: 'hyf0/vue-skills', name: 'Vue Best Practices' },\n { source: 'jezweb/claude-skills', name: 'Cloudflare / TanStack' },\n { source: 'elysiajs/skills', name: 'ElysiaJS / Bun' },\n { source: 'kadajett/agent-nestjs-skills', name: 'NestJS' },\n { source: 'callstackincubator/agent-skills', name: 'React Native' },\n { source: 'cloudai-x/threejs-skills', name: 'Three.js' },\n { source: 'emalorenzo/three-agent-skills', name: 'Three.js Advanced' },\n { source: 'dimillian/skills', name: 'SwiftUI iOS' },\n { source: 'stripe/ai', name: 'Stripe Payments' },\n { source: 'waynesutton/convexskills', name: 'Convex Backend' },\n { source: 'kepano/obsidian-skills', name: 'Obsidian Notes' },\n { source: 'jimliu/baoyu-skills', name: 'Baoyu Tools' },\n { source: 'giuseppe-trisciuoglio/developer-kit', name: 'Shadcn / Radix' },\n { source: 'openrouterteam/agent-skills', name: 'OpenRouter SDK' },\n { source: 'intellectronica/agent-skills', name: 'Context7' },\n { source: 'boristane/agent-skills', name: 'Logging Patterns' },\n { source: 'f/awesome-chatgpt-prompts', name: 'ChatGPT Prompts' },\n { source: 'rohitg00/openskills', name: 'OpenSkills' },\n];\n\ninterface FetchedSkill {\n name: string;\n source: string;\n repoName: string;\n description?: string;\n}\n\ninterface UseMarketplaceResult {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n totalCount: number;\n repos: RepoInfo[];\n currentRepo: string | null;\n refresh: () => void;\n search: (query: string) => void;\n fetchRepo: (source: string) => Promise<void>;\n fetchAllRepos: () => Promise<void>;\n}\n\nexport function useMarketplace(): UseMarketplaceResult {\n const [allSkills, setAllSkills] = useState<FetchedSkill[]>([]);\n const [filteredSkills, setFilteredSkills] = useState<FetchedSkill[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [currentRepo, setCurrentRepo] = useState<string | null>(null);\n const [fetchedRepos, setFetchedRepos] = useState<Set<string>>(new Set());\n\n const fetchRepo = useCallback(async (source: string) => {\n if (fetchedRepos.has(source)) return;\n\n setLoading(true);\n setError(null);\n setCurrentRepo(source);\n\n try {\n const provider = detectProvider(source);\n if (!provider) {\n throw new Error(`Could not detect provider for: ${source}`);\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n\n if (!result.success || !result.discoveredSkills) {\n throw new Error(result.error || 'Failed to fetch skills');\n }\n\n const repoName = POPULAR_REPOS.find(r => r.source === source)?.name || source;\n const newSkills: FetchedSkill[] = result.discoveredSkills.map(skill => ({\n name: skill.name,\n source: source,\n repoName: repoName,\n description: undefined,\n }));\n\n setAllSkills(prev => {\n const updated = [...prev, ...newSkills];\n return updated.sort((a, b) => a.name.localeCompare(b.name));\n });\n\n setFetchedRepos(prev => new Set([...prev, source]));\n\n if (result.tempRoot) {\n const { rmSync } = await import('node:fs');\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to fetch repository');\n } finally {\n setLoading(false);\n setCurrentRepo(null);\n }\n }, [fetchedRepos]);\n\n const fetchAllRepos = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n for (const repo of POPULAR_REPOS) {\n if (!fetchedRepos.has(repo.source)) {\n setCurrentRepo(repo.source);\n try {\n await fetchRepo(repo.source);\n } catch {\n }\n }\n }\n\n setLoading(false);\n setCurrentRepo(null);\n }, [fetchRepo, fetchedRepos]);\n\n const search = useCallback((query: string) => {\n if (!query.trim()) {\n setFilteredSkills(allSkills);\n } else {\n const lowerQuery = query.toLowerCase();\n setFilteredSkills(\n allSkills.filter(\n (s) =>\n s.name.toLowerCase().includes(lowerQuery) ||\n s.source.toLowerCase().includes(lowerQuery) ||\n s.repoName.toLowerCase().includes(lowerQuery) ||\n s.description?.toLowerCase().includes(lowerQuery)\n )\n );\n }\n }, [allSkills]);\n\n const refresh = useCallback(() => {\n setFetchedRepos(new Set());\n setAllSkills([]);\n setFilteredSkills([]);\n }, []);\n\n useEffect(() => {\n setFilteredSkills(allSkills);\n }, [allSkills]);\n\n const skills: SkillItem[] = filteredSkills.map((s) => ({\n name: s.name,\n description: s.description || s.repoName,\n source: s.source,\n }));\n\n return {\n skills,\n loading,\n error,\n totalCount: allSkills.length,\n repos: POPULAR_REPOS,\n currentRepo,\n refresh,\n search,\n fetchRepo,\n fetchAllRepos,\n };\n}\n","import { useState } from 'react';\nimport { existsSync, mkdirSync, cpSync, rmSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useMarketplace } from '../hooks/useMarketplace.js';\nimport { detectProvider } from '../../providers/index.js';\nimport { detectAgent, getAdapter, getAllAdapters } from '../../agents/index.js';\nimport { getInstallDir, saveSkillMetadata } from '../../core/config.js';\nimport type { SkillMetadata, AgentType } from '../../core/types.js';\n\ntype View = 'repos' | 'skills' | 'agents';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Browse({ rows = 24 }: Props) {\n const { repos, skills, loading, currentRepo, fetchRepo, fetchAllRepos } = useMarketplace();\n const [view, setView] = useState<View>('repos');\n const [sel, setSel] = useState(0);\n const [installing, setInstalling] = useState<string | null>(null);\n const [message, setMessage] = useState<string | null>(null);\n const [selectedSkill, setSelectedSkill] = useState<{ name: string; source: string } | null>(null);\n const [agents, setAgents] = useState<{ type: AgentType; name: string; detected: boolean }[]>([]);\n\n const items = view === 'repos' ? repos : view === 'skills' ? skills : agents;\n const maxVisible = Math.max(5, rows - 8);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), items.length - maxVisible));\n const visible = items.slice(start, start + maxVisible);\n\n const showAgentSelection = async (skillName: string, source: string) => {\n setSelectedSkill({ name: skillName, source });\n const adapters = getAllAdapters();\n const agentList: typeof agents = [];\n for (const a of adapters) {\n agentList.push({\n type: a.type as AgentType,\n name: a.name,\n detected: await a.isDetected(),\n });\n }\n setAgents(agentList);\n setView('agents');\n setSel(0);\n };\n\n const installSkill = async (skillName: string, source: string, agentType?: AgentType) => {\n setInstalling(skillName);\n setMessage(null);\n \n try {\n const provider = detectProvider(source);\n if (!provider) {\n setMessage(`Error: Unknown provider for ${source}`);\n setInstalling(null);\n return;\n }\n\n const result = await provider.clone(source, '', { depth: 1 });\n \n if (!result.success || !result.discoveredSkills) {\n setMessage(`Error: ${result.error || 'Failed to fetch'}`);\n setInstalling(null);\n return;\n }\n\n const skill = result.discoveredSkills.find(s => s.name === skillName);\n if (!skill) {\n setMessage(`Error: Skill ${skillName} not found`);\n setInstalling(null);\n return;\n }\n\n const targetAgentType = agentType || await detectAgent();\n const adapter = getAdapter(targetAgentType);\n const installDir = getInstallDir(false, targetAgentType);\n \n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true });\n }\n\n const targetPath = join(installDir, skillName);\n \n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n }\n \n cpSync(skill.path, targetPath, { recursive: true, dereference: true });\n\n const metadata: SkillMetadata = {\n name: skillName,\n description: '',\n source: source,\n sourceType: provider.type,\n subpath: skillName,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n saveSkillMetadata(targetPath, metadata);\n\n if (result.tempRoot) {\n rmSync(result.tempRoot, { recursive: true, force: true });\n }\n\n setMessage(`✓ Installed ${skillName} to ${adapter.name}`);\n if (!agentType) {\n setView('skills');\n }\n } catch (err) {\n setMessage(`Error: ${err instanceof Error ? err.message : 'Unknown error'}`);\n } finally {\n setInstalling(null);\n if (agentType) {\n setSelectedSkill(null);\n }\n }\n };\n\n useInput((input, key) => {\n if (loading || installing) return;\n \n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(items.length - 1, i + 1));\n else if (key.return) {\n if (view === 'repos' && repos[sel]) {\n fetchRepo(repos[sel].source);\n setView('skills');\n setSel(0);\n setMessage(null);\n } else if (view === 'skills' && skills[sel]?.source) {\n installSkill(skills[sel].name, skills[sel].source);\n } else if (view === 'agents' && agents[sel]) {\n installSkill(selectedSkill!.name, selectedSkill!.source, agents[sel].type);\n }\n }\n else if (input === 'm' && view === 'skills' && skills[sel]?.source) {\n showAgentSelection(skills[sel].name, skills[sel].source!);\n }\n else if (input === 'r') {\n if (view === 'skills') {\n setView('repos');\n setSel(0);\n setMessage(null);\n } else if (view === 'agents') {\n setView('skills');\n setSel(0);\n }\n }\n else if (input === 'a' && view === 'repos') { \n fetchAllRepos(); \n setView('skills'); \n setSel(0); \n }\n });\n\n if (view === 'agents') {\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SELECT AGENT</Text>\n <Text dimColor>Install \"{selectedSkill?.name}\" to which agent?</Text>\n <Text dimColor>(All agents supported - directory created if needed)</Text>\n \n <Box marginTop={1} flexDirection=\"column\">\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const a = agent as typeof agents[0];\n const status = a.detected ? '(ready)' : '(will create)';\n return (\n <Text key={a.type} inverse={isSel}>\n {isSel ? symbols.pointer : ' '} {a.name.padEnd(20)} <Text color={colors.secondaryDim}>{status}</Text>\n </Text>\n );\n })}\n </Box>\n \n <Box marginTop={1}>\n <Text dimColor>Enter=install to selected agent r=back q=quit</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>{view === 'repos' ? 'REPOSITORIES' : 'SKILLS'}</Text>\n {loading && <Text dimColor>Loading {currentRepo}...</Text>}\n {installing && <Text>Installing {installing}...</Text>}\n {message && <Text dimColor>{message}</Text>}\n <Text dimColor>{items.length} items</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((item, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n const name = view === 'repos' \n ? (item as typeof repos[0]).name\n : (item as typeof skills[0]).name;\n const src = view === 'repos'\n ? (item as typeof repos[0]).source\n : (item as typeof skills[0]).source || '';\n return (\n <Text key={src + name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{name.padEnd(25)} <Text color={colors.secondaryDim}>{src}</Text>\n </Text>\n );\n })}\n {start + maxVisible < items.length && <Text dimColor> ↓ {items.length - start - maxVisible} more</Text>}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {view === 'repos' \n ? 'Enter=fetch a=all q=quit' \n : 'Enter=quick install m=choose agent r=back q=quit'}\n </Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { getSearchDirs } from '../../core/config.js';\nimport { findAllSkills } from '../../core/skills.js';\nimport type { SkillItem } from '../components/SkillList.js';\n\ninterface UseSkillsResult {\n skills: SkillItem[];\n loading: boolean;\n error: string | null;\n refresh: () => void;\n remove: (name: string) => Promise<void>;\n}\n\nexport function useSkills(): UseSkillsResult {\n const [skills, setSkills] = useState<SkillItem[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const refresh = () => {\n setLoading(true);\n setError(null);\n\n try {\n const searchDirs = getSearchDirs();\n const foundSkills = findAllSkills(searchDirs);\n\n const skillItems: SkillItem[] = foundSkills.map((s) => ({\n name: s.name,\n description: s.description,\n source: s.metadata?.source,\n enabled: s.enabled,\n }));\n\n setSkills(skillItems);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load skills');\n } finally {\n setLoading(false);\n }\n };\n\n const remove = async (name: string) => {\n const { rmSync } = await import('node:fs');\n const foundSkill = skills.find(s => s.name === name);\n if (foundSkill) {\n const searchDirs = getSearchDirs();\n const allSkills = findAllSkills(searchDirs);\n const skill = allSkills.find(s => s.name === name);\n if (skill) {\n rmSync(skill.path, { recursive: true, force: true });\n refresh();\n }\n }\n };\n\n useEffect(() => {\n refresh();\n }, []);\n\n return { skills, loading, error, refresh, remove };\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { useSkills } from '../hooks/useSkills.js';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Installed({ rows = 24 }: Props) {\n const { skills, loading, refresh, remove } = useSkills();\n const [sel, setSel] = useState(0);\n\n const maxVisible = Math.max(5, rows - 6);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), skills.length - maxVisible));\n const visible = skills.slice(start, start + maxVisible);\n\n useInput((input, key) => {\n if (loading) return;\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(skills.length - 1, i + 1));\n else if (input === 'r') refresh();\n else if (input === 'd' && skills[sel]) remove(skills[sel].name);\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>INSTALLED SKILLS</Text>\n <Text dimColor>{skills.length} skills</Text>\n\n {loading && <Text>Loading...</Text>}\n\n {!loading && skills.length === 0 && (\n <Text dimColor>No skills installed. Press b to browse.</Text>\n )}\n\n {!loading && skills.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((skill, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Text key={skill.name} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{skill.name.padEnd(30)} {skill.source && <Text color={colors.secondaryDim}>{skill.source}</Text>}\n </Text>\n );\n })}\n {start + maxVisible < skills.length && <Text dimColor> ↓ {skills.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>r=refresh d=delete q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\nimport { getAllAdapters } from '../../agents/index.js';\n\ninterface AgentStatus {\n name: string;\n type: string;\n detected: boolean;\n}\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nexport function Sync({ rows = 24 }: Props) {\n const [agents, setAgents] = useState<AgentStatus[]>([]);\n const [loading, setLoading] = useState(true);\n const [sel, setSel] = useState(0);\n const [syncing, setSyncing] = useState(false);\n\n const maxVisible = Math.max(5, rows - 6);\n const start = Math.max(0, Math.min(sel - Math.floor(maxVisible / 2), agents.length - maxVisible));\n const visible = agents.slice(start, start + maxVisible);\n\n useEffect(() => {\n (async () => {\n const adapters = getAllAdapters();\n const s: AgentStatus[] = [];\n for (const a of adapters) {\n s.push({ name: a.name, type: a.type, detected: await a.isDetected() });\n }\n setAgents(s);\n setLoading(false);\n })();\n }, []);\n\n useInput((input, key) => {\n if (loading || syncing) return;\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(agents.length - 1, i + 1));\n else if (input === 'a') { setSyncing(true); setTimeout(() => setSyncing(false), 500); }\n else if (key.return && agents[sel]?.detected) { setSyncing(true); setTimeout(() => setSyncing(false), 300); }\n });\n\n const detected = agents.filter(a => a.detected).length;\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SYNC SKILLS</Text>\n <Text dimColor>{detected}/{agents.length} agents detected</Text>\n\n {loading && <Text>Detecting agents...</Text>}\n {syncing && <Text>Syncing...</Text>}\n\n {!loading && !syncing && (\n <Box marginTop={1} flexDirection=\"column\">\n {start > 0 && <Text dimColor> ↑ {start} more</Text>}\n {visible.map((agent, i) => {\n const idx = start + i;\n const isSel = idx === sel;\n return (\n <Text key={agent.type} inverse={isSel} dimColor={!agent.detected}>\n {isSel ? symbols.pointer : ' '}{agent.detected ? symbols.checkboxOn : symbols.checkboxOff} {agent.name.padEnd(20)} {agent.detected ? 'Ready' : 'N/A'}\n </Text>\n );\n })}\n {start + maxVisible < agents.length && <Text dimColor> ↓ {agents.length - start - maxVisible} more</Text>}\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Enter=sync a=all q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { colors, symbols } from '../theme.js';\n\ninterface Props {\n cols?: number;\n rows?: number;\n}\n\nconst SETTINGS = [\n { id: 'agent', label: 'Default Agent', value: 'auto-detect' },\n { id: 'sync', label: 'Auto Sync', value: 'disabled' },\n { id: 'cache', label: 'Cache Dir', value: '~/.skillkit/cache' },\n];\n\nexport function Settings({}: Props) {\n const [sel, setSel] = useState(0);\n\n useInput((_, key) => {\n if (key.upArrow) setSel(i => Math.max(0, i - 1));\n else if (key.downArrow) setSel(i => Math.min(SETTINGS.length - 1, i + 1));\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold color={colors.primary}>SETTINGS</Text>\n <Text dimColor>Configure SkillKit</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {SETTINGS.map((s, i) => {\n const isSel = i === sel;\n return (\n <Text key={s.id} inverse={isSel}>\n {isSel ? symbols.pointer : ' '}{s.label.padEnd(16)} <Text color={colors.secondaryDim}>{s.value}</Text>\n </Text>\n );\n })}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Enter=edit q=quit</Text>\n </Box>\n </Box>\n );\n}\n","import { useState } from 'react';\nimport { Box, Text, useInput, useApp, useStdout } from 'ink';\nimport { Sidebar } from './components/Sidebar.js';\nimport { Home } from './screens/Home.js';\nimport { Browse } from './screens/Browse.js';\nimport { Installed } from './screens/Installed.js';\nimport { Sync } from './screens/Sync.js';\nimport { Settings } from './screens/Settings.js';\n\nexport type Screen = 'home' | 'browse' | 'installed' | 'sync' | 'settings';\n\nexport function App() {\n const [screen, setScreen] = useState<Screen>('home');\n const { exit } = useApp();\n const { stdout } = useStdout();\n \n const cols = stdout?.columns || 80;\n const rows = stdout?.rows || 24;\n const showSidebar = cols >= 70;\n\n useInput((input, key) => {\n if (input === 'q') {\n exit();\n return;\n }\n if (key.escape) {\n setScreen('home');\n return;\n }\n if (input === 'h') setScreen('home');\n if (input === 'b') setScreen('browse');\n if (input === 'l') setScreen('installed');\n if (input === 's') setScreen('sync');\n if (input === ',') setScreen('settings');\n });\n\n const renderScreen = () => {\n switch (screen) {\n case 'home': return <Home onNavigate={setScreen} cols={cols} rows={rows} />;\n case 'browse': return <Browse cols={cols} rows={rows} />;\n case 'installed': return <Installed cols={cols} rows={rows} />;\n case 'sync': return <Sync cols={cols} rows={rows} />;\n case 'settings': return <Settings cols={cols} rows={rows} />;\n }\n };\n\n return (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\" flexGrow={1}>\n {showSidebar && <Sidebar screen={screen} onNavigate={setScreen} />}\n <Box flexDirection=\"column\" flexGrow={1} marginLeft={1}>\n {renderScreen()}\n </Box>\n </Box>\n <Text dimColor>h Home b Browse l List s Sync , Config Esc Back q Quit</Text>\n </Box>\n );\n}\n","import { render } from 'ink';\nimport { App } from './App.js';\n\nexport function startTUI() {\n const { waitUntilExit } = render(<App />);\n return waitUntilExit();\n}\n","#!/usr/bin/env node\nimport { Cli, Builtins } from 'clipanion';\nimport {\n InstallCommand,\n SyncCommand,\n ReadCommand,\n ListCommand,\n EnableCommand,\n DisableCommand,\n UpdateCommand,\n RemoveCommand,\n InitCommand,\n ValidateCommand,\n CreateCommand,\n UICommand,\n} from './commands/index.js';\n\nconst cli = new Cli({\n binaryLabel: 'skillkit',\n binaryName: 'skillkit',\n binaryVersion: '1.1.0',\n});\n\ncli.register(Builtins.HelpCommand);\ncli.register(Builtins.VersionCommand);\n\ncli.register(InstallCommand);\ncli.register(SyncCommand);\ncli.register(ReadCommand);\ncli.register(ListCommand);\ncli.register(EnableCommand);\ncli.register(DisableCommand);\ncli.register(UpdateCommand);\ncli.register(RemoveCommand);\ncli.register(InitCommand);\ncli.register(ValidateCommand);\ncli.register(CreateCommand);\ncli.register(UICommand);\n\ncli.runExit(process.argv.slice(2));\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 } from '../providers/index.js';\nimport { getInstallDir, saveSkillMetadata } from '../core/config.js';\nimport { isPathInside } from '../core/skills.js';\nimport { getAdapter, detectAgent } from '../agents/index.js';\nimport type { SkillMetadata, GitProvider, AgentType } from '../core/types.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 const { getProvider } = await import('../providers/index.js');\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, readFileSync, writeFileSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { getSearchDirs, getAgentConfigPath, loadConfig } from '../core/config.js';\nimport { findAllSkills } from '../core/skills.js';\nimport { getAdapter, detectAgent } from '../agents/index.js';\nimport type { AgentType } from '../core/types.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 \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 \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 \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 { getSearchDirs } from '../core/config.js';\nimport { findSkill, readSkillContent } from '../core/skills.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 chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { getSearchDirs } from '../core/config.js';\nimport { findAllSkills } from '../core/skills.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","import chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { getSearchDirs, setSkillEnabled } from '../core/config.js';\nimport { findSkill } from '../core/skills.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, cpSync } from 'node:fs';\nimport { join } from 'node:path';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Command, Option } from 'clipanion';\nimport { getSearchDirs, loadSkillMetadata, saveSkillMetadata } from '../core/config.js';\nimport { findAllSkills, findSkill } from '../core/skills.js';\nimport { detectProvider, isLocalPath } from '../providers/index.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 \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 \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 \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 \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, rmSync } from 'node:fs';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { getSearchDirs } from '../core/config.js';\nimport { findSkill } from '../core/skills.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 chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { initProject } from '../core/config.js';\nimport { detectAgent, getAdapter, getAllAdapters } from '../agents/index.js';\nimport type { AgentType } from '../core/types.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 \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 { existsSync, readdirSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport chalk from 'chalk';\nimport { Command, Option } from 'clipanion';\nimport { validateSkill } from '../core/skills.js';\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('../tui/index.js');\n await startTUI();\n return 0;\n }\n}\n"],"mappings":"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","names":["existsSync","join","basename","execSync","existsSync","rmSync","join","basename","tmpdir","randomUUID","execSync","existsSync","rmSync","join","basename","tmpdir","randomUUID","existsSync","join","basename","init_base","existsSync","join","homedir","init_base","existsSync","join","init_base","existsSync","join","homedir","existsSync","join","homedir","existsSync","join","homedir","init_base","existsSync","join","homedir","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","homedir","init_base","existsSync","join","init_base","init_base","existsSync","readFileSync","join","homedir","parseYaml","chalk","Box","Text","jsx","jsxs","useState","useEffect","rmSync","useState","existsSync","mkdirSync","cpSync","rmSync","join","Box","Text","jsx","jsxs","adapters","useState","useEffect","rmSync","useState","Box","Text","useInput","jsx","jsxs","useState","useEffect","Box","Text","useInput","jsx","jsxs","adapters","useState","Box","Text","useInput","jsx","jsxs","useState","Box","Text","useInput","jsx","jsxs","jsx","existsSync","mkdirSync","rmSync","join","getProvider","cleanupPath","existsSync","readFileSync","writeFileSync","mkdirSync","dirname","chalk","Command","Option","config","chalk","Command","Option","chalk","Command","Option","chalk","Command","Option","existsSync","rmSync","cpSync","join","chalk","ora","Command","Option","existsSync","rmSync","chalk","Command","Option","chalk","Command","Option","adapters","existsSync","readdirSync","join","basename","chalk","Command","Option","existsSync","mkdirSync","writeFileSync","join","chalk","Command","Option","Command","startTUI"]}
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { Cli, Builtins } from 'clipanion';\nimport {\n InstallCommand,\n SyncCommand,\n ReadCommand,\n ListCommand,\n EnableCommand,\n DisableCommand,\n UpdateCommand,\n RemoveCommand,\n InitCommand,\n ValidateCommand,\n CreateCommand,\n UICommand,\n TranslateCommand,\n ContextCommand,\n RecommendCommand,\n} from '@skillkit/cli';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJsonPath = join(__dirname, '../package.json');\nconst packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\nconst version = packageJson.version || '1.2.0';\n\nconst cli = new Cli({\n binaryLabel: 'skillkit',\n binaryName: 'skillkit',\n binaryVersion: version,\n});\n\ncli.register(Builtins.HelpCommand);\ncli.register(Builtins.VersionCommand);\n\ncli.register(InstallCommand);\ncli.register(SyncCommand);\ncli.register(ReadCommand);\ncli.register(ListCommand);\ncli.register(EnableCommand);\ncli.register(DisableCommand);\ncli.register(UpdateCommand);\ncli.register(RemoveCommand);\ncli.register(InitCommand);\ncli.register(ValidateCommand);\ncli.register(CreateCommand);\ncli.register(UICommand);\ncli.register(TranslateCommand);\ncli.register(ContextCommand);\ncli.register(RecommendCommand);\n\ncli.runExit(process.argv.slice(2));\n"],"mappings":";;;AACA,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,SAAS,YAAY;AAC9B,SAAS,KAAK,gBAAgB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,IAAM,aAAa,cAAc,YAAY,GAAG;AAChD,IAAM,YAAY,QAAQ,UAAU;AACpC,IAAM,kBAAkB,KAAK,WAAW,iBAAiB;AACzD,IAAM,cAAc,KAAK,MAAM,aAAa,iBAAiB,OAAO,CAAC;AACrE,IAAM,UAAU,YAAY,WAAW;AAEvC,IAAM,MAAM,IAAI,IAAI;AAAA,EAClB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,eAAe;AACjB,CAAC;AAED,IAAI,SAAS,SAAS,WAAW;AACjC,IAAI,SAAS,SAAS,cAAc;AAEpC,IAAI,SAAS,cAAc;AAC3B,IAAI,SAAS,WAAW;AACxB,IAAI,SAAS,WAAW;AACxB,IAAI,SAAS,WAAW;AACxB,IAAI,SAAS,aAAa;AAC1B,IAAI,SAAS,cAAc;AAC3B,IAAI,SAAS,aAAa;AAC1B,IAAI,SAAS,aAAa;AAC1B,IAAI,SAAS,WAAW;AACxB,IAAI,SAAS,eAAe;AAC5B,IAAI,SAAS,aAAa;AAC1B,IAAI,SAAS,SAAS;AACtB,IAAI,SAAS,gBAAgB;AAC7B,IAAI,SAAS,cAAc;AAC3B,IAAI,SAAS,gBAAgB;AAE7B,IAAI,QAAQ,QAAQ,KAAK,MAAM,CAAC,CAAC;","names":[]}