@graspful/cli 0.2.2 → 0.2.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 (47) hide show
  1. package/README.md +7 -5
  2. package/dist/commands/create-brand.d.ts.map +1 -1
  3. package/dist/commands/create-brand.js +9 -1
  4. package/dist/commands/create-brand.js.map +1 -1
  5. package/dist/commands/create-course.d.ts.map +1 -1
  6. package/dist/commands/create-course.js +2 -0
  7. package/dist/commands/create-course.js.map +1 -1
  8. package/dist/commands/describe.d.ts.map +1 -1
  9. package/dist/commands/describe.js +2 -0
  10. package/dist/commands/describe.js.map +1 -1
  11. package/dist/commands/fill-concept.d.ts.map +1 -1
  12. package/dist/commands/fill-concept.js +3 -1
  13. package/dist/commands/fill-concept.js.map +1 -1
  14. package/dist/commands/import.d.ts.map +1 -1
  15. package/dist/commands/import.js +31 -4
  16. package/dist/commands/import.js.map +1 -1
  17. package/dist/commands/init.d.ts.map +1 -1
  18. package/dist/commands/init.js +16 -57
  19. package/dist/commands/init.js.map +1 -1
  20. package/dist/commands/login.d.ts.map +1 -1
  21. package/dist/commands/login.js +31 -52
  22. package/dist/commands/login.js.map +1 -1
  23. package/dist/commands/publish.d.ts.map +1 -1
  24. package/dist/commands/publish.js +2 -0
  25. package/dist/commands/publish.js.map +1 -1
  26. package/dist/commands/register.d.ts.map +1 -1
  27. package/dist/commands/register.js +30 -29
  28. package/dist/commands/register.js.map +1 -1
  29. package/dist/commands/review.d.ts.map +1 -1
  30. package/dist/commands/review.js +8 -349
  31. package/dist/commands/review.js.map +1 -1
  32. package/dist/commands/validate.d.ts.map +1 -1
  33. package/dist/commands/validate.js +2 -0
  34. package/dist/commands/validate.js.map +1 -1
  35. package/dist/index.js +2 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/lib/analytics.d.ts +3 -0
  38. package/dist/lib/analytics.d.ts.map +1 -0
  39. package/dist/lib/analytics.js +34 -0
  40. package/dist/lib/analytics.js.map +1 -0
  41. package/dist/lib/auth.js +1 -1
  42. package/dist/lib/auth.js.map +1 -1
  43. package/dist/lib/browser-auth.d.ts +23 -0
  44. package/dist/lib/browser-auth.d.ts.map +1 -0
  45. package/dist/lib/browser-auth.js +110 -0
  46. package/dist/lib/browser-auth.js.map +1 -0
  47. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":";;AAKA,wDAyBC;AA7BD,sCAA0C;AAC1C,kDAA8C;AAC9C,0CAAoD;AAEpD,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,4CAA4C,CAAC;SACzD,cAAc,CAAC,cAAc,EAAE,mBAAmB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,IAAqB,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,IAAA,kBAAW,GAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,sBAAS,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAC3B,gBAAgB,IAAI,CAAC,GAAG,YAAY,QAAQ,UAAU,EACtD,EAAE,CACH,CAAC;YAEF,IAAA,eAAM,EACJ,MAAM,EACN,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CACvC,CAAC;QACJ,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,oBAAW,EAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":";;AAMA,wDA0BC;AA/BD,sCAA0C;AAC1C,kDAA8C;AAC9C,0CAAoD;AACpD,gDAA8C;AAE9C,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,4CAA4C,CAAC;SACzD,cAAc,CAAC,cAAc,EAAE,mBAAmB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,IAAqB,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,IAAA,kBAAW,GAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,sBAAS,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAC3B,gBAAgB,IAAI,CAAC,GAAG,YAAY,QAAQ,UAAU,EACtD,EAAE,CACH,CAAC;YAEF,IAAA,sBAAU,EAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3G,IAAA,eAAM,EACJ,MAAM,EACN,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CACvC,CAAC;QACJ,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,oBAAW,EAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAiDvD"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAgDvD"}
@@ -2,49 +2,50 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerRegisterCommand = registerRegisterCommand;
4
4
  const auth_1 = require("../lib/auth");
5
+ const browser_auth_1 = require("../lib/browser-auth");
5
6
  const output_1 = require("../lib/output");
7
+ const analytics_1 = require("../lib/analytics");
6
8
  function registerRegisterCommand(program) {
7
9
  program
8
10
  .command('register')
9
- .description('Create a new Graspful account and organization')
10
- .requiredOption('--email <email>', 'Email address')
11
- .requiredOption('--password <password>', 'Password')
11
+ .description('Create a new Graspful account with browser-based authentication')
12
+ .option('--email <email>', 'Prefill the browser sign-up form')
13
+ .option('--password <password>', 'Deprecated. Password entry now happens in the browser.')
12
14
  .option('--api-url <url>', 'API base URL')
15
+ .option('--no-browser', 'Print the sign-up URL instead of opening it automatically')
13
16
  .action(async (opts) => {
14
17
  const baseUrl = (opts.apiUrl || (0, auth_1.getBaseUrl)()).replace(/\/$/, '');
15
18
  try {
16
- const res = await fetch(`${baseUrl}/api/v1/auth/register`, {
17
- method: 'POST',
18
- headers: { 'Content-Type': 'application/json' },
19
- body: JSON.stringify({ email: opts.email, password: opts.password }),
20
- });
21
- if (!res.ok) {
22
- const body = await res.text();
23
- let message = `Registration failed (${res.status})`;
24
- try {
25
- const parsed = JSON.parse(body);
26
- if (parsed.message)
27
- message = parsed.message;
28
- }
29
- catch {
30
- if (body)
31
- message = body;
32
- }
33
- (0, output_1.outputError)(message);
34
- process.exit(1);
19
+ if (opts.password) {
20
+ console.log('`--password` is deprecated. Complete the password and verification steps in your browser.');
35
21
  }
36
- const data = (await res.json());
37
- (0, auth_1.saveApiKeyCredentials)(data.apiKey, baseUrl);
38
- (0, output_1.output)({ userId: data.userId, orgSlug: data.orgSlug, apiKey: data.apiKey, baseUrl }, [
39
- `Created org: ${data.orgSlug}`,
40
- `API key: ${data.apiKey} (saved to ~/.graspful/credentials.json)`,
22
+ const result = await (0, browser_auth_1.runBrowserAuthFlow)({
23
+ apiUrl: baseUrl,
24
+ mode: 'sign-up',
25
+ email: opts.email,
26
+ noBrowser: opts.browser === false,
27
+ });
28
+ (0, analytics_1.cliCapture)('cli registered', { method: 'browser-auth' });
29
+ (0, output_1.output)({
30
+ userId: result.userId,
31
+ orgSlug: result.orgSlug,
32
+ apiKey: result.apiKey,
33
+ baseUrl,
34
+ }, [
35
+ `Created org: ${result.orgSlug}`,
36
+ `API key: ${result.apiKey} (saved to ~/.graspful/credentials.json)`,
41
37
  '',
42
- `You're ready. Run: graspful import course.yaml --org ${data.orgSlug}`,
38
+ `You're ready. Run: graspful import course.yaml --org ${result.orgSlug}`,
43
39
  ].join('\n'));
44
40
  }
45
41
  catch (e) {
46
42
  const msg = e instanceof Error ? e.message : String(e);
47
- (0, output_1.outputError)(`Registration failed: ${msg}`);
43
+ if (msg.includes('ECONNREFUSED') || msg.includes('fetch failed') || msg.includes('ENOTFOUND')) {
44
+ (0, output_1.outputError)(`Could not reach the API at ${baseUrl}. Check your connection or use --api-url.`);
45
+ }
46
+ else {
47
+ (0, output_1.outputError)(`Registration failed: ${msg}`);
48
+ }
48
49
  process.exit(1);
49
50
  }
50
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":";;AAUA,0DAiDC;AA1DD,sCAAgE;AAChE,0CAAoD;AAQpD,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,cAAc,CAAC,iBAAiB,EAAE,eAAe,CAAC;SAClD,cAAc,CAAC,uBAAuB,EAAE,UAAU,CAAC;SACnD,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,IAA0D,EAAE,EAAE;QAC3E,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAA,iBAAU,GAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,uBAAuB,EAAE;gBACzD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aACrE,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,OAAO,GAAG,wBAAwB,GAAG,CAAC,MAAM,GAAG,CAAC;gBACpD,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,MAAM,CAAC,OAAO;wBAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC/C,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,IAAI;wBAAE,OAAO,GAAG,IAAI,CAAC;gBAC3B,CAAC;gBACD,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;YAEpD,IAAA,4BAAqB,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAE5C,IAAA,eAAM,EACJ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,EAC5E;gBACE,gBAAgB,IAAI,CAAC,OAAO,EAAE;gBAC9B,YAAY,IAAI,CAAC,MAAM,0CAA0C;gBACjE,EAAE;gBACF,wDAAwD,IAAI,CAAC,OAAO,EAAE;aACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACJ,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,oBAAW,EAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":";;AAMA,0DAgDC;AArDD,sCAAyC;AACzC,sDAAyD;AACzD,0CAAoD;AACpD,gDAA8C;AAE9C,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;SAC7D,MAAM,CAAC,uBAAuB,EAAE,wDAAwD,CAAC;SACzF,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC;SACzC,MAAM,CAAC,cAAc,EAAE,2DAA2D,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,IAA+E,EAAE,EAAE;QAChG,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAA,iBAAU,GAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC;YAC3G,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAkB,EAAC;gBACtC,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,OAAO,KAAK,KAAK;aAClC,CAAC,CAAC;YAEH,IAAA,sBAAU,EAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;YACzD,IAAA,eAAM,EACJ;gBACE,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO;aACR,EACD;gBACE,gBAAgB,MAAM,CAAC,OAAO,EAAE;gBAChC,YAAY,MAAM,CAAC,MAAM,0CAA0C;gBACnE,EAAE;gBACF,wDAAwD,MAAM,CAAC,OAAO,EAAE;aACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACJ,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,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9F,IAAA,oBAAW,EAAC,8BAA8B,OAAO,2CAA2C,CAAC,CAAC;YAChG,CAAC;iBAAM,CAAC;gBACN,IAAA,oBAAW,EAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsZpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAyCrD"}
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAyCrD"}
@@ -36,351 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerReviewCommand = registerReviewCommand;
37
37
  const fs = __importStar(require("fs"));
38
38
  const yaml = __importStar(require("js-yaml"));
39
- const crypto = __importStar(require("crypto"));
40
39
  const shared_1 = require("@graspful/shared");
41
40
  const output_1 = require("../lib/output");
42
- // ─── Check 1: yaml_parses ───────────────────────────────────────────────────
43
- function checkYamlParses(raw) {
44
- const result = shared_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 = shared_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
- }
41
+ const analytics_1 = require("../lib/analytics");
384
42
  function registerReviewCommand(program) {
385
43
  program
386
44
  .command('review <file>')
@@ -394,12 +52,12 @@ function registerReviewCommand(program) {
394
52
  try {
395
53
  raw = yaml.load(fs.readFileSync(file, 'utf-8'));
396
54
  }
397
- catch (e) {
398
- const msg = e instanceof Error ? e.message : String(e);
399
- (0, output_1.outputError)(`YAML parse error: ${msg}`);
55
+ catch (error) {
56
+ const message = error instanceof Error ? error.message : String(error);
57
+ (0, output_1.outputError)(`YAML parse error: ${message}`);
400
58
  process.exit(1);
401
59
  }
402
- const result = runReview(raw);
60
+ const result = (0, shared_1.runQualityGate)(raw);
403
61
  const lines = [
404
62
  result.passed ? 'PASS' : 'FAIL',
405
63
  `Score: ${result.score}`,
@@ -408,10 +66,11 @@ function registerReviewCommand(program) {
408
66
  if (result.failures.length > 0) {
409
67
  lines.push('');
410
68
  lines.push('Failures:');
411
- for (const f of result.failures) {
412
- lines.push(` [FAIL] ${f.check}: ${f.details ?? 'no details'}`);
69
+ for (const failure of result.failures) {
70
+ lines.push(` [FAIL] ${failure.check}: ${failure.details ?? 'no details'}`);
413
71
  }
414
72
  }
73
+ (0, analytics_1.cliCapture)('course reviewed', { score: result.score, passed: result.passed });
415
74
  (0, output_1.output)(result, lines.join('\n'));
416
75
  if (!result.passed) {
417
76
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,sDAyCC;AA/CD,uCAAyB;AACzB,8CAAgC;AAChC,6CAAkD;AAClD,0CAAoD;AACpD,gDAA8C;AAE9C,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uDAAuD,CAAC;SACpE,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,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,IAAA,oBAAW,EAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG;YACZ,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC/B,UAAU,MAAM,CAAC,KAAK,EAAE;YACxB,UAAU,MAAM,CAAC,KAAK,CAAC,QAAQ,cAAc,MAAM,CAAC,KAAK,CAAC,gBAAgB,cAAc,MAAM,CAAC,KAAK,CAAC,YAAY,YAAY,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,MAAM,CAAC,KAAK,CAAC,QAAQ,WAAW;SACvL,CAAC;QAEF,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO,IAAI,YAAY,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED,IAAA,sBAAU,EAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,IAAA,eAAM,EAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +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"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAqGvD"}
@@ -38,6 +38,7 @@ const fs = __importStar(require("fs"));
38
38
  const yaml = __importStar(require("js-yaml"));
39
39
  const shared_1 = require("@graspful/shared");
40
40
  const output_1 = require("../lib/output");
41
+ const analytics_1 = require("../lib/analytics");
41
42
  function detectFileType(data) {
42
43
  if (typeof data !== 'object' || data === null)
43
44
  return null;
@@ -148,6 +149,7 @@ function registerValidateCommand(program) {
148
149
  (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
150
  process.exit(1);
150
151
  }
152
+ (0, analytics_1.cliCapture)('course validated', { valid: true, error_count: 0, file_type: fileType });
151
153
  (0, output_1.output)({ valid: true, fileType, errors: [], stats }, `PASS ${fileType} validation\n${Object.entries(stats).map(([k, v]) => ` ${k}: ${v}`).join('\n')}`);
152
154
  });
153
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const commander_1 = require("commander");
5
5
  const output_1 = require("./lib/output");
6
+ const analytics_1 = require("./lib/analytics");
6
7
  const validate_1 = require("./commands/validate");
7
8
  const import_1 = require("./commands/import");
8
9
  const publish_1 = require("./commands/publish");
@@ -37,5 +38,5 @@ const fillCmd = (0, fill_concept_1.registerFillConceptCommand)(program);
37
38
  (0, login_1.registerLoginCommand)(program);
38
39
  (0, register_1.registerRegisterCommand)(program);
39
40
  (0, init_1.registerInitCommand)(program);
40
- program.parse();
41
+ program.parseAsync().then(() => (0, analytics_1.cliShutdown)()).catch(() => (0, analytics_1.cliShutdown)());
41
42
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,yCAA6D;AAC7D,kDAA8D;AAC9D,8CAA0D;AAC1D,gDAA4D;AAC5D,8CAA0D;AAC1D,4DAAuE;AACvE,0DAAqE;AACrE,0DAAqE;AACrE,kDAA8D;AAC9D,4CAAwD;AACxD,kDAA8D;AAC9D,0CAAsD;AAEtD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,4CAA4C,CAAC;KACzD,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,OAAO,CAAC;KACpE,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAA,wBAAe,EAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,MAAM,SAAS,GAAG,IAAA,2CAA2B,EAAC,OAAO,CAAC,CAAC;AACvD,IAAA,yCAA0B,EAAC,SAAS,CAAC,CAAC;AACtC,MAAM,OAAO,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,CAAC;AACpD,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,yCAA6D;AAC7D,+CAA8C;AAC9C,kDAA8D;AAC9D,8CAA0D;AAC1D,gDAA4D;AAC5D,8CAA0D;AAC1D,4DAAuE;AACvE,0DAAqE;AACrE,0DAAqE;AACrE,kDAA8D;AAC9D,4CAAwD;AACxD,kDAA8D;AAC9D,0CAAsD;AAEtD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,4CAA4C,CAAC;KACzD,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,OAAO,CAAC;KACpE,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAA,wBAAe,EAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,MAAM,SAAS,GAAG,IAAA,2CAA2B,EAAC,OAAO,CAAC,CAAC;AACvD,IAAA,yCAA0B,EAAC,SAAS,CAAC,CAAC;AACtC,MAAM,OAAO,GAAG,IAAA,yCAA0B,EAAC,OAAO,CAAC,CAAC;AACpD,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAW,GAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAW,GAAE,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function cliCapture(event: string, properties?: Record<string, unknown>): void;
2
+ export declare function cliShutdown(): Promise<void>;
3
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/lib/analytics.ts"],"names":[],"mappings":"AAsBA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,QAMjF;AAED,wBAAsB,WAAW,kBAEhC"}