@polyskill/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/adapters.test.d.ts +2 -0
- package/dist/__tests__/adapters.test.d.ts.map +1 -0
- package/dist/__tests__/adapters.test.js +65 -0
- package/dist/__tests__/adapters.test.js.map +1 -0
- package/dist/__tests__/validator.test.d.ts +2 -0
- package/dist/__tests__/validator.test.d.ts.map +1 -0
- package/dist/__tests__/validator.test.js +150 -0
- package/dist/__tests__/validator.test.js.map +1 -0
- package/dist/adapters/anthropic.d.ts +3 -0
- package/dist/adapters/anthropic.d.ts.map +1 -0
- package/dist/adapters/anthropic.js +19 -0
- package/dist/adapters/anthropic.js.map +1 -0
- package/dist/adapters/gemini.d.ts +3 -0
- package/dist/adapters/gemini.d.ts.map +1 -0
- package/dist/adapters/gemini.js +19 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/grok.d.ts +3 -0
- package/dist/adapters/grok.d.ts.map +1 -0
- package/dist/adapters/grok.js +22 -0
- package/dist/adapters/grok.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +27 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/kimi.d.ts +3 -0
- package/dist/adapters/kimi.d.ts.map +1 -0
- package/dist/adapters/kimi.js +22 -0
- package/dist/adapters/kimi.js.map +1 -0
- package/dist/adapters/openai.d.ts +3 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +22 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/adapters/types.d.ts +7 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +4 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +34 -0
- package/dist/loader.js.map +1 -0
- package/dist/schema/skill-manifest.schema.json +73 -0
- package/dist/schema/tool-definition.schema.json +50 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validator.d.ts +9 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +34 -0
- package/dist/validator.js.map +1 -0
- package/package.json +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/adapters.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
5
|
+
const loader_js_1 = require("../loader.js");
|
|
6
|
+
const index_js_1 = require("../adapters/index.js");
|
|
7
|
+
const fixtureDir = (0, node_path_1.join)(import.meta.dirname, "fixtures", "weather-skill");
|
|
8
|
+
(0, vitest_1.describe)("loadSkill", () => {
|
|
9
|
+
(0, vitest_1.it)("loads a valid skill from disk", async () => {
|
|
10
|
+
const skill = await (0, loader_js_1.loadSkill)(fixtureDir);
|
|
11
|
+
(0, vitest_1.expect)(skill.manifest.name).toBe("@test/weather-skill");
|
|
12
|
+
(0, vitest_1.expect)(skill.tools).toHaveLength(2);
|
|
13
|
+
(0, vitest_1.expect)(skill.tools[0].name).toBe("get_weather");
|
|
14
|
+
(0, vitest_1.expect)(skill.tools[1].name).toBe("get_forecast");
|
|
15
|
+
(0, vitest_1.expect)(skill.instructions).toContain("weather assistant");
|
|
16
|
+
});
|
|
17
|
+
(0, vitest_1.it)("throws on invalid manifest", async () => {
|
|
18
|
+
const badDir = (0, node_path_1.join)(import.meta.dirname, "fixtures", "nonexistent");
|
|
19
|
+
await (0, vitest_1.expect)((0, loader_js_1.loadSkill)(badDir)).rejects.toThrow();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.describe)("adapter registry", () => {
|
|
23
|
+
(0, vitest_1.it)("lists available adapters", () => {
|
|
24
|
+
const adapters = (0, index_js_1.listAdapters)();
|
|
25
|
+
(0, vitest_1.expect)(adapters).toContain("openai");
|
|
26
|
+
(0, vitest_1.expect)(adapters).toContain("anthropic");
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)("returns undefined for unknown adapter", () => {
|
|
29
|
+
(0, vitest_1.expect)((0, index_js_1.getAdapter)("unknown")).toBeUndefined();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
(0, vitest_1.describe)("OpenAI adapter", () => {
|
|
33
|
+
(0, vitest_1.it)("transpiles a skill to OpenAI function-calling format", async () => {
|
|
34
|
+
const skill = await (0, loader_js_1.loadSkill)(fixtureDir);
|
|
35
|
+
const adapter = (0, index_js_1.getAdapter)("openai");
|
|
36
|
+
const result = adapter.transpile(skill);
|
|
37
|
+
(0, vitest_1.expect)(result.platform).toBe("openai");
|
|
38
|
+
(0, vitest_1.expect)(result.systemPrompt).toContain("weather assistant");
|
|
39
|
+
(0, vitest_1.expect)(result.tools).toHaveLength(2);
|
|
40
|
+
const tool = result.tools[0];
|
|
41
|
+
(0, vitest_1.expect)(tool.type).toBe("function");
|
|
42
|
+
(0, vitest_1.expect)(tool.function.name).toBe("get_weather");
|
|
43
|
+
(0, vitest_1.expect)(tool.function.description).toBe("Get current weather for a location");
|
|
44
|
+
(0, vitest_1.expect)(tool.function.parameters.type).toBe("object");
|
|
45
|
+
(0, vitest_1.expect)(tool.function.parameters.properties.location.type).toBe("string");
|
|
46
|
+
(0, vitest_1.expect)(tool.function.parameters.required).toEqual(["location"]);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.describe)("Anthropic adapter", () => {
|
|
50
|
+
(0, vitest_1.it)("transpiles a skill to Anthropic tool-use format", async () => {
|
|
51
|
+
const skill = await (0, loader_js_1.loadSkill)(fixtureDir);
|
|
52
|
+
const adapter = (0, index_js_1.getAdapter)("anthropic");
|
|
53
|
+
const result = adapter.transpile(skill);
|
|
54
|
+
(0, vitest_1.expect)(result.platform).toBe("anthropic");
|
|
55
|
+
(0, vitest_1.expect)(result.systemPrompt).toContain("weather assistant");
|
|
56
|
+
(0, vitest_1.expect)(result.tools).toHaveLength(2);
|
|
57
|
+
const tool = result.tools[0];
|
|
58
|
+
(0, vitest_1.expect)(tool.name).toBe("get_weather");
|
|
59
|
+
(0, vitest_1.expect)(tool.description).toBe("Get current weather for a location");
|
|
60
|
+
(0, vitest_1.expect)(tool.input_schema.type).toBe("object");
|
|
61
|
+
(0, vitest_1.expect)(tool.input_schema.properties.location.type).toBe("string");
|
|
62
|
+
(0, vitest_1.expect)(tool.input_schema.required).toEqual(["location"]);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=adapters.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.test.js","sourceRoot":"","sources":["../../src/__tests__/adapters.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/validator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const validator_js_1 = require("../validator.js");
|
|
5
|
+
const validManifest = {
|
|
6
|
+
name: "@test/weather-skill",
|
|
7
|
+
version: "1.0.0",
|
|
8
|
+
description: "Get weather data",
|
|
9
|
+
type: "tool",
|
|
10
|
+
license: "MIT",
|
|
11
|
+
author: { name: "Test Author" },
|
|
12
|
+
skill: {
|
|
13
|
+
instructions: "./instructions.md",
|
|
14
|
+
tools: "./tools.json",
|
|
15
|
+
},
|
|
16
|
+
adapters: ["openai", "anthropic"],
|
|
17
|
+
};
|
|
18
|
+
const validTools = {
|
|
19
|
+
tools: [
|
|
20
|
+
{
|
|
21
|
+
name: "get_weather",
|
|
22
|
+
description: "Get current weather for a location",
|
|
23
|
+
parameters: {
|
|
24
|
+
type: "object",
|
|
25
|
+
properties: {
|
|
26
|
+
location: { type: "string", description: "City name" },
|
|
27
|
+
units: {
|
|
28
|
+
type: "string",
|
|
29
|
+
enum: ["celsius", "fahrenheit"],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ["location"],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
(0, vitest_1.describe)("validateManifest", () => {
|
|
38
|
+
(0, vitest_1.it)("accepts a valid manifest", () => {
|
|
39
|
+
const result = (0, validator_js_1.validateManifest)(validManifest);
|
|
40
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
41
|
+
(0, vitest_1.expect)(result.errors).toEqual([]);
|
|
42
|
+
});
|
|
43
|
+
(0, vitest_1.it)("rejects manifest missing required fields", () => {
|
|
44
|
+
const result = (0, validator_js_1.validateManifest)({ name: "@test/x" });
|
|
45
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
46
|
+
(0, vitest_1.expect)(result.errors.length).toBeGreaterThan(0);
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.it)("rejects manifest with invalid name format", () => {
|
|
49
|
+
const result = (0, validator_js_1.validateManifest)({
|
|
50
|
+
...validManifest,
|
|
51
|
+
name: "no-scope",
|
|
52
|
+
});
|
|
53
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
54
|
+
(0, vitest_1.expect)(result.errors.some((e) => e.includes("name"))).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
(0, vitest_1.it)("rejects manifest with invalid type", () => {
|
|
57
|
+
const result = (0, validator_js_1.validateManifest)({
|
|
58
|
+
...validManifest,
|
|
59
|
+
type: "invalid",
|
|
60
|
+
});
|
|
61
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
62
|
+
(0, vitest_1.expect)(result.errors.some((e) => e.includes("type"))).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
(0, vitest_1.it)("rejects manifest with empty adapters array", () => {
|
|
65
|
+
const result = (0, validator_js_1.validateManifest)({
|
|
66
|
+
...validManifest,
|
|
67
|
+
adapters: [],
|
|
68
|
+
});
|
|
69
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
(0, vitest_1.it)("accepts manifest with optional fields", () => {
|
|
72
|
+
const result = (0, validator_js_1.validateManifest)({
|
|
73
|
+
...validManifest,
|
|
74
|
+
main: "./src/index.ts",
|
|
75
|
+
keywords: ["weather", "api"],
|
|
76
|
+
repository: "https://github.com/test/weather",
|
|
77
|
+
dependencies: { "@other/skill": "^1.0.0" },
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.it)("rejects manifest with extra properties", () => {
|
|
82
|
+
const result = (0, validator_js_1.validateManifest)({
|
|
83
|
+
...validManifest,
|
|
84
|
+
unknown_field: "bad",
|
|
85
|
+
});
|
|
86
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.describe)("validateTools", () => {
|
|
90
|
+
(0, vitest_1.it)("accepts valid tools definition", () => {
|
|
91
|
+
const result = (0, validator_js_1.validateTools)(validTools);
|
|
92
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
93
|
+
(0, vitest_1.expect)(result.errors).toEqual([]);
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.it)("rejects tools with missing name", () => {
|
|
96
|
+
const result = (0, validator_js_1.validateTools)({
|
|
97
|
+
tools: [
|
|
98
|
+
{
|
|
99
|
+
description: "No name",
|
|
100
|
+
parameters: { type: "object", properties: {} },
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
105
|
+
});
|
|
106
|
+
(0, vitest_1.it)("rejects tools with invalid name format", () => {
|
|
107
|
+
const result = (0, validator_js_1.validateTools)({
|
|
108
|
+
tools: [
|
|
109
|
+
{
|
|
110
|
+
name: "BadName",
|
|
111
|
+
description: "Uppercase not allowed",
|
|
112
|
+
parameters: { type: "object", properties: {} },
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
});
|
|
116
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
117
|
+
});
|
|
118
|
+
(0, vitest_1.it)("rejects empty tools array", () => {
|
|
119
|
+
const result = (0, validator_js_1.validateTools)({ tools: [] });
|
|
120
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
121
|
+
});
|
|
122
|
+
(0, vitest_1.it)("accepts tools with returns field", () => {
|
|
123
|
+
const result = (0, validator_js_1.validateTools)({
|
|
124
|
+
tools: [
|
|
125
|
+
{
|
|
126
|
+
...validTools.tools[0],
|
|
127
|
+
returns: {
|
|
128
|
+
type: "object",
|
|
129
|
+
properties: {
|
|
130
|
+
temperature: { type: "number" },
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
});
|
|
136
|
+
(0, vitest_1.expect)(result.valid).toBe(true);
|
|
137
|
+
});
|
|
138
|
+
(0, vitest_1.it)("rejects tools with extra properties on tool object", () => {
|
|
139
|
+
const result = (0, validator_js_1.validateTools)({
|
|
140
|
+
tools: [
|
|
141
|
+
{
|
|
142
|
+
...validTools.tools[0],
|
|
143
|
+
extra: "not allowed",
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
});
|
|
147
|
+
(0, vitest_1.expect)(result.valid).toBe(false);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=validator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.test.js","sourceRoot":"","sources":["../../src/__tests__/validator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/adapters/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAY1C,eAAO,MAAM,gBAAgB,EAAE,OAU9B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Transpile a canonical tool to Anthropic tool-use format */
|
|
2
|
+
function transpileTool(tool) {
|
|
3
|
+
return {
|
|
4
|
+
name: tool.name,
|
|
5
|
+
description: tool.description,
|
|
6
|
+
input_schema: tool.parameters,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export const anthropicAdapter = {
|
|
10
|
+
platform: "anthropic",
|
|
11
|
+
transpile(skill) {
|
|
12
|
+
return {
|
|
13
|
+
platform: this.platform,
|
|
14
|
+
systemPrompt: skill.instructions,
|
|
15
|
+
tools: skill.tools.map(transpileTool),
|
|
16
|
+
};
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/adapters/anthropic.ts"],"names":[],"mappings":"AAGA,8DAA8D;AAC9D,SAAS,aAAa,CAAC,IAAmB;IACxC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,IAAI,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAY;IACvC,QAAQ,EAAE,WAAW;IAErB,SAAS,CAAC,KAAsB;QAC9B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;SACtC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAY1C,eAAO,MAAM,aAAa,EAAE,OAU3B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Transpile a canonical tool to Google Gemini functionDeclarations format */
|
|
2
|
+
function transpileTool(tool) {
|
|
3
|
+
return {
|
|
4
|
+
name: tool.name,
|
|
5
|
+
description: tool.description,
|
|
6
|
+
parameters: tool.parameters,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export const geminiAdapter = {
|
|
10
|
+
platform: "gemini",
|
|
11
|
+
transpile(skill) {
|
|
12
|
+
return {
|
|
13
|
+
platform: this.platform,
|
|
14
|
+
systemPrompt: skill.instructions,
|
|
15
|
+
tools: skill.tools.map(transpileTool),
|
|
16
|
+
};
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAGA,8EAA8E;AAC9E,SAAS,aAAa,CAAC,IAAmB;IACxC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,QAAQ,EAAE,QAAQ;IAElB,SAAS,CAAC,KAAsB;QAC9B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;SACtC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok.d.ts","sourceRoot":"","sources":["../../src/adapters/grok.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAe1C,eAAO,MAAM,WAAW,EAAE,OAUzB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Transpile a canonical tool to Grok (xAI) function-calling format (OpenAI-compatible) */
|
|
2
|
+
function transpileTool(tool) {
|
|
3
|
+
return {
|
|
4
|
+
type: "function",
|
|
5
|
+
function: {
|
|
6
|
+
name: tool.name,
|
|
7
|
+
description: tool.description,
|
|
8
|
+
parameters: tool.parameters,
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export const grokAdapter = {
|
|
13
|
+
platform: "grok",
|
|
14
|
+
transpile(skill) {
|
|
15
|
+
return {
|
|
16
|
+
platform: this.platform,
|
|
17
|
+
systemPrompt: skill.instructions,
|
|
18
|
+
tools: skill.tools.map(transpileTool),
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=grok.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok.js","sourceRoot":"","sources":["../../src/adapters/grok.ts"],"names":[],"mappings":"AAGA,2FAA2F;AAC3F,SAAS,aAAa,CAAC,IAAmB;IACxC,OAAO;QACL,IAAI,EAAE,UAAmB;QACzB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,QAAQ,EAAE,MAAM;IAEhB,SAAS,CAAC,KAAsB;QAC9B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;SACtC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Adapter } from "./types.js";
|
|
2
|
+
export type { Adapter } from "./types.js";
|
|
3
|
+
export { openaiAdapter } from "./openai.js";
|
|
4
|
+
export { anthropicAdapter } from "./anthropic.js";
|
|
5
|
+
export { grokAdapter } from "./grok.js";
|
|
6
|
+
export { geminiAdapter } from "./gemini.js";
|
|
7
|
+
export { kimiAdapter } from "./kimi.js";
|
|
8
|
+
/** Get an adapter by platform name. Returns undefined if not found. */
|
|
9
|
+
export declare function getAdapter(platform: string): Adapter | undefined;
|
|
10
|
+
/** List all registered platform names */
|
|
11
|
+
export declare function listAdapters(): string[];
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAO1C,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAWxC,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEhE;AAED,yCAAyC;AACzC,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAEvC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { openaiAdapter } from "./openai.js";
|
|
2
|
+
import { anthropicAdapter } from "./anthropic.js";
|
|
3
|
+
import { grokAdapter } from "./grok.js";
|
|
4
|
+
import { geminiAdapter } from "./gemini.js";
|
|
5
|
+
import { kimiAdapter } from "./kimi.js";
|
|
6
|
+
export { openaiAdapter } from "./openai.js";
|
|
7
|
+
export { anthropicAdapter } from "./anthropic.js";
|
|
8
|
+
export { grokAdapter } from "./grok.js";
|
|
9
|
+
export { geminiAdapter } from "./gemini.js";
|
|
10
|
+
export { kimiAdapter } from "./kimi.js";
|
|
11
|
+
/** Registry of all built-in adapters, keyed by platform name */
|
|
12
|
+
const adapterRegistry = {
|
|
13
|
+
openai: openaiAdapter,
|
|
14
|
+
anthropic: anthropicAdapter,
|
|
15
|
+
grok: grokAdapter,
|
|
16
|
+
gemini: geminiAdapter,
|
|
17
|
+
kimi: kimiAdapter,
|
|
18
|
+
};
|
|
19
|
+
/** Get an adapter by platform name. Returns undefined if not found. */
|
|
20
|
+
export function getAdapter(platform) {
|
|
21
|
+
return adapterRegistry[platform];
|
|
22
|
+
}
|
|
23
|
+
/** List all registered platform names */
|
|
24
|
+
export function listAdapters() {
|
|
25
|
+
return Object.keys(adapterRegistry);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,gEAAgE;AAChE,MAAM,eAAe,GAA4B;IAC/C,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,gBAAgB;IAC3B,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,WAAW;CAClB,CAAC;AAEF,uEAAuE;AACvE,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,YAAY;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.d.ts","sourceRoot":"","sources":["../../src/adapters/kimi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAe1C,eAAO,MAAM,WAAW,EAAE,OAUzB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Transpile a canonical tool to Kimi (Moonshot) function-calling format (OpenAI-compatible) */
|
|
2
|
+
function transpileTool(tool) {
|
|
3
|
+
return {
|
|
4
|
+
type: "function",
|
|
5
|
+
function: {
|
|
6
|
+
name: tool.name,
|
|
7
|
+
description: tool.description,
|
|
8
|
+
parameters: tool.parameters,
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export const kimiAdapter = {
|
|
13
|
+
platform: "kimi",
|
|
14
|
+
transpile(skill) {
|
|
15
|
+
return {
|
|
16
|
+
platform: this.platform,
|
|
17
|
+
systemPrompt: skill.instructions,
|
|
18
|
+
tools: skill.tools.map(transpileTool),
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=kimi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.js","sourceRoot":"","sources":["../../src/adapters/kimi.ts"],"names":[],"mappings":"AAGA,gGAAgG;AAChG,SAAS,aAAa,CAAC,IAAmB;IACxC,OAAO;QACL,IAAI,EAAE,UAAmB;QACzB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,QAAQ,EAAE,MAAM;IAEhB,SAAS,CAAC,KAAsB;QAC9B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;SACtC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAe1C,eAAO,MAAM,aAAa,EAAE,OAU3B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Transpile a canonical tool to OpenAI function-calling format */
|
|
2
|
+
function transpileTool(tool) {
|
|
3
|
+
return {
|
|
4
|
+
type: "function",
|
|
5
|
+
function: {
|
|
6
|
+
name: tool.name,
|
|
7
|
+
description: tool.description,
|
|
8
|
+
parameters: tool.parameters,
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export const openaiAdapter = {
|
|
13
|
+
platform: "openai",
|
|
14
|
+
transpile(skill) {
|
|
15
|
+
return {
|
|
16
|
+
platform: this.platform,
|
|
17
|
+
systemPrompt: skill.instructions,
|
|
18
|
+
tools: skill.tools.map(transpileTool),
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAGA,mEAAmE;AACnE,SAAS,aAAa,CAAC,IAAmB;IACxC,OAAO;QACL,IAAI,EAAE,UAAmB;QACzB,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,QAAQ,EAAE,QAAQ;IAElB,SAAS,CAAC,KAAsB;QAC9B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;SACtC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SkillDefinition, TranspileResult } from "../types.js";
|
|
2
|
+
/** Every platform adapter implements this interface */
|
|
3
|
+
export interface Adapter {
|
|
4
|
+
readonly platform: string;
|
|
5
|
+
transpile(skill: SkillDefinition): TranspileResult;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEpE,uDAAuD;AACvD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAAC;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { SkillType, SkillAuthor, SkillFiles, SkillManifest, JsonSchemaProperty, ToolParameterSchema, CanonicalTool, ToolsFile, SkillDefinition, TranspileResult, } from "./types.js";
|
|
2
|
+
export { validateManifest, validateTools } from "./validator.js";
|
|
3
|
+
export type { ValidationResult } from "./validator.js";
|
|
4
|
+
export { loadSkill } from "./loader.js";
|
|
5
|
+
export type { Adapter } from "./adapters/index.js";
|
|
6
|
+
export { getAdapter, listAdapters, openaiAdapter, anthropicAdapter, grokAdapter, geminiAdapter, kimiAdapter } from "./adapters/index.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { validateManifest, validateTools } from "./validator.js";
|
|
2
|
+
export { loadSkill } from "./loader.js";
|
|
3
|
+
export { getAdapter, listAdapters, openaiAdapter, anthropicAdapter, grokAdapter, geminiAdapter, kimiAdapter } from "./adapters/index.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,eAAe,EAAa,MAAM,YAAY,CAAC;AAG5E,kFAAkF;AAClF,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAqC1E"}
|
package/dist/loader.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { validateManifest, validateTools } from "./validator.js";
|
|
4
|
+
/** Load a Skill from a directory on disk into a fully resolved SkillDefinition */
|
|
5
|
+
export async function loadSkill(skillDir) {
|
|
6
|
+
// Read and validate manifest
|
|
7
|
+
const manifestPath = join(skillDir, "skill.json");
|
|
8
|
+
const manifestRaw = await readFile(manifestPath, "utf-8");
|
|
9
|
+
const manifest = JSON.parse(manifestRaw);
|
|
10
|
+
const manifestResult = validateManifest(manifest);
|
|
11
|
+
if (!manifestResult.valid) {
|
|
12
|
+
throw new Error(`Invalid skill.json:\n${manifestResult.errors.join("\n")}`);
|
|
13
|
+
}
|
|
14
|
+
// Load tools if referenced
|
|
15
|
+
let tools = [];
|
|
16
|
+
if (manifest.skill.tools) {
|
|
17
|
+
const toolsPath = join(skillDir, manifest.skill.tools);
|
|
18
|
+
const toolsRaw = await readFile(toolsPath, "utf-8");
|
|
19
|
+
const toolsFile = JSON.parse(toolsRaw);
|
|
20
|
+
const toolsResult = validateTools(toolsFile);
|
|
21
|
+
if (!toolsResult.valid) {
|
|
22
|
+
throw new Error(`Invalid tools.json:\n${toolsResult.errors.join("\n")}`);
|
|
23
|
+
}
|
|
24
|
+
tools = toolsFile.tools;
|
|
25
|
+
}
|
|
26
|
+
// Load instructions if referenced
|
|
27
|
+
let instructions = null;
|
|
28
|
+
if (manifest.skill.instructions) {
|
|
29
|
+
const instructionsPath = join(skillDir, manifest.skill.instructions);
|
|
30
|
+
instructions = await readFile(instructionsPath, "utf-8");
|
|
31
|
+
}
|
|
32
|
+
return { manifest, tools, instructions };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEjE,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,6BAA6B;IAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAkB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,wBAAwB,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3D,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,IAAI,KAAK,GAA6B,EAAE,CAAC;IACzC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,SAAS,GAAc,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAElD,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,wBAAwB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxD,CAAC;QACJ,CAAC;QACD,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,kCAAkC;IAClC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACrE,YAAY,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "SkillManifest",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": ["name", "version", "description", "type", "license", "author", "skill", "adapters"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"name": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"pattern": "^@[a-z0-9-]+/[a-z0-9-]+$",
|
|
10
|
+
"description": "Scoped package name (e.g. @author/skill-name)"
|
|
11
|
+
},
|
|
12
|
+
"version": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$",
|
|
15
|
+
"description": "Semver version string"
|
|
16
|
+
},
|
|
17
|
+
"description": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"minLength": 1,
|
|
20
|
+
"maxLength": 200
|
|
21
|
+
},
|
|
22
|
+
"type": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"enum": ["prompt", "tool", "workflow", "composite"]
|
|
25
|
+
},
|
|
26
|
+
"license": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"minLength": 1
|
|
29
|
+
},
|
|
30
|
+
"author": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"required": ["name"],
|
|
33
|
+
"properties": {
|
|
34
|
+
"name": { "type": "string", "minLength": 1 },
|
|
35
|
+
"email": { "type": "string", "format": "email" },
|
|
36
|
+
"url": { "type": "string", "format": "uri" }
|
|
37
|
+
},
|
|
38
|
+
"additionalProperties": false
|
|
39
|
+
},
|
|
40
|
+
"main": {
|
|
41
|
+
"type": "string"
|
|
42
|
+
},
|
|
43
|
+
"skill": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"properties": {
|
|
46
|
+
"instructions": { "type": "string" },
|
|
47
|
+
"tools": { "type": "string" },
|
|
48
|
+
"examples": { "type": "string" }
|
|
49
|
+
},
|
|
50
|
+
"additionalProperties": false
|
|
51
|
+
},
|
|
52
|
+
"adapters": {
|
|
53
|
+
"type": "array",
|
|
54
|
+
"items": { "type": "string" },
|
|
55
|
+
"minItems": 1
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"additionalProperties": { "type": "string" }
|
|
60
|
+
},
|
|
61
|
+
"keywords": {
|
|
62
|
+
"type": "array",
|
|
63
|
+
"items": { "type": "string" }
|
|
64
|
+
},
|
|
65
|
+
"repository": {
|
|
66
|
+
"type": "string"
|
|
67
|
+
},
|
|
68
|
+
"evals": {
|
|
69
|
+
"type": "string"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"additionalProperties": false
|
|
73
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "ToolsFile",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": ["tools"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"tools": {
|
|
8
|
+
"type": "array",
|
|
9
|
+
"items": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"required": ["name", "description", "parameters"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"name": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"pattern": "^[a-z][a-z0-9_]*$",
|
|
16
|
+
"description": "Tool name (lowercase, underscores allowed)"
|
|
17
|
+
},
|
|
18
|
+
"description": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"minLength": 1
|
|
21
|
+
},
|
|
22
|
+
"parameters": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"required": ["type", "properties"],
|
|
25
|
+
"properties": {
|
|
26
|
+
"type": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"const": "object"
|
|
29
|
+
},
|
|
30
|
+
"properties": {
|
|
31
|
+
"type": "object"
|
|
32
|
+
},
|
|
33
|
+
"required": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"items": { "type": "string" }
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"additionalProperties": false
|
|
39
|
+
},
|
|
40
|
+
"returns": {
|
|
41
|
+
"type": "object"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"additionalProperties": false
|
|
45
|
+
},
|
|
46
|
+
"minItems": 1
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"additionalProperties": false
|
|
50
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** Skill type categories */
|
|
2
|
+
export type SkillType = "prompt" | "tool" | "workflow" | "composite";
|
|
3
|
+
/** Author metadata */
|
|
4
|
+
export interface SkillAuthor {
|
|
5
|
+
name: string;
|
|
6
|
+
email?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Skill file references within the manifest */
|
|
10
|
+
export interface SkillFiles {
|
|
11
|
+
instructions?: string;
|
|
12
|
+
tools?: string;
|
|
13
|
+
examples?: string;
|
|
14
|
+
}
|
|
15
|
+
/** The skill.json manifest — the root config for every Skill package */
|
|
16
|
+
export interface SkillManifest {
|
|
17
|
+
name: string;
|
|
18
|
+
version: string;
|
|
19
|
+
description: string;
|
|
20
|
+
type: SkillType;
|
|
21
|
+
license: string;
|
|
22
|
+
author: SkillAuthor;
|
|
23
|
+
main?: string;
|
|
24
|
+
skill: SkillFiles;
|
|
25
|
+
adapters: string[];
|
|
26
|
+
dependencies?: Record<string, string>;
|
|
27
|
+
keywords?: string[];
|
|
28
|
+
repository?: string;
|
|
29
|
+
evals?: string;
|
|
30
|
+
}
|
|
31
|
+
/** JSON Schema property definition (subset we care about) */
|
|
32
|
+
export interface JsonSchemaProperty {
|
|
33
|
+
type: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
enum?: string[];
|
|
36
|
+
items?: JsonSchemaProperty;
|
|
37
|
+
properties?: Record<string, JsonSchemaProperty>;
|
|
38
|
+
required?: string[];
|
|
39
|
+
}
|
|
40
|
+
/** Parameter schema for a tool — standard JSON Schema object */
|
|
41
|
+
export interface ToolParameterSchema {
|
|
42
|
+
type: "object";
|
|
43
|
+
properties: Record<string, JsonSchemaProperty>;
|
|
44
|
+
required?: string[];
|
|
45
|
+
}
|
|
46
|
+
/** A single canonical tool definition */
|
|
47
|
+
export interface CanonicalTool {
|
|
48
|
+
name: string;
|
|
49
|
+
description: string;
|
|
50
|
+
parameters: ToolParameterSchema;
|
|
51
|
+
returns?: JsonSchemaProperty;
|
|
52
|
+
}
|
|
53
|
+
/** The tools.json file structure */
|
|
54
|
+
export interface ToolsFile {
|
|
55
|
+
tools: CanonicalTool[];
|
|
56
|
+
}
|
|
57
|
+
/** A fully loaded and resolved Skill — ready for adapter transpilation */
|
|
58
|
+
export interface SkillDefinition {
|
|
59
|
+
manifest: SkillManifest;
|
|
60
|
+
tools: CanonicalTool[];
|
|
61
|
+
instructions: string | null;
|
|
62
|
+
}
|
|
63
|
+
/** Result from an adapter transpilation */
|
|
64
|
+
export interface TranspileResult {
|
|
65
|
+
platform: string;
|
|
66
|
+
systemPrompt: string | null;
|
|
67
|
+
tools: unknown[];
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAErE,sBAAsB;AACtB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,mBAAmB,CAAC;IAChC,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ValidationResult {
|
|
2
|
+
valid: boolean;
|
|
3
|
+
errors: string[];
|
|
4
|
+
}
|
|
5
|
+
/** Validate a skill.json manifest object */
|
|
6
|
+
export declare function validateManifest(data: unknown): ValidationResult;
|
|
7
|
+
/** Validate a tools.json file object */
|
|
8
|
+
export declare function validateTools(data: unknown): ValidationResult;
|
|
9
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAUhE;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAU7D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import Ajv from "ajv";
|
|
5
|
+
import addFormats from "ajv-formats";
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const manifestSchema = JSON.parse(readFileSync(join(__dirname, "schema", "skill-manifest.schema.json"), "utf-8"));
|
|
8
|
+
const toolsSchema = JSON.parse(readFileSync(join(__dirname, "schema", "tool-definition.schema.json"), "utf-8"));
|
|
9
|
+
// Handle CJS/ESM interop for ajv and ajv-formats
|
|
10
|
+
const AjvConstructor = Ajv.default ?? Ajv;
|
|
11
|
+
const addFormatsPlugin = addFormats.default ?? addFormats;
|
|
12
|
+
const ajv = new AjvConstructor({ allErrors: true });
|
|
13
|
+
addFormatsPlugin(ajv);
|
|
14
|
+
const validateManifestSchema = ajv.compile(manifestSchema);
|
|
15
|
+
const validateToolsSchema = ajv.compile(toolsSchema);
|
|
16
|
+
/** Validate a skill.json manifest object */
|
|
17
|
+
export function validateManifest(data) {
|
|
18
|
+
const valid = validateManifestSchema(data);
|
|
19
|
+
if (valid) {
|
|
20
|
+
return { valid: true, errors: [] };
|
|
21
|
+
}
|
|
22
|
+
const errors = (validateManifestSchema.errors ?? []).map((e) => `${e.instancePath || "/"}: ${e.message}`);
|
|
23
|
+
return { valid: false, errors };
|
|
24
|
+
}
|
|
25
|
+
/** Validate a tools.json file object */
|
|
26
|
+
export function validateTools(data) {
|
|
27
|
+
const valid = validateToolsSchema(data);
|
|
28
|
+
if (valid) {
|
|
29
|
+
return { valid: true, errors: [] };
|
|
30
|
+
}
|
|
31
|
+
const errors = (validateToolsSchema.errors ?? []).map((e) => `${e.instancePath || "/"}: ${e.message}`);
|
|
32
|
+
return { valid: false, errors };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,EAAE,OAAO,CAAC,CAC/E,CAAC;AACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,6BAA6B,CAAC,EAAE,OAAO,CAAC,CAChF,CAAC;AAEF,iDAAiD;AACjD,MAAM,cAAc,GAAI,GAAW,CAAC,OAAO,IAAI,GAAG,CAAC;AACnD,MAAM,gBAAgB,GAAI,UAAkB,CAAC,OAAO,IAAI,UAAU,CAAC;AAEnE,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAEtB,MAAM,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAC3D,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAOrD,4CAA4C;AAC5C,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,sBAAsB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CACtD,CAAC,CAA8C,EAAE,EAAE,CACjD,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAC3C,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,mBAAmB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CACnD,CAAC,CAA8C,EAAE,EAAE,CACjD,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAC3C,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@polyskill/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Core types, validation, and adapters for SkillStore",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc && rm -rf dist/schema && cp -r src/schema dist/schema",
|
|
10
|
+
"test": "vitest run",
|
|
11
|
+
"test:watch": "vitest",
|
|
12
|
+
"clean": "rm -rf dist"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"ajv": "^8.17.1",
|
|
16
|
+
"ajv-formats": "^3.0.1"
|
|
17
|
+
},
|
|
18
|
+
"files": ["dist"],
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^22.0.0",
|
|
24
|
+
"typescript": "^5.7.0",
|
|
25
|
+
"vitest": "^3.0.0"
|
|
26
|
+
}
|
|
27
|
+
}
|