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.
- package/README.md +15 -0
- package/dist/_chunks/detect-imports.mjs +13 -10
- package/dist/_chunks/detect-imports.mjs.map +1 -1
- package/dist/agent/index.d.mts +2 -0
- package/dist/agent/index.d.mts.map +1 -1
- package/dist/cli.mjs +58 -17
- package/dist/cli.mjs.map +1 -1
- package/package.json +1 -1
package/dist/agent/index.d.mts
CHANGED
|
@@ -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":";UAMiB,cAAA;EACf,MAAA;EACA,MAAA;EACA,WAAA;EACA,QAAA;AAAA;;;UCqBe,YAAA;EACf,OAAA;EACA,IAAA;AAAA;;;KCxBU,YAAA;;cAGC,oBAAA,EAAsB,MAAA,CAAO,YAAA;;cAQ7B,mBAAA,EAAqB,YAAA;AAAA,UAEjB,uBAAA;EACf,WAAA;;EAEA,QAAA;EDMe;ECJf,OAAA;;EAEA,SAAA;EDII;ECFJ,cAAA;;EAEA,WAAA;EAxBU;EA0BV,YAAA;;EAEA,QAAA;EA5BsB;EA8BtB,QAAA;EAtBD;EAwBC,cAAA;EA7BiC;EA+BjC,YAAA,GAAe,YAAA;EAvBJ;EAyBX,QAAA,GAAW,cAAA;;EAEX,mBAAA;AAAA;AAzBF;;;AAAA,iBAmJgB,kBAAA,CAAmB,IAAA,EAAM,uBAAA;EAA4B,OAAA,EAAS,YAAA;AAAA;;;;iBAkD9D,sBAAA,CAAuB,IAAA,EAAM,uBAAA;EAA4B,QAAA,EAAU,YAAA;AAAA,IAAmB,GAAA,CAAI,YAAA;;;UCjNzF,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;EFaA;EEXA,IAAA;EACA,aAAA;EACA,SAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,QAAA;EACA,cAAA;EDnBsB;ECqBtB,QAAA;EDbD;ECeC,WAAA;EDpBiC;ECsBjC,OAAA;EDdW;ECgBX,QAAA,GAAW,KAAA;IAAQ,IAAA;EAAA;EDhByB;ECkB5C,OAAA;EDhBsC;ECkBtC,QAAA,GAAW,cAAA;AAAA;AAAA,
|
|
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,
|
|
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
|
-
|
|
2142
|
-
|
|
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
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
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
|
-
|
|
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,
|
|
2528
|
+
const filePath = join(skillDir, f.path);
|
|
2488
2529
|
mkdirSync(dirname(filePath), { recursive: true });
|
|
2489
2530
|
writeFileSync(filePath, f.content);
|
|
2490
2531
|
}
|