skilld 0.4.2 → 0.5.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/dist/agent/index.d.mts
CHANGED
|
@@ -266,6 +266,8 @@ interface AgentTarget {
|
|
|
266
266
|
detectProject: (cwd: string) => boolean;
|
|
267
267
|
/** CLI command name (if agent has a CLI for skill generation) */
|
|
268
268
|
cli?: string;
|
|
269
|
+
/** Project-level instruction file for always-on rules (e.g. CLAUDE.md, AGENTS.md) */
|
|
270
|
+
instructionFile?: string;
|
|
269
271
|
/** Required skill filename (always SKILL.md for Agent Skills spec agents) */
|
|
270
272
|
skillFilename: string;
|
|
271
273
|
/** Project-level skill directory */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../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.ts","../../src/agent/detect-imports.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/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.ts","../../src/agent/detect-imports.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
|
@@ -59,6 +59,11 @@ const CONFIG_PATH = join(CONFIG_DIR, "config.yaml");
|
|
|
59
59
|
function hasConfig() {
|
|
60
60
|
return existsSync(CONFIG_PATH);
|
|
61
61
|
}
|
|
62
|
+
function hasCompletedWizard() {
|
|
63
|
+
if (!existsSync(CONFIG_PATH)) return false;
|
|
64
|
+
const config = readConfig();
|
|
65
|
+
return config.features !== void 0 || config.model !== void 0 || config.skipLlm !== void 0;
|
|
66
|
+
}
|
|
62
67
|
function readConfig() {
|
|
63
68
|
if (!existsSync(CONFIG_PATH)) return {};
|
|
64
69
|
const content = readFileSync(CONFIG_PATH, "utf-8");
|
|
@@ -978,6 +983,7 @@ async function syncPackagesParallel(config) {
|
|
|
978
983
|
}
|
|
979
984
|
}
|
|
980
985
|
await ensureGitignore(getSharedSkillsDir(cwd) ? SHARED_SKILLS_DIR : agent.skillsDir, cwd, config.global);
|
|
986
|
+
await ensureAgentInstructions(config.agent, cwd, config.global);
|
|
981
987
|
await shutdownWorker();
|
|
982
988
|
p.outro(`Synced ${successfulPkgs.length}/${packages.length} packages`);
|
|
983
989
|
}
|
|
@@ -1183,6 +1189,30 @@ async function ensureGitignore(skillsDir, cwd, isGlobal) {
|
|
|
1183
1189
|
else writeFileSync(gitignorePath, entry);
|
|
1184
1190
|
p.log.success("Updated .gitignore");
|
|
1185
1191
|
}
|
|
1192
|
+
const SKILLD_MARKER_START = "<!-- skilld -->";
|
|
1193
|
+
const SKILLD_MARKER_END = "<!-- /skilld -->";
|
|
1194
|
+
const SKILLD_INSTRUCTIONS = `${SKILLD_MARKER_START}
|
|
1195
|
+
Before modifying code, evaluate each installed skill against the current task.
|
|
1196
|
+
For each skill, determine YES/NO relevance and invoke all YES skills before proceeding.
|
|
1197
|
+
${SKILLD_MARKER_END}`;
|
|
1198
|
+
async function ensureAgentInstructions(agent, cwd, isGlobal) {
|
|
1199
|
+
if (isGlobal) return;
|
|
1200
|
+
const agentConfig = targets[agent];
|
|
1201
|
+
if (!agentConfig.instructionFile) return;
|
|
1202
|
+
const filePath = join(cwd, agentConfig.instructionFile);
|
|
1203
|
+
if (existsSync(filePath)) {
|
|
1204
|
+
if (readFileSync(filePath, "utf-8").includes(SKILLD_MARKER_START)) return;
|
|
1205
|
+
}
|
|
1206
|
+
p.note(SKILLD_INSTRUCTIONS, `Will be added to ${agentConfig.instructionFile}`);
|
|
1207
|
+
const add = await p.confirm({
|
|
1208
|
+
message: `Add skill activation instructions to ${agentConfig.instructionFile}?`,
|
|
1209
|
+
initialValue: true
|
|
1210
|
+
});
|
|
1211
|
+
if (p.isCancel(add) || !add) return;
|
|
1212
|
+
if (existsSync(filePath)) appendFileSync(filePath, `${readFileSync(filePath, "utf-8").endsWith("\n") ? "" : "\n"}\n${SKILLD_INSTRUCTIONS}\n`);
|
|
1213
|
+
else writeFileSync(filePath, `${SKILLD_INSTRUCTIONS}\n`);
|
|
1214
|
+
p.log.success(`Updated ${agentConfig.instructionFile}`);
|
|
1215
|
+
}
|
|
1186
1216
|
async function syncCommand(state, opts) {
|
|
1187
1217
|
if (opts.packages && opts.packages.length > 0) {
|
|
1188
1218
|
if (opts.packages.length > 1) return syncPackagesParallel({
|
|
@@ -1577,6 +1607,7 @@ async function syncSinglePackage(packageName, config) {
|
|
|
1577
1607
|
if (shared) linkSkillToAgents(skillDirName, shared, cwd);
|
|
1578
1608
|
if (!config.global) registerProject(cwd);
|
|
1579
1609
|
await ensureGitignore(shared ? SHARED_SKILLS_DIR : targets[config.agent].skillsDir, cwd, config.global);
|
|
1610
|
+
await ensureAgentInstructions(config.agent, cwd, config.global);
|
|
1580
1611
|
await shutdownWorker();
|
|
1581
1612
|
p.outro(`Synced ${packageName} to ${relative(cwd, skillDir)}`);
|
|
1582
1613
|
}
|
|
@@ -2755,6 +2786,23 @@ async function statusCommand(opts = {}) {
|
|
|
2755
2786
|
const total = localPkgs.size + globalPkgs.size;
|
|
2756
2787
|
p.log.info(`${total} package${total !== 1 ? "s" : ""}`);
|
|
2757
2788
|
}
|
|
2789
|
+
function removeAgentInstructions(agent, projectPath) {
|
|
2790
|
+
const agentConfig = targets[agent];
|
|
2791
|
+
if (!agentConfig.instructionFile) return false;
|
|
2792
|
+
const filePath = join(projectPath, agentConfig.instructionFile);
|
|
2793
|
+
if (!existsSync(filePath)) return false;
|
|
2794
|
+
const content = readFileSync(filePath, "utf-8");
|
|
2795
|
+
const startIdx = content.indexOf(SKILLD_MARKER_START);
|
|
2796
|
+
if (startIdx === -1) return false;
|
|
2797
|
+
const endIdx = content.indexOf(SKILLD_MARKER_END, startIdx);
|
|
2798
|
+
if (endIdx === -1) return false;
|
|
2799
|
+
const before = content.slice(0, startIdx).replace(/\n+$/, "");
|
|
2800
|
+
const after = content.slice(endIdx + 16).replace(/^\n+/, "");
|
|
2801
|
+
const updated = before + (before && after ? "\n" : "") + after;
|
|
2802
|
+
if (updated.trim() === "") rmSync(filePath);
|
|
2803
|
+
else writeFileSync(filePath, updated.endsWith("\n") ? updated : `${updated}\n`);
|
|
2804
|
+
return true;
|
|
2805
|
+
}
|
|
2758
2806
|
async function uninstallCommand(opts) {
|
|
2759
2807
|
let scope = opts.scope;
|
|
2760
2808
|
const registeredProjects = getRegisteredProjects();
|
|
@@ -2895,6 +2943,11 @@ async function uninstallCommand(opts) {
|
|
|
2895
2943
|
force: true
|
|
2896
2944
|
});
|
|
2897
2945
|
for (const [prefix, items] of groups) p.log.success(`Removed ${prefix}: ${formatGroup(items)}`);
|
|
2946
|
+
const agentTypes = agentFilter || Object.keys(targets);
|
|
2947
|
+
for (const proj of projectsToUnregister) for (const agent of agentTypes) if (removeAgentInstructions(agent, proj)) {
|
|
2948
|
+
const file = targets[agent].instructionFile;
|
|
2949
|
+
p.log.success(`Cleaned ${file}`);
|
|
2950
|
+
}
|
|
2898
2951
|
if (scope !== "all") for (const proj of projectsToUnregister) unregisterProject(proj);
|
|
2899
2952
|
p.outro("skilld uninstalled");
|
|
2900
2953
|
}
|
|
@@ -3619,7 +3672,7 @@ runMain(defineCommand({
|
|
|
3619
3672
|
p.note(`\x1B[90m${version}\x1B[0m → \x1B[1m\x1B[32m${selfUpdate.latest}\x1B[0m${released}\n\x1B[36m${cmd}\x1B[0m`, "\x1B[33mUpdate available\x1B[0m");
|
|
3620
3673
|
}
|
|
3621
3674
|
if (state.skills.length === 0) {
|
|
3622
|
-
if (!
|
|
3675
|
+
if (!hasCompletedWizard()) await runWizard();
|
|
3623
3676
|
const pkgJsonPath = join(cwd, "package.json");
|
|
3624
3677
|
const hasPkgJson = existsSync(pkgJsonPath);
|
|
3625
3678
|
const projectName = hasPkgJson ? JSON.parse(readFileSync(pkgJsonPath, "utf-8")).name : void 0;
|