agentic-skill-mill 1.0.3

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 (71) hide show
  1. package/README.md +135 -0
  2. package/dist/cache/cache-manager.d.ts +27 -0
  3. package/dist/cache/cache-manager.d.ts.map +1 -0
  4. package/dist/cache/cache-manager.js +139 -0
  5. package/dist/cache/cache-manager.js.map +1 -0
  6. package/dist/cli/commands/check-exports.d.ts +6 -0
  7. package/dist/cli/commands/check-exports.d.ts.map +1 -0
  8. package/dist/cli/commands/check-exports.js +7 -0
  9. package/dist/cli/commands/check-exports.js.map +1 -0
  10. package/dist/cli/commands/list-project.d.ts +6 -0
  11. package/dist/cli/commands/list-project.d.ts.map +1 -0
  12. package/dist/cli/commands/list-project.js +7 -0
  13. package/dist/cli/commands/list-project.js.map +1 -0
  14. package/dist/cli/commands/scaffold.d.ts +6 -0
  15. package/dist/cli/commands/scaffold.d.ts.map +1 -0
  16. package/dist/cli/commands/scaffold.js +11 -0
  17. package/dist/cli/commands/scaffold.js.map +1 -0
  18. package/dist/cli/commands/validate-manifest.d.ts +6 -0
  19. package/dist/cli/commands/validate-manifest.d.ts.map +1 -0
  20. package/dist/cli/commands/validate-manifest.js +7 -0
  21. package/dist/cli/commands/validate-manifest.js.map +1 -0
  22. package/dist/cli/commands/validate-skill.d.ts +6 -0
  23. package/dist/cli/commands/validate-skill.d.ts.map +1 -0
  24. package/dist/cli/commands/validate-skill.js +8 -0
  25. package/dist/cli/commands/validate-skill.js.map +1 -0
  26. package/dist/cli/index.d.ts +3 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +268 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/cli/output-formatter.d.ts +6 -0
  31. package/dist/cli/output-formatter.d.ts.map +1 -0
  32. package/dist/cli/output-formatter.js +19 -0
  33. package/dist/cli/output-formatter.js.map +1 -0
  34. package/dist/core/check-exports.d.ts +21 -0
  35. package/dist/core/check-exports.d.ts.map +1 -0
  36. package/dist/core/check-exports.js +67 -0
  37. package/dist/core/check-exports.js.map +1 -0
  38. package/dist/core/list-project.d.ts +31 -0
  39. package/dist/core/list-project.d.ts.map +1 -0
  40. package/dist/core/list-project.js +118 -0
  41. package/dist/core/list-project.js.map +1 -0
  42. package/dist/core/scaffold.d.ts +24 -0
  43. package/dist/core/scaffold.d.ts.map +1 -0
  44. package/dist/core/scaffold.js +168 -0
  45. package/dist/core/scaffold.js.map +1 -0
  46. package/dist/core/validate-manifest.d.ts +21 -0
  47. package/dist/core/validate-manifest.d.ts.map +1 -0
  48. package/dist/core/validate-manifest.js +151 -0
  49. package/dist/core/validate-manifest.js.map +1 -0
  50. package/dist/core/validate-skill.d.ts +24 -0
  51. package/dist/core/validate-skill.d.ts.map +1 -0
  52. package/dist/core/validate-skill.js +149 -0
  53. package/dist/core/validate-skill.js.map +1 -0
  54. package/dist/errors/types.d.ts +19 -0
  55. package/dist/errors/types.d.ts.map +1 -0
  56. package/dist/errors/types.js +40 -0
  57. package/dist/errors/types.js.map +1 -0
  58. package/dist/index.d.ts +15 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +13 -0
  61. package/dist/index.js.map +1 -0
  62. package/package.json +56 -0
  63. package/skill/build/compile.mjs +385 -0
  64. package/skill/build/manifest.json +29 -0
  65. package/skill/fragments/meta/architecture-overview.md +37 -0
  66. package/skill/fragments/meta/cli-command-pattern.md +83 -0
  67. package/skill/fragments/meta/core-module-pattern.md +38 -0
  68. package/skill/fragments/meta/fragment-composition.md +40 -0
  69. package/skill/fragments/meta/rename-workflow.md +51 -0
  70. package/skill/fragments/meta/research-to-code.md +44 -0
  71. package/skill/skills/agentic-skill-mill/agentic-skill-mill.md +133 -0
@@ -0,0 +1,268 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { validateManifestCommand } from './commands/validate-manifest.js';
5
+ import { validateSkillCommand } from './commands/validate-skill.js';
6
+ import { listProjectCommand } from './commands/list-project.js';
7
+ import { scaffoldCommand } from './commands/scaffold.js';
8
+ import { checkExportsCommand } from './commands/check-exports.js';
9
+ import { AppError } from '../errors/types.js';
10
+ const program = new Command()
11
+ .name('skillmill')
12
+ .version('1.0.0', '-v, --version')
13
+ .description('Agentic Skill Mill -- forge and refine skill-system-template projects');
14
+ // ---- Command: inspect-manifest ----
15
+ program
16
+ .command('inspect-manifest')
17
+ .description('Inspect a manifest.json for correctness and cross-validate fragments')
18
+ .argument('[manifest]', 'Path to manifest.json', 'skill/build/manifest.json')
19
+ .option('--json', 'Output as JSON', false)
20
+ .action(async (manifest, options) => {
21
+ try {
22
+ const result = await validateManifestCommand({
23
+ manifestPath: manifest,
24
+ json: options.json,
25
+ });
26
+ if (options.json) {
27
+ console.log(JSON.stringify(result, null, 2));
28
+ }
29
+ else {
30
+ console.log();
31
+ if (result.valid) {
32
+ console.log(chalk.green.bold(' PASSED') + ' ' + result.manifestPath);
33
+ }
34
+ else {
35
+ console.log(chalk.red.bold(' FAILED') + ' ' + result.manifestPath);
36
+ }
37
+ console.log();
38
+ for (const issue of result.issues) {
39
+ const color = issue.severity === 'error' ? chalk.red : chalk.yellow;
40
+ console.log(` ${color(issue.severity.toUpperCase().padEnd(7))} [${issue.rule}] ${issue.message}`);
41
+ }
42
+ if (result.issues.length > 0)
43
+ console.log();
44
+ console.log(chalk.gray(` Inventory: ${result.stats.skills} skills, ${result.stats.fragments} fragments, ${result.stats.targets} targets`));
45
+ console.log();
46
+ }
47
+ }
48
+ catch (error) {
49
+ handleError(error);
50
+ }
51
+ });
52
+ // ---- Command: inspect-skill ----
53
+ program
54
+ .command('inspect-skill')
55
+ .description('Inspect a skill source for valid frontmatter, includes, and structure')
56
+ .argument('<skill>', 'Path to the skill source .md file')
57
+ .option('--json', 'Output as JSON', false)
58
+ .option('--fragments-dir <dir>', 'Path to fragments directory')
59
+ .action(async (skill, options) => {
60
+ try {
61
+ const result = await validateSkillCommand({
62
+ skillPath: skill,
63
+ fragmentsDir: options.fragmentsDir,
64
+ json: options.json,
65
+ });
66
+ if (options.json) {
67
+ console.log(JSON.stringify(result, null, 2));
68
+ }
69
+ else {
70
+ console.log();
71
+ if (result.valid) {
72
+ console.log(chalk.green.bold(' PASSED') + ' ' + result.skillPath);
73
+ }
74
+ else {
75
+ console.log(chalk.red.bold(' FAILED') + ' ' + result.skillPath);
76
+ }
77
+ console.log();
78
+ for (const issue of result.issues) {
79
+ const color = issue.severity === 'error' ? chalk.red : chalk.yellow;
80
+ console.log(` ${color(issue.severity.toUpperCase().padEnd(7))} line ${String(issue.line).padEnd(4)} [${issue.rule}] ${issue.message}`);
81
+ }
82
+ if (result.issues.length > 0)
83
+ console.log();
84
+ console.log(chalk.gray(` Name: ${result.frontmatter.name || '(none)'}`));
85
+ console.log(chalk.gray(` Stats: ${result.stats.sections} sections, ${result.stats.includes} includes, ${result.stats.wordCount} words`));
86
+ console.log();
87
+ }
88
+ }
89
+ catch (error) {
90
+ handleError(error);
91
+ }
92
+ });
93
+ // ---- Command: inventory ----
94
+ program
95
+ .command('inventory')
96
+ .description('Take stock of all skills, fragments, and targets in a project')
97
+ .option('--json', 'Output as JSON', false)
98
+ .option('--cwd <dir>', 'Project root directory', process.cwd())
99
+ .action(async (options) => {
100
+ try {
101
+ const result = await listProjectCommand({
102
+ cwd: options.cwd,
103
+ json: options.json,
104
+ });
105
+ if (options.json) {
106
+ console.log(JSON.stringify(result, null, 2));
107
+ }
108
+ else {
109
+ console.log();
110
+ console.log(chalk.bold(`Mill: ${result.projectName}`));
111
+ if (result.cliBinName) {
112
+ console.log(chalk.gray(` CLI: ${result.cliBinName}`));
113
+ }
114
+ console.log(chalk.gray(` Targets: ${result.targets.join(', ')}`));
115
+ console.log();
116
+ console.log(chalk.bold(' Skills:'));
117
+ for (const skill of result.skills) {
118
+ console.log(` ${chalk.cyan(skill.name)} ${chalk.gray(`(${skill.fragments.length} fragments)`)}`);
119
+ if (skill.description) {
120
+ console.log(` ${chalk.gray(skill.description.slice(0, 80))}${skill.description.length > 80 ? '...' : ''}`);
121
+ }
122
+ }
123
+ console.log();
124
+ console.log(chalk.bold(' Fragments:'));
125
+ for (const frag of result.fragments) {
126
+ const usage = frag.usedBy.length > 0
127
+ ? chalk.gray(` (used by: ${frag.usedBy.join(', ')})`)
128
+ : chalk.yellow(' (orphaned)');
129
+ console.log(` ${frag.path}${usage}`);
130
+ }
131
+ console.log();
132
+ if (result.stats.orphanedFragments.length > 0) {
133
+ console.log(chalk.yellow(` ${result.stats.orphanedFragments.length} orphaned fragment(s) not claimed by any skill`));
134
+ console.log();
135
+ }
136
+ }
137
+ }
138
+ catch (error) {
139
+ handleError(error);
140
+ }
141
+ });
142
+ // ---- Command: forge ----
143
+ program
144
+ .command('forge')
145
+ .description('Forge scaffolding for a new command, skill, or fragment')
146
+ .argument('<kind>', 'What to forge: command, skill, or fragment')
147
+ .argument('<name>', 'Name for the new item (lowercase kebab-case)')
148
+ .option('--json', 'Output as JSON', false)
149
+ .option('--cwd <dir>', 'Project root directory', process.cwd())
150
+ .option('--category <cat>', 'Fragment category (common, domain, meta)', 'domain')
151
+ .option('--description <desc>', 'Skill description')
152
+ .option('--write', 'Actually write the files (default: dry-run)', false)
153
+ .action(async (kind, name, options) => {
154
+ try {
155
+ const validKinds = ['command', 'skill', 'fragment'];
156
+ if (!validKinds.includes(kind)) {
157
+ console.error(chalk.red(`Invalid kind: "${kind}". Must be one of: ${validKinds.join(', ')}`));
158
+ process.exit(1);
159
+ }
160
+ const result = await scaffoldCommand({
161
+ kind: kind,
162
+ name,
163
+ cwd: options.cwd,
164
+ category: options.category,
165
+ description: options.description,
166
+ json: options.json,
167
+ });
168
+ if (options.json) {
169
+ console.log(JSON.stringify(result, null, 2));
170
+ }
171
+ else {
172
+ console.log();
173
+ console.log(chalk.bold(`Forge: ${result.kind} "${result.name}"`));
174
+ console.log();
175
+ if (options.write) {
176
+ const fsModule = await import('fs/promises');
177
+ const pathModule = await import('path');
178
+ for (const file of result.files) {
179
+ const fullPath = pathModule.default.join(options.cwd, file.path);
180
+ await fsModule.default.mkdir(pathModule.default.dirname(fullPath), { recursive: true });
181
+ await fsModule.default.writeFile(fullPath, file.content);
182
+ console.log(chalk.green(` Forged: ${file.path}`));
183
+ }
184
+ }
185
+ else {
186
+ console.log(chalk.gray(' Dry run (use --write to stamp the files):'));
187
+ for (const file of result.files) {
188
+ console.log(` ${chalk.cyan(file.path)}`);
189
+ }
190
+ }
191
+ console.log();
192
+ console.log(chalk.bold(' Next steps:'));
193
+ for (const instruction of result.instructions) {
194
+ console.log(` ${instruction}`);
195
+ }
196
+ for (const w of result.warnings) {
197
+ console.log(chalk.yellow(`\n Warning: ${w}`));
198
+ }
199
+ console.log();
200
+ }
201
+ }
202
+ catch (error) {
203
+ handleError(error);
204
+ }
205
+ });
206
+ // ---- Command: audit-exports ----
207
+ program
208
+ .command('audit-exports')
209
+ .description('Audit that src/index.ts exports match core modules')
210
+ .option('--json', 'Output as JSON', false)
211
+ .option('--cwd <dir>', 'Project root directory', process.cwd())
212
+ .action(async (options) => {
213
+ try {
214
+ const result = await checkExportsCommand({
215
+ cwd: options.cwd,
216
+ json: options.json,
217
+ });
218
+ if (options.json) {
219
+ console.log(JSON.stringify(result, null, 2));
220
+ }
221
+ else {
222
+ console.log();
223
+ console.log(chalk.bold('Export Audit'));
224
+ console.log();
225
+ for (const mod of result.coreModules) {
226
+ const status = mod.exportedInIndex
227
+ ? chalk.green('exported')
228
+ : chalk.yellow('missing');
229
+ console.log(` ${mod.relativePath.padEnd(35)} ${status}`);
230
+ }
231
+ if (result.issues.length > 0) {
232
+ console.log();
233
+ for (const issue of result.issues) {
234
+ const color = issue.severity === 'error' ? chalk.red : chalk.yellow;
235
+ console.log(` ${color(issue.severity.toUpperCase().padEnd(7))} [${issue.rule}] ${issue.message}`);
236
+ }
237
+ }
238
+ for (const w of result.warnings) {
239
+ console.log(chalk.yellow(`\n Warning: ${w}`));
240
+ }
241
+ console.log();
242
+ }
243
+ }
244
+ catch (error) {
245
+ handleError(error);
246
+ }
247
+ });
248
+ // ---- Uniform error handler ----
249
+ function handleError(error) {
250
+ if (error instanceof AppError) {
251
+ console.error(chalk.red(`Error [${error.code}]: ${error.message}`));
252
+ if (error.context) {
253
+ console.error(chalk.gray(`Details: ${JSON.stringify(error.context)}`));
254
+ }
255
+ }
256
+ else if (error instanceof Error) {
257
+ console.error(chalk.red(`Error: ${error.message}`));
258
+ }
259
+ else {
260
+ console.error(chalk.red('An unknown error occurred'));
261
+ }
262
+ process.exit(1);
263
+ }
264
+ program.parse(process.argv);
265
+ if (process.argv.length < 3) {
266
+ program.help();
267
+ }
268
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare class OutputFormatter {
2
+ static formatJson(data: unknown): string;
3
+ static formatTable(headers: string[], rows: string[][], columnWidths?: number[]): string;
4
+ static formatKeyValue(pairs: Record<string, string | number | boolean>): string;
5
+ }
6
+ //# sourceMappingURL=output-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-formatter.d.ts","sourceRoot":"","sources":["../../src/cli/output-formatter.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAIxC,MAAM,CAAC,WAAW,CAChB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,MAAM;IAcT,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM;CAMhF"}
@@ -0,0 +1,19 @@
1
+ export class OutputFormatter {
2
+ static formatJson(data) {
3
+ return JSON.stringify(data, null, 2);
4
+ }
5
+ static formatTable(headers, rows, columnWidths) {
6
+ const widths = columnWidths ||
7
+ headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] || '').length)));
8
+ const separator = widths.map((w) => '-'.repeat(w + 2)).join('+');
9
+ const formatRow = (cells) => cells.map((c, i) => ` ${(c || '').padEnd(widths[i])} `).join('|');
10
+ return [formatRow(headers), separator, ...rows.map(formatRow)].join('\n');
11
+ }
12
+ static formatKeyValue(pairs) {
13
+ const maxKey = Math.max(...Object.keys(pairs).map((k) => k.length));
14
+ return Object.entries(pairs)
15
+ .map(([k, v]) => ` ${k.padEnd(maxKey)} ${v}`)
16
+ .join('\n');
17
+ }
18
+ }
19
+ //# sourceMappingURL=output-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-formatter.js","sourceRoot":"","sources":["../../src/cli/output-formatter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,UAAU,CAAC,IAAa;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,OAAiB,EACjB,IAAgB,EAChB,YAAuB;QAEvB,MAAM,MAAM,GACV,YAAY;YACZ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAC;QAEJ,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,CAAC,KAAe,EAAE,EAAE,CACpC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,KAAgD;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ export interface CheckExportsOptions {
2
+ cwd: string;
3
+ }
4
+ export interface ExportIssue {
5
+ severity: 'error' | 'warning';
6
+ rule: string;
7
+ message: string;
8
+ }
9
+ export interface CoreModuleInfo {
10
+ name: string;
11
+ relativePath: string;
12
+ exportedInIndex: boolean;
13
+ }
14
+ export interface CheckExportsResult {
15
+ indexPath: string;
16
+ coreModules: CoreModuleInfo[];
17
+ issues: ExportIssue[];
18
+ warnings: string[];
19
+ }
20
+ export declare function checkExports(options: CheckExportsOptions): Promise<CheckExportsResult>;
21
+ //# sourceMappingURL=check-exports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-exports.d.ts","sourceRoot":"","sources":["../../src/core/check-exports.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmE5F"}
@@ -0,0 +1,67 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ export async function checkExports(options) {
4
+ const { cwd } = options;
5
+ const issues = [];
6
+ const warnings = [];
7
+ const indexPath = path.join(cwd, 'src', 'index.ts');
8
+ let indexContent;
9
+ try {
10
+ indexContent = await fs.readFile(indexPath, 'utf-8');
11
+ }
12
+ catch {
13
+ warnings.push('src/index.ts not found');
14
+ return { indexPath, coreModules: [], issues, warnings };
15
+ }
16
+ // Discover core modules
17
+ const coreDir = path.join(cwd, 'src', 'core');
18
+ let coreFiles = [];
19
+ try {
20
+ const entries = await fs.readdir(coreDir);
21
+ coreFiles = entries.filter(f => f.endsWith('.ts') && !f.endsWith('.test.ts') && !f.endsWith('.spec.ts'));
22
+ }
23
+ catch {
24
+ warnings.push('src/core/ directory not found');
25
+ return { indexPath, coreModules: [], issues, warnings };
26
+ }
27
+ // Parse index.ts for export lines referencing core modules
28
+ const exportPattern = /from\s+['"]\.\/core\/([^'"]+)['"]/g;
29
+ const exportedModules = new Set();
30
+ let match;
31
+ while ((match = exportPattern.exec(indexContent)) !== null) {
32
+ let modName = match[1];
33
+ if (modName.endsWith('.js'))
34
+ modName = modName.slice(0, -3);
35
+ exportedModules.add(modName);
36
+ }
37
+ const coreModules = [];
38
+ for (const file of coreFiles) {
39
+ const name = file.replace(/\.ts$/, '');
40
+ const exported = exportedModules.has(name);
41
+ coreModules.push({
42
+ name,
43
+ relativePath: `src/core/${file}`,
44
+ exportedInIndex: exported,
45
+ });
46
+ if (!exported) {
47
+ issues.push({
48
+ severity: 'warning',
49
+ rule: 'unexported-module',
50
+ message: `Core module "${name}" is not exported from src/index.ts`,
51
+ });
52
+ }
53
+ }
54
+ // Check for exports referencing non-existent core modules
55
+ const coreModuleNames = new Set(coreFiles.map(f => f.replace(/\.ts$/, '')));
56
+ for (const exported of exportedModules) {
57
+ if (!coreModuleNames.has(exported)) {
58
+ issues.push({
59
+ severity: 'error',
60
+ rule: 'stale-export',
61
+ message: `src/index.ts exports from core/${exported} but that module does not exist`,
62
+ });
63
+ }
64
+ }
65
+ return { indexPath, coreModules, issues, warnings };
66
+ }
67
+ //# sourceMappingURL=check-exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-exports.js","sourceRoot":"","sources":["../../src/core/check-exports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface ListProjectOptions {
2
+ cwd: string;
3
+ }
4
+ export interface SkillInfo {
5
+ name: string;
6
+ source: string;
7
+ fragments: string[];
8
+ description: string | null;
9
+ }
10
+ export interface FragmentInfo {
11
+ path: string;
12
+ category: string;
13
+ usedBy: string[];
14
+ sizeBytes: number;
15
+ }
16
+ export interface ListProjectResult {
17
+ projectName: string;
18
+ cliBinName: string | null;
19
+ skills: SkillInfo[];
20
+ fragments: FragmentInfo[];
21
+ targets: string[];
22
+ stats: {
23
+ totalSkills: number;
24
+ totalFragments: number;
25
+ totalTargets: number;
26
+ orphanedFragments: string[];
27
+ };
28
+ warnings: string[];
29
+ }
30
+ export declare function listProject(options: ListProjectOptions): Promise<ListProjectResult>;
31
+ //# sourceMappingURL=list-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-project.d.ts","sourceRoot":"","sources":["../../src/core/list-project.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAiBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkGzF"}
@@ -0,0 +1,118 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { ConfigError } from '../errors/types.js';
4
+ export async function listProject(options) {
5
+ const { cwd } = options;
6
+ const warnings = [];
7
+ // Read package.json
8
+ let pkg = {};
9
+ try {
10
+ const raw = await fs.readFile(path.join(cwd, 'package.json'), 'utf-8');
11
+ pkg = JSON.parse(raw);
12
+ }
13
+ catch {
14
+ warnings.push('Could not read package.json');
15
+ }
16
+ const projectName = pkg.name ?? 'unknown';
17
+ const cliBinName = pkg.bin ? Object.keys(pkg.bin)[0] ?? null : null;
18
+ // Read manifest
19
+ const manifestPath = path.join(cwd, 'skill', 'build', 'manifest.json');
20
+ let manifest;
21
+ try {
22
+ const raw = await fs.readFile(manifestPath, 'utf-8');
23
+ manifest = JSON.parse(raw);
24
+ }
25
+ catch {
26
+ throw new ConfigError('Could not read skill/build/manifest.json', manifestPath);
27
+ }
28
+ // Gather skill info
29
+ const skills = [];
30
+ const declaredFragments = new Set();
31
+ for (const [name, def] of Object.entries(manifest.skills)) {
32
+ for (const frag of def.fragments ?? []) {
33
+ declaredFragments.add(frag);
34
+ }
35
+ let description = null;
36
+ const sourcePath = path.join(cwd, 'skill', def.source);
37
+ try {
38
+ const content = await fs.readFile(sourcePath, 'utf-8');
39
+ const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
40
+ if (fmMatch) {
41
+ const descLine = fmMatch[1].split('\n').find(l => l.startsWith('description:'));
42
+ if (descLine) {
43
+ description = descLine.slice(descLine.indexOf(':') + 1).trim().replace(/^["']|["']$/g, '');
44
+ }
45
+ }
46
+ }
47
+ catch {
48
+ // Source not readable
49
+ }
50
+ skills.push({
51
+ name,
52
+ source: def.source,
53
+ fragments: def.fragments ?? [],
54
+ description,
55
+ });
56
+ }
57
+ // Discover all fragment files on disk
58
+ const fragmentsDir = path.join(cwd, 'skill', 'fragments');
59
+ const fragmentFiles = await walkFragments(fragmentsDir);
60
+ const allDiskFragments = new Set(fragmentFiles.map(f => f.relativePath));
61
+ // Build fragment info with usage tracking
62
+ const fragments = [];
63
+ for (const fFile of fragmentFiles) {
64
+ const usedBy = skills
65
+ .filter(s => s.fragments.includes(fFile.relativePath))
66
+ .map(s => s.name);
67
+ fragments.push({
68
+ path: fFile.relativePath,
69
+ category: fFile.relativePath.split('/')[0] ?? 'uncategorized',
70
+ usedBy,
71
+ sizeBytes: fFile.sizeBytes,
72
+ });
73
+ }
74
+ // Orphaned fragments: on disk but not declared by any skill
75
+ const orphanedFragments = [...allDiskFragments].filter(f => !declaredFragments.has(f));
76
+ if (orphanedFragments.length > 0) {
77
+ warnings.push(`${orphanedFragments.length} fragment(s) on disk but not declared by any skill`);
78
+ }
79
+ return {
80
+ projectName,
81
+ cliBinName,
82
+ skills,
83
+ fragments,
84
+ targets: manifest.targets ?? [],
85
+ stats: {
86
+ totalSkills: skills.length,
87
+ totalFragments: fragments.length,
88
+ totalTargets: (manifest.targets ?? []).length,
89
+ orphanedFragments,
90
+ },
91
+ warnings,
92
+ };
93
+ }
94
+ async function walkFragments(dir, base) {
95
+ const results = [];
96
+ const root = base ?? dir;
97
+ try {
98
+ const entries = await fs.readdir(dir, { withFileTypes: true });
99
+ for (const entry of entries) {
100
+ const full = path.join(dir, entry.name);
101
+ if (entry.isDirectory()) {
102
+ results.push(...await walkFragments(full, root));
103
+ }
104
+ else if (entry.name.endsWith('.md')) {
105
+ const stat = await fs.stat(full);
106
+ results.push({
107
+ relativePath: path.relative(root, full),
108
+ sizeBytes: stat.size,
109
+ });
110
+ }
111
+ }
112
+ }
113
+ catch {
114
+ // Directory doesn't exist
115
+ }
116
+ return results;
117
+ }
118
+ //# sourceMappingURL=list-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-project.js","sourceRoot":"","sources":["../../src/core/list-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export type ScaffoldKind = 'command' | 'skill' | 'fragment';
2
+ export interface ScaffoldOptions {
3
+ kind: ScaffoldKind;
4
+ name: string;
5
+ cwd: string;
6
+ /** For fragments: which category (common, domain, meta) */
7
+ category?: string;
8
+ /** For skills: initial description */
9
+ description?: string;
10
+ }
11
+ export interface ScaffoldFile {
12
+ path: string;
13
+ content: string;
14
+ action: 'create' | 'append';
15
+ }
16
+ export interface ScaffoldResult {
17
+ kind: ScaffoldKind;
18
+ name: string;
19
+ files: ScaffoldFile[];
20
+ instructions: string[];
21
+ warnings: string[];
22
+ }
23
+ export declare function scaffold(options: ScaffoldOptions): Promise<ScaffoldResult>;
24
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/core/scaffold.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAyBhF"}