skilld 0.8.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -95,6 +95,8 @@ interface SkillOptions {
95
95
  repoUrl?: string;
96
96
  /** Resolved feature flags */
97
97
  features?: FeaturesConfig;
98
+ /** Eject mode: use ./references/ paths instead of ./.skilld/ for portable skills */
99
+ eject?: boolean;
98
100
  }
99
101
  declare function generateSkillMd(opts: SkillOptions): string;
100
102
  //#endregion
@@ -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":"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"}
package/dist/cli.mjs CHANGED
@@ -1250,6 +1250,32 @@ async function indexResources(opts) {
1250
1250
  }
1251
1251
  });
1252
1252
  }
1253
+ function ejectReferences(skillDir, packageName, cwd, version, docsType, features) {
1254
+ const f = features ?? readConfig().features ?? defaultFeatures;
1255
+ const cacheDir = getCacheDir(packageName, version);
1256
+ const refsDir = join(skillDir, "references");
1257
+ if (!hasShippedDocs(packageName, cwd, version) && docsType !== "readme") copyCachedSubdir(cacheDir, refsDir, "docs");
1258
+ if (f.issues) copyCachedSubdir(cacheDir, refsDir, "issues");
1259
+ if (f.discussions) copyCachedSubdir(cacheDir, refsDir, "discussions");
1260
+ if (f.releases) copyCachedSubdir(cacheDir, refsDir, "releases");
1261
+ }
1262
+ function copyCachedSubdir(cacheDir, refsDir, subdir) {
1263
+ const srcDir = join(cacheDir, subdir);
1264
+ if (!existsSync(srcDir)) return;
1265
+ const destDir = join(refsDir, subdir);
1266
+ mkdirSync(destDir, { recursive: true });
1267
+ function walk(dir, rel) {
1268
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
1269
+ const srcPath = join(dir, entry.name);
1270
+ const destPath = join(destDir, rel ? `${rel}/${entry.name}` : entry.name);
1271
+ if (entry.isDirectory()) {
1272
+ mkdirSync(destPath, { recursive: true });
1273
+ walk(srcPath, rel ? `${rel}/${entry.name}` : entry.name);
1274
+ } else copyFileSync(srcPath, destPath);
1275
+ }
1276
+ }
1277
+ walk(srcDir, "");
1278
+ }
1253
1279
  const TELEMETRY_URL = "https://add-skill.vercel.sh/t";
1254
1280
  const SKILLS_VERSION = "1.3.9";
1255
1281
  function isEnabled() {
@@ -1301,7 +1327,7 @@ async function syncGitSkills(opts) {
1301
1327
  mkdirSync(skillDir, { recursive: true });
1302
1328
  writeFileSync(join(skillDir, "SKILL.md"), sanitizeMarkdown(skill.content));
1303
1329
  if (skill.files.length > 0) for (const f of skill.files) {
1304
- const filePath = join(skillDir, ".skilld", f.path);
1330
+ const filePath = join(skillDir, f.path);
1305
1331
  mkdirSync(dirname(filePath), { recursive: true });
1306
1332
  writeFileSync(filePath, f.content);
1307
1333
  }
@@ -2075,7 +2101,7 @@ async function syncSinglePackage(packageName, config) {
2075
2101
  ensureCacheDir();
2076
2102
  const baseDir = resolveBaseDir(cwd, config.agent, config.global);
2077
2103
  const skillDirName = computeSkillDirName(packageName, resolved.repoUrl);
2078
- const skillDir = join(baseDir, skillDirName);
2104
+ const skillDir = typeof config.eject === "string" ? resolve(cwd, config.eject) : join(baseDir, skillDirName);
2079
2105
  mkdirSync(skillDir, { recursive: true });
2080
2106
  const existingLock = readLock(baseDir)?.skills[skillDirName];
2081
2107
  if (existingLock && existingLock.packageName !== packageName) {
@@ -2138,8 +2164,9 @@ async function syncSinglePackage(packageName, config) {
2138
2164
  if (resources.hasReleases) resParts.push("releases");
2139
2165
  resSpin.stop(`Fetched ${resParts.length > 0 ? resParts.join(", ") : "resources"}`);
2140
2166
  for (const w of resources.warnings) p.log.warn(`\x1B[33m${w}\x1B[0m`);
2141
- linkAllReferences(skillDir, packageName, cwd, version, resources.docsType, void 0, features);
2142
- if (features.search) {
2167
+ if (config.eject) ejectReferences(skillDir, packageName, cwd, version, resources.docsType, features);
2168
+ else linkAllReferences(skillDir, packageName, cwd, version, resources.docsType, void 0, features);
2169
+ if (features.search && !config.eject) {
2143
2170
  const idxSpin = timedSpinner();
2144
2171
  idxSpin.start("Creating search index");
2145
2172
  await indexResources({
@@ -2157,7 +2184,7 @@ async function syncSinglePackage(packageName, config) {
2157
2184
  const shippedDocs = hasShippedDocs(packageName, cwd, version);
2158
2185
  const pkgFiles = getPkgKeyFiles(packageName, cwd, version);
2159
2186
  const repoSlug = resolved.repoUrl?.match(/github\.com\/([^/]+\/[^/]+?)(?:\.git)?(?:[/#]|$)/)?.[1];
2160
- linkPkgNamed(skillDir, packageName, cwd, version);
2187
+ if (!config.eject) linkPkgNamed(skillDir, packageName, cwd, version);
2161
2188
  writeLock(baseDir, skillDirName, {
2162
2189
  packageName,
2163
2190
  version,
@@ -2168,6 +2195,7 @@ async function syncSinglePackage(packageName, config) {
2168
2195
  });
2169
2196
  const updatedLock = readLock(baseDir)?.skills[skillDirName];
2170
2197
  const allPackages = parsePackages(updatedLock?.packages).map((p) => ({ name: p.name }));
2198
+ const isEject = !!config.eject;
2171
2199
  const baseSkillMd = generateSkillMd({
2172
2200
  name: packageName,
2173
2201
  version,
@@ -2186,7 +2214,8 @@ async function syncSinglePackage(packageName, config) {
2186
2214
  dirName: skillDirName,
2187
2215
  packages: allPackages.length > 1 ? allPackages : void 0,
2188
2216
  repoUrl: resolved.repoUrl,
2189
- features
2217
+ features,
2218
+ eject: isEject
2190
2219
  });
2191
2220
  writeFileSync(join(skillDir, "SKILL.md"), baseSkillMd);
2192
2221
  p.log.success(config.mode === "update" ? `Updated skill: ${relative(cwd, skillDir)}` : `Created base skill: ${relative(cwd, skillDir)}`);
@@ -2214,20 +2243,24 @@ async function syncSinglePackage(packageName, config) {
2214
2243
  sections: llmConfig.sections,
2215
2244
  customPrompt: llmConfig.customPrompt,
2216
2245
  packages: allPackages.length > 1 ? allPackages : void 0,
2217
- features
2246
+ features,
2247
+ eject: isEject
2218
2248
  });
2219
2249
  }
2220
2250
  }
2221
- const shared = !config.global && getSharedSkillsDir(cwd);
2222
- if (shared) linkSkillToAgents(skillDirName, shared, cwd);
2223
- if (!config.global) registerProject(cwd);
2224
- await ensureGitignore(shared ? SHARED_SKILLS_DIR : targets[config.agent].skillsDir, cwd, config.global);
2225
- await ensureAgentInstructions(config.agent, cwd, config.global);
2251
+ if (!isEject) {
2252
+ const shared = !config.global && getSharedSkillsDir(cwd);
2253
+ if (shared) linkSkillToAgents(skillDirName, shared, cwd);
2254
+ if (!config.global) registerProject(cwd);
2255
+ await ensureGitignore(shared ? SHARED_SKILLS_DIR : targets[config.agent].skillsDir, cwd, config.global);
2256
+ await ensureAgentInstructions(config.agent, cwd, config.global);
2257
+ }
2226
2258
  await shutdownWorker();
2227
- p.outro(config.mode === "update" ? `Updated ${packageName}` : `Synced ${packageName} to ${relative(cwd, skillDir)}`);
2259
+ const ejectMsg = isEject ? " (ejected)" : "";
2260
+ p.outro(config.mode === "update" ? `Updated ${packageName}${ejectMsg}` : `Synced ${packageName} to ${relative(cwd, skillDir)}${ejectMsg}`);
2228
2261
  }
2229
2262
  async function enhanceSkillWithLLM(opts) {
2230
- const { packageName, version, skillDir, dirName, model, resolved, relatedSkills, hasIssues, hasDiscussions, hasReleases, hasChangelog, docsType, hasShippedDocs: shippedDocs, pkgFiles, force, debug, sections, customPrompt, packages, features } = opts;
2263
+ const { packageName, version, skillDir, dirName, model, resolved, relatedSkills, hasIssues, hasDiscussions, hasReleases, hasChangelog, docsType, hasShippedDocs: shippedDocs, pkgFiles, force, debug, sections, customPrompt, packages, features, eject } = opts;
2231
2264
  const llmLog = p.taskLog({ title: `Agent exploring ${packageName}` });
2232
2265
  const docFiles = listReferenceFiles(skillDir);
2233
2266
  const { optimized, wasOptimized, usage, cost, warnings, debugLogsDir } = await optimizeDocs({
@@ -2278,7 +2311,8 @@ async function enhanceSkillWithLLM(opts) {
2278
2311
  dirName,
2279
2312
  packages,
2280
2313
  repoUrl: resolved.repoUrl,
2281
- features
2314
+ features,
2315
+ eject
2282
2316
  });
2283
2317
  writeFileSync(join(skillDir, "SKILL.md"), skillMd);
2284
2318
  } else llmLog.error("LLM optimization failed");
@@ -2294,6 +2328,12 @@ const addCommandDef = defineCommand({
2294
2328
  description: "Package(s) to sync (space or comma-separated, e.g., vue nuxt pinia)",
2295
2329
  required: true
2296
2330
  },
2331
+ eject: {
2332
+ type: "string",
2333
+ alias: "e",
2334
+ description: "Eject skill with references as real files (portable, no symlinks). Optional path override.",
2335
+ required: false
2336
+ },
2297
2337
  ...sharedArgs
2298
2338
  },
2299
2339
  async run({ args }) {
@@ -2329,7 +2369,8 @@ const addCommandDef = defineCommand({
2329
2369
  model: args.model,
2330
2370
  yes: args.yes,
2331
2371
  force: args.force,
2332
- debug: args.debug
2372
+ debug: args.debug,
2373
+ eject: args.eject !== void 0 ? args.eject || true : void 0
2333
2374
  });
2334
2375
  }
2335
2376
  }
@@ -2484,7 +2525,7 @@ async function installCommand(opts) {
2484
2525
  mkdirSync(skillDir, { recursive: true });
2485
2526
  writeFileSync(join(skillDir, "SKILL.md"), sanitizeMarkdown(match.content));
2486
2527
  for (const f of match.files) {
2487
- const filePath = join(skillDir, ".skilld", f.path);
2528
+ const filePath = join(skillDir, f.path);
2488
2529
  mkdirSync(dirname(filePath), { recursive: true });
2489
2530
  writeFileSync(filePath, f.content);
2490
2531
  }