@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 +21 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/llms-txt.d.ts +20 -0
- package/dist/llms-txt.d.ts.map +1 -0
- package/dist/llms-txt.js +184 -0
- package/dist/llms-txt.js.map +1 -0
- package/dist/renderer.d.ts +6 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +272 -0
- package/dist/renderer.js.map +1 -0
- package/dist/tokens.d.ts +8 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +20 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/writer.d.ts +4 -0
- package/dist/writer.d.ts.map +1 -0
- package/dist/writer.js +11 -0
- package/dist/writer.js.map +1 -0
- package/package.json +31 -0
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.
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/llms-txt.js
ADDED
|
@@ -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":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,iDAAiD;AACjD,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,4EAA0E;AAC1E,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,EAAE;IACd,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;CACV,CAAC;AAoBF,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAC3B,MAAwB,EACxB,OAAuB,EACR;IACf,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,OAAO;QACL,OAAO;QACP,IAAI;QACJ,aAAa,EAAE,cAAc,CAAC,OAAO,CAAC;QACtC,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC;KACjC,CAAC;AAAA,CACH;AAED,8EAA8E;AAC9E,6BAA2B;AAC3B,8EAA8E;AAE9E,SAAS,aAAa,CAAC,MAAwB,EAAE,OAAuB,EAAU;IAChF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,KAAK,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC;YACD,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACzB;AAED,SAAS,qBAAqB,CAAC,KAAqB,EAAE,KAAe,EAAQ;IAC3E,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,YAAY;IACZ,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU;IACV,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,QAAQ;IACR,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;AAAA,CACF;AAED,8EAA8E;AAC9E,yCAAuC;AACvC,8EAA8E;AAE9E,SAAS,UAAU,CAAC,MAAwB,EAAE,OAAuB,EAAU;IAC7E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QAC9D,CAAC;QAED,YAAY;QACZ,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,IAAI,CAAC,CAAC;YACtD,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,QAAM,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC9C,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,UAAU;QACV,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;YAChC,IAAI,GAAG,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;YACxD,IAAI,GAAG,CAAC,oBAAoB,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,UAAQ,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;gBACpE,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC3B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,UAAQ,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,QAAQ;QACR,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,QAAQ;QACR,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;YACpD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,KAAK,UAAQ,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAA,CACzB;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,mBAAmB,CAAC,IAAY,EAAU;IACjD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;QAC9D,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,CACpD"}
|
|
@@ -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"}
|
package/dist/renderer.js
ADDED
|
@@ -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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"}
|
package/dist/tokens.d.ts
ADDED
|
@@ -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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/writer.d.ts
ADDED
|
@@ -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
|
+
}
|