skillpkg-mcp-server 0.4.0 → 0.5.1
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 +1 -1
- package/dist/cli.js +0 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/create-skill.d.ts +14 -0
- package/dist/tools/create-skill.d.ts.map +1 -0
- package/dist/tools/create-skill.js +106 -0
- package/dist/tools/create-skill.js.map +1 -0
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +5 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/install-skill.d.ts.map +1 -1
- package/dist/tools/install-skill.js +46 -49
- package/dist/tools/install-skill.js.map +1 -1
- package/dist/tools/skill-info.d.ts +4 -1
- package/dist/tools/skill-info.d.ts.map +1 -1
- package/dist/tools/skill-info.js +74 -51
- package/dist/tools/skill-info.js.map +1 -1
- package/dist/tools/skill-status.d.ts +36 -0
- package/dist/tools/skill-status.d.ts.map +1 -0
- package/dist/tools/skill-status.js +189 -0
- package/dist/tools/skill-status.js.map +1 -0
- package/dist/tools/sync-skills.d.ts.map +1 -1
- package/dist/tools/sync-skills.js +9 -10
- package/dist/tools/sync-skills.js.map +1 -1
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -89,7 +89,7 @@ Installs a skill from multiple sources:
|
|
|
89
89
|
"source": "commit-helper", // Registry
|
|
90
90
|
"source": "github:user/repo", // GitHub repo
|
|
91
91
|
"source": "gist:abc123", // GitHub Gist
|
|
92
|
-
"source": "https://example.com/
|
|
92
|
+
"source": "https://example.com/SKILL.md", // URL
|
|
93
93
|
"source": "./my-skill", // Local path
|
|
94
94
|
"scope": "local" // "local" | "global"
|
|
95
95
|
}
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/dist/index.d.ts
CHANGED
|
@@ -16,5 +16,5 @@
|
|
|
16
16
|
export declare const VERSION = "0.1.0";
|
|
17
17
|
export * from './types.js';
|
|
18
18
|
export { SkillpkgMcpServer } from './server.js';
|
|
19
|
-
export { createAllToolHandlers, createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSkillInfoHandler, createRecommendSkillHandler, } from './tools/index.js';
|
|
19
|
+
export { createAllToolHandlers, createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSyncSkillsHandler, createCreateSkillHandler, createSkillStatusHandler, createSkillInfoHandler, createRecommendSkillHandler, } from './tools/index.js';
|
|
20
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,5 +19,5 @@ export * from './types.js';
|
|
|
19
19
|
// Server
|
|
20
20
|
export { SkillpkgMcpServer } from './server.js';
|
|
21
21
|
// Tool handlers
|
|
22
|
-
export { createAllToolHandlers, createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSkillInfoHandler, createRecommendSkillHandler, } from './tools/index.js';
|
|
22
|
+
export { createAllToolHandlers, createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSyncSkillsHandler, createCreateSkillHandler, createSkillStatusHandler, createSkillInfoHandler, createRecommendSkillHandler, } from './tools/index.js';
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,gBAAgB;AAChB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,gBAAgB;AAChB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: create_skill
|
|
3
|
+
*
|
|
4
|
+
* Creates a new skill with SKILL.md format.
|
|
5
|
+
* Useful for AI agents to help users create new skills.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolHandler } from '../types.js';
|
|
8
|
+
export interface CreateSkillInput {
|
|
9
|
+
name: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
instructions?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function createCreateSkillHandler(): ToolHandler;
|
|
14
|
+
//# sourceMappingURL=create-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-skill.d.ts","sourceRoot":"","sources":["../../src/tools/create-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAI3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAgCD,wBAAgB,wBAAwB,IAAI,WAAW,CA8EtD"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: create_skill
|
|
3
|
+
*
|
|
4
|
+
* Creates a new skill with SKILL.md format.
|
|
5
|
+
* Useful for AI agents to help users create new skills.
|
|
6
|
+
*/
|
|
7
|
+
import { successResult, errorResult, validateString } from './utils.js';
|
|
8
|
+
import { SkillCreator } from 'skillpkg-core';
|
|
9
|
+
/**
|
|
10
|
+
* Convert string to kebab-case
|
|
11
|
+
*/
|
|
12
|
+
function toKebabCase(str) {
|
|
13
|
+
return str
|
|
14
|
+
.toLowerCase()
|
|
15
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
16
|
+
.replace(/^-|-$/g, '');
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validate skill name
|
|
20
|
+
*/
|
|
21
|
+
function validateSkillName(name) {
|
|
22
|
+
if (!name) {
|
|
23
|
+
return 'Name is required';
|
|
24
|
+
}
|
|
25
|
+
const normalized = toKebabCase(name);
|
|
26
|
+
if (normalized.length < 2) {
|
|
27
|
+
return 'Name must be at least 2 characters';
|
|
28
|
+
}
|
|
29
|
+
if (normalized.length > 100) {
|
|
30
|
+
return 'Name must be less than 100 characters';
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
export function createCreateSkillHandler() {
|
|
35
|
+
return {
|
|
36
|
+
name: 'create_skill',
|
|
37
|
+
description: `Create a new skill with SKILL.md format.
|
|
38
|
+
|
|
39
|
+
This tool helps AI agents create new skills for users. It generates:
|
|
40
|
+
- A directory with the skill name
|
|
41
|
+
- A SKILL.md file with frontmatter and instructions
|
|
42
|
+
|
|
43
|
+
Parameters:
|
|
44
|
+
- name (required): Skill name (will be converted to kebab-case)
|
|
45
|
+
- description (optional): Short description of the skill
|
|
46
|
+
- instructions (optional): The skill instructions content
|
|
47
|
+
|
|
48
|
+
Returns the path to the created SKILL.md file.`,
|
|
49
|
+
inputSchema: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
name: {
|
|
53
|
+
type: 'string',
|
|
54
|
+
description: 'Skill name (e.g., "my-helper", "code-reviewer")',
|
|
55
|
+
},
|
|
56
|
+
description: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
description: 'Short description of what the skill does',
|
|
59
|
+
},
|
|
60
|
+
instructions: {
|
|
61
|
+
type: 'string',
|
|
62
|
+
description: 'The full instructions content for the skill (markdown)',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
required: ['name'],
|
|
66
|
+
},
|
|
67
|
+
async execute(args) {
|
|
68
|
+
const input = args;
|
|
69
|
+
try {
|
|
70
|
+
const rawName = validateString(input.name, 'name');
|
|
71
|
+
// Validate name
|
|
72
|
+
const nameError = validateSkillName(rawName);
|
|
73
|
+
if (nameError) {
|
|
74
|
+
return errorResult(nameError);
|
|
75
|
+
}
|
|
76
|
+
const skillName = toKebabCase(rawName);
|
|
77
|
+
const description = input.description || 'A helpful skill';
|
|
78
|
+
const instructions = input.instructions;
|
|
79
|
+
const creator = new SkillCreator();
|
|
80
|
+
// Create the skill
|
|
81
|
+
const skillMdPath = await creator.create({
|
|
82
|
+
name: skillName,
|
|
83
|
+
description,
|
|
84
|
+
instructions,
|
|
85
|
+
createDir: true,
|
|
86
|
+
});
|
|
87
|
+
const lines = [
|
|
88
|
+
`✅ Created skill: ${skillName}`,
|
|
89
|
+
'',
|
|
90
|
+
`📄 File: ${skillMdPath}`,
|
|
91
|
+
'',
|
|
92
|
+
'📋 Next steps:',
|
|
93
|
+
` • Edit ${skillName}/SKILL.md to customize instructions`,
|
|
94
|
+
` • Run \`skillpkg install ./${skillName}\` to install locally`,
|
|
95
|
+
` • Run \`skillpkg sync\` to sync to AI platforms`,
|
|
96
|
+
];
|
|
97
|
+
return successResult(lines.join('\n'));
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
101
|
+
return errorResult(`Failed to create skill: ${message}`);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=create-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-skill.js","sourceRoot":"","sources":["../../src/tools/create-skill.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -13,10 +13,12 @@ import { createUninstallSkillHandler } from './uninstall-skill.js';
|
|
|
13
13
|
import { createSkillInfoHandler } from './skill-info.js';
|
|
14
14
|
import { createRecommendSkillHandler } from './recommend-skill.js';
|
|
15
15
|
import { createSyncSkillsHandler } from './sync-skills.js';
|
|
16
|
+
import { createCreateSkillHandler } from './create-skill.js';
|
|
17
|
+
import { createSkillStatusHandler } from './skill-status.js';
|
|
16
18
|
/**
|
|
17
19
|
* Create all tool handlers
|
|
18
20
|
*/
|
|
19
21
|
export declare function createAllToolHandlers(): ToolHandler[];
|
|
20
|
-
export { createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSyncSkillsHandler, createSkillInfoHandler, createRecommendSkillHandler, };
|
|
22
|
+
export { createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSyncSkillsHandler, createCreateSkillHandler, createSkillStatusHandler, createSkillInfoHandler, createRecommendSkillHandler, };
|
|
21
23
|
export * from './utils.js';
|
|
22
24
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAgBrD;AAGD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,GAC5B,CAAC;AAGF,cAAc,YAAY,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -13,6 +13,8 @@ import { createUninstallSkillHandler } from './uninstall-skill.js';
|
|
|
13
13
|
import { createSkillInfoHandler } from './skill-info.js';
|
|
14
14
|
import { createRecommendSkillHandler } from './recommend-skill.js';
|
|
15
15
|
import { createSyncSkillsHandler } from './sync-skills.js';
|
|
16
|
+
import { createCreateSkillHandler } from './create-skill.js';
|
|
17
|
+
import { createSkillStatusHandler } from './skill-status.js';
|
|
16
18
|
/**
|
|
17
19
|
* Create all tool handlers
|
|
18
20
|
*/
|
|
@@ -24,6 +26,8 @@ export function createAllToolHandlers() {
|
|
|
24
26
|
createInstallSkillHandler(),
|
|
25
27
|
createUninstallSkillHandler(),
|
|
26
28
|
createSyncSkillsHandler(),
|
|
29
|
+
createCreateSkillHandler(),
|
|
30
|
+
createSkillStatusHandler(),
|
|
27
31
|
// Search & Discovery
|
|
28
32
|
createSearchSkillsHandler(),
|
|
29
33
|
createSkillInfoHandler(),
|
|
@@ -31,7 +35,7 @@ export function createAllToolHandlers() {
|
|
|
31
35
|
];
|
|
32
36
|
}
|
|
33
37
|
// Export individual handlers for selective use
|
|
34
|
-
export { createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSyncSkillsHandler, createSkillInfoHandler, createRecommendSkillHandler, };
|
|
38
|
+
export { createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSyncSkillsHandler, createCreateSkillHandler, createSkillStatusHandler, createSkillInfoHandler, createRecommendSkillHandler, };
|
|
35
39
|
// Re-export utilities
|
|
36
40
|
export * from './utils.js';
|
|
37
41
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,2BAA2B;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,2BAA2B;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,wBAAwB;QACxB,uBAAuB,EAAE;QACzB,sBAAsB,EAAE;QACxB,yBAAyB,EAAE;QAC3B,2BAA2B,EAAE;QAC7B,uBAAuB,EAAE;QACzB,wBAAwB,EAAE;QAC1B,wBAAwB,EAAE;QAE1B,qBAAqB;QACrB,yBAAyB,EAAE;QAC3B,sBAAsB,EAAE;QACxB,2BAA2B,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,2BAA2B,GAC5B,CAAC;AAEF,sBAAsB;AACtB,cAAc,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,aAAa,CAAC;AAqN9E,wBAAgB,yBAAyB,IAAI,WAAW,CAyHvD"}
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { getStore, successResult, errorResult, validateString, validateScope } from './utils.js';
|
|
8
8
|
import { InvalidSourceError } from '../types.js';
|
|
9
|
-
import
|
|
9
|
+
import matter from 'gray-matter';
|
|
10
|
+
import { detectSkillMd, fetchSkillMdContent, createInstaller, createStateManager, createConfigManager, } from 'skillpkg-core';
|
|
10
11
|
function parseSource(source) {
|
|
11
12
|
if (source.startsWith('github:')) {
|
|
12
13
|
return { type: 'github', value: source.slice(7) };
|
|
@@ -53,24 +54,7 @@ async function fetchSkillFromGitHub(repo) {
|
|
|
53
54
|
};
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
|
-
//
|
|
57
|
-
const skillYamlPaths = ['skill.yaml', 'skill.yml', '.claude/skill.yaml'];
|
|
58
|
-
const branches = ['main', 'master', 'HEAD'];
|
|
59
|
-
for (const branch of branches) {
|
|
60
|
-
for (const path of skillYamlPaths) {
|
|
61
|
-
const url = `https://raw.githubusercontent.com/${repo}/${branch}/${path}`;
|
|
62
|
-
try {
|
|
63
|
-
const yamlContent = await fetchSkillFromUrl(url);
|
|
64
|
-
const result = parseSkillYaml(yamlContent);
|
|
65
|
-
if (result.success && result.data) {
|
|
66
|
-
return result.data;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
// Try next
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
57
|
+
// No SKILL.md found in standard locations
|
|
74
58
|
return null;
|
|
75
59
|
}
|
|
76
60
|
/**
|
|
@@ -83,11 +67,21 @@ async function fetchSkillFromGist(gistId) {
|
|
|
83
67
|
throw new Error(`Failed to fetch gist ${gistId}: ${response.status}`);
|
|
84
68
|
}
|
|
85
69
|
const gist = (await response.json());
|
|
70
|
+
// Look for SKILL.md in Gist files
|
|
86
71
|
for (const [filename, file] of Object.entries(gist.files)) {
|
|
87
|
-
if (filename === '
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return
|
|
72
|
+
if (filename === 'SKILL.md' || filename === 'skill.md') {
|
|
73
|
+
try {
|
|
74
|
+
const { data, content: body } = matter(file.content);
|
|
75
|
+
return {
|
|
76
|
+
schema: '1.0',
|
|
77
|
+
name: data.name || '',
|
|
78
|
+
version: data.version || '1.0.0',
|
|
79
|
+
description: data.description || '',
|
|
80
|
+
instructions: body.trim(),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Invalid frontmatter
|
|
91
85
|
}
|
|
92
86
|
}
|
|
93
87
|
}
|
|
@@ -103,7 +97,8 @@ async function fetchSkillFromLocal(path) {
|
|
|
103
97
|
try {
|
|
104
98
|
const stat = await fs.stat(path);
|
|
105
99
|
if (stat.isDirectory()) {
|
|
106
|
-
|
|
100
|
+
// Only SKILL.md format is supported
|
|
101
|
+
const candidates = ['SKILL.md', 'skill.md'];
|
|
107
102
|
for (const candidate of candidates) {
|
|
108
103
|
const fullPath = nodePath.join(path, candidate);
|
|
109
104
|
try {
|
|
@@ -116,33 +111,23 @@ async function fetchSkillFromLocal(path) {
|
|
|
116
111
|
}
|
|
117
112
|
}
|
|
118
113
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
123
|
-
if (match) {
|
|
124
|
-
const { parse: parseYaml } = await import('yaml');
|
|
125
|
-
const frontmatter = parseYaml(match[1]);
|
|
126
|
-
return {
|
|
127
|
-
schema: '1.0',
|
|
128
|
-
name: frontmatter.name,
|
|
129
|
-
version: frontmatter.version || '1.0.0',
|
|
130
|
-
description: frontmatter.description || '',
|
|
131
|
-
instructions: match[2],
|
|
132
|
-
dependencies: frontmatter.dependencies,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
// Parse as YAML
|
|
137
|
-
const result = parseSkillYaml(content);
|
|
138
|
-
if (result.success && result.data) {
|
|
139
|
-
return result.data;
|
|
114
|
+
// Only process SKILL.md files
|
|
115
|
+
if (!skillPath.toLowerCase().endsWith('.md')) {
|
|
116
|
+
return null;
|
|
140
117
|
}
|
|
118
|
+
const content = await fs.readFile(skillPath, 'utf-8');
|
|
119
|
+
const { data, content: body } = matter(content);
|
|
120
|
+
return {
|
|
121
|
+
schema: '1.0',
|
|
122
|
+
name: data.name || '',
|
|
123
|
+
version: data.version || '1.0.0',
|
|
124
|
+
description: data.description || '',
|
|
125
|
+
instructions: body.trim(),
|
|
126
|
+
};
|
|
141
127
|
}
|
|
142
128
|
catch {
|
|
143
129
|
return null;
|
|
144
130
|
}
|
|
145
|
-
return null;
|
|
146
131
|
}
|
|
147
132
|
/**
|
|
148
133
|
* Create a SkillFetcherAdapter
|
|
@@ -174,8 +159,20 @@ async function fetchSkillBySource(source) {
|
|
|
174
159
|
return fetchSkillFromGist(value);
|
|
175
160
|
case 'url': {
|
|
176
161
|
const content = await fetchSkillFromUrl(value);
|
|
177
|
-
|
|
178
|
-
|
|
162
|
+
// Parse as SKILL.md format with gray-matter
|
|
163
|
+
try {
|
|
164
|
+
const { data, content: body } = matter(content);
|
|
165
|
+
return {
|
|
166
|
+
schema: '1.0',
|
|
167
|
+
name: data.name || '',
|
|
168
|
+
version: data.version || '1.0.0',
|
|
169
|
+
description: data.description || '',
|
|
170
|
+
instructions: body.trim(),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
179
176
|
}
|
|
180
177
|
case 'local':
|
|
181
178
|
return fetchSkillFromLocal(value);
|
|
@@ -195,7 +192,7 @@ Supports SKILL.md format (industry standard for Claude Code and OpenAI Codex).
|
|
|
195
192
|
Supported source formats:
|
|
196
193
|
• GitHub: github:user/repo or user/repo (e.g., "anthropics/claude-code-skills")
|
|
197
194
|
• Gist: gist:id (e.g., "gist:abc123")
|
|
198
|
-
• URL: https://... (direct link to SKILL.md
|
|
195
|
+
• URL: https://... (direct link to SKILL.md)
|
|
199
196
|
• Local: ./path or /absolute/path (local file or directory)
|
|
200
197
|
|
|
201
198
|
Returns:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool: skill_info
|
|
3
3
|
*
|
|
4
|
-
* Gets detailed information about
|
|
4
|
+
* Gets detailed information about an installed skill.
|
|
5
5
|
*/
|
|
6
6
|
import type { ToolHandler } from '../types.js';
|
|
7
|
+
export interface SkillInfoInput {
|
|
8
|
+
name: string;
|
|
9
|
+
}
|
|
7
10
|
export declare function createSkillInfoHandler(): ToolHandler;
|
|
8
11
|
//# sourceMappingURL=skill-info.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-info.d.ts","sourceRoot":"","sources":["../../src/tools/skill-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"skill-info.d.ts","sourceRoot":"","sources":["../../src/tools/skill-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAI3D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,sBAAsB,IAAI,WAAW,CAmHpD"}
|
package/dist/tools/skill-info.js
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool: skill_info
|
|
3
3
|
*
|
|
4
|
-
* Gets detailed information about
|
|
4
|
+
* Gets detailed information about an installed skill.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { successResult, errorResult, validateString } from './utils.js';
|
|
7
|
+
import { createGlobalStore, createLocalStore, getSkillMdPath } from 'skillpkg-core';
|
|
8
8
|
export function createSkillInfoHandler() {
|
|
9
9
|
return {
|
|
10
10
|
name: 'skill_info',
|
|
11
|
-
description:
|
|
11
|
+
description: `Get detailed information about an installed skill.
|
|
12
|
+
|
|
13
|
+
Shows skill metadata, installation details, and instructions preview.
|
|
14
|
+
Searches both local (.skillpkg) and global (~/.skillpkg) stores.
|
|
15
|
+
|
|
16
|
+
Parameters:
|
|
17
|
+
- name (required): Name of the installed skill
|
|
18
|
+
|
|
19
|
+
Returns skill details including version, description, path, and sync status.`,
|
|
12
20
|
inputSchema: {
|
|
13
21
|
type: 'object',
|
|
14
22
|
properties: {
|
|
@@ -23,57 +31,72 @@ export function createSkillInfoHandler() {
|
|
|
23
31
|
const input = args;
|
|
24
32
|
try {
|
|
25
33
|
const skillName = validateString(input.name, 'name');
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
// Try local first, then global
|
|
35
|
+
const stores = [createLocalStore(), createGlobalStore()];
|
|
36
|
+
for (const store of stores) {
|
|
37
|
+
const skill = await store.getSkill(skillName);
|
|
38
|
+
if (!skill)
|
|
39
|
+
continue;
|
|
40
|
+
const entry = await store.getSkillEntry(skillName);
|
|
41
|
+
const storeDir = store.getStoreDir();
|
|
42
|
+
const skillPath = getSkillMdPath(storeDir, skillName);
|
|
43
|
+
const scope = storeDir.includes('.skillpkg') && !storeDir.includes('/.skillpkg')
|
|
44
|
+
? 'global'
|
|
45
|
+
: 'local';
|
|
46
|
+
// Format output
|
|
47
|
+
const lines = [
|
|
48
|
+
`# ${skill.name} (${scope})`,
|
|
49
|
+
'',
|
|
50
|
+
`**Version:** ${skill.version}`,
|
|
51
|
+
];
|
|
52
|
+
if (skill.description) {
|
|
53
|
+
lines.push(`**Description:** ${skill.description}`);
|
|
35
54
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
55
|
+
if (skill.author) {
|
|
56
|
+
const author = typeof skill.author === 'string'
|
|
57
|
+
? skill.author
|
|
58
|
+
: skill.author.name;
|
|
59
|
+
lines.push(`**Author:** ${author}`);
|
|
60
|
+
}
|
|
61
|
+
lines.push('');
|
|
62
|
+
lines.push(`**Path:** ${skillPath}`);
|
|
63
|
+
if (entry?.source) {
|
|
64
|
+
lines.push(`**Source:** ${entry.source}`);
|
|
65
|
+
}
|
|
66
|
+
if (entry?.sourceUrl) {
|
|
67
|
+
lines.push(`**Source URL:** ${entry.sourceUrl}`);
|
|
68
|
+
}
|
|
69
|
+
if (entry?.installedAt) {
|
|
70
|
+
const date = new Date(entry.installedAt).toLocaleDateString('en-US', {
|
|
71
|
+
year: 'numeric',
|
|
72
|
+
month: 'short',
|
|
73
|
+
day: 'numeric',
|
|
74
|
+
});
|
|
75
|
+
lines.push(`**Installed:** ${date}`);
|
|
76
|
+
}
|
|
77
|
+
if (entry?.syncedPlatforms && entry.syncedPlatforms.length > 0) {
|
|
78
|
+
lines.push(`**Synced to:** ${entry.syncedPlatforms.join(', ')}`);
|
|
79
|
+
}
|
|
80
|
+
// Instructions preview
|
|
81
|
+
if (skill.instructions) {
|
|
82
|
+
lines.push('');
|
|
83
|
+
lines.push('---');
|
|
84
|
+
lines.push('');
|
|
85
|
+
lines.push('**Instructions preview:**');
|
|
86
|
+
const preview = skill.instructions.substring(0, 300);
|
|
87
|
+
lines.push(preview + (skill.instructions.length > 300 ? '...' : ''));
|
|
88
|
+
}
|
|
89
|
+
lines.push('');
|
|
90
|
+
lines.push('---');
|
|
91
|
+
lines.push('');
|
|
92
|
+
lines.push(`To uninstall: \`uninstall_skill id: "${skillName}"\``);
|
|
93
|
+
lines.push(`To sync: \`sync_skills\``);
|
|
94
|
+
return successResult(lines.join('\n'));
|
|
67
95
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
text += `\n\n---\n\nTo install: install_skill source: "${skillName}"`;
|
|
71
|
-
return successResult(text);
|
|
96
|
+
// Not found
|
|
97
|
+
return errorResult(`Skill "${skillName}" is not installed.`, 'Use search_skills to find available skills, or install_skill to install one.');
|
|
72
98
|
}
|
|
73
99
|
catch (error) {
|
|
74
|
-
if (error instanceof SkillNotFoundError) {
|
|
75
|
-
return errorResult(`Skill "${input.name}" not found in registry.`, 'Use search_registry to find available skills.');
|
|
76
|
-
}
|
|
77
100
|
const message = error instanceof Error ? error.message : String(error);
|
|
78
101
|
return errorResult(`Failed to get skill info: ${message}`);
|
|
79
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-info.js","sourceRoot":"","sources":["../../src/tools/skill-info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"skill-info.js","sourceRoot":"","sources":["../../src/tools/skill-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: skill_status
|
|
3
|
+
*
|
|
4
|
+
* Shows overall project status including skills, MCP servers, and sync status.
|
|
5
|
+
* Useful for AI agents to understand the current project state.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolHandler } from '../types.js';
|
|
8
|
+
export interface SkillStatusOutput {
|
|
9
|
+
project: {
|
|
10
|
+
name: string | null;
|
|
11
|
+
configExists: boolean;
|
|
12
|
+
};
|
|
13
|
+
skills: {
|
|
14
|
+
total: number;
|
|
15
|
+
userInstalled: number;
|
|
16
|
+
transitive: number;
|
|
17
|
+
list: Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
version: string;
|
|
20
|
+
installedBy: string;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
mcp: {
|
|
24
|
+
configured: number;
|
|
25
|
+
list: Array<{
|
|
26
|
+
name: string;
|
|
27
|
+
command: string;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
sync: {
|
|
31
|
+
targetsEnabled: string[];
|
|
32
|
+
lastSync: Record<string, string | null>;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export declare function createSkillStatusHandler(): ToolHandler;
|
|
36
|
+
//# sourceMappingURL=skill-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-status.d.ts","sourceRoot":"","sources":["../../src/tools/skill-status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAQ3D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC;YACV,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC;IACF,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC;YACV,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC;IACF,IAAI,EAAE;QACJ,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;KACzC,CAAC;CACH;AAED,wBAAgB,wBAAwB,IAAI,WAAW,CAkMtD"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: skill_status
|
|
3
|
+
*
|
|
4
|
+
* Shows overall project status including skills, MCP servers, and sync status.
|
|
5
|
+
* Useful for AI agents to understand the current project state.
|
|
6
|
+
*/
|
|
7
|
+
import { successResult, errorResult } from './utils.js';
|
|
8
|
+
import { createStateManager, createConfigManager, getImplementedTargets, } from 'skillpkg-core';
|
|
9
|
+
export function createSkillStatusHandler() {
|
|
10
|
+
return {
|
|
11
|
+
name: 'skill_status',
|
|
12
|
+
description: `Show overall project status including skills, MCP servers, and sync status.
|
|
13
|
+
|
|
14
|
+
Returns a comprehensive view of:
|
|
15
|
+
- Project configuration status
|
|
16
|
+
- Installed skills (direct and transitive)
|
|
17
|
+
- Configured MCP servers
|
|
18
|
+
- Sync targets and last sync times
|
|
19
|
+
|
|
20
|
+
Useful for understanding the current state before making changes.`,
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {},
|
|
24
|
+
},
|
|
25
|
+
async execute() {
|
|
26
|
+
try {
|
|
27
|
+
const cwd = process.cwd();
|
|
28
|
+
const stateManager = createStateManager();
|
|
29
|
+
const configManager = createConfigManager();
|
|
30
|
+
// Load state and config
|
|
31
|
+
const state = await stateManager.loadState(cwd);
|
|
32
|
+
const config = await configManager.loadProjectConfig(cwd);
|
|
33
|
+
// Build status output
|
|
34
|
+
const output = {
|
|
35
|
+
project: {
|
|
36
|
+
name: config?.name || null,
|
|
37
|
+
configExists: config !== null,
|
|
38
|
+
},
|
|
39
|
+
skills: {
|
|
40
|
+
total: 0,
|
|
41
|
+
userInstalled: 0,
|
|
42
|
+
transitive: 0,
|
|
43
|
+
list: [],
|
|
44
|
+
},
|
|
45
|
+
mcp: {
|
|
46
|
+
configured: 0,
|
|
47
|
+
list: [],
|
|
48
|
+
},
|
|
49
|
+
sync: {
|
|
50
|
+
targetsEnabled: [],
|
|
51
|
+
lastSync: {},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
// Skills info
|
|
55
|
+
for (const [name, skillState] of Object.entries(state.skills)) {
|
|
56
|
+
output.skills.total++;
|
|
57
|
+
if (skillState.installed_by === 'user') {
|
|
58
|
+
output.skills.userInstalled++;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
output.skills.transitive++;
|
|
62
|
+
}
|
|
63
|
+
output.skills.list.push({
|
|
64
|
+
name,
|
|
65
|
+
version: skillState.version,
|
|
66
|
+
installedBy: skillState.installed_by,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
// MCP info
|
|
70
|
+
if (config?.mcp) {
|
|
71
|
+
for (const [name, mcpConfig] of Object.entries(config.mcp)) {
|
|
72
|
+
output.mcp.configured++;
|
|
73
|
+
output.mcp.list.push({
|
|
74
|
+
name,
|
|
75
|
+
command: mcpConfig.command || mcpConfig.package || '',
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Sync info
|
|
80
|
+
if (config?.sync_targets) {
|
|
81
|
+
output.sync.targetsEnabled = Object.entries(config.sync_targets)
|
|
82
|
+
.filter(([_, enabled]) => enabled)
|
|
83
|
+
.map(([name]) => name);
|
|
84
|
+
}
|
|
85
|
+
// Get sync history from state
|
|
86
|
+
if (state.sync_history) {
|
|
87
|
+
for (const [target, timestamp] of Object.entries(state.sync_history)) {
|
|
88
|
+
output.sync.lastSync[target] = timestamp
|
|
89
|
+
? new Date(timestamp).toLocaleString()
|
|
90
|
+
: null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Format human-readable output
|
|
94
|
+
const lines = [];
|
|
95
|
+
// Project section
|
|
96
|
+
lines.push('📦 Project');
|
|
97
|
+
if (config) {
|
|
98
|
+
lines.push(` Name: ${config.name}`);
|
|
99
|
+
lines.push(' Config: skillpkg.json ✓');
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
lines.push(' Config: No skillpkg.json');
|
|
103
|
+
lines.push(' → Run `skillpkg init` to create one');
|
|
104
|
+
}
|
|
105
|
+
lines.push('');
|
|
106
|
+
// Skills section
|
|
107
|
+
lines.push('🔧 Skills');
|
|
108
|
+
if (output.skills.total === 0) {
|
|
109
|
+
lines.push(' No skills installed');
|
|
110
|
+
lines.push(' → Use install_skill to add skills');
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
lines.push(` Total: ${output.skills.total} (${output.skills.userInstalled} direct, ${output.skills.transitive} transitive)`);
|
|
114
|
+
const userSkills = output.skills.list.filter((s) => s.installedBy === 'user');
|
|
115
|
+
const transitiveSkills = output.skills.list.filter((s) => s.installedBy !== 'user');
|
|
116
|
+
if (userSkills.length > 0) {
|
|
117
|
+
lines.push(' Direct:');
|
|
118
|
+
for (const skill of userSkills) {
|
|
119
|
+
lines.push(` • ${skill.name} v${skill.version}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (transitiveSkills.length > 0) {
|
|
123
|
+
lines.push(' Transitive:');
|
|
124
|
+
for (const skill of transitiveSkills) {
|
|
125
|
+
lines.push(` • ${skill.name} v${skill.version} (via ${skill.installedBy})`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
lines.push('');
|
|
130
|
+
// MCP section
|
|
131
|
+
lines.push('🔌 MCP Servers');
|
|
132
|
+
if (output.mcp.configured === 0) {
|
|
133
|
+
lines.push(' No MCP servers configured');
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
lines.push(` Configured: ${output.mcp.configured}`);
|
|
137
|
+
for (const mcp of output.mcp.list) {
|
|
138
|
+
lines.push(` • ${mcp.name}: ${mcp.command}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
lines.push('');
|
|
142
|
+
// Sync section
|
|
143
|
+
lines.push('🔄 Sync Targets');
|
|
144
|
+
const implementedTargets = getImplementedTargets();
|
|
145
|
+
const implementedIds = implementedTargets.map((t) => t.id);
|
|
146
|
+
if (output.sync.targetsEnabled.length === 0) {
|
|
147
|
+
lines.push(' No sync targets enabled');
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
for (const target of output.sync.targetsEnabled) {
|
|
151
|
+
const isImplemented = implementedIds.includes(target);
|
|
152
|
+
const lastSync = output.sync.lastSync[target];
|
|
153
|
+
let status;
|
|
154
|
+
if (!isImplemented) {
|
|
155
|
+
status = '(not implemented)';
|
|
156
|
+
}
|
|
157
|
+
else if (lastSync) {
|
|
158
|
+
status = `✓ synced ${lastSync}`;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
status = '⚠ not synced';
|
|
162
|
+
}
|
|
163
|
+
lines.push(` • ${target}: ${status}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
lines.push('');
|
|
167
|
+
// Suggestions
|
|
168
|
+
lines.push('💡 Suggestions');
|
|
169
|
+
if (output.skills.total === 0) {
|
|
170
|
+
lines.push(' • Use search_skills to find skills');
|
|
171
|
+
lines.push(' • Use install_skill to install');
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
const needsSync = output.sync.targetsEnabled.some((t) => implementedIds.includes(t) && !output.sync.lastSync[t]);
|
|
175
|
+
if (needsSync) {
|
|
176
|
+
lines.push(' • Use sync_skills to sync to platforms');
|
|
177
|
+
}
|
|
178
|
+
lines.push(' • Use load_skill to view skill instructions');
|
|
179
|
+
}
|
|
180
|
+
return successResult(lines.join('\n'));
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
184
|
+
return errorResult(`Failed to get status: ${message}`);
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=skill-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-status.js","sourceRoot":"","sources":["../../src/tools/skill-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-skills.d.ts","sourceRoot":"","sources":["../../src/tools/sync-skills.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"sync-skills.d.ts","sourceRoot":"","sources":["../../src/tools/sync-skills.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAqD3D,wBAAgB,uBAAuB,IAAI,WAAW,CAsKrD"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { readFile } from 'fs/promises';
|
|
8
8
|
import { existsSync } from 'fs';
|
|
9
9
|
import { join } from 'path';
|
|
10
|
+
import matter from 'gray-matter';
|
|
10
11
|
import { getStore, successResult, errorResult, validateScope } from './utils.js';
|
|
11
12
|
import { createSyncer, getImplementedTargets, getTargetConfig, } from 'skillpkg-core';
|
|
12
13
|
/**
|
|
@@ -16,21 +17,19 @@ async function loadSkillsFromStore(storeDir, skillNames) {
|
|
|
16
17
|
const skills = new Map();
|
|
17
18
|
const skillsDir = join(storeDir, 'skills');
|
|
18
19
|
for (const name of skillNames) {
|
|
19
|
-
const
|
|
20
|
-
if (!existsSync(
|
|
20
|
+
const skillMdPath = join(skillsDir, name, 'SKILL.md');
|
|
21
|
+
if (!existsSync(skillMdPath)) {
|
|
21
22
|
continue;
|
|
22
23
|
}
|
|
23
24
|
try {
|
|
24
|
-
const rawContent = await readFile(
|
|
25
|
-
|
|
26
|
-
const { parse } = await import('yaml');
|
|
27
|
-
const parsed = parse(rawContent);
|
|
25
|
+
const rawContent = await readFile(skillMdPath, 'utf-8');
|
|
26
|
+
const { data, content: body } = matter(rawContent);
|
|
28
27
|
skills.set(name, {
|
|
29
|
-
name:
|
|
30
|
-
version:
|
|
28
|
+
name: data.name || name,
|
|
29
|
+
version: data.version || '1.0.0',
|
|
31
30
|
rawContent,
|
|
32
|
-
bodyContent:
|
|
33
|
-
frontmatter:
|
|
31
|
+
bodyContent: body.trim(),
|
|
32
|
+
frontmatter: data,
|
|
34
33
|
});
|
|
35
34
|
}
|
|
36
35
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-skills.js","sourceRoot":"","sources":["../../src/tools/sync-skills.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-skills.js","sourceRoot":"","sources":["../../src/tools/sync-skills.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skillpkg-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "MCP Server for skillpkg - Enable AI agents to search, install, and manage skills via Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -17,6 +17,13 @@
|
|
|
17
17
|
"files": [
|
|
18
18
|
"dist"
|
|
19
19
|
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"dev": "tsc --watch",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest"
|
|
26
|
+
},
|
|
20
27
|
"keywords": [
|
|
21
28
|
"mcp",
|
|
22
29
|
"model-context-protocol",
|
|
@@ -46,6 +53,7 @@
|
|
|
46
53
|
},
|
|
47
54
|
"dependencies": {
|
|
48
55
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
56
|
+
"gray-matter": "^4.0.3",
|
|
49
57
|
"skillpkg-core": "^0.4.0",
|
|
50
58
|
"yaml": "^2.8.2"
|
|
51
59
|
},
|
|
@@ -53,12 +61,5 @@
|
|
|
53
61
|
"@types/node": "^20.10.0",
|
|
54
62
|
"typescript": "^5.3.0",
|
|
55
63
|
"vitest": "^1.2.0"
|
|
56
|
-
},
|
|
57
|
-
"scripts": {
|
|
58
|
-
"build": "tsc",
|
|
59
|
-
"dev": "tsc --watch",
|
|
60
|
-
"typecheck": "tsc --noEmit",
|
|
61
|
-
"test": "vitest run",
|
|
62
|
-
"test:watch": "vitest"
|
|
63
64
|
}
|
|
64
|
-
}
|
|
65
|
+
}
|