@graspful/cli 0.1.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 (73) hide show
  1. package/dist/commands/create-brand.d.ts +8 -0
  2. package/dist/commands/create-brand.d.ts.map +1 -0
  3. package/dist/commands/create-brand.js +121 -0
  4. package/dist/commands/create-brand.js.map +1 -0
  5. package/dist/commands/create-course.d.ts +7 -0
  6. package/dist/commands/create-course.d.ts.map +1 -0
  7. package/dist/commands/create-course.js +98 -0
  8. package/dist/commands/create-course.js.map +1 -0
  9. package/dist/commands/describe.d.ts +3 -0
  10. package/dist/commands/describe.d.ts.map +1 -0
  11. package/dist/commands/describe.js +159 -0
  12. package/dist/commands/describe.js.map +1 -0
  13. package/dist/commands/fill-concept.d.ts +3 -0
  14. package/dist/commands/fill-concept.d.ts.map +1 -0
  15. package/dist/commands/fill-concept.js +116 -0
  16. package/dist/commands/fill-concept.js.map +1 -0
  17. package/dist/commands/import.d.ts +3 -0
  18. package/dist/commands/import.d.ts.map +1 -0
  19. package/dist/commands/import.js +116 -0
  20. package/dist/commands/import.js.map +1 -0
  21. package/dist/commands/login.d.ts +3 -0
  22. package/dist/commands/login.d.ts.map +1 -0
  23. package/dist/commands/login.js +81 -0
  24. package/dist/commands/login.js.map +1 -0
  25. package/dist/commands/publish.d.ts +3 -0
  26. package/dist/commands/publish.d.ts.map +1 -0
  27. package/dist/commands/publish.js +26 -0
  28. package/dist/commands/publish.js.map +1 -0
  29. package/dist/commands/review.d.ts +3 -0
  30. package/dist/commands/review.d.ts.map +1 -0
  31. package/dist/commands/review.js +421 -0
  32. package/dist/commands/review.js.map +1 -0
  33. package/dist/commands/validate.d.ts +3 -0
  34. package/dist/commands/validate.d.ts.map +1 -0
  35. package/dist/commands/validate.js +154 -0
  36. package/dist/commands/validate.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +37 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/lib/api-client.d.ts +10 -0
  42. package/dist/lib/api-client.d.ts.map +1 -0
  43. package/dist/lib/api-client.js +54 -0
  44. package/dist/lib/api-client.js.map +1 -0
  45. package/dist/lib/auth.d.ts +10 -0
  46. package/dist/lib/auth.d.ts.map +1 -0
  47. package/dist/lib/auth.js +81 -0
  48. package/dist/lib/auth.js.map +1 -0
  49. package/dist/lib/output.d.ts +6 -0
  50. package/dist/lib/output.d.ts.map +1 -0
  51. package/dist/lib/output.js +30 -0
  52. package/dist/lib/output.js.map +1 -0
  53. package/dist/quality-gate.d.ts +21 -0
  54. package/dist/quality-gate.d.ts.map +1 -0
  55. package/dist/quality-gate.js +16 -0
  56. package/dist/quality-gate.js.map +1 -0
  57. package/dist/schemas/academy-manifest.schema.d.ts +164 -0
  58. package/dist/schemas/academy-manifest.schema.d.ts.map +1 -0
  59. package/dist/schemas/academy-manifest.schema.js +70 -0
  60. package/dist/schemas/academy-manifest.schema.js.map +1 -0
  61. package/dist/schemas/brand-yaml.schema.d.ts +652 -0
  62. package/dist/schemas/brand-yaml.schema.d.ts.map +1 -0
  63. package/dist/schemas/brand-yaml.schema.js +97 -0
  64. package/dist/schemas/brand-yaml.schema.js.map +1 -0
  65. package/dist/schemas/course-yaml.schema.d.ts +1794 -0
  66. package/dist/schemas/course-yaml.schema.d.ts.map +1 -0
  67. package/dist/schemas/course-yaml.schema.js +161 -0
  68. package/dist/schemas/course-yaml.schema.js.map +1 -0
  69. package/dist/schemas/index.d.ts +4 -0
  70. package/dist/schemas/index.d.ts.map +1 -0
  71. package/dist/schemas/index.js +20 -0
  72. package/dist/schemas/index.js.map +1 -0
  73. package/package.json +31 -0
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerReviewCommand = registerReviewCommand;
37
+ const fs = __importStar(require("fs"));
38
+ const yaml = __importStar(require("js-yaml"));
39
+ const crypto = __importStar(require("crypto"));
40
+ const schemas_1 = require("../schemas");
41
+ const output_1 = require("../lib/output");
42
+ // ─── Check 1: yaml_parses ───────────────────────────────────────────────────
43
+ function checkYamlParses(raw) {
44
+ const result = schemas_1.CourseYamlSchema.safeParse(raw);
45
+ if (result.success) {
46
+ return { check: 'yaml_parses', passed: true };
47
+ }
48
+ const errors = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
49
+ return {
50
+ check: 'yaml_parses',
51
+ passed: false,
52
+ details: `${errors.length} schema error(s): ${errors.slice(0, 5).join('; ')}${errors.length > 5 ? ` (+${errors.length - 5} more)` : ''}`,
53
+ };
54
+ }
55
+ // ─── Check 2: unique_problem_ids ────────────────────────────────────────────
56
+ function checkUniqueProblemIds(data) {
57
+ const allIds = [];
58
+ const duplicates = [];
59
+ const seen = new Set();
60
+ for (const concept of data.concepts) {
61
+ for (const kp of concept.knowledgePoints) {
62
+ for (const problem of kp.problems) {
63
+ allIds.push(problem.id);
64
+ if (seen.has(problem.id)) {
65
+ duplicates.push(problem.id);
66
+ }
67
+ seen.add(problem.id);
68
+ }
69
+ }
70
+ }
71
+ if (duplicates.length === 0) {
72
+ return { check: 'unique_problem_ids', passed: true };
73
+ }
74
+ return {
75
+ check: 'unique_problem_ids',
76
+ passed: false,
77
+ details: `Duplicate problem IDs: ${duplicates.join(', ')}`,
78
+ };
79
+ }
80
+ // ─── Check 3: prerequisites_valid ───────────────────────────────────────────
81
+ function checkPrerequisitesValid(data) {
82
+ const conceptIds = new Set(data.concepts.map((c) => c.id));
83
+ const invalid = [];
84
+ for (const concept of data.concepts) {
85
+ for (const prereq of concept.prerequisites) {
86
+ if (!conceptIds.has(prereq)) {
87
+ invalid.push(`${concept.id} -> ${prereq}`);
88
+ }
89
+ }
90
+ }
91
+ if (invalid.length === 0) {
92
+ return { check: 'prerequisites_valid', passed: true };
93
+ }
94
+ return {
95
+ check: 'prerequisites_valid',
96
+ passed: false,
97
+ details: `Unknown prerequisites: ${invalid.join(', ')}`,
98
+ };
99
+ }
100
+ // ─── Check 4: question_deduplication ────────────────────────────────────────
101
+ function normalizeText(text) {
102
+ return text
103
+ .toLowerCase()
104
+ .replace(/[^a-z0-9\s]/g, '')
105
+ .replace(/\s+/g, ' ')
106
+ .trim();
107
+ }
108
+ function checkQuestionDeduplication(data) {
109
+ const seen = new Map();
110
+ const collisions = [];
111
+ for (const concept of data.concepts) {
112
+ for (const kp of concept.knowledgePoints) {
113
+ for (const problem of kp.problems) {
114
+ const normalized = normalizeText(problem.question);
115
+ const hash = crypto.createHash('md5').update(normalized).digest('hex').substring(0, 12);
116
+ const key = `${hash}-d${problem.difficulty ?? 'none'}`;
117
+ const existing = seen.get(key);
118
+ if (existing) {
119
+ collisions.push(`"${problem.id}" collides with "${existing.problemId}" (same question text at same difficulty)`);
120
+ }
121
+ else {
122
+ seen.set(key, { conceptId: concept.id, problemId: problem.id, difficulty: problem.difficulty });
123
+ }
124
+ }
125
+ }
126
+ }
127
+ if (collisions.length === 0) {
128
+ return { check: 'question_deduplication', passed: true };
129
+ }
130
+ return {
131
+ check: 'question_deduplication',
132
+ passed: false,
133
+ details: collisions.slice(0, 5).join('; ') + (collisions.length > 5 ? ` (+${collisions.length - 5} more)` : ''),
134
+ };
135
+ }
136
+ // ─── Check 5: difficulty_staircase ──────────────────────────────────────────
137
+ function checkDifficultyStaircase(data) {
138
+ const failures = [];
139
+ for (const concept of data.concepts) {
140
+ if (concept.knowledgePoints.length === 0)
141
+ continue; // skip stubs
142
+ const difficulties = new Set();
143
+ for (const kp of concept.knowledgePoints) {
144
+ for (const problem of kp.problems) {
145
+ if (problem.difficulty != null) {
146
+ difficulties.add(problem.difficulty);
147
+ }
148
+ }
149
+ }
150
+ if (difficulties.size > 0 && difficulties.size < 2) {
151
+ failures.push(`"${concept.id}" has problems at only ${difficulties.size} difficulty level(s) — need 2+`);
152
+ }
153
+ }
154
+ if (failures.length === 0) {
155
+ return { check: 'difficulty_staircase', passed: true };
156
+ }
157
+ return {
158
+ check: 'difficulty_staircase',
159
+ passed: false,
160
+ details: failures.slice(0, 5).join('; ') + (failures.length > 5 ? ` (+${failures.length - 5} more)` : ''),
161
+ };
162
+ }
163
+ // ─── Check 6: cross_concept_coverage ────────────────────────────────────────
164
+ function extractStems(text) {
165
+ // Simple word extraction — split on whitespace, lowercase, strip punctuation, filter short words
166
+ return text
167
+ .toLowerCase()
168
+ .replace(/[^a-z0-9\s]/g, '')
169
+ .split(/\s+/)
170
+ .filter((w) => w.length > 4);
171
+ }
172
+ function checkCrossConceptCoverage(data) {
173
+ // Count how many concepts each "fact stem" appears in
174
+ const stemConceptCount = new Map();
175
+ for (const concept of data.concepts) {
176
+ for (const kp of concept.knowledgePoints) {
177
+ for (const problem of kp.problems) {
178
+ const stems = extractStems(problem.question);
179
+ for (const stem of stems) {
180
+ if (!stemConceptCount.has(stem)) {
181
+ stemConceptCount.set(stem, new Set());
182
+ }
183
+ stemConceptCount.get(stem).add(concept.id);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ const overused = [];
189
+ for (const [stem, concepts] of stemConceptCount) {
190
+ if (concepts.size > 3) {
191
+ overused.push(`"${stem}" appears across ${concepts.size} concepts`);
192
+ }
193
+ }
194
+ // This is a warning-level check; only fail if there are egregious overlaps
195
+ // Filter to only meaningful stems (not common English words)
196
+ const commonWords = new Set([
197
+ 'which', 'would', 'should', 'could', 'about', 'their', 'there', 'these', 'those',
198
+ 'being', 'between', 'through', 'during', 'before', 'after', 'above', 'below',
199
+ 'following', 'statement', 'answer', 'question', 'correct', 'incorrect',
200
+ 'agent', 'property', 'owner', 'buyer', 'seller', // domain-common, expected overlap
201
+ ]);
202
+ const meaningfulOverused = overused.filter((entry) => {
203
+ const stem = entry.match(/"([^"]+)"/)?.[1] ?? '';
204
+ return !commonWords.has(stem);
205
+ });
206
+ if (meaningfulOverused.length === 0) {
207
+ return { check: 'cross_concept_coverage', passed: true };
208
+ }
209
+ return {
210
+ check: 'cross_concept_coverage',
211
+ passed: meaningfulOverused.length <= 5, // warn but pass if only a few
212
+ details: meaningfulOverused.slice(0, 5).join('; ') + (meaningfulOverused.length > 5 ? ` (+${meaningfulOverused.length - 5} more)` : ''),
213
+ };
214
+ }
215
+ // ─── Check 7: problem_variant_depth ─────────────────────────────────────────
216
+ function checkProblemVariantDepth(data) {
217
+ const failures = [];
218
+ for (const concept of data.concepts) {
219
+ if (concept.knowledgePoints.length === 0)
220
+ continue;
221
+ for (const kp of concept.knowledgePoints) {
222
+ if (kp.problems.length < 3) {
223
+ failures.push(`"${concept.id}/${kp.id}" has ${kp.problems.length} problem(s) — need 3+`);
224
+ }
225
+ }
226
+ }
227
+ if (failures.length === 0) {
228
+ return { check: 'problem_variant_depth', passed: true };
229
+ }
230
+ return {
231
+ check: 'problem_variant_depth',
232
+ passed: false,
233
+ details: failures.slice(0, 5).join('; ') + (failures.length > 5 ? ` (+${failures.length - 5} more)` : ''),
234
+ };
235
+ }
236
+ // ─── Check 8: instruction_formatting ────────────────────────────────────────
237
+ function checkInstructionFormatting(data) {
238
+ const warnings = [];
239
+ for (const concept of data.concepts) {
240
+ for (const kp of concept.knowledgePoints) {
241
+ if (!kp.instruction)
242
+ continue;
243
+ // If instruction is a file reference (path), skip word count check
244
+ if (kp.instruction.match(/^[\w\-./]+\.(md|txt|html)$/))
245
+ continue;
246
+ const wordCount = kp.instruction.split(/\s+/).filter(Boolean).length;
247
+ const hasContentBlocks = kp.instructionContent && kp.instructionContent.length > 0;
248
+ if (wordCount > 100 && !hasContentBlocks) {
249
+ warnings.push(`"${concept.id}/${kp.id}" instruction is ${wordCount} words with no content blocks`);
250
+ }
251
+ }
252
+ }
253
+ if (warnings.length === 0) {
254
+ return { check: 'instruction_formatting', passed: true };
255
+ }
256
+ return {
257
+ check: 'instruction_formatting',
258
+ passed: false,
259
+ details: warnings.slice(0, 5).join('; ') + (warnings.length > 5 ? ` (+${warnings.length - 5} more)` : ''),
260
+ };
261
+ }
262
+ // ─── Check 9: worked_example_coverage ───────────────────────────────────────
263
+ function checkWorkedExampleCoverage(data) {
264
+ const authoredConcepts = data.concepts.filter((c) => c.knowledgePoints.length > 0);
265
+ if (authoredConcepts.length === 0) {
266
+ return { check: 'worked_example_coverage', passed: true };
267
+ }
268
+ const withExamples = authoredConcepts.filter((c) => c.knowledgePoints.some((kp) => kp.workedExample && kp.workedExample.trim().length > 0));
269
+ const coverage = withExamples.length / authoredConcepts.length;
270
+ const passed = coverage >= 0.5;
271
+ if (passed) {
272
+ return { check: 'worked_example_coverage', passed: true };
273
+ }
274
+ return {
275
+ check: 'worked_example_coverage',
276
+ passed: false,
277
+ details: `${withExamples.length}/${authoredConcepts.length} authored concepts have worked examples (${Math.round(coverage * 100)}%) — need 50%+`,
278
+ };
279
+ }
280
+ // ─── Check 10: import_dry_run (DAG validation) ─────────────────────────────
281
+ function checkImportDryRun(data) {
282
+ const conceptIds = new Set(data.concepts.map((c) => c.id));
283
+ const errors = [];
284
+ // Check references
285
+ for (const concept of data.concepts) {
286
+ for (const prereq of concept.prerequisites) {
287
+ if (!conceptIds.has(prereq)) {
288
+ errors.push(`Unknown prerequisite: ${concept.id} -> ${prereq}`);
289
+ }
290
+ }
291
+ }
292
+ // Check for cycles
293
+ const graph = new Map();
294
+ for (const c of data.concepts) {
295
+ graph.set(c.id, [...c.prerequisites]);
296
+ }
297
+ const visited = new Set();
298
+ const inStack = new Set();
299
+ function hasCycle(node, path) {
300
+ if (inStack.has(node)) {
301
+ const cycleStart = path.indexOf(node);
302
+ const cycle = path.slice(cycleStart).concat(node);
303
+ errors.push(`Cycle detected: ${cycle.join(' -> ')}`);
304
+ return true;
305
+ }
306
+ if (visited.has(node))
307
+ return false;
308
+ visited.add(node);
309
+ inStack.add(node);
310
+ path.push(node);
311
+ let foundCycle = false;
312
+ for (const dep of graph.get(node) ?? []) {
313
+ if (hasCycle(dep, path)) {
314
+ foundCycle = true;
315
+ }
316
+ }
317
+ path.pop();
318
+ inStack.delete(node);
319
+ return foundCycle;
320
+ }
321
+ for (const id of graph.keys()) {
322
+ if (!visited.has(id)) {
323
+ hasCycle(id, []);
324
+ }
325
+ }
326
+ if (errors.length === 0) {
327
+ return { check: 'import_dry_run', passed: true };
328
+ }
329
+ return {
330
+ check: 'import_dry_run',
331
+ passed: false,
332
+ details: errors.join('; '),
333
+ };
334
+ }
335
+ // ─── Main review orchestrator ───────────────────────────────────────────────
336
+ function runReview(raw) {
337
+ const checks = [];
338
+ // Check 1: yaml_parses
339
+ const parseCheck = checkYamlParses(raw);
340
+ checks.push(parseCheck);
341
+ if (!parseCheck.passed) {
342
+ // Can't run remaining checks if YAML doesn't parse
343
+ return {
344
+ passed: false,
345
+ score: '0/10',
346
+ failures: checks.filter((c) => !c.passed),
347
+ warnings: [],
348
+ stats: { concepts: 0, kps: 0, problems: 0, authoredConcepts: 0, stubConcepts: 0 },
349
+ };
350
+ }
351
+ const data = schemas_1.CourseYamlSchema.parse(raw);
352
+ // Compute stats
353
+ const authoredConcepts = data.concepts.filter((c) => c.knowledgePoints.length > 0);
354
+ const stubConcepts = data.concepts.filter((c) => c.knowledgePoints.length === 0);
355
+ const kps = data.concepts.reduce((sum, c) => sum + c.knowledgePoints.length, 0);
356
+ const problems = data.concepts.reduce((sum, c) => sum + c.knowledgePoints.reduce((s, kp) => s + kp.problems.length, 0), 0);
357
+ const stats = {
358
+ concepts: data.concepts.length,
359
+ kps,
360
+ problems,
361
+ authoredConcepts: authoredConcepts.length,
362
+ stubConcepts: stubConcepts.length,
363
+ };
364
+ // Checks 2-10
365
+ checks.push(checkUniqueProblemIds(data));
366
+ checks.push(checkPrerequisitesValid(data));
367
+ checks.push(checkQuestionDeduplication(data));
368
+ checks.push(checkDifficultyStaircase(data));
369
+ checks.push(checkCrossConceptCoverage(data));
370
+ checks.push(checkProblemVariantDepth(data));
371
+ checks.push(checkInstructionFormatting(data));
372
+ checks.push(checkWorkedExampleCoverage(data));
373
+ checks.push(checkImportDryRun(data));
374
+ const passedCount = checks.filter((c) => c.passed).length;
375
+ const failures = checks.filter((c) => !c.passed);
376
+ return {
377
+ passed: failures.length === 0,
378
+ score: `${passedCount}/10`,
379
+ failures,
380
+ warnings: [], // Could separate warnings from hard failures in future
381
+ stats,
382
+ };
383
+ }
384
+ function registerReviewCommand(program) {
385
+ program
386
+ .command('review <file>')
387
+ .description('Run all 10 mechanical quality checks on a course YAML')
388
+ .action(async (file) => {
389
+ if (!fs.existsSync(file)) {
390
+ (0, output_1.outputError)(`File not found: ${file}`);
391
+ process.exit(1);
392
+ }
393
+ let raw;
394
+ try {
395
+ raw = yaml.load(fs.readFileSync(file, 'utf-8'));
396
+ }
397
+ catch (e) {
398
+ const msg = e instanceof Error ? e.message : String(e);
399
+ (0, output_1.outputError)(`YAML parse error: ${msg}`);
400
+ process.exit(1);
401
+ }
402
+ const result = runReview(raw);
403
+ const lines = [
404
+ result.passed ? 'PASS' : 'FAIL',
405
+ `Score: ${result.score}`,
406
+ `Stats: ${result.stats.concepts} concepts (${result.stats.authoredConcepts} authored, ${result.stats.stubConcepts} stubs), ${result.stats.kps} KPs, ${result.stats.problems} problems`,
407
+ ];
408
+ if (result.failures.length > 0) {
409
+ lines.push('');
410
+ lines.push('Failures:');
411
+ for (const f of result.failures) {
412
+ lines.push(` [FAIL] ${f.check}: ${f.details ?? 'no details'}`);
413
+ }
414
+ }
415
+ (0, output_1.output)(result, lines.join('\n'));
416
+ if (!result.passed) {
417
+ process.exit(1);
418
+ }
419
+ });
420
+ }
421
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerValidateCommand(program: Command): void;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0DpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAoGvD"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerValidateCommand = registerValidateCommand;
37
+ const fs = __importStar(require("fs"));
38
+ const yaml = __importStar(require("js-yaml"));
39
+ const schemas_1 = require("../schemas");
40
+ const output_1 = require("../lib/output");
41
+ function detectFileType(data) {
42
+ if (typeof data !== 'object' || data === null)
43
+ return null;
44
+ const obj = data;
45
+ if ('course' in obj)
46
+ return 'course';
47
+ if ('brand' in obj)
48
+ return 'brand';
49
+ if ('academy' in obj)
50
+ return 'academy';
51
+ return null;
52
+ }
53
+ function detectCycles(concepts) {
54
+ const graph = new Map();
55
+ for (const c of concepts) {
56
+ graph.set(c.id, c.prerequisites);
57
+ }
58
+ const visited = new Set();
59
+ const inStack = new Set();
60
+ const cycles = [];
61
+ function dfs(node, path) {
62
+ if (inStack.has(node)) {
63
+ const cycleStart = path.indexOf(node);
64
+ const cycle = path.slice(cycleStart).concat(node);
65
+ cycles.push(`Cycle: ${cycle.join(' -> ')}`);
66
+ return true;
67
+ }
68
+ if (visited.has(node))
69
+ return false;
70
+ visited.add(node);
71
+ inStack.add(node);
72
+ path.push(node);
73
+ for (const dep of graph.get(node) ?? []) {
74
+ dfs(dep, path);
75
+ }
76
+ path.pop();
77
+ inStack.delete(node);
78
+ return false;
79
+ }
80
+ for (const id of graph.keys()) {
81
+ if (!visited.has(id)) {
82
+ dfs(id, []);
83
+ }
84
+ }
85
+ return cycles;
86
+ }
87
+ function registerValidateCommand(program) {
88
+ program
89
+ .command('validate <file>')
90
+ .description('Validate a course, brand, or academy YAML file against its schema')
91
+ .action(async (file) => {
92
+ if (!fs.existsSync(file)) {
93
+ (0, output_1.outputError)(`File not found: ${file}`);
94
+ process.exit(1);
95
+ }
96
+ let raw;
97
+ try {
98
+ raw = yaml.load(fs.readFileSync(file, 'utf-8'));
99
+ }
100
+ catch (e) {
101
+ const msg = e instanceof Error ? e.message : String(e);
102
+ (0, output_1.output)({ valid: false, errors: [`YAML parse error: ${msg}`], stats: {} }, `FAIL YAML parse error: ${msg}`);
103
+ process.exit(1);
104
+ }
105
+ const fileType = detectFileType(raw);
106
+ if (!fileType) {
107
+ (0, output_1.output)({ valid: false, errors: ['Could not detect file type. Expected top-level key: course, brand, or academy'], stats: {} }, 'FAIL Could not detect file type. Expected top-level key: course, brand, or academy');
108
+ process.exit(1);
109
+ }
110
+ const schemaMap = {
111
+ course: schemas_1.CourseYamlSchema,
112
+ brand: schemas_1.BrandYamlSchema,
113
+ academy: schemas_1.AcademyManifestSchema,
114
+ };
115
+ const result = schemaMap[fileType].safeParse(raw);
116
+ if (!result.success) {
117
+ const errors = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
118
+ (0, output_1.output)({ valid: false, fileType, errors, stats: {} }, `FAIL ${fileType} validation (${errors.length} error${errors.length === 1 ? '' : 's'}):\n${errors.map((e) => ` - ${e}`).join('\n')}`);
119
+ process.exit(1);
120
+ }
121
+ // For courses, also check DAG
122
+ const dagErrors = [];
123
+ let stats = { fileType };
124
+ if (fileType === 'course') {
125
+ const data = result.data;
126
+ const conceptIds = new Set(data.concepts.map((c) => c.id));
127
+ // Check prerequisite references
128
+ for (const concept of data.concepts) {
129
+ for (const prereq of concept.prerequisites) {
130
+ if (!conceptIds.has(prereq)) {
131
+ dagErrors.push(`Concept "${concept.id}" has unknown prerequisite "${prereq}"`);
132
+ }
133
+ }
134
+ }
135
+ // Check for cycles
136
+ const cycles = detectCycles(data.concepts.map((c) => ({ id: c.id, prerequisites: c.prerequisites })));
137
+ dagErrors.push(...cycles);
138
+ const kpCount = data.concepts.reduce((sum, c) => sum + c.knowledgePoints.length, 0);
139
+ const problemCount = data.concepts.reduce((sum, c) => sum + c.knowledgePoints.reduce((s, kp) => s + kp.problems.length, 0), 0);
140
+ stats = {
141
+ fileType,
142
+ concepts: data.concepts.length,
143
+ knowledgePoints: kpCount,
144
+ problems: problemCount,
145
+ };
146
+ }
147
+ if (dagErrors.length > 0) {
148
+ (0, output_1.output)({ valid: false, fileType, errors: dagErrors, stats }, `FAIL DAG validation (${dagErrors.length} error${dagErrors.length === 1 ? '' : 's'}):\n${dagErrors.map((e) => ` - ${e}`).join('\n')}`);
149
+ process.exit(1);
150
+ }
151
+ (0, output_1.output)({ valid: true, fileType, errors: [], stats }, `PASS ${fileType} validation\n${Object.entries(stats).map(([k, v]) => ` ${k}: ${v}`).join('\n')}`);
152
+ });
153
+ }
154
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,0DAoGC;AA7JD,uCAAyB;AACzB,8CAAgC;AAChC,wCAAsF;AACtF,0CAAoD;AAIpD,SAAS,cAAc,CAAC,IAAa;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,IAAI,QAAQ,IAAI,GAAG;QAAE,OAAO,QAAQ,CAAC;IACrC,IAAI,OAAO,IAAI,GAAG;QAAE,OAAO,OAAO,CAAC;IACnC,IAAI,SAAS,IAAI,GAAG;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,QAAwD;IAC5E,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,SAAS,GAAG,CAAC,IAAY,EAAE,IAAc;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACxC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAA,oBAAW,EAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,GAAY,CAAC;QACjB,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,IAAA,eAAM,EACJ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,qBAAqB,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EACjE,2BAA2B,GAAG,EAAE,CACjC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAA,eAAM,EACJ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,+EAA+E,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EACtH,qFAAqF,CACtF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG;YAChB,MAAM,EAAE,0BAAgB;YACxB,KAAK,EAAE,yBAAe;YACtB,OAAO,EAAE,+BAAqB;SAC/B,CAAC;QAEF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAC3C,CAAC;YACF,IAAA,eAAM,EACJ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAC7C,SAAS,QAAQ,gBAAgB,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvI,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,8BAA8B;QAC9B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,KAAK,GAA4B,EAAE,QAAQ,EAAE,CAAC;QAElD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAqH,CAAC;YAC1I,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3D,gCAAgC;YAChC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC5B,SAAS,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,EAAE,+BAA+B,MAAM,GAAG,CAAC,CAAC;oBACjF,CAAC;gBACH,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,MAAM,MAAM,GAAG,YAAY,CACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CACzE,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACpF,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAChF,CAAC,CACF,CAAC;YAEF,KAAK,GAAG;gBACN,QAAQ;gBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC9B,eAAe,EAAE,OAAO;gBACxB,QAAQ,EAAE,YAAY;aACvB,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAA,eAAM,EACJ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EACpD,yBAAyB,SAAS,CAAC,MAAM,SAAS,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxI,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAA,eAAM,EACJ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAC5C,SAAS,QAAQ,gBAAgB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}