@hasna/skills 0.1.10 → 0.1.12
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/bin/index.js +81 -39
- package/bin/mcp.js +24 -24
- package/package.json +1 -1
package/bin/index.js
CHANGED
|
@@ -1878,7 +1878,7 @@ var package_default;
|
|
|
1878
1878
|
var init_package = __esm(() => {
|
|
1879
1879
|
package_default = {
|
|
1880
1880
|
name: "@hasna/skills",
|
|
1881
|
-
version: "0.1.
|
|
1881
|
+
version: "0.1.12",
|
|
1882
1882
|
description: "Skills library for AI coding agents",
|
|
1883
1883
|
type: "module",
|
|
1884
1884
|
bin: {
|
|
@@ -34809,8 +34809,8 @@ var init_mcp2 = __esm(() => {
|
|
|
34809
34809
|
title: "List Skills",
|
|
34810
34810
|
description: "List skills. Returns {name,category} by default; detail:true for full objects.",
|
|
34811
34811
|
inputSchema: {
|
|
34812
|
-
category: exports_external.string().optional()
|
|
34813
|
-
detail: exports_external.boolean().optional()
|
|
34812
|
+
category: exports_external.string().optional(),
|
|
34813
|
+
detail: exports_external.boolean().optional()
|
|
34814
34814
|
}
|
|
34815
34815
|
}, async ({ category, detail }) => {
|
|
34816
34816
|
const skills = category ? getSkillsByCategory(category) : SKILLS;
|
|
@@ -34823,8 +34823,8 @@ var init_mcp2 = __esm(() => {
|
|
|
34823
34823
|
title: "Search Skills",
|
|
34824
34824
|
description: "Search skills by name, description, or tags. Returns compact list by default.",
|
|
34825
34825
|
inputSchema: {
|
|
34826
|
-
query: exports_external.string()
|
|
34827
|
-
detail: exports_external.boolean().optional()
|
|
34826
|
+
query: exports_external.string(),
|
|
34827
|
+
detail: exports_external.boolean().optional()
|
|
34828
34828
|
}
|
|
34829
34829
|
}, async ({ query, detail }) => {
|
|
34830
34830
|
const results = searchSkills(query);
|
|
@@ -34837,7 +34837,7 @@ var init_mcp2 = __esm(() => {
|
|
|
34837
34837
|
title: "Get Skill Info",
|
|
34838
34838
|
description: "Get skill metadata, env vars, and dependencies.",
|
|
34839
34839
|
inputSchema: {
|
|
34840
|
-
name: exports_external.string()
|
|
34840
|
+
name: exports_external.string()
|
|
34841
34841
|
}
|
|
34842
34842
|
}, async ({ name }) => {
|
|
34843
34843
|
const skill = getSkill(name);
|
|
@@ -34854,7 +34854,7 @@ var init_mcp2 = __esm(() => {
|
|
|
34854
34854
|
title: "Get Skill Docs",
|
|
34855
34855
|
description: "Get skill documentation (SKILL.md > README.md > CLAUDE.md).",
|
|
34856
34856
|
inputSchema: {
|
|
34857
|
-
name: exports_external.string()
|
|
34857
|
+
name: exports_external.string()
|
|
34858
34858
|
}
|
|
34859
34859
|
}, async ({ name }) => {
|
|
34860
34860
|
const doc2 = getSkillBestDoc(name);
|
|
@@ -34867,9 +34867,9 @@ var init_mcp2 = __esm(() => {
|
|
|
34867
34867
|
title: "Install Skill",
|
|
34868
34868
|
description: "Install a skill to .skills/ or to an agent dir (for: claude|codex|gemini|all).",
|
|
34869
34869
|
inputSchema: {
|
|
34870
|
-
name: exports_external.string()
|
|
34871
|
-
for: exports_external.string().optional()
|
|
34872
|
-
scope: exports_external.string().optional()
|
|
34870
|
+
name: exports_external.string(),
|
|
34871
|
+
for: exports_external.string().optional(),
|
|
34872
|
+
scope: exports_external.string().optional()
|
|
34873
34873
|
}
|
|
34874
34874
|
}, async ({ name, for: agentArg, scope }) => {
|
|
34875
34875
|
if (agentArg) {
|
|
@@ -34898,9 +34898,9 @@ var init_mcp2 = __esm(() => {
|
|
|
34898
34898
|
title: "Install Category",
|
|
34899
34899
|
description: "Install all skills in a category, optionally for a specific agent.",
|
|
34900
34900
|
inputSchema: {
|
|
34901
|
-
category: exports_external.string()
|
|
34902
|
-
for: exports_external.string().optional()
|
|
34903
|
-
scope: exports_external.string().optional()
|
|
34901
|
+
category: exports_external.string(),
|
|
34902
|
+
for: exports_external.string().optional(),
|
|
34903
|
+
scope: exports_external.string().optional()
|
|
34904
34904
|
}
|
|
34905
34905
|
}, async ({ category, for: agentArg, scope }) => {
|
|
34906
34906
|
const matchedCategory = CATEGORIES.find((c) => c.toLowerCase() === category.toLowerCase());
|
|
@@ -34944,9 +34944,9 @@ var init_mcp2 = __esm(() => {
|
|
|
34944
34944
|
title: "Remove Skill",
|
|
34945
34945
|
description: "Remove a skill from .skills/ or from an agent dir.",
|
|
34946
34946
|
inputSchema: {
|
|
34947
|
-
name: exports_external.string()
|
|
34948
|
-
for: exports_external.string().optional()
|
|
34949
|
-
scope: exports_external.string().optional()
|
|
34947
|
+
name: exports_external.string(),
|
|
34948
|
+
for: exports_external.string().optional(),
|
|
34949
|
+
scope: exports_external.string().optional()
|
|
34950
34950
|
}
|
|
34951
34951
|
}, async ({ name, for: agentArg, scope }) => {
|
|
34952
34952
|
if (agentArg) {
|
|
@@ -35000,7 +35000,7 @@ var init_mcp2 = __esm(() => {
|
|
|
35000
35000
|
title: "Get Requirements",
|
|
35001
35001
|
description: "Get env vars, system deps, and npm dependencies for a skill.",
|
|
35002
35002
|
inputSchema: {
|
|
35003
|
-
name: exports_external.string()
|
|
35003
|
+
name: exports_external.string()
|
|
35004
35004
|
}
|
|
35005
35005
|
}, async ({ name }) => {
|
|
35006
35006
|
const reqs = getSkillRequirements(name);
|
|
@@ -35013,8 +35013,8 @@ var init_mcp2 = __esm(() => {
|
|
|
35013
35013
|
title: "Run Skill",
|
|
35014
35014
|
description: "Run a skill by name with optional arguments.",
|
|
35015
35015
|
inputSchema: {
|
|
35016
|
-
name: exports_external.string()
|
|
35017
|
-
args: exports_external.array(exports_external.string()).optional()
|
|
35016
|
+
name: exports_external.string(),
|
|
35017
|
+
args: exports_external.array(exports_external.string()).optional()
|
|
35018
35018
|
}
|
|
35019
35019
|
}, async ({ name, args }) => {
|
|
35020
35020
|
const skill = getSkill(name);
|
|
@@ -35048,9 +35048,9 @@ var init_mcp2 = __esm(() => {
|
|
|
35048
35048
|
title: "Import Skills",
|
|
35049
35049
|
description: "Install skills from an export payload. Supports agent installs via 'for'.",
|
|
35050
35050
|
inputSchema: {
|
|
35051
|
-
skills: exports_external.array(exports_external.string())
|
|
35052
|
-
for: exports_external.string().optional()
|
|
35053
|
-
scope: exports_external.string().optional()
|
|
35051
|
+
skills: exports_external.array(exports_external.string()),
|
|
35052
|
+
for: exports_external.string().optional(),
|
|
35053
|
+
scope: exports_external.string().optional()
|
|
35054
35054
|
}
|
|
35055
35055
|
}, async ({ skills: skillList, for: agentArg, scope }) => {
|
|
35056
35056
|
if (!skillList || skillList.length === 0) {
|
|
@@ -35146,7 +35146,7 @@ var init_mcp2 = __esm(() => {
|
|
|
35146
35146
|
server.registerTool("search_tools", {
|
|
35147
35147
|
title: "Search Tools",
|
|
35148
35148
|
description: "List tool names, optionally filtered by keyword.",
|
|
35149
|
-
inputSchema: { query: exports_external.string().optional()
|
|
35149
|
+
inputSchema: { query: exports_external.string().optional() }
|
|
35150
35150
|
}, async ({ query }) => {
|
|
35151
35151
|
const all = [
|
|
35152
35152
|
"list_skills",
|
|
@@ -35172,7 +35172,7 @@ var init_mcp2 = __esm(() => {
|
|
|
35172
35172
|
server.registerTool("describe_tools", {
|
|
35173
35173
|
title: "Describe Tools",
|
|
35174
35174
|
description: "Get descriptions for specific tools by name.",
|
|
35175
|
-
inputSchema: { names: exports_external.array(exports_external.string())
|
|
35175
|
+
inputSchema: { names: exports_external.array(exports_external.string()) }
|
|
35176
35176
|
}, async ({ names }) => {
|
|
35177
35177
|
const descriptions = {
|
|
35178
35178
|
list_skills: "List skills {name,category}. Params: category?, detail?",
|
|
@@ -35253,6 +35253,18 @@ function json2(data, status = 200) {
|
|
|
35253
35253
|
function isValidSkillName(name) {
|
|
35254
35254
|
return /^[a-z0-9-]+$/.test(name);
|
|
35255
35255
|
}
|
|
35256
|
+
function pickFields(obj, fields) {
|
|
35257
|
+
if (fields.length === 0)
|
|
35258
|
+
return obj;
|
|
35259
|
+
const rec = obj;
|
|
35260
|
+
return Object.fromEntries(fields.filter((f) => (f in rec)).map((f) => [f, rec[f]]));
|
|
35261
|
+
}
|
|
35262
|
+
function parseFields(searchParams) {
|
|
35263
|
+
const raw = searchParams.get("fields");
|
|
35264
|
+
if (!raw)
|
|
35265
|
+
return [];
|
|
35266
|
+
return raw.split(",").map((f) => f.trim()).filter(Boolean);
|
|
35267
|
+
}
|
|
35256
35268
|
function getAllSkillsWithStatus() {
|
|
35257
35269
|
const installed = new Set(getInstalledSkills());
|
|
35258
35270
|
return SKILLS.map((meta3) => {
|
|
@@ -35289,7 +35301,9 @@ function createFetchHandler(options) {
|
|
|
35289
35301
|
const path = url2.pathname;
|
|
35290
35302
|
const method = req.method;
|
|
35291
35303
|
if (path === "/api/skills" && method === "GET") {
|
|
35292
|
-
|
|
35304
|
+
const fields = parseFields(url2.searchParams);
|
|
35305
|
+
const skills = getAllSkillsWithStatus();
|
|
35306
|
+
return json2(fields.length ? skills.map((s) => pickFields(s, fields)) : skills);
|
|
35293
35307
|
}
|
|
35294
35308
|
if (path === "/api/categories" && method === "GET") {
|
|
35295
35309
|
const counts = CATEGORIES.map((cat) => ({
|
|
@@ -35312,12 +35326,13 @@ function createFetchHandler(options) {
|
|
|
35312
35326
|
const query = url2.searchParams.get("q") || "";
|
|
35313
35327
|
if (!query.trim())
|
|
35314
35328
|
return json2([]);
|
|
35329
|
+
const fields = parseFields(url2.searchParams);
|
|
35315
35330
|
const results = searchSkills(query);
|
|
35316
35331
|
const installed = new Set(getInstalledSkills());
|
|
35317
|
-
|
|
35332
|
+
const mapped = results.map((meta3) => {
|
|
35318
35333
|
const reqs = getSkillRequirements(meta3.name);
|
|
35319
35334
|
const envVars = reqs?.envVars || [];
|
|
35320
|
-
|
|
35335
|
+
const obj = {
|
|
35321
35336
|
name: meta3.name,
|
|
35322
35337
|
displayName: meta3.displayName,
|
|
35323
35338
|
description: meta3.description,
|
|
@@ -35329,7 +35344,9 @@ function createFetchHandler(options) {
|
|
|
35329
35344
|
systemDeps: reqs?.systemDeps || [],
|
|
35330
35345
|
cliCommand: reqs?.cliCommand || null
|
|
35331
35346
|
};
|
|
35332
|
-
|
|
35347
|
+
return fields.length ? pickFields(obj, fields) : obj;
|
|
35348
|
+
});
|
|
35349
|
+
return json2(mapped);
|
|
35333
35350
|
}
|
|
35334
35351
|
const singleMatch = path.match(/^\/api\/skills\/([^/]+)$/);
|
|
35335
35352
|
if (singleMatch && method === "GET") {
|
|
@@ -35339,11 +35356,12 @@ function createFetchHandler(options) {
|
|
|
35339
35356
|
const meta3 = getSkill(name);
|
|
35340
35357
|
if (!meta3)
|
|
35341
35358
|
return json2({ error: `Skill '${name}' not found` }, 404);
|
|
35359
|
+
const fields = parseFields(url2.searchParams);
|
|
35342
35360
|
const reqs = getSkillRequirements(name);
|
|
35343
35361
|
const docs = getSkillBestDoc(name);
|
|
35344
35362
|
const installed = new Set(getInstalledSkills());
|
|
35345
35363
|
const envVars = reqs?.envVars || [];
|
|
35346
|
-
|
|
35364
|
+
const obj = {
|
|
35347
35365
|
name: meta3.name,
|
|
35348
35366
|
displayName: meta3.displayName,
|
|
35349
35367
|
description: meta3.description,
|
|
@@ -35355,7 +35373,8 @@ function createFetchHandler(options) {
|
|
|
35355
35373
|
systemDeps: reqs?.systemDeps || [],
|
|
35356
35374
|
cliCommand: reqs?.cliCommand || null,
|
|
35357
35375
|
docs: docs || null
|
|
35358
|
-
}
|
|
35376
|
+
};
|
|
35377
|
+
return json2(fields.length ? pickFields(obj, fields) : obj);
|
|
35359
35378
|
}
|
|
35360
35379
|
const docsMatch = path.match(/^\/api\/skills\/([^/]+)\/docs$/);
|
|
35361
35380
|
if (docsMatch && method === "GET") {
|
|
@@ -35383,18 +35402,13 @@ function createFetchHandler(options) {
|
|
|
35383
35402
|
const results = agents.map((agent) => installSkillForAgent(name, { agent, scope }, generateSkillMd));
|
|
35384
35403
|
const allSuccess = results.every((r) => r.success);
|
|
35385
35404
|
const errors4 = results.filter((r) => !r.success).map((r) => r.error);
|
|
35386
|
-
return json2({
|
|
35387
|
-
skill: name,
|
|
35388
|
-
success: allSuccess,
|
|
35389
|
-
results,
|
|
35390
|
-
...errors4.length > 0 ? { error: errors4.join("; ") } : {}
|
|
35391
|
-
}, allSuccess ? 200 : 400);
|
|
35405
|
+
return json2(allSuccess ? { skill: name, success: true } : { skill: name, success: false, results, error: errors4.join("; ") }, allSuccess ? 200 : 400);
|
|
35392
35406
|
} catch (e) {
|
|
35393
35407
|
return json2({ skill: name, success: false, error: e instanceof Error ? e.message : "Unknown error" }, 400);
|
|
35394
35408
|
}
|
|
35395
35409
|
} else {
|
|
35396
35410
|
const result = installSkill(name);
|
|
35397
|
-
return json2(result, result.success ? 200 : 400);
|
|
35411
|
+
return json2(result.success ? { skill: name, success: true } : { skill: name, success: false, error: result.error }, result.success ? 200 : 400);
|
|
35398
35412
|
}
|
|
35399
35413
|
}
|
|
35400
35414
|
if (path === "/api/skills/install-category" && method === "POST") {
|
|
@@ -36859,8 +36873,9 @@ Skills installed to .skills/`));
|
|
|
36859
36873
|
process.exitCode = 1;
|
|
36860
36874
|
}
|
|
36861
36875
|
});
|
|
36862
|
-
program2.command("list").alias("ls").option("-c, --category <category>", "Filter by category").option("-i, --installed", "Show only installed skills", false).option("-t, --tags <tags>", "Filter by comma-separated tags (OR logic, case-insensitive)").option("--json", "Output as JSON", false).option("--brief", "One line per skill: name \u2014 description [category]", false).description("List available or installed skills").action((options) => {
|
|
36876
|
+
program2.command("list").alias("ls").option("-c, --category <category>", "Filter by category").option("-i, --installed", "Show only installed skills", false).option("-t, --tags <tags>", "Filter by comma-separated tags (OR logic, case-insensitive)").option("--json", "Output as JSON", false).option("--brief", "One line per skill: name \u2014 description [category]", false).option("--format <format>", "Output format: compact (names only) or csv (name,category,description)").description("List available or installed skills").action((options) => {
|
|
36863
36877
|
const brief = options.brief && !options.json;
|
|
36878
|
+
const fmt = !options.json ? options.format : undefined;
|
|
36864
36879
|
if (options.installed) {
|
|
36865
36880
|
const installed = getInstalledSkills();
|
|
36866
36881
|
if (options.json) {
|
|
@@ -36940,6 +36955,19 @@ Skills matching tags [${tagFilter.join(", ")}] (${skills.length}):
|
|
|
36940
36955
|
console.log(JSON.stringify(SKILLS, null, 2));
|
|
36941
36956
|
return;
|
|
36942
36957
|
}
|
|
36958
|
+
if (fmt === "compact") {
|
|
36959
|
+
for (const s of SKILLS)
|
|
36960
|
+
console.log(s.name);
|
|
36961
|
+
return;
|
|
36962
|
+
}
|
|
36963
|
+
if (fmt === "csv") {
|
|
36964
|
+
console.log("name,category,description");
|
|
36965
|
+
for (const s of SKILLS) {
|
|
36966
|
+
const desc = s.description.replace(/"/g, '""');
|
|
36967
|
+
console.log(`${s.name},${s.category},"${desc}"`);
|
|
36968
|
+
}
|
|
36969
|
+
return;
|
|
36970
|
+
}
|
|
36943
36971
|
if (brief) {
|
|
36944
36972
|
const sorted = [...SKILLS].sort((a, b) => {
|
|
36945
36973
|
const catCmp = a.category.localeCompare(b.category);
|
|
@@ -36962,7 +36990,7 @@ Available skills (${SKILLS.length}):
|
|
|
36962
36990
|
console.log();
|
|
36963
36991
|
}
|
|
36964
36992
|
});
|
|
36965
|
-
program2.command("search").argument("<query>", "Search term").option("--json", "Output as JSON", false).option("--brief", "One line per skill: name \u2014 description [category]", false).option("-c, --category <category>", "Filter results by category").option("-t, --tags <tags>", "Filter results by comma-separated tags (OR logic, case-insensitive)").description("Search for skills").action((query, options) => {
|
|
36993
|
+
program2.command("search").argument("<query>", "Search term").option("--json", "Output as JSON", false).option("--brief", "One line per skill: name \u2014 description [category]", false).option("--format <format>", "Output format: compact (names only) or csv (name,category,description)").option("-c, --category <category>", "Filter results by category").option("-t, --tags <tags>", "Filter results by comma-separated tags (OR logic, case-insensitive)").description("Search for skills").action((query, options) => {
|
|
36966
36994
|
let results = searchSkills(query);
|
|
36967
36995
|
if (options.category) {
|
|
36968
36996
|
const category = CATEGORIES.find((c) => c.toLowerCase() === options.category.toLowerCase());
|
|
@@ -36979,6 +37007,7 @@ program2.command("search").argument("<query>", "Search term").option("--json", "
|
|
|
36979
37007
|
results = results.filter((s) => s.tags.some((tag) => tagFilter.includes(tag.toLowerCase())));
|
|
36980
37008
|
}
|
|
36981
37009
|
const brief = options.brief && !options.json;
|
|
37010
|
+
const fmt = !options.json ? options.format : undefined;
|
|
36982
37011
|
if (options.json) {
|
|
36983
37012
|
console.log(JSON.stringify(results, null, 2));
|
|
36984
37013
|
return;
|
|
@@ -36987,6 +37016,19 @@ program2.command("search").argument("<query>", "Search term").option("--json", "
|
|
|
36987
37016
|
console.log(chalk2.dim(`No skills found for "${query}"`));
|
|
36988
37017
|
return;
|
|
36989
37018
|
}
|
|
37019
|
+
if (fmt === "compact") {
|
|
37020
|
+
for (const s of results)
|
|
37021
|
+
console.log(s.name);
|
|
37022
|
+
return;
|
|
37023
|
+
}
|
|
37024
|
+
if (fmt === "csv") {
|
|
37025
|
+
console.log("name,category,description");
|
|
37026
|
+
for (const s of results) {
|
|
37027
|
+
const desc = s.description.replace(/"/g, '""');
|
|
37028
|
+
console.log(`${s.name},${s.category},"${desc}"`);
|
|
37029
|
+
}
|
|
37030
|
+
return;
|
|
37031
|
+
}
|
|
36990
37032
|
if (brief) {
|
|
36991
37033
|
for (const s of results) {
|
|
36992
37034
|
console.log(`${s.name} \u2014 ${s.description} [${s.category}]`);
|
package/bin/mcp.js
CHANGED
|
@@ -28604,7 +28604,7 @@ import { homedir as homedir2 } from "os";
|
|
|
28604
28604
|
// package.json
|
|
28605
28605
|
var package_default = {
|
|
28606
28606
|
name: "@hasna/skills",
|
|
28607
|
-
version: "0.1.
|
|
28607
|
+
version: "0.1.12",
|
|
28608
28608
|
description: "Skills library for AI coding agents",
|
|
28609
28609
|
type: "module",
|
|
28610
28610
|
bin: {
|
|
@@ -30637,8 +30637,8 @@ server.registerTool("list_skills", {
|
|
|
30637
30637
|
title: "List Skills",
|
|
30638
30638
|
description: "List skills. Returns {name,category} by default; detail:true for full objects.",
|
|
30639
30639
|
inputSchema: {
|
|
30640
|
-
category: exports_external.string().optional()
|
|
30641
|
-
detail: exports_external.boolean().optional()
|
|
30640
|
+
category: exports_external.string().optional(),
|
|
30641
|
+
detail: exports_external.boolean().optional()
|
|
30642
30642
|
}
|
|
30643
30643
|
}, async ({ category, detail }) => {
|
|
30644
30644
|
const skills = category ? getSkillsByCategory(category) : SKILLS;
|
|
@@ -30651,8 +30651,8 @@ server.registerTool("search_skills", {
|
|
|
30651
30651
|
title: "Search Skills",
|
|
30652
30652
|
description: "Search skills by name, description, or tags. Returns compact list by default.",
|
|
30653
30653
|
inputSchema: {
|
|
30654
|
-
query: exports_external.string()
|
|
30655
|
-
detail: exports_external.boolean().optional()
|
|
30654
|
+
query: exports_external.string(),
|
|
30655
|
+
detail: exports_external.boolean().optional()
|
|
30656
30656
|
}
|
|
30657
30657
|
}, async ({ query, detail }) => {
|
|
30658
30658
|
const results = searchSkills(query);
|
|
@@ -30665,7 +30665,7 @@ server.registerTool("get_skill_info", {
|
|
|
30665
30665
|
title: "Get Skill Info",
|
|
30666
30666
|
description: "Get skill metadata, env vars, and dependencies.",
|
|
30667
30667
|
inputSchema: {
|
|
30668
|
-
name: exports_external.string()
|
|
30668
|
+
name: exports_external.string()
|
|
30669
30669
|
}
|
|
30670
30670
|
}, async ({ name }) => {
|
|
30671
30671
|
const skill = getSkill(name);
|
|
@@ -30682,7 +30682,7 @@ server.registerTool("get_skill_docs", {
|
|
|
30682
30682
|
title: "Get Skill Docs",
|
|
30683
30683
|
description: "Get skill documentation (SKILL.md > README.md > CLAUDE.md).",
|
|
30684
30684
|
inputSchema: {
|
|
30685
|
-
name: exports_external.string()
|
|
30685
|
+
name: exports_external.string()
|
|
30686
30686
|
}
|
|
30687
30687
|
}, async ({ name }) => {
|
|
30688
30688
|
const doc2 = getSkillBestDoc(name);
|
|
@@ -30695,9 +30695,9 @@ server.registerTool("install_skill", {
|
|
|
30695
30695
|
title: "Install Skill",
|
|
30696
30696
|
description: "Install a skill to .skills/ or to an agent dir (for: claude|codex|gemini|all).",
|
|
30697
30697
|
inputSchema: {
|
|
30698
|
-
name: exports_external.string()
|
|
30699
|
-
for: exports_external.string().optional()
|
|
30700
|
-
scope: exports_external.string().optional()
|
|
30698
|
+
name: exports_external.string(),
|
|
30699
|
+
for: exports_external.string().optional(),
|
|
30700
|
+
scope: exports_external.string().optional()
|
|
30701
30701
|
}
|
|
30702
30702
|
}, async ({ name, for: agentArg, scope }) => {
|
|
30703
30703
|
if (agentArg) {
|
|
@@ -30726,9 +30726,9 @@ server.registerTool("install_category", {
|
|
|
30726
30726
|
title: "Install Category",
|
|
30727
30727
|
description: "Install all skills in a category, optionally for a specific agent.",
|
|
30728
30728
|
inputSchema: {
|
|
30729
|
-
category: exports_external.string()
|
|
30730
|
-
for: exports_external.string().optional()
|
|
30731
|
-
scope: exports_external.string().optional()
|
|
30729
|
+
category: exports_external.string(),
|
|
30730
|
+
for: exports_external.string().optional(),
|
|
30731
|
+
scope: exports_external.string().optional()
|
|
30732
30732
|
}
|
|
30733
30733
|
}, async ({ category, for: agentArg, scope }) => {
|
|
30734
30734
|
const matchedCategory = CATEGORIES.find((c) => c.toLowerCase() === category.toLowerCase());
|
|
@@ -30772,9 +30772,9 @@ server.registerTool("remove_skill", {
|
|
|
30772
30772
|
title: "Remove Skill",
|
|
30773
30773
|
description: "Remove a skill from .skills/ or from an agent dir.",
|
|
30774
30774
|
inputSchema: {
|
|
30775
|
-
name: exports_external.string()
|
|
30776
|
-
for: exports_external.string().optional()
|
|
30777
|
-
scope: exports_external.string().optional()
|
|
30775
|
+
name: exports_external.string(),
|
|
30776
|
+
for: exports_external.string().optional(),
|
|
30777
|
+
scope: exports_external.string().optional()
|
|
30778
30778
|
}
|
|
30779
30779
|
}, async ({ name, for: agentArg, scope }) => {
|
|
30780
30780
|
if (agentArg) {
|
|
@@ -30828,7 +30828,7 @@ server.registerTool("get_requirements", {
|
|
|
30828
30828
|
title: "Get Requirements",
|
|
30829
30829
|
description: "Get env vars, system deps, and npm dependencies for a skill.",
|
|
30830
30830
|
inputSchema: {
|
|
30831
|
-
name: exports_external.string()
|
|
30831
|
+
name: exports_external.string()
|
|
30832
30832
|
}
|
|
30833
30833
|
}, async ({ name }) => {
|
|
30834
30834
|
const reqs = getSkillRequirements(name);
|
|
@@ -30841,8 +30841,8 @@ server.registerTool("run_skill", {
|
|
|
30841
30841
|
title: "Run Skill",
|
|
30842
30842
|
description: "Run a skill by name with optional arguments.",
|
|
30843
30843
|
inputSchema: {
|
|
30844
|
-
name: exports_external.string()
|
|
30845
|
-
args: exports_external.array(exports_external.string()).optional()
|
|
30844
|
+
name: exports_external.string(),
|
|
30845
|
+
args: exports_external.array(exports_external.string()).optional()
|
|
30846
30846
|
}
|
|
30847
30847
|
}, async ({ name, args }) => {
|
|
30848
30848
|
const skill = getSkill(name);
|
|
@@ -30876,9 +30876,9 @@ server.registerTool("import_skills", {
|
|
|
30876
30876
|
title: "Import Skills",
|
|
30877
30877
|
description: "Install skills from an export payload. Supports agent installs via 'for'.",
|
|
30878
30878
|
inputSchema: {
|
|
30879
|
-
skills: exports_external.array(exports_external.string())
|
|
30880
|
-
for: exports_external.string().optional()
|
|
30881
|
-
scope: exports_external.string().optional()
|
|
30879
|
+
skills: exports_external.array(exports_external.string()),
|
|
30880
|
+
for: exports_external.string().optional(),
|
|
30881
|
+
scope: exports_external.string().optional()
|
|
30882
30882
|
}
|
|
30883
30883
|
}, async ({ skills: skillList, for: agentArg, scope }) => {
|
|
30884
30884
|
if (!skillList || skillList.length === 0) {
|
|
@@ -30974,7 +30974,7 @@ server.registerResource("Skill Info", new ResourceTemplate("skills://{name}", {
|
|
|
30974
30974
|
server.registerTool("search_tools", {
|
|
30975
30975
|
title: "Search Tools",
|
|
30976
30976
|
description: "List tool names, optionally filtered by keyword.",
|
|
30977
|
-
inputSchema: { query: exports_external.string().optional()
|
|
30977
|
+
inputSchema: { query: exports_external.string().optional() }
|
|
30978
30978
|
}, async ({ query }) => {
|
|
30979
30979
|
const all = [
|
|
30980
30980
|
"list_skills",
|
|
@@ -31000,7 +31000,7 @@ server.registerTool("search_tools", {
|
|
|
31000
31000
|
server.registerTool("describe_tools", {
|
|
31001
31001
|
title: "Describe Tools",
|
|
31002
31002
|
description: "Get descriptions for specific tools by name.",
|
|
31003
|
-
inputSchema: { names: exports_external.array(exports_external.string())
|
|
31003
|
+
inputSchema: { names: exports_external.array(exports_external.string()) }
|
|
31004
31004
|
}, async ({ names }) => {
|
|
31005
31005
|
const descriptions = {
|
|
31006
31006
|
list_skills: "List skills {name,category}. Params: category?, detail?",
|