@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.
Files changed (84) hide show
  1. package/README.md +40 -0
  2. package/dist/bin.d.ts +2 -1
  3. package/dist/bin.d.ts.map +1 -1
  4. package/dist/bin.js +21 -13
  5. package/dist/bin.js.map +1 -1
  6. package/dist/commands/audit.d.ts +34 -0
  7. package/dist/commands/audit.d.ts.map +1 -0
  8. package/dist/commands/audit.js +139 -0
  9. package/dist/commands/audit.js.map +1 -0
  10. package/dist/commands/gen.d.ts +21 -0
  11. package/dist/commands/gen.d.ts.map +1 -0
  12. package/dist/commands/gen.js +112 -0
  13. package/dist/commands/gen.js.map +1 -0
  14. package/dist/commands/init.d.ts +8 -22
  15. package/dist/commands/init.d.ts.map +1 -1
  16. package/dist/commands/init.js +39 -81
  17. package/dist/commands/init.js.map +1 -1
  18. package/dist/commands/refine.d.ts +34 -2
  19. package/dist/commands/refine.d.ts.map +1 -1
  20. package/dist/commands/refine.js +61 -29
  21. package/dist/commands/refine.js.map +1 -1
  22. package/dist/detect-source.d.ts.map +1 -1
  23. package/dist/detect-source.js +12 -5
  24. package/dist/detect-source.js.map +1 -1
  25. package/dist/generate.d.ts +74 -0
  26. package/dist/generate.d.ts.map +1 -0
  27. package/dist/generate.js +68 -0
  28. package/dist/generate.js.map +1 -0
  29. package/dist/mcp-mode.d.ts +22 -0
  30. package/dist/mcp-mode.d.ts.map +1 -0
  31. package/dist/mcp-mode.js +27 -0
  32. package/dist/mcp-mode.js.map +1 -0
  33. package/dist/model/anthropic.d.ts +11 -0
  34. package/dist/model/anthropic.d.ts.map +1 -1
  35. package/dist/model/anthropic.js +16 -2
  36. package/dist/model/anthropic.js.map +1 -1
  37. package/dist/model/cli/adapters.d.ts.map +1 -1
  38. package/dist/model/cli/adapters.js +35 -2
  39. package/dist/model/cli/adapters.js.map +1 -1
  40. package/dist/model/cli/cli-client.d.ts.map +1 -1
  41. package/dist/model/cli/cli-client.js +4 -2
  42. package/dist/model/cli/cli-client.js.map +1 -1
  43. package/dist/postinstall-template.d.ts +2 -0
  44. package/dist/postinstall-template.d.ts.map +1 -0
  45. package/dist/postinstall-template.js +61 -0
  46. package/dist/postinstall-template.js.map +1 -0
  47. package/dist/program.d.ts +12 -0
  48. package/dist/program.d.ts.map +1 -0
  49. package/dist/program.js +42 -0
  50. package/dist/program.js.map +1 -0
  51. package/dist/typedoc-entry.d.ts +6 -0
  52. package/dist/typedoc-entry.d.ts.map +1 -0
  53. package/dist/typedoc-entry.js +14 -0
  54. package/dist/typedoc-entry.js.map +1 -0
  55. package/package.json +18 -7
  56. package/skills/skillit-bootstrap/SKILL.md +115 -0
  57. package/skills/skillit-bootstrap/references/surface-routing.md +108 -0
  58. package/CHANGELOG.md +0 -32
  59. package/scripts/gen-refine-cli-skill.mjs +0 -48
  60. package/src/__tests__/anthropic-model.test.ts +0 -45
  61. package/src/__tests__/anthropic-prompt.test.ts +0 -102
  62. package/src/__tests__/cli-adapters.test.ts +0 -119
  63. package/src/__tests__/cli-client.test.ts +0 -58
  64. package/src/__tests__/cli-run.test.ts +0 -52
  65. package/src/__tests__/detect-mode.test.ts +0 -114
  66. package/src/__tests__/detect-source.test.ts +0 -158
  67. package/src/__tests__/fixtures/bin-with-program.mjs +0 -6
  68. package/src/__tests__/init.test.ts +0 -218
  69. package/src/__tests__/model-client-factory.test.ts +0 -28
  70. package/src/__tests__/refine-resolve.test.ts +0 -72
  71. package/src/bin.ts +0 -18
  72. package/src/commands/init.ts +0 -207
  73. package/src/commands/refine.ts +0 -261
  74. package/src/detect-mode.ts +0 -94
  75. package/src/detect-source.ts +0 -123
  76. package/src/index.ts +0 -3
  77. package/src/model/anthropic.ts +0 -116
  78. package/src/model/cli/adapters.ts +0 -178
  79. package/src/model/cli/cli-client.ts +0 -52
  80. package/src/model/cli/run.ts +0 -83
  81. package/src/model/model-client-factory.ts +0 -62
  82. package/src/model/models.ts +0 -7
  83. package/tsconfig.build.json +0 -9
  84. package/tsconfig.json +0 -4
@@ -1,11 +1,10 @@
1
1
  // packages/client/src/commands/init.ts
2
2
  import { spawn } from 'node:child_process';
3
- import { readFile } from 'node:fs/promises';
3
+ import { readFile, writeFile } from 'node:fs/promises';
4
4
  import { join } from 'node:path';
5
5
  import { Command } from 'commander';
6
- import { extractCliSkill, loadProgram, writeCliSkill } from '@skillit/cli';
7
6
  import { detectPackageManager, detectProjectNature } from '../detect-source.js';
8
- import { runRefineCommand } from './refine.js';
7
+ import { generatePostinstallScript } from '../postinstall-template.js';
9
8
  const VALID_SOURCES = ['cli', 'mcp', 'typedoc'];
10
9
  /** Map a project nature to the `@skillit/*` package that handles it. */
11
10
  function natureToPackage(nature) {
@@ -23,23 +22,19 @@ function addDevCommand(pm, pkg) {
23
22
  return `yarn add -D ${pkg}`;
24
23
  return `npm install -D ${pkg}`;
25
24
  }
26
- /** Strip a leading `@scope/` from a package name for use as a skill dir name. */
27
- function skillNameFrom(packageName) {
28
- const slash = packageName.indexOf('/');
29
- if (packageName.startsWith('@') && slash !== -1) {
30
- return packageName.slice(slash + 1);
31
- }
32
- return packageName;
33
- }
34
- async function readPackageName(cwd) {
35
- try {
36
- const raw = await readFile(join(cwd, 'package.json'), 'utf8');
37
- const pkg = JSON.parse(raw);
38
- return pkg.name ?? 'skill';
39
- }
40
- catch {
41
- return 'skill';
25
+ async function defaultWirePostinstall(cwd) {
26
+ const pkgPath = join(cwd, 'package.json');
27
+ const raw = await readFile(pkgPath, 'utf8');
28
+ const pkg = JSON.parse(raw);
29
+ if (pkg.scripts?.['postinstall']) {
30
+ console.warn(`Skipping postinstall wiring: scripts.postinstall is already set to "${pkg.scripts['postinstall']}". Add "node ./skillit-postinstall.cjs" to it manually if needed.`);
31
+ return;
42
32
  }
33
+ await writeFile(join(cwd, 'skillit-postinstall.cjs'), generatePostinstallScript(), 'utf8');
34
+ if (!pkg.scripts)
35
+ pkg.scripts = {};
36
+ pkg.scripts['postinstall'] = 'node ./skillit-postinstall.cjs';
37
+ await writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf8');
43
38
  }
44
39
  /** Default install: spawn the package manager's add-dev command, cwd-scoped. */
45
40
  function defaultRunInstall(pkg, pm, cwd) {
@@ -56,30 +51,25 @@ function defaultRunInstall(pkg, pm, cwd) {
56
51
  });
57
52
  });
58
53
  }
59
- /** Default CLI-path skill generation: loadProgram → extractCliSkill → writeCliSkill. */
60
- async function defaultGenerateSkill(opts) {
61
- const program = await loadProgram({ program: opts.program, cwd: opts.cwd });
62
- const skill = await extractCliSkill({ program, metadata: { name: opts.name } });
63
- writeCliSkill(skill, { outDir: opts.outDir });
64
- }
65
- /** Default refine dispatch: reuse the shared refine command body. */
66
- function defaultRunRefine(opts) {
67
- return runRefineCommand(opts);
68
- }
69
54
  export function buildInitCommand(deps = {}) {
70
55
  const runInstall = deps.runInstall ?? defaultRunInstall;
71
- const generateSkill = deps.generateSkill ?? defaultGenerateSkill;
72
- const runRefine = deps.runRefine ?? defaultRunRefine;
56
+ const wirePostinstall = deps.wirePostinstall ?? defaultWirePostinstall;
73
57
  return new Command('init')
74
- .description('Detect the project, install the right @skillit package, generate + refine a skill')
75
- .option('--source <kind>', 'cli | mcp | typedoc (auto-detected if omitted)')
76
- .option('--program <file#export>', 'commander program entry (cli source)')
77
- .option('--out <dir>', 'output directory for the generated skill', 'skills')
78
- .option('--model-client <kind>', 'model backend for refine: api | claude | codex | copilot', 'api')
79
- .option('--model-cli-timeout <ms>', 'per-call timeout for cli model backends (ms)')
58
+ .description('Detect the project and install the right @skillit package (then run `skillit gen`)')
59
+ .option('--source <kind>', 'cli | mcp | typedoc | config (auto-detected if omitted)')
60
+ .option('--config-type <file#export>', 'config type entry (config source)')
80
61
  .action(async (opts) => {
81
62
  const cwd = process.cwd();
82
- // 1. Resolve nature: explicit --source wins, else detect.
63
+ // Config source is built into the client — nothing to install. Just point
64
+ // the user at `skillit gen`.
65
+ if (opts.source === 'config') {
66
+ if (opts.configType === undefined) {
67
+ throw new Error('The config source requires --config-type <file#export> (e.g. ./src/config.ts#MyConfig).');
68
+ }
69
+ console.log(`Config source needs no install. Generate the skill with:\n skillit gen --source config --config-type ${opts.configType}`);
70
+ return;
71
+ }
72
+ // Resolve nature: explicit --source wins, else detect.
83
73
  let nature;
84
74
  if (opts.source !== undefined) {
85
75
  if (!VALID_SOURCES.includes(opts.source)) {
@@ -90,7 +80,7 @@ export function buildInitCommand(deps = {}) {
90
80
  else {
91
81
  nature = await detectProjectNature(cwd);
92
82
  }
93
- // 2 + 3. Map nature → package, install via the detected package manager.
83
+ // Map nature → package, install via the detected package manager.
94
84
  const pkg = natureToPackage(nature);
95
85
  const pm = detectPackageManager(cwd);
96
86
  const command = addDevCommand(pm, pkg);
@@ -99,53 +89,21 @@ export function buildInitCommand(deps = {}) {
99
89
  }
100
90
  catch (error) {
101
91
  const reason = error instanceof Error ? error.message : String(error);
102
- // Surface the exact command and STOP — do not generate or refine.
103
92
  throw new Error(`Install failed (${reason}). Run it manually:\n ${command}`);
104
93
  }
105
- // 4 + 5. Generate + refine — CLI-first: only the cli source is fully
106
- // automated this pass. For mcp/typedoc, skip both and print actionable
107
- // next-step guidance rather than silently no-opping (refine needs
108
- // source-specific flags like --mcp that init can't supply yet).
94
+ // Source-aware next step: `skillit gen` generates the cli source today;
95
+ // mcp uses `skillit mcp extract` and typedoc the TypeDoc plugin (gen
96
+ // support for those lands in a later phase). Don't point users at a
97
+ // command that would immediately error for their source.
109
98
  if (nature === 'cli') {
110
- const outDir = join(cwd, opts.out);
111
- const name = skillNameFrom(await readPackageName(cwd));
112
- const generateOpts = {
113
- cwd,
114
- nature,
115
- name,
116
- outDir,
117
- ...(opts.program !== undefined ? { program: opts.program } : {})
118
- };
119
- try {
120
- await generateSkill(generateOpts);
121
- }
122
- catch (error) {
123
- // The cli source only auto-loads a commander program. A yargs/other
124
- // CLI (still classified as 'cli') can't be generated yet — degrade
125
- // gracefully: surface the reason and how to proceed, do NOT crash,
126
- // and do NOT run refine/regenerate on a failed generate.
127
- const reason = error instanceof Error ? error.message : String(error);
128
- console.log(`Installed ${pkg}, but couldn't auto-load a commander program (${reason}). ` +
129
- `If this is a commander CLI, run: skillit refine --source cli --program <file#export>. ` +
130
- `(yargs/other CLIs aren't auto-generated yet.)`);
131
- return;
132
- }
133
- await runRefine({
134
- source: nature,
135
- ...(opts.program !== undefined ? { program: opts.program } : {}),
136
- ...(opts.modelClient !== undefined ? { modelClient: opts.modelClient } : {}),
137
- ...(opts.modelCliTimeout !== undefined ? { modelCliTimeout: opts.modelCliTimeout } : {}),
138
- maxIterations: '5',
139
- items: '5'
140
- });
141
- // refine only writes JSDoc back into source files; regenerate so the
142
- // on-disk skill reflects the freshly-written annotations. Runs only
143
- // after a successful refine (a refine throw propagates above).
144
- await generateSkill(generateOpts);
99
+ await wirePostinstall(cwd);
100
+ console.log(`Installed ${pkg}. Generate the skill with:\n skillit gen --source cli`);
101
+ }
102
+ else if (nature === 'mcp') {
103
+ console.log(`Installed ${pkg}. Generate the skill with:\n skillit mcp extract\n(skillit gen support for the mcp source lands in a later phase.)`);
145
104
  }
146
105
  else {
147
- const extra = nature === 'mcp' ? ' [--mcp <path>]' : '';
148
- console.log(`Installed ${pkg}. Skill generation + refine for the ${nature} source isn't automated yet — run: skillit refine --source ${nature}${extra}`);
106
+ console.log(`Installed ${pkg}. Generate the skill by running TypeDoc with the plugin enabled.\n(skillit gen support for the typedoc source lands in a later phase.)`);
149
107
  }
150
108
  });
151
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
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
- /** Parsed options for the `refine` action / {@link runRefineCommand}. */
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;CACd;AAED,qFAAqF;AACrF,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,KAAK,GAAG,KAAK,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAKjF;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,oBAAoB,EAC9B,UAAU,GAAE,SAAS,gBAAgB,EAAO,GAC3C,sBAAsB,CA4BxB;AAED,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,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,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoG7E;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAe5C"}
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"}
@@ -1,12 +1,12 @@
1
1
  // packages/client/src/commands/refine.ts
2
2
  import { Command } from 'commander';
3
- import { McpRefineSource, TypeScriptMcpRefineSource, extractMcpSkill, readMcpConfigFile } from '@skillit/mcp';
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
- const VALID_SOURCES = ['cli', 'mcp', 'typedoc'];
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 ${SOURCE_FORM}.` };
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 entries = await readMcpConfigFile(mcpPath);
133
- const entry = opts.server
134
- ? entries.find((e) => e.name === opts.server)
135
- : entries.find((e) => !e.disabled);
136
- if (!entry) {
137
- const name = opts.server ? `"${opts.server}"` : 'any enabled server';
138
- throw new Error(`Could not find ${name} in ${mcpPath}`);
139
- }
140
- if (mode === 'build') {
141
- const sourceGlob = opts.sourceGlob ?? join(cwd, '**', '*.ts');
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":"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"}
1
+ {"version":3,"file":"refine.js","sourceRoot":"","sources":["../../src/commands/refine.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,CAIzE"}
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"}
@@ -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
- if (existsSync(join(cwd, 'pnpm-lock.yaml')))
119
- return 'pnpm';
120
- if (existsSync(join(cwd, 'yarn.lock')))
121
- return 'yarn';
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":"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"}
1
+ {"version":3,"file":"detect-source.js","sourceRoot":"","sources":["../src/detect-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { type CliInvocationMode } from '@skillit/cli';
2
+ export type { CliInvocationMode } from '@skillit/cli';
3
+ import type { RefineSourceKind } from './detect-source.js';
4
+ /** Options for CLI-path skill generation. */
5
+ export interface GenerateSkillOpts {
6
+ /** Project root being generated for. */
7
+ cwd: string;
8
+ /** Resolved project nature. */
9
+ nature: RefineSourceKind;
10
+ /** Skill name (consumer package name, scope stripped). */
11
+ name: string;
12
+ /** Absolute output directory (`<cwd>/<out>`). */
13
+ outDir: string;
14
+ /** `--program <file#export>` entry, if provided. */
15
+ program?: string;
16
+ /**
17
+ * Override the invocation mode for command examples.
18
+ * Defaults to `npx` for public packages with a `bin` field, `global` otherwise.
19
+ */
20
+ invocationMode?: CliInvocationMode;
21
+ }
22
+ /** Options for config-path skill generation. */
23
+ export interface GenerateConfigSkillOpts {
24
+ /** Absolute path to the TypeScript file declaring the config type. */
25
+ configFile: string;
26
+ /** Exported interface / type-alias name to document. */
27
+ typeName: string;
28
+ /**
29
+ * Explicit skill name. Optional — when omitted, `ConfigRefineSource` derives
30
+ * it from the package nearest the config file (scope-stripped), falling back
31
+ * to `typeName`. Pass this only to override that (e.g. a forced skill name).
32
+ */
33
+ name?: string;
34
+ /** Absolute output directory (`<cwd>/<out>`). */
35
+ outDir: string;
36
+ }
37
+ /** Options for typedoc-path skill generation. */
38
+ export interface GenerateTypeDocSkillOpts {
39
+ /** Package root. */
40
+ cwd: string;
41
+ /** Entry-point source files (absolute). */
42
+ entryPoints: string[];
43
+ /** Path to tsconfig.json. */
44
+ tsconfig: string;
45
+ /** Absolute output directory. */
46
+ outDir: string;
47
+ }
48
+ /**
49
+ * TypeDoc-path skill generation — delegates to the plugin pipeline.
50
+ *
51
+ * `@skillit/typedoc` (and its `typedoc` peer) is imported lazily so the CLI
52
+ * does not load TypeDoc at startup: only the typedoc source path pays that
53
+ * cost, and cli/config/mcp consumers need not install the `typedoc` peer.
54
+ */
55
+ export declare function generateTypeDocSkill(opts: GenerateTypeDocSkillOpts): Promise<void>;
56
+ /** Options for mcp-path skill generation. */
57
+ export interface GenerateMcpSkillOpts {
58
+ /** Path to mcp.json / MCP config file. */
59
+ mcpPath: string;
60
+ /** Server entry to select; defaults to the first enabled entry. */
61
+ server?: string;
62
+ /** Absolute output directory. */
63
+ outDir: string;
64
+ }
65
+ /**
66
+ * MCP-path skill generation — lazily imports `@skillit/mcp` so the CLI does not
67
+ * load the MCP stack (and its SDK) at startup for non-mcp commands.
68
+ */
69
+ export declare function generateMcpSkill(opts: GenerateMcpSkillOpts): Promise<void>;
70
+ /** CLI-path skill generation: loadProgram → extractCliSkill → applyNpxMode → writeCliSkill. */
71
+ export declare function generateCliSkill(opts: GenerateSkillOpts): Promise<void>;
72
+ /** Config-path skill generation: extract the surface → render → write. */
73
+ export declare function generateConfigSkill(opts: GenerateConfigSkillOpts): Promise<void>;
74
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAUtB,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,0DAA0D;IAC1D,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;CACpC;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,+FAA+F;AAC/F,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7E;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBtF"}