@hasnatools/skills 0.1.15 → 0.1.17
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/index.js +282 -68
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -17809,10 +17809,10 @@ var applyOptions = (object, options = {}) => {
|
|
|
17809
17809
|
object.level = options.level === undefined ? colorLevel : options.level;
|
|
17810
17810
|
};
|
|
17811
17811
|
var chalkFactory = (options) => {
|
|
17812
|
-
const
|
|
17813
|
-
applyOptions(
|
|
17814
|
-
Object.setPrototypeOf(
|
|
17815
|
-
return
|
|
17812
|
+
const chalk2 = (...strings) => strings.join(" ");
|
|
17813
|
+
applyOptions(chalk2, options);
|
|
17814
|
+
Object.setPrototypeOf(chalk2, createChalk.prototype);
|
|
17815
|
+
return chalk2;
|
|
17816
17816
|
};
|
|
17817
17817
|
function createChalk(options) {
|
|
17818
17818
|
return chalkFactory(options);
|
|
@@ -17932,9 +17932,9 @@ var applyStyle = (self, string) => {
|
|
|
17932
17932
|
return openAll + string + closeAll;
|
|
17933
17933
|
};
|
|
17934
17934
|
Object.defineProperties(createChalk.prototype, styles2);
|
|
17935
|
-
var
|
|
17935
|
+
var chalk2 = createChalk();
|
|
17936
17936
|
var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
|
|
17937
|
-
var source_default =
|
|
17937
|
+
var source_default = chalk2;
|
|
17938
17938
|
|
|
17939
17939
|
// ../../node_modules/.bun/ora@8.2.0/node_modules/ora/index.js
|
|
17940
17940
|
import process9 from "node:process";
|
|
@@ -20709,6 +20709,22 @@ async function getMarketplaceSkills(options) {
|
|
|
20709
20709
|
const query = params.toString();
|
|
20710
20710
|
return apiRequest(`/skills${query ? `?${query}` : ""}`);
|
|
20711
20711
|
}
|
|
20712
|
+
async function getAllMarketplaceSkills() {
|
|
20713
|
+
const allSkills = [];
|
|
20714
|
+
let page = 1;
|
|
20715
|
+
const limit = 100;
|
|
20716
|
+
let totalPages = 1;
|
|
20717
|
+
while (page <= totalPages) {
|
|
20718
|
+
const result = await getMarketplaceSkills({ page, limit });
|
|
20719
|
+
if (result.error || !result.data) {
|
|
20720
|
+
return { error: result.error || "Failed to fetch skills", status: result.status };
|
|
20721
|
+
}
|
|
20722
|
+
allSkills.push(...result.data.skills);
|
|
20723
|
+
totalPages = result.data.pagination.totalPages;
|
|
20724
|
+
page++;
|
|
20725
|
+
}
|
|
20726
|
+
return { data: { skills: allSkills, total: allSkills.length }, status: 200 };
|
|
20727
|
+
}
|
|
20712
20728
|
async function getSkill(slug) {
|
|
20713
20729
|
return apiRequest(`/skills/${slug}`);
|
|
20714
20730
|
}
|
|
@@ -21010,10 +21026,98 @@ async function searchCommand(query) {
|
|
|
21010
21026
|
// src/commands/install.ts
|
|
21011
21027
|
import { existsSync as existsSync3, writeFileSync as writeFileSync3 } from "fs";
|
|
21012
21028
|
import { join as join3 } from "path";
|
|
21029
|
+
|
|
21030
|
+
// src/lib/theme.ts
|
|
21031
|
+
var colors = {
|
|
21032
|
+
primary: source_default.hex("#6366f1"),
|
|
21033
|
+
primaryBold: source_default.hex("#6366f1").bold,
|
|
21034
|
+
primaryDim: source_default.hex("#818cf8"),
|
|
21035
|
+
primaryBg: source_default.bgHex("#6366f1").white.bold,
|
|
21036
|
+
primaryBgDim: source_default.bgHex("#4f46e5").white,
|
|
21037
|
+
secondary: source_default.hex("#64748b"),
|
|
21038
|
+
secondaryBold: source_default.hex("#64748b").bold,
|
|
21039
|
+
success: source_default.hex("#22c55e"),
|
|
21040
|
+
successBold: source_default.hex("#22c55e").bold,
|
|
21041
|
+
warning: source_default.hex("#eab308"),
|
|
21042
|
+
warningBold: source_default.hex("#eab308").bold,
|
|
21043
|
+
error: source_default.hex("#ef4444"),
|
|
21044
|
+
errorBold: source_default.hex("#ef4444").bold,
|
|
21045
|
+
info: source_default.hex("#3b82f6"),
|
|
21046
|
+
infoBold: source_default.hex("#3b82f6").bold,
|
|
21047
|
+
dim: source_default.dim,
|
|
21048
|
+
bold: source_default.bold,
|
|
21049
|
+
white: source_default.white,
|
|
21050
|
+
gray: source_default.gray,
|
|
21051
|
+
highlight: source_default.hex("#a78bfa"),
|
|
21052
|
+
link: source_default.hex("#60a5fa").underline,
|
|
21053
|
+
code: source_default.hex("#f472b6")
|
|
21054
|
+
};
|
|
21055
|
+
var symbols = {
|
|
21056
|
+
success: colors.success("✓"),
|
|
21057
|
+
error: colors.error("✗"),
|
|
21058
|
+
warning: colors.warning("!"),
|
|
21059
|
+
info: colors.info("i"),
|
|
21060
|
+
arrow: colors.primary("→"),
|
|
21061
|
+
bullet: colors.dim("•"),
|
|
21062
|
+
star: colors.warning("★"),
|
|
21063
|
+
check: colors.success("✓"),
|
|
21064
|
+
cross: colors.error("✗"),
|
|
21065
|
+
pointer: colors.primary("❯")
|
|
21066
|
+
};
|
|
21067
|
+
function header(text, width = 50) {
|
|
21068
|
+
const padding = Math.max(0, width - text.length - 2);
|
|
21069
|
+
const leftPad = Math.floor(padding / 2);
|
|
21070
|
+
const rightPad = padding - leftPad;
|
|
21071
|
+
const paddedText = " ".repeat(leftPad) + text + " ".repeat(rightPad);
|
|
21072
|
+
return colors.primaryBg(` ${paddedText} `);
|
|
21073
|
+
}
|
|
21074
|
+
function keyValue(key, value, keyWidth = 15) {
|
|
21075
|
+
const paddedKey = key.padEnd(keyWidth);
|
|
21076
|
+
return `${colors.dim(paddedKey)} ${value}`;
|
|
21077
|
+
}
|
|
21078
|
+
function successItem(text, indent = 0) {
|
|
21079
|
+
return " ".repeat(indent) + symbols.success + " " + text;
|
|
21080
|
+
}
|
|
21081
|
+
function errorItem(text, indent = 0) {
|
|
21082
|
+
return " ".repeat(indent) + symbols.error + " " + text;
|
|
21083
|
+
}
|
|
21084
|
+
function command(cmd) {
|
|
21085
|
+
return colors.code(cmd);
|
|
21086
|
+
}
|
|
21087
|
+
function path6(p) {
|
|
21088
|
+
return colors.highlight(p);
|
|
21089
|
+
}
|
|
21090
|
+
function skillName(name) {
|
|
21091
|
+
return colors.primaryBold(name);
|
|
21092
|
+
}
|
|
21093
|
+
function count(n) {
|
|
21094
|
+
return colors.primaryBold(String(n));
|
|
21095
|
+
}
|
|
21096
|
+
function progressBar(percent, width = 20) {
|
|
21097
|
+
const filled = Math.round(percent / 100 * width);
|
|
21098
|
+
const empty = width - filled;
|
|
21099
|
+
return colors.primary("█".repeat(filled)) + colors.dim("░".repeat(empty));
|
|
21100
|
+
}
|
|
21101
|
+
function banner(title) {
|
|
21102
|
+
console.log();
|
|
21103
|
+
console.log(header(title));
|
|
21104
|
+
console.log();
|
|
21105
|
+
}
|
|
21106
|
+
function completionBanner(title) {
|
|
21107
|
+
console.log();
|
|
21108
|
+
console.log(header(title));
|
|
21109
|
+
console.log();
|
|
21110
|
+
}
|
|
21111
|
+
|
|
21112
|
+
// src/commands/install.ts
|
|
21013
21113
|
async function installCommand(slug, options = {}) {
|
|
21114
|
+
if (options.all) {
|
|
21115
|
+
return installAllSkills(options);
|
|
21116
|
+
}
|
|
21014
21117
|
if (!slug || slug.trim() === "") {
|
|
21015
|
-
console.log(
|
|
21016
|
-
console.log(
|
|
21118
|
+
console.log(colors.warning("Please provide a skill name"));
|
|
21119
|
+
console.log(colors.dim("Usage: skills install <name>"));
|
|
21120
|
+
console.log(colors.dim(" skills install --all"));
|
|
21017
21121
|
return;
|
|
21018
21122
|
}
|
|
21019
21123
|
const isLocal = options.local ?? false;
|
|
@@ -21022,20 +21126,23 @@ async function installCommand(slug, options = {}) {
|
|
|
21022
21126
|
let installDir;
|
|
21023
21127
|
if (isLocal) {
|
|
21024
21128
|
if (!hasLocalConfig()) {
|
|
21025
|
-
console.log(
|
|
21026
|
-
console.log(
|
|
21129
|
+
console.log(colors.warning("Not in a skills.md project"));
|
|
21130
|
+
console.log(colors.dim("Run `skills init` first or install globally (default)"));
|
|
21027
21131
|
return;
|
|
21028
21132
|
}
|
|
21029
21133
|
installDir = target === "claude" ? getProjectClaudeSkillsDir() : getProjectCodexSkillsDir();
|
|
21030
21134
|
} else {
|
|
21031
21135
|
installDir = target === "claude" ? getClaudeSkillsDir() : getCodexSkillsDir();
|
|
21032
21136
|
}
|
|
21033
|
-
const spinner = ora(
|
|
21137
|
+
const spinner = ora({
|
|
21138
|
+
text: `Fetching skill "${slug}"...`,
|
|
21139
|
+
color: "magenta"
|
|
21140
|
+
}).start();
|
|
21034
21141
|
try {
|
|
21035
21142
|
const skillResult = await installSkill(slug);
|
|
21036
21143
|
if (skillResult.error || !skillResult.data) {
|
|
21037
|
-
spinner.fail("Skill not found");
|
|
21038
|
-
console.error(
|
|
21144
|
+
spinner.fail(colors.error("Skill not found"));
|
|
21145
|
+
console.error(colors.error(skillResult.error || `Could not find skill: ${slug}`));
|
|
21039
21146
|
return;
|
|
21040
21147
|
}
|
|
21041
21148
|
const skill = skillResult.data;
|
|
@@ -21050,28 +21157,131 @@ async function installCommand(slug, options = {}) {
|
|
|
21050
21157
|
if (apiKey) {
|
|
21051
21158
|
await installSkillRemote(slug);
|
|
21052
21159
|
}
|
|
21053
|
-
spinner.succeed(`Installed ${
|
|
21160
|
+
spinner.succeed(colors.success(`Installed ${skillName(skill.name)} v${skill.version}`));
|
|
21054
21161
|
console.log();
|
|
21055
|
-
console.log(
|
|
21056
|
-
console.log(
|
|
21057
|
-
console.log(
|
|
21058
|
-
console.log(
|
|
21059
|
-
console.log(
|
|
21162
|
+
console.log(successItem(`Installed to ${path6(skillDir)}`));
|
|
21163
|
+
console.log(successItem("Created exports/ directory"));
|
|
21164
|
+
console.log(successItem("Created logs/ directory"));
|
|
21165
|
+
console.log(successItem(`Target: ${colors.primaryBold(target)}`));
|
|
21166
|
+
console.log(successItem(`Scope: ${colors.primaryBold(isLocal ? "project" : "global")}`));
|
|
21060
21167
|
console.log();
|
|
21061
|
-
console.log(
|
|
21062
|
-
console.log(` skills run ${slug} -- "your prompt or args"`);
|
|
21168
|
+
console.log(colors.dim("Usage:"));
|
|
21169
|
+
console.log(` ${command(`skills run ${slug} -- "your prompt or args"`)}`);
|
|
21063
21170
|
console.log();
|
|
21064
|
-
console.log(
|
|
21065
|
-
console.log(
|
|
21171
|
+
console.log(colors.dim("Skill execution happens remotely via API."));
|
|
21172
|
+
console.log(colors.dim("Exports will be saved to: ") + path6(`${skillDir}/exports/`));
|
|
21066
21173
|
} catch (error) {
|
|
21067
|
-
spinner.fail("Installation failed");
|
|
21068
|
-
console.error(
|
|
21174
|
+
spinner.fail(colors.error("Installation failed"));
|
|
21175
|
+
console.error(colors.error(error instanceof Error ? error.message : "Unknown error"));
|
|
21176
|
+
}
|
|
21177
|
+
}
|
|
21178
|
+
async function installAllSkills(options) {
|
|
21179
|
+
const isLocal = options.local ?? false;
|
|
21180
|
+
const target = options.target ?? getDefaultTarget();
|
|
21181
|
+
const apiKey = getApiKey();
|
|
21182
|
+
let installDir;
|
|
21183
|
+
if (isLocal) {
|
|
21184
|
+
if (!hasLocalConfig()) {
|
|
21185
|
+
console.log(colors.warning("Not in a skills.md project"));
|
|
21186
|
+
console.log(colors.dim("Run `skills init` first or install globally (default)"));
|
|
21187
|
+
return;
|
|
21188
|
+
}
|
|
21189
|
+
installDir = target === "claude" ? getProjectClaudeSkillsDir() : getProjectCodexSkillsDir();
|
|
21190
|
+
} else {
|
|
21191
|
+
installDir = target === "claude" ? getClaudeSkillsDir() : getCodexSkillsDir();
|
|
21192
|
+
}
|
|
21193
|
+
banner("Installing All Skills");
|
|
21194
|
+
const fetchSpinner = ora({
|
|
21195
|
+
text: "Fetching skill catalog...",
|
|
21196
|
+
color: "magenta"
|
|
21197
|
+
}).start();
|
|
21198
|
+
try {
|
|
21199
|
+
const result = await getAllMarketplaceSkills();
|
|
21200
|
+
if (result.error || !result.data) {
|
|
21201
|
+
fetchSpinner.fail(colors.error("Failed to fetch skills"));
|
|
21202
|
+
console.error(colors.error(result.error || "Could not fetch skill catalog"));
|
|
21203
|
+
return;
|
|
21204
|
+
}
|
|
21205
|
+
const skills = result.data.skills;
|
|
21206
|
+
const total = skills.length;
|
|
21207
|
+
fetchSpinner.succeed(colors.success(`Found ${count(total)} skills in marketplace`));
|
|
21208
|
+
console.log();
|
|
21209
|
+
console.log(keyValue("Target", colors.primaryBold(target)));
|
|
21210
|
+
console.log(keyValue("Scope", colors.primaryBold(isLocal ? "project" : "global")));
|
|
21211
|
+
console.log(keyValue("Directory", path6(installDir)));
|
|
21212
|
+
console.log();
|
|
21213
|
+
const results = {
|
|
21214
|
+
success: [],
|
|
21215
|
+
failed: [],
|
|
21216
|
+
skipped: []
|
|
21217
|
+
};
|
|
21218
|
+
for (let i = 0;i < skills.length; i++) {
|
|
21219
|
+
const skill = skills[i];
|
|
21220
|
+
const current = i + 1;
|
|
21221
|
+
const percent = Math.round(current / total * 100);
|
|
21222
|
+
const padWidth = String(total).length;
|
|
21223
|
+
const progress = `[${String(current).padStart(padWidth, " ")}/${total}]`;
|
|
21224
|
+
process.stdout.write(`\r${colors.dim(progress)} ${progressBar(percent)} ${colors.dim(`${percent}%`)} Installing ${colors.primary(skill.slug)}...`);
|
|
21225
|
+
process.stdout.write("\x1B[K");
|
|
21226
|
+
try {
|
|
21227
|
+
const skillResult = await installSkill(skill.slug);
|
|
21228
|
+
if (skillResult.error || !skillResult.data) {
|
|
21229
|
+
results.failed.push({ slug: skill.slug, error: skillResult.error || "Not found" });
|
|
21230
|
+
continue;
|
|
21231
|
+
}
|
|
21232
|
+
const skillData = skillResult.data;
|
|
21233
|
+
const skillDir = join3(installDir, `skill-${skill.slug}`);
|
|
21234
|
+
const exportsDir = join3(skillDir, "exports");
|
|
21235
|
+
const logsDir = join3(skillDir, "logs");
|
|
21236
|
+
ensureSkillsDir(skillDir);
|
|
21237
|
+
ensureSkillsDir(exportsDir);
|
|
21238
|
+
ensureSkillsDir(logsDir);
|
|
21239
|
+
writeFileSync3(join3(skillDir, "SKILL.md"), skillData.skillMdContent);
|
|
21240
|
+
if (apiKey) {
|
|
21241
|
+
try {
|
|
21242
|
+
await installSkillRemote(skill.slug);
|
|
21243
|
+
} catch {}
|
|
21244
|
+
}
|
|
21245
|
+
results.success.push(skill.slug);
|
|
21246
|
+
} catch (error) {
|
|
21247
|
+
results.failed.push({
|
|
21248
|
+
slug: skill.slug,
|
|
21249
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
21250
|
+
});
|
|
21251
|
+
}
|
|
21252
|
+
}
|
|
21253
|
+
process.stdout.write("\r\x1B[K");
|
|
21254
|
+
completionBanner("Installation Complete");
|
|
21255
|
+
if (results.success.length > 0) {
|
|
21256
|
+
console.log(successItem(`Successfully installed: ${colors.successBold(String(results.success.length))} skills`));
|
|
21257
|
+
}
|
|
21258
|
+
if (results.failed.length > 0) {
|
|
21259
|
+
console.log(errorItem(`Failed to install: ${colors.errorBold(String(results.failed.length))} skills`));
|
|
21260
|
+
console.log();
|
|
21261
|
+
console.log(colors.dim("Failed skills:"));
|
|
21262
|
+
for (const fail of results.failed.slice(0, 10)) {
|
|
21263
|
+
console.log(colors.error(` ${symbols.bullet} ${fail.slug}: ${fail.error}`));
|
|
21264
|
+
}
|
|
21265
|
+
if (results.failed.length > 10) {
|
|
21266
|
+
console.log(colors.dim(` ... and ${results.failed.length - 10} more`));
|
|
21267
|
+
}
|
|
21268
|
+
}
|
|
21269
|
+
console.log();
|
|
21270
|
+
console.log(colors.dim("Installation directory:"));
|
|
21271
|
+
console.log(` ${path6(installDir)}`);
|
|
21272
|
+
console.log();
|
|
21273
|
+
console.log(colors.dim("Run any skill with:"));
|
|
21274
|
+
console.log(` ${command('skills run <skill-name> -- "your prompt"')}`);
|
|
21275
|
+
console.log();
|
|
21276
|
+
} catch (error) {
|
|
21277
|
+
fetchSpinner.fail(colors.error("Installation failed"));
|
|
21278
|
+
console.error(colors.error(error instanceof Error ? error.message : "Unknown error"));
|
|
21069
21279
|
}
|
|
21070
21280
|
}
|
|
21071
21281
|
async function uninstallCommand(slug, options = {}) {
|
|
21072
21282
|
if (!slug || slug.trim() === "") {
|
|
21073
|
-
console.log(
|
|
21074
|
-
console.log(
|
|
21283
|
+
console.log(colors.warning("Please provide a skill name"));
|
|
21284
|
+
console.log(colors.dim("Usage: skills uninstall <name>"));
|
|
21075
21285
|
return;
|
|
21076
21286
|
}
|
|
21077
21287
|
const isLocal = options.local ?? false;
|
|
@@ -21079,8 +21289,8 @@ async function uninstallCommand(slug, options = {}) {
|
|
|
21079
21289
|
let installDir;
|
|
21080
21290
|
if (isLocal) {
|
|
21081
21291
|
if (!hasLocalConfig()) {
|
|
21082
|
-
console.log(
|
|
21083
|
-
console.log(
|
|
21292
|
+
console.log(colors.warning("Not in a skills.md project"));
|
|
21293
|
+
console.log(colors.dim("Run `skills init` first or uninstall from global (default)"));
|
|
21084
21294
|
return;
|
|
21085
21295
|
}
|
|
21086
21296
|
installDir = target === "claude" ? getProjectClaudeSkillsDir() : getProjectCodexSkillsDir();
|
|
@@ -21091,20 +21301,23 @@ async function uninstallCommand(slug, options = {}) {
|
|
|
21091
21301
|
if (!existsSync3(skillDir)) {
|
|
21092
21302
|
const oldSkillDir = join3(installDir, slug);
|
|
21093
21303
|
if (!existsSync3(oldSkillDir)) {
|
|
21094
|
-
console.log(
|
|
21304
|
+
console.log(colors.warning(`Skill "${slug}" is not installed`));
|
|
21095
21305
|
return;
|
|
21096
21306
|
}
|
|
21097
21307
|
}
|
|
21098
|
-
const spinner = ora(
|
|
21308
|
+
const spinner = ora({
|
|
21309
|
+
text: `Uninstalling "${slug}"...`,
|
|
21310
|
+
color: "magenta"
|
|
21311
|
+
}).start();
|
|
21099
21312
|
try {
|
|
21100
21313
|
const { rmSync: rmSync2 } = await import("fs");
|
|
21101
21314
|
rmSync2(skillDir, { recursive: true, force: true });
|
|
21102
|
-
spinner.succeed(`Uninstalled ${
|
|
21315
|
+
spinner.succeed(colors.success(`Uninstalled ${skillName(slug)}`));
|
|
21103
21316
|
console.log();
|
|
21104
|
-
console.log(
|
|
21317
|
+
console.log(successItem(`Removed from ${path6(skillDir)}`));
|
|
21105
21318
|
} catch (error) {
|
|
21106
|
-
spinner.fail("Uninstallation failed");
|
|
21107
|
-
console.error(
|
|
21319
|
+
spinner.fail(colors.error("Uninstallation failed"));
|
|
21320
|
+
console.error(colors.error(error instanceof Error ? error.message : "Unknown error"));
|
|
21108
21321
|
}
|
|
21109
21322
|
}
|
|
21110
21323
|
|
|
@@ -21468,8 +21681,8 @@ async function targetCommand(target) {
|
|
|
21468
21681
|
setDefaultTarget(target);
|
|
21469
21682
|
console.log(source_default.green("✓") + ` Default target set to ${source_default.bold(target)}`);
|
|
21470
21683
|
}
|
|
21471
|
-
function getNestedValue(obj,
|
|
21472
|
-
const keys =
|
|
21684
|
+
function getNestedValue(obj, path7) {
|
|
21685
|
+
const keys = path7.split(".");
|
|
21473
21686
|
let current = obj;
|
|
21474
21687
|
for (const key of keys) {
|
|
21475
21688
|
if (current === null || current === undefined)
|
|
@@ -21791,14 +22004,14 @@ var LOCAL_SKILLS = {
|
|
|
21791
22004
|
video: "generate-video",
|
|
21792
22005
|
audio: "generate-audio"
|
|
21793
22006
|
};
|
|
21794
|
-
function findLocalSkill(
|
|
21795
|
-
const globalDir = join7(homedir3(), ".claude", "skills",
|
|
22007
|
+
function findLocalSkill(skillName2) {
|
|
22008
|
+
const globalDir = join7(homedir3(), ".claude", "skills", skillName2);
|
|
21796
22009
|
if (existsSync7(globalDir)) {
|
|
21797
22010
|
return globalDir;
|
|
21798
22011
|
}
|
|
21799
22012
|
const projectRoot = findProjectRoot();
|
|
21800
22013
|
if (projectRoot) {
|
|
21801
|
-
const projectDir = join7(projectRoot, ".claude", "skills",
|
|
22014
|
+
const projectDir = join7(projectRoot, ".claude", "skills", skillName2);
|
|
21802
22015
|
if (existsSync7(projectDir)) {
|
|
21803
22016
|
return projectDir;
|
|
21804
22017
|
}
|
|
@@ -22653,7 +22866,7 @@ function parseFrontmatter2(content) {
|
|
|
22653
22866
|
}
|
|
22654
22867
|
return result;
|
|
22655
22868
|
}
|
|
22656
|
-
async function updateCommand(
|
|
22869
|
+
async function updateCommand(skillName2, options = {}) {
|
|
22657
22870
|
const target = options.target ?? getDefaultTarget();
|
|
22658
22871
|
const skillsDir = target === "claude" ? getClaudeSkillsDir() : getCodexSkillsDir();
|
|
22659
22872
|
if (!existsSync9(skillsDir)) {
|
|
@@ -22672,7 +22885,7 @@ async function updateCommand(skillName, options = {}) {
|
|
|
22672
22885
|
const content = readFileSync5(skillMdPath, "utf-8");
|
|
22673
22886
|
const frontmatter = parseFrontmatter2(content);
|
|
22674
22887
|
const slug = entry.name.replace("skill-", "");
|
|
22675
|
-
if (
|
|
22888
|
+
if (skillName2 && slug !== skillName2 && frontmatter.name !== skillName2) {
|
|
22676
22889
|
continue;
|
|
22677
22890
|
}
|
|
22678
22891
|
installedSkills.push({
|
|
@@ -22683,8 +22896,8 @@ async function updateCommand(skillName, options = {}) {
|
|
|
22683
22896
|
});
|
|
22684
22897
|
}
|
|
22685
22898
|
if (installedSkills.length === 0) {
|
|
22686
|
-
if (
|
|
22687
|
-
console.log(source_default.yellow(`Skill "${
|
|
22899
|
+
if (skillName2) {
|
|
22900
|
+
console.log(source_default.yellow(`Skill "${skillName2}" not found`));
|
|
22688
22901
|
} else {
|
|
22689
22902
|
console.log(source_default.dim("No skills installed"));
|
|
22690
22903
|
}
|
|
@@ -22922,9 +23135,9 @@ async function doctorCommand() {
|
|
|
22922
23135
|
}
|
|
22923
23136
|
|
|
22924
23137
|
// src/index.ts
|
|
22925
|
-
var indigo12 =
|
|
23138
|
+
var indigo12 = colors.primary;
|
|
22926
23139
|
var program2 = new Command;
|
|
22927
|
-
program2.name("skills").description("CLI for skills.md - AI Agent Skills Marketplace").version("0.1.
|
|
23140
|
+
program2.name("skills").description("CLI for skills.md - AI Agent Skills Marketplace").version("0.1.17");
|
|
22928
23141
|
program2.command("init").description("Initialize skills.md in current project").option("-f, --force", "Force re-initialization (removes existing .skills/)").action((options) => {
|
|
22929
23142
|
initCommand({ force: options.force });
|
|
22930
23143
|
});
|
|
@@ -22941,10 +23154,11 @@ program2.command("marketplace").alias("market").description("Browse skills from
|
|
|
22941
23154
|
category: options.category
|
|
22942
23155
|
});
|
|
22943
23156
|
});
|
|
22944
|
-
program2.command("install
|
|
22945
|
-
installCommand(name, {
|
|
23157
|
+
program2.command("install [name]").alias("i").description("Install a skill or all skills (global by default)").option("-l, --local", "Install to current project instead of global").option("-t, --target <target>", "Target platform (claude, codex)").option("-a, --all", "Install all skills from marketplace").action((name, options) => {
|
|
23158
|
+
installCommand(name || "", {
|
|
22946
23159
|
local: options.local,
|
|
22947
|
-
target: options.target
|
|
23160
|
+
target: options.target,
|
|
23161
|
+
all: options.all
|
|
22948
23162
|
});
|
|
22949
23163
|
});
|
|
22950
23164
|
program2.command("uninstall <name>").alias("remove").description("Uninstall a skill (global by default)").option("-l, --local", "Uninstall from current project instead of global").option("-t, --target <target>", "Target platform (claude, codex)").action((name, options) => {
|
|
@@ -23025,64 +23239,64 @@ program2.command("upgrade").description("Upgrade the Skills CLI to the latest ve
|
|
|
23025
23239
|
program2.command("doctor").description("Check your environment and diagnose issues").action(doctorCommand);
|
|
23026
23240
|
program2.addHelpText("after", `
|
|
23027
23241
|
${indigo12.bold("Examples:")}
|
|
23028
|
-
${
|
|
23242
|
+
${chalk.dim("# Initialize in current project")}
|
|
23029
23243
|
$ skills init
|
|
23030
23244
|
|
|
23031
|
-
${
|
|
23245
|
+
${chalk.dim("# Login to your account")}
|
|
23032
23246
|
$ skills login
|
|
23033
23247
|
|
|
23034
|
-
${
|
|
23248
|
+
${chalk.dim("# Browse the marketplace")}
|
|
23035
23249
|
$ skills marketplace
|
|
23036
23250
|
|
|
23037
|
-
${
|
|
23251
|
+
${chalk.dim("# Search for skills")}
|
|
23038
23252
|
$ skills search code review
|
|
23039
23253
|
|
|
23040
|
-
${
|
|
23254
|
+
${chalk.dim("# Install a skill")}
|
|
23041
23255
|
$ skills install code-review
|
|
23042
23256
|
|
|
23043
|
-
${
|
|
23257
|
+
${chalk.dim("# Install globally for Claude Code")}
|
|
23044
23258
|
$ skills install code-review -g -t claude
|
|
23045
23259
|
|
|
23046
|
-
${
|
|
23260
|
+
${chalk.dim("# List installed skills")}
|
|
23047
23261
|
$ skills list
|
|
23048
23262
|
|
|
23049
|
-
${
|
|
23263
|
+
${chalk.dim("# Generate content using a skill")}
|
|
23050
23264
|
$ skills generate image "a sunset over mountains"
|
|
23051
23265
|
|
|
23052
|
-
${
|
|
23266
|
+
${chalk.dim("# View execution history")}
|
|
23053
23267
|
$ skills history
|
|
23054
23268
|
$ skills history --skill image-generator
|
|
23055
23269
|
$ skills history --status completed
|
|
23056
23270
|
$ skills history --local
|
|
23057
23271
|
|
|
23058
|
-
${
|
|
23272
|
+
${chalk.dim("# View exports for a skill")}
|
|
23059
23273
|
$ skills exports image-generator
|
|
23060
23274
|
|
|
23061
|
-
${
|
|
23275
|
+
${chalk.dim("# View logs for a skill")}
|
|
23062
23276
|
$ skills logs code-review
|
|
23063
23277
|
|
|
23064
|
-
${
|
|
23278
|
+
${chalk.dim("# Submit feedback")}
|
|
23065
23279
|
$ skills feedback
|
|
23066
23280
|
|
|
23067
|
-
${
|
|
23281
|
+
${chalk.dim("# Get skill info")}
|
|
23068
23282
|
$ skills info code-review
|
|
23069
23283
|
|
|
23070
|
-
${
|
|
23284
|
+
${chalk.dim("# Check credits balance")}
|
|
23071
23285
|
$ skills credits
|
|
23072
23286
|
|
|
23073
|
-
${
|
|
23287
|
+
${chalk.dim("# Purchase credits")}
|
|
23074
23288
|
$ skills credits buy 25
|
|
23075
23289
|
|
|
23076
|
-
${
|
|
23290
|
+
${chalk.dim("# Enable 2FA for CLI purchases")}
|
|
23077
23291
|
$ skills config cli-2fa on
|
|
23078
23292
|
|
|
23079
|
-
${
|
|
23293
|
+
${chalk.dim("# Update installed skills")}
|
|
23080
23294
|
$ skills update
|
|
23081
23295
|
|
|
23082
|
-
${
|
|
23296
|
+
${chalk.dim("# Upgrade CLI")}
|
|
23083
23297
|
$ skills upgrade
|
|
23084
23298
|
|
|
23085
|
-
${
|
|
23299
|
+
${chalk.dim("# Check environment")}
|
|
23086
23300
|
$ skills doctor
|
|
23087
23301
|
|
|
23088
23302
|
${indigo12.bold("Documentation:")}
|