skilld 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/detect-imports.mjs +1 -1
- package/dist/_chunks/npm.mjs +1 -1
- package/dist/_chunks/yaml.mjs +5 -1
- package/dist/_chunks/yaml.mjs.map +1 -1
- package/dist/cli.mjs +5 -10
- package/dist/cli.mjs.map +1 -1
- package/dist/sources/index.mjs +1 -1
- package/package.json +3 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./chunk.mjs";
|
|
2
2
|
import { _ as writeSections, b as sanitizeMarkdown, h as readCachedSection, y as repairMarkdown } from "./storage.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { o as mapInsert, t as yamlEscape, u as getFilePatterns } from "./yaml.mjs";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
5
|
import { dirname, join, relative } from "pathe";
|
|
6
6
|
import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
|
package/dist/_chunks/npm.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as getCacheDir } from "./config.mjs";
|
|
2
|
-
import { c as getDocOverride, n as yamlParseKV, o as mapInsert
|
|
2
|
+
import { c as getBlogPreset, l as getDocOverride, n as yamlParseKV, o as mapInsert } from "./yaml.mjs";
|
|
3
3
|
import { basename, dirname, join, resolve } from "pathe";
|
|
4
4
|
import { createWriteStream, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, unlinkSync } from "node:fs";
|
|
5
5
|
import { htmlToMarkdown } from "mdream";
|
package/dist/_chunks/yaml.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from "pathe";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
|
+
import { gt } from "semver";
|
|
3
4
|
const REPO_REGISTRY = {
|
|
4
5
|
"vuejs/core": {
|
|
5
6
|
owner: "vuejs",
|
|
@@ -437,6 +438,9 @@ function mapInsert(map, key, create) {
|
|
|
437
438
|
}
|
|
438
439
|
return val;
|
|
439
440
|
}
|
|
441
|
+
function semverGt(a, b) {
|
|
442
|
+
return gt(a, b, true);
|
|
443
|
+
}
|
|
440
444
|
const SHARED_SKILLS_DIR = ".skills";
|
|
441
445
|
function getSharedSkillsDir(cwd = process.cwd()) {
|
|
442
446
|
const dir = join(cwd, SHARED_SKILLS_DIR);
|
|
@@ -463,6 +467,6 @@ function yamlParseKV(line) {
|
|
|
463
467
|
if (!key) return null;
|
|
464
468
|
return [key, yamlUnescape(rawValue)];
|
|
465
469
|
}
|
|
466
|
-
export { getSharedSkillsDir as a,
|
|
470
|
+
export { getSharedSkillsDir as a, getBlogPreset as c, getRelatedPackages as d, getRepoEntry as f, SHARED_SKILLS_DIR as i, getDocOverride as l, yamlParseKV as n, mapInsert as o, getRepoKeyForPackage as p, yamlUnescape as r, semverGt as s, yamlEscape as t, getFilePatterns as u };
|
|
467
471
|
|
|
468
472
|
//# sourceMappingURL=yaml.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml.mjs","names":[],"sources":["../../src/sources/package-registry.ts","../../src/core/shared.ts","../../src/core/yaml.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}\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 /** 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 packages: {\n 'vue': { primary: true, filePatterns: ['*.vue'] },\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'] },\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 // ── 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 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","import { existsSync } from 'node:fs'\nimport { join } from 'pathe'\n\n/** Get-or-create for Maps. Polyfill for Map.getOrInsertComputed (not yet in Node.js). */\nexport function mapInsert<K, V>(map: Map<K, V>, key: K, create: () => V): V {\n let val = map.get(key)\n if (val === undefined) {\n val = create()\n map.set(key, val)\n }\n return val\n}\n\nexport const SHARED_SKILLS_DIR = '.skills'\n\n/** Returns the shared skills directory path if `.skills/` exists at project root, else null */\nexport function getSharedSkillsDir(cwd: string = process.cwd()): string | null {\n const dir = join(cwd, SHARED_SKILLS_DIR)\n return existsSync(dir) ? dir : null\n}\n","/**\n * Minimal YAML value escaping/unescaping for our hand-rolled parsers.\n *\n * Handles the characters that break naive `:` splitting and quote stripping:\n * colons, quotes, newlines, backslashes.\n */\n\n/** Characters that require double-quoting in YAML values */\nconst NEEDS_QUOTING = /[:\"'\\\\\\n\\r\\t#{}[\\],&*!|>%@`]/\n\n/**\n * Escape a value for safe YAML emission. Always double-quotes if the value\n * contains any special characters; returns unquoted for simple values.\n */\nexport function yamlEscape(value: string): string {\n if (!NEEDS_QUOTING.test(value))\n return value\n // Escape backslashes first, then double quotes, then control chars\n const escaped = value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t')\n return `\"${escaped}\"`\n}\n\n/**\n * Parse a raw YAML value string back to its actual value.\n * Handles double-quoted (with escapes), single-quoted, and unquoted values.\n */\nexport function yamlUnescape(raw: string): string {\n const trimmed = raw.trim()\n if (!trimmed)\n return ''\n\n // Double-quoted: process escape sequences\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n return trimmed.slice(1, -1)\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\\\\\/g, '\\\\')\n }\n\n // Single-quoted: no escape processing, just strip quotes\n if (trimmed.startsWith('\\'') && trimmed.endsWith('\\''))\n return trimmed.slice(1, -1)\n\n return trimmed\n}\n\n/**\n * Parse a YAML `key: value` line, correctly handling colons inside quoted values.\n * Returns [key, value] or null if not a valid KV line.\n */\nexport function yamlParseKV(line: string): [string, string] | null {\n const trimmed = line.trim()\n // Find the first `: ` or `:\\n` or `:$` — the YAML key-value separator\n const colonIdx = trimmed.indexOf(':')\n if (colonIdx === -1)\n return null\n const key = trimmed.slice(0, colonIdx).trim()\n const rawValue = trimmed.slice(colonIdx + 1)\n if (!key)\n return null\n return [key, yamlUnescape(rawValue)]\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yaml.mjs","names":["_semverGt"],"sources":["../../src/sources/package-registry.ts","../../src/core/shared.ts","../../src/core/yaml.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}\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 /** 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 packages: {\n 'vue': { primary: true, filePatterns: ['*.vue'] },\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'] },\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 // ── 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 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","import { existsSync } from 'node:fs'\nimport { join } from 'pathe'\nimport { gt as _semverGt } from 'semver'\n\n/** Get-or-create for Maps. Polyfill for Map.getOrInsertComputed (not yet in Node.js). */\nexport function mapInsert<K, V>(map: Map<K, V>, key: K, create: () => V): V {\n let val = map.get(key)\n if (val === undefined) {\n val = create()\n map.set(key, val)\n }\n return val\n}\n\n/** Compare two semver strings: returns true if a > b. Handles prereleases. */\nexport function semverGt(a: string, b: string): boolean {\n return _semverGt(a, b, true)\n}\n\nexport const SHARED_SKILLS_DIR = '.skills'\n\n/** Returns the shared skills directory path if `.skills/` exists at project root, else null */\nexport function getSharedSkillsDir(cwd: string = process.cwd()): string | null {\n const dir = join(cwd, SHARED_SKILLS_DIR)\n return existsSync(dir) ? dir : null\n}\n","/**\n * Minimal YAML value escaping/unescaping for our hand-rolled parsers.\n *\n * Handles the characters that break naive `:` splitting and quote stripping:\n * colons, quotes, newlines, backslashes.\n */\n\n/** Characters that require double-quoting in YAML values */\nconst NEEDS_QUOTING = /[:\"'\\\\\\n\\r\\t#{}[\\],&*!|>%@`]/\n\n/**\n * Escape a value for safe YAML emission. Always double-quotes if the value\n * contains any special characters; returns unquoted for simple values.\n */\nexport function yamlEscape(value: string): string {\n if (!NEEDS_QUOTING.test(value))\n return value\n // Escape backslashes first, then double quotes, then control chars\n const escaped = value\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t')\n return `\"${escaped}\"`\n}\n\n/**\n * Parse a raw YAML value string back to its actual value.\n * Handles double-quoted (with escapes), single-quoted, and unquoted values.\n */\nexport function yamlUnescape(raw: string): string {\n const trimmed = raw.trim()\n if (!trimmed)\n return ''\n\n // Double-quoted: process escape sequences\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n return trimmed.slice(1, -1)\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\\\\\/g, '\\\\')\n }\n\n // Single-quoted: no escape processing, just strip quotes\n if (trimmed.startsWith('\\'') && trimmed.endsWith('\\''))\n return trimmed.slice(1, -1)\n\n return trimmed\n}\n\n/**\n * Parse a YAML `key: value` line, correctly handling colons inside quoted values.\n * Returns [key, value] or null if not a valid KV line.\n */\nexport function yamlParseKV(line: string): [string, string] | null {\n const trimmed = line.trim()\n // Find the first `: ` or `:\\n` or `:$` — the YAML key-value separator\n const colonIdx = trimmed.indexOf(':')\n if (colonIdx === -1)\n return null\n const key = trimmed.slice(0, colonIdx).trim()\n const rawValue = trimmed.slice(colonIdx + 1)\n if (!key)\n return null\n return [key, yamlUnescape(rawValue)]\n}\n"],"mappings":"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"}
|
package/dist/cli.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { a as getShippedSkills, b as sanitizeMarkdown, c as linkCachedDir, d as
|
|
|
5
5
|
import "./cache/index.mjs";
|
|
6
6
|
import { n as clearEmbeddingCache } from "./_chunks/embedding-cache.mjs";
|
|
7
7
|
import { closePool, createIndex, openPool, searchPooled, searchSnippets } from "./retriv/index.mjs";
|
|
8
|
-
import { a as getSharedSkillsDir, i as SHARED_SKILLS_DIR, n as yamlParseKV, o as mapInsert, r as yamlUnescape, s as
|
|
8
|
+
import { a as getSharedSkillsDir, c as getBlogPreset, i as SHARED_SKILLS_DIR, n as yamlParseKV, o as mapInsert, r as yamlUnescape, s as semverGt, t as yamlEscape } from "./_chunks/yaml.mjs";
|
|
9
9
|
import { A as resolveEntryFiles, B as $fetch, D as fetchGitSkills, G as parseGitHubUrl, I as fetchReleaseNotes, J as formatIssueAsMarkdown, L as generateReleaseIndex, M as formatDiscussionAsMarkdown, N as generateDiscussionIndex, O as parseGitSkillInput, P as fetchBlogReleases, T as isShallowGitDocs, X as isGhAvailable, Y as generateIssueIndex, d as resolvePackageDocs, f as resolvePackageDocsWithAttempts, g as fetchLlmsTxt, i as fetchPkgDist, j as fetchGitHubDiscussions, m as downloadLlmsDocs, n as fetchNpmPackage, p as searchNpmPackages, q as fetchGitHubIssues, r as fetchNpmRegistryMeta, s as readLocalDependencies, t as fetchLatestVersion, u as resolveLocalPackageDocs, v as normalizeLlmsLinks, w as fetchReadmeContent, x as fetchGitDocs } from "./_chunks/npm.mjs";
|
|
10
10
|
import "./sources/index.mjs";
|
|
11
11
|
import { S as targets, _ as maxItems, a as getModelName, b as detectTargetAgent, c as computeSkillDirName, d as sanitizeName, f as unlinkSkillFromAgents, i as getModelLabel, n as createToolProgress, o as optimizeDocs, r as getAvailableModels, s as generateSkillMd, t as detectImportedPackages, u as linkSkillToAgents, v as maxLines, x as getAgentVersion, y as detectInstalledAgents } from "./_chunks/detect-imports.mjs";
|
|
@@ -542,8 +542,7 @@ function* iterateSkills(opts = {}) {
|
|
|
542
542
|
}
|
|
543
543
|
function isOutdated(skill, depVersion) {
|
|
544
544
|
if (!skill.info?.version) return true;
|
|
545
|
-
|
|
546
|
-
return skill.info.version !== depClean;
|
|
545
|
+
return semverGt(depVersion.replace(/^[\^~]/, ""), skill.info.version);
|
|
547
546
|
}
|
|
548
547
|
async function getProjectState(cwd = process.cwd()) {
|
|
549
548
|
const skills = [...iterateSkills({
|
|
@@ -2103,7 +2102,7 @@ async function syncSinglePackage(packageName, config) {
|
|
|
2103
2102
|
ensureCacheDir();
|
|
2104
2103
|
const baseDir = resolveBaseDir(cwd, config.agent, config.global);
|
|
2105
2104
|
const skillDirName = config.name ? sanitizeName(config.name) : computeSkillDirName(packageName, resolved.repoUrl);
|
|
2106
|
-
const skillDir = typeof config.eject === "string" ? resolve(cwd, config.eject) : join(baseDir, skillDirName);
|
|
2105
|
+
const skillDir = config.eject ? typeof config.eject === "string" ? resolve(cwd, config.eject) : join(cwd, "skills", skillDirName) : join(baseDir, skillDirName);
|
|
2107
2106
|
mkdirSync(skillDir, { recursive: true });
|
|
2108
2107
|
const existingLock = config.eject ? void 0 : readLock(baseDir)?.skills[skillDirName];
|
|
2109
2108
|
if (existingLock && existingLock.packageName !== packageName) {
|
|
@@ -2406,11 +2405,7 @@ const ejectCommandDef = defineCommand({
|
|
|
2406
2405
|
},
|
|
2407
2406
|
async run({ args }) {
|
|
2408
2407
|
const cwd = process.cwd();
|
|
2409
|
-
|
|
2410
|
-
if (!agent) {
|
|
2411
|
-
agent = await promptForAgent();
|
|
2412
|
-
if (!agent) return;
|
|
2413
|
-
}
|
|
2408
|
+
const agent = resolveAgent(args.agent) || "claude-code";
|
|
2414
2409
|
if (!hasCompletedWizard()) await runWizard();
|
|
2415
2410
|
const state = await getProjectState(cwd);
|
|
2416
2411
|
p.intro(introLine({ state }));
|
|
@@ -3997,7 +3992,7 @@ runMain(defineCommand({
|
|
|
3997
3992
|
const tasks = [];
|
|
3998
3993
|
if (!(process.env.npm_command === "exec")) tasks.push(fetchNpmRegistryMeta("skilld", version).then((meta) => {
|
|
3999
3994
|
const latestTag = meta.distTags?.latest;
|
|
4000
|
-
if (latestTag && latestTag.version
|
|
3995
|
+
if (latestTag && semverGt(latestTag.version, version)) selfUpdate = {
|
|
4001
3996
|
latest: latestTag.version,
|
|
4002
3997
|
releasedAt: latestTag.releasedAt
|
|
4003
3998
|
};
|