@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.
Files changed (55) hide show
  1. package/dist/__tests__/adapters.test.d.ts +2 -0
  2. package/dist/__tests__/adapters.test.d.ts.map +1 -0
  3. package/dist/__tests__/adapters.test.js +65 -0
  4. package/dist/__tests__/adapters.test.js.map +1 -0
  5. package/dist/__tests__/validator.test.d.ts +2 -0
  6. package/dist/__tests__/validator.test.d.ts.map +1 -0
  7. package/dist/__tests__/validator.test.js +150 -0
  8. package/dist/__tests__/validator.test.js.map +1 -0
  9. package/dist/adapters/anthropic.d.ts +3 -0
  10. package/dist/adapters/anthropic.d.ts.map +1 -0
  11. package/dist/adapters/anthropic.js +19 -0
  12. package/dist/adapters/anthropic.js.map +1 -0
  13. package/dist/adapters/gemini.d.ts +3 -0
  14. package/dist/adapters/gemini.d.ts.map +1 -0
  15. package/dist/adapters/gemini.js +19 -0
  16. package/dist/adapters/gemini.js.map +1 -0
  17. package/dist/adapters/grok.d.ts +3 -0
  18. package/dist/adapters/grok.d.ts.map +1 -0
  19. package/dist/adapters/grok.js +22 -0
  20. package/dist/adapters/grok.js.map +1 -0
  21. package/dist/adapters/index.d.ts +12 -0
  22. package/dist/adapters/index.d.ts.map +1 -0
  23. package/dist/adapters/index.js +27 -0
  24. package/dist/adapters/index.js.map +1 -0
  25. package/dist/adapters/kimi.d.ts +3 -0
  26. package/dist/adapters/kimi.d.ts.map +1 -0
  27. package/dist/adapters/kimi.js +22 -0
  28. package/dist/adapters/kimi.js.map +1 -0
  29. package/dist/adapters/openai.d.ts +3 -0
  30. package/dist/adapters/openai.d.ts.map +1 -0
  31. package/dist/adapters/openai.js +22 -0
  32. package/dist/adapters/openai.js.map +1 -0
  33. package/dist/adapters/types.d.ts +7 -0
  34. package/dist/adapters/types.d.ts.map +1 -0
  35. package/dist/adapters/types.js +2 -0
  36. package/dist/adapters/types.js.map +1 -0
  37. package/dist/index.d.ts +7 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +4 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/loader.d.ts +4 -0
  42. package/dist/loader.d.ts.map +1 -0
  43. package/dist/loader.js +34 -0
  44. package/dist/loader.js.map +1 -0
  45. package/dist/schema/skill-manifest.schema.json +73 -0
  46. package/dist/schema/tool-definition.schema.json +50 -0
  47. package/dist/types.d.ts +69 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/validator.d.ts +9 -0
  52. package/dist/validator.d.ts.map +1 -0
  53. package/dist/validator.js +34 -0
  54. package/dist/validator.js.map +1 -0
  55. package/package.json +27 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapters.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validator.test.d.ts.map
@@ -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,3 @@
1
+ import type { Adapter } from "./types.js";
2
+ export declare const anthropicAdapter: Adapter;
3
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -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,3 @@
1
+ import type { Adapter } from "./types.js";
2
+ export declare const geminiAdapter: Adapter;
3
+ //# sourceMappingURL=gemini.d.ts.map
@@ -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,3 @@
1
+ import type { Adapter } from "./types.js";
2
+ export declare const grokAdapter: Adapter;
3
+ //# sourceMappingURL=grok.d.ts.map
@@ -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,3 @@
1
+ import type { Adapter } from "./types.js";
2
+ export declare const kimiAdapter: Adapter;
3
+ //# sourceMappingURL=kimi.d.ts.map
@@ -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,3 @@
1
+ import type { Adapter } from "./types.js";
2
+ export declare const openaiAdapter: Adapter;
3
+ //# sourceMappingURL=openai.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":""}
@@ -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"}
@@ -0,0 +1,4 @@
1
+ import type { SkillDefinition } from "./types.js";
2
+ /** Load a Skill from a directory on disk into a fully resolved SkillDefinition */
3
+ export declare function loadSkill(skillDir: string): Promise<SkillDefinition>;
4
+ //# sourceMappingURL=loader.d.ts.map
@@ -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
+ }
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
+ }