@skillit/client 0.2.0 → 0.4.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 +40 -0
- package/dist/bin.d.ts +2 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +21 -13
- package/dist/bin.js.map +1 -1
- package/dist/commands/audit.d.ts +34 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +139 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/gen.d.ts +21 -0
- package/dist/commands/gen.d.ts.map +1 -0
- package/dist/commands/gen.js +112 -0
- package/dist/commands/gen.js.map +1 -0
- package/dist/commands/init.d.ts +8 -22
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +39 -81
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/refine.d.ts +34 -2
- package/dist/commands/refine.d.ts.map +1 -1
- package/dist/commands/refine.js +61 -29
- package/dist/commands/refine.js.map +1 -1
- 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 +74 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +68 -0
- package/dist/generate.js.map +1 -0
- package/dist/mcp-mode.d.ts +22 -0
- package/dist/mcp-mode.d.ts.map +1 -0
- package/dist/mcp-mode.js +27 -0
- package/dist/mcp-mode.js.map +1 -0
- package/dist/model/anthropic.d.ts +11 -0
- package/dist/model/anthropic.d.ts.map +1 -1
- package/dist/model/anthropic.js +16 -2
- package/dist/model/anthropic.js.map +1 -1
- package/dist/model/cli/adapters.d.ts.map +1 -1
- package/dist/model/cli/adapters.js +35 -2
- package/dist/model/cli/adapters.js.map +1 -1
- package/dist/model/cli/cli-client.d.ts.map +1 -1
- package/dist/model/cli/cli-client.js +4 -2
- package/dist/model/cli/cli-client.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 +61 -0
- package/dist/postinstall-template.js.map +1 -0
- package/dist/program.d.ts +12 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +42 -0
- package/dist/program.js.map +1 -0
- package/dist/typedoc-entry.d.ts +6 -0
- package/dist/typedoc-entry.d.ts.map +1 -0
- package/dist/typedoc-entry.js +14 -0
- package/dist/typedoc-entry.js.map +1 -0
- package/package.json +18 -7
- package/skills/skillit-bootstrap/SKILL.md +115 -0
- package/skills/skillit-bootstrap/references/surface-routing.md +108 -0
- package/CHANGELOG.md +0 -32
- package/scripts/gen-refine-cli-skill.mjs +0 -48
- package/src/__tests__/anthropic-model.test.ts +0 -45
- package/src/__tests__/anthropic-prompt.test.ts +0 -102
- package/src/__tests__/cli-adapters.test.ts +0 -119
- package/src/__tests__/cli-client.test.ts +0 -58
- package/src/__tests__/cli-run.test.ts +0 -52
- package/src/__tests__/detect-mode.test.ts +0 -114
- package/src/__tests__/detect-source.test.ts +0 -158
- package/src/__tests__/fixtures/bin-with-program.mjs +0 -6
- package/src/__tests__/init.test.ts +0 -218
- package/src/__tests__/model-client-factory.test.ts +0 -28
- package/src/__tests__/refine-resolve.test.ts +0 -72
- package/src/bin.ts +0 -18
- package/src/commands/init.ts +0 -207
- package/src/commands/refine.ts +0 -261
- package/src/detect-mode.ts +0 -94
- package/src/detect-source.ts +0 -123
- package/src/index.ts +0 -3
- package/src/model/anthropic.ts +0 -116
- package/src/model/cli/adapters.ts +0 -178
- package/src/model/cli/cli-client.ts +0 -52
- package/src/model/cli/run.ts +0 -83
- package/src/model/model-client-factory.ts +0 -62
- package/src/model/models.ts +0 -7
- package/tsconfig.build.json +0 -9
- package/tsconfig.json +0 -4
package/dist/generate.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// packages/client/src/generate.ts
|
|
2
|
+
import { applyNpxMode, extractCliSkill, loadProgram, writeCliSkill } from '@skillit/cli';
|
|
3
|
+
import { ConfigRefineSource, discoverDepSkills, findNearestPackageDir, readPackageMetadata, renderSkills, writeSkills } from '@skillit/core';
|
|
4
|
+
import { dirname } from 'node:path';
|
|
5
|
+
/**
|
|
6
|
+
* TypeDoc-path skill generation — delegates to the plugin pipeline.
|
|
7
|
+
*
|
|
8
|
+
* `@skillit/typedoc` (and its `typedoc` peer) is imported lazily so the CLI
|
|
9
|
+
* does not load TypeDoc at startup: only the typedoc source path pays that
|
|
10
|
+
* cost, and cli/config/mcp consumers need not install the `typedoc` peer.
|
|
11
|
+
*/
|
|
12
|
+
export async function generateTypeDocSkill(opts) {
|
|
13
|
+
const { generateTypeDocSkills } = await import('@skillit/typedoc');
|
|
14
|
+
await generateTypeDocSkills({
|
|
15
|
+
entryPoints: opts.entryPoints,
|
|
16
|
+
tsconfig: opts.tsconfig,
|
|
17
|
+
cwd: opts.cwd,
|
|
18
|
+
outDir: opts.outDir
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* MCP-path skill generation — lazily imports `@skillit/mcp` so the CLI does not
|
|
23
|
+
* load the MCP stack (and its SDK) at startup for non-mcp commands.
|
|
24
|
+
*/
|
|
25
|
+
export async function generateMcpSkill(opts) {
|
|
26
|
+
const { generateMcpSkill: run } = await import('@skillit/mcp');
|
|
27
|
+
await run({
|
|
28
|
+
mcpPath: opts.mcpPath,
|
|
29
|
+
...(opts.server !== undefined ? { serverName: opts.server } : {}),
|
|
30
|
+
outDir: opts.outDir
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** CLI-path skill generation: loadProgram → extractCliSkill → applyNpxMode → writeCliSkill. */
|
|
34
|
+
export async function generateCliSkill(opts) {
|
|
35
|
+
const program = await loadProgram({ program: opts.program, cwd: opts.cwd });
|
|
36
|
+
const skill = await extractCliSkill({ program, metadata: { name: opts.name } });
|
|
37
|
+
const pkgDir = await findNearestPackageDir(opts.cwd);
|
|
38
|
+
const meta = pkgDir ? await readPackageMetadata(pkgDir) : {};
|
|
39
|
+
applyNpxMode(skill, meta, opts.invocationMode);
|
|
40
|
+
if (pkgDir) {
|
|
41
|
+
skill.rootDir = pkgDir;
|
|
42
|
+
skill.seeAlso = await discoverDepSkills(pkgDir);
|
|
43
|
+
}
|
|
44
|
+
writeCliSkill(skill, { outDir: opts.outDir });
|
|
45
|
+
}
|
|
46
|
+
/** Config-path skill generation: extract the surface → render → write. */
|
|
47
|
+
export async function generateConfigSkill(opts) {
|
|
48
|
+
const skill = await new ConfigRefineSource({
|
|
49
|
+
configFile: opts.configFile,
|
|
50
|
+
typeName: opts.typeName,
|
|
51
|
+
// Only pass an explicit name when provided; otherwise let ConfigRefineSource
|
|
52
|
+
// derive it (package nearest the config file → typeName).
|
|
53
|
+
...(opts.name !== undefined ? { name: opts.name } : {}),
|
|
54
|
+
// A config-specific description so the rendered skill describes the config
|
|
55
|
+
// surface, not the package blurb (which is about the whole package).
|
|
56
|
+
description: `Configuration options for ${opts.typeName}.`
|
|
57
|
+
}).extract();
|
|
58
|
+
const pkgDir = await findNearestPackageDir(dirname(opts.configFile));
|
|
59
|
+
if (pkgDir) {
|
|
60
|
+
skill.rootDir = pkgDir;
|
|
61
|
+
skill.seeAlso = await discoverDepSkills(pkgDir);
|
|
62
|
+
}
|
|
63
|
+
// Config skills are content-rich (per-option routing + example); raise the
|
|
64
|
+
// per-reference token budget so a multi-option surface isn't truncated.
|
|
65
|
+
const rendered = renderSkills([skill], { outDir: opts.outDir, maxTokens: 16000 });
|
|
66
|
+
writeSkills(rendered, { outDir: opts.outDir });
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** The subset of command options `resolveMcpMode` reads. */
|
|
2
|
+
export interface McpModeOpts {
|
|
3
|
+
mode?: string;
|
|
4
|
+
mcp?: string;
|
|
5
|
+
}
|
|
6
|
+
/** Resolved mode, or a user-facing error message. */
|
|
7
|
+
export type McpModeResult = {
|
|
8
|
+
mode: 'build' | 'runtime';
|
|
9
|
+
} | {
|
|
10
|
+
error: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the MCP refine/audit mode: honor an explicit `--mode build|runtime`,
|
|
14
|
+
* otherwise auto-detect via {@link detectRefineMode}, returning an actionable
|
|
15
|
+
* error when the mode is invalid or detection is ambiguous.
|
|
16
|
+
*
|
|
17
|
+
* @param cwd - project directory to inspect for build/runtime signals.
|
|
18
|
+
* @param opts - parsed `--mode` / `--mcp` options.
|
|
19
|
+
* @returns the resolved mode, or `{ error }` for the caller to print + exit 1.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveMcpMode(cwd: string, opts: McpModeOpts): Promise<McpModeResult>;
|
|
22
|
+
//# sourceMappingURL=mcp-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-mode.d.ts","sourceRoot":"","sources":["../src/mcp-mode.ts"],"names":[],"mappings":"AAEA,4DAA4D;AAC5D,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qDAAqD;AACrD,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAc3F"}
|
package/dist/mcp-mode.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { detectRefineMode } from './detect-mode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the MCP refine/audit mode: honor an explicit `--mode build|runtime`,
|
|
4
|
+
* otherwise auto-detect via {@link detectRefineMode}, returning an actionable
|
|
5
|
+
* error when the mode is invalid or detection is ambiguous.
|
|
6
|
+
*
|
|
7
|
+
* @param cwd - project directory to inspect for build/runtime signals.
|
|
8
|
+
* @param opts - parsed `--mode` / `--mcp` options.
|
|
9
|
+
* @returns the resolved mode, or `{ error }` for the caller to print + exit 1.
|
|
10
|
+
*/
|
|
11
|
+
export async function resolveMcpMode(cwd, opts) {
|
|
12
|
+
if (opts.mode === 'build' || opts.mode === 'runtime')
|
|
13
|
+
return { mode: opts.mode };
|
|
14
|
+
if (opts.mode !== undefined) {
|
|
15
|
+
return { error: `Invalid --mode value: ${opts.mode}. Use 'build' or 'runtime'.` };
|
|
16
|
+
}
|
|
17
|
+
const detected = await detectRefineMode(cwd, opts.mcp ?? cwd);
|
|
18
|
+
if (detected === 'ambiguous') {
|
|
19
|
+
return {
|
|
20
|
+
error: `Cannot determine MCP mode.
|
|
21
|
+
Use --mode build (TypeScript MCP server you own)
|
|
22
|
+
--mode runtime (consuming project, any MCP server)`
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return { mode: detected };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=mcp-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-mode.js","sourceRoot":"","sources":["../src/mcp-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAWpD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,IAAiB;IACjE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACjF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,yBAAyB,IAAI,CAAC,IAAI,6BAA6B,EAAE,CAAC;IACpF,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IAC9D,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE;;wDAE2C;SACnD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { DraftRequest, ReviewRequest, ReviewResult, ModelClient } from '@skillit/core';
|
|
2
2
|
export declare function parseReviewVerdict(text: string): ReviewResult;
|
|
3
3
|
export declare function buildDraftPrompt(req: DraftRequest): string;
|
|
4
|
+
/**
|
|
5
|
+
* Extracts the drafted annotation from a model response.
|
|
6
|
+
*
|
|
7
|
+
* The drafter is instructed (see {@link buildDraftPrompt}) to wrap its answer
|
|
8
|
+
* in `<answer>…</answer>`. We return the inner text so any conversational
|
|
9
|
+
* preamble a chatty backend adds outside the tags (e.g. the `claude` CLI's
|
|
10
|
+
* "Now I have full context… Let me write the annotation.") is discarded.
|
|
11
|
+
* Falls back to the trimmed response when the tags are absent, so a
|
|
12
|
+
* well-behaved backend that omits them still works.
|
|
13
|
+
*/
|
|
14
|
+
export declare function extractDraftAnswer(text: string): string;
|
|
4
15
|
export declare function buildReviewPrompt(req: ReviewRequest): string;
|
|
5
16
|
export declare class AnthropicModelClient implements ModelClient {
|
|
6
17
|
private client;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/model/anthropic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA4C7D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAa1D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAe5D;AAED,qBAAa,oBAAqB,YAAW,WAAW;IACtD,OAAO,CAAC,MAAM,CAAmB;IAE3B,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9C;IAEK,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAatD;CACF"}
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/model/anthropic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA4C7D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAa1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAe5D;AAED,qBAAa,oBAAqB,YAAW,WAAW;IACtD,OAAO,CAAC,MAAM,CAAmB;IAE3B,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAa9C;IAEK,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAatD;CACF"}
|
package/dist/model/anthropic.js
CHANGED
|
@@ -58,13 +58,27 @@ export function buildDraftPrompt(req) {
|
|
|
58
58
|
`Tag to fill: @${req.tag}`,
|
|
59
59
|
`Guidance: ${req.suggestion}`,
|
|
60
60
|
req.currentValue ? `Current value:\n${req.currentValue}` : 'No current value.',
|
|
61
|
-
'
|
|
61
|
+
'Wrap ONLY the annotation content in <answer></answer> tags. Put nothing outside the tags — no preamble, no code fences, no commentary, and no description of what you are about to do.'
|
|
62
62
|
];
|
|
63
63
|
if (req.guidance) {
|
|
64
64
|
parts.push(`Conventions (follow these):\n${req.guidance}`);
|
|
65
65
|
}
|
|
66
66
|
return parts.join('\n\n');
|
|
67
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Extracts the drafted annotation from a model response.
|
|
70
|
+
*
|
|
71
|
+
* The drafter is instructed (see {@link buildDraftPrompt}) to wrap its answer
|
|
72
|
+
* in `<answer>…</answer>`. We return the inner text so any conversational
|
|
73
|
+
* preamble a chatty backend adds outside the tags (e.g. the `claude` CLI's
|
|
74
|
+
* "Now I have full context… Let me write the annotation.") is discarded.
|
|
75
|
+
* Falls back to the trimmed response when the tags are absent, so a
|
|
76
|
+
* well-behaved backend that omits them still works.
|
|
77
|
+
*/
|
|
78
|
+
export function extractDraftAnswer(text) {
|
|
79
|
+
const match = text.match(/<answer>([\s\S]*?)<\/answer>/i);
|
|
80
|
+
return (match?.[1] ?? text).trim();
|
|
81
|
+
}
|
|
68
82
|
export function buildReviewPrompt(req) {
|
|
69
83
|
const parts = [
|
|
70
84
|
`You are reviewing a skill annotation draft for "${req.skill.name}".`,
|
|
@@ -91,7 +105,7 @@ export class AnthropicModelClient {
|
|
|
91
105
|
if (!block || block.type !== 'text') {
|
|
92
106
|
throw new Error(`Unexpected response from ${DRAFTER}: no text block`);
|
|
93
107
|
}
|
|
94
|
-
return block.text
|
|
108
|
+
return extractDraftAnswer(block.text);
|
|
95
109
|
}
|
|
96
110
|
async review(req) {
|
|
97
111
|
const prompt = buildReviewPrompt(req);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/model/anthropic.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,4DAA4D;IAC5D,+DAA+D;IAC/D,6EAA6E;IAC7E,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvE,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC/D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACb,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACpB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,KAAK,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,QAAQ;YAAE,SAAS;QACvB,IAAI,EAAE,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACnB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACpB,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;gBAClB,GAAG,GAAG,CAAC,CAAC;gBACR,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAA0B,CAAC;QAC/E,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;YAC5D,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;SAChC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAiB;IAChD,MAAM,KAAK,GAAG;QACZ,4CAA4C,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;QAC9D,SAAS,GAAG,CAAC,QAAQ,EAAE;QACvB,iBAAiB,GAAG,CAAC,GAAG,EAAE;QAC1B,aAAa,GAAG,CAAC,UAAU,EAAE;QAC7B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,mBAAmB;QAC9E,
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/model/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/model/cli/adapters.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,kEAAkE;IAClE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC3D;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AA0DD,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/model/cli/adapters.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,kEAAkE;IAClE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IAC3D;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AA0DD,eAAO,MAAM,aAAa,EAAE,UAgD3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UA2B1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,UAsC5B,CAAC;AAQF,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,UAAU,CAE/D"}
|
|
@@ -52,7 +52,30 @@ export const claudeAdapter = {
|
|
|
52
52
|
const model = role === 'review' ? REVIEWER : DRAFTER;
|
|
53
53
|
return {
|
|
54
54
|
cmd: 'claude',
|
|
55
|
-
|
|
55
|
+
// Isolate claude as a pure text generator for the refine loop. Without
|
|
56
|
+
// this, `claude -p` runs its full agent loop: it once rewrote CLAUDE.md
|
|
57
|
+
// mid-draft (file tools enabled) and emitted decorative "★ Insight"
|
|
58
|
+
// blocks that leaked verbatim into the JSDoc tags refine writes. So:
|
|
59
|
+
// --disallowedTools deny every side-effecting tool (no file edits)
|
|
60
|
+
// --strict-mcp-config ignore project/user MCP servers
|
|
61
|
+
// --settings outputStyle:default default style (belt-and-suspenders)
|
|
62
|
+
// --append-system-prompt forbid decoration — the drafter model
|
|
63
|
+
// (sonnet) adds "★ Insight" blocks even under the default style, and
|
|
64
|
+
// only an explicit system-prompt instruction reliably suppresses them
|
|
65
|
+
args: [
|
|
66
|
+
'-p',
|
|
67
|
+
'--output-format',
|
|
68
|
+
'json',
|
|
69
|
+
'--model',
|
|
70
|
+
model,
|
|
71
|
+
'--strict-mcp-config',
|
|
72
|
+
'--disallowedTools',
|
|
73
|
+
'Edit,Write,MultiEdit,NotebookEdit,Bash,Task,WebFetch,WebSearch',
|
|
74
|
+
'--settings',
|
|
75
|
+
'{"outputStyle":"default"}',
|
|
76
|
+
'--append-system-prompt',
|
|
77
|
+
'CRITICAL: Output ONLY the requested content. Never add "★ Insight" blocks, horizontal-rule (─) decorations, section headers, preambles, or meta-commentary.'
|
|
78
|
+
],
|
|
56
79
|
input: prompt
|
|
57
80
|
};
|
|
58
81
|
},
|
|
@@ -103,7 +126,17 @@ export const copilotAdapter = {
|
|
|
103
126
|
// copilot uses its default model; prompt piped via stdin (not `-p <text>`)
|
|
104
127
|
// so untrusted prompt content never reaches argv — keeps the Windows
|
|
105
128
|
// shell-launch path injection-safe (only static flags are args).
|
|
106
|
-
|
|
129
|
+
//
|
|
130
|
+
// `--available-tools=` (empty whitelist) is the critical isolation: copilot
|
|
131
|
+
// is a full agent that can edit files + run shell, and as a refine model
|
|
132
|
+
// backend it once checked out a branch and pushed a commit. An empty
|
|
133
|
+
// whitelist means NO tools are available to the model, so it can only
|
|
134
|
+
// generate text. Verified live: edit + `git status` are both denied.
|
|
135
|
+
return {
|
|
136
|
+
cmd: 'copilot',
|
|
137
|
+
args: ['--output-format', 'json', '--no-color', '--available-tools='],
|
|
138
|
+
input: prompt
|
|
139
|
+
};
|
|
107
140
|
},
|
|
108
141
|
extractResult(stdout) {
|
|
109
142
|
// copilot emits JSONL; the answer is the last `assistant.message` event's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/model/cli/adapters.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAkCjD;;;;;;GAMG;AACH,SAAS,cAAc,CACrB,MAAc,EACd,OAA2C;IAE3C,IAAI,IAAmB,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACvC,IAAI,GAAe,CAAC;QACpB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,GAAG,KAAK,SAAS;YAAE,IAAI,GAAG,GAAG,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mFAAmF;AACnF,SAAS,kBAAkB,CACzB,MAAc,EACd,MAA+C;IAE/C,IAAI,MAA0B,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACvC,IAAI,GAAe,CAAC;QACpB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,GAAG,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,IAAI,EAAE,QAAQ;IACd,UAAU,CAAC,IAAI,EAAE,MAAM;QACrB,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QACrD,OAAO;YACL,GAAG,EAAE,QAAQ;YACb,
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/model/cli/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-client.d.ts","sourceRoot":"","sources":["../../../src/model/cli/cli-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-client.d.ts","sourceRoot":"","sources":["../../../src/model/cli/cli-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5F,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,iEAAiE;AACjE,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,cAAe,YAAW,WAAW;IAK9C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IAEpC,YACmB,OAAO,EAAE,UAAU,EACpC,OAAO,GAAE,qBAA0B,EAIpC;YAEa,GAAG;IAWX,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAK9C;IAEK,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAGtD;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildDraftPrompt, buildReviewPrompt, parseReviewVerdict } from '../anthropic.js';
|
|
1
|
+
import { buildDraftPrompt, buildReviewPrompt, extractDraftAnswer, parseReviewVerdict } from '../anthropic.js';
|
|
2
2
|
import { runCli } from './run.js';
|
|
3
3
|
/**
|
|
4
4
|
* A {@link ModelClient} that drives an agent CLI (claude/codex/copilot) instead
|
|
@@ -26,7 +26,9 @@ export class CliModelClient {
|
|
|
26
26
|
}
|
|
27
27
|
async draft(req) {
|
|
28
28
|
const result = await this.run('draft', buildDraftPrompt(req));
|
|
29
|
-
|
|
29
|
+
// The CLI backends are chatty: strip any preamble outside the <answer> tags
|
|
30
|
+
// the drafter was told to use, so only the annotation reaches the JSDoc.
|
|
31
|
+
return extractDraftAnswer(result);
|
|
30
32
|
}
|
|
31
33
|
async review(req) {
|
|
32
34
|
const result = await this.run('review', buildReviewPrompt(req));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-client.js","sourceRoot":"","sources":["../../../src/model/cli/cli-client.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"cli-client.js","sourceRoot":"","sources":["../../../src/model/cli/cli-client.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAC;AAWtD;;;;GAIG;AACH,MAAM,OAAO,cAAc;IAKN,OAAO;IAJT,MAAM,CAAY;IAClB,SAAS,CAAU;IAEpC,YACmB,OAAmB,EACpC,OAAO,GAA0B,EAAE;uBADlB,OAAO;QAGxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,IAAwB,EAAE,MAAc;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;YAC/B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAiB;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,4EAA4E;QAC5E,yEAAyE;QACzE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAkB;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall-template.d.ts","sourceRoot":"","sources":["../src/postinstall-template.ts"],"names":[],"mappings":"AAAA,wBAAgB,yBAAyB,IAAI,MAAM,CA2DlD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
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 userSkillsDir = path.join(os.homedir(), '.claude', 'skills');
|
|
49
|
+
try {
|
|
50
|
+
fs.mkdirSync(userSkillsDir, { recursive: true });
|
|
51
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
52
|
+
if (!entry.isDirectory()) continue;
|
|
53
|
+
copyDir(path.join(skillsDir, entry.name), path.join(userSkillsDir, entry.name));
|
|
54
|
+
}
|
|
55
|
+
console.log('[skillit] Skills installed to ' + userSkillsDir);
|
|
56
|
+
} catch (err) {
|
|
57
|
+
console.warn('[skillit] Could not install skills to ' + userSkillsDir + ': ' + err.message);
|
|
58
|
+
}
|
|
59
|
+
`;
|
|
60
|
+
}
|
|
61
|
+
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Builds the `skillit` commander program with all subcommands registered.
|
|
4
|
+
*
|
|
5
|
+
* Exported as a zero-arg factory so the program can be introspected by
|
|
6
|
+
* `@skillit/cli`'s program loader (`--program <file#export>` / auto-discovery
|
|
7
|
+
* probes `buildProgram`) — this is what lets skillit generate a skill for its
|
|
8
|
+
* own CLI. The executable entry ({@link file://./bin.ts}) wraps this with
|
|
9
|
+
* argv parsing and the mcp exit-code contract.
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildProgram(): Command;
|
|
12
|
+
//# sourceMappingURL=program.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAUtC"}
|
package/dist/program.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// packages/client/src/program.ts
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { buildMcpCommand } from '@skillit/mcp';
|
|
5
|
+
import { buildAuditCommand } from './commands/audit.js';
|
|
6
|
+
import { buildGenCommand } from './commands/gen.js';
|
|
7
|
+
import { buildInitCommand } from './commands/init.js';
|
|
8
|
+
import { buildRefineCommand } from './commands/refine.js';
|
|
9
|
+
/**
|
|
10
|
+
* The package version, read from `package.json` at runtime so `skillit
|
|
11
|
+
* --version` stays correct after every release instead of drifting from a
|
|
12
|
+
* hard-coded literal. `../package.json` resolves from the built `dist/` entry
|
|
13
|
+
* to the package root. Falls back to `0.0.0` if the read fails.
|
|
14
|
+
*/
|
|
15
|
+
function readPackageVersion() {
|
|
16
|
+
try {
|
|
17
|
+
const raw = readFileSync(new URL('../package.json', import.meta.url), 'utf8');
|
|
18
|
+
return JSON.parse(raw).version ?? '0.0.0';
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return '0.0.0';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Builds the `skillit` commander program with all subcommands registered.
|
|
26
|
+
*
|
|
27
|
+
* Exported as a zero-arg factory so the program can be introspected by
|
|
28
|
+
* `@skillit/cli`'s program loader (`--program <file#export>` / auto-discovery
|
|
29
|
+
* probes `buildProgram`) — this is what lets skillit generate a skill for its
|
|
30
|
+
* own CLI. The executable entry ({@link file://./bin.ts}) wraps this with
|
|
31
|
+
* argv parsing and the mcp exit-code contract.
|
|
32
|
+
*/
|
|
33
|
+
export function buildProgram() {
|
|
34
|
+
const program = new Command('skillit').description('skillit CLI').version(readPackageVersion());
|
|
35
|
+
program.addCommand(buildRefineCommand());
|
|
36
|
+
program.addCommand(buildInitCommand());
|
|
37
|
+
program.addCommand(buildMcpCommand());
|
|
38
|
+
program.addCommand(buildGenCommand());
|
|
39
|
+
program.addCommand(buildAuditCommand());
|
|
40
|
+
return program;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;GAKG;AACH,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9E,OAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC,OAAO,IAAI,OAAO,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEhG,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAExC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedoc-entry.d.ts","sourceRoot":"","sources":["../src/typedoc-entry.ts"],"names":[],"mappings":"AAIA,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAQ5F"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// packages/client/src/typedoc-entry.ts
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
/** Resolve TypeDoc entry points + tsconfig for a package dir (shared by gen + audit). */
|
|
5
|
+
export function resolveTypeDocEntry(cwd) {
|
|
6
|
+
const tsconfig = existsSync(join(cwd, 'tsconfig.json'))
|
|
7
|
+
? join(cwd, 'tsconfig.json')
|
|
8
|
+
: existsSync(join(cwd, 'tsconfig.build.json'))
|
|
9
|
+
? join(cwd, 'tsconfig.build.json')
|
|
10
|
+
: join(cwd, 'tsconfig.json'); // default even if absent — TypeDoc will error clearly
|
|
11
|
+
const entryPoints = [join(cwd, 'src', 'index.ts')];
|
|
12
|
+
return { entryPoints, tsconfig };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=typedoc-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typedoc-entry.js","sourceRoot":"","sources":["../src/typedoc-entry.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,yFAAyF;AACzF,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;QAC5B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;YAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,sDAAsD;IACxF,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACnD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skillit/client",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Anthropic model client
|
|
3
|
+
"version": "0.4.0",
|
|
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",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/pradeepmouli/skillit.git",
|
|
10
|
+
"directory": "packages/client"
|
|
11
|
+
},
|
|
7
12
|
"bin": {
|
|
8
13
|
"skillit": "./dist/bin.js"
|
|
9
14
|
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"skills"
|
|
19
|
+
],
|
|
10
20
|
"type": "module",
|
|
11
21
|
"main": "./dist/index.js",
|
|
12
22
|
"types": "./dist/index.d.ts",
|
|
@@ -17,11 +27,12 @@
|
|
|
17
27
|
}
|
|
18
28
|
},
|
|
19
29
|
"dependencies": {
|
|
20
|
-
"@anthropic-ai/sdk": "^0.
|
|
21
|
-
"commander": "^
|
|
22
|
-
"@skillit/
|
|
23
|
-
"@skillit/core": "1.
|
|
24
|
-
"@skillit/
|
|
30
|
+
"@anthropic-ai/sdk": "^0.102.0",
|
|
31
|
+
"commander": "^15.0.0",
|
|
32
|
+
"@skillit/cli": "0.6.0",
|
|
33
|
+
"@skillit/core": "2.1.0",
|
|
34
|
+
"@skillit/mcp": "0.4.1",
|
|
35
|
+
"@skillit/typedoc": "1.2.1"
|
|
25
36
|
},
|
|
26
37
|
"scripts": {
|
|
27
38
|
"build": "tsgo -p tsconfig.build.json",
|