{"version":3,"sources":["../../src/cli/index.ts","../../src/core/constants.ts","../../src/cli/commands/init.ts","../../src/cli/utils/prompts.ts","../../src/cli/commands/search.ts","../../src/core/search.ts","../../src/core/local-store.ts","../../src/cli/utils/display.ts","../../src/cli/commands/install.ts","../../src/core/installer.ts","../../src/core/errors.ts","../../src/core/registry.ts","../../src/core/parser.ts","../../src/core/schema.ts","../../src/core/safeguards.ts","../../src/cli/commands/uninstall.ts","../../src/cli/commands/info.ts","../../src/cli/commands/list.ts","../../src/cli/commands/rate.ts","../../src/core/ratings.ts","../../src/cli/commands/update.ts","../../src/cli/commands/publish.ts","../../src/core/publisher.ts","../../src/cli/commands/trawl.ts","../../src/trawler/strategies.ts","../../src/trawler/ranker.ts","../../src/trawler/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { VERSION } from '../core/constants.js';\nimport { registerInitCommand } from './commands/init.js';\nimport { registerSearchCommand } from './commands/search.js';\nimport { registerInstallCommand } from './commands/install.js';\nimport { registerUninstallCommand } from './commands/uninstall.js';\nimport { registerInfoCommand } from './commands/info.js';\nimport { registerListCommand } from './commands/list.js';\nimport { registerRateCommand } from './commands/rate.js';\nimport { registerUpdateCommand } from './commands/update.js';\nimport { registerPublishCommand } from './commands/publish.js';\nimport { registerTrawlCommand } from './commands/trawl.js';\n\nconst program = new Command();\n\nprogram\n  .name('skillli')\n  .description('Discover, publish, rate, and use agentic AI skills packages')\n  .version(VERSION);\n\nregisterInitCommand(program);\nregisterSearchCommand(program);\nregisterInstallCommand(program);\nregisterUninstallCommand(program);\nregisterInfoCommand(program);\nregisterListCommand(program);\nregisterRateCommand(program);\nregisterUpdateCommand(program);\nregisterPublishCommand(program);\nregisterTrawlCommand(program);\n\nprogram.parse();\n","import { homedir } from 'os';\nimport { join } from 'path';\n\nexport const SKILLLI_DIR = join(homedir(), '.skillli');\nexport const LOCAL_INDEX_PATH = join(SKILLLI_DIR, 'index.json');\nexport const CONFIG_PATH = join(SKILLLI_DIR, 'config.json');\nexport const SKILLS_DIR = join(SKILLLI_DIR, 'skills');\nexport const CACHE_DIR = join(SKILLLI_DIR, 'cache');\n\nexport const DEFAULT_REGISTRY_URL =\n  'https://raw.githubusercontent.com/skillli/registry/main/index.json';\nexport const DEFAULT_RATINGS_URL =\n  'https://raw.githubusercontent.com/skillli/registry/main/ratings/';\n\nexport const SKILL_FILENAME = 'SKILL.md';\nexport const MANIFEST_FILENAME = 'skillli.json';\nexport const MAX_SKILL_SIZE_BYTES = 5 * 1024 * 1024; // 5MB\nexport const MAX_SKILL_MD_LINES = 500;\n\nexport const VERSION = '0.1.0';\n","import { Command } from 'commander';\nimport { mkdir, writeFile } from 'fs/promises';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport chalk from 'chalk';\nimport { promptInit } from '../utils/prompts.js';\n\nconst SKILL_TEMPLATE = (answers: {\n  name: string;\n  version: string;\n  description: string;\n  author: string;\n  license: string;\n  tags: string[];\n  category: string;\n}) => `---\nname: ${answers.name}\nversion: ${answers.version}\ndescription: ${answers.description}\nauthor: ${answers.author}\nlicense: ${answers.license}\ntags: [${answers.tags.join(', ')}]\ncategory: ${answers.category}\ntrust-level: community\nuser-invocable: true\n---\n\n# ${answers.name}\n\n${answers.description}\n\n## When to Use\n\nDescribe when this skill should be invoked.\n\n## Instructions\n\nDescribe what the AI should do when this skill is activated.\n\n## Examples\n\nProvide example inputs and expected behavior.\n`;\n\nexport function registerInitCommand(program: Command): void {\n  program\n    .command('init [name]')\n    .description('Create a new skill from template')\n    .option('-d, --dir <path>', 'Output directory', '.')\n    .action(async (name: string | undefined, options: { dir: string }) => {\n      try {\n        const answers = await promptInit({ name });\n        const tags = answers.tags.split(',').map((t) => t.trim()).filter(Boolean);\n        const outputDir = join(options.dir, answers.name);\n\n        if (existsSync(outputDir)) {\n          console.log(chalk.red(`Directory ${outputDir} already exists.`));\n          process.exit(1);\n        }\n\n        await mkdir(outputDir, { recursive: true });\n        await mkdir(join(outputDir, 'scripts'), { recursive: true });\n        await mkdir(join(outputDir, 'references'), { recursive: true });\n\n        const content = SKILL_TEMPLATE({ ...answers, tags });\n        await writeFile(join(outputDir, 'SKILL.md'), content);\n\n        const manifest = {\n          name: answers.name,\n          version: answers.version,\n          description: answers.description,\n          author: answers.author,\n          license: answers.license,\n          tags,\n          category: answers.category,\n        };\n        await writeFile(join(outputDir, 'skillli.json'), JSON.stringify(manifest, null, 2));\n\n        console.log(chalk.green(`\\nSkill \"${answers.name}\" created at ${outputDir}`));\n        console.log(chalk.gray('  Edit SKILL.md to add your skill instructions.'));\n        console.log(chalk.gray('  Run `skillli publish` when ready to share.\\n'));\n      } catch (error) {\n        console.error(chalk.red('Error:'), error);\n        process.exit(1);\n      }\n    });\n}\n","import inquirer from 'inquirer';\nimport type { SkillCategory } from '../../core/types.js';\n\nexport interface InitAnswers {\n  name: string;\n  version: string;\n  description: string;\n  author: string;\n  license: string;\n  tags: string;\n  category: SkillCategory;\n}\n\nexport async function promptInit(defaults?: Partial<InitAnswers>): Promise<InitAnswers> {\n  return inquirer.prompt([\n    {\n      type: 'input',\n      name: 'name',\n      message: 'Skill name (lowercase, hyphens):',\n      default: defaults?.name,\n      validate: (v: string) => /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/.test(v) || 'Must be lowercase alphanumeric with hyphens',\n    },\n    {\n      type: 'input',\n      name: 'version',\n      message: 'Version:',\n      default: defaults?.version ?? '1.0.0',\n    },\n    {\n      type: 'input',\n      name: 'description',\n      message: 'Description (10-500 chars):',\n      default: defaults?.description,\n      validate: (v: string) => (v.length >= 10 && v.length <= 500) || 'Must be 10-500 characters',\n    },\n    {\n      type: 'input',\n      name: 'author',\n      message: 'Author (GitHub username):',\n      default: defaults?.author,\n    },\n    {\n      type: 'input',\n      name: 'license',\n      message: 'License:',\n      default: defaults?.license ?? 'MIT',\n    },\n    {\n      type: 'input',\n      name: 'tags',\n      message: 'Tags (comma-separated):',\n      default: defaults?.tags,\n    },\n    {\n      type: 'list',\n      name: 'category',\n      message: 'Category:',\n      choices: ['development', 'creative', 'enterprise', 'data', 'devops', 'other'],\n      default: defaults?.category ?? 'other',\n    },\n  ]) as Promise<InitAnswers>;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { search } from '../../core/search.js';\nimport { getLocalIndex } from '../../core/local-store.js';\nimport { displaySearchResults } from '../utils/display.js';\nimport type { SkillCategory, TrustLevel } from '../../core/types.js';\n\nexport function registerSearchCommand(program: Command): void {\n  program\n    .command('search <query>')\n    .description('Search for skills in the registry')\n    .option('-t, --tag <tags...>', 'Filter by tags')\n    .option('-c, --category <category>', 'Filter by category')\n    .option('--trust <level>', 'Filter by trust level')\n    .option('--min-rating <n>', 'Minimum rating', parseFloat)\n    .option('-l, --limit <n>', 'Max results', parseInt)\n    .action(\n      async (\n        query: string,\n        options: {\n          tag?: string[];\n          category?: string;\n          trust?: string;\n          minRating?: number;\n          limit?: number;\n        },\n      ) => {\n        const spinner = ora('Searching skills...').start();\n        try {\n          const index = await getLocalIndex();\n          const results = search(index, {\n            query,\n            tags: options.tag,\n            category: options.category as SkillCategory | undefined,\n            trustLevel: options.trust as TrustLevel | undefined,\n            minRating: options.minRating,\n            limit: options.limit,\n          });\n          spinner.stop();\n          displaySearchResults(results);\n        } catch (error) {\n          spinner.fail('Search failed');\n          console.error(chalk.red(String(error)));\n          process.exit(1);\n        }\n      },\n    );\n}\n","import type {\n  LocalIndex,\n  RegistryEntry,\n  SearchOptions,\n  SearchResult,\n  SkillCategory,\n} from './types.js';\n\nfunction tokenize(text: string): string[] {\n  return text\n    .toLowerCase()\n    .split(/[\\s\\-_,./]+/)\n    .filter((t) => t.length > 1);\n}\n\nfunction textScore(tokens: string[], text: string): number {\n  const lower = text.toLowerCase();\n  let score = 0;\n  for (const token of tokens) {\n    if (lower.includes(token)) score += 1;\n  }\n  return score;\n}\n\nfunction scoreSkill(\n  entry: RegistryEntry,\n  queryTokens: string[],\n  options: SearchOptions,\n): { score: number; matchedOn: SearchResult['matchedOn'] } {\n  let score = 0;\n  const matchedOn: SearchResult['matchedOn'] = [];\n\n  // Name match (highest weight)\n  const nameScore = textScore(queryTokens, entry.name);\n  if (nameScore > 0) {\n    score += nameScore * 5;\n    matchedOn.push('name');\n  }\n\n  // Exact name match bonus\n  if (entry.name === options.query.toLowerCase()) {\n    score += 10;\n  }\n\n  // Description match\n  const descScore = textScore(queryTokens, entry.description);\n  if (descScore > 0) {\n    score += descScore * 2;\n    matchedOn.push('description');\n  }\n\n  // Tag match (very high weight)\n  for (const token of queryTokens) {\n    if (entry.tags.some((t) => t.toLowerCase() === token)) {\n      score += 4;\n      if (!matchedOn.includes('tags')) matchedOn.push('tags');\n    }\n  }\n\n  // Filter-matched tags from options\n  if (options.tags) {\n    for (const tag of options.tags) {\n      if (entry.tags.includes(tag)) {\n        score += 3;\n        if (!matchedOn.includes('tags')) matchedOn.push('tags');\n      }\n    }\n  }\n\n  // Category match\n  if (options.category && entry.category === options.category) {\n    score += 2;\n    matchedOn.push('category');\n  }\n\n  // Only apply boosts if there's at least one text/tag/category match\n  if (matchedOn.length > 0) {\n    // Trust level boost\n    if (entry.trustLevel === 'official') score += 3;\n    if (entry.trustLevel === 'verified') score += 1.5;\n\n    // Rating boost\n    score += entry.rating.average * 0.5;\n\n    // Download boost (log scale)\n    if (entry.downloads > 0) {\n      score += Math.log10(entry.downloads) * 0.5;\n    }\n  }\n\n  return { score, matchedOn };\n}\n\nexport function search(index: LocalIndex, options: SearchOptions): SearchResult[] {\n  const queryTokens = tokenize(options.query);\n  const results: SearchResult[] = [];\n\n  for (const entry of Object.values(index.skills)) {\n    // Pre-filter by category\n    if (options.category && entry.category !== options.category) continue;\n\n    // Pre-filter by trust level\n    if (options.trustLevel && entry.trustLevel !== options.trustLevel) continue;\n\n    // Pre-filter by minimum rating\n    if (options.minRating && entry.rating.average < options.minRating) continue;\n\n    const { score, matchedOn } = scoreSkill(entry, queryTokens, options);\n\n    if (score > 0) {\n      results.push({ skill: entry, relevanceScore: score, matchedOn });\n    }\n  }\n\n  // Sort by relevance (descending)\n  results.sort((a, b) => b.relevanceScore - a.relevanceScore);\n\n  // Apply offset and limit\n  const offset = options.offset ?? 0;\n  const limit = options.limit ?? 20;\n  return results.slice(offset, offset + limit);\n}\n\nexport function searchByTags(index: LocalIndex, tags: string[]): SearchResult[] {\n  return search(index, { query: tags.join(' '), tags });\n}\n\nexport function searchByCategory(index: LocalIndex, category: SkillCategory): SearchResult[] {\n  return search(index, { query: '', category });\n}\n","import { mkdir, readFile, writeFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport {\n  SKILLLI_DIR,\n  LOCAL_INDEX_PATH,\n  CONFIG_PATH,\n  SKILLS_DIR,\n  CACHE_DIR,\n  DEFAULT_REGISTRY_URL,\n} from './constants.js';\nimport type { LocalIndex, LocalConfig, InstalledSkill } from './types.js';\n\nexport async function ensureDir(): Promise<void> {\n  for (const dir of [SKILLLI_DIR, SKILLS_DIR, CACHE_DIR]) {\n    if (!existsSync(dir)) {\n      await mkdir(dir, { recursive: true });\n    }\n  }\n}\n\nfunction defaultConfig(): LocalConfig {\n  return {\n    installedSkills: {},\n    registryUrl: DEFAULT_REGISTRY_URL,\n    lastSync: '',\n  };\n}\n\nfunction defaultIndex(): LocalIndex {\n  return {\n    version: '1.0.0',\n    lastUpdated: '',\n    skills: {},\n  };\n}\n\nexport async function getConfig(): Promise<LocalConfig> {\n  await ensureDir();\n  if (!existsSync(CONFIG_PATH)) {\n    const config = defaultConfig();\n    await saveConfig(config);\n    return config;\n  }\n  const raw = await readFile(CONFIG_PATH, 'utf-8');\n  return JSON.parse(raw) as LocalConfig;\n}\n\nexport async function saveConfig(config: LocalConfig): Promise<void> {\n  await ensureDir();\n  await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2));\n}\n\nexport async function getLocalIndex(): Promise<LocalIndex> {\n  await ensureDir();\n  if (!existsSync(LOCAL_INDEX_PATH)) {\n    const index = defaultIndex();\n    await saveLocalIndex(index);\n    return index;\n  }\n  const raw = await readFile(LOCAL_INDEX_PATH, 'utf-8');\n  return JSON.parse(raw) as LocalIndex;\n}\n\nexport async function saveLocalIndex(index: LocalIndex): Promise<void> {\n  await ensureDir();\n  await writeFile(LOCAL_INDEX_PATH, JSON.stringify(index, null, 2));\n}\n\nexport async function getInstalledSkills(): Promise<InstalledSkill[]> {\n  const config = await getConfig();\n  return Object.values(config.installedSkills);\n}\n\nexport async function markInstalled(skill: InstalledSkill): Promise<void> {\n  const config = await getConfig();\n  config.installedSkills[skill.name] = skill;\n  await saveConfig(config);\n}\n\nexport async function markUninstalled(name: string): Promise<void> {\n  const config = await getConfig();\n  delete config.installedSkills[name];\n  await saveConfig(config);\n}\n","import chalk from 'chalk';\nimport type { SearchResult, RegistryEntry, SafeguardResult, InstalledSkill, RatingInfo } from '../../core/types.js';\n\nexport function trustBadge(level: string): string {\n  switch (level) {\n    case 'official':\n      return chalk.green.bold('[OFFICIAL]');\n    case 'verified':\n      return chalk.blue.bold('[VERIFIED]');\n    default:\n      return chalk.gray('[COMMUNITY]');\n  }\n}\n\nexport function stars(rating: RatingInfo): string {\n  const filled = Math.round(rating.average);\n  const empty = 5 - filled;\n  return chalk.yellow('\\u2605'.repeat(filled)) + chalk.gray('\\u2606'.repeat(empty));\n}\n\nexport function displaySearchResults(results: SearchResult[]): void {\n  if (results.length === 0) {\n    console.log(chalk.yellow('No skills found matching your query.'));\n    return;\n  }\n\n  console.log(chalk.bold(`\\nFound ${results.length} skill(s):\\n`));\n\n  for (const { skill, relevanceScore, matchedOn } of results) {\n    const badge = trustBadge(skill.trustLevel);\n    const rating = stars(skill.rating);\n    console.log(\n      `  ${chalk.cyan.bold(skill.name)} ${chalk.gray('v' + skill.version)} ${badge}`,\n    );\n    console.log(`    ${skill.description}`);\n    console.log(\n      `    ${rating} ${chalk.gray(`| ${skill.downloads} downloads | by ${skill.author}`)}`,\n    );\n    console.log(\n      `    ${chalk.gray('Tags:')} ${skill.tags.map((t) => chalk.magenta(t)).join(', ')}`,\n    );\n    console.log();\n  }\n}\n\nexport function displaySkillInfo(skill: RegistryEntry): void {\n  console.log(chalk.bold.cyan(`\\n  ${skill.name}`) + chalk.gray(` v${skill.version}`));\n  console.log(`  ${trustBadge(skill.trustLevel)}\\n`);\n  console.log(`  ${skill.description}\\n`);\n  console.log(`  ${chalk.bold('Author:')}     ${skill.author}`);\n  console.log(`  ${chalk.bold('Category:')}   ${skill.category}`);\n  console.log(`  ${chalk.bold('Tags:')}       ${skill.tags.join(', ')}`);\n  console.log(`  ${chalk.bold('Rating:')}     ${stars(skill.rating)} (${skill.rating.count} ratings)`);\n  console.log(`  ${chalk.bold('Downloads:')}  ${skill.downloads}`);\n  if (skill.repository) {\n    console.log(`  ${chalk.bold('Repository:')} ${skill.repository}`);\n  }\n  console.log(`  ${chalk.bold('Published:')}  ${skill.publishedAt}`);\n  console.log(`  ${chalk.bold('Updated:')}    ${skill.updatedAt}`);\n  console.log();\n}\n\nexport function displayTrustScore(score: number): void {\n  let color: typeof chalk.green;\n  if (score >= 70) color = chalk.green;\n  else if (score >= 40) color = chalk.yellow;\n  else color = chalk.red;\n\n  const bar = '\\u2588'.repeat(Math.round(score / 5)) + chalk.gray('\\u2591'.repeat(20 - Math.round(score / 5)));\n  console.log(`  Trust Score: ${color.bold(score.toString())} / 100  ${bar}`);\n}\n\nexport function displaySafeguardReport(result: SafeguardResult): void {\n  console.log(chalk.bold('\\nSafeguard Report:'));\n  for (const check of result.checks) {\n    const icon = check.passed ? chalk.green('\\u2713') : check.severity === 'error' ? chalk.red('\\u2717') : chalk.yellow('\\u26A0');\n    console.log(`  ${icon} ${check.name}: ${check.message}`);\n  }\n  displayTrustScore(result.score);\n  console.log();\n}\n\nexport function displayInstalledSkills(skills: InstalledSkill[]): void {\n  if (skills.length === 0) {\n    console.log(chalk.yellow('No skills installed.'));\n    return;\n  }\n  console.log(chalk.bold(`\\nInstalled skills (${skills.length}):\\n`));\n  for (const skill of skills) {\n    console.log(\n      `  ${chalk.cyan.bold(skill.name)} ${chalk.gray('v' + skill.version)} ${chalk.gray(`(${skill.source})`)}`,\n    );\n    console.log(`    Installed: ${skill.installedAt}`);\n    console.log(`    Path: ${skill.path}`);\n    console.log();\n  }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { installFromRegistry, installFromGithub, installFromLocal, linkToClaudeSkills } from '../../core/installer.js';\nimport { displayTrustScore } from '../utils/display.js';\n\nexport function registerInstallCommand(program: Command): void {\n  program\n    .command('install <skill>')\n    .description('Install a skill from the registry, GitHub URL, or local path')\n    .option('--link', 'Symlink to .claude/skills/ for Claude Code', false)\n    .option('--local', 'Install from a local directory')\n    .action(\n      async (\n        skill: string,\n        options: { link: boolean; local: boolean },\n      ) => {\n        const spinner = ora(`Installing ${skill}...`).start();\n        try {\n          let installed;\n          if (options.local) {\n            installed = await installFromLocal(skill);\n          } else if (skill.startsWith('http') || skill.includes('github.com')) {\n            installed = await installFromGithub(skill);\n          } else {\n            installed = await installFromRegistry(skill);\n          }\n          spinner.succeed(`Installed ${chalk.cyan(installed.name)} v${installed.version}`);\n          console.log(`  Path: ${installed.path}`);\n\n          if (options.link) {\n            const linkPath = await linkToClaudeSkills(installed);\n            console.log(`  Linked to: ${linkPath}`);\n          }\n        } catch (error) {\n          spinner.fail('Installation failed');\n          console.error(chalk.red(String(error)));\n          process.exit(1);\n        }\n      },\n    );\n}\n","import { mkdir, rm, symlink, readFile, writeFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { execSync } from 'child_process';\nimport { SKILLS_DIR, SKILL_FILENAME } from './constants.js';\nimport { InstallError } from './errors.js';\nimport { getSkillEntry } from './registry.js';\nimport { parseSkillFile } from './parser.js';\nimport { runSafeguards } from './safeguards.js';\nimport { markInstalled, markUninstalled } from './local-store.js';\nimport type { InstalledSkill } from './types.js';\n\nexport async function installFromRegistry(\n  name: string,\n  version?: string,\n): Promise<InstalledSkill> {\n  const entry = await getSkillEntry(name);\n  if (!entry.repository) {\n    throw new InstallError(`Skill \"${name}\" has no repository URL`);\n  }\n  return installFromGithub(entry.repository, name);\n}\n\nexport async function installFromGithub(\n  repoUrl: string,\n  nameOverride?: string,\n): Promise<InstalledSkill> {\n  const name = nameOverride ?? repoUrl.split('/').pop()?.replace(/\\.git$/, '') ?? 'unknown';\n  const installPath = join(SKILLS_DIR, name);\n\n  if (existsSync(installPath)) {\n    await rm(installPath, { recursive: true });\n  }\n  await mkdir(installPath, { recursive: true });\n\n  try {\n    execSync(`git clone --depth 1 \"${repoUrl}\" \"${installPath}\"`, {\n      stdio: 'pipe',\n      timeout: 30000,\n    });\n  } catch {\n    throw new InstallError(`Failed to clone ${repoUrl}`);\n  }\n\n  // Validate installed skill\n  const skillFile = join(installPath, SKILL_FILENAME);\n  if (!existsSync(skillFile)) {\n    await rm(installPath, { recursive: true });\n    throw new InstallError(`No ${SKILL_FILENAME} found in ${repoUrl}`);\n  }\n\n  const skill = await parseSkillFile(skillFile);\n  const safeguards = await runSafeguards(skill, installPath);\n  if (!safeguards.passed) {\n    await rm(installPath, { recursive: true });\n    const errors = safeguards.checks\n      .filter((c) => !c.passed)\n      .map((c) => c.message);\n    throw new InstallError(`Skill failed safety checks: ${errors.join('; ')}`);\n  }\n\n  const installed: InstalledSkill = {\n    name: skill.metadata.name,\n    version: skill.metadata.version,\n    installedAt: new Date().toISOString(),\n    path: installPath,\n    source: 'github',\n  };\n  await markInstalled(installed);\n  return installed;\n}\n\nexport async function installFromLocal(dirPath: string): Promise<InstalledSkill> {\n  const skillFile = join(dirPath, SKILL_FILENAME);\n  if (!existsSync(skillFile)) {\n    throw new InstallError(`No ${SKILL_FILENAME} found in ${dirPath}`);\n  }\n\n  const skill = await parseSkillFile(skillFile);\n  const safeguards = await runSafeguards(skill, dirPath);\n  if (!safeguards.passed) {\n    const errors = safeguards.checks\n      .filter((c) => !c.passed)\n      .map((c) => c.message);\n    throw new InstallError(`Skill failed safety checks: ${errors.join('; ')}`);\n  }\n\n  const installPath = join(SKILLS_DIR, skill.metadata.name);\n  if (existsSync(installPath)) {\n    await rm(installPath, { recursive: true });\n  }\n\n  // Copy the directory\n  execSync(`cp -r \"${dirPath}\" \"${installPath}\"`, { stdio: 'pipe' });\n\n  const installed: InstalledSkill = {\n    name: skill.metadata.name,\n    version: skill.metadata.version,\n    installedAt: new Date().toISOString(),\n    path: installPath,\n    source: 'local',\n  };\n  await markInstalled(installed);\n  return installed;\n}\n\nexport async function uninstall(name: string): Promise<void> {\n  const installPath = join(SKILLS_DIR, name);\n  if (existsSync(installPath)) {\n    await rm(installPath, { recursive: true });\n  }\n  await markUninstalled(name);\n}\n\nexport async function linkToClaudeSkills(\n  skill: InstalledSkill,\n  projectDir = process.cwd(),\n): Promise<string> {\n  const claudeSkillsDir = join(projectDir, '.claude', 'skills');\n  await mkdir(claudeSkillsDir, { recursive: true });\n\n  const linkPath = join(claudeSkillsDir, skill.name);\n  if (existsSync(linkPath)) {\n    await rm(linkPath, { recursive: true });\n  }\n  await symlink(skill.path, linkPath, 'dir');\n  return linkPath;\n}\n","export class SkillliError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'SkillliError';\n  }\n}\n\nexport class SkillValidationError extends SkillliError {\n  public details: string[];\n\n  constructor(message: string, details: string[] = []) {\n    super(message);\n    this.name = 'SkillValidationError';\n    this.details = details;\n  }\n}\n\nexport class SkillNotFoundError extends SkillliError {\n  constructor(skillName: string) {\n    super(`Skill not found: ${skillName}`);\n    this.name = 'SkillNotFoundError';\n  }\n}\n\nexport class RegistryError extends SkillliError {\n  constructor(message: string) {\n    super(message);\n    this.name = 'RegistryError';\n  }\n}\n\nexport class SafeguardError extends SkillliError {\n  constructor(message: string) {\n    super(message);\n    this.name = 'SafeguardError';\n  }\n}\n\nexport class InstallError extends SkillliError {\n  constructor(message: string) {\n    super(message);\n    this.name = 'InstallError';\n  }\n}\n","import { DEFAULT_REGISTRY_URL } from './constants.js';\nimport { RegistryError, SkillNotFoundError } from './errors.js';\nimport { getConfig, saveLocalIndex, getLocalIndex } from './local-store.js';\nimport type { LocalIndex, RegistryEntry } from './types.js';\n\nexport async function fetchIndex(registryUrl?: string): Promise<LocalIndex> {\n  const config = await getConfig();\n  const url = registryUrl ?? config.registryUrl ?? DEFAULT_REGISTRY_URL;\n\n  try {\n    const res = await fetch(url);\n    if (!res.ok) {\n      throw new RegistryError(`Failed to fetch registry: ${res.status} ${res.statusText}`);\n    }\n    const index = (await res.json()) as LocalIndex;\n    index.lastUpdated = new Date().toISOString();\n    await saveLocalIndex(index);\n    return index;\n  } catch (error) {\n    if (error instanceof RegistryError) throw error;\n    // Fallback to local index if network fails\n    const localIndex = await getLocalIndex();\n    if (Object.keys(localIndex.skills).length > 0) {\n      return localIndex;\n    }\n    throw new RegistryError(`Cannot reach registry at ${url}: ${error}`);\n  }\n}\n\nexport async function getSkillEntry(name: string): Promise<RegistryEntry> {\n  const index = await getLocalIndex();\n  const entry = index.skills[name];\n  if (!entry) {\n    throw new SkillNotFoundError(name);\n  }\n  return entry;\n}\n\nexport async function syncIndex(): Promise<LocalIndex> {\n  return fetchIndex();\n}\n","import { readFile } from 'fs/promises';\nimport matter from 'gray-matter';\nimport { SkillMetadataSchema, type RawSkillMetadata } from './schema.js';\nimport { SkillValidationError } from './errors.js';\nimport type { SkillMetadata, ParsedSkill } from './types.js';\n\nfunction normalizeMetadata(raw: RawSkillMetadata): SkillMetadata {\n  return {\n    name: raw.name,\n    version: raw.version,\n    description: raw.description,\n    author: raw.author,\n    license: raw.license,\n    tags: raw.tags,\n    category: raw.category,\n    repository: raw.repository,\n    homepage: raw.homepage,\n    minSkillliVersion: raw['min-skillli-version'],\n    trustLevel: raw['trust-level'],\n    checksum: raw.checksum,\n    disableModelInvocation: raw['disable-model-invocation'],\n    userInvocable: raw['user-invocable'],\n  };\n}\n\nexport function validateMetadata(data: unknown): SkillMetadata {\n  const result = SkillMetadataSchema.safeParse(data);\n  if (!result.success) {\n    const details = result.error.issues.map(\n      (issue) => `${issue.path.join('.')}: ${issue.message}`,\n    );\n    throw new SkillValidationError('Invalid skill metadata', details);\n  }\n  return normalizeMetadata(result.data);\n}\n\nexport function parseSkillContent(content: string, filePath = '<inline>'): ParsedSkill {\n  const { data, content: body, matter: rawFrontmatter } = matter(content);\n  const metadata = validateMetadata(data);\n  return {\n    metadata,\n    content: body.trim(),\n    rawFrontmatter: rawFrontmatter || '',\n    filePath,\n  };\n}\n\nexport async function parseSkillFile(filePath: string): Promise<ParsedSkill> {\n  const content = await readFile(filePath, 'utf-8');\n  return parseSkillContent(content, filePath);\n}\n\nexport function extractManifest(skill: ParsedSkill): Record<string, unknown> {\n  const { metadata } = skill;\n  return {\n    name: metadata.name,\n    version: metadata.version,\n    description: metadata.description,\n    author: metadata.author,\n    license: metadata.license,\n    tags: metadata.tags,\n    category: metadata.category,\n    repository: metadata.repository,\n    trust_level: metadata.trustLevel,\n    checksum: metadata.checksum,\n    created_at: new Date().toISOString(),\n    updated_at: new Date().toISOString(),\n  };\n}\n","import { z } from 'zod';\n\nexport const SkillCategorySchema = z.enum([\n  'development',\n  'creative',\n  'enterprise',\n  'data',\n  'devops',\n  'other',\n]);\n\nexport const TrustLevelSchema = z.enum(['community', 'verified', 'official']);\n\nexport const SkillMetadataSchema = z.object({\n  name: z\n    .string()\n    .min(1)\n    .max(100)\n    .regex(/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/, 'Must be lowercase alphanumeric with hyphens, not starting/ending with hyphen'),\n  version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/, 'Must be valid semver (e.g. 1.0.0)'),\n  description: z.string().min(10).max(500),\n  author: z.string().min(1),\n  license: z.string().min(1),\n  tags: z.array(z.string().min(1).max(50)).min(1).max(20),\n  category: SkillCategorySchema,\n  repository: z.string().url().optional(),\n  homepage: z.string().url().optional(),\n  'min-skillli-version': z.string().optional(),\n  'trust-level': TrustLevelSchema.default('community'),\n  checksum: z.string().optional(),\n  'disable-model-invocation': z.boolean().default(false),\n  'user-invocable': z.boolean().default(true),\n});\n\nexport type RawSkillMetadata = z.infer<typeof SkillMetadataSchema>;\n","import { readFile, stat } from 'fs/promises';\nimport { join } from 'path';\nimport { existsSync, readdirSync } from 'fs';\nimport { MAX_SKILL_SIZE_BYTES, MAX_SKILL_MD_LINES } from './constants.js';\nimport type { ParsedSkill, SafeguardResult, SafeguardCheck, RegistryEntry } from './types.js';\n\nconst PROHIBITED_PATTERNS = [\n  { pattern: /\\beval\\s*\\(/, label: 'eval()' },\n  { pattern: /\\bexec\\s*\\(/, label: 'exec()' },\n  { pattern: /\\bexecSync\\s*\\(/, label: 'execSync()' },\n  { pattern: /rm\\s+-rf\\s+\\//, label: 'rm -rf /' },\n  { pattern: /\\bchild_process\\b/, label: 'child_process' },\n  { pattern: /\\bProcess\\.kill\\b/i, label: 'Process.kill' },\n  { pattern: /password\\s*[:=]\\s*['\"][^'\"]+['\"]/, label: 'hardcoded password' },\n  { pattern: /api[_-]?key\\s*[:=]\\s*['\"][^'\"]+['\"]/, label: 'hardcoded API key' },\n  { pattern: /[A-Za-z0-9+/]{100,}={0,2}/, label: 'large base64 blob' },\n];\n\nconst ALLOWED_SCRIPT_EXTENSIONS = ['.sh', '.py', '.js', '.ts'];\n\nexport function checkSchema(skill: ParsedSkill): SafeguardCheck {\n  // If we got a ParsedSkill, it already passed schema validation\n  return {\n    name: 'schema-validation',\n    passed: true,\n    severity: 'info',\n    message: 'SKILL.md metadata is valid',\n  };\n}\n\nexport function checkLineCount(content: string): SafeguardCheck {\n  const lines = content.split('\\n').length;\n  const passed = lines <= MAX_SKILL_MD_LINES;\n  return {\n    name: 'line-count',\n    passed,\n    severity: passed ? 'info' : 'warning',\n    message: passed\n      ? `SKILL.md has ${lines} lines (max ${MAX_SKILL_MD_LINES})`\n      : `SKILL.md has ${lines} lines, exceeds max of ${MAX_SKILL_MD_LINES}`,\n  };\n}\n\nexport function checkProhibitedPatterns(content: string): SafeguardCheck {\n  const found: string[] = [];\n  for (const { pattern, label } of PROHIBITED_PATTERNS) {\n    if (pattern.test(content)) {\n      found.push(label);\n    }\n  }\n  const passed = found.length === 0;\n  return {\n    name: 'prohibited-patterns',\n    passed,\n    severity: passed ? 'info' : 'error',\n    message: passed\n      ? 'No prohibited patterns detected'\n      : `Prohibited patterns found: ${found.join(', ')}`,\n  };\n}\n\nexport function checkScriptSafety(skillDir: string): SafeguardCheck {\n  const scriptsDir = join(skillDir, 'scripts');\n  if (!existsSync(scriptsDir)) {\n    return {\n      name: 'script-safety',\n      passed: true,\n      severity: 'info',\n      message: 'No scripts directory found',\n    };\n  }\n\n  const badFiles: string[] = [];\n  const files = readdirSync(scriptsDir, { recursive: true }) as string[];\n  for (const file of files) {\n    const ext = '.' + file.split('.').pop();\n    if (!ALLOWED_SCRIPT_EXTENSIONS.includes(ext)) {\n      badFiles.push(file);\n    }\n  }\n\n  const passed = badFiles.length === 0;\n  return {\n    name: 'script-safety',\n    passed,\n    severity: passed ? 'info' : 'error',\n    message: passed\n      ? 'All scripts use allowed extensions'\n      : `Disallowed script types: ${badFiles.join(', ')}`,\n  };\n}\n\nexport async function checkFileSize(skillDir: string): Promise<SafeguardCheck> {\n  let totalSize = 0;\n  const entries = readdirSync(skillDir, { recursive: true, withFileTypes: true });\n  for (const entry of entries) {\n    if (entry.isFile()) {\n      const fullPath = join(entry.parentPath ?? skillDir, entry.name);\n      const s = await stat(fullPath);\n      totalSize += s.size;\n    }\n  }\n  const passed = totalSize <= MAX_SKILL_SIZE_BYTES;\n  return {\n    name: 'file-size',\n    passed,\n    severity: passed ? 'info' : 'warning',\n    message: passed\n      ? `Total size: ${(totalSize / 1024).toFixed(1)}KB (max ${MAX_SKILL_SIZE_BYTES / 1024 / 1024}MB)`\n      : `Total size ${(totalSize / 1024 / 1024).toFixed(1)}MB exceeds max of ${MAX_SKILL_SIZE_BYTES / 1024 / 1024}MB`,\n  };\n}\n\nexport async function runSafeguards(\n  skill: ParsedSkill,\n  skillDir?: string,\n): Promise<SafeguardResult> {\n  const checks: SafeguardCheck[] = [];\n\n  checks.push(checkSchema(skill));\n  checks.push(checkLineCount(skill.content));\n  checks.push(checkProhibitedPatterns(skill.content + skill.rawFrontmatter));\n\n  if (skillDir) {\n    checks.push(checkScriptSafety(skillDir));\n    checks.push(await checkFileSize(skillDir));\n  }\n\n  const passed = checks.every((c) => c.passed || c.severity !== 'error');\n  const score = computeTrustScore(skill);\n\n  return { passed, score, checks };\n}\n\nexport function computeTrustScore(\n  skill: ParsedSkill,\n  registryEntry?: RegistryEntry,\n): number {\n  let score = 0;\n\n  // Has repository (+10)\n  if (skill.metadata.repository) score += 10;\n\n  // Has license (+10)\n  if (skill.metadata.license) score += 10;\n\n  // Verified/official author (+20)\n  if (skill.metadata.trustLevel === 'verified') score += 15;\n  if (skill.metadata.trustLevel === 'official') score += 20;\n\n  // Rating above 3.5 (+15)\n  if (registryEntry && registryEntry.rating.average >= 3.5) score += 15;\n\n  // Downloads bonus (+10)\n  if (registryEntry && registryEntry.downloads > 100) score += 5;\n  if (registryEntry && registryEntry.downloads > 1000) score += 5;\n\n  // Passes basic checks (+35)\n  const patternCheck = checkProhibitedPatterns(skill.content);\n  const lineCheck = checkLineCount(skill.content);\n  if (patternCheck.passed) score += 20;\n  if (lineCheck.passed) score += 15;\n\n  return Math.min(score, 100);\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { uninstall } from '../../core/installer.js';\n\nexport function registerUninstallCommand(program: Command): void {\n  program\n    .command('uninstall <skill>')\n    .description('Uninstall a skill')\n    .action(async (skill: string) => {\n      const spinner = ora(`Uninstalling ${skill}...`).start();\n      try {\n        await uninstall(skill);\n        spinner.succeed(`Uninstalled ${chalk.cyan(skill)}`);\n      } catch (error) {\n        spinner.fail('Uninstall failed');\n        console.error(chalk.red(String(error)));\n        process.exit(1);\n      }\n    });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getSkillEntry } from '../../core/registry.js';\nimport { displaySkillInfo, displayTrustScore } from '../utils/display.js';\n\nexport function registerInfoCommand(program: Command): void {\n  program\n    .command('info <skill>')\n    .description('Display detailed information about a skill')\n    .action(async (skill: string) => {\n      const spinner = ora('Fetching skill info...').start();\n      try {\n        const entry = await getSkillEntry(skill);\n        spinner.stop();\n        displaySkillInfo(entry);\n      } catch (error) {\n        spinner.fail('Failed to get skill info');\n        console.error(chalk.red(String(error)));\n        process.exit(1);\n      }\n    });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { getInstalledSkills } from '../../core/local-store.js';\nimport { displayInstalledSkills } from '../utils/display.js';\n\nexport function registerListCommand(program: Command): void {\n  program\n    .command('list')\n    .description('List installed skills')\n    .option('--json', 'Output as JSON')\n    .action(async (options: { json: boolean }) => {\n      try {\n        const skills = await getInstalledSkills();\n        if (options.json) {\n          console.log(JSON.stringify(skills, null, 2));\n        } else {\n          displayInstalledSkills(skills);\n        }\n      } catch (error) {\n        console.error(chalk.red(String(error)));\n        process.exit(1);\n      }\n    });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { submitRating, formatRating } from '../../core/ratings.js';\nimport { getConfig } from '../../core/local-store.js';\n\nexport function registerRateCommand(program: Command): void {\n  program\n    .command('rate <skill> <rating>')\n    .description('Rate a skill (1-5 stars)')\n    .option('-m, --comment <text>', 'Add a review comment')\n    .action(async (skill: string, ratingStr: string, options: { comment?: string }) => {\n      try {\n        const rating = parseInt(ratingStr, 10);\n        if (isNaN(rating) || rating < 1 || rating > 5) {\n          console.error(chalk.red('Rating must be 1-5'));\n          process.exit(1);\n        }\n\n        const config = await getConfig();\n        const userId = config.userId ?? 'anonymous';\n        const updated = await submitRating(skill, rating, userId, options.comment);\n        console.log(chalk.green(`\\nRated ${chalk.cyan(skill)}: ${'★'.repeat(rating)}${'☆'.repeat(5 - rating)}`));\n        console.log(`  Updated: ${formatRating(updated)}`);\n      } catch (error) {\n        console.error(chalk.red(String(error)));\n        process.exit(1);\n      }\n    });\n}\n","import { getLocalIndex, saveLocalIndex } from './local-store.js';\nimport { SkillNotFoundError } from './errors.js';\nimport type { RatingInfo, RatingSubmission } from './types.js';\n\nexport async function getRatings(name: string): Promise<RatingInfo> {\n  const index = await getLocalIndex();\n  const entry = index.skills[name];\n  if (!entry) {\n    throw new SkillNotFoundError(name);\n  }\n  return entry.rating;\n}\n\nexport async function submitRating(\n  name: string,\n  rating: number,\n  userId: string,\n  comment?: string,\n): Promise<RatingInfo> {\n  const index = await getLocalIndex();\n  const entry = index.skills[name];\n  if (!entry) {\n    throw new SkillNotFoundError(name);\n  }\n\n  // Update the rating locally (in a real system this would go to the registry)\n  const current = entry.rating;\n  const newCount = current.count + 1;\n  const newAverage = (current.average * current.count + rating) / newCount;\n\n  // Update distribution\n  const dist = [...current.distribution] as [number, number, number, number, number];\n  dist[rating - 1] += 1;\n\n  entry.rating = {\n    average: Math.round(newAverage * 10) / 10,\n    count: newCount,\n    distribution: dist,\n  };\n\n  await saveLocalIndex(index);\n  return entry.rating;\n}\n\nexport function formatRating(rating: RatingInfo): string {\n  const filled = Math.round(rating.average);\n  const empty = 5 - filled;\n  const stars = '\\u2605'.repeat(filled) + '\\u2606'.repeat(empty);\n  return `${stars} ${rating.average.toFixed(1)} (${rating.count} ratings)`;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { syncIndex } from '../../core/registry.js';\n\nexport function registerUpdateCommand(program: Command): void {\n  program\n    .command('update')\n    .description('Update the local skill index from the registry')\n    .action(async () => {\n      const spinner = ora('Syncing registry index...').start();\n      try {\n        const index = await syncIndex();\n        const count = Object.keys(index.skills).length;\n        spinner.succeed(`Index updated: ${count} skills available`);\n      } catch (error) {\n        spinner.fail('Failed to update index');\n        console.error(chalk.red(String(error)));\n        process.exit(1);\n      }\n    });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { packageSkill } from '../../core/publisher.js';\nimport { displaySafeguardReport } from '../utils/display.js';\nimport { runSafeguards } from '../../core/safeguards.js';\nimport { parseSkillFile } from '../../core/parser.js';\nimport { join } from 'path';\nimport { SKILL_FILENAME } from '../../core/constants.js';\n\nexport function registerPublishCommand(program: Command): void {\n  program\n    .command('publish [path]')\n    .description('Publish a skill to the registry')\n    .option('--dry-run', 'Validate without publishing')\n    .action(async (path: string | undefined, options: { dryRun: boolean }) => {\n      const skillDir = path ?? process.cwd();\n      const spinner = ora('Packaging skill...').start();\n\n      try {\n        const { skill, manifest, checksum } = await packageSkill(skillDir);\n        spinner.succeed(`Packaged ${chalk.cyan(skill.metadata.name)} v${skill.metadata.version}`);\n\n        // Show safeguard report\n        const safeguards = await runSafeguards(skill, skillDir);\n        displaySafeguardReport(safeguards);\n\n        console.log(chalk.bold('Manifest:'));\n        console.log(JSON.stringify(manifest, null, 2));\n\n        if (options.dryRun) {\n          console.log(chalk.yellow('\\n  --dry-run: Skill was NOT published.'));\n          console.log(chalk.gray('  Remove --dry-run to publish for real.\\n'));\n          return;\n        }\n\n        // In v1, publishing instructions (PR-based on GitHub)\n        console.log(chalk.green('\\n  Skill validated and ready to publish!'));\n        console.log(chalk.gray('  To publish, submit a PR to the skillli registry:'));\n        console.log(chalk.gray('  https://github.com/skillli/registry\\n'));\n        console.log(chalk.gray(`  Checksum: sha256:${checksum}`));\n      } catch (error) {\n        spinner.fail('Publish failed');\n        console.error(chalk.red(String(error)));\n        process.exit(1);\n      }\n    });\n}\n","import { readFile } from 'fs/promises';\nimport { join } from 'path';\nimport { createHash } from 'crypto';\nimport { existsSync, readdirSync, statSync } from 'fs';\nimport { SKILL_FILENAME, MANIFEST_FILENAME } from './constants.js';\nimport { parseSkillFile, extractManifest } from './parser.js';\nimport { runSafeguards } from './safeguards.js';\nimport { SkillValidationError } from './errors.js';\nimport type { ParsedSkill } from './types.js';\n\nexport async function packageSkill(\n  skillDir: string,\n): Promise<{ skill: ParsedSkill; manifest: Record<string, unknown>; checksum: string }> {\n  const skillFile = join(skillDir, SKILL_FILENAME);\n  if (!existsSync(skillFile)) {\n    throw new SkillValidationError(`No ${SKILL_FILENAME} found in ${skillDir}`);\n  }\n\n  const skill = await parseSkillFile(skillFile);\n  const safeguards = await runSafeguards(skill, skillDir);\n\n  if (!safeguards.passed) {\n    const errors = safeguards.checks\n      .filter((c) => !c.passed)\n      .map((c) => `[${c.severity}] ${c.message}`);\n    throw new SkillValidationError('Skill failed safety checks', errors);\n  }\n\n  // Compute checksum of all files\n  const checksum = await computeDirectoryChecksum(skillDir);\n\n  const manifest = extractManifest(skill);\n  manifest.checksum = `sha256:${checksum}`;\n  manifest.files = listFiles(skillDir);\n  manifest.size_bytes = computeDirectorySize(skillDir);\n\n  return { skill, manifest, checksum };\n}\n\nasync function computeDirectoryChecksum(dir: string): Promise<string> {\n  const hash = createHash('sha256');\n  const files = listFiles(dir).sort();\n\n  for (const file of files) {\n    const content = await readFile(join(dir, file));\n    hash.update(file);\n    hash.update(content);\n  }\n\n  return hash.digest('hex');\n}\n\nfunction listFiles(dir: string, prefix = ''): string[] {\n  const files: string[] = [];\n  const entries = readdirSync(dir, { withFileTypes: true });\n\n  for (const entry of entries) {\n    if (entry.name === '.git' || entry.name === 'node_modules') continue;\n    const relative = prefix ? `${prefix}/${entry.name}` : entry.name;\n    if (entry.isDirectory()) {\n      files.push(...listFiles(join(dir, entry.name), relative));\n    } else {\n      files.push(relative);\n    }\n  }\n\n  return files;\n}\n\nfunction computeDirectorySize(dir: string): number {\n  let size = 0;\n  const entries = readdirSync(dir, { withFileTypes: true });\n\n  for (const entry of entries) {\n    if (entry.name === '.git' || entry.name === 'node_modules') continue;\n    const fullPath = join(dir, entry.name);\n    if (entry.isDirectory()) {\n      size += computeDirectorySize(fullPath);\n    } else {\n      size += statSync(fullPath).size;\n    }\n  }\n\n  return size;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { trawl } from '../../trawler/index.js';\n\nexport function registerTrawlCommand(program: Command): void {\n  program\n    .command('trawl <query>')\n    .description('Agentic search across multiple sources for skills')\n    .option(\n      '-s, --sources <sources...>',\n      'Sources to search (registry, github, npm)',\n      ['registry', 'github'],\n    )\n    .option('-n, --max-results <n>', 'Maximum results', parseInt)\n    .action(\n      async (\n        query: string,\n        options: { sources: string[]; maxResults?: number },\n      ) => {\n        const spinner = ora('Trawling for skills...').start();\n        try {\n          const results = await trawl(query, {\n            sources: options.sources as ('registry' | 'github' | 'npm')[],\n            maxResults: options.maxResults,\n          });\n          spinner.stop();\n\n          if (results.length === 0) {\n            console.log(chalk.yellow('No skills found across any source.'));\n            return;\n          }\n\n          console.log(chalk.bold(`\\nTrawled ${results.length} result(s):\\n`));\n          for (const result of results) {\n            const confidence = Math.round(result.confidence * 100);\n            const confColor = confidence >= 70 ? chalk.green : confidence >= 40 ? chalk.yellow : chalk.gray;\n            console.log(\n              `  ${chalk.cyan.bold(result.skill.name ?? 'unknown')} ${chalk.gray(`[${result.source}]`)} ${confColor(`${confidence}% match`)}`,\n            );\n            if (result.skill.description) {\n              console.log(`    ${result.skill.description}`);\n            }\n            console.log(`    ${chalk.gray(result.url)}`);\n            console.log();\n          }\n        } catch (error) {\n          spinner.fail('Trawl failed');\n          console.error(chalk.red(String(error)));\n          process.exit(1);\n        }\n      },\n    );\n}\n","import type { TrawlResult, RegistryEntry } from '../core/types.js';\nimport { getLocalIndex } from '../core/local-store.js';\n\nexport async function searchRegistry(query: string): Promise<TrawlResult[]> {\n  const index = await getLocalIndex();\n  const tokens = query.toLowerCase().split(/\\s+/);\n  const results: TrawlResult[] = [];\n\n  for (const entry of Object.values(index.skills)) {\n    const text = `${entry.name} ${entry.description} ${entry.tags.join(' ')}`.toLowerCase();\n    const matchCount = tokens.filter((t) => text.includes(t)).length;\n    if (matchCount === 0) continue;\n\n    results.push({\n      source: 'registry',\n      skill: entry,\n      confidence: Math.min(matchCount / tokens.length, 1),\n      url: entry.repository || `skillli://registry/${entry.name}`,\n    });\n  }\n\n  return results;\n}\n\nexport async function searchGithub(query: string): Promise<TrawlResult[]> {\n  const results: TrawlResult[] = [];\n  const searchQuery = encodeURIComponent(`${query} SKILL.md in:path`);\n  const url = `https://api.github.com/search/repositories?q=${searchQuery}&per_page=10`;\n\n  try {\n    const res = await fetch(url, {\n      headers: { Accept: 'application/vnd.github.v3+json' },\n    });\n    if (!res.ok) return results;\n\n    const data = (await res.json()) as {\n      items: Array<{\n        full_name: string;\n        description: string;\n        html_url: string;\n        stargazers_count: number;\n        topics: string[];\n      }>;\n    };\n\n    for (const repo of data.items ?? []) {\n      const confidence = Math.min(\n        0.3 + (repo.stargazers_count > 10 ? 0.2 : 0) + (repo.stargazers_count > 100 ? 0.2 : 0),\n        0.9,\n      );\n\n      results.push({\n        source: 'github',\n        skill: {\n          name: repo.full_name.split('/').pop() ?? repo.full_name,\n          description: repo.description ?? '',\n          author: repo.full_name.split('/')[0],\n          repository: repo.html_url,\n          tags: repo.topics ?? [],\n        } as Partial<RegistryEntry>,\n        confidence,\n        url: repo.html_url,\n      });\n    }\n  } catch {\n    // GitHub API may be unavailable — silently return empty\n  }\n\n  return results;\n}\n\nexport async function searchNpm(query: string): Promise<TrawlResult[]> {\n  const results: TrawlResult[] = [];\n  const searchQuery = encodeURIComponent(`${query} skill agent claude`);\n  const url = `https://registry.npmjs.org/-/v1/search?text=${searchQuery}&size=10`;\n\n  try {\n    const res = await fetch(url);\n    if (!res.ok) return results;\n\n    const data = (await res.json()) as {\n      objects: Array<{\n        package: {\n          name: string;\n          description: string;\n          version: string;\n          links: { repository?: string; npm: string };\n          keywords?: string[];\n        };\n        score: { final: number };\n      }>;\n    };\n\n    for (const obj of data.objects ?? []) {\n      const pkg = obj.package;\n      results.push({\n        source: 'npm',\n        skill: {\n          name: pkg.name,\n          description: pkg.description ?? '',\n          version: pkg.version,\n          repository: pkg.links.repository ?? '',\n          tags: pkg.keywords ?? [],\n        } as Partial<RegistryEntry>,\n        confidence: Math.min(obj.score.final * 0.7, 0.85),\n        url: pkg.links.npm,\n      });\n    }\n  } catch {\n    // npm API may be unavailable — silently return empty\n  }\n\n  return results;\n}\n","import type { TrawlResult } from '../core/types.js';\n\nexport function deduplicateResults(results: TrawlResult[]): TrawlResult[] {\n  const seen = new Map<string, TrawlResult>();\n\n  for (const result of results) {\n    const key = result.skill.name?.toLowerCase() ?? result.url;\n    const existing = seen.get(key);\n    if (!existing || result.confidence > existing.confidence) {\n      seen.set(key, result);\n    }\n  }\n\n  return Array.from(seen.values());\n}\n\nexport function rankResults(results: TrawlResult[], query: string): TrawlResult[] {\n  const tokens = query.toLowerCase().split(/\\s+/);\n\n  return results\n    .map((result) => {\n      let bonus = 0;\n\n      // Source trust bonus\n      if (result.source === 'registry') bonus += 0.2;\n      else if (result.source === 'github') bonus += 0.05;\n\n      // Name relevance bonus\n      const name = (result.skill.name ?? '').toLowerCase();\n      for (const token of tokens) {\n        if (name.includes(token)) bonus += 0.15;\n      }\n\n      // Tag match bonus\n      const tags = (result.skill.tags ?? []).map((t) => t.toLowerCase());\n      for (const token of tokens) {\n        if (tags.includes(token)) bonus += 0.1;\n      }\n\n      return {\n        ...result,\n        confidence: Math.min(result.confidence + bonus, 1),\n      };\n    })\n    .sort((a, b) => b.confidence - a.confidence);\n}\n","import type { TrawlResult, TrawlOptions } from '../core/types.js';\nimport { searchRegistry, searchGithub, searchNpm } from './strategies.js';\nimport { deduplicateResults, rankResults } from './ranker.js';\n\nexport async function trawl(\n  query: string,\n  options: TrawlOptions = {},\n): Promise<TrawlResult[]> {\n  const sources = options.sources ?? ['registry', 'github'];\n  const maxResults = options.maxResults ?? 10;\n\n  // Fan out searches in parallel\n  const searches: Promise<TrawlResult[]>[] = [];\n\n  if (sources.includes('registry')) {\n    searches.push(searchRegistry(query));\n  }\n  if (sources.includes('github')) {\n    searches.push(searchGithub(query));\n  }\n  if (sources.includes('npm')) {\n    searches.push(searchNpm(query));\n  }\n\n  const allResults = (await Promise.all(searches)).flat();\n\n  // Deduplicate and rank\n  const deduplicated = deduplicateResults(allResults);\n  const ranked = rankResults(deduplicated, query);\n\n  return ranked.slice(0, maxResults);\n}\n"],"mappings":"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","names":["import_path","inquirer","program","chalk","import_chalk","import_promises","import_fs","import_chalk","chalk","program","ora","chalk","import_chalk","import_ora","import_promises","import_fs","import_path","import_promises","matter","import_promises","import_path","import_fs","program","ora","chalk","import_chalk","import_ora","program","ora","chalk","import_chalk","import_ora","program","ora","chalk","import_chalk","program","chalk","import_chalk","stars","program","chalk","import_chalk","import_ora","program","ora","chalk","import_chalk","import_ora","import_promises","import_path","import_fs","program","ora","chalk","import_chalk","import_ora","program","ora","chalk"]}