@to-skills/core 0.2.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-present Pradeep Mouli
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,7 @@
1
+ export type { ExtractedSkill, ExtractedFunction, ExtractedClass, ExtractedType, ExtractedEnum, ExtractedParameter, ExtractedProperty, RenderedSkill, SkillRenderOptions, } from "./types.js";
2
+ export { renderSkills, renderSkill } from "./renderer.js";
3
+ export { writeSkills } from "./writer.js";
4
+ export { estimateTokens, truncateToTokenBudget } from "./tokens.js";
5
+ export { renderLlmsTxt } from "./llms-txt.js";
6
+ export type { LlmsTxtOptions, LlmsTxtResult } from "./llms-txt.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,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { renderSkills, renderSkill } from "./renderer.js";
2
+ export { writeSkills } from "./writer.js";
3
+ export { estimateTokens, truncateToTokenBudget } from "./tokens.js";
4
+ export { renderLlmsTxt } from "./llms-txt.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ExtractedSkill } from "./types.js";
2
+ export interface LlmsTxtOptions {
3
+ /** Project name (falls back to first skill name) */
4
+ projectName: string;
5
+ /** Project description */
6
+ projectDescription: string;
7
+ }
8
+ export interface LlmsTxtResult {
9
+ /** llms.txt content (summary index) */
10
+ summary: string;
11
+ /** llms-full.txt content (complete API) */
12
+ full: string;
13
+ /** Estimated tokens for summary */
14
+ summaryTokens: number;
15
+ /** Estimated tokens for full */
16
+ fullTokens: number;
17
+ }
18
+ /** Render llms.txt and llms-full.txt from extracted skills */
19
+ export declare function renderLlmsTxt(skills: ExtractedSkill[], options: LlmsTxtOptions): LlmsTxtResult;
20
+ //# sourceMappingURL=llms-txt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms-txt.d.ts","sourceRoot":"","sources":["../src/llms-txt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiBjD,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EAAE,EACxB,OAAO,EAAE,cAAc,GACtB,aAAa,CAUf"}
@@ -0,0 +1,184 @@
1
+ import { estimateTokens } from "./tokens.js";
2
+ /** Max description length in llms.txt summary */
3
+ const SUMMARY_DESC_MAX = 150;
4
+ /** Section ordering — functions/classes first, types/enums in Optional */
5
+ const SECTION_ORDER = {
6
+ Functions: 1,
7
+ Classes: 2,
8
+ Variables: 3,
9
+ Interfaces: 10,
10
+ Types: 11,
11
+ Enums: 12,
12
+ Other: 20,
13
+ };
14
+ /** Render llms.txt and llms-full.txt from extracted skills */
15
+ export function renderLlmsTxt(skills, options) {
16
+ const summary = renderSummary(skills, options);
17
+ const full = renderFull(skills, options);
18
+ return {
19
+ summary,
20
+ full,
21
+ summaryTokens: estimateTokens(summary),
22
+ fullTokens: estimateTokens(full),
23
+ };
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // llms.txt — summary index
27
+ // ---------------------------------------------------------------------------
28
+ function renderSummary(skills, options) {
29
+ const lines = [];
30
+ lines.push(`# ${options.projectName}\n`);
31
+ if (options.projectDescription) {
32
+ lines.push(`> ${options.projectDescription}\n`);
33
+ }
34
+ if (skills.length > 1) {
35
+ for (const skill of skills) {
36
+ lines.push(`## ${skill.name}\n`);
37
+ if (skill.description) {
38
+ lines.push(`> ${truncateDescription(skill.description)}\n`);
39
+ }
40
+ renderSummarySections(skill, lines);
41
+ }
42
+ }
43
+ else if (skills.length === 1) {
44
+ renderSummarySections(skills[0], lines);
45
+ }
46
+ return lines.join("\n");
47
+ }
48
+ function renderSummarySections(skill, lines) {
49
+ const primary = [];
50
+ const optional = [];
51
+ // Functions
52
+ for (const fn of skill.functions) {
53
+ const desc = truncateDescription(fn.description);
54
+ primary.push(`- \`${fn.name}\`${desc ? `: ${desc}` : ""}`);
55
+ }
56
+ // Classes
57
+ for (const cls of skill.classes) {
58
+ const desc = truncateDescription(cls.description);
59
+ primary.push(`- \`${cls.name}\`${desc ? `: ${desc}` : ""}`);
60
+ }
61
+ // Types/Interfaces
62
+ for (const t of skill.types) {
63
+ const desc = truncateDescription(t.description);
64
+ optional.push(`- \`${t.name}\`${desc ? `: ${desc}` : ""}`);
65
+ }
66
+ // Enums
67
+ for (const e of skill.enums) {
68
+ const desc = truncateDescription(e.description);
69
+ optional.push(`- \`${e.name}\`${desc ? `: ${desc}` : ""}`);
70
+ }
71
+ if (primary.length > 0) {
72
+ lines.push("### API\n");
73
+ lines.push(...primary);
74
+ lines.push("");
75
+ }
76
+ if (optional.length > 0) {
77
+ lines.push("## Optional\n");
78
+ lines.push("### Types\n");
79
+ lines.push(...optional);
80
+ lines.push("");
81
+ }
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // llms-full.txt — complete API content
85
+ // ---------------------------------------------------------------------------
86
+ function renderFull(skills, options) {
87
+ const lines = [];
88
+ lines.push(`# ${options.projectName}\n`);
89
+ if (options.projectDescription) {
90
+ lines.push(`> ${options.projectDescription}\n`);
91
+ }
92
+ for (const skill of skills) {
93
+ if (skills.length > 1) {
94
+ lines.push(`## ${skill.name}\n`);
95
+ if (skill.description)
96
+ lines.push(`${skill.description}\n`);
97
+ }
98
+ // Functions
99
+ for (const fn of skill.functions) {
100
+ lines.push(`### ${fn.name}\n`);
101
+ if (fn.description)
102
+ lines.push(`${fn.description}\n`);
103
+ if (fn.signature) {
104
+ lines.push("```ts", fn.signature, "```\n");
105
+ }
106
+ if (fn.parameters.length > 0) {
107
+ lines.push("**Parameters:**");
108
+ for (const p of fn.parameters) {
109
+ const opt = p.optional ? " (optional)" : "";
110
+ lines.push(`- \`${p.name}: ${p.type}\`${opt} — ${p.description || ""}`);
111
+ }
112
+ lines.push("");
113
+ }
114
+ if (fn.returnType && fn.returnType !== "void") {
115
+ lines.push(`**Returns:** \`${fn.returnType}\`\n`);
116
+ }
117
+ if (fn.examples.length > 0) {
118
+ for (const ex of fn.examples) {
119
+ lines.push(ex);
120
+ }
121
+ lines.push("");
122
+ }
123
+ }
124
+ // Classes
125
+ for (const cls of skill.classes) {
126
+ lines.push(`### ${cls.name}\n`);
127
+ if (cls.description)
128
+ lines.push(`${cls.description}\n`);
129
+ if (cls.constructorSignature) {
130
+ lines.push("```ts", cls.constructorSignature, "```\n");
131
+ }
132
+ if (cls.properties.length > 0) {
133
+ lines.push("**Properties:**");
134
+ for (const p of cls.properties) {
135
+ lines.push(`- \`${p.name}: ${p.type}\` — ${p.description || ""}`);
136
+ }
137
+ lines.push("");
138
+ }
139
+ if (cls.methods.length > 0) {
140
+ lines.push("**Methods:**");
141
+ for (const m of cls.methods) {
142
+ lines.push(`- \`${m.signature}\` — ${m.description || ""}`);
143
+ }
144
+ lines.push("");
145
+ }
146
+ }
147
+ // Types
148
+ for (const t of skill.types) {
149
+ lines.push(`### ${t.name}\n`);
150
+ if (t.description)
151
+ lines.push(`${t.description}\n`);
152
+ if (t.definition) {
153
+ lines.push("```ts", `type ${t.name} = ${t.definition}`, "```\n");
154
+ }
155
+ }
156
+ // Enums
157
+ for (const e of skill.enums) {
158
+ lines.push(`### ${e.name}\n`);
159
+ if (e.description)
160
+ lines.push(`${e.description}\n`);
161
+ for (const m of e.members) {
162
+ lines.push(`- \`${m.name}\` = \`${m.value}\` — ${m.description || ""}`);
163
+ }
164
+ lines.push("");
165
+ }
166
+ if (skills.length > 1) {
167
+ lines.push("---\n");
168
+ }
169
+ }
170
+ return lines.join("\n");
171
+ }
172
+ // ---------------------------------------------------------------------------
173
+ // Helpers
174
+ // ---------------------------------------------------------------------------
175
+ function truncateDescription(desc) {
176
+ if (!desc || desc.length <= SUMMARY_DESC_MAX)
177
+ return desc;
178
+ const firstSentence = desc.match(/^[^.!?]+[.!?]/)?.[0];
179
+ if (firstSentence && firstSentence.length <= SUMMARY_DESC_MAX) {
180
+ return firstSentence;
181
+ }
182
+ return desc.slice(0, SUMMARY_DESC_MAX - 3) + "...";
183
+ }
184
+ //# sourceMappingURL=llms-txt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms-txt.js","sourceRoot":"","sources":["../src/llms-txt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ExtractedSkill, RenderedSkill, SkillRenderOptions } from "./types.js";
2
+ /** Render multiple extracted skills into SKILL.md files */
3
+ export declare function renderSkills(skills: ExtractedSkill[], options?: Partial<SkillRenderOptions>): RenderedSkill[];
4
+ /** Render a single extracted skill into a SKILL.md file */
5
+ export declare function renderSkill(skill: ExtractedSkill, options?: Partial<SkillRenderOptions>): RenderedSkill;
6
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAKd,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAepB,2DAA2D;AAC3D,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EAAE,EACxB,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACpC,aAAa,EAAE,CAGjB;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CACzB,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACpC,aAAa,CA2Df"}
@@ -0,0 +1,272 @@
1
+ import { estimateTokens, truncateToTokenBudget } from "./tokens.js";
2
+ /** agentskills.io spec: max 1024 chars for description */
3
+ const DESCRIPTION_MAX = 1024;
4
+ const DEFAULT_OPTIONS = {
5
+ outDir: "skills",
6
+ includeExamples: true,
7
+ includeSignatures: true,
8
+ maxTokens: 4000,
9
+ namePrefix: "",
10
+ license: "",
11
+ };
12
+ /** Render multiple extracted skills into SKILL.md files */
13
+ export function renderSkills(skills, options) {
14
+ const opts = { ...DEFAULT_OPTIONS, ...options };
15
+ return skills.map((skill) => renderSkill(skill, opts));
16
+ }
17
+ /** Render a single extracted skill into a SKILL.md file */
18
+ export function renderSkill(skill, options) {
19
+ const opts = { ...DEFAULT_OPTIONS, ...options };
20
+ const skillName = toSkillName(opts.namePrefix || skill.name);
21
+ const sections = [];
22
+ // Frontmatter — description is truncated and enriched with trigger phrases
23
+ const description = buildDescription(skill);
24
+ sections.push(renderFrontmatter(skillName, description, opts.license || skill.license || ""));
25
+ // Title
26
+ sections.push(`# ${skill.name}`);
27
+ // Overview
28
+ if (skill.description) {
29
+ sections.push(skill.description);
30
+ }
31
+ // When to Use — derived from API surface
32
+ const whenToUse = renderWhenToUse(skill);
33
+ if (whenToUse)
34
+ sections.push(whenToUse);
35
+ // Quick Reference — summary of exported surface
36
+ const quickRef = renderQuickReference(skill);
37
+ if (quickRef)
38
+ sections.push(quickRef);
39
+ // Primary API: Functions and Classes first (what agents can call)
40
+ if (skill.functions.length > 0) {
41
+ sections.push(renderFunctions(skill.functions, opts));
42
+ }
43
+ if (skill.classes.length > 0) {
44
+ sections.push(renderClasses(skill.classes, opts));
45
+ }
46
+ // Examples (high value — before type definitions)
47
+ if (opts.includeExamples && skill.examples.length > 0) {
48
+ sections.push("## Examples\n\n" + skill.examples.join("\n\n"));
49
+ }
50
+ // Secondary: Types and Enums (supporting definitions)
51
+ if (skill.types.length > 0) {
52
+ sections.push(renderTypes(skill.types));
53
+ }
54
+ if (skill.enums.length > 0) {
55
+ sections.push(renderEnums(skill.enums));
56
+ }
57
+ const raw = sections.join("\n\n");
58
+ const content = truncateToTokenBudget(raw, opts.maxTokens);
59
+ return {
60
+ filename: `${skillName}/SKILL.md`,
61
+ content,
62
+ tokens: estimateTokens(content),
63
+ };
64
+ }
65
+ // ---------------------------------------------------------------------------
66
+ // Description builder — enriches with trigger phrases for agent discovery
67
+ // ---------------------------------------------------------------------------
68
+ function buildDescription(skill) {
69
+ const parts = [];
70
+ // Base description
71
+ if (skill.description) {
72
+ parts.push(skill.description);
73
+ }
74
+ else {
75
+ parts.push(`API reference for ${skill.name}`);
76
+ }
77
+ // Add trigger phrases from API surface
78
+ const triggers = [];
79
+ if (skill.functions.length > 0) {
80
+ const names = skill.functions.slice(0, 5).map((f) => f.name);
81
+ triggers.push(names.join(", "));
82
+ }
83
+ if (skill.classes.length > 0) {
84
+ const names = skill.classes.slice(0, 3).map((c) => c.name);
85
+ triggers.push(names.join(", "));
86
+ }
87
+ if (triggers.length > 0) {
88
+ parts.push(`Use when working with ${triggers.join(", ")}.`);
89
+ }
90
+ const full = parts.join(" ");
91
+ return truncateDescription(full, DESCRIPTION_MAX);
92
+ }
93
+ /** Truncate description to max chars, keeping sentence boundary */
94
+ function truncateDescription(desc, max) {
95
+ if (desc.length <= max)
96
+ return desc;
97
+ const firstSentence = desc.match(/^[^.!?]+[.!?]/)?.[0];
98
+ if (firstSentence && firstSentence.length <= max) {
99
+ return firstSentence;
100
+ }
101
+ return desc.slice(0, max - 3) + "...";
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Frontmatter
105
+ // ---------------------------------------------------------------------------
106
+ function renderFrontmatter(name, description, license) {
107
+ const lines = ["---", `name: ${name}`];
108
+ lines.push(`description: ${quoteYaml(description)}`);
109
+ if (license) {
110
+ lines.push(`license: ${license}`);
111
+ }
112
+ lines.push("---");
113
+ return lines.join("\n");
114
+ }
115
+ function quoteYaml(value) {
116
+ if (/[:#{}[\],&*?|>!%@`"']/.test(value) || value.includes("\n")) {
117
+ return `"${value.replace(/"/g, '\\"')}"`;
118
+ }
119
+ return value;
120
+ }
121
+ // ---------------------------------------------------------------------------
122
+ // When to Use — richer triggers from API surface
123
+ // ---------------------------------------------------------------------------
124
+ function renderWhenToUse(skill) {
125
+ const triggers = [];
126
+ if (skill.functions.length > 0) {
127
+ const names = skill.functions.slice(0, 5).map((f) => `\`${f.name}()\``);
128
+ triggers.push(`- Calling ${names.join(", ")}${skill.functions.length > 5 ? `, and ${skill.functions.length - 5} more` : ""}`);
129
+ }
130
+ if (skill.classes.length > 0) {
131
+ const names = skill.classes.slice(0, 3).map((c) => `\`${c.name}\``);
132
+ triggers.push(`- Instantiating or extending ${names.join(", ")}`);
133
+ }
134
+ if (skill.types.length > 0) {
135
+ const names = skill.types.slice(0, 5).map((t) => `\`${t.name}\``);
136
+ triggers.push(`- Typing with ${names.join(", ")}`);
137
+ }
138
+ // Extract @see / @remarks triggers from function tags
139
+ for (const fn of skill.functions) {
140
+ if (fn.tags["see"]) {
141
+ triggers.push(`- See also: ${fn.tags["see"]}`);
142
+ break; // one is enough
143
+ }
144
+ }
145
+ if (triggers.length === 0)
146
+ return "";
147
+ return "## When to Use\n\n" + triggers.join("\n");
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // Quick Reference
151
+ // ---------------------------------------------------------------------------
152
+ function renderQuickReference(skill) {
153
+ const items = [];
154
+ if (skill.functions.length > 0) {
155
+ items.push(`**${skill.functions.length} functions** — ${skill.functions.map((f) => `\`${f.name}\``).join(", ")}`);
156
+ }
157
+ if (skill.classes.length > 0) {
158
+ items.push(`**${skill.classes.length} classes** — ${skill.classes.map((c) => `\`${c.name}\``).join(", ")}`);
159
+ }
160
+ if (skill.types.length > 0) {
161
+ items.push(`**${skill.types.length} types** — ${skill.types.map((t) => `\`${t.name}\``).join(", ")}`);
162
+ }
163
+ if (skill.enums.length > 0) {
164
+ items.push(`**${skill.enums.length} enums** — ${skill.enums.map((e) => `\`${e.name}\``).join(", ")}`);
165
+ }
166
+ if (items.length === 0)
167
+ return "";
168
+ return "## Quick Reference\n\n" + items.join("\n");
169
+ }
170
+ // ---------------------------------------------------------------------------
171
+ // Section renderers
172
+ // ---------------------------------------------------------------------------
173
+ function renderFunctions(fns, opts) {
174
+ const lines = ["## Functions\n"];
175
+ for (const fn of fns) {
176
+ lines.push(`### \`${fn.name}\``);
177
+ if (fn.description)
178
+ lines.push(fn.description);
179
+ if (opts.includeSignatures && fn.signature) {
180
+ lines.push("```ts", fn.signature, "```");
181
+ }
182
+ if (fn.parameters.length > 0) {
183
+ lines.push("**Parameters:**");
184
+ for (const p of fn.parameters) {
185
+ const opt = p.optional ? " (optional)" : "";
186
+ const def = p.defaultValue ? ` — default: \`${p.defaultValue}\`` : "";
187
+ lines.push(`- \`${p.name}: ${p.type}\`${opt}${def} — ${p.description || ""}`);
188
+ }
189
+ }
190
+ if (fn.returnType && fn.returnType !== "void") {
191
+ lines.push(`**Returns:** \`${fn.returnType}\``);
192
+ }
193
+ if (opts.includeExamples && fn.examples.length > 0) {
194
+ for (const ex of fn.examples) {
195
+ lines.push(ex);
196
+ }
197
+ }
198
+ lines.push("");
199
+ }
200
+ return lines.join("\n");
201
+ }
202
+ function renderClasses(classes, opts) {
203
+ const lines = ["## Classes\n"];
204
+ for (const cls of classes) {
205
+ lines.push(`### \`${cls.name}\``);
206
+ if (cls.description)
207
+ lines.push(cls.description);
208
+ if (opts.includeSignatures && cls.constructorSignature) {
209
+ lines.push("```ts", cls.constructorSignature, "```");
210
+ }
211
+ if (cls.properties.length > 0) {
212
+ lines.push("**Properties:**");
213
+ for (const p of cls.properties) {
214
+ const opt = p.optional ? " (optional)" : "";
215
+ lines.push(`- \`${p.name}: ${p.type}\`${opt} — ${p.description || ""}`);
216
+ }
217
+ }
218
+ if (cls.methods.length > 0) {
219
+ lines.push("**Methods:**");
220
+ for (const m of cls.methods) {
221
+ if (opts.includeSignatures) {
222
+ lines.push(`- \`${m.signature}\` — ${m.description || ""}`);
223
+ }
224
+ else {
225
+ lines.push(`- \`${m.name}\` — ${m.description || ""}`);
226
+ }
227
+ }
228
+ }
229
+ lines.push("");
230
+ }
231
+ return lines.join("\n");
232
+ }
233
+ function renderTypes(types) {
234
+ const lines = ["## Types\n"];
235
+ for (const t of types) {
236
+ lines.push(`### \`${t.name}\``);
237
+ if (t.description)
238
+ lines.push(t.description);
239
+ if (t.definition) {
240
+ lines.push("```ts", t.definition, "```");
241
+ }
242
+ lines.push("");
243
+ }
244
+ return lines.join("\n");
245
+ }
246
+ function renderEnums(enums) {
247
+ const lines = ["## Enums\n"];
248
+ for (const e of enums) {
249
+ lines.push(`### \`${e.name}\``);
250
+ if (e.description)
251
+ lines.push(e.description);
252
+ for (const m of e.members) {
253
+ lines.push(`- \`${m.name}\` = \`${m.value}\` — ${m.description || ""}`);
254
+ }
255
+ lines.push("");
256
+ }
257
+ return lines.join("\n");
258
+ }
259
+ // ---------------------------------------------------------------------------
260
+ // Utilities
261
+ // ---------------------------------------------------------------------------
262
+ /** Convert a package name to a valid skill name (lowercase, hyphens only) */
263
+ function toSkillName(name) {
264
+ return name
265
+ .replace(/^@/, "")
266
+ .replace(/\//g, "-")
267
+ .replace(/[^a-z0-9-]/g, "-")
268
+ .replace(/-+/g, "-")
269
+ .replace(/^-|-$/g, "")
270
+ .toLowerCase();
271
+ }
272
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Rough token estimate: ~4 chars per token for English/code.
3
+ * Not exact, but good enough for budgeting skill file sizes.
4
+ */
5
+ export declare function estimateTokens(text: string): number;
6
+ /** Truncate text to fit within a token budget, preserving complete lines */
7
+ export declare function truncateToTokenBudget(text: string, maxTokens: number): string;
8
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAY7E"}
package/dist/tokens.js ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Rough token estimate: ~4 chars per token for English/code.
3
+ * Not exact, but good enough for budgeting skill file sizes.
4
+ */
5
+ export function estimateTokens(text) {
6
+ return Math.ceil(text.length / 4);
7
+ }
8
+ /** Truncate text to fit within a token budget, preserving complete lines */
9
+ export function truncateToTokenBudget(text, maxTokens) {
10
+ if (estimateTokens(text) <= maxTokens)
11
+ return text;
12
+ const maxChars = maxTokens * 4;
13
+ const truncated = text.slice(0, maxChars);
14
+ const lastNewline = truncated.lastIndexOf("\n");
15
+ if (lastNewline > 0) {
16
+ return truncated.slice(0, lastNewline) + "\n\n<!-- truncated -->\n";
17
+ }
18
+ return truncated + "\n\n<!-- truncated -->\n";
19
+ }
20
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAU;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,CACnC;AAED,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,SAAiB,EAAU;IAC7E,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAEnD,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,0BAA0B,CAAC;IACtE,CAAC;IAED,OAAO,SAAS,GAAG,0BAA0B,CAAC;AAAA,CAC/C"}
@@ -0,0 +1,88 @@
1
+ /** Extracted API surface for a single package/module */
2
+ export interface ExtractedSkill {
3
+ /** Package or module name */
4
+ name: string;
5
+ /** Package description */
6
+ description: string;
7
+ /** License identifier (e.g. "MIT", "Apache-2.0") */
8
+ license?: string;
9
+ /** Exported functions */
10
+ functions: ExtractedFunction[];
11
+ /** Exported classes */
12
+ classes: ExtractedClass[];
13
+ /** Exported interfaces and type aliases */
14
+ types: ExtractedType[];
15
+ /** Exported enums */
16
+ enums: ExtractedEnum[];
17
+ /** Usage examples from @example tags or doc pages */
18
+ examples: string[];
19
+ }
20
+ export interface ExtractedFunction {
21
+ name: string;
22
+ description: string;
23
+ signature: string;
24
+ parameters: ExtractedParameter[];
25
+ returnType: string;
26
+ examples: string[];
27
+ tags: Record<string, string>;
28
+ }
29
+ export interface ExtractedClass {
30
+ name: string;
31
+ description: string;
32
+ constructorSignature: string;
33
+ methods: ExtractedFunction[];
34
+ properties: ExtractedProperty[];
35
+ examples: string[];
36
+ }
37
+ export interface ExtractedType {
38
+ name: string;
39
+ description: string;
40
+ definition: string;
41
+ }
42
+ export interface ExtractedEnum {
43
+ name: string;
44
+ description: string;
45
+ members: Array<{
46
+ name: string;
47
+ value: string;
48
+ description: string;
49
+ }>;
50
+ }
51
+ export interface ExtractedParameter {
52
+ name: string;
53
+ type: string;
54
+ description: string;
55
+ optional: boolean;
56
+ defaultValue?: string;
57
+ }
58
+ export interface ExtractedProperty {
59
+ name: string;
60
+ type: string;
61
+ description: string;
62
+ optional: boolean;
63
+ }
64
+ /** A rendered skill file ready to write */
65
+ export interface RenderedSkill {
66
+ /** File path relative to output dir */
67
+ filename: string;
68
+ /** Full SKILL.md content with frontmatter */
69
+ content: string;
70
+ /** Estimated token count */
71
+ tokens?: number;
72
+ }
73
+ /** Options controlling skill rendering */
74
+ export interface SkillRenderOptions {
75
+ /** Output directory for skill files (default: ".github/skills") */
76
+ outDir: string;
77
+ /** Include usage examples (default: true) */
78
+ includeExamples: boolean;
79
+ /** Include type signatures (default: true) */
80
+ includeSignatures: boolean;
81
+ /** Maximum approximate token budget per skill (default: 4000) */
82
+ maxTokens: number;
83
+ /** Custom name prefix */
84
+ namePrefix: string;
85
+ /** License to include in frontmatter (default: read from package.json) */
86
+ license: string;
87
+ }
88
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,uBAAuB;IACvB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,2CAA2C;IAC3C,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,qBAAqB;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,eAAe,EAAE,OAAO,CAAC;IACzB,8CAA8C;IAC9C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB"}
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,4 @@
1
+ import type { RenderedSkill, SkillRenderOptions } from "./types.js";
2
+ /** Write rendered skill files to disk */
3
+ export declare function writeSkills(skills: RenderedSkill[], options: Pick<SkillRenderOptions, "outDir">): void;
4
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEpE,yCAAyC;AACzC,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAC1C,IAAI,CAMN"}
package/dist/writer.js ADDED
@@ -0,0 +1,11 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ /** Write rendered skill files to disk */
4
+ export function writeSkills(skills, options) {
5
+ for (const skill of skills) {
6
+ const fullPath = join(options.outDir, skill.filename);
7
+ mkdirSync(dirname(fullPath), { recursive: true });
8
+ writeFileSync(fullPath, skill.content, "utf-8");
9
+ }
10
+ }
11
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../src/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,yCAAyC;AACzC,MAAM,UAAU,WAAW,CACzB,MAAuB,EACvB,OAA2C,EACrC;IACN,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;AAAA,CACF"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@to-skills/core",
3
+ "version": "0.2.0",
4
+ "description": "Shared types, SKILL.md renderer, and token budgeting for to-skills plugins",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "import": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ }
12
+ }
13
+ },
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "license": "MIT",
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/pradeepmouli/to-skills.git",
24
+ "directory": "packages/core"
25
+ },
26
+ "scripts": {
27
+ "build": "tsgo -p tsconfig.build.json",
28
+ "type-check": "tsgo --noEmit",
29
+ "clean": "rm -rf dist *.tsbuildinfo"
30
+ }
31
+ }