@skillit/client 0.2.0 → 0.3.1
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 +20 -0
- package/dist/commands/gen.d.ts.map +1 -0
- package/dist/commands/gen.js +108 -0
- package/dist/commands/gen.js.map +1 -0
- package/dist/commands/init.d.ts +3 -22
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +23 -84
- 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/generate.d.ts +67 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +55 -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/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 +97 -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
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,11 @@ import { type DetectedRefineSource, type RefineSourceKind } from '../detect-sour
|
|
|
4
4
|
export interface RefineSourceResolveOpts {
|
|
5
5
|
source?: string;
|
|
6
6
|
mcp?: string;
|
|
7
|
+
configType?: string;
|
|
7
8
|
}
|
|
8
9
|
/** Result of resolving the refine source: a concrete kind or an actionable error. */
|
|
9
10
|
export type RefineSourceResolution = {
|
|
10
|
-
kind: 'cli' | 'mcp';
|
|
11
|
+
kind: 'cli' | 'mcp' | 'config';
|
|
11
12
|
} | {
|
|
12
13
|
error: string;
|
|
13
14
|
};
|
|
@@ -22,10 +23,29 @@ export type RefineSourceResolution = {
|
|
|
22
23
|
* {@link detectInstalledSources}); named in the ambiguous error
|
|
23
24
|
*/
|
|
24
25
|
export declare function resolveRefineSource(opts: RefineSourceResolveOpts, detected: DetectedRefineSource, candidates?: readonly RefineSourceKind[]): RefineSourceResolution;
|
|
25
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Parsed options for the `refine` action / {@link runRefineCommand}.
|
|
28
|
+
* @pitfalls - **`introspectCommander`** — Never pass a Commander program before its subcommands have been registered; the result will be an empty array with no warning, silently producing a skill with no commands.
|
|
29
|
+
* - **`introspectCommander`** — Never use with yargs, oclif, minimist, or other non-Commander frameworks; it reads Commander's internal `.commands` array which does not exist on other program objects.
|
|
30
|
+
* - **`parseHelpOutput`** — Never use when you have access to the Commander program object; help-text parsing is lossy — default values, variadic flags, and required/optional distinctions are inferred heuristically and may be wrong.
|
|
31
|
+
* - **`parseHelpOutput`** — Never expect multi-line option descriptions to be captured; the parser treats the first indented line as the full description and silently discards continuation lines.
|
|
32
|
+
* - **`correlateFlags`** — Never rely on option name matching when pairing `parseHelpOutput` output with a typed config interface; help parsing preserves raw kebab-case names (e.g. `output-dir`) while TypeDoc extracts camelCase properties (`outputDir`) — correlation will silently produce no enrichment.
|
|
33
|
+
* - **`extractCliSkill`** — Never pass both `program` and `helpTexts`; `program` silently takes precedence and the entire `helpTexts` map is ignored without any warning or error.
|
|
34
|
+
* - **`extractCliSkill`** — Never call from a file that invokes `program.parse(process.argv)` at import time; Commander will consume `process.argv` (and may exit) before the skill extraction pipeline can run.
|
|
35
|
+
* - **`loadProgram`** — Never omit the `#exportName` separator in `opts.program` (e.g. pass `"./cli.js"` instead of `"./cli.js#buildProgram"`); the function throws immediately without attempting auto-discovery from `package.json`.
|
|
36
|
+
* @useWhen - Your Commander `.description()` reads as a bare verb or repeats the command name with no behavioral context (e.g., `"run"` instead of `"Run the build pipeline and emit artifacts to dist/"`)
|
|
37
|
+
* - An `.option()` description states what the flag is named but not what it changes — the `--help` output leaves the caller guessing at the effect
|
|
38
|
+
* - A positional argument added via `.argument()` has no expected-format hint, leaving callers unsure whether to pass a file path, a glob, a semver string, or a named identifier
|
|
39
|
+
* - An option that accepts an environment-variable override has no mention of that env var in its description, so the config surface is invisible in `--help` output
|
|
40
|
+
* @avoidWhen - `introspectCommander` — the Commander `program` object is unavailable at runtime; use `parseHelpOutput` with raw `--help` text instead
|
|
41
|
+
* - `parseHelpOutput` — you have direct access to the Commander `program` object; `introspectCommander` captures default values, variadic flags, and required/optional distinctions that help-text parsing misses
|
|
42
|
+
* - `correlateFlags` — no TypeDoc-extracted `configSurfaces` are available; without a matching config surface the call is a no-op and no JSDoc metadata is merged into CLI options
|
|
43
|
+
*/
|
|
26
44
|
export interface RefineCommandOpts {
|
|
27
45
|
source?: string;
|
|
28
46
|
program?: string;
|
|
47
|
+
configType?: string;
|
|
48
|
+
ground?: string[];
|
|
29
49
|
mcp?: string;
|
|
30
50
|
server?: string;
|
|
31
51
|
overlay?: string;
|
|
@@ -38,6 +58,18 @@ export interface RefineCommandOpts {
|
|
|
38
58
|
}
|
|
39
59
|
/** The model backend to use; defaults to the API client. */
|
|
40
60
|
export declare function resolveModelClientKind(raw: string | undefined): string;
|
|
61
|
+
/**
|
|
62
|
+
* Parse a `--config-type <file#export>` spec (e.g. `./src/config.ts#MyConfig`)
|
|
63
|
+
* into its file and exported type name. Pure and unit-testable. The `#` is the
|
|
64
|
+
* required separator; both sides must be non-empty (mirrors `--program`'s
|
|
65
|
+
* `file#export` form). `cwd` resolves a relative file to an absolute path.
|
|
66
|
+
*/
|
|
67
|
+
export declare function parseConfigTypeSpec(spec: string, cwd: string): {
|
|
68
|
+
configFile: string;
|
|
69
|
+
typeName: string;
|
|
70
|
+
} | {
|
|
71
|
+
error: string;
|
|
72
|
+
};
|
|
41
73
|
/**
|
|
42
74
|
* The body of the `refine` command action, extracted so it can be reused
|
|
43
75
|
* programmatically (e.g. by `skillit init`) without argv gymnastics. Sets
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../src/commands/refine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAW7B,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../src/commands/refine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAW7B,wDAAwD;AACxD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qFAAqF;AACrF,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAS5F;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,oBAAoB,EAC9B,UAAU,GAAE,SAAS,gBAAgB,EAAO,GAC3C,sBAAsB,CAkCxB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,4DAA4D;AAC5D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAU9D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG7E;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAsB5C"}
|
package/dist/commands/refine.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// packages/client/src/commands/refine.ts
|
|
2
2
|
import { Command } from 'commander';
|
|
3
|
-
import {
|
|
3
|
+
import { createMcpRefineSource } from '@skillit/mcp';
|
|
4
4
|
import { CliRefineSource, loadProgram } from '@skillit/cli';
|
|
5
|
-
import { refineSkill } from '@skillit/core';
|
|
5
|
+
import { ConfigRefineSource, refineSkill } from '@skillit/core';
|
|
6
6
|
import { createModelClient } from '../model/model-client-factory.js';
|
|
7
7
|
import { detectRefineMode } from '../detect-mode.js';
|
|
8
8
|
import { classifyRefineSources, detectInstalledSources } from '../detect-source.js';
|
|
9
|
-
import { join } from 'node:path';
|
|
9
|
+
import { isAbsolute, join } from 'node:path';
|
|
10
10
|
function parsePositiveInt(raw, flag) {
|
|
11
11
|
const n = parseInt(raw, 10);
|
|
12
12
|
if (!Number.isFinite(n) || n < 1) {
|
|
@@ -14,8 +14,12 @@ function parsePositiveInt(raw, flag) {
|
|
|
14
14
|
}
|
|
15
15
|
return n;
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
// `config` is an explicit-only source: it never auto-detects (no installed
|
|
18
|
+
// `@skillit/*` package implies it), so the ambiguous/none guidance keeps
|
|
19
|
+
// pointing at the detectable sources while `--source config` is still accepted.
|
|
20
|
+
const VALID_SOURCES = ['cli', 'mcp', 'typedoc', 'config'];
|
|
18
21
|
const SOURCE_FORM = '--source <cli|mcp|typedoc>';
|
|
22
|
+
const INVALID_SOURCE_FORM = '--source <cli|mcp|typedoc|config>';
|
|
19
23
|
/**
|
|
20
24
|
* Resolve the refine source from explicit `--source` (wins) or detection,
|
|
21
25
|
* then validate per-source flag requirements. Pure and unit-testable: it does
|
|
@@ -30,7 +34,7 @@ export function resolveRefineSource(opts, detected, candidates = []) {
|
|
|
30
34
|
let kind;
|
|
31
35
|
if (opts.source !== undefined) {
|
|
32
36
|
if (!VALID_SOURCES.includes(opts.source)) {
|
|
33
|
-
return { error: `Invalid --source value: ${opts.source}. Use ${
|
|
37
|
+
return { error: `Invalid --source value: ${opts.source}. Use ${INVALID_SOURCE_FORM}.` };
|
|
34
38
|
}
|
|
35
39
|
kind = opts.source;
|
|
36
40
|
}
|
|
@@ -50,7 +54,12 @@ Pass ${SOURCE_FORM} to choose one.`
|
|
|
50
54
|
kind = detected;
|
|
51
55
|
}
|
|
52
56
|
if (kind === 'typedoc') {
|
|
53
|
-
return { error: 'typedoc refine not yet supported; use --source cli|mcp.' };
|
|
57
|
+
return { error: 'typedoc refine not yet supported; use --source cli|mcp|config.' };
|
|
58
|
+
}
|
|
59
|
+
if (kind === 'config' && opts.configType === undefined) {
|
|
60
|
+
return {
|
|
61
|
+
error: 'The config source requires --config-type <file#export> (e.g. ./src/config.ts#MyConfig).'
|
|
62
|
+
};
|
|
54
63
|
}
|
|
55
64
|
if (kind === 'mcp' && opts.mcp === undefined) {
|
|
56
65
|
return { error: 'The mcp source requires --mcp <path> (path to mcp.json or MCP config file).' };
|
|
@@ -61,6 +70,23 @@ Pass ${SOURCE_FORM} to choose one.`
|
|
|
61
70
|
export function resolveModelClientKind(raw) {
|
|
62
71
|
return raw ?? 'api';
|
|
63
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Parse a `--config-type <file#export>` spec (e.g. `./src/config.ts#MyConfig`)
|
|
75
|
+
* into its file and exported type name. Pure and unit-testable. The `#` is the
|
|
76
|
+
* required separator; both sides must be non-empty (mirrors `--program`'s
|
|
77
|
+
* `file#export` form). `cwd` resolves a relative file to an absolute path.
|
|
78
|
+
*/
|
|
79
|
+
export function parseConfigTypeSpec(spec, cwd) {
|
|
80
|
+
const hashIdx = spec.lastIndexOf('#');
|
|
81
|
+
if (hashIdx <= 0 || hashIdx === spec.length - 1) {
|
|
82
|
+
return {
|
|
83
|
+
error: `--config-type must be <file>#<ExportName> (e.g. ./src/config.ts#MyConfig), got: ${spec}`
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const file = spec.slice(0, hashIdx);
|
|
87
|
+
const typeName = spec.slice(hashIdx + 1);
|
|
88
|
+
return { configFile: isAbsolute(file) ? file : join(cwd, file), typeName };
|
|
89
|
+
}
|
|
64
90
|
/**
|
|
65
91
|
* The body of the `refine` command action, extracted so it can be reused
|
|
66
92
|
* programmatically (e.g. by `skillit init`) without argv gymnastics. Sets
|
|
@@ -99,6 +125,22 @@ export async function runRefineCommand(opts) {
|
|
|
99
125
|
source = new CliRefineSource({ program, sourceGlob, cwd });
|
|
100
126
|
reportInPlace = true;
|
|
101
127
|
}
|
|
128
|
+
else if (resolution.kind === 'config') {
|
|
129
|
+
// --config-type guaranteed present by resolveRefineSource.
|
|
130
|
+
const parsed = parseConfigTypeSpec(opts.configType, cwd);
|
|
131
|
+
if ('error' in parsed) {
|
|
132
|
+
console.error(parsed.error);
|
|
133
|
+
process.exitCode = 1;
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
source = new ConfigRefineSource({
|
|
137
|
+
configFile: parsed.configFile,
|
|
138
|
+
typeName: parsed.typeName,
|
|
139
|
+
name: parsed.typeName,
|
|
140
|
+
...(opts.ground?.length ? { groundingGlobs: opts.ground } : {})
|
|
141
|
+
});
|
|
142
|
+
reportInPlace = true;
|
|
143
|
+
}
|
|
102
144
|
else {
|
|
103
145
|
// mcp source: --mcp guaranteed present by resolveRefineSource.
|
|
104
146
|
const mcpPath = opts.mcp;
|
|
@@ -129,28 +171,16 @@ Use --mode build (TypeScript MCP server you own)
|
|
|
129
171
|
else {
|
|
130
172
|
console.log('Refining in runtime mode (overlay)');
|
|
131
173
|
}
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
source = new TypeScriptMcpRefineSource({
|
|
143
|
-
transport: entry.transport,
|
|
144
|
-
sourceGlob
|
|
145
|
-
});
|
|
146
|
-
reportInPlace = true;
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
source = new McpRefineSource({
|
|
150
|
-
overlayPath,
|
|
151
|
-
extract: () => extractMcpSkill({ transport: entry.transport })
|
|
152
|
-
});
|
|
153
|
-
}
|
|
174
|
+
const sourceGlob = opts.sourceGlob ?? join(cwd, '**', '*.ts');
|
|
175
|
+
source = await createMcpRefineSource({
|
|
176
|
+
mcpPath,
|
|
177
|
+
mode,
|
|
178
|
+
cwd,
|
|
179
|
+
serverName: opts.server,
|
|
180
|
+
overlayPath,
|
|
181
|
+
sourceGlob
|
|
182
|
+
});
|
|
183
|
+
reportInPlace = mode === 'build';
|
|
154
184
|
const result = await runRefine(source, model, maxIterations, itemsPerIteration);
|
|
155
185
|
reportResult(result, { reportInPlace, overlayPath });
|
|
156
186
|
process.exitCode = result.passed ? 0 : 1;
|
|
@@ -163,8 +193,10 @@ Use --mode build (TypeScript MCP server you own)
|
|
|
163
193
|
export function buildRefineCommand() {
|
|
164
194
|
return new Command('refine')
|
|
165
195
|
.description('Autonomously improve a skill via the audit→draft→review loop')
|
|
166
|
-
.option('--source <kind>', 'cli | mcp | typedoc (auto-detected if omitted)')
|
|
196
|
+
.option('--source <kind>', 'cli | mcp | typedoc | config (auto-detected if omitted)')
|
|
167
197
|
.option('--program <file#export>', 'commander program entry (cli source)')
|
|
198
|
+
.option('--config-type <file#export>', 'config type entry (config source)')
|
|
199
|
+
.option('--ground <glob>', 'glob(s) of code that consumes the config — fed to the model so runtime claims are grounded (repeatable; config source)', (val, prev) => [...prev, val], [])
|
|
168
200
|
.option('--mcp <path>', 'path to mcp.json or MCP config file')
|
|
169
201
|
.option('--server <name>', 'server name within the config (defaults to first enabled)')
|
|
170
202
|
.option('--overlay <path>', 'path to overlay JSON file (runtime mode only)')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refine.js","sourceRoot":"","sources":["../../src/commands/refine.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"refine.js","sourceRoot":"","sources":["../../src/commands/refine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { RefineSourceKind } from './detect-source.js';
|
|
2
|
+
/** Options for CLI-path skill generation. */
|
|
3
|
+
export interface GenerateSkillOpts {
|
|
4
|
+
/** Project root being generated for. */
|
|
5
|
+
cwd: string;
|
|
6
|
+
/** Resolved project nature. */
|
|
7
|
+
nature: RefineSourceKind;
|
|
8
|
+
/** Skill name (consumer package name, scope stripped). */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Absolute output directory (`<cwd>/<out>`). */
|
|
11
|
+
outDir: string;
|
|
12
|
+
/** `--program <file#export>` entry, if provided. */
|
|
13
|
+
program?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Options for config-path skill generation. */
|
|
16
|
+
export interface GenerateConfigSkillOpts {
|
|
17
|
+
/** Absolute path to the TypeScript file declaring the config type. */
|
|
18
|
+
configFile: string;
|
|
19
|
+
/** Exported interface / type-alias name to document. */
|
|
20
|
+
typeName: string;
|
|
21
|
+
/**
|
|
22
|
+
* Explicit skill name. Optional — when omitted, `ConfigRefineSource` derives
|
|
23
|
+
* it from the package nearest the config file (scope-stripped), falling back
|
|
24
|
+
* to `typeName`. Pass this only to override that (e.g. a forced skill name).
|
|
25
|
+
*/
|
|
26
|
+
name?: string;
|
|
27
|
+
/** Absolute output directory (`<cwd>/<out>`). */
|
|
28
|
+
outDir: string;
|
|
29
|
+
}
|
|
30
|
+
/** Options for typedoc-path skill generation. */
|
|
31
|
+
export interface GenerateTypeDocSkillOpts {
|
|
32
|
+
/** Package root. */
|
|
33
|
+
cwd: string;
|
|
34
|
+
/** Entry-point source files (absolute). */
|
|
35
|
+
entryPoints: string[];
|
|
36
|
+
/** Path to tsconfig.json. */
|
|
37
|
+
tsconfig: string;
|
|
38
|
+
/** Absolute output directory. */
|
|
39
|
+
outDir: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* TypeDoc-path skill generation — delegates to the plugin pipeline.
|
|
43
|
+
*
|
|
44
|
+
* `@skillit/typedoc` (and its `typedoc` peer) is imported lazily so the CLI
|
|
45
|
+
* does not load TypeDoc at startup: only the typedoc source path pays that
|
|
46
|
+
* cost, and cli/config/mcp consumers need not install the `typedoc` peer.
|
|
47
|
+
*/
|
|
48
|
+
export declare function generateTypeDocSkill(opts: GenerateTypeDocSkillOpts): Promise<void>;
|
|
49
|
+
/** Options for mcp-path skill generation. */
|
|
50
|
+
export interface GenerateMcpSkillOpts {
|
|
51
|
+
/** Path to mcp.json / MCP config file. */
|
|
52
|
+
mcpPath: string;
|
|
53
|
+
/** Server entry to select; defaults to the first enabled entry. */
|
|
54
|
+
server?: string;
|
|
55
|
+
/** Absolute output directory. */
|
|
56
|
+
outDir: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* MCP-path skill generation — lazily imports `@skillit/mcp` so the CLI does not
|
|
60
|
+
* load the MCP stack (and its SDK) at startup for non-mcp commands.
|
|
61
|
+
*/
|
|
62
|
+
export declare function generateMcpSkill(opts: GenerateMcpSkillOpts): Promise<void>;
|
|
63
|
+
/** CLI-path skill generation: loadProgram → extractCliSkill → writeCliSkill. */
|
|
64
|
+
export declare function generateCliSkill(opts: GenerateSkillOpts): Promise<void>;
|
|
65
|
+
/** Config-path skill generation: extract the surface → render → write. */
|
|
66
|
+
export declare function generateConfigSkill(opts: GenerateConfigSkillOpts): Promise<void>;
|
|
67
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAGA,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,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;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;CAChB;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;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxF;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;CAChB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAED,gFAAgF;AAChF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7E;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAetF"}
|
package/dist/generate.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// packages/client/src/generate.ts
|
|
2
|
+
import { extractCliSkill, loadProgram, writeCliSkill } from '@skillit/cli';
|
|
3
|
+
import { ConfigRefineSource, renderSkills, writeSkills } from '@skillit/core';
|
|
4
|
+
/**
|
|
5
|
+
* TypeDoc-path skill generation — delegates to the plugin pipeline.
|
|
6
|
+
*
|
|
7
|
+
* `@skillit/typedoc` (and its `typedoc` peer) is imported lazily so the CLI
|
|
8
|
+
* does not load TypeDoc at startup: only the typedoc source path pays that
|
|
9
|
+
* cost, and cli/config/mcp consumers need not install the `typedoc` peer.
|
|
10
|
+
*/
|
|
11
|
+
export async function generateTypeDocSkill(opts) {
|
|
12
|
+
const { generateTypeDocSkills } = await import('@skillit/typedoc');
|
|
13
|
+
await generateTypeDocSkills({
|
|
14
|
+
entryPoints: opts.entryPoints,
|
|
15
|
+
tsconfig: opts.tsconfig,
|
|
16
|
+
cwd: opts.cwd,
|
|
17
|
+
outDir: opts.outDir
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* MCP-path skill generation — lazily imports `@skillit/mcp` so the CLI does not
|
|
22
|
+
* load the MCP stack (and its SDK) at startup for non-mcp commands.
|
|
23
|
+
*/
|
|
24
|
+
export async function generateMcpSkill(opts) {
|
|
25
|
+
const { generateMcpSkill: run } = await import('@skillit/mcp');
|
|
26
|
+
await run({
|
|
27
|
+
mcpPath: opts.mcpPath,
|
|
28
|
+
...(opts.server !== undefined ? { serverName: opts.server } : {}),
|
|
29
|
+
outDir: opts.outDir
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** CLI-path skill generation: loadProgram → extractCliSkill → writeCliSkill. */
|
|
33
|
+
export async function generateCliSkill(opts) {
|
|
34
|
+
const program = await loadProgram({ program: opts.program, cwd: opts.cwd });
|
|
35
|
+
const skill = await extractCliSkill({ program, metadata: { name: opts.name } });
|
|
36
|
+
writeCliSkill(skill, { outDir: opts.outDir });
|
|
37
|
+
}
|
|
38
|
+
/** Config-path skill generation: extract the surface → render → write. */
|
|
39
|
+
export async function generateConfigSkill(opts) {
|
|
40
|
+
const skill = await new ConfigRefineSource({
|
|
41
|
+
configFile: opts.configFile,
|
|
42
|
+
typeName: opts.typeName,
|
|
43
|
+
// Only pass an explicit name when provided; otherwise let ConfigRefineSource
|
|
44
|
+
// derive it (package nearest the config file → typeName).
|
|
45
|
+
...(opts.name !== undefined ? { name: opts.name } : {}),
|
|
46
|
+
// A config-specific description so the rendered skill describes the config
|
|
47
|
+
// surface, not the package blurb (which is about the whole package).
|
|
48
|
+
description: `Configuration options for ${opts.typeName}.`
|
|
49
|
+
}).extract();
|
|
50
|
+
// Config skills are content-rich (per-option routing + example); raise the
|
|
51
|
+
// per-reference token budget so a multi-option surface isn't truncated.
|
|
52
|
+
const rendered = renderSkills([skill], { outDir: opts.outDir, maxTokens: 16000 });
|
|
53
|
+
writeSkills(rendered, { outDir: opts.outDir });
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA6C9E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAA8B;IACvE,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACnE,MAAM,qBAAqB,CAAC;QAC1B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;AACL,CAAC;AAYD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAA0B;IAC/D,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,GAAG,CAAC;QACR,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAuB;IAC5D,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChF,aAAa,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA6B;IACrE,MAAM,KAAK,GAAG,MAAM,IAAI,kBAAkB,CAAC;QACzC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,6EAA6E;QAC7E,0DAA0D;QAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,2EAA2E;QAC3E,qEAAqE;QACrE,WAAW,EAAE,6BAA6B,IAAI,CAAC,QAAQ,GAAG;KAC3D,CAAC,CAAC,OAAO,EAAE,CAAC;IACb,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -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
|