@skillit/client 0.3.1 → 1.0.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/README.md +8 -1
- package/dist/commands/gen.d.ts +2 -1
- package/dist/commands/gen.d.ts.map +1 -1
- package/dist/commands/gen.js +71 -11
- package/dist/commands/gen.js.map +1 -1
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +65 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +155 -0
- package/dist/config.js.map +1 -0
- package/dist/detect-source.d.ts.map +1 -1
- package/dist/detect-source.js +12 -5
- package/dist/detect-source.js.map +1 -1
- package/dist/generate.d.ts +26 -2
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +90 -7
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/postinstall-template.d.ts +2 -0
- package/dist/postinstall-template.d.ts.map +1 -0
- package/dist/postinstall-template.js +69 -0
- package/dist/postinstall-template.js.map +1 -0
- package/package.json +7 -6
- package/skills/skillit-bootstrap/SKILL.md +1 -1
- package/skills/skillit-bootstrap/references/surface-routing.md +16 -5
package/README.md
CHANGED
|
@@ -19,6 +19,10 @@ when run without an agent.
|
|
|
19
19
|
| `skillit refine` | Headless audit → draft → review loop that writes routing annotations back into source. |
|
|
20
20
|
| `skillit mcp` | Extract / bundle skills from a live MCP server. |
|
|
21
21
|
|
|
22
|
+
`skillit init` now also scaffolds a `skillit.config.ts` file (if none exists),
|
|
23
|
+
so you can set a global `skillDir` and per-source (`cli` / `config` / `mcp` /
|
|
24
|
+
`typedoc`) overrides.
|
|
25
|
+
|
|
22
26
|
## Quick start
|
|
23
27
|
|
|
24
28
|
```bash
|
|
@@ -33,7 +37,10 @@ skillit audit --source cli --program ./dist/cli.js#program --json
|
|
|
33
37
|
```
|
|
34
38
|
|
|
35
39
|
For the agent-driven workflow (recommended), use the bundled
|
|
36
|
-
`/skillit-bootstrap` skill
|
|
40
|
+
`/skillit-bootstrap` skill. This package includes the skill files, and generated
|
|
41
|
+
CLI packages wired by `skillit init` install bundled skills to user roots via
|
|
42
|
+
postinstall: Claude (`~/.claude/skills`), Copilot (`~/.copilot/skills`), and
|
|
43
|
+
Codex (`~/.agents/skills`).
|
|
37
44
|
|
|
38
45
|
## License
|
|
39
46
|
|
package/dist/commands/gen.d.ts
CHANGED
|
@@ -14,7 +14,8 @@ export interface GenCommandOpts {
|
|
|
14
14
|
configType?: string;
|
|
15
15
|
mcp?: string;
|
|
16
16
|
server?: string;
|
|
17
|
-
out
|
|
17
|
+
out?: string;
|
|
18
|
+
invocation?: string;
|
|
18
19
|
}
|
|
19
20
|
export declare function buildGenCommand(deps?: GenDeps): Command;
|
|
20
21
|
//# sourceMappingURL=gen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,
|
|
1
|
+
{"version":3,"file":"gen.d.ts","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EAML,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC9B,MAAM,gBAAgB,CAAC;AAYxB,2DAA2D;AAC3D,MAAM,WAAW,OAAO;IACtB,gBAAgB,CAAC,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,mBAAmB,CAAC,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,oBAAoB,CAAC,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,gBAAgB,CAAC,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0BD,wBAAgB,eAAe,CAAC,IAAI,GAAE,OAAY,GAAG,OAAO,CAuI3D"}
|
package/dist/commands/gen.js
CHANGED
|
@@ -6,12 +6,13 @@ import { classifyRefineSources, detectInstalledSources, detectProjectNature } fr
|
|
|
6
6
|
import { generateCliSkill as defaultGenerateCliSkill, generateConfigSkill as defaultGenerateConfigSkill, generateMcpSkill as defaultGenerateMcpSkill, generateTypeDocSkill as defaultGenerateTypeDocSkill } from '../generate.js';
|
|
7
7
|
import { parseConfigTypeSpec, resolveRefineSource } from './refine.js';
|
|
8
8
|
import { resolveTypeDocEntry } from '../typedoc-entry.js';
|
|
9
|
-
|
|
9
|
+
import { SKILLIT_CONTENT_TYPES, loadSkillitConfig } from '../config.js';
|
|
10
|
+
/**
|
|
11
|
+
* Derive a collision-safe skill name from a package name.
|
|
12
|
+
* `@scope/name` → `scope-name`, `name` → `name`.
|
|
13
|
+
*/
|
|
10
14
|
function skillNameFrom(packageName) {
|
|
11
|
-
|
|
12
|
-
if (packageName.startsWith('@') && slash !== -1)
|
|
13
|
-
return packageName.slice(slash + 1);
|
|
14
|
-
return packageName;
|
|
15
|
+
return packageName.replace(/^@/, '').replace(/\//g, '-');
|
|
15
16
|
}
|
|
16
17
|
async function readPackageName(cwd) {
|
|
17
18
|
try {
|
|
@@ -35,14 +36,17 @@ export function buildGenCommand(deps = {}) {
|
|
|
35
36
|
.option('--config-type <file#export>', 'config type entry (config source)')
|
|
36
37
|
.option('--mcp <path>', 'path to mcp.json or MCP config file (mcp source)')
|
|
37
38
|
.option('--server <name>', 'MCP server entry to select (mcp source)')
|
|
38
|
-
.option('--out <dir>', 'output directory for the generated skill
|
|
39
|
+
.option('--out <dir>', 'output directory for the generated skill (defaults to skillit.config.ts skillDir or "skills")')
|
|
40
|
+
.option('--invocation <mode>', 'invocation mode for CLI command examples: npx (zero-install) or global (bare binary)')
|
|
39
41
|
.action(async (opts) => {
|
|
40
42
|
const cwd = process.cwd();
|
|
41
|
-
const
|
|
43
|
+
const loadedConfig = await loadSkillitConfig(cwd);
|
|
42
44
|
// Detect the project nature at most once (it can spawn the project's CLI
|
|
43
45
|
// bin). Only needed to auto-route when --source is omitted.
|
|
44
46
|
const nature = opts.source === undefined ? await detectProjectNature(cwd) : undefined;
|
|
45
47
|
if (opts.source === 'config') {
|
|
48
|
+
const plugin = resolvePluginOverrides(opts, loadedConfig.config, 'config');
|
|
49
|
+
const outDir = resolveOutDir(cwd, plugin.out);
|
|
46
50
|
if (opts.configType === undefined) {
|
|
47
51
|
throw new Error('The config source requires --config-type <file#export> (e.g. ./src/config.ts#MyConfig).');
|
|
48
52
|
}
|
|
@@ -55,7 +59,11 @@ export function buildGenCommand(deps = {}) {
|
|
|
55
59
|
await generateConfigSkill({
|
|
56
60
|
configFile: parsed.configFile,
|
|
57
61
|
typeName: parsed.typeName,
|
|
58
|
-
outDir
|
|
62
|
+
outDir,
|
|
63
|
+
...(plugin.maxTokens !== undefined ? { maxTokens: plugin.maxTokens } : {}),
|
|
64
|
+
...(plugin.contentTypeMaxTokens !== undefined
|
|
65
|
+
? { contentTypeMaxTokens: plugin.contentTypeMaxTokens }
|
|
66
|
+
: {})
|
|
59
67
|
});
|
|
60
68
|
return;
|
|
61
69
|
}
|
|
@@ -64,6 +72,8 @@ export function buildGenCommand(deps = {}) {
|
|
|
64
72
|
const isMcp = opts.source === 'mcp' ||
|
|
65
73
|
(opts.source === undefined && (opts.mcp !== undefined || nature === 'mcp'));
|
|
66
74
|
if (isMcp) {
|
|
75
|
+
const plugin = resolvePluginOverrides(opts, loadedConfig.config, 'mcp');
|
|
76
|
+
const outDir = resolveOutDir(cwd, plugin.out);
|
|
67
77
|
if (opts.mcp === undefined) {
|
|
68
78
|
throw new Error('The mcp source requires --mcp <path> (path to mcp.json or MCP config file).');
|
|
69
79
|
}
|
|
@@ -71,15 +81,30 @@ export function buildGenCommand(deps = {}) {
|
|
|
71
81
|
await generateMcpSkill({
|
|
72
82
|
mcpPath,
|
|
73
83
|
...(opts.server !== undefined ? { server: opts.server } : {}),
|
|
74
|
-
outDir
|
|
84
|
+
outDir,
|
|
85
|
+
...(plugin.maxTokens !== undefined ? { maxTokens: plugin.maxTokens } : {}),
|
|
86
|
+
...(plugin.contentTypeMaxTokens !== undefined
|
|
87
|
+
? { contentTypeMaxTokens: plugin.contentTypeMaxTokens }
|
|
88
|
+
: {})
|
|
75
89
|
});
|
|
76
90
|
return;
|
|
77
91
|
}
|
|
78
92
|
// typedoc: explicit, or auto-detected as a plain TS library.
|
|
79
93
|
const isTypedoc = opts.source === 'typedoc' || nature === 'typedoc';
|
|
80
94
|
if (isTypedoc) {
|
|
95
|
+
const plugin = resolvePluginOverrides(opts, loadedConfig.config, 'typedoc');
|
|
96
|
+
const outDir = resolveOutDir(cwd, plugin.out);
|
|
81
97
|
const { entryPoints, tsconfig } = resolveTypeDocEntry(cwd);
|
|
82
|
-
await generateTypeDocSkill({
|
|
98
|
+
await generateTypeDocSkill({
|
|
99
|
+
cwd,
|
|
100
|
+
entryPoints,
|
|
101
|
+
tsconfig,
|
|
102
|
+
outDir,
|
|
103
|
+
...(plugin.maxTokens !== undefined ? { maxTokens: plugin.maxTokens } : {}),
|
|
104
|
+
...(plugin.contentTypeMaxTokens !== undefined
|
|
105
|
+
? { contentTypeMaxTokens: plugin.contentTypeMaxTokens }
|
|
106
|
+
: {})
|
|
107
|
+
});
|
|
83
108
|
return;
|
|
84
109
|
}
|
|
85
110
|
// Resolve the cli source the same way refine does (handles auto-detection
|
|
@@ -90,6 +115,8 @@ export function buildGenCommand(deps = {}) {
|
|
|
90
115
|
if ('error' in resolution)
|
|
91
116
|
throw new Error(resolution.error);
|
|
92
117
|
if (resolution.kind === 'cli') {
|
|
118
|
+
const plugin = resolvePluginOverrides(opts, loadedConfig.config, 'cli');
|
|
119
|
+
const outDir = resolveOutDir(cwd, plugin.out);
|
|
93
120
|
const name = skillNameFrom(await readPackageName(cwd));
|
|
94
121
|
const nature = 'cli';
|
|
95
122
|
await generateCliSkill({
|
|
@@ -97,7 +124,14 @@ export function buildGenCommand(deps = {}) {
|
|
|
97
124
|
nature,
|
|
98
125
|
name,
|
|
99
126
|
outDir,
|
|
100
|
-
...(
|
|
127
|
+
...(plugin.maxTokens !== undefined ? { maxTokens: plugin.maxTokens } : {}),
|
|
128
|
+
...(plugin.contentTypeMaxTokens !== undefined
|
|
129
|
+
? { contentTypeMaxTokens: plugin.contentTypeMaxTokens }
|
|
130
|
+
: {}),
|
|
131
|
+
...(opts.program !== undefined ? { program: opts.program } : {}),
|
|
132
|
+
...(opts.invocation !== undefined
|
|
133
|
+
? { invocationMode: opts.invocation }
|
|
134
|
+
: {})
|
|
101
135
|
});
|
|
102
136
|
return;
|
|
103
137
|
}
|
|
@@ -105,4 +139,30 @@ export function buildGenCommand(deps = {}) {
|
|
|
105
139
|
throw new Error(`skillit gen does not yet support the ${resolution.kind} source; cli and config are supported in this release.`);
|
|
106
140
|
});
|
|
107
141
|
}
|
|
142
|
+
function resolvePluginOverrides(opts, config, pluginName) {
|
|
143
|
+
const plugin = config.plugins?.[pluginName];
|
|
144
|
+
const out = opts.out ?? plugin?.skillDir ?? config.skillDir ?? 'skills';
|
|
145
|
+
const contentTypeMaxTokens = extractContentTypeMaxTokens(plugin);
|
|
146
|
+
return {
|
|
147
|
+
out,
|
|
148
|
+
...(plugin?.maxTokens !== undefined ? { maxTokens: plugin.maxTokens } : {}),
|
|
149
|
+
...(contentTypeMaxTokens && Object.keys(contentTypeMaxTokens).length > 0
|
|
150
|
+
? { contentTypeMaxTokens }
|
|
151
|
+
: {})
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function resolveOutDir(cwd, out) {
|
|
155
|
+
return isAbsolute(out) ? out : join(cwd, out);
|
|
156
|
+
}
|
|
157
|
+
function extractContentTypeMaxTokens(plugin) {
|
|
158
|
+
if (!plugin?.contentTypes)
|
|
159
|
+
return undefined;
|
|
160
|
+
const contentTypeMaxTokens = {};
|
|
161
|
+
for (const contentType of SKILLIT_CONTENT_TYPES) {
|
|
162
|
+
const value = plugin.contentTypes[contentType]?.maxTokens;
|
|
163
|
+
if (typeof value === 'number')
|
|
164
|
+
contentTypeMaxTokens[contentType] = value;
|
|
165
|
+
}
|
|
166
|
+
return Object.keys(contentTypeMaxTokens).length > 0 ? contentTypeMaxTokens : undefined;
|
|
167
|
+
}
|
|
108
168
|
//# sourceMappingURL=gen.js.map
|
package/dist/commands/gen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen.js","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,IAAI,uBAAuB,EAC3C,mBAAmB,IAAI,0BAA0B,EACjD,gBAAgB,IAAI,uBAAuB,EAC3C,oBAAoB,IAAI,2BAA2B,
|
|
1
|
+
{"version":3,"file":"gen.js","sourceRoot":"","sources":["../../src/commands/gen.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -8,6 +8,13 @@ type PackageManager = 'pnpm' | 'yarn' | 'npm';
|
|
|
8
8
|
export interface InitDeps {
|
|
9
9
|
/** Install `pkg` as a dev dependency in `cwd` using package manager `pm`. */
|
|
10
10
|
runInstall?(pkg: string, pm: PackageManager, cwd: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Write `skillit-postinstall.cjs` and wire `scripts.postinstall` in
|
|
13
|
+
* `package.json`. Skips (with a warning) if `postinstall` is already set.
|
|
14
|
+
*/
|
|
15
|
+
wirePostinstall?(cwd: string): Promise<void>;
|
|
16
|
+
/** Write a default `skillit.config.ts` if no skillit config exists yet. */
|
|
17
|
+
ensureSkillitConfig?(cwd: string): Promise<void>;
|
|
11
18
|
}
|
|
12
19
|
export declare function buildInitCommand(deps?: InitDeps): Command;
|
|
13
20
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,6EAA6E;IAC7E,UAAU,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE;;;OAGG;IACH,eAAe,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,2EAA2E;IAC3E,mBAAmB,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AA4FD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,QAAa,GAAG,OAAO,CAqE7D"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// packages/client/src/commands/init.ts
|
|
2
2
|
import { spawn } from 'node:child_process';
|
|
3
|
+
import { access, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { constants } from 'node:fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
3
6
|
import { Command } from 'commander';
|
|
4
7
|
import { detectPackageManager, detectProjectNature } from '../detect-source.js';
|
|
8
|
+
import { generatePostinstallScript } from '../postinstall-template.js';
|
|
9
|
+
import { skillitConfigCandidates } from '../config.js';
|
|
5
10
|
const VALID_SOURCES = ['cli', 'mcp', 'typedoc'];
|
|
6
11
|
/** Map a project nature to the `@skillit/*` package that handles it. */
|
|
7
12
|
function natureToPackage(nature) {
|
|
@@ -19,6 +24,55 @@ function addDevCommand(pm, pkg) {
|
|
|
19
24
|
return `yarn add -D ${pkg}`;
|
|
20
25
|
return `npm install -D ${pkg}`;
|
|
21
26
|
}
|
|
27
|
+
async function defaultWirePostinstall(cwd) {
|
|
28
|
+
const pkgPath = join(cwd, 'package.json');
|
|
29
|
+
const raw = await readFile(pkgPath, 'utf8');
|
|
30
|
+
const pkg = JSON.parse(raw);
|
|
31
|
+
if (pkg.scripts?.['postinstall']) {
|
|
32
|
+
console.warn(`Skipping postinstall wiring: scripts.postinstall is already set to "${pkg.scripts['postinstall']}". Add "node ./skillit-postinstall.cjs" to it manually if needed.`);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
await writeFile(join(cwd, 'skillit-postinstall.cjs'), generatePostinstallScript(), 'utf8');
|
|
36
|
+
if (!pkg.scripts)
|
|
37
|
+
pkg.scripts = {};
|
|
38
|
+
pkg.scripts['postinstall'] = 'node ./skillit-postinstall.cjs';
|
|
39
|
+
await writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf8');
|
|
40
|
+
}
|
|
41
|
+
async function defaultEnsureSkillitConfig(cwd) {
|
|
42
|
+
const candidates = skillitConfigCandidates().map((name) => join(cwd, name));
|
|
43
|
+
for (const candidate of candidates) {
|
|
44
|
+
if (await exists(candidate))
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const configPath = join(cwd, 'skillit.config.ts');
|
|
48
|
+
await writeFile(configPath, defaultSkillitConfigTemplate(), 'utf8');
|
|
49
|
+
}
|
|
50
|
+
async function exists(path) {
|
|
51
|
+
try {
|
|
52
|
+
await access(path, constants.F_OK);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function defaultSkillitConfigTemplate() {
|
|
60
|
+
return `import { defineConfig } from '@skillit/client';
|
|
61
|
+
|
|
62
|
+
export default defineConfig({
|
|
63
|
+
// skillDir: 'skills',
|
|
64
|
+
// plugins: {
|
|
65
|
+
// cli: {
|
|
66
|
+
// // skillDir: 'skills',
|
|
67
|
+
// // maxTokens: 4000,
|
|
68
|
+
// // contentTypes: {
|
|
69
|
+
// // commands: { maxTokens: 5000 }
|
|
70
|
+
// // }
|
|
71
|
+
// }
|
|
72
|
+
// }
|
|
73
|
+
});
|
|
74
|
+
`;
|
|
75
|
+
}
|
|
22
76
|
/** Default install: spawn the package manager's add-dev command, cwd-scoped. */
|
|
23
77
|
function defaultRunInstall(pkg, pm, cwd) {
|
|
24
78
|
const command = addDevCommand(pm, pkg);
|
|
@@ -36,6 +90,8 @@ function defaultRunInstall(pkg, pm, cwd) {
|
|
|
36
90
|
}
|
|
37
91
|
export function buildInitCommand(deps = {}) {
|
|
38
92
|
const runInstall = deps.runInstall ?? defaultRunInstall;
|
|
93
|
+
const wirePostinstall = deps.wirePostinstall ?? defaultWirePostinstall;
|
|
94
|
+
const ensureSkillitConfig = deps.ensureSkillitConfig ?? defaultEnsureSkillitConfig;
|
|
39
95
|
return new Command('init')
|
|
40
96
|
.description('Detect the project and install the right @skillit package (then run `skillit gen`)')
|
|
41
97
|
.option('--source <kind>', 'cli | mcp | typedoc | config (auto-detected if omitted)')
|
|
@@ -49,6 +105,7 @@ export function buildInitCommand(deps = {}) {
|
|
|
49
105
|
throw new Error('The config source requires --config-type <file#export> (e.g. ./src/config.ts#MyConfig).');
|
|
50
106
|
}
|
|
51
107
|
console.log(`Config source needs no install. Generate the skill with:\n skillit gen --source config --config-type ${opts.configType}`);
|
|
108
|
+
await ensureSkillitConfig(cwd);
|
|
52
109
|
return;
|
|
53
110
|
}
|
|
54
111
|
// Resolve nature: explicit --source wins, else detect.
|
|
@@ -73,18 +130,20 @@ export function buildInitCommand(deps = {}) {
|
|
|
73
130
|
const reason = error instanceof Error ? error.message : String(error);
|
|
74
131
|
throw new Error(`Install failed (${reason}). Run it manually:\n ${command}`);
|
|
75
132
|
}
|
|
76
|
-
// Source-aware next step:
|
|
77
|
-
//
|
|
78
|
-
// support for those lands in a later phase). Don't point users at a
|
|
79
|
-
// command that would immediately error for their source.
|
|
133
|
+
// Source-aware next step: point users at the command path that works for
|
|
134
|
+
// their selected source.
|
|
80
135
|
if (nature === 'cli') {
|
|
136
|
+
await wirePostinstall(cwd);
|
|
137
|
+
await ensureSkillitConfig(cwd);
|
|
81
138
|
console.log(`Installed ${pkg}. Generate the skill with:\n skillit gen --source cli`);
|
|
82
139
|
}
|
|
83
140
|
else if (nature === 'mcp') {
|
|
84
|
-
|
|
141
|
+
await ensureSkillitConfig(cwd);
|
|
142
|
+
console.log(`Installed ${pkg}. Generate the skill with:\n skillit gen --source mcp --mcp <path>`);
|
|
85
143
|
}
|
|
86
144
|
else {
|
|
87
|
-
|
|
145
|
+
await ensureSkillitConfig(cwd);
|
|
146
|
+
console.log(`Installed ${pkg}. Generate the skill with:\n skillit gen --source typedoc`);
|
|
88
147
|
}
|
|
89
148
|
});
|
|
90
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EAEpB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type SkillitPluginName = 'cli' | 'config' | 'mcp' | 'typedoc';
|
|
2
|
+
export declare const SKILLIT_CONTENT_TYPES: readonly ['skill', 'functions', 'classes', 'types', 'variables', 'commands', 'config', 'docs', 'resources', 'prompts', 'examples'];
|
|
3
|
+
export type SkillitContentType = (typeof SKILLIT_CONTENT_TYPES)[number];
|
|
4
|
+
export interface SkillitContentTypeOverride {
|
|
5
|
+
maxTokens?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface SkillitPluginConfig {
|
|
8
|
+
skillDir?: string;
|
|
9
|
+
maxTokens?: number;
|
|
10
|
+
contentTypes?: Partial<Record<SkillitContentType, SkillitContentTypeOverride>>;
|
|
11
|
+
}
|
|
12
|
+
export interface SkillitConfig {
|
|
13
|
+
skillDir?: string;
|
|
14
|
+
plugins?: Partial<Record<SkillitPluginName, SkillitPluginConfig>>;
|
|
15
|
+
}
|
|
16
|
+
export interface LoadedSkillitConfig {
|
|
17
|
+
path?: string;
|
|
18
|
+
config: SkillitConfig;
|
|
19
|
+
}
|
|
20
|
+
export declare function skillitConfigCandidates(): readonly string[];
|
|
21
|
+
export declare function defineConfig(config: SkillitConfig): SkillitConfig;
|
|
22
|
+
/** @deprecated Use {@link defineConfig} instead. */
|
|
23
|
+
export declare function defineSkillitConfig(config: SkillitConfig): SkillitConfig;
|
|
24
|
+
export declare function loadSkillitConfig(cwd: string): Promise<LoadedSkillitConfig>;
|
|
25
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAErE,eAAO,MAAM,qBAAqB,YAChC,OAAO,EACP,WAAW,EACX,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,EACT,UAAU,CACF,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;CACvB;AAUD,wBAAgB,uBAAuB,IAAI,SAAS,MAAM,EAAE,CAE3D;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAEjE;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAExE;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAUjF"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { access, readFile, unlink, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { constants } from 'node:fs';
|
|
3
|
+
import { basename, dirname, join } from 'node:path';
|
|
4
|
+
import { pathToFileURL } from 'node:url';
|
|
5
|
+
export const SKILLIT_CONTENT_TYPES = [
|
|
6
|
+
'skill',
|
|
7
|
+
'functions',
|
|
8
|
+
'classes',
|
|
9
|
+
'types',
|
|
10
|
+
'variables',
|
|
11
|
+
'commands',
|
|
12
|
+
'config',
|
|
13
|
+
'docs',
|
|
14
|
+
'resources',
|
|
15
|
+
'prompts',
|
|
16
|
+
'examples'
|
|
17
|
+
];
|
|
18
|
+
const CONFIG_CANDIDATES = [
|
|
19
|
+
'skillit.config.ts',
|
|
20
|
+
'skillit.config.mts',
|
|
21
|
+
'skillit.config.js',
|
|
22
|
+
'skillit.config.mjs',
|
|
23
|
+
'skillit.config.cjs'
|
|
24
|
+
];
|
|
25
|
+
export function skillitConfigCandidates() {
|
|
26
|
+
return CONFIG_CANDIDATES;
|
|
27
|
+
}
|
|
28
|
+
export function defineConfig(config) {
|
|
29
|
+
return config;
|
|
30
|
+
}
|
|
31
|
+
/** @deprecated Use {@link defineConfig} instead. */
|
|
32
|
+
export function defineSkillitConfig(config) {
|
|
33
|
+
return defineConfig(config);
|
|
34
|
+
}
|
|
35
|
+
export async function loadSkillitConfig(cwd) {
|
|
36
|
+
const path = await findFirstConfigPath(cwd);
|
|
37
|
+
if (!path)
|
|
38
|
+
return { config: {} };
|
|
39
|
+
const rawConfig = path.endsWith('.ts') || path.endsWith('.mts')
|
|
40
|
+
? await loadTypeScriptLikeConfig(path)
|
|
41
|
+
: await loadJavaScriptConfig(path);
|
|
42
|
+
return { path, config: normalizeConfig(rawConfig) };
|
|
43
|
+
}
|
|
44
|
+
async function findFirstConfigPath(cwd) {
|
|
45
|
+
for (const name of CONFIG_CANDIDATES) {
|
|
46
|
+
const candidate = join(cwd, name);
|
|
47
|
+
if (await exists(candidate))
|
|
48
|
+
return candidate;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
async function exists(path) {
|
|
53
|
+
try {
|
|
54
|
+
await access(path, constants.F_OK);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function loadJavaScriptConfig(path) {
|
|
62
|
+
const mod = (await import(pathToFileURL(path).href));
|
|
63
|
+
return mod.default ?? {};
|
|
64
|
+
}
|
|
65
|
+
async function loadTypeScriptLikeConfig(path) {
|
|
66
|
+
const source = await readFile(path, 'utf8');
|
|
67
|
+
let ts;
|
|
68
|
+
try {
|
|
69
|
+
ts = await import('typescript');
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
73
|
+
throw new Error(`Loading ${path} requires the "typescript" package. Install it and try again. (${reason})`);
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const transpiled = ts.transpileModule(source, {
|
|
77
|
+
fileName: path,
|
|
78
|
+
compilerOptions: {
|
|
79
|
+
module: ts.ModuleKind.ESNext,
|
|
80
|
+
target: ts.ScriptTarget.ES2022
|
|
81
|
+
}
|
|
82
|
+
}).outputText;
|
|
83
|
+
const helperName = `.skillit.config.helper-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}.mjs`;
|
|
84
|
+
const helperPath = join(dirname(path), helperName);
|
|
85
|
+
const runtimePath = join(dirname(path), `.skillit.config.runtime-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}.mjs`);
|
|
86
|
+
const helperSpecifier = `./${basename(helperPath)}`;
|
|
87
|
+
const rewritten = transpiled
|
|
88
|
+
.replaceAll("'@skillit/client'", `'${helperSpecifier}'`)
|
|
89
|
+
.replaceAll('"@skillit/client"', `"${helperSpecifier}"`);
|
|
90
|
+
await writeFile(helperPath, `export function defineConfig(config) { return config; }\nexport const defineSkillitConfig = defineConfig;\n`, 'utf8');
|
|
91
|
+
await writeFile(runtimePath, rewritten, 'utf8');
|
|
92
|
+
try {
|
|
93
|
+
const mod = (await import(pathToFileURL(runtimePath).href));
|
|
94
|
+
return mod.default ?? {};
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
await unlink(helperPath).catch(() => { });
|
|
98
|
+
await unlink(runtimePath).catch(() => { });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
103
|
+
throw new Error(`Failed to load ${path}: ${reason}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function normalizeConfig(raw) {
|
|
107
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
108
|
+
throw new Error('skillit config must export an object.');
|
|
109
|
+
}
|
|
110
|
+
const input = raw;
|
|
111
|
+
const output = {};
|
|
112
|
+
if (typeof input['skillDir'] === 'string')
|
|
113
|
+
output.skillDir = input['skillDir'];
|
|
114
|
+
if (typeof input['plugins'] === 'object' &&
|
|
115
|
+
input['plugins'] !== null &&
|
|
116
|
+
!Array.isArray(input['plugins'])) {
|
|
117
|
+
const plugins = input['plugins'];
|
|
118
|
+
const normalizedPlugins = {};
|
|
119
|
+
for (const key of ['cli', 'config', 'mcp', 'typedoc']) {
|
|
120
|
+
const value = plugins[key];
|
|
121
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
122
|
+
continue;
|
|
123
|
+
const pluginInput = value;
|
|
124
|
+
const plugin = {};
|
|
125
|
+
if (typeof pluginInput['skillDir'] === 'string')
|
|
126
|
+
plugin.skillDir = pluginInput['skillDir'];
|
|
127
|
+
if (typeof pluginInput['maxTokens'] === 'number' &&
|
|
128
|
+
Number.isFinite(pluginInput['maxTokens'])) {
|
|
129
|
+
plugin.maxTokens = pluginInput['maxTokens'];
|
|
130
|
+
}
|
|
131
|
+
if (typeof pluginInput['contentTypes'] === 'object' &&
|
|
132
|
+
pluginInput['contentTypes'] !== null &&
|
|
133
|
+
!Array.isArray(pluginInput['contentTypes'])) {
|
|
134
|
+
const contentTypesInput = pluginInput['contentTypes'];
|
|
135
|
+
const contentTypes = {};
|
|
136
|
+
for (const contentType of SKILLIT_CONTENT_TYPES) {
|
|
137
|
+
const override = contentTypesInput[contentType];
|
|
138
|
+
if (typeof override !== 'object' || override === null || Array.isArray(override))
|
|
139
|
+
continue;
|
|
140
|
+
const parsed = override;
|
|
141
|
+
if (typeof parsed['maxTokens'] === 'number' && Number.isFinite(parsed['maxTokens'])) {
|
|
142
|
+
contentTypes[contentType] = { maxTokens: parsed['maxTokens'] };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (Object.keys(contentTypes).length > 0)
|
|
146
|
+
plugin.contentTypes = contentTypes;
|
|
147
|
+
}
|
|
148
|
+
normalizedPlugins[key] = plugin;
|
|
149
|
+
}
|
|
150
|
+
if (Object.keys(normalizedPlugins).length > 0)
|
|
151
|
+
output.plugins = normalizedPlugins;
|
|
152
|
+
}
|
|
153
|
+
return output;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-source.d.ts","sourceRoot":"","sources":["../src/detect-source.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,WAAW,GAAG,MAAM,CAAC;AA+B3E;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CASrF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,GAAG,oBAAoB,CAIhG;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAEnF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMhF;AAgBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"detect-source.d.ts","sourceRoot":"","sources":["../src/detect-source.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,WAAW,GAAG,MAAM,CAAC;AA+B3E;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CASrF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,GAAG,oBAAoB,CAIhG;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAEnF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMhF;AAgBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAUzE"}
|
package/dist/detect-source.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
|
-
import { join } from 'node:path';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
4
|
import { loadProgram } from '@skillit/cli';
|
|
5
5
|
/**
|
|
6
6
|
* Read the union of `dependencies` + `devDependencies` from `<cwd>/package.json`.
|
|
@@ -115,10 +115,17 @@ async function hasLoadableProgram(cwd) {
|
|
|
115
115
|
* `pnpm-lock.yaml` → `'pnpm'`, `yarn.lock` → `'yarn'`, else `'npm'`.
|
|
116
116
|
*/
|
|
117
117
|
export function detectPackageManager(cwd) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
let dir = cwd;
|
|
119
|
+
while (true) {
|
|
120
|
+
if (existsSync(join(dir, 'pnpm-lock.yaml')))
|
|
121
|
+
return 'pnpm';
|
|
122
|
+
if (existsSync(join(dir, 'yarn.lock')))
|
|
123
|
+
return 'yarn';
|
|
124
|
+
const parent = dirname(dir);
|
|
125
|
+
if (parent === dir)
|
|
126
|
+
break; // filesystem root
|
|
127
|
+
dir = parent;
|
|
128
|
+
}
|
|
122
129
|
return 'npm';
|
|
123
130
|
}
|
|
124
131
|
//# sourceMappingURL=detect-source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-source.js","sourceRoot":"","sources":["../src/detect-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"detect-source.js","sourceRoot":"","sources":["../src/detect-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAK3C;;;;GAIG;AACH,KAAK,UAAU,QAAQ,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACvD,OAAO;YACL,GAAI,GAAG,CAAC,cAAc,CAAwC;YAC9D,GAAI,GAAG,CAAC,iBAAiB,CAAwC;SAClE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,GAAG,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,GAAG,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,GAAG,KAAK,wBAAwB,IAAI,GAAG,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IACrF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+DAA+D;AAC/D,MAAM,YAAY,GAAgC,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAE5E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAAW;IACtD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAoC;IACxE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;IAC7C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,OAAO,qBAAqB,CAAC,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW;IACnD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,WAAW,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,MAAM,kBAAkB,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,2BAA2B,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,MAAM,CAAC;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,CAAC,kBAAkB;QAC7C,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/generate.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { type CliInvocationMode } from '@skillit/cli';
|
|
2
|
+
import { type SkillitContentType } from './config.js';
|
|
3
|
+
export type { CliInvocationMode } from '@skillit/cli';
|
|
1
4
|
import type { RefineSourceKind } from './detect-source.js';
|
|
2
5
|
/** Options for CLI-path skill generation. */
|
|
3
6
|
export interface GenerateSkillOpts {
|
|
@@ -5,12 +8,21 @@ export interface GenerateSkillOpts {
|
|
|
5
8
|
cwd: string;
|
|
6
9
|
/** Resolved project nature. */
|
|
7
10
|
nature: RefineSourceKind;
|
|
8
|
-
/** Skill name
|
|
11
|
+
/** Skill name derived from the consumer package name (`@scope/name` → `scope-name`). */
|
|
9
12
|
name: string;
|
|
10
13
|
/** Absolute output directory (`<cwd>/<out>`). */
|
|
11
14
|
outDir: string;
|
|
12
15
|
/** `--program <file#export>` entry, if provided. */
|
|
13
16
|
program?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Override the invocation mode for command examples.
|
|
19
|
+
* Defaults to `npx` for public packages with a `bin` field, `global` otherwise.
|
|
20
|
+
*/
|
|
21
|
+
invocationMode?: CliInvocationMode;
|
|
22
|
+
/** Optional render token cap override. */
|
|
23
|
+
maxTokens?: number;
|
|
24
|
+
/** Optional per-content-type reference token overrides. */
|
|
25
|
+
contentTypeMaxTokens?: Partial<Record<SkillitContentType, number>>;
|
|
14
26
|
}
|
|
15
27
|
/** Options for config-path skill generation. */
|
|
16
28
|
export interface GenerateConfigSkillOpts {
|
|
@@ -26,6 +38,10 @@ export interface GenerateConfigSkillOpts {
|
|
|
26
38
|
name?: string;
|
|
27
39
|
/** Absolute output directory (`<cwd>/<out>`). */
|
|
28
40
|
outDir: string;
|
|
41
|
+
/** Optional render token cap override. */
|
|
42
|
+
maxTokens?: number;
|
|
43
|
+
/** Optional per-content-type reference token overrides. */
|
|
44
|
+
contentTypeMaxTokens?: Partial<Record<SkillitContentType, number>>;
|
|
29
45
|
}
|
|
30
46
|
/** Options for typedoc-path skill generation. */
|
|
31
47
|
export interface GenerateTypeDocSkillOpts {
|
|
@@ -37,6 +53,10 @@ export interface GenerateTypeDocSkillOpts {
|
|
|
37
53
|
tsconfig: string;
|
|
38
54
|
/** Absolute output directory. */
|
|
39
55
|
outDir: string;
|
|
56
|
+
/** Optional render token cap override. */
|
|
57
|
+
maxTokens?: number;
|
|
58
|
+
/** Optional per-content-type reference token overrides. */
|
|
59
|
+
contentTypeMaxTokens?: Partial<Record<SkillitContentType, number>>;
|
|
40
60
|
}
|
|
41
61
|
/**
|
|
42
62
|
* TypeDoc-path skill generation — delegates to the plugin pipeline.
|
|
@@ -54,13 +74,17 @@ export interface GenerateMcpSkillOpts {
|
|
|
54
74
|
server?: string;
|
|
55
75
|
/** Absolute output directory. */
|
|
56
76
|
outDir: string;
|
|
77
|
+
/** Optional render token cap override. */
|
|
78
|
+
maxTokens?: number;
|
|
79
|
+
/** Optional per-content-type reference token overrides. */
|
|
80
|
+
contentTypeMaxTokens?: Partial<Record<SkillitContentType, number>>;
|
|
57
81
|
}
|
|
58
82
|
/**
|
|
59
83
|
* MCP-path skill generation — lazily imports `@skillit/mcp` so the CLI does not
|
|
60
84
|
* load the MCP stack (and its SDK) at startup for non-mcp commands.
|
|
61
85
|
*/
|
|
62
86
|
export declare function generateMcpSkill(opts: GenerateMcpSkillOpts): Promise<void>;
|
|
63
|
-
/** CLI-path skill generation: loadProgram → extractCliSkill → writeCliSkill. */
|
|
87
|
+
/** CLI-path skill generation: loadProgram → extractCliSkill → applyNpxMode → writeCliSkill. */
|
|
64
88
|
export declare function generateCliSkill(opts: GenerateSkillOpts): Promise<void>;
|
|
65
89
|
/** Config-path skill generation: extract the surface → render → write. */
|
|
66
90
|
export declare function generateConfigSkill(opts: GenerateConfigSkillOpts): Promise<void>;
|
package/dist/generate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAYtB,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,wFAAwF;IACxF,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;CACpE;AAED,gDAAgD;AAChD,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;CACpE;AAED,iDAAiD;AACjD,MAAM,WAAW,wBAAwB;IACvC,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;CACpE;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxF;AAED,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;CACpE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAShF;AAED,+FAA+F;AAC/F,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7E;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBtF"}
|
package/dist/generate.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// packages/client/src/generate.ts
|
|
2
|
-
import { extractCliSkill, loadProgram, writeCliSkill } from '@skillit/cli';
|
|
3
|
-
import { ConfigRefineSource, renderSkills, writeSkills } from '@skillit/core';
|
|
2
|
+
import { applyNpxMode, extractCliSkill, loadProgram, writeCliSkill } from '@skillit/cli';
|
|
3
|
+
import { attachDepSkills, ConfigRefineSource, findNearestPackageDir, readPackageMetadata, renderSkills, truncateToTokenBudget, writeSkills } from '@skillit/core';
|
|
4
|
+
import { readdir, readFile, writeFile } from 'node:fs/promises';
|
|
5
|
+
import { dirname, join, relative } from 'node:path';
|
|
6
|
+
import { SKILLIT_CONTENT_TYPES } from './config.js';
|
|
4
7
|
/**
|
|
5
8
|
* TypeDoc-path skill generation — delegates to the plugin pipeline.
|
|
6
9
|
*
|
|
@@ -14,8 +17,10 @@ export async function generateTypeDocSkill(opts) {
|
|
|
14
17
|
entryPoints: opts.entryPoints,
|
|
15
18
|
tsconfig: opts.tsconfig,
|
|
16
19
|
cwd: opts.cwd,
|
|
17
|
-
outDir: opts.outDir
|
|
20
|
+
outDir: opts.outDir,
|
|
21
|
+
...(opts.maxTokens !== undefined ? { maxTokens: opts.maxTokens } : {})
|
|
18
22
|
});
|
|
23
|
+
await applyContentTypeTokenOverrides(opts.outDir, opts.contentTypeMaxTokens);
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
21
26
|
* MCP-path skill generation — lazily imports `@skillit/mcp` so the CLI does not
|
|
@@ -26,14 +31,25 @@ export async function generateMcpSkill(opts) {
|
|
|
26
31
|
await run({
|
|
27
32
|
mcpPath: opts.mcpPath,
|
|
28
33
|
...(opts.server !== undefined ? { serverName: opts.server } : {}),
|
|
29
|
-
outDir: opts.outDir
|
|
34
|
+
outDir: opts.outDir,
|
|
35
|
+
...(opts.maxTokens !== undefined ? { maxTokens: opts.maxTokens } : {})
|
|
30
36
|
});
|
|
37
|
+
await applyContentTypeTokenOverrides(opts.outDir, opts.contentTypeMaxTokens);
|
|
31
38
|
}
|
|
32
|
-
/** CLI-path skill generation: loadProgram → extractCliSkill → writeCliSkill. */
|
|
39
|
+
/** CLI-path skill generation: loadProgram → extractCliSkill → applyNpxMode → writeCliSkill. */
|
|
33
40
|
export async function generateCliSkill(opts) {
|
|
34
41
|
const program = await loadProgram({ program: opts.program, cwd: opts.cwd });
|
|
35
42
|
const skill = await extractCliSkill({ program, metadata: { name: opts.name } });
|
|
36
|
-
|
|
43
|
+
const pkgDir = await findNearestPackageDir(opts.cwd);
|
|
44
|
+
const meta = pkgDir ? await readPackageMetadata(pkgDir) : {};
|
|
45
|
+
applyNpxMode(skill, meta, opts.invocationMode);
|
|
46
|
+
if (pkgDir)
|
|
47
|
+
attachDepSkills(skill, pkgDir);
|
|
48
|
+
writeCliSkill(skill, {
|
|
49
|
+
outDir: opts.outDir,
|
|
50
|
+
...(opts.maxTokens !== undefined ? { maxTokens: opts.maxTokens } : {})
|
|
51
|
+
});
|
|
52
|
+
await applyContentTypeTokenOverrides(opts.outDir, opts.contentTypeMaxTokens);
|
|
37
53
|
}
|
|
38
54
|
/** Config-path skill generation: extract the surface → render → write. */
|
|
39
55
|
export async function generateConfigSkill(opts) {
|
|
@@ -47,9 +63,76 @@ export async function generateConfigSkill(opts) {
|
|
|
47
63
|
// surface, not the package blurb (which is about the whole package).
|
|
48
64
|
description: `Configuration options for ${opts.typeName}.`
|
|
49
65
|
}).extract();
|
|
66
|
+
const pkgDir = await findNearestPackageDir(dirname(opts.configFile));
|
|
67
|
+
if (pkgDir)
|
|
68
|
+
attachDepSkills(skill, pkgDir);
|
|
50
69
|
// Config skills are content-rich (per-option routing + example); raise the
|
|
51
70
|
// per-reference token budget so a multi-option surface isn't truncated.
|
|
52
|
-
const rendered = renderSkills([skill], {
|
|
71
|
+
const rendered = renderSkills([skill], {
|
|
72
|
+
outDir: opts.outDir,
|
|
73
|
+
maxTokens: opts.maxTokens ?? 16000
|
|
74
|
+
});
|
|
53
75
|
writeSkills(rendered, { outDir: opts.outDir });
|
|
76
|
+
await applyContentTypeTokenOverrides(opts.outDir, opts.contentTypeMaxTokens);
|
|
77
|
+
}
|
|
78
|
+
async function applyContentTypeTokenOverrides(outDir, contentTypeMaxTokens) {
|
|
79
|
+
if (!contentTypeMaxTokens || Object.keys(contentTypeMaxTokens).length === 0)
|
|
80
|
+
return;
|
|
81
|
+
const files = await collectMarkdownFiles(outDir);
|
|
82
|
+
for (const file of files) {
|
|
83
|
+
const contentType = contentTypeFromFile(file, outDir);
|
|
84
|
+
if (!contentType)
|
|
85
|
+
continue;
|
|
86
|
+
const maxTokens = contentTypeMaxTokens[contentType];
|
|
87
|
+
if (maxTokens === undefined || maxTokens < 1)
|
|
88
|
+
continue;
|
|
89
|
+
const raw = await readFile(file, 'utf8');
|
|
90
|
+
const next = truncateToTokenBudget(raw, maxTokens);
|
|
91
|
+
if (next !== raw) {
|
|
92
|
+
await writeFile(file, next, 'utf8');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function collectMarkdownFiles(root) {
|
|
97
|
+
const out = [];
|
|
98
|
+
await walk(root, out);
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
async function walk(dir, out) {
|
|
102
|
+
let entries;
|
|
103
|
+
try {
|
|
104
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
for (const entry of entries) {
|
|
110
|
+
const path = join(dir, entry.name);
|
|
111
|
+
if (entry.isDirectory()) {
|
|
112
|
+
await walk(path, out);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (entry.isFile() && entry.name.endsWith('.md'))
|
|
116
|
+
out.push(path);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function contentTypeFromFile(file, outDir) {
|
|
120
|
+
const normalized = relative(outDir, file).replaceAll('\\', '/');
|
|
121
|
+
const segments = normalized.split('/');
|
|
122
|
+
if (segments.length < 2)
|
|
123
|
+
return undefined;
|
|
124
|
+
if (segments[segments.length - 1] === 'SKILL.md')
|
|
125
|
+
return 'skill';
|
|
126
|
+
if (segments[1] !== 'references')
|
|
127
|
+
return undefined;
|
|
128
|
+
const bucket = segments[2];
|
|
129
|
+
if (bucket === 'docs')
|
|
130
|
+
return 'docs';
|
|
131
|
+
if (isSkillitContentType(bucket))
|
|
132
|
+
return bucket;
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
function isSkillitContentType(value) {
|
|
136
|
+
return typeof value === 'string' && SKILLIT_CONTENT_TYPES.includes(value);
|
|
54
137
|
}
|
|
55
138
|
//# sourceMappingURL=generate.js.map
|
package/dist/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { AnthropicModelClient } from './model/anthropic.js';
|
|
2
2
|
export { parseReviewVerdict } from './model/anthropic.js';
|
|
3
|
+
export { SKILLIT_CONTENT_TYPES, defineConfig, defineSkillitConfig, loadSkillitConfig, skillitConfigCandidates, type SkillitConfig, type SkillitPluginConfig, type SkillitPluginName, type SkillitContentType } from './config.js';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// packages/client/src/index.ts
|
|
2
2
|
export { AnthropicModelClient } from './model/anthropic.js';
|
|
3
3
|
export { parseReviewVerdict } from './model/anthropic.js';
|
|
4
|
+
export { SKILLIT_CONTENT_TYPES, defineConfig, defineSkillitConfig, loadSkillitConfig, skillitConfigCandidates } from './config.js';
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EAKxB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall-template.d.ts","sourceRoot":"","sources":["../src/postinstall-template.ts"],"names":[],"mappings":"AAAA,wBAAgB,yBAAyB,IAAI,MAAM,CAmElD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export function generatePostinstallScript() {
|
|
2
|
+
return `#!/usr/bin/env node
|
|
3
|
+
'use strict';
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const os = require('node:os');
|
|
6
|
+
const path = require('node:path');
|
|
7
|
+
|
|
8
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8'));
|
|
9
|
+
const pkgName = pkg.name;
|
|
10
|
+
const binMap = pkg.bin;
|
|
11
|
+
if (!pkgName || !binMap || typeof binMap !== 'object' || Object.keys(binMap).length === 0) {
|
|
12
|
+
process.exit(0);
|
|
13
|
+
}
|
|
14
|
+
const binName = Object.keys(binMap)[0];
|
|
15
|
+
const npxPrefix = 'npx ' + pkgName;
|
|
16
|
+
|
|
17
|
+
const skillsDir = path.join(__dirname, 'skills');
|
|
18
|
+
if (!fs.existsSync(skillsDir)) process.exit(0);
|
|
19
|
+
|
|
20
|
+
function rewrite(dir) {
|
|
21
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
22
|
+
const full = path.join(dir, entry.name);
|
|
23
|
+
if (entry.isDirectory()) {
|
|
24
|
+
rewrite(full);
|
|
25
|
+
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
26
|
+
const content = fs.readFileSync(full, 'utf8');
|
|
27
|
+
const updated = content.replaceAll(npxPrefix, binName);
|
|
28
|
+
if (updated !== content) fs.writeFileSync(full, updated, 'utf8');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function copyDir(src, dest) {
|
|
34
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
35
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
36
|
+
const srcPath = path.join(src, entry.name);
|
|
37
|
+
const destPath = path.join(dest, entry.name);
|
|
38
|
+
if (entry.isDirectory()) {
|
|
39
|
+
copyDir(srcPath, destPath);
|
|
40
|
+
} else {
|
|
41
|
+
fs.copyFileSync(srcPath, destPath);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
rewrite(skillsDir);
|
|
47
|
+
|
|
48
|
+
const installTargets = [
|
|
49
|
+
path.join(os.homedir(), '.claude', 'skills'),
|
|
50
|
+
path.join(os.homedir(), '.copilot', 'skills'),
|
|
51
|
+
path.join(os.homedir(), '.agents', 'skills')
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
for (const userSkillsDir of installTargets) {
|
|
55
|
+
try {
|
|
56
|
+
fs.mkdirSync(userSkillsDir, { recursive: true });
|
|
57
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
58
|
+
if (!entry.isDirectory()) continue;
|
|
59
|
+
copyDir(path.join(skillsDir, entry.name), path.join(userSkillsDir, entry.name));
|
|
60
|
+
}
|
|
61
|
+
console.log('[skillit] Skills installed to ' + userSkillsDir);
|
|
62
|
+
} catch (err) {
|
|
63
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
64
|
+
console.warn('[skillit] Could not install skills to ' + userSkillsDir + ': ' + message);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=postinstall-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall-template.js","sourceRoot":"","sources":["../src/postinstall-template.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiER,CAAC;AACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skillit/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "The skillit CLI — generate, audit, and refine AI-agent skills from a TypeScript codebase, plus the Anthropic model client for the headless refine loop.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Pradeep Mouli",
|
|
@@ -27,12 +27,13 @@
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@anthropic-ai/sdk": "^0.
|
|
30
|
+
"@anthropic-ai/sdk": "^0.102.0",
|
|
31
31
|
"commander": "^15.0.0",
|
|
32
|
-
"
|
|
33
|
-
"@skillit/
|
|
34
|
-
"@skillit/
|
|
35
|
-
"@skillit/
|
|
32
|
+
"typescript": "^6.0.3",
|
|
33
|
+
"@skillit/cli": "1.0.0",
|
|
34
|
+
"@skillit/core": "3.0.0",
|
|
35
|
+
"@skillit/mcp": "1.0.0",
|
|
36
|
+
"@skillit/typedoc": "2.0.0"
|
|
36
37
|
},
|
|
37
38
|
"scripts": {
|
|
38
39
|
"build": "tsgo -p tsconfig.build.json",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: skillit-bootstrap
|
|
3
3
|
description: 'Bootstrap an AI-agent skill from a TypeScript codebase by running the deterministic skillit generate/audit loop and enriching repo source (JSDoc, README, config-type properties, MCP tool annotations, examples, package.json) until the skill reaches its grade target. Use for cli, typedoc, config, or mcp (build-mode) projects; never edit SKILL.md/references directly.'
|
|
4
4
|
version: 0.1.0
|
|
5
|
-
|
|
5
|
+
skillit:
|
|
6
6
|
managed: bundled-orchestrator
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -65,9 +65,20 @@ _headline judgment_ of the skill lives in a kind-specific surface:
|
|
|
65
65
|
- **typedoc** — per-symbol JSDoc on exported functions/classes/types (the richest
|
|
66
66
|
surface; every export is introspectable). Writeback: `upsertJsDocTag`.
|
|
67
67
|
- **cli** — JSDoc on the command's `<Command>Options` interface; `CliRefineSource`
|
|
68
|
-
correlates the option-interface tags onto the command surface.
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
correlates the option-interface tags onto the command surface.
|
|
69
|
+
- Targets have `kind: "command"` and map to `<PascalName>Options`
|
|
70
|
+
(e.g. `callHierarchy` → `CallHierarchyOptions`).
|
|
71
|
+
- **`resolvedLocations` null** → the interface doesn't exist yet. Create it in
|
|
72
|
+
any `.ts` file inside the source glob (e.g. `src/command-options.ts`). No
|
|
73
|
+
properties needed — only the JSDoc block:
|
|
74
|
+
```ts
|
|
75
|
+
/** @useWhen - <scenario> @avoidWhen - <alt> @never - NEVER … Fix: … */
|
|
76
|
+
interface CallHierarchyOptions {}
|
|
77
|
+
```
|
|
78
|
+
After `skillit gen` + re-audit, `resolveTargetLocation` will find the interface
|
|
79
|
+
and subsequent `skillit refine` passes can write tags into it directly.
|
|
80
|
+
- For an adapter-model CLI (no static command tree), enrich the stable exported
|
|
81
|
+
symbols together with `@packageDocumentation` instead.
|
|
71
82
|
- **config** — **per-property** JSDoc on the config type's properties:
|
|
72
83
|
`@useWhen`/`@avoidWhen`/`@pitfalls`/`@remarks` on each option, plus a sibling
|
|
73
84
|
`<config>.example.ts` (written only if absent — never clobbered) for the
|
|
@@ -77,8 +88,8 @@ _headline judgment_ of the skill lives in a kind-specific surface:
|
|
|
77
88
|
`config-extract` reads), NOT `@never` (the typedoc/JSDoc surface's tag — see
|
|
78
89
|
spec §4.2 naming note). On a config option, `@never` is silently ignored.
|
|
79
90
|
`@category` is likewise not scored on config options — don't chase it there.
|
|
80
|
-
- **mcp (build mode)** — JSDoc on the tool-handler symbols **plus**
|
|
81
|
-
`_meta.
|
|
91
|
+
- **mcp (build mode)** — JSDoc on the tool-handler symbols **plus** flat
|
|
92
|
+
`_meta.{useWhen,avoidWhen,pitfalls}` string annotations in your TS server
|
|
82
93
|
source. `resolveTargetLocation` resolves a tool to its `{ file, declName }`.
|
|
83
94
|
Writeback: `upsertJsDocTag`. (`gen`/`audit --source mcp --mode build`.)
|
|
84
95
|
- **mcp (runtime mode)** — the server source is **not** editable, so the only
|