skilld 0.13.1 → 0.13.3

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.
@@ -30,14 +30,14 @@ const models$2 = {
30
30
  },
31
31
  sonnet: {
32
32
  model: "sonnet",
33
- name: "Sonnet 4.5",
34
- hint: "Best for everyday tasks",
35
- recommended: true
33
+ name: "Sonnet 4.6",
34
+ hint: "Best for everyday tasks"
36
35
  },
37
36
  haiku: {
38
37
  model: "haiku",
39
38
  name: "Haiku 4.5",
40
- hint: "Fastest for quick answers"
39
+ hint: "Fastest for quick answers",
40
+ recommended: true
41
41
  }
42
42
  };
43
43
  function buildArgs$2(model, skillDir, symlinkDirs) {
@@ -58,7 +58,8 @@ function buildArgs$2(model, skillDir, symlinkDirs) {
58
58
  `Grep(${d}/**)`
59
59
  ]),
60
60
  `Write(${skilldDir}/**)`,
61
- `Bash(*skilld search*)`
61
+ `Bash(*skilld search*)`,
62
+ `Bash(*skilld validate*)`
62
63
  ].join(" "),
63
64
  "--disallowedTools",
64
65
  "WebSearch WebFetch Task",
@@ -143,18 +144,14 @@ const models$1 = {
143
144
  recommended: true
144
145
  }
145
146
  };
146
- function buildArgs$1(model, skillDir, symlinkDirs) {
147
+ function buildArgs$1(model, _skillDir, _symlinkDirs) {
147
148
  return [
148
149
  "exec",
149
150
  "--json",
151
+ "--ephemeral",
150
152
  "--model",
151
153
  model,
152
154
  "--full-auto",
153
- "--writeable-dirs",
154
- join(skillDir, ".skilld"),
155
- "--add-dir",
156
- skillDir,
157
- ...symlinkDirs.flatMap((d) => ["--add-dir", d]),
158
155
  "-"
159
156
  ];
160
157
  }
@@ -173,6 +170,10 @@ function parseLine$1(line) {
173
170
  writeContent
174
171
  };
175
172
  }
173
+ if (item.type === "file_change" && item.changes?.length) return {
174
+ toolName: "Write",
175
+ toolHint: item.changes.map((c) => c.path).join(", ")
176
+ };
176
177
  }
177
178
  if (obj.type === "item.started" && obj.item?.type === "command_execution") return {
178
179
  toolName: "Bash",
@@ -218,7 +219,7 @@ function buildArgs(model, skillDir, symlinkDirs) {
218
219
  "-m",
219
220
  model,
220
221
  "--allowed-tools",
221
- "read_file,write_file,glob_tool,list_directory,search_file_content",
222
+ "read_file,write_file,glob_tool,list_directory,search_file_content,run_shell_command(npx -y skilld),run_shell_command(grep),run_shell_command(head)",
222
223
  "--include-directories",
223
224
  skillDir,
224
225
  ...symlinkDirs.flatMap((d) => ["--include-directories", d])
@@ -266,7 +267,8 @@ const TOOL_VERBS = {
266
267
  glob_tool: "Searching",
267
268
  write_file: "Writing",
268
269
  list_directory: "Listing",
269
- search_file_content: "Searching"
270
+ search_file_content: "Searching",
271
+ run_shell_command: "Running"
270
272
  };
271
273
  function createToolProgress(log) {
272
274
  let lastMsg = "";
@@ -296,9 +298,10 @@ function createToolProgress(log) {
296
298
  const hint = hints[i] ?? hints[0] ?? "";
297
299
  const verb = TOOL_VERBS[rawName] ?? rawName;
298
300
  const prefix = section ? `\x1B[90m[${section}]\x1B[0m ` : "";
299
- if (rawName === "Bash" && hint) {
301
+ if ((rawName === "Bash" || rawName === "run_shell_command") && hint) {
300
302
  const searchMatch = hint.match(/skilld search\s+"([^"]+)"/);
301
303
  if (searchMatch) emit(`${prefix}Searching \x1B[36m"${searchMatch[1]}"\x1B[0m`);
304
+ else if (hint.includes("skilld validate")) emit(`${prefix}Validating...`);
302
305
  else emit(`${prefix}Running ${hint.length > 50 ? `${hint.slice(0, 47)}...` : hint}`);
303
306
  } else emit(`${prefix}${verb} \x1B[90m${shortenPath(hint || "...")}\x1B[0m`);
304
307
  }
@@ -1 +1 @@
1
- {"version":3,"file":"detect-imports.mjs","names":["cli","agentId","models","buildArgs","parseLine","cli","agentId","models","buildArgs","parseLine","claude","gemini","codex","claude.buildArgs","gemini.buildArgs","codex.buildArgs","claude.parseLine","gemini.parseLine","codex.parseLine","agents","delay"],"sources":["../../src/agent/clis/claude.ts","../../src/agent/clis/codex.ts","../../src/agent/clis/gemini.ts","../../src/agent/clis/index.ts","../../src/agent/detect-presets.ts","../../src/agent/detect-imports.ts"],"sourcesContent":["/**\n * Claude Code CLI — token-level streaming via --include-partial-messages\n */\n\nimport type { CliModelEntry, ParsedEvent } from './types.ts'\nimport { join } from 'pathe'\n\nexport const cli = 'claude' as const\nexport const agentId = 'claude-code' as const\n\nexport const models: Record<string, CliModelEntry> = {\n opus: { model: 'opus', name: 'Opus 4.6', hint: 'Most capable for complex work' },\n sonnet: { model: 'sonnet', name: 'Sonnet 4.5', hint: 'Best for everyday tasks', recommended: true },\n haiku: { model: 'haiku', name: 'Haiku 4.5', hint: 'Fastest for quick answers' },\n}\n\nexport function buildArgs(model: string, skillDir: string, symlinkDirs: string[]): string[] {\n const skilldDir = join(skillDir, '.skilld')\n const readDirs = [skillDir, ...symlinkDirs]\n const allowedTools = [\n ...readDirs.flatMap(d => [`Read(${d}/**)`, `Glob(${d}/**)`, `Grep(${d}/**)`]),\n `Write(${skilldDir}/**)`,\n `Bash(*skilld search*)`,\n ].join(' ')\n return [\n '-p',\n '--model',\n model,\n '--output-format',\n 'stream-json',\n '--verbose',\n '--include-partial-messages',\n '--allowedTools',\n allowedTools,\n '--disallowedTools',\n 'WebSearch WebFetch Task',\n '--add-dir',\n skillDir,\n ...symlinkDirs.flatMap(d => ['--add-dir', d]),\n '--no-session-persistence',\n ]\n}\n\n/**\n * Parse claude stream-json events\n *\n * Event types:\n * - stream_event/content_block_delta/text_delta → token streaming\n * - stream_event/content_block_start/tool_use → tool invocation starting\n * - assistant message with tool_use content → tool name + input\n * - assistant message with text content → full text (non-streaming fallback)\n * - result → usage, cost, turns\n */\nexport function parseLine(line: string): ParsedEvent {\n try {\n const obj = JSON.parse(line)\n\n // Token-level streaming (--include-partial-messages)\n if (obj.type === 'stream_event') {\n const evt = obj.event\n if (!evt)\n return {}\n\n // Text delta — the main streaming path\n if (evt.type === 'content_block_delta' && evt.delta?.type === 'text_delta') {\n return { textDelta: evt.delta.text }\n }\n\n return {}\n }\n\n // Full assistant message (complete turn, after streaming)\n if (obj.type === 'assistant' && obj.message?.content) {\n const content = obj.message.content as any[]\n\n // Extract tool uses with inputs for progress hints\n const tools = content.filter((c: any) => c.type === 'tool_use')\n if (tools.length) {\n const names = tools.map((t: any) => t.name)\n // Extract useful hint from tool input (file path, query, etc)\n const hint = tools.map((t: any) => {\n const input = t.input || {}\n return input.file_path || input.path || input.pattern || input.query || input.command || ''\n }).filter(Boolean).join(', ')\n // Capture Write content as fallback if permission is denied\n const writeTool = tools.find((t: any) => t.name === 'Write' && t.input?.content)\n return { toolName: names.join(', '), toolHint: hint || undefined, writeContent: writeTool?.input?.content }\n }\n\n // Text content (fallback for non-partial mode)\n const text = content\n .filter((c: any) => c.type === 'text')\n .map((c: any) => c.text)\n .join('')\n if (text)\n return { fullText: text }\n }\n\n // Final result\n if (obj.type === 'result') {\n const u = obj.usage\n return {\n done: true,\n usage: u ? { input: u.input_tokens ?? u.inputTokens ?? 0, output: u.output_tokens ?? u.outputTokens ?? 0 } : undefined,\n cost: obj.total_cost_usd,\n turns: obj.num_turns,\n }\n }\n }\n catch {}\n return {}\n}\n","/**\n * OpenAI Codex CLI — exec subcommand with JSON output\n * Prompt passed via stdin with `-` sentinel\n *\n * Real event types observed:\n * - thread.started → session start (thread_id)\n * - turn.started / turn.completed → turn lifecycle + usage\n * - item.started → command_execution in progress\n * - item.completed → agent_message (text), reasoning, command_execution (result)\n * - error / turn.failed → errors\n */\n\nimport type { CliModelEntry, ParsedEvent } from './types.ts'\nimport { join } from 'pathe'\n\nexport const cli = 'codex' as const\nexport const agentId = 'codex' as const\n\nexport const models: Record<string, CliModelEntry> = {\n 'gpt-5.2-codex': { model: 'gpt-5.2-codex', name: 'GPT-5.2 Codex', hint: 'Frontier agentic coding model' },\n 'gpt-5.1-codex-max': { model: 'gpt-5.1-codex-max', name: 'GPT-5.1 Codex Max', hint: 'Codex-optimized flagship' },\n 'gpt-5.2': { model: 'gpt-5.2', name: 'GPT-5.2', hint: 'Latest frontier model' },\n 'gpt-5.1-codex-mini': { model: 'gpt-5.1-codex-mini', name: 'GPT-5.1 Codex Mini', hint: 'Optimized for codex, cheaper & faster', recommended: true },\n}\n\nexport function buildArgs(model: string, skillDir: string, symlinkDirs: string[]): string[] {\n const skilldDir = join(skillDir, '.skilld')\n return [\n 'exec',\n '--json',\n '--model',\n model,\n '--full-auto',\n '--writeable-dirs',\n skilldDir,\n '--add-dir',\n skillDir,\n ...symlinkDirs.flatMap(d => ['--add-dir', d]),\n '-',\n ]\n}\n\nexport function parseLine(line: string): ParsedEvent {\n try {\n const obj = JSON.parse(line)\n\n if (obj.type === 'item.completed' && obj.item) {\n const item = obj.item\n // Agent message — the main text output\n if (item.type === 'agent_message' && item.text)\n return { fullText: item.text }\n // Command execution completed — log as tool progress\n // If the command writes to a file (redirect or cat >), capture output as writeContent fallback\n if (item.type === 'command_execution' && item.aggregated_output) {\n const cmd = item.command || ''\n const writeContent = (/^cat\\s*>|>/.test(cmd)) ? item.aggregated_output : undefined\n return { toolName: 'Bash', toolHint: `(${item.aggregated_output.length} chars output)`, writeContent }\n }\n }\n\n // Command starting — show progress\n if (obj.type === 'item.started' && obj.item?.type === 'command_execution') {\n return { toolName: 'Bash', toolHint: obj.item.command }\n }\n\n // Turn completed — usage stats\n if (obj.type === 'turn.completed' && obj.usage) {\n return {\n done: true,\n usage: {\n input: obj.usage.input_tokens ?? 0,\n output: obj.usage.output_tokens ?? 0,\n },\n }\n }\n\n // Error events\n if (obj.type === 'turn.failed' || obj.type === 'error') {\n return { done: true }\n }\n }\n catch {}\n return {}\n}\n","/**\n * Gemini CLI — turn-level streaming via -o stream-json\n * Write scoping: relies on cwd being set to .skilld/ (no native --writeable-dirs)\n */\n\nimport type { CliModelEntry, ParsedEvent } from './types.ts'\n\nexport const cli = 'gemini' as const\nexport const agentId = 'gemini-cli' as const\n\nexport const models: Record<string, CliModelEntry> = {\n 'gemini-3-pro': { model: 'gemini-3-pro-preview', name: 'Gemini 3 Pro', hint: 'Most capable' },\n 'gemini-3-flash': { model: 'gemini-3-flash-preview', name: 'Gemini 3 Flash', hint: 'Balanced', recommended: true },\n}\n\nexport function buildArgs(model: string, skillDir: string, symlinkDirs: string[]): string[] {\n return [\n '-o',\n 'stream-json',\n '-m',\n model,\n '--allowed-tools',\n 'read_file,write_file,glob_tool,list_directory,search_file_content',\n '--include-directories',\n skillDir,\n ...symlinkDirs.flatMap(d => ['--include-directories', d]),\n ]\n}\n\n/** Parse gemini stream-json events — turn level (full message per event) */\nexport function parseLine(line: string): ParsedEvent {\n try {\n const obj = JSON.parse(line)\n\n // Text message (delta or full)\n if (obj.type === 'message' && obj.role === 'assistant' && obj.content) {\n return obj.delta ? { textDelta: obj.content } : { fullText: obj.content }\n }\n\n // Tool invocation\n if (obj.type === 'tool_use' || obj.type === 'tool_call') {\n const name = obj.tool_name || obj.name || obj.tool || 'tool'\n const params = obj.parameters || obj.args || obj.input || {}\n const hint = params.file_path || params.path || params.dir_path || params.pattern || params.query || params.command || ''\n // Capture write_file content as fallback (matches Claude's Write tool behavior)\n if (name === 'write_file' && params.content) {\n return { toolName: name, toolHint: hint || undefined, writeContent: params.content }\n }\n return { toolName: name, toolHint: hint || undefined }\n }\n\n // Final result\n if (obj.type === 'result') {\n const s = obj.stats\n return {\n done: true,\n usage: s ? { input: s.input_tokens ?? s.input ?? 0, output: s.output_tokens ?? s.output ?? 0 } : undefined,\n turns: s?.tool_calls,\n }\n }\n }\n catch {}\n return {}\n}\n","/**\n * CLI orchestrator — spawns per-CLI processes for skill generation\n * Each CLI (claude, gemini, codex) has its own buildArgs + parseLine in separate files\n */\n\nimport type { SkillSection } from '../prompts/index.ts'\nimport type { AgentType } from '../types.ts'\nimport type { CliModelConfig, CliName, OptimizeDocsOptions, OptimizeModel, OptimizeResult, ParsedEvent, SectionResult, StreamProgress, ValidationWarning } from './types.ts'\nimport { exec, spawn } from 'node:child_process'\nimport { createHash } from 'node:crypto'\nimport { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { setTimeout as delay } from 'node:timers/promises'\nimport { promisify } from 'node:util'\nimport { dirname, join } from 'pathe'\nimport { readCachedSection, writeSections } from '../../cache/index.ts'\nimport { sanitizeMarkdown } from '../../core/sanitize.ts'\nimport { detectInstalledAgents } from '../detect.ts'\nimport { buildAllSectionPrompts, getSectionValidator, SECTION_MERGE_ORDER, SECTION_OUTPUT_FILES } from '../prompts/index.ts'\nimport { agents } from '../registry.ts'\nimport * as claude from './claude.ts'\nimport * as codex from './codex.ts'\nimport * as gemini from './gemini.ts'\n\nexport { buildAllSectionPrompts, buildSectionPrompt, SECTION_MERGE_ORDER, SECTION_OUTPUT_FILES } from '../prompts/index.ts'\nexport type { CustomPrompt, SkillSection } from '../prompts/index.ts'\nexport type { CliModelConfig, CliName, ModelInfo, OptimizeDocsOptions, OptimizeModel, OptimizeResult, StreamProgress } from './types.ts'\n\n// ── Tool progress display ────────────────────────────────────────────\n\nconst TOOL_VERBS: Record<string, string> = {\n // Claude\n Read: 'Reading',\n Glob: 'Searching',\n Grep: 'Searching',\n Write: 'Writing',\n Bash: 'Running',\n // Gemini\n read_file: 'Reading',\n glob_tool: 'Searching',\n write_file: 'Writing',\n list_directory: 'Listing',\n search_file_content: 'Searching',\n}\n\ninterface ToolProgressLog {\n message: (msg: string) => void\n}\n\n/** Create a progress callback that emits one line per tool call, Claude Code style */\nexport function createToolProgress(log: ToolProgressLog): (progress: StreamProgress) => void {\n let lastMsg = ''\n let repeatCount = 0\n\n function emit(msg: string) {\n if (msg === lastMsg) {\n repeatCount++\n log.message(`${msg} \\x1B[90m(+${repeatCount})\\x1B[0m`)\n }\n else {\n lastMsg = msg\n repeatCount = 0\n log.message(msg)\n }\n }\n\n return ({ type, chunk, section }) => {\n if (type === 'text') {\n emit(`${section ? `\\x1B[90m[${section}]\\x1B[0m ` : ''}Writing...`)\n return\n }\n if (type !== 'reasoning' || !chunk.startsWith('['))\n return\n\n // Parse individual tool names and hints from \"[Read: path]\" or \"[Read, Glob: path1, path2]\"\n const match = chunk.match(/^\\[([^:[\\]]+)(?::\\s(.+))?\\]$/)\n if (!match)\n return\n\n const names = match[1]!.split(',').map(n => n.trim())\n const hints = match[2]?.split(',').map(h => h.trim()) ?? []\n\n for (let i = 0; i < names.length; i++) {\n const rawName = names[i]!\n const hint = hints[i] ?? hints[0] ?? ''\n const verb = TOOL_VERBS[rawName] ?? rawName\n const prefix = section ? `\\x1B[90m[${section}]\\x1B[0m ` : ''\n\n if (rawName === 'Bash' && hint) {\n const searchMatch = hint.match(/skilld search\\s+\"([^\"]+)\"/)\n if (searchMatch)\n emit(`${prefix}Searching \\x1B[36m\"${searchMatch[1]}\"\\x1B[0m`)\n else\n emit(`${prefix}Running ${hint.length > 50 ? `${hint.slice(0, 47)}...` : hint}`)\n }\n else {\n const path = shortenPath(hint || '...')\n emit(`${prefix}${verb} \\x1B[90m${path}\\x1B[0m`)\n }\n }\n }\n}\n\n// ── Per-CLI dispatch ─────────────────────────────────────────────────\n\nconst CLI_DEFS = [claude, gemini, codex] as const\n\nconst CLI_BUILD_ARGS: Record<CliName, (model: string, skillDir: string, symlinkDirs: string[]) => string[]> = {\n claude: claude.buildArgs,\n gemini: gemini.buildArgs,\n codex: codex.buildArgs,\n}\n\nconst CLI_PARSE_LINE: Record<CliName, (line: string) => ParsedEvent> = {\n claude: claude.parseLine,\n gemini: gemini.parseLine,\n codex: codex.parseLine,\n}\n\n// ── Assemble CLI_MODELS from per-CLI model definitions ───────────────\n\nexport const CLI_MODELS: Partial<Record<OptimizeModel, CliModelConfig>> = Object.fromEntries(\n CLI_DEFS.flatMap(def =>\n Object.entries(def.models).map(([id, entry]) => [\n id,\n { ...entry, cli: def.cli, agentId: def.agentId },\n ]),\n ),\n)\n\n// ── Model helpers ────────────────────────────────────────────────────\n\nexport function getModelName(id: OptimizeModel): string {\n return CLI_MODELS[id]?.name ?? id\n}\n\nexport function getModelLabel(id: OptimizeModel): string {\n const config = CLI_MODELS[id]\n if (!config)\n return id\n const agentName = agents[config.agentId]?.displayName ?? config.cli\n return `${agentName} · ${config.name}`\n}\n\nexport async function getAvailableModels(): Promise<import('./types.ts').ModelInfo[]> {\n const execAsync = promisify(exec)\n\n const installedAgents = detectInstalledAgents()\n const agentsWithCli = installedAgents.filter(id => agents[id].cli)\n\n const cliChecks = await Promise.all(\n agentsWithCli.map(async (agentId) => {\n const cli = agents[agentId].cli!\n try {\n await execAsync(`which ${cli}`)\n return agentId\n }\n catch { return null }\n }),\n )\n const availableAgentIds = new Set(cliChecks.filter((id): id is AgentType => id != null))\n\n return (Object.entries(CLI_MODELS) as [OptimizeModel, CliModelConfig][])\n .filter(([_, config]) => availableAgentIds.has(config.agentId))\n .map(([id, config]) => ({\n id,\n name: config.name,\n hint: config.hint,\n recommended: config.recommended,\n agentId: config.agentId,\n agentName: agents[config.agentId]?.displayName ?? config.agentId,\n }))\n}\n\n// ── Reference dirs ───────────────────────────────────────────────────\n\n/** Resolve symlinks in .skilld/ to get real paths for --add-dir */\nfunction resolveReferenceDirs(skillDir: string): string[] {\n const refsDir = join(skillDir, '.skilld')\n if (!existsSync(refsDir))\n return []\n const resolved = readdirSync(refsDir)\n .map(entry => join(refsDir, entry))\n .filter(p => lstatSync(p).isSymbolicLink() && existsSync(p))\n .map(p => realpathSync(p))\n\n // Include parent directories so CLIs can search across all references at once\n // (e.g. Gemini's sandbox requires the parent dir to be explicitly included)\n const parents = new Set<string>()\n for (const p of resolved) {\n const parent = dirname(p)\n if (!resolved.includes(parent))\n parents.add(parent)\n }\n\n return [...resolved, ...parents]\n}\n\n// ── Cache ────────────────────────────────────────────────────────────\n\nconst CACHE_DIR = join(homedir(), '.skilld', 'llm-cache')\n\n/** Strip absolute paths from prompt so the hash is project-independent */\nfunction normalizePromptForHash(prompt: string): string {\n return prompt.replace(/\\/[^\\s`]*\\.(?:claude|codex|gemini)\\/skills\\/[^\\s/`]+/g, '<SKILL_DIR>')\n}\n\nfunction hashPrompt(prompt: string, model: OptimizeModel, section: SkillSection): string {\n return createHash('sha256').update(`exec:${model}:${section}:${normalizePromptForHash(prompt)}`).digest('hex').slice(0, 16)\n}\n\nfunction getCached(prompt: string, model: OptimizeModel, section: SkillSection, maxAge = 7 * 24 * 60 * 60 * 1000): string | null {\n const path = join(CACHE_DIR, `${hashPrompt(prompt, model, section)}.json`)\n if (!existsSync(path))\n return null\n try {\n const { text, timestamp } = JSON.parse(readFileSync(path, 'utf-8'))\n return Date.now() - timestamp > maxAge ? null : text\n }\n catch { return null }\n}\n\nfunction setCache(prompt: string, model: OptimizeModel, section: SkillSection, text: string): void {\n mkdirSync(CACHE_DIR, { recursive: true, mode: 0o700 })\n writeFileSync(\n join(CACHE_DIR, `${hashPrompt(prompt, model, section)}.json`),\n JSON.stringify({ text, model, section, timestamp: Date.now() }),\n { mode: 0o600 },\n )\n}\n\n// ── Per-section spawn ────────────────────────────────────────────────\n\ninterface OptimizeSectionOptions {\n section: SkillSection\n prompt: string\n outputFile: string\n skillDir: string\n model: OptimizeModel\n packageName: string\n onProgress?: (progress: StreamProgress) => void\n timeout: number\n debug?: boolean\n preExistingFiles: Set<string>\n}\n\n/** Spawn a single CLI process for one section */\nfunction optimizeSection(opts: OptimizeSectionOptions): Promise<SectionResult> {\n const { section, prompt, outputFile, skillDir, model, onProgress, timeout, debug, preExistingFiles } = opts\n\n const cliConfig = CLI_MODELS[model]\n if (!cliConfig) {\n return Promise.resolve({ section, content: '', wasOptimized: false, error: `No CLI mapping for model: ${model}` })\n }\n\n const { cli, model: cliModel } = cliConfig\n const symlinkDirs = resolveReferenceDirs(skillDir)\n const args = CLI_BUILD_ARGS[cli](cliModel, skillDir, symlinkDirs)\n const parseLine = CLI_PARSE_LINE[cli]\n\n const skilldDir = join(skillDir, '.skilld')\n const outputPath = join(skilldDir, outputFile)\n\n // Remove stale output so we don't read a leftover from a previous run\n if (existsSync(outputPath))\n unlinkSync(outputPath)\n\n // Write prompt for debugging\n writeFileSync(join(skilldDir, `PROMPT_${section}.md`), prompt)\n\n return new Promise<SectionResult>((resolve) => {\n const proc = spawn(cli, args, {\n cwd: skilldDir,\n stdio: ['pipe', 'pipe', 'pipe'],\n timeout,\n env: { ...process.env, NO_COLOR: '1' },\n })\n\n let buffer = ''\n let accumulatedText = ''\n let lastWriteContent = ''\n let usage: { input: number, output: number } | undefined\n let cost: number | undefined\n const rawLines: string[] = []\n\n onProgress?.({ chunk: '[starting...]', type: 'reasoning', text: '', reasoning: '', section })\n\n proc.stdin.write(prompt)\n proc.stdin.end()\n\n proc.stdout.on('data', (chunk: Buffer) => {\n buffer += chunk.toString()\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n if (!line.trim())\n continue\n if (debug)\n rawLines.push(line)\n const evt = parseLine(line)\n\n if (evt.textDelta)\n accumulatedText += evt.textDelta\n if (evt.fullText)\n accumulatedText = evt.fullText\n\n if (evt.writeContent)\n lastWriteContent = evt.writeContent\n\n if (evt.toolName) {\n const hint = evt.toolHint\n ? `[${evt.toolName}: ${evt.toolHint}]`\n : `[${evt.toolName}]`\n onProgress?.({ chunk: hint, type: 'reasoning', text: '', reasoning: hint, section })\n }\n\n if (evt.usage)\n usage = evt.usage\n if (evt.cost != null)\n cost = evt.cost\n }\n })\n\n let stderr = ''\n proc.stderr.on('data', (chunk: Buffer) => {\n stderr += chunk.toString()\n })\n\n proc.on('close', (code) => {\n // Drain remaining buffer for metadata\n if (buffer.trim()) {\n const evt = parseLine(buffer)\n if (evt.textDelta)\n accumulatedText += evt.textDelta\n if (evt.fullText)\n accumulatedText = evt.fullText\n if (evt.writeContent)\n lastWriteContent = evt.writeContent\n if (evt.usage)\n usage = evt.usage\n if (evt.cost != null)\n cost = evt.cost\n }\n\n // Remove unexpected files the LLM may have written (prompt injection defense)\n // Only clean files not in the pre-existing snapshot and not our expected output\n for (const entry of readdirSync(skilldDir)) {\n if (entry !== outputFile && !preExistingFiles.has(entry)) {\n // Allow other section output files and debug prompts\n if (Object.values(SECTION_OUTPUT_FILES).includes(entry))\n continue\n if (entry.startsWith('PROMPT_') || entry === 'logs')\n continue\n try {\n unlinkSync(join(skilldDir, entry))\n }\n catch {}\n }\n }\n\n // Prefer file written by LLM, fall back to Write tool content (if denied), then accumulated stdout\n const raw = (existsSync(outputPath) ? readFileSync(outputPath, 'utf-8') : lastWriteContent || accumulatedText).trim()\n\n // Always write stderr on failure; write all logs in debug mode\n const logsDir = join(skilldDir, 'logs')\n const logName = section.toUpperCase().replace(/-/g, '_')\n if (debug || (stderr && (!raw || code !== 0))) {\n mkdirSync(logsDir, { recursive: true })\n if (stderr)\n writeFileSync(join(logsDir, `${logName}.stderr.log`), stderr)\n }\n if (debug) {\n mkdirSync(logsDir, { recursive: true })\n if (rawLines.length)\n writeFileSync(join(logsDir, `${logName}.jsonl`), rawLines.join('\\n'))\n if (raw)\n writeFileSync(join(logsDir, `${logName}.md`), raw)\n }\n\n if (!raw && code !== 0) {\n resolve({ section, content: '', wasOptimized: false, error: stderr.trim() || `CLI exited with code ${code}` })\n return\n }\n\n // Clean the section output (strip markdown fences, frontmatter, sanitize)\n const content = raw ? cleanSectionOutput(raw) : ''\n\n if (content) {\n // Write cleaned content back to the output file for debugging\n writeFileSync(outputPath, content)\n }\n\n const validator = getSectionValidator(section)\n const rawWarnings = content && validator ? validator(content) : []\n const warnings: ValidationWarning[] = rawWarnings.map(w => ({ section, warning: w.warning }))\n\n resolve({\n section,\n content,\n wasOptimized: !!content,\n warnings: warnings?.length ? warnings : undefined,\n usage,\n cost,\n })\n })\n\n proc.on('error', (err) => {\n resolve({ section, content: '', wasOptimized: false, error: err.message })\n })\n })\n}\n\n// ── Main orchestrator ────────────────────────────────────────────────\n\nexport async function optimizeDocs(opts: OptimizeDocsOptions): Promise<OptimizeResult> {\n const { packageName, skillDir, model = 'sonnet', version, hasGithub, hasReleases, hasChangelog, docFiles, docsType, hasShippedDocs, onProgress, timeout = 180000, debug, noCache, sections, customPrompt, features, pkgFiles } = opts\n\n const selectedSections = sections ?? ['api-changes', 'best-practices'] as SkillSection[]\n\n // Build all section prompts\n const sectionPrompts = buildAllSectionPrompts({\n packageName,\n skillDir,\n version,\n hasIssues: hasGithub,\n hasDiscussions: hasGithub,\n hasReleases,\n hasChangelog,\n docFiles,\n docsType,\n hasShippedDocs,\n customPrompt,\n features,\n pkgFiles,\n sections: selectedSections,\n })\n\n if (sectionPrompts.size === 0) {\n return { optimized: '', wasOptimized: false, error: 'No valid sections to generate' }\n }\n\n const cliConfig = CLI_MODELS[model]\n if (!cliConfig) {\n return { optimized: '', wasOptimized: false, error: `No CLI mapping for model: ${model}` }\n }\n\n // Check per-section cache: references dir first (version-keyed), then LLM cache (prompt-hashed)\n const cachedResults: SectionResult[] = []\n const uncachedSections: Array<{ section: SkillSection, prompt: string }> = []\n\n for (const [section, prompt] of sectionPrompts) {\n if (!noCache) {\n // Check global references dir (cross-project, version-keyed)\n if (version) {\n const outputFile = SECTION_OUTPUT_FILES[section]\n const refCached = readCachedSection(packageName, version, outputFile)\n if (refCached) {\n onProgress?.({ chunk: `[${section}: cached]`, type: 'text', text: refCached, reasoning: '', section })\n cachedResults.push({ section, content: refCached, wasOptimized: true })\n continue\n }\n }\n\n // Check LLM prompt-hash cache\n const cached = getCached(prompt, model, section)\n if (cached) {\n onProgress?.({ chunk: `[${section}: cached]`, type: 'text', text: cached, reasoning: '', section })\n cachedResults.push({ section, content: cached, wasOptimized: true })\n continue\n }\n }\n uncachedSections.push({ section, prompt })\n }\n\n // Prepare .skilld/ dir and snapshot before spawns\n const skilldDir = join(skillDir, '.skilld')\n mkdirSync(skilldDir, { recursive: true })\n\n // Pre-flight: warn about broken symlinks in .skilld/ (avoids wasting tokens on missing refs)\n for (const entry of readdirSync(skilldDir)) {\n const entryPath = join(skilldDir, entry)\n try {\n if (lstatSync(entryPath).isSymbolicLink() && !existsSync(entryPath))\n onProgress?.({ chunk: `[warn: broken symlink .skilld/${entry}]`, type: 'reasoning', text: '', reasoning: '' })\n }\n catch {}\n }\n\n const preExistingFiles = new Set(readdirSync(skilldDir))\n\n // Spawn uncached sections with staggered starts to avoid rate-limit collisions\n const STAGGER_MS = 3000\n const spawnResults = uncachedSections.length > 0\n ? await Promise.allSettled(\n uncachedSections.map(({ section, prompt }, i) => {\n const outputFile = SECTION_OUTPUT_FILES[section]\n const run = () => optimizeSection({\n section,\n prompt,\n outputFile,\n skillDir,\n model,\n packageName,\n onProgress,\n timeout,\n debug,\n preExistingFiles,\n })\n // Stagger: first section starts immediately, rest delayed\n if (i === 0)\n return run()\n return delay(i * STAGGER_MS).then(run)\n }),\n )\n : []\n\n // Collect results, retry failed sections once\n const allResults: SectionResult[] = [...cachedResults]\n let totalUsage: { input: number, output: number } | undefined\n let totalCost = 0\n const retryQueue: Array<{ index: number, section: SkillSection, prompt: string }> = []\n\n for (let i = 0; i < spawnResults.length; i++) {\n const r = spawnResults[i]!\n const { section, prompt } = uncachedSections[i]!\n if (r.status === 'fulfilled' && r.value.wasOptimized) {\n allResults.push(r.value)\n if (r.value.usage) {\n totalUsage = totalUsage ?? { input: 0, output: 0 }\n totalUsage.input += r.value.usage.input\n totalUsage.output += r.value.usage.output\n }\n if (r.value.cost != null)\n totalCost += r.value.cost\n if (!noCache)\n setCache(prompt, model, section, r.value.content)\n }\n else {\n retryQueue.push({ index: i, section, prompt })\n }\n }\n\n // Retry failed sections once (sequential to avoid rate limits)\n for (const { section, prompt } of retryQueue) {\n onProgress?.({ chunk: `[${section}: retrying...]`, type: 'reasoning', text: '', reasoning: '', section })\n await delay(STAGGER_MS)\n const result = await optimizeSection({\n section,\n prompt,\n outputFile: SECTION_OUTPUT_FILES[section],\n skillDir,\n model,\n packageName,\n onProgress,\n timeout,\n debug,\n preExistingFiles,\n }).catch((err: Error) => ({ section, content: '', wasOptimized: false, error: err.message }) as SectionResult)\n\n allResults.push(result)\n if (result.wasOptimized && !noCache)\n setCache(prompt, model, section, result.content)\n if (result.usage) {\n totalUsage = totalUsage ?? { input: 0, output: 0 }\n totalUsage.input += result.usage.input\n totalUsage.output += result.usage.output\n }\n if (result.cost != null)\n totalCost += result.cost\n }\n\n // Write successful sections to global references dir for cross-project reuse\n if (version) {\n const sectionFiles = allResults\n .filter(r => r.wasOptimized && r.content)\n .map(r => ({ file: SECTION_OUTPUT_FILES[r.section], content: r.content }))\n if (sectionFiles.length > 0) {\n writeSections(packageName, version, sectionFiles)\n }\n }\n\n // Merge results in SECTION_MERGE_ORDER\n const mergedParts: string[] = []\n for (const section of SECTION_MERGE_ORDER) {\n const result = allResults.find(r => r.section === section)\n if (result?.wasOptimized && result.content) {\n mergedParts.push(result.content)\n }\n }\n\n const optimized = mergedParts.join('\\n\\n')\n const wasOptimized = mergedParts.length > 0\n\n const usageResult = totalUsage\n ? { inputTokens: totalUsage.input, outputTokens: totalUsage.output, totalTokens: totalUsage.input + totalUsage.output }\n : undefined\n\n // Collect errors and warnings from sections\n const errors = allResults.filter(r => r.error).map(r => `${r.section}: ${r.error}`)\n const warnings = allResults.flatMap(r => r.warnings ?? []).map(w => `${w.section}: ${w.warning}`)\n\n const debugLogsDir = debug && uncachedSections.length > 0\n ? join(skillDir, '.skilld', 'logs')\n : undefined\n\n return {\n optimized,\n wasOptimized,\n error: errors.length > 0 ? errors.join('; ') : undefined,\n warnings: warnings.length > 0 ? warnings : undefined,\n finishReason: wasOptimized ? 'stop' : 'error',\n usage: usageResult,\n cost: totalCost || undefined,\n debugLogsDir,\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────\n\n/** Shorten absolute paths for display: /home/.../.skilld/docs/guide.md → docs/guide.md */\nfunction shortenPath(p: string): string {\n const refIdx = p.indexOf('.skilld/')\n if (refIdx !== -1)\n return p.slice(refIdx + '.skilld/'.length)\n // Keep just filename for other paths\n const parts = p.split('/')\n return parts.length > 2 ? `.../${parts.slice(-2).join('/')}` : p\n}\n\n/** Clean a single section's LLM output: strip markdown fences, frontmatter, sanitize */\nexport function cleanSectionOutput(content: string): string {\n let cleaned = content.trim()\n\n // Strip wrapping fences if output is wrapped in ```markdown, ```md, or bare ```\n // Requires matched open+close pair to avoid stripping internal code blocks\n const wrapMatch = cleaned.match(/^```(?:markdown|md)?[^\\S\\n]*\\n([\\s\\S]+)\\n```[^\\S\\n]*$/)\n if (wrapMatch) {\n const inner = wrapMatch[1]!.trim()\n // For bare ``` wrappers (no markdown/md tag), verify inner looks like section output\n const isExplicitWrapper = /^```(?:markdown|md)/.test(cleaned)\n if (isExplicitWrapper || /^##\\s/m.test(inner) || /^- (?:BREAKING|DEPRECATED|NEW): /m.test(inner)) {\n cleaned = inner\n }\n }\n\n // Strip accidental frontmatter or leading horizontal rules\n const fmMatch = cleaned.match(/^-{3,}\\n/)\n if (fmMatch) {\n const afterOpen = fmMatch[0].length\n const closeMatch = cleaned.slice(afterOpen).match(/\\n-{3,}/)\n if (closeMatch) {\n cleaned = cleaned.slice(afterOpen + closeMatch.index! + closeMatch[0].length).trim()\n }\n else {\n cleaned = cleaned.slice(afterOpen).trim()\n }\n }\n\n // Strip raw code preamble before first section marker (defense against LLMs dumping source)\n // Section markers: ## heading, BREAKING/DEPRECATED/NEW labels\n const firstMarker = cleaned.match(/^(##\\s|- (?:BREAKING|DEPRECATED|NEW): )/m)\n if (firstMarker?.index && firstMarker.index > 0) {\n const preamble = cleaned.slice(0, firstMarker.index)\n // Only strip if preamble looks like code (contains function/const/export/return patterns)\n if (/\\b(?:function|const |let |var |export |return |import |async |class )\\b/.test(preamble)) {\n cleaned = cleaned.slice(firstMarker.index).trim()\n }\n }\n\n // Strip duplicate section headings (LLM echoing the format example before real content)\n // Handles headings separated by blank lines or boilerplate text\n const headingMatch = cleaned.match(/^(## .+)\\n/)\n if (headingMatch) {\n const heading = headingMatch[1]!\n const afterFirst = headingMatch[0].length\n const secondIdx = cleaned.indexOf(heading, afterFirst)\n if (secondIdx !== -1) {\n // Only strip if the gap between duplicates is small (< 200 chars of boilerplate)\n if (secondIdx - afterFirst < 200)\n cleaned = cleaned.slice(secondIdx).trim()\n }\n }\n\n // Normalize source link paths: ensure .skilld/ prefix is present\n // LLMs sometimes emit [source](./docs/...) instead of [source](./.skilld/docs/...)\n cleaned = cleaned.replace(\n /\\[source\\]\\(\\.\\/((docs|issues|discussions|releases|pkg|guide)\\/)/g,\n '[source](./.skilld/$1',\n )\n\n cleaned = sanitizeMarkdown(cleaned)\n\n // Reject content that lacks any section structure — likely leaked LLM reasoning/narration\n // Valid sections contain headings (##), API change labels, or source-linked items\n if (!/^##\\s/m.test(cleaned) && !/^- (?:BREAKING|DEPRECATED|NEW): /m.test(cleaned) && !/\\[source\\]/.test(cleaned)) {\n return ''\n }\n\n return cleaned\n}\n","/**\n * Detect packages from framework presets (e.g., Nuxt modules in nuxt.config)\n * These are string literals in config arrays, not imports — the import scanner misses them.\n */\n\nimport type { PackageUsage } from './detect-imports.ts'\nimport { readFile } from 'node:fs/promises'\nimport { parseSync } from 'oxc-parser'\nimport { join } from 'pathe'\n\nconst NUXT_CONFIG_FILES = ['nuxt.config.ts', 'nuxt.config.js', 'nuxt.config.mjs']\nconst NUXT_ECOSYSTEM = ['vue', 'nitro', 'h3']\n\nasync function findNuxtConfig(cwd: string): Promise<{ path: string, content: string } | null> {\n for (const name of NUXT_CONFIG_FILES) {\n const path = join(cwd, name)\n const content = await readFile(path, 'utf8').catch(() => null)\n if (content)\n return { path, content }\n }\n return null\n}\n\n/**\n * Walk AST node to find all string values inside a `modules` array property.\n * Handles: defineNuxtConfig({ modules: [...] }) and export default { modules: [...] }\n */\nexport function extractModuleStrings(node: any): string[] {\n if (!node || typeof node !== 'object')\n return []\n\n // Found a Property with key \"modules\" and an ArrayExpression value\n if (node.type === 'Property' && !node.computed\n && (node.key?.type === 'Identifier' && node.key.name === 'modules')\n && node.value?.type === 'ArrayExpression') { return node.value.elements.filter((el: any) => el?.type === 'Literal' && typeof el.value === 'string').map((el: any) => el.value as string) }\n\n // Recurse into arrays and object values\n const results: string[] = []\n if (Array.isArray(node)) {\n for (const child of node)\n results.push(...extractModuleStrings(child))\n }\n else {\n for (const key of Object.keys(node)) {\n if (key === 'start' || key === 'end' || key === 'type')\n continue\n const val = node[key]\n if (val && typeof val === 'object')\n results.push(...extractModuleStrings(val))\n }\n }\n return results\n}\n\n/**\n * Detect Nuxt modules from nuxt.config.{ts,js,mjs}\n */\nexport async function detectNuxtModules(cwd: string): Promise<PackageUsage[]> {\n const config = await findNuxtConfig(cwd)\n if (!config)\n return []\n\n const result = parseSync(config.path, config.content)\n const modules = extractModuleStrings(result.program)\n\n // Dedupe and build results\n const seen = new Set<string>()\n const packages: PackageUsage[] = []\n\n for (const mod of modules) {\n if (!seen.has(mod)) {\n seen.add(mod)\n packages.push({ name: mod, count: 0, source: 'preset' })\n }\n }\n\n // Add core ecosystem packages\n for (const pkg of NUXT_ECOSYSTEM) {\n if (!seen.has(pkg)) {\n seen.add(pkg)\n packages.push({ name: pkg, count: 0, source: 'preset' })\n }\n }\n\n return packages\n}\n\n/**\n * Run all preset detectors and merge results\n */\nexport async function detectPresetPackages(cwd: string): Promise<PackageUsage[]> {\n // Currently only Nuxt, but extensible for other frameworks\n return detectNuxtModules(cwd)\n}\n","/**\n * Detect directly-used npm packages by scanning source files\n * Uses mlly for proper ES module parsing + globby for gitignore support\n */\n\nimport { readFile } from 'node:fs/promises'\nimport { globby } from 'globby'\nimport { findDynamicImports, findStaticImports } from 'mlly'\nimport { detectPresetPackages } from './detect-presets.ts'\n\nexport interface PackageUsage {\n name: string\n count: number\n source?: 'import' | 'preset'\n}\n\nexport interface DetectResult {\n packages: PackageUsage[]\n error?: string\n}\n\nconst PATTERNS = ['**/*.{ts,js,vue,mjs,cjs,tsx,jsx,mts,cts}']\nconst IGNORE = ['**/node_modules/**', '**/dist/**', '**/.nuxt/**', '**/.output/**', '**/coverage/**']\n\nfunction addPackage(counts: Map<string, number>, specifier: string | undefined) {\n if (!specifier || specifier.startsWith('.') || specifier.startsWith('/'))\n return\n\n // Extract package name (handle subpaths like 'pkg/subpath')\n const name = specifier.startsWith('@')\n ? specifier.split('/').slice(0, 2).join('/')\n : specifier.split('/')[0]!\n\n if (!isNodeBuiltin(name)) {\n counts.set(name, (counts.get(name) || 0) + 1)\n }\n}\n\n/**\n * Scan source files to detect all directly-imported npm packages\n * Async with gitignore support for proper spinner animation\n */\nexport async function detectImportedPackages(cwd: string = process.cwd()): Promise<DetectResult> {\n try {\n const counts = new Map<string, number>()\n\n const files = await globby(PATTERNS, {\n cwd,\n ignore: IGNORE,\n gitignore: true,\n absolute: true,\n })\n\n await Promise.all(files.map(async (file) => {\n const content = await readFile(file, 'utf8')\n\n // Static: import x from 'pkg'\n for (const imp of findStaticImports(content)) {\n addPackage(counts, imp.specifier)\n }\n\n // Dynamic: import('pkg') - expression is the string literal\n for (const imp of findDynamicImports(content)) {\n // expression includes quotes, extract string value\n const match = imp.expression.match(/^['\"]([^'\"]+)['\"]$/)\n if (match)\n addPackage(counts, match[1]!)\n }\n }))\n\n // Sort by usage count (descending), then alphabetically\n const packages: PackageUsage[] = [...counts.entries()]\n .map(([name, count]) => ({ name, count, source: 'import' as const }))\n .sort((a, b) => b.count - a.count || a.name.localeCompare(b.name))\n\n // Merge preset-detected packages (imports take priority)\n const presets = await detectPresetPackages(cwd)\n const importNames = new Set(packages.map(p => p.name))\n for (const preset of presets) {\n if (!importNames.has(preset.name))\n packages.push(preset)\n }\n\n return { packages }\n }\n catch (err) {\n return { packages: [], error: String(err) }\n }\n}\n\nconst NODE_BUILTINS = new Set([\n 'assert',\n 'buffer',\n 'child_process',\n 'cluster',\n 'console',\n 'constants',\n 'crypto',\n 'dgram',\n 'dns',\n 'domain',\n 'events',\n 'fs',\n 'http',\n 'https',\n 'module',\n 'net',\n 'os',\n 'path',\n 'perf_hooks',\n 'process',\n 'punycode',\n 'querystring',\n 'readline',\n 'repl',\n 'stream',\n 'string_decoder',\n 'sys',\n 'timers',\n 'tls',\n 'tty',\n 'url',\n 'util',\n 'v8',\n 'vm',\n 'wasi',\n 'worker_threads',\n 'zlib',\n])\n\nfunction isNodeBuiltin(pkg: string): boolean {\n const base = pkg.startsWith('node:') ? pkg.slice(5) : pkg\n return NODE_BUILTINS.has(base.split('/')[0]!)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"detect-imports.mjs","names":["cli","agentId","models","buildArgs","parseLine","cli","agentId","models","buildArgs","parseLine","claude","gemini","codex","claude.buildArgs","gemini.buildArgs","codex.buildArgs","claude.parseLine","gemini.parseLine","codex.parseLine","agents","delay"],"sources":["../../src/agent/clis/claude.ts","../../src/agent/clis/codex.ts","../../src/agent/clis/gemini.ts","../../src/agent/clis/index.ts","../../src/agent/detect-presets.ts","../../src/agent/detect-imports.ts"],"sourcesContent":["/**\n * Claude Code CLI — token-level streaming via --include-partial-messages\n */\n\nimport type { CliModelEntry, ParsedEvent } from './types.ts'\nimport { join } from 'pathe'\n\nexport const cli = 'claude' as const\nexport const agentId = 'claude-code' as const\n\nexport const models: Record<string, CliModelEntry> = {\n opus: { model: 'opus', name: 'Opus 4.6', hint: 'Most capable for complex work' },\n sonnet: { model: 'sonnet', name: 'Sonnet 4.6', hint: 'Best for everyday tasks' },\n haiku: { model: 'haiku', name: 'Haiku 4.5', hint: 'Fastest for quick answers', recommended: true },\n}\n\nexport function buildArgs(model: string, skillDir: string, symlinkDirs: string[]): string[] {\n const skilldDir = join(skillDir, '.skilld')\n const readDirs = [skillDir, ...symlinkDirs]\n const allowedTools = [\n ...readDirs.flatMap(d => [`Read(${d}/**)`, `Glob(${d}/**)`, `Grep(${d}/**)`]),\n `Write(${skilldDir}/**)`,\n `Bash(*skilld search*)`,\n `Bash(*skilld validate*)`,\n ].join(' ')\n return [\n '-p',\n '--model',\n model,\n '--output-format',\n 'stream-json',\n '--verbose',\n '--include-partial-messages',\n '--allowedTools',\n allowedTools,\n '--disallowedTools',\n 'WebSearch WebFetch Task',\n '--add-dir',\n skillDir,\n ...symlinkDirs.flatMap(d => ['--add-dir', d]),\n '--no-session-persistence',\n ]\n}\n\n/**\n * Parse claude stream-json events\n *\n * Event types:\n * - stream_event/content_block_delta/text_delta → token streaming\n * - stream_event/content_block_start/tool_use → tool invocation starting\n * - assistant message with tool_use content → tool name + input\n * - assistant message with text content → full text (non-streaming fallback)\n * - result → usage, cost, turns\n */\nexport function parseLine(line: string): ParsedEvent {\n try {\n const obj = JSON.parse(line)\n\n // Token-level streaming (--include-partial-messages)\n if (obj.type === 'stream_event') {\n const evt = obj.event\n if (!evt)\n return {}\n\n // Text delta — the main streaming path\n if (evt.type === 'content_block_delta' && evt.delta?.type === 'text_delta') {\n return { textDelta: evt.delta.text }\n }\n\n return {}\n }\n\n // Full assistant message (complete turn, after streaming)\n if (obj.type === 'assistant' && obj.message?.content) {\n const content = obj.message.content as any[]\n\n // Extract tool uses with inputs for progress hints\n const tools = content.filter((c: any) => c.type === 'tool_use')\n if (tools.length) {\n const names = tools.map((t: any) => t.name)\n // Extract useful hint from tool input (file path, query, etc)\n const hint = tools.map((t: any) => {\n const input = t.input || {}\n return input.file_path || input.path || input.pattern || input.query || input.command || ''\n }).filter(Boolean).join(', ')\n // Capture Write content as fallback if permission is denied\n const writeTool = tools.find((t: any) => t.name === 'Write' && t.input?.content)\n return { toolName: names.join(', '), toolHint: hint || undefined, writeContent: writeTool?.input?.content }\n }\n\n // Text content (fallback for non-partial mode)\n const text = content\n .filter((c: any) => c.type === 'text')\n .map((c: any) => c.text)\n .join('')\n if (text)\n return { fullText: text }\n }\n\n // Final result\n if (obj.type === 'result') {\n const u = obj.usage\n return {\n done: true,\n usage: u ? { input: u.input_tokens ?? u.inputTokens ?? 0, output: u.output_tokens ?? u.outputTokens ?? 0 } : undefined,\n cost: obj.total_cost_usd,\n turns: obj.num_turns,\n }\n }\n }\n catch {}\n return {}\n}\n","/**\n * OpenAI Codex CLI — exec subcommand with JSON output\n * Prompt passed via stdin with `-` sentinel\n *\n * Event types:\n * - turn.started / turn.completed → turn lifecycle + usage\n * - item.started → command_execution in progress\n * - item.completed → agent_message (text), command_execution (result), file_change (apply_patch)\n * - error / turn.failed → errors\n */\n\nimport type { CliModelEntry, ParsedEvent } from './types.ts'\n\nexport const cli = 'codex' as const\nexport const agentId = 'codex' as const\n\nexport const models: Record<string, CliModelEntry> = {\n 'gpt-5.2-codex': { model: 'gpt-5.2-codex', name: 'GPT-5.2 Codex', hint: 'Frontier agentic coding model' },\n 'gpt-5.1-codex-max': { model: 'gpt-5.1-codex-max', name: 'GPT-5.1 Codex Max', hint: 'Codex-optimized flagship' },\n 'gpt-5.2': { model: 'gpt-5.2', name: 'GPT-5.2', hint: 'Latest frontier model' },\n 'gpt-5.1-codex-mini': { model: 'gpt-5.1-codex-mini', name: 'GPT-5.1 Codex Mini', hint: 'Optimized for codex, cheaper & faster', recommended: true },\n}\n\nexport function buildArgs(model: string, _skillDir: string, _symlinkDirs: string[]): string[] {\n return [\n 'exec',\n '--json',\n '--ephemeral',\n '--model',\n model,\n // Permissions aligned with Claude's scoped model:\n // --full-auto = --sandbox workspace-write + --ask-for-approval on-request\n // → writes scoped to CWD (.skilld/, set in spawn), reads unrestricted, network blocked\n // Shell remains enabled for `npx -y skilld search/validate` (no per-command allowlist in Codex)\n // --ephemeral → no session persistence (equivalent to Claude's --no-session-persistence)\n '--full-auto',\n '-',\n ]\n}\n\nexport function parseLine(line: string): ParsedEvent {\n try {\n const obj = JSON.parse(line)\n\n if (obj.type === 'item.completed' && obj.item) {\n const item = obj.item\n // Agent message — the main text output\n if (item.type === 'agent_message' && item.text)\n return { fullText: item.text }\n // Command execution completed — log as tool progress\n // If the command writes to a file (redirect or cat >), capture output as writeContent fallback\n if (item.type === 'command_execution' && item.aggregated_output) {\n const cmd = item.command || ''\n const writeContent = (/^cat\\s*>|>/.test(cmd)) ? item.aggregated_output : undefined\n return { toolName: 'Bash', toolHint: `(${item.aggregated_output.length} chars output)`, writeContent }\n }\n // apply_patch completed — file written directly to disk\n if (item.type === 'file_change' && item.changes?.length) {\n const paths = item.changes.map((c: { path: string, kind: string }) => c.path).join(', ')\n return { toolName: 'Write', toolHint: paths }\n }\n }\n\n // Command starting — show progress\n if (obj.type === 'item.started' && obj.item?.type === 'command_execution') {\n return { toolName: 'Bash', toolHint: obj.item.command }\n }\n\n // Turn completed — usage stats\n if (obj.type === 'turn.completed' && obj.usage) {\n return {\n done: true,\n usage: {\n input: obj.usage.input_tokens ?? 0,\n output: obj.usage.output_tokens ?? 0,\n },\n }\n }\n\n // Error events\n if (obj.type === 'turn.failed' || obj.type === 'error') {\n return { done: true }\n }\n }\n catch {}\n return {}\n}\n","/**\n * Gemini CLI — turn-level streaming via -o stream-json\n * Write scoping: relies on cwd being set to .skilld/ (no native --writeable-dirs)\n */\n\nimport type { CliModelEntry, ParsedEvent } from './types.ts'\n\nexport const cli = 'gemini' as const\nexport const agentId = 'gemini-cli' as const\n\nexport const models: Record<string, CliModelEntry> = {\n 'gemini-3-pro': { model: 'gemini-3-pro-preview', name: 'Gemini 3 Pro', hint: 'Most capable' },\n 'gemini-3-flash': { model: 'gemini-3-flash-preview', name: 'Gemini 3 Flash', hint: 'Balanced', recommended: true },\n}\n\nexport function buildArgs(model: string, skillDir: string, symlinkDirs: string[]): string[] {\n return [\n '-o',\n 'stream-json',\n '-m',\n model,\n '--allowed-tools',\n 'read_file,write_file,glob_tool,list_directory,search_file_content,run_shell_command(npx -y skilld),run_shell_command(grep),run_shell_command(head)',\n '--include-directories',\n skillDir,\n ...symlinkDirs.flatMap(d => ['--include-directories', d]),\n ]\n}\n\n/** Parse gemini stream-json events — turn level (full message per event) */\nexport function parseLine(line: string): ParsedEvent {\n try {\n const obj = JSON.parse(line)\n\n // Text message (delta or full)\n if (obj.type === 'message' && obj.role === 'assistant' && obj.content) {\n return obj.delta ? { textDelta: obj.content } : { fullText: obj.content }\n }\n\n // Tool invocation\n if (obj.type === 'tool_use' || obj.type === 'tool_call') {\n const name = obj.tool_name || obj.name || obj.tool || 'tool'\n const params = obj.parameters || obj.args || obj.input || {}\n const hint = params.file_path || params.path || params.dir_path || params.pattern || params.query || params.command || ''\n // Capture write_file content as fallback (matches Claude's Write tool behavior)\n if (name === 'write_file' && params.content) {\n return { toolName: name, toolHint: hint || undefined, writeContent: params.content }\n }\n return { toolName: name, toolHint: hint || undefined }\n }\n\n // Final result\n if (obj.type === 'result') {\n const s = obj.stats\n return {\n done: true,\n usage: s ? { input: s.input_tokens ?? s.input ?? 0, output: s.output_tokens ?? s.output ?? 0 } : undefined,\n turns: s?.tool_calls,\n }\n }\n }\n catch {}\n return {}\n}\n","/**\n * CLI orchestrator — spawns per-CLI processes for skill generation\n * Each CLI (claude, gemini, codex) has its own buildArgs + parseLine in separate files\n */\n\nimport type { SkillSection } from '../prompts/index.ts'\nimport type { AgentType } from '../types.ts'\nimport type { CliModelConfig, CliName, OptimizeDocsOptions, OptimizeModel, OptimizeResult, ParsedEvent, SectionResult, StreamProgress, ValidationWarning } from './types.ts'\nimport { exec, spawn } from 'node:child_process'\nimport { createHash } from 'node:crypto'\nimport { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { setTimeout as delay } from 'node:timers/promises'\nimport { promisify } from 'node:util'\nimport { dirname, join } from 'pathe'\nimport { readCachedSection, writeSections } from '../../cache/index.ts'\nimport { sanitizeMarkdown } from '../../core/sanitize.ts'\nimport { detectInstalledAgents } from '../detect.ts'\nimport { buildAllSectionPrompts, getSectionValidator, SECTION_MERGE_ORDER, SECTION_OUTPUT_FILES } from '../prompts/index.ts'\nimport { agents } from '../registry.ts'\nimport * as claude from './claude.ts'\nimport * as codex from './codex.ts'\nimport * as gemini from './gemini.ts'\n\nexport { buildAllSectionPrompts, buildSectionPrompt, SECTION_MERGE_ORDER, SECTION_OUTPUT_FILES } from '../prompts/index.ts'\nexport type { CustomPrompt, SkillSection } from '../prompts/index.ts'\nexport type { CliModelConfig, CliName, ModelInfo, OptimizeDocsOptions, OptimizeModel, OptimizeResult, StreamProgress } from './types.ts'\n\n// ── Tool progress display ────────────────────────────────────────────\n\nconst TOOL_VERBS: Record<string, string> = {\n // Claude\n Read: 'Reading',\n Glob: 'Searching',\n Grep: 'Searching',\n Write: 'Writing',\n Bash: 'Running',\n // Gemini\n read_file: 'Reading',\n glob_tool: 'Searching',\n write_file: 'Writing',\n list_directory: 'Listing',\n search_file_content: 'Searching',\n run_shell_command: 'Running',\n}\n\ninterface ToolProgressLog {\n message: (msg: string) => void\n}\n\n/** Create a progress callback that emits one line per tool call, Claude Code style */\nexport function createToolProgress(log: ToolProgressLog): (progress: StreamProgress) => void {\n let lastMsg = ''\n let repeatCount = 0\n\n function emit(msg: string) {\n if (msg === lastMsg) {\n repeatCount++\n log.message(`${msg} \\x1B[90m(+${repeatCount})\\x1B[0m`)\n }\n else {\n lastMsg = msg\n repeatCount = 0\n log.message(msg)\n }\n }\n\n return ({ type, chunk, section }) => {\n if (type === 'text') {\n emit(`${section ? `\\x1B[90m[${section}]\\x1B[0m ` : ''}Writing...`)\n return\n }\n if (type !== 'reasoning' || !chunk.startsWith('['))\n return\n\n // Parse individual tool names and hints from \"[Read: path]\" or \"[Read, Glob: path1, path2]\"\n const match = chunk.match(/^\\[([^:[\\]]+)(?::\\s(.+))?\\]$/)\n if (!match)\n return\n\n const names = match[1]!.split(',').map(n => n.trim())\n const hints = match[2]?.split(',').map(h => h.trim()) ?? []\n\n for (let i = 0; i < names.length; i++) {\n const rawName = names[i]!\n const hint = hints[i] ?? hints[0] ?? ''\n const verb = TOOL_VERBS[rawName] ?? rawName\n const prefix = section ? `\\x1B[90m[${section}]\\x1B[0m ` : ''\n\n if ((rawName === 'Bash' || rawName === 'run_shell_command') && hint) {\n const searchMatch = hint.match(/skilld search\\s+\"([^\"]+)\"/)\n if (searchMatch)\n emit(`${prefix}Searching \\x1B[36m\"${searchMatch[1]}\"\\x1B[0m`)\n else if (hint.includes('skilld validate'))\n emit(`${prefix}Validating...`)\n else\n emit(`${prefix}Running ${hint.length > 50 ? `${hint.slice(0, 47)}...` : hint}`)\n }\n else {\n const path = shortenPath(hint || '...')\n emit(`${prefix}${verb} \\x1B[90m${path}\\x1B[0m`)\n }\n }\n }\n}\n\n// ── Per-CLI dispatch ─────────────────────────────────────────────────\n\nconst CLI_DEFS = [claude, gemini, codex] as const\n\nconst CLI_BUILD_ARGS: Record<CliName, (model: string, skillDir: string, symlinkDirs: string[]) => string[]> = {\n claude: claude.buildArgs,\n gemini: gemini.buildArgs,\n codex: codex.buildArgs,\n}\n\nconst CLI_PARSE_LINE: Record<CliName, (line: string) => ParsedEvent> = {\n claude: claude.parseLine,\n gemini: gemini.parseLine,\n codex: codex.parseLine,\n}\n\n// ── Assemble CLI_MODELS from per-CLI model definitions ───────────────\n\nexport const CLI_MODELS: Partial<Record<OptimizeModel, CliModelConfig>> = Object.fromEntries(\n CLI_DEFS.flatMap(def =>\n Object.entries(def.models).map(([id, entry]) => [\n id,\n { ...entry, cli: def.cli, agentId: def.agentId },\n ]),\n ),\n)\n\n// ── Model helpers ────────────────────────────────────────────────────\n\nexport function getModelName(id: OptimizeModel): string {\n return CLI_MODELS[id]?.name ?? id\n}\n\nexport function getModelLabel(id: OptimizeModel): string {\n const config = CLI_MODELS[id]\n if (!config)\n return id\n const agentName = agents[config.agentId]?.displayName ?? config.cli\n return `${agentName} · ${config.name}`\n}\n\nexport async function getAvailableModels(): Promise<import('./types.ts').ModelInfo[]> {\n const execAsync = promisify(exec)\n\n const installedAgents = detectInstalledAgents()\n const agentsWithCli = installedAgents.filter(id => agents[id].cli)\n\n const cliChecks = await Promise.all(\n agentsWithCli.map(async (agentId) => {\n const cli = agents[agentId].cli!\n try {\n await execAsync(`which ${cli}`)\n return agentId\n }\n catch { return null }\n }),\n )\n const availableAgentIds = new Set(cliChecks.filter((id): id is AgentType => id != null))\n\n return (Object.entries(CLI_MODELS) as [OptimizeModel, CliModelConfig][])\n .filter(([_, config]) => availableAgentIds.has(config.agentId))\n .map(([id, config]) => ({\n id,\n name: config.name,\n hint: config.hint,\n recommended: config.recommended,\n agentId: config.agentId,\n agentName: agents[config.agentId]?.displayName ?? config.agentId,\n }))\n}\n\n// ── Reference dirs ───────────────────────────────────────────────────\n\n/** Resolve symlinks in .skilld/ to get real paths for --add-dir */\nfunction resolveReferenceDirs(skillDir: string): string[] {\n const refsDir = join(skillDir, '.skilld')\n if (!existsSync(refsDir))\n return []\n const resolved = readdirSync(refsDir)\n .map(entry => join(refsDir, entry))\n .filter(p => lstatSync(p).isSymbolicLink() && existsSync(p))\n .map(p => realpathSync(p))\n\n // Include parent directories so CLIs can search across all references at once\n // (e.g. Gemini's sandbox requires the parent dir to be explicitly included)\n const parents = new Set<string>()\n for (const p of resolved) {\n const parent = dirname(p)\n if (!resolved.includes(parent))\n parents.add(parent)\n }\n\n return [...resolved, ...parents]\n}\n\n// ── Cache ────────────────────────────────────────────────────────────\n\nconst CACHE_DIR = join(homedir(), '.skilld', 'llm-cache')\n\n/** Strip absolute paths from prompt so the hash is project-independent */\nfunction normalizePromptForHash(prompt: string): string {\n return prompt.replace(/\\/[^\\s`]*\\.(?:claude|codex|gemini)\\/skills\\/[^\\s/`]+/g, '<SKILL_DIR>')\n}\n\nfunction hashPrompt(prompt: string, model: OptimizeModel, section: SkillSection): string {\n return createHash('sha256').update(`exec:${model}:${section}:${normalizePromptForHash(prompt)}`).digest('hex').slice(0, 16)\n}\n\nfunction getCached(prompt: string, model: OptimizeModel, section: SkillSection, maxAge = 7 * 24 * 60 * 60 * 1000): string | null {\n const path = join(CACHE_DIR, `${hashPrompt(prompt, model, section)}.json`)\n if (!existsSync(path))\n return null\n try {\n const { text, timestamp } = JSON.parse(readFileSync(path, 'utf-8'))\n return Date.now() - timestamp > maxAge ? null : text\n }\n catch { return null }\n}\n\nfunction setCache(prompt: string, model: OptimizeModel, section: SkillSection, text: string): void {\n mkdirSync(CACHE_DIR, { recursive: true, mode: 0o700 })\n writeFileSync(\n join(CACHE_DIR, `${hashPrompt(prompt, model, section)}.json`),\n JSON.stringify({ text, model, section, timestamp: Date.now() }),\n { mode: 0o600 },\n )\n}\n\n// ── Per-section spawn ────────────────────────────────────────────────\n\ninterface OptimizeSectionOptions {\n section: SkillSection\n prompt: string\n outputFile: string\n skillDir: string\n model: OptimizeModel\n packageName: string\n onProgress?: (progress: StreamProgress) => void\n timeout: number\n debug?: boolean\n preExistingFiles: Set<string>\n}\n\n/** Spawn a single CLI process for one section */\nfunction optimizeSection(opts: OptimizeSectionOptions): Promise<SectionResult> {\n const { section, prompt, outputFile, skillDir, model, onProgress, timeout, debug, preExistingFiles } = opts\n\n const cliConfig = CLI_MODELS[model]\n if (!cliConfig) {\n return Promise.resolve({ section, content: '', wasOptimized: false, error: `No CLI mapping for model: ${model}` })\n }\n\n const { cli, model: cliModel } = cliConfig\n const symlinkDirs = resolveReferenceDirs(skillDir)\n const args = CLI_BUILD_ARGS[cli](cliModel, skillDir, symlinkDirs)\n const parseLine = CLI_PARSE_LINE[cli]\n\n const skilldDir = join(skillDir, '.skilld')\n const outputPath = join(skilldDir, outputFile)\n\n // Remove stale output so we don't read a leftover from a previous run\n if (existsSync(outputPath))\n unlinkSync(outputPath)\n\n // Write prompt for debugging\n writeFileSync(join(skilldDir, `PROMPT_${section}.md`), prompt)\n\n return new Promise<SectionResult>((resolve) => {\n const proc = spawn(cli, args, {\n cwd: skilldDir,\n stdio: ['pipe', 'pipe', 'pipe'],\n timeout,\n env: { ...process.env, NO_COLOR: '1' },\n })\n\n let buffer = ''\n let accumulatedText = ''\n let lastWriteContent = ''\n let usage: { input: number, output: number } | undefined\n let cost: number | undefined\n const rawLines: string[] = []\n\n onProgress?.({ chunk: '[starting...]', type: 'reasoning', text: '', reasoning: '', section })\n\n proc.stdin.write(prompt)\n proc.stdin.end()\n\n proc.stdout.on('data', (chunk: Buffer) => {\n buffer += chunk.toString()\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n if (!line.trim())\n continue\n if (debug)\n rawLines.push(line)\n const evt = parseLine(line)\n\n if (evt.textDelta)\n accumulatedText += evt.textDelta\n if (evt.fullText)\n accumulatedText = evt.fullText\n\n if (evt.writeContent)\n lastWriteContent = evt.writeContent\n\n if (evt.toolName) {\n const hint = evt.toolHint\n ? `[${evt.toolName}: ${evt.toolHint}]`\n : `[${evt.toolName}]`\n onProgress?.({ chunk: hint, type: 'reasoning', text: '', reasoning: hint, section })\n }\n\n if (evt.usage)\n usage = evt.usage\n if (evt.cost != null)\n cost = evt.cost\n }\n })\n\n let stderr = ''\n proc.stderr.on('data', (chunk: Buffer) => {\n stderr += chunk.toString()\n })\n\n proc.on('close', (code) => {\n // Drain remaining buffer for metadata\n if (buffer.trim()) {\n const evt = parseLine(buffer)\n if (evt.textDelta)\n accumulatedText += evt.textDelta\n if (evt.fullText)\n accumulatedText = evt.fullText\n if (evt.writeContent)\n lastWriteContent = evt.writeContent\n if (evt.usage)\n usage = evt.usage\n if (evt.cost != null)\n cost = evt.cost\n }\n\n // Remove unexpected files the LLM may have written (prompt injection defense)\n // Only clean files not in the pre-existing snapshot and not our expected output\n for (const entry of readdirSync(skilldDir)) {\n if (entry !== outputFile && !preExistingFiles.has(entry)) {\n // Allow other section output files and debug prompts\n if (Object.values(SECTION_OUTPUT_FILES).includes(entry))\n continue\n if (entry.startsWith('PROMPT_') || entry === 'logs')\n continue\n try {\n unlinkSync(join(skilldDir, entry))\n }\n catch {}\n }\n }\n\n // Prefer file written by LLM, fall back to Write tool content (if denied), then accumulated stdout\n const raw = (existsSync(outputPath) ? readFileSync(outputPath, 'utf-8') : lastWriteContent || accumulatedText).trim()\n\n // Always write stderr on failure; write all logs in debug mode\n const logsDir = join(skilldDir, 'logs')\n const logName = section.toUpperCase().replace(/-/g, '_')\n if (debug || (stderr && (!raw || code !== 0))) {\n mkdirSync(logsDir, { recursive: true })\n if (stderr)\n writeFileSync(join(logsDir, `${logName}.stderr.log`), stderr)\n }\n if (debug) {\n mkdirSync(logsDir, { recursive: true })\n if (rawLines.length)\n writeFileSync(join(logsDir, `${logName}.jsonl`), rawLines.join('\\n'))\n if (raw)\n writeFileSync(join(logsDir, `${logName}.md`), raw)\n }\n\n if (!raw && code !== 0) {\n resolve({ section, content: '', wasOptimized: false, error: stderr.trim() || `CLI exited with code ${code}` })\n return\n }\n\n // Clean the section output (strip markdown fences, frontmatter, sanitize)\n const content = raw ? cleanSectionOutput(raw) : ''\n\n if (content) {\n // Write cleaned content back to the output file for debugging\n writeFileSync(outputPath, content)\n }\n\n const validator = getSectionValidator(section)\n const rawWarnings = content && validator ? validator(content) : []\n const warnings: ValidationWarning[] = rawWarnings.map(w => ({ section, warning: w.warning }))\n\n resolve({\n section,\n content,\n wasOptimized: !!content,\n warnings: warnings?.length ? warnings : undefined,\n usage,\n cost,\n })\n })\n\n proc.on('error', (err) => {\n resolve({ section, content: '', wasOptimized: false, error: err.message })\n })\n })\n}\n\n// ── Main orchestrator ────────────────────────────────────────────────\n\nexport async function optimizeDocs(opts: OptimizeDocsOptions): Promise<OptimizeResult> {\n const { packageName, skillDir, model = 'sonnet', version, hasGithub, hasReleases, hasChangelog, docFiles, docsType, hasShippedDocs, onProgress, timeout = 180000, debug, noCache, sections, customPrompt, features, pkgFiles } = opts\n\n const selectedSections = sections ?? ['api-changes', 'best-practices'] as SkillSection[]\n\n // Build all section prompts\n const sectionPrompts = buildAllSectionPrompts({\n packageName,\n skillDir,\n version,\n hasIssues: hasGithub,\n hasDiscussions: hasGithub,\n hasReleases,\n hasChangelog,\n docFiles,\n docsType,\n hasShippedDocs,\n customPrompt,\n features,\n pkgFiles,\n sections: selectedSections,\n })\n\n if (sectionPrompts.size === 0) {\n return { optimized: '', wasOptimized: false, error: 'No valid sections to generate' }\n }\n\n const cliConfig = CLI_MODELS[model]\n if (!cliConfig) {\n return { optimized: '', wasOptimized: false, error: `No CLI mapping for model: ${model}` }\n }\n\n // Check per-section cache: references dir first (version-keyed), then LLM cache (prompt-hashed)\n const cachedResults: SectionResult[] = []\n const uncachedSections: Array<{ section: SkillSection, prompt: string }> = []\n\n for (const [section, prompt] of sectionPrompts) {\n if (!noCache) {\n // Check global references dir (cross-project, version-keyed)\n if (version) {\n const outputFile = SECTION_OUTPUT_FILES[section]\n const refCached = readCachedSection(packageName, version, outputFile)\n if (refCached) {\n onProgress?.({ chunk: `[${section}: cached]`, type: 'text', text: refCached, reasoning: '', section })\n cachedResults.push({ section, content: refCached, wasOptimized: true })\n continue\n }\n }\n\n // Check LLM prompt-hash cache\n const cached = getCached(prompt, model, section)\n if (cached) {\n onProgress?.({ chunk: `[${section}: cached]`, type: 'text', text: cached, reasoning: '', section })\n cachedResults.push({ section, content: cached, wasOptimized: true })\n continue\n }\n }\n uncachedSections.push({ section, prompt })\n }\n\n // Prepare .skilld/ dir and snapshot before spawns\n const skilldDir = join(skillDir, '.skilld')\n mkdirSync(skilldDir, { recursive: true })\n\n // Pre-flight: warn about broken symlinks in .skilld/ (avoids wasting tokens on missing refs)\n for (const entry of readdirSync(skilldDir)) {\n const entryPath = join(skilldDir, entry)\n try {\n if (lstatSync(entryPath).isSymbolicLink() && !existsSync(entryPath))\n onProgress?.({ chunk: `[warn: broken symlink .skilld/${entry}]`, type: 'reasoning', text: '', reasoning: '' })\n }\n catch {}\n }\n\n const preExistingFiles = new Set(readdirSync(skilldDir))\n\n // Spawn uncached sections with staggered starts to avoid rate-limit collisions\n const STAGGER_MS = 3000\n const spawnResults = uncachedSections.length > 0\n ? await Promise.allSettled(\n uncachedSections.map(({ section, prompt }, i) => {\n const outputFile = SECTION_OUTPUT_FILES[section]\n const run = () => optimizeSection({\n section,\n prompt,\n outputFile,\n skillDir,\n model,\n packageName,\n onProgress,\n timeout,\n debug,\n preExistingFiles,\n })\n // Stagger: first section starts immediately, rest delayed\n if (i === 0)\n return run()\n return delay(i * STAGGER_MS).then(run)\n }),\n )\n : []\n\n // Collect results, retry failed sections once\n const allResults: SectionResult[] = [...cachedResults]\n let totalUsage: { input: number, output: number } | undefined\n let totalCost = 0\n const retryQueue: Array<{ index: number, section: SkillSection, prompt: string }> = []\n\n for (let i = 0; i < spawnResults.length; i++) {\n const r = spawnResults[i]!\n const { section, prompt } = uncachedSections[i]!\n if (r.status === 'fulfilled' && r.value.wasOptimized) {\n allResults.push(r.value)\n if (r.value.usage) {\n totalUsage = totalUsage ?? { input: 0, output: 0 }\n totalUsage.input += r.value.usage.input\n totalUsage.output += r.value.usage.output\n }\n if (r.value.cost != null)\n totalCost += r.value.cost\n if (!noCache)\n setCache(prompt, model, section, r.value.content)\n }\n else {\n retryQueue.push({ index: i, section, prompt })\n }\n }\n\n // Retry failed sections once (sequential to avoid rate limits)\n for (const { section, prompt } of retryQueue) {\n onProgress?.({ chunk: `[${section}: retrying...]`, type: 'reasoning', text: '', reasoning: '', section })\n await delay(STAGGER_MS)\n const result = await optimizeSection({\n section,\n prompt,\n outputFile: SECTION_OUTPUT_FILES[section],\n skillDir,\n model,\n packageName,\n onProgress,\n timeout,\n debug,\n preExistingFiles,\n }).catch((err: Error) => ({ section, content: '', wasOptimized: false, error: err.message }) as SectionResult)\n\n allResults.push(result)\n if (result.wasOptimized && !noCache)\n setCache(prompt, model, section, result.content)\n if (result.usage) {\n totalUsage = totalUsage ?? { input: 0, output: 0 }\n totalUsage.input += result.usage.input\n totalUsage.output += result.usage.output\n }\n if (result.cost != null)\n totalCost += result.cost\n }\n\n // Write successful sections to global references dir for cross-project reuse\n if (version) {\n const sectionFiles = allResults\n .filter(r => r.wasOptimized && r.content)\n .map(r => ({ file: SECTION_OUTPUT_FILES[r.section], content: r.content }))\n if (sectionFiles.length > 0) {\n writeSections(packageName, version, sectionFiles)\n }\n }\n\n // Merge results in SECTION_MERGE_ORDER\n const mergedParts: string[] = []\n for (const section of SECTION_MERGE_ORDER) {\n const result = allResults.find(r => r.section === section)\n if (result?.wasOptimized && result.content) {\n mergedParts.push(result.content)\n }\n }\n\n const optimized = mergedParts.join('\\n\\n')\n const wasOptimized = mergedParts.length > 0\n\n const usageResult = totalUsage\n ? { inputTokens: totalUsage.input, outputTokens: totalUsage.output, totalTokens: totalUsage.input + totalUsage.output }\n : undefined\n\n // Collect errors and warnings from sections\n const errors = allResults.filter(r => r.error).map(r => `${r.section}: ${r.error}`)\n const warnings = allResults.flatMap(r => r.warnings ?? []).map(w => `${w.section}: ${w.warning}`)\n\n const debugLogsDir = debug && uncachedSections.length > 0\n ? join(skillDir, '.skilld', 'logs')\n : undefined\n\n return {\n optimized,\n wasOptimized,\n error: errors.length > 0 ? errors.join('; ') : undefined,\n warnings: warnings.length > 0 ? warnings : undefined,\n finishReason: wasOptimized ? 'stop' : 'error',\n usage: usageResult,\n cost: totalCost || undefined,\n debugLogsDir,\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────\n\n/** Shorten absolute paths for display: /home/.../.skilld/docs/guide.md → docs/guide.md */\nfunction shortenPath(p: string): string {\n const refIdx = p.indexOf('.skilld/')\n if (refIdx !== -1)\n return p.slice(refIdx + '.skilld/'.length)\n // Keep just filename for other paths\n const parts = p.split('/')\n return parts.length > 2 ? `.../${parts.slice(-2).join('/')}` : p\n}\n\n/** Clean a single section's LLM output: strip markdown fences, frontmatter, sanitize */\nexport function cleanSectionOutput(content: string): string {\n let cleaned = content.trim()\n\n // Strip wrapping fences if output is wrapped in ```markdown, ```md, or bare ```\n // Requires matched open+close pair to avoid stripping internal code blocks\n const wrapMatch = cleaned.match(/^```(?:markdown|md)?[^\\S\\n]*\\n([\\s\\S]+)\\n```[^\\S\\n]*$/)\n if (wrapMatch) {\n const inner = wrapMatch[1]!.trim()\n // For bare ``` wrappers (no markdown/md tag), verify inner looks like section output\n const isExplicitWrapper = /^```(?:markdown|md)/.test(cleaned)\n if (isExplicitWrapper || /^##\\s/m.test(inner) || /^- (?:BREAKING|DEPRECATED|NEW): /m.test(inner)) {\n cleaned = inner\n }\n }\n\n // Strip accidental frontmatter or leading horizontal rules\n const fmMatch = cleaned.match(/^-{3,}\\n/)\n if (fmMatch) {\n const afterOpen = fmMatch[0].length\n const closeMatch = cleaned.slice(afterOpen).match(/\\n-{3,}/)\n if (closeMatch) {\n cleaned = cleaned.slice(afterOpen + closeMatch.index! + closeMatch[0].length).trim()\n }\n else {\n cleaned = cleaned.slice(afterOpen).trim()\n }\n }\n\n // Strip raw code preamble before first section marker (defense against LLMs dumping source)\n // Section markers: ## heading, BREAKING/DEPRECATED/NEW labels\n const firstMarker = cleaned.match(/^(##\\s|- (?:BREAKING|DEPRECATED|NEW): )/m)\n if (firstMarker?.index && firstMarker.index > 0) {\n const preamble = cleaned.slice(0, firstMarker.index)\n // Only strip if preamble looks like code (contains function/const/export/return patterns)\n if (/\\b(?:function|const |let |var |export |return |import |async |class )\\b/.test(preamble)) {\n cleaned = cleaned.slice(firstMarker.index).trim()\n }\n }\n\n // Strip duplicate section headings (LLM echoing the format example before real content)\n // Handles headings separated by blank lines or boilerplate text\n const headingMatch = cleaned.match(/^(## .+)\\n/)\n if (headingMatch) {\n const heading = headingMatch[1]!\n const afterFirst = headingMatch[0].length\n const secondIdx = cleaned.indexOf(heading, afterFirst)\n if (secondIdx !== -1) {\n // Only strip if the gap between duplicates is small (< 200 chars of boilerplate)\n if (secondIdx - afterFirst < 200)\n cleaned = cleaned.slice(secondIdx).trim()\n }\n }\n\n // Normalize source link paths: ensure .skilld/ prefix is present\n // LLMs sometimes emit [source](./docs/...) instead of [source](./.skilld/docs/...)\n cleaned = cleaned.replace(\n /\\[source\\]\\(\\.\\/((docs|issues|discussions|releases|pkg|guide)\\/)/g,\n '[source](./.skilld/$1',\n )\n\n cleaned = sanitizeMarkdown(cleaned)\n\n // Reject content that lacks any section structure — likely leaked LLM reasoning/narration\n // Valid sections contain headings (##), API change labels, or source-linked items\n if (!/^##\\s/m.test(cleaned) && !/^- (?:BREAKING|DEPRECATED|NEW): /m.test(cleaned) && !/\\[source\\]/.test(cleaned)) {\n return ''\n }\n\n return cleaned\n}\n","/**\n * Detect packages from framework presets (e.g., Nuxt modules in nuxt.config)\n * These are string literals in config arrays, not imports — the import scanner misses them.\n */\n\nimport type { PackageUsage } from './detect-imports.ts'\nimport { readFile } from 'node:fs/promises'\nimport { parseSync } from 'oxc-parser'\nimport { join } from 'pathe'\n\nconst NUXT_CONFIG_FILES = ['nuxt.config.ts', 'nuxt.config.js', 'nuxt.config.mjs']\nconst NUXT_ECOSYSTEM = ['vue', 'nitro', 'h3']\n\nasync function findNuxtConfig(cwd: string): Promise<{ path: string, content: string } | null> {\n for (const name of NUXT_CONFIG_FILES) {\n const path = join(cwd, name)\n const content = await readFile(path, 'utf8').catch(() => null)\n if (content)\n return { path, content }\n }\n return null\n}\n\n/**\n * Walk AST node to find all string values inside a `modules` array property.\n * Handles: defineNuxtConfig({ modules: [...] }) and export default { modules: [...] }\n */\nexport function extractModuleStrings(node: any): string[] {\n if (!node || typeof node !== 'object')\n return []\n\n // Found a Property with key \"modules\" and an ArrayExpression value\n if (node.type === 'Property' && !node.computed\n && (node.key?.type === 'Identifier' && node.key.name === 'modules')\n && node.value?.type === 'ArrayExpression') { return node.value.elements.filter((el: any) => el?.type === 'Literal' && typeof el.value === 'string').map((el: any) => el.value as string) }\n\n // Recurse into arrays and object values\n const results: string[] = []\n if (Array.isArray(node)) {\n for (const child of node)\n results.push(...extractModuleStrings(child))\n }\n else {\n for (const key of Object.keys(node)) {\n if (key === 'start' || key === 'end' || key === 'type')\n continue\n const val = node[key]\n if (val && typeof val === 'object')\n results.push(...extractModuleStrings(val))\n }\n }\n return results\n}\n\n/**\n * Detect Nuxt modules from nuxt.config.{ts,js,mjs}\n */\nexport async function detectNuxtModules(cwd: string): Promise<PackageUsage[]> {\n const config = await findNuxtConfig(cwd)\n if (!config)\n return []\n\n const result = parseSync(config.path, config.content)\n const modules = extractModuleStrings(result.program)\n\n // Dedupe and build results\n const seen = new Set<string>()\n const packages: PackageUsage[] = []\n\n for (const mod of modules) {\n if (!seen.has(mod)) {\n seen.add(mod)\n packages.push({ name: mod, count: 0, source: 'preset' })\n }\n }\n\n // Add core ecosystem packages\n for (const pkg of NUXT_ECOSYSTEM) {\n if (!seen.has(pkg)) {\n seen.add(pkg)\n packages.push({ name: pkg, count: 0, source: 'preset' })\n }\n }\n\n return packages\n}\n\n/**\n * Run all preset detectors and merge results\n */\nexport async function detectPresetPackages(cwd: string): Promise<PackageUsage[]> {\n // Currently only Nuxt, but extensible for other frameworks\n return detectNuxtModules(cwd)\n}\n","/**\n * Detect directly-used npm packages by scanning source files\n * Uses mlly for proper ES module parsing + globby for gitignore support\n */\n\nimport { readFile } from 'node:fs/promises'\nimport { globby } from 'globby'\nimport { findDynamicImports, findStaticImports } from 'mlly'\nimport { detectPresetPackages } from './detect-presets.ts'\n\nexport interface PackageUsage {\n name: string\n count: number\n source?: 'import' | 'preset'\n}\n\nexport interface DetectResult {\n packages: PackageUsage[]\n error?: string\n}\n\nconst PATTERNS = ['**/*.{ts,js,vue,mjs,cjs,tsx,jsx,mts,cts}']\nconst IGNORE = ['**/node_modules/**', '**/dist/**', '**/.nuxt/**', '**/.output/**', '**/coverage/**']\n\nfunction addPackage(counts: Map<string, number>, specifier: string | undefined) {\n if (!specifier || specifier.startsWith('.') || specifier.startsWith('/'))\n return\n\n // Extract package name (handle subpaths like 'pkg/subpath')\n const name = specifier.startsWith('@')\n ? specifier.split('/').slice(0, 2).join('/')\n : specifier.split('/')[0]!\n\n if (!isNodeBuiltin(name)) {\n counts.set(name, (counts.get(name) || 0) + 1)\n }\n}\n\n/**\n * Scan source files to detect all directly-imported npm packages\n * Async with gitignore support for proper spinner animation\n */\nexport async function detectImportedPackages(cwd: string = process.cwd()): Promise<DetectResult> {\n try {\n const counts = new Map<string, number>()\n\n const files = await globby(PATTERNS, {\n cwd,\n ignore: IGNORE,\n gitignore: true,\n absolute: true,\n })\n\n await Promise.all(files.map(async (file) => {\n const content = await readFile(file, 'utf8')\n\n // Static: import x from 'pkg'\n for (const imp of findStaticImports(content)) {\n addPackage(counts, imp.specifier)\n }\n\n // Dynamic: import('pkg') - expression is the string literal\n for (const imp of findDynamicImports(content)) {\n // expression includes quotes, extract string value\n const match = imp.expression.match(/^['\"]([^'\"]+)['\"]$/)\n if (match)\n addPackage(counts, match[1]!)\n }\n }))\n\n // Sort by usage count (descending), then alphabetically\n const packages: PackageUsage[] = [...counts.entries()]\n .map(([name, count]) => ({ name, count, source: 'import' as const }))\n .sort((a, b) => b.count - a.count || a.name.localeCompare(b.name))\n\n // Merge preset-detected packages (imports take priority)\n const presets = await detectPresetPackages(cwd)\n const importNames = new Set(packages.map(p => p.name))\n for (const preset of presets) {\n if (!importNames.has(preset.name))\n packages.push(preset)\n }\n\n return { packages }\n }\n catch (err) {\n return { packages: [], error: String(err) }\n }\n}\n\nconst NODE_BUILTINS = new Set([\n 'assert',\n 'buffer',\n 'child_process',\n 'cluster',\n 'console',\n 'constants',\n 'crypto',\n 'dgram',\n 'dns',\n 'domain',\n 'events',\n 'fs',\n 'http',\n 'https',\n 'module',\n 'net',\n 'os',\n 'path',\n 'perf_hooks',\n 'process',\n 'punycode',\n 'querystring',\n 'readline',\n 'repl',\n 'stream',\n 'string_decoder',\n 'sys',\n 'timers',\n 'tls',\n 'tty',\n 'url',\n 'util',\n 'v8',\n 'vm',\n 'wasi',\n 'worker_threads',\n 'zlib',\n])\n\nfunction isNodeBuiltin(pkg: string): boolean {\n const base = pkg.startsWith('node:') ? pkg.slice(5) : pkg\n return NODE_BUILTINS.has(base.split('/')[0]!)\n}\n"],"mappings":"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"}
@@ -370,8 +370,9 @@ const REPO_REGISTRY = {
370
370
  "quasarframework/quasar": {
371
371
  owner: "quasarframework",
372
372
  repo: "quasar",
373
+ docsPath: "docs/src/pages",
374
+ docsRef: "dev",
373
375
  homepage: "https://quasar.dev",
374
- crawlUrl: "https://quasar.dev/**",
375
376
  packages: { quasar: { primary: true } }
376
377
  },
377
378
  "motiondivision/motion-vue": {
@@ -1 +1 @@
1
- {"version":3,"file":"package-registry.mjs","names":[],"sources":["../../src/sources/package-registry.ts"],"sourcesContent":["/**\n * Unified package registry — single source of truth for package metadata.\n * Consolidates doc overrides, blog presets, and file patterns.\n * Keyed by GitHub 'owner/repo' (source code repo).\n */\n\nexport interface BlogRelease {\n version: string\n url: string\n date: string\n title?: string\n}\n\nexport interface PackageEntry {\n filePatterns?: string[]\n primary?: boolean\n /** Extra rules injected into skill generation prompts */\n rules?: string[]\n}\n\nexport interface RepoEntry {\n owner: string\n repo: string\n /** Separate docs repo name (e.g. 'docs' → owner/docs) */\n docsRepo?: string\n /** Path prefix to filter markdown files */\n docsPath?: string\n /** Branch/ref override */\n docsRef?: string\n /** Homepage URL */\n homepage?: string\n /** URL pattern to crawl for docs (glob, e.g. 'https://example.com/docs/**') */\n crawlUrl?: string\n /** Branch to fetch CHANGELOG.md from when installed version is a prerelease (e.g. 'minor' for Vue) */\n prereleaseChangelogRef?: string\n /** Packages in this repo */\n packages: Record<string, PackageEntry>\n /** Curated blog release posts */\n blogReleases?: BlogRelease[]\n}\n\n// Backwards-compatible types\nexport interface DocOverride {\n owner: string\n repo: string\n path: string\n ref?: string\n homepage?: string\n}\n\nexport interface BlogPreset {\n packageName: string\n releases: BlogRelease[]\n}\n\n// ── Registry ──\n\nconst REPO_REGISTRY: Record<string, RepoEntry> = {\n // ── Frameworks with doc overrides ──\n\n 'vuejs/core': {\n owner: 'vuejs',\n repo: 'core',\n docsRepo: 'docs',\n docsPath: 'src',\n homepage: 'https://vuejs.org',\n prereleaseChangelogRef: 'minor',\n packages: {\n 'vue': { primary: true, filePatterns: ['*.vue'], rules: ['ALWAYS use `<script setup lang=\"ts\">`', 'Use ```vue code fences for SFC examples containing `<script>` or `<template>` tags, ```ts for plain TypeScript'] },\n '@vue/compiler-core': {},\n '@vue/compiler-dom': {},\n '@vue/reactivity': {},\n '@vue/runtime-core': {},\n '@vue/runtime-dom': {},\n '@vue/shared': {},\n },\n blogReleases: [\n { version: '3.5', url: 'https://blog.vuejs.org/posts/vue-3-5', date: '2024-09-01' },\n { version: '3.4', url: 'https://blog.vuejs.org/posts/vue-3-4', date: '2023-12-28' },\n { version: '3.3', url: 'https://blog.vuejs.org/posts/vue-3-3', date: '2023-05-11' },\n { version: '3.2', url: 'https://blog.vuejs.org/posts/vue-3-2', date: '2021-08-05' },\n { version: '3.1', url: 'https://blog.vuejs.org/posts/vue-3-1', date: '2021-06-07' },\n { version: '3.0', url: 'https://blog.vuejs.org/posts/vue-3-0', date: '2020-09-18' },\n ],\n },\n\n 'tailwindlabs/tailwindcss': {\n owner: 'tailwindlabs',\n repo: 'tailwindcss',\n docsRepo: 'tailwindcss.com',\n docsPath: 'src/docs',\n homepage: 'https://tailwindcss.com',\n packages: {\n tailwindcss: { primary: true },\n },\n },\n\n 'withastro/astro': {\n owner: 'withastro',\n repo: 'astro',\n docsRepo: 'docs',\n docsPath: 'src/content/docs/en',\n homepage: 'https://docs.astro.build',\n packages: {\n astro: { primary: true, filePatterns: ['*.astro'] },\n },\n },\n\n 'vueuse/vueuse': {\n owner: 'vueuse',\n repo: 'vueuse',\n docsPath: 'packages',\n packages: {\n '@vueuse/core': { primary: true },\n },\n },\n\n // ── Frameworks (file patterns only) ──\n\n 'sveltejs/svelte': {\n owner: 'sveltejs',\n repo: 'svelte',\n packages: {\n svelte: { primary: true, filePatterns: ['*.svelte'], rules: ['ALWAYS use runes syntax ($state, $derived, $effect, $props)'] },\n },\n },\n\n 'solidjs/solid': {\n owner: 'solidjs',\n repo: 'solid',\n packages: {\n 'solid-js': { primary: true, filePatterns: ['*.jsx', '*.tsx'] },\n },\n },\n\n 'QwikDev/qwik': {\n owner: 'QwikDev',\n repo: 'qwik',\n packages: {\n qwik: { primary: true, filePatterns: ['*.tsx'] },\n },\n },\n\n 'marko-js/marko': {\n owner: 'marko-js',\n repo: 'marko',\n packages: {\n marko: { primary: true, filePatterns: ['*.marko'] },\n },\n },\n\n 'riot/riot': {\n owner: 'riot',\n repo: 'riot',\n packages: {\n riot: { primary: true, filePatterns: ['*.riot'] },\n },\n },\n\n // ── Languages/transpilers ──\n\n 'microsoft/TypeScript': {\n owner: 'microsoft',\n repo: 'TypeScript',\n packages: {\n typescript: { primary: true, filePatterns: ['*.ts', '*.tsx', '*.mts', '*.cts'] },\n },\n blogReleases: [\n { version: '6.0', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-beta/', date: '2026-02-11', title: 'Announcing TypeScript 6.0 Beta' },\n { version: '5.9', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-9/', date: '2025-08-01', title: 'Announcing TypeScript 5.9' },\n { version: '5.8', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-8/', date: '2025-02-28', title: 'Announcing TypeScript 5.8' },\n { version: '5.7', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/', date: '2024-11-22', title: 'Announcing TypeScript 5.7' },\n { version: '5.6', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-6/', date: '2024-09-09', title: 'Announcing TypeScript 5.6' },\n { version: '5.5', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-5/', date: '2024-06-20', title: 'Announcing TypeScript 5.5' },\n ],\n },\n\n 'jashkenas/coffeescript': {\n owner: 'jashkenas',\n repo: 'coffeescript',\n packages: {\n coffeescript: { primary: true, filePatterns: ['*.coffee'] },\n },\n },\n\n 'gkz/LiveScript': {\n owner: 'gkz',\n repo: 'LiveScript',\n packages: {\n livescript: { primary: true, filePatterns: ['*.ls'] },\n },\n },\n\n 'elm/compiler': {\n owner: 'elm',\n repo: 'compiler',\n packages: {\n elm: { primary: true, filePatterns: ['*.elm'] },\n },\n },\n\n // ── CSS preprocessors ──\n\n 'sass/dart-sass': {\n owner: 'sass',\n repo: 'dart-sass',\n packages: {\n sass: { primary: true, filePatterns: ['*.scss', '*.sass'] },\n },\n },\n\n 'less/less.js': {\n owner: 'less',\n repo: 'less.js',\n packages: {\n less: { primary: true, filePatterns: ['*.less'] },\n },\n },\n\n 'stylus/stylus': {\n owner: 'stylus',\n repo: 'stylus',\n packages: {\n stylus: { primary: true, filePatterns: ['*.styl'] },\n },\n },\n\n 'postcss/postcss': {\n owner: 'postcss',\n repo: 'postcss',\n packages: {\n postcss: { primary: true, filePatterns: ['*.css', '*.pcss'] },\n },\n },\n\n // ── Template engines ──\n\n 'pugjs/pug': {\n owner: 'pugjs',\n repo: 'pug',\n packages: {\n pug: { primary: true, filePatterns: ['*.pug'] },\n },\n },\n\n 'mde/ejs': {\n owner: 'mde',\n repo: 'ejs',\n packages: {\n ejs: { primary: true, filePatterns: ['*.ejs'] },\n },\n },\n\n 'handlebars-lang/handlebars.js': {\n owner: 'handlebars-lang',\n repo: 'handlebars.js',\n packages: {\n handlebars: { primary: true, filePatterns: ['*.hbs', '*.handlebars'] },\n },\n },\n\n 'janl/mustache.js': {\n owner: 'janl',\n repo: 'mustache.js',\n packages: {\n mustache: { primary: true, filePatterns: ['*.mustache'] },\n },\n },\n\n 'mozilla/nunjucks': {\n owner: 'mozilla',\n repo: 'nunjucks',\n packages: {\n nunjucks: { primary: true, filePatterns: ['*.njk'] },\n },\n },\n\n 'Shopify/liquid': {\n owner: 'Shopify',\n repo: 'liquid',\n packages: {\n liquid: { primary: true, filePatterns: ['*.liquid'] },\n },\n },\n\n // ── Data formats ──\n\n 'eemeli/yaml': {\n owner: 'eemeli',\n repo: 'yaml',\n packages: {\n yaml: { primary: true, filePatterns: ['*.yaml', '*.yml'] },\n },\n },\n\n 'nodeca/js-yaml': {\n owner: 'nodeca',\n repo: 'js-yaml',\n packages: {\n 'js-yaml': { primary: true, filePatterns: ['*.yaml', '*.yml'] },\n },\n },\n\n 'BinaryMuse/toml-node': {\n owner: 'BinaryMuse',\n repo: 'toml-node',\n packages: {\n 'toml': { primary: true, filePatterns: ['*.toml'] },\n '@iarna/toml': { filePatterns: ['*.toml'] },\n },\n },\n\n 'json5/json5': {\n owner: 'json5',\n repo: 'json5',\n packages: {\n json5: { primary: true, filePatterns: ['*.json5'] },\n },\n },\n\n 'microsoft/node-jsonc-parser': {\n owner: 'microsoft',\n repo: 'node-jsonc-parser',\n packages: {\n 'jsonc-parser': { primary: true, filePatterns: ['*.jsonc'] },\n },\n },\n\n // ── Markdown ──\n\n 'markdown-it/markdown-it': {\n owner: 'markdown-it',\n repo: 'markdown-it',\n packages: {\n 'markdown-it': { primary: true, filePatterns: ['*.md'] },\n },\n },\n\n 'markedjs/marked': {\n owner: 'markedjs',\n repo: 'marked',\n packages: {\n marked: { primary: true, filePatterns: ['*.md'] },\n },\n },\n\n 'remarkjs/remark': {\n owner: 'remarkjs',\n repo: 'remark',\n packages: {\n remark: { primary: true, filePatterns: ['*.md', '*.mdx'] },\n },\n },\n\n 'mdx-js/mdx': {\n owner: 'mdx-js',\n repo: 'mdx',\n packages: {\n '@mdx-js/mdx': { primary: true, filePatterns: ['*.mdx'] },\n },\n },\n\n // ── GraphQL ──\n\n 'graphql/graphql-js': {\n owner: 'graphql',\n repo: 'graphql-js',\n packages: {\n 'graphql': { primary: true, filePatterns: ['*.graphql', '*.gql'] },\n 'graphql-tag': { filePatterns: ['*.graphql', '*.gql'] },\n },\n },\n\n 'dotansimha/graphql-code-generator': {\n owner: 'dotansimha',\n repo: 'graphql-code-generator',\n packages: {\n '@graphql-codegen/cli': { primary: true, filePatterns: ['*.graphql', '*.gql'] },\n },\n },\n\n // ── UI Frameworks ──\n\n 'quasarframework/quasar': {\n owner: 'quasarframework',\n repo: 'quasar',\n homepage: 'https://quasar.dev',\n crawlUrl: 'https://quasar.dev/**',\n packages: {\n quasar: { primary: true },\n },\n },\n\n // ── Animation ──\n\n 'motiondivision/motion-vue': {\n owner: 'motiondivision',\n repo: 'motion-vue',\n homepage: 'https://motion.dev',\n crawlUrl: 'https://motion.dev/docs/vue**',\n packages: {\n 'motion-v': { primary: true },\n },\n },\n\n // ── Other ──\n\n 'prisma/prisma': {\n owner: 'prisma',\n repo: 'prisma',\n packages: {\n 'prisma': { primary: true, filePatterns: ['*.prisma'] },\n '@prisma/client': { filePatterns: ['*.prisma'] },\n },\n },\n\n 'nicolo-ribaudo/tc39-proposal-wasm-esm-integration': {\n owner: 'nicolo-ribaudo',\n repo: 'tc39-proposal-wasm-esm-integration',\n packages: {\n 'wasm-pack': { primary: true, filePatterns: ['*.wasm'] },\n },\n },\n}\n\n// ── Reverse index (auto-generated) ──\n\nconst PACKAGE_TO_REPO_MAP: Record<string, string> = {}\n\nfor (const [repoKey, entry] of Object.entries(REPO_REGISTRY)) {\n for (const packageName of Object.keys(entry.packages)) {\n PACKAGE_TO_REPO_MAP[packageName] = repoKey\n }\n}\n\n// ── Backwards-compatible helpers ──\n\nexport function getDocOverride(packageName: string): DocOverride | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n const entry = REPO_REGISTRY[repoKey]\n if (!entry?.docsRepo && !entry?.docsPath)\n return undefined\n\n return {\n owner: entry.owner,\n repo: entry.docsRepo || entry.repo,\n path: entry.docsPath || '',\n ref: entry.docsRef,\n homepage: entry.homepage,\n }\n}\n\nexport function getBlogPreset(packageName: string): BlogPreset | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n const entry = REPO_REGISTRY[repoKey]\n if (!entry?.blogReleases)\n return undefined\n\n return {\n packageName,\n releases: entry.blogReleases,\n }\n}\n\nexport function getFilePatterns(packageName: string): string[] | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n return REPO_REGISTRY[repoKey]?.packages[packageName]?.filePatterns\n}\n\n// ── New APIs ──\n\nexport function getRepoEntry(repoKey: string): RepoEntry | undefined {\n return REPO_REGISTRY[repoKey]\n}\n\nexport function getRepoKeyForPackage(packageName: string): string | undefined {\n return PACKAGE_TO_REPO_MAP[packageName]\n}\n\nexport function getPackageRules(packageName: string): string[] {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return []\n return REPO_REGISTRY[repoKey]?.packages[packageName]?.rules ?? []\n}\n\nexport function getPrereleaseChangelogRef(packageName: string): string | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n return REPO_REGISTRY[repoKey]?.prereleaseChangelogRef\n}\n\nexport function getCrawlUrl(packageName: string): string | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n return REPO_REGISTRY[repoKey]?.crawlUrl\n}\n\nexport function getRelatedPackages(packageName: string): string[] {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return []\n const entry = REPO_REGISTRY[repoKey]\n if (!entry)\n return []\n return Object.keys(entry.packages)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"package-registry.mjs","names":[],"sources":["../../src/sources/package-registry.ts"],"sourcesContent":["/**\n * Unified package registry — single source of truth for package metadata.\n * Consolidates doc overrides, blog presets, and file patterns.\n * Keyed by GitHub 'owner/repo' (source code repo).\n */\n\nexport interface BlogRelease {\n version: string\n url: string\n date: string\n title?: string\n}\n\nexport interface PackageEntry {\n filePatterns?: string[]\n primary?: boolean\n /** Extra rules injected into skill generation prompts */\n rules?: string[]\n}\n\nexport interface RepoEntry {\n owner: string\n repo: string\n /** Separate docs repo name (e.g. 'docs' → owner/docs) */\n docsRepo?: string\n /** Path prefix to filter markdown files */\n docsPath?: string\n /** Branch/ref override */\n docsRef?: string\n /** Homepage URL */\n homepage?: string\n /** URL pattern to crawl for docs (glob, e.g. 'https://example.com/docs/**') */\n crawlUrl?: string\n /** Branch to fetch CHANGELOG.md from when installed version is a prerelease (e.g. 'minor' for Vue) */\n prereleaseChangelogRef?: string\n /** Packages in this repo */\n packages: Record<string, PackageEntry>\n /** Curated blog release posts */\n blogReleases?: BlogRelease[]\n}\n\n// Backwards-compatible types\nexport interface DocOverride {\n owner: string\n repo: string\n path: string\n ref?: string\n homepage?: string\n}\n\nexport interface BlogPreset {\n packageName: string\n releases: BlogRelease[]\n}\n\n// ── Registry ──\n\nconst REPO_REGISTRY: Record<string, RepoEntry> = {\n // ── Frameworks with doc overrides ──\n\n 'vuejs/core': {\n owner: 'vuejs',\n repo: 'core',\n docsRepo: 'docs',\n docsPath: 'src',\n homepage: 'https://vuejs.org',\n prereleaseChangelogRef: 'minor',\n packages: {\n 'vue': { primary: true, filePatterns: ['*.vue'], rules: ['ALWAYS use `<script setup lang=\"ts\">`', 'Use ```vue code fences for SFC examples containing `<script>` or `<template>` tags, ```ts for plain TypeScript'] },\n '@vue/compiler-core': {},\n '@vue/compiler-dom': {},\n '@vue/reactivity': {},\n '@vue/runtime-core': {},\n '@vue/runtime-dom': {},\n '@vue/shared': {},\n },\n blogReleases: [\n { version: '3.5', url: 'https://blog.vuejs.org/posts/vue-3-5', date: '2024-09-01' },\n { version: '3.4', url: 'https://blog.vuejs.org/posts/vue-3-4', date: '2023-12-28' },\n { version: '3.3', url: 'https://blog.vuejs.org/posts/vue-3-3', date: '2023-05-11' },\n { version: '3.2', url: 'https://blog.vuejs.org/posts/vue-3-2', date: '2021-08-05' },\n { version: '3.1', url: 'https://blog.vuejs.org/posts/vue-3-1', date: '2021-06-07' },\n { version: '3.0', url: 'https://blog.vuejs.org/posts/vue-3-0', date: '2020-09-18' },\n ],\n },\n\n 'tailwindlabs/tailwindcss': {\n owner: 'tailwindlabs',\n repo: 'tailwindcss',\n docsRepo: 'tailwindcss.com',\n docsPath: 'src/docs',\n homepage: 'https://tailwindcss.com',\n packages: {\n tailwindcss: { primary: true },\n },\n },\n\n 'withastro/astro': {\n owner: 'withastro',\n repo: 'astro',\n docsRepo: 'docs',\n docsPath: 'src/content/docs/en',\n homepage: 'https://docs.astro.build',\n packages: {\n astro: { primary: true, filePatterns: ['*.astro'] },\n },\n },\n\n 'vueuse/vueuse': {\n owner: 'vueuse',\n repo: 'vueuse',\n docsPath: 'packages',\n packages: {\n '@vueuse/core': { primary: true },\n },\n },\n\n // ── Frameworks (file patterns only) ──\n\n 'sveltejs/svelte': {\n owner: 'sveltejs',\n repo: 'svelte',\n packages: {\n svelte: { primary: true, filePatterns: ['*.svelte'], rules: ['ALWAYS use runes syntax ($state, $derived, $effect, $props)'] },\n },\n },\n\n 'solidjs/solid': {\n owner: 'solidjs',\n repo: 'solid',\n packages: {\n 'solid-js': { primary: true, filePatterns: ['*.jsx', '*.tsx'] },\n },\n },\n\n 'QwikDev/qwik': {\n owner: 'QwikDev',\n repo: 'qwik',\n packages: {\n qwik: { primary: true, filePatterns: ['*.tsx'] },\n },\n },\n\n 'marko-js/marko': {\n owner: 'marko-js',\n repo: 'marko',\n packages: {\n marko: { primary: true, filePatterns: ['*.marko'] },\n },\n },\n\n 'riot/riot': {\n owner: 'riot',\n repo: 'riot',\n packages: {\n riot: { primary: true, filePatterns: ['*.riot'] },\n },\n },\n\n // ── Languages/transpilers ──\n\n 'microsoft/TypeScript': {\n owner: 'microsoft',\n repo: 'TypeScript',\n packages: {\n typescript: { primary: true, filePatterns: ['*.ts', '*.tsx', '*.mts', '*.cts'] },\n },\n blogReleases: [\n { version: '6.0', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-beta/', date: '2026-02-11', title: 'Announcing TypeScript 6.0 Beta' },\n { version: '5.9', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-9/', date: '2025-08-01', title: 'Announcing TypeScript 5.9' },\n { version: '5.8', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-8/', date: '2025-02-28', title: 'Announcing TypeScript 5.8' },\n { version: '5.7', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/', date: '2024-11-22', title: 'Announcing TypeScript 5.7' },\n { version: '5.6', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-6/', date: '2024-09-09', title: 'Announcing TypeScript 5.6' },\n { version: '5.5', url: 'https://devblogs.microsoft.com/typescript/announcing-typescript-5-5/', date: '2024-06-20', title: 'Announcing TypeScript 5.5' },\n ],\n },\n\n 'jashkenas/coffeescript': {\n owner: 'jashkenas',\n repo: 'coffeescript',\n packages: {\n coffeescript: { primary: true, filePatterns: ['*.coffee'] },\n },\n },\n\n 'gkz/LiveScript': {\n owner: 'gkz',\n repo: 'LiveScript',\n packages: {\n livescript: { primary: true, filePatterns: ['*.ls'] },\n },\n },\n\n 'elm/compiler': {\n owner: 'elm',\n repo: 'compiler',\n packages: {\n elm: { primary: true, filePatterns: ['*.elm'] },\n },\n },\n\n // ── CSS preprocessors ──\n\n 'sass/dart-sass': {\n owner: 'sass',\n repo: 'dart-sass',\n packages: {\n sass: { primary: true, filePatterns: ['*.scss', '*.sass'] },\n },\n },\n\n 'less/less.js': {\n owner: 'less',\n repo: 'less.js',\n packages: {\n less: { primary: true, filePatterns: ['*.less'] },\n },\n },\n\n 'stylus/stylus': {\n owner: 'stylus',\n repo: 'stylus',\n packages: {\n stylus: { primary: true, filePatterns: ['*.styl'] },\n },\n },\n\n 'postcss/postcss': {\n owner: 'postcss',\n repo: 'postcss',\n packages: {\n postcss: { primary: true, filePatterns: ['*.css', '*.pcss'] },\n },\n },\n\n // ── Template engines ──\n\n 'pugjs/pug': {\n owner: 'pugjs',\n repo: 'pug',\n packages: {\n pug: { primary: true, filePatterns: ['*.pug'] },\n },\n },\n\n 'mde/ejs': {\n owner: 'mde',\n repo: 'ejs',\n packages: {\n ejs: { primary: true, filePatterns: ['*.ejs'] },\n },\n },\n\n 'handlebars-lang/handlebars.js': {\n owner: 'handlebars-lang',\n repo: 'handlebars.js',\n packages: {\n handlebars: { primary: true, filePatterns: ['*.hbs', '*.handlebars'] },\n },\n },\n\n 'janl/mustache.js': {\n owner: 'janl',\n repo: 'mustache.js',\n packages: {\n mustache: { primary: true, filePatterns: ['*.mustache'] },\n },\n },\n\n 'mozilla/nunjucks': {\n owner: 'mozilla',\n repo: 'nunjucks',\n packages: {\n nunjucks: { primary: true, filePatterns: ['*.njk'] },\n },\n },\n\n 'Shopify/liquid': {\n owner: 'Shopify',\n repo: 'liquid',\n packages: {\n liquid: { primary: true, filePatterns: ['*.liquid'] },\n },\n },\n\n // ── Data formats ──\n\n 'eemeli/yaml': {\n owner: 'eemeli',\n repo: 'yaml',\n packages: {\n yaml: { primary: true, filePatterns: ['*.yaml', '*.yml'] },\n },\n },\n\n 'nodeca/js-yaml': {\n owner: 'nodeca',\n repo: 'js-yaml',\n packages: {\n 'js-yaml': { primary: true, filePatterns: ['*.yaml', '*.yml'] },\n },\n },\n\n 'BinaryMuse/toml-node': {\n owner: 'BinaryMuse',\n repo: 'toml-node',\n packages: {\n 'toml': { primary: true, filePatterns: ['*.toml'] },\n '@iarna/toml': { filePatterns: ['*.toml'] },\n },\n },\n\n 'json5/json5': {\n owner: 'json5',\n repo: 'json5',\n packages: {\n json5: { primary: true, filePatterns: ['*.json5'] },\n },\n },\n\n 'microsoft/node-jsonc-parser': {\n owner: 'microsoft',\n repo: 'node-jsonc-parser',\n packages: {\n 'jsonc-parser': { primary: true, filePatterns: ['*.jsonc'] },\n },\n },\n\n // ── Markdown ──\n\n 'markdown-it/markdown-it': {\n owner: 'markdown-it',\n repo: 'markdown-it',\n packages: {\n 'markdown-it': { primary: true, filePatterns: ['*.md'] },\n },\n },\n\n 'markedjs/marked': {\n owner: 'markedjs',\n repo: 'marked',\n packages: {\n marked: { primary: true, filePatterns: ['*.md'] },\n },\n },\n\n 'remarkjs/remark': {\n owner: 'remarkjs',\n repo: 'remark',\n packages: {\n remark: { primary: true, filePatterns: ['*.md', '*.mdx'] },\n },\n },\n\n 'mdx-js/mdx': {\n owner: 'mdx-js',\n repo: 'mdx',\n packages: {\n '@mdx-js/mdx': { primary: true, filePatterns: ['*.mdx'] },\n },\n },\n\n // ── GraphQL ──\n\n 'graphql/graphql-js': {\n owner: 'graphql',\n repo: 'graphql-js',\n packages: {\n 'graphql': { primary: true, filePatterns: ['*.graphql', '*.gql'] },\n 'graphql-tag': { filePatterns: ['*.graphql', '*.gql'] },\n },\n },\n\n 'dotansimha/graphql-code-generator': {\n owner: 'dotansimha',\n repo: 'graphql-code-generator',\n packages: {\n '@graphql-codegen/cli': { primary: true, filePatterns: ['*.graphql', '*.gql'] },\n },\n },\n\n // ── UI Frameworks ──\n\n 'quasarframework/quasar': {\n owner: 'quasarframework',\n repo: 'quasar',\n docsPath: 'docs/src/pages',\n docsRef: 'dev',\n homepage: 'https://quasar.dev',\n packages: {\n quasar: { primary: true },\n },\n },\n\n // ── Animation ──\n\n 'motiondivision/motion-vue': {\n owner: 'motiondivision',\n repo: 'motion-vue',\n homepage: 'https://motion.dev',\n crawlUrl: 'https://motion.dev/docs/vue**',\n packages: {\n 'motion-v': { primary: true },\n },\n },\n\n // ── Other ──\n\n 'prisma/prisma': {\n owner: 'prisma',\n repo: 'prisma',\n packages: {\n 'prisma': { primary: true, filePatterns: ['*.prisma'] },\n '@prisma/client': { filePatterns: ['*.prisma'] },\n },\n },\n\n 'nicolo-ribaudo/tc39-proposal-wasm-esm-integration': {\n owner: 'nicolo-ribaudo',\n repo: 'tc39-proposal-wasm-esm-integration',\n packages: {\n 'wasm-pack': { primary: true, filePatterns: ['*.wasm'] },\n },\n },\n}\n\n// ── Reverse index (auto-generated) ──\n\nconst PACKAGE_TO_REPO_MAP: Record<string, string> = {}\n\nfor (const [repoKey, entry] of Object.entries(REPO_REGISTRY)) {\n for (const packageName of Object.keys(entry.packages)) {\n PACKAGE_TO_REPO_MAP[packageName] = repoKey\n }\n}\n\n// ── Backwards-compatible helpers ──\n\nexport function getDocOverride(packageName: string): DocOverride | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n const entry = REPO_REGISTRY[repoKey]\n if (!entry?.docsRepo && !entry?.docsPath)\n return undefined\n\n return {\n owner: entry.owner,\n repo: entry.docsRepo || entry.repo,\n path: entry.docsPath || '',\n ref: entry.docsRef,\n homepage: entry.homepage,\n }\n}\n\nexport function getBlogPreset(packageName: string): BlogPreset | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n const entry = REPO_REGISTRY[repoKey]\n if (!entry?.blogReleases)\n return undefined\n\n return {\n packageName,\n releases: entry.blogReleases,\n }\n}\n\nexport function getFilePatterns(packageName: string): string[] | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n return REPO_REGISTRY[repoKey]?.packages[packageName]?.filePatterns\n}\n\n// ── New APIs ──\n\nexport function getRepoEntry(repoKey: string): RepoEntry | undefined {\n return REPO_REGISTRY[repoKey]\n}\n\nexport function getRepoKeyForPackage(packageName: string): string | undefined {\n return PACKAGE_TO_REPO_MAP[packageName]\n}\n\nexport function getPackageRules(packageName: string): string[] {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return []\n return REPO_REGISTRY[repoKey]?.packages[packageName]?.rules ?? []\n}\n\nexport function getPrereleaseChangelogRef(packageName: string): string | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n return REPO_REGISTRY[repoKey]?.prereleaseChangelogRef\n}\n\nexport function getCrawlUrl(packageName: string): string | undefined {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return undefined\n return REPO_REGISTRY[repoKey]?.crawlUrl\n}\n\nexport function getRelatedPackages(packageName: string): string[] {\n const repoKey = PACKAGE_TO_REPO_MAP[packageName]\n if (!repoKey)\n return []\n const entry = REPO_REGISTRY[repoKey]\n if (!entry)\n return []\n return Object.keys(entry.packages)\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.mts","names":[],"sources":["../../src/sources/blog-releases.ts","../../src/sources/crawl.ts","../../src/sources/discussions.ts","../../src/sources/docs.ts","../../src/sources/entries.ts","../../src/sources/git-skills.ts","../../src/sources/types.ts","../../src/sources/github.ts","../../src/sources/issues.ts","../../src/sources/llms.ts","../../src/sources/npm.ts","../../src/sources/package-registry.ts","../../src/sources/releases.ts","../../src/sources/utils.ts"],"mappings":";;;UAmBU,WAAA;EACR,IAAA;EACA,OAAA;AAAA;;;;;;iBAkFoB,iBAAA,CACpB,WAAA,UACA,gBAAA,WACC,OAAA,CAAQ,WAAA;;;;;;AAzFV;;;;;AAsFD;;;AAtFC,iBCAqB,gBAAA,CACpB,GAAA,UACA,UAAA,IAAc,OAAA,mBACd,QAAA,YACC,OAAA,CAAQ,KAAA;EAAQ,IAAA;EAAc,OAAA;AAAA;;iBAyCjB,cAAA,CAAe,OAAA;;;;;;AD7C9B;;UEQgB,iBAAA;EACf,IAAA;EACA,MAAA;EACA,SAAA;EACA,YAAA;AAAA;AAAA,UAGe,gBAAA;EACf,MAAA;EACA,KAAA;EACA,IAAA;EACA,QAAA;EACA,SAAA;EACA,GAAA;EACA,WAAA;EACA,QAAA;EACA,YAAA;EACA,MAAA;EACA,WAAA,EAAa,iBAAA;AAAA;;;;;;iBA4GO,sBAAA,CACpB,KAAA,UACA,IAAA,UACA,KAAA,WACA,UAAA,WACA,QAAA,YACC,OAAA,CAAQ,gBAAA;AD/FX;;;AAAA,iBCuMgB,0BAAA,CAA2B,CAAA,EAAG,gBAAA;;;;;iBAuC9B,uBAAA,CAAwB,WAAA,EAAa,gBAAA;;;;;;AF3RpD;;;;;AAAA,iBGNe,iBAAA,CAAkB,IAAA,EAAM,KAAA;EAAQ,IAAA;EAAc,OAAA;AAAA;;;UCH7C,SAAA;EACf,IAAA;EACA,OAAA;EACA,IAAA;AAAA;;;;iBAoCoB,iBAAA,CAAkB,UAAA,WAAqB,OAAA,CAAQ,SAAA;;;;;;AJ9BpE;;;UKJgB,cAAA;EACf,IAAA;EACA,KAAA;EACA,IAAA;;EAEA,SAAA;ELsFA;EKpFA,GAAA;ELsFC;EKpFD,SAAA;AAAA;AAAA,UAGe,WAAA;;EAEf,IAAA;;EAEA,WAAA;EJZoC;EIcpC,IAAA;EJVQ;EIYR,OAAA;EJdc;EIgBd,KAAA,EAAO,KAAA;IAAQ,IAAA;IAAc,OAAA;EAAA;AAAA;;;;AJ2B/B;iBIpBgB,kBAAA,CAAmB,KAAA,WAAgB,cAAA;;;;iBA8EnC,yBAAA,CAA0B,OAAA;EAAoB,IAAA;EAAe,WAAA;AAAA;;;;iBAgBvD,cAAA,CACpB,MAAA,EAAQ,cAAA,EACR,UAAA,IAAc,GAAA,oBACb,OAAA;EAAU,MAAA,EAAQ,WAAA;EAAe,SAAA;AAAA;;;;;;UCvInB,cAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,QAAA;EACA,UAAA;IACE,IAAA;IACA,GAAA;IACA,SAAA;EAAA;EAEF,MAAA;EACA,YAAA,GAAe,MAAA;EACf,eAAA,GAAkB,MAAA;EAClB,gBAAA,GAAmB,MAAA;AAAA;AAAA,UAGJ,eAAA;EACf,IAAA;EACA,OAAA;ELLoB;EKOpB,UAAA;EACA,WAAA;ELJQ;EKMR,YAAA,GAAe,MAAA;ELRD;EKUd,QAAA,GAAW,MAAA;IAAiB,OAAA;IAAiB,UAAA;EAAA;EAC7C,OAAA;EACA,OAAA;EACA,SAAA;EACA,OAAA;EL6Bc;EK3Bd,UAAA;;EAEA,MAAA;ELyB4C;EKvB5C,eAAA;;EAEA,QAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;EACA,OAAA;AAAA;AAAA,UAGe,WAAA;EACf,GAAA;EJrBA;EIuBA,KAAA,EAAO,QAAA;AAAA;AAAA,UAGQ,QAAA;EACf,KAAA;EACA,GAAA;AAAA;AAAA,UAGe,UAAA;EACf,GAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,UAGe,cAAA;EACf,MAAA;EACA,GAAA;EACA,MAAA;EACA,OAAA;AAAA;AAAA,UAGe,aAAA;EACf,OAAA,EAAS,eAAA;EACT,QAAA,EAAU,cAAA;AAAA;;;;cC5DC,YAAA;;cAGA,gBAAA,GAAoB,CAAA;AAAA,UAEhB,aAAA;EPmFsB;EOjFrC,OAAA;EPoFQ;EOlFR,GAAA;EPiFA;EO/EA,KAAA;EPgFS;EO9ET,UAAA;EP8EkB;EO5ElB,QAAA;;EAEA,QAAA;AAAA;;;;;;;iBA0Fc,mBAAA,CAAoB,KAAA,YAAiB,WAAA;;;;;iBAyL/B,YAAA,CAAa,KAAA,UAAe,IAAA,UAAc,OAAA,UAAiB,WAAA,WAAsB,OAAA,YAAmB,OAAA,CAAQ,aAAA;;ANrPlI;;;;;iBMuTgB,uBAAA,CACd,SAAA,EAAW,QAAA,IACX,SAAA;EACG,OAAA;EAAkB,UAAA;AAAA;;;;;iBA6ID,mBAAA,CAAoB,KAAA,UAAe,IAAA,UAAc,WAAA,YAAuB,OAAA;EAAU,QAAA;AAAA;;ALrexG;;iBKogBsB,WAAA,CAAY,KAAA,UAAe,IAAA,UAAc,MAAA,WAAiB,GAAA,YAAe,OAAA;AL7Y/F;;;AAAA,iBK0fsB,kBAAA,CAAmB,GAAA,WAAc,OAAA;;;;;iBAiDjC,iBAAA,CACpB,KAAA,UACA,IAAA,UACA,UAAA,IAAc,GAAA,oBACb,OAAA,CAAQ,eAAA;;;;;;APrrBV;;KQNW,SAAA;AAAA,UAEK,YAAA;EACf,IAAA;EACA,MAAA;EACA,SAAA;EACA,YAAA;AAAA;AAAA,UAGe,WAAA;EACf,MAAA;EACA,KAAA;EACA,KAAA;EACA,MAAA;EACA,IAAA;EACA,SAAA;EACA,GAAA;EACA,SAAA;EACA,QAAA;EACA,IAAA,EAAM,SAAA;EACN,WAAA,EAAa,YAAA;EPVL;EOYR,KAAA;EPdc;EOgBd,UAAA;AAAA;;;;iBAQc,aAAA,CAAA;ANXhB;;;;;AAAA,iBMobsB,iBAAA,CACpB,KAAA,UACA,IAAA,UACA,KAAA,WACA,UAAA,WACA,QAAA,YACC,OAAA,CAAQ,WAAA;;;;iBAwBK,qBAAA,CAAsB,KAAA,EAAO,WAAA;;;;;iBA0C7B,kBAAA,CAAmB,MAAA,EAAQ,WAAA;;;;;;iBChhBrB,YAAA,CAAa,OAAA,WAAkB,OAAA;AT2FrD;;;AAAA,iBShFsB,YAAA,CAAa,GAAA,WAAc,OAAA,CAAQ,WAAA;;;;iBAczC,kBAAA,CAAmB,OAAA,WAAkB,QAAA;AAAA,iBA4B/B,gBAAA,CACpB,WAAA,EAAa,WAAA,EACb,OAAA,UACA,UAAA,IAAc,GAAA,UAAa,KAAA,UAAe,KAAA,oBACzC,OAAA,CAAQ,UAAA;;;;;iBAgCK,kBAAA,CAAmB,OAAA,UAAiB,OAAA;;;;;iBAuBpC,eAAA,CAAgB,OAAA,UAAiB,QAAA;;;;;;;iBCvG3B,iBAAA,CAAkB,KAAA,UAAe,IAAA,YAAW,OAAA,CAAQ,KAAA;EAAQ,IAAA;EAAc,WAAA;EAAsB,OAAA;AAAA;;;;iBAkBhG,eAAA,CAAgB,WAAA,WAAsB,OAAA,CAAQ,cAAA;AAAA,UAUnD,WAAA;EACf,OAAA;EACA,UAAA;AAAA;AAAA,UAGe,eAAA;EACf,UAAA;EACA,QAAA,GAAW,MAAA,SAAe,WAAA;AAAA;;;;iBAMN,oBAAA,CAAqB,WAAA,UAAqB,OAAA,WAAkB,OAAA,CAAQ,eAAA;AAAA,KA2B9E,WAAA;AAAA,UAEK,cAAA;ETtEE;ESwEjB,OAAA;;EAEA,GAAA;ETjCc;ESmCd,UAAA,IAAc,IAAA,EAAM,WAAA;AAAA;;;;iBA+FA,kBAAA,CAAmB,WAAA,UAAqB,OAAA,GAAS,cAAA,GAAsB,OAAA,CAAQ,eAAA;;ARvKrG;;iBQ+KsB,8BAAA,CAA+B,WAAA,UAAqB,OAAA,GAAS,cAAA,GAAsB,OAAA,CAAQ,aAAA;;;;iBAwLjG,qBAAA,CACd,IAAA,UACA,OAAA,UACA,GAAA,WACC,eAAA;;;;ARpWH;iBQwZgB,uBAAA,CAAwB,IAAA,UAAc,GAAA;;;;iBA6BhC,qBAAA,CAAsB,GAAA,WAAc,OAAA,CAAQ,eAAA;AAAA,UAwBjD,gBAAA;EACf,IAAA;EACA,OAAA;EACA,WAAA;EACA,OAAA;EACA,SAAA;AAAA;;;;iBAMc,oBAAA,CAAqB,SAAA,WAAoB,gBAAA;;ARjWzD;;iBQ4XsB,uBAAA,CAAwB,SAAA,WAAoB,OAAA,CAAQ,eAAA;;;;;;;;iBAsDpD,YAAA,CAAa,IAAA,UAAc,OAAA,WAAkB,OAAA;;;ARpUnE;iBQ4YsB,kBAAA,CAAmB,WAAA,WAAsB,OAAA;;;;iBAU/C,wBAAA,CAAyB,QAAA;;;;;;AV1oBxC;;UWXgB,WAAA;EACf,OAAA;EACA,GAAA;EACA,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,YAAA;EACf,YAAA;EACA,OAAA;EX2FC;EWzFD,KAAA;AAAA;AAAA,UAGe,SAAA;EACf,KAAA;EACA,IAAA;;EAEA,QAAA;EVPoC;EUSpC,QAAA;EVLQ;EUOR,OAAA;EVTc;EUWd,QAAA;EVVA;EUYA,QAAA;EVXS;EUaT,sBAAA;EVb+B;EUe/B,QAAA,EAAU,MAAA,SAAe,YAAA;EVfa;EUiBtC,YAAA,GAAe,WAAA;AAAA;AAAA,UAIA,WAAA;EACf,KAAA;EACA,IAAA;EACA,IAAA;EACA,GAAA;EACA,QAAA;AAAA;AAAA,UAGe,UAAA;EACf,WAAA;EACA,QAAA,EAAU,WAAA;AAAA;AAAA,iBAiYI,cAAA,CAAe,WAAA,WAAsB,WAAA;AAAA,iBAiBrC,aAAA,CAAc,WAAA,WAAsB,UAAA;AAAA,iBAcpC,eAAA,CAAgB,WAAA;AAAA,iBAShB,YAAA,CAAa,OAAA,WAAkB,SAAA;AAAA,iBAI/B,oBAAA,CAAqB,WAAA;AAAA,iBAWrB,yBAAA,CAA0B,WAAA;AAAA,iBAO1B,WAAA,CAAY,WAAA;AAAA,iBAOZ,kBAAA,CAAmB,WAAA;;;;;;UCjflB,aAAA;EACf,EAAA;EACA,GAAA;EACA,IAAA;EACA,UAAA;EACA,SAAA;EACA,WAAA;EACA,QAAA;AAAA;AAAA,UAOQ,SAAA;EACR,IAAA;EACA,OAAA;AAAA;AAAA,UAGe,MAAA;EACf,KAAA;EACA,KAAA;EACA,KAAA;EACA,GAAA;AAAA;AAAA,iBAGc,WAAA,CAAY,OAAA,WAAkB,MAAA;;;;iBAiD9B,YAAA,CAAa,OAAA;AAAA,iBAIb,aAAA,CAAc,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,MAAA;AAAA,UAoI3B,mBAAA;EACf,QAAA,EAAU,aAAA;EACV,WAAA;EACA,YAAA,GAAe,KAAA;IAAQ,OAAA;IAAiB,KAAA;IAAe,IAAA;EAAA;EACvD,YAAA;AAAA;;;;;iBAOc,oBAAA,CAAqB,cAAA,EAAgB,aAAA,KAAkB,mBAAA,EAAqB,WAAA;;;;;;;;iBA6GtE,iBAAA,CACpB,KAAA,UACA,IAAA,UACA,gBAAA,UACA,MAAA,WACA,WAAA,WACA,QAAA,WACA,YAAA,YACC,OAAA,CAAQ,SAAA;;;;;;cCtVE,MAAA,EAKX,QAAA,CALiB,MAAA;;;;iBAUG,SAAA,CAAU,GAAA,WAAc,OAAA;AbuF9C;;;AAAA,iBahFsB,SAAA,CAAU,GAAA,WAAc,OAAA;;;;iBAkC9B,eAAA,CAAgB,GAAA;;;;iBAahB,cAAA,CAAe,GAAA;EAAgB,KAAA;EAAe,IAAA;AAAA;;;;iBAU9C,gBAAA,CAAiB,GAAA;;;;;iBAejB,gBAAA,CAAiB,IAAA;EAAiB,IAAA;EAAc,GAAA;AAAA;;;;iBAqBhD,iBAAA,CAAkB,GAAA"}
1
+ {"version":3,"file":"utils.d.mts","names":[],"sources":["../../src/sources/blog-releases.ts","../../src/sources/crawl.ts","../../src/sources/discussions.ts","../../src/sources/docs.ts","../../src/sources/entries.ts","../../src/sources/git-skills.ts","../../src/sources/types.ts","../../src/sources/github.ts","../../src/sources/issues.ts","../../src/sources/llms.ts","../../src/sources/npm.ts","../../src/sources/package-registry.ts","../../src/sources/releases.ts","../../src/sources/utils.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/core/config.ts","../../src/agent/prompts/optional/types.ts","../../src/agent/prompts/prompt.ts","../../src/agent/prompts/skill.ts","../../src/agent/types.ts","../../src/agent/clis/types.ts","../../src/agent/clis/index.ts","../../src/agent/detect-imports.ts","../../src/agent/detect.ts","../../src/agent/install.ts","../../src/agent/targets/types.ts","../../src/agent/targets/registry.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/core/config.ts","../../src/agent/prompts/optional/types.ts","../../src/agent/prompts/prompt.ts","../../src/agent/prompts/skill.ts","../../src/agent/types.ts","../../src/agent/clis/types.ts","../../src/agent/clis/index.ts","../../src/agent/detect-imports.ts","../../src/agent/detect.ts","../../src/agent/install.ts","../../src/agent/targets/types.ts","../../src/agent/targets/registry.ts"],"mappings":";UAMiB,cAAA;EACf,MAAA;EACA,MAAA;EACA,WAAA;EACA,QAAA;AAAA;;;UCiCe,YAAA;EACf,OAAA;EACA,IAAA;AAAA;;;KCnCU,YAAA;;cAGC,oBAAA,EAAsB,MAAA,CAAO,YAAA;;cAO7B,mBAAA,EAAqB,YAAA;AAAA,UAEjB,uBAAA;EACf,WAAA;;EAEA,QAAA;EDkBe;EChBf,OAAA;;EAEA,SAAA;EDgBI;ECdJ,cAAA;;EAEA,WAAA;EAvBU;EAyBV,YAAA;;EAEA,QAAA;EA3BsB;EA6BtB,QAAA;EAtBD;EAwBC,cAAA;EA5BiC;EA8BjC,YAAA,GAAe,YAAA;EAvBJ;EAyBX,QAAA,GAAW,cAAA;;EAEX,mBAAA;EA3B4C;EA6B5C,QAAA;AAAA;;;;iBAmIc,kBAAA,CAAmB,IAAA,EAAM,uBAAA;EAA4B,OAAA,EAAS,YAAA;AAAA;;;;iBAgE9D,sBAAA,CAAuB,IAAA,EAAM,uBAAA;EAA4B,QAAA,EAAU,YAAA;AAAA,IAAmB,GAAA,CAAI,YAAA;;;UC1OzF,YAAA;EACf,IAAA;EACA,OAAA;EACA,UAAA;EHHA;EGKA,YAAA,GAAe,MAAA;EHLP;EGOR,QAAA,GAAW,MAAA;IAAiB,OAAA;IAAiB,UAAA;EAAA;EAC7C,KAAA;EACA,WAAA;EFyBA;EEvBA,IAAA;EACA,aAAA;EACA,SAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,QAAA;EACA,cAAA;EDlBsB;ECoBtB,QAAA;EDbD;ECeC,WAAA;EDnBiC;ECqBjC,OAAA;EDdW;ECgBX,QAAA,GAAW,KAAA;IAAQ,IAAA;EAAA;EDhByB;ECkB5C,OAAA;EDhBsC;ECkBtC,QAAA,GAAW,cAAA;EDKc;ECHzB,KAAA;AAAA;AAAA,iBAGc,eAAA,CAAgB,IAAA,EAAM,YAAA;;;;AHvCtC;;KIFY,SAAA;AAAA,UAaK,aAAA;EACf,IAAA;EACA,OAAA;EJVA;EIYA,UAAA;EACA,WAAA;AAAA;;;KCGU,aAAA;AAAA,UAWK,SAAA;EACf,EAAA,EAAI,aAAA;EACJ,IAAA;EACA,IAAA;EACA,WAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,cAAA;EACf,KAAA;EACA,IAAA;EACA,IAAA;EACA,SAAA;EACA,OAAA,GAAU,YAAA;AAAA;AAAA,UAGK,mBAAA;EACf,WAAA;EACA,QAAA;EACA,KAAA,GAAQ,aAAA;EACR,OAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EACA,QAAA;EACA,QAAA;EACA,cAAA;EACA,UAAA,IAAc,QAAA,EAAU,cAAA;EACxB,OAAA;EACA,OAAA;EACA,KAAA;EACA,OAAA;EHnBQ;EGqBR,QAAA,GAAW,YAAA;EH8GqB;EG5GhC,YAAA,GAAe,YAAA;EH4GyE;EG1GxF,QAAA,GAAW,cAAA;EH0GwD;EGxGnE,QAAA;AAAA;AAAA,UAGe,cAAA;EACf,SAAA;EACA,YAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,YAAA;EACA,KAAA;IAAU,WAAA;IAAqB,YAAA;IAAsB,WAAA;EAAA;EACrD,IAAA;EACA,YAAA;AAAA;;;UC1CQ,eAAA;EACR,OAAA,GAAU,GAAA;AAAA;;iBAII,kBAAA,CAAmB,GAAA,EAAK,eAAA,IAAmB,QAAA,EAAU,cAAA;AAAA,iBAoFrD,YAAA,CAAa,EAAA,EAAI,aAAA;AAAA,iBAIjB,aAAA,CAAc,EAAA,EAAI,aAAA;AAAA,iBAQZ,kBAAA,CAAA,GAAsB,OAAA,CAAJ,SAAA;AAAA,iBA+QlB,YAAA,CAAa,IAAA,EAAM,mBAAA,GAAsB,OAAA,CAAQ,cAAA;;;;AN5ZvE;;;UOIiB,YAAA;EACf,IAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,UAGe,YAAA;EACf,QAAA,EAAU,YAAA;EACV,KAAA;AAAA;;ANyBF;;;iBMDsB,sBAAA,CAAuB,GAAA,YAA8B,OAAA,CAAQ,YAAA;;;;;;iBC/BnE,qBAAA,CAAA,GAAyB,SAAA;;;;;;;APgCzC;iBOnBgB,iBAAA,CAAA,GAAqB,SAAA;;;;iBAkBrB,eAAA,CAAgB,SAAA,EAAW,SAAA;;;;;;iBC5B3B,YAAA,CAAa,IAAA;;;;;;;AR6B7B;;;iBQZgB,mBAAA,CAAoB,WAAA;;;;;iBAQpB,qBAAA,CACd,SAAA,UACA,YAAA,UACA,OAAA;EACE,MAAA;EACA,GAAA;EACA,MAAA,GAAS,SAAA,IPnCW;EOqCpB,KAAA,GAAQ,MAAA;AAAA;EAEP,SAAA,EAAW,SAAA;EAAa,KAAA;AAAA;AP7B7B;;;;;AAAA,iBO2EgB,iBAAA,CAAkB,SAAA,UAAmB,SAAA,UAAmB,GAAA;;;;iBAwCxD,qBAAA,CAAsB,SAAA,UAAmB,GAAA;;;UCjIxC,gBAAA;EVCf;EUCA,IAAA;EVCA;EUCA,QAAA;;EAEA,WAAA;;EAEA,WAAA;AAAA;AAAA,UAGe,WAAA;ET0BY;ESxB3B,KAAA,EAAO,SAAA;ETyBP;ESvBA,WAAA;;EAKA,eAAA;;EAEA,SAAA;ERlBsB;EQoBtB,aAAA,GAAgB,GAAA;ERpBM;EQsBtB,GAAA;ERnBW;EQqBX,eAAA;;EAKA,aAAA;ER1BoD;EQ4BpD,SAAA;ERrB4F;EQuB5F,eAAA;ERvBgC;EQyBhC,oBAAA;ERvBe;EQ4Bf,WAAA,EAAa,gBAAA;;EAEb,cAAA;ER7BA;EQ+BA,WAAA;ER3BA;EQgCA,iBAAA;ER5BA;EQ8BA,cAAA;ER1BA;EQ+BA,eAAA;ER3BA;EQ6BA,UAAA;ERzBA;EQ8BA,IAAA;ER5BA;EQ8BA,KAAA;AAAA;;;cCzDW,OAAA,EAAS,MAAA,CAAO,SAAA,EAAW,WAAA"}