@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
@@ -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"}
@@ -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"}
@@ -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
- 'Write only the annotation content — no code fences, no extra commentary.'
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.trim();
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":"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"}
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,UAyB3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UA2B1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,UA4B5B,CAAC;AAQF,wBAAgB,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,UAAU,CAE/D"}
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
- args: ['-p', '--output-format', 'json', '--model', model],
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
- return { cmd: 'copilot', args: ['--output-format', 'json', '--no-color'], input: prompt };
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":"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"}
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;AAE5F,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,CAG9C;IAEK,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAGtD;CACF"}
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
- return result.trim();
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,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,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,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,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"}
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,2 @@
1
+ export declare function generatePostinstallScript(): string;
2
+ //# sourceMappingURL=postinstall-template.d.ts.map
@@ -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"}
@@ -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,6 @@
1
+ /** Resolve TypeDoc entry points + tsconfig for a package dir (shared by gen + audit). */
2
+ export declare function resolveTypeDocEntry(cwd: string): {
3
+ entryPoints: string[];
4
+ tsconfig: string;
5
+ };
6
+ //# sourceMappingURL=typedoc-entry.d.ts.map
@@ -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.2.0",
4
- "description": "Anthropic model client + skillit CLI (refine command)",
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.100.0",
21
- "commander": "^14.0.3",
22
- "@skillit/mcp": "0.3.0",
23
- "@skillit/core": "1.5.0",
24
- "@skillit/cli": "0.4.0"
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",