@tutorflow/cli 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +246 -650
  2. package/dist/client.d.ts +18 -3
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +85 -18
  5. package/dist/client.js.map +1 -1
  6. package/dist/commands/agent.d.ts.map +1 -1
  7. package/dist/commands/agent.js +41 -26
  8. package/dist/commands/agent.js.map +1 -1
  9. package/dist/commands/auth.d.ts.map +1 -1
  10. package/dist/commands/auth.js +20 -12
  11. package/dist/commands/auth.js.map +1 -1
  12. package/dist/commands/classroom.d.ts +3 -0
  13. package/dist/commands/classroom.d.ts.map +1 -0
  14. package/dist/commands/classroom.js +27 -0
  15. package/dist/commands/classroom.js.map +1 -0
  16. package/dist/commands/config.d.ts.map +1 -1
  17. package/dist/commands/config.js +4 -4
  18. package/dist/commands/config.js.map +1 -1
  19. package/dist/commands/course.d.ts.map +1 -1
  20. package/dist/commands/course.js +25 -91
  21. package/dist/commands/course.js.map +1 -1
  22. package/dist/commands/credits.d.ts +3 -0
  23. package/dist/commands/credits.d.ts.map +1 -0
  24. package/dist/commands/credits.js +39 -0
  25. package/dist/commands/credits.js.map +1 -0
  26. package/dist/commands/evaluate.d.ts +3 -0
  27. package/dist/commands/evaluate.d.ts.map +1 -1
  28. package/dist/commands/evaluate.js +135 -44
  29. package/dist/commands/evaluate.js.map +1 -1
  30. package/dist/commands/interactive.d.ts +13 -0
  31. package/dist/commands/interactive.d.ts.map +1 -0
  32. package/dist/commands/interactive.js +100 -0
  33. package/dist/commands/interactive.js.map +1 -0
  34. package/dist/commands/learner.d.ts +4 -0
  35. package/dist/commands/learner.d.ts.map +1 -0
  36. package/dist/commands/learner.js +76 -0
  37. package/dist/commands/learner.js.map +1 -0
  38. package/dist/commands/module.d.ts.map +1 -1
  39. package/dist/commands/module.js +18 -98
  40. package/dist/commands/module.js.map +1 -1
  41. package/dist/commands/platform.d.ts.map +1 -1
  42. package/dist/commands/platform.js +12 -4
  43. package/dist/commands/platform.js.map +1 -1
  44. package/dist/commands/run.d.ts +3 -0
  45. package/dist/commands/run.d.ts.map +1 -0
  46. package/dist/commands/run.js +69 -0
  47. package/dist/commands/run.js.map +1 -0
  48. package/dist/commands/slide.d.ts.map +1 -1
  49. package/dist/commands/slide.js +25 -97
  50. package/dist/commands/slide.js.map +1 -1
  51. package/dist/commands/test.d.ts.map +1 -1
  52. package/dist/commands/test.js +38 -106
  53. package/dist/commands/test.js.map +1 -1
  54. package/dist/commands/video.d.ts.map +1 -1
  55. package/dist/commands/video.js +138 -86
  56. package/dist/commands/video.js.map +1 -1
  57. package/dist/commands/webhook.d.ts +3 -0
  58. package/dist/commands/webhook.d.ts.map +1 -0
  59. package/dist/commands/webhook.js +75 -0
  60. package/dist/commands/webhook.js.map +1 -0
  61. package/dist/config.d.ts +3 -0
  62. package/dist/config.d.ts.map +1 -1
  63. package/dist/config.js +17 -16
  64. package/dist/config.js.map +1 -1
  65. package/dist/content/context.d.ts +26 -0
  66. package/dist/content/context.d.ts.map +1 -0
  67. package/dist/content/context.js +74 -0
  68. package/dist/content/context.js.map +1 -0
  69. package/dist/content/resource.d.ts +66 -0
  70. package/dist/content/resource.d.ts.map +1 -0
  71. package/dist/content/resource.js +181 -0
  72. package/dist/content/resource.js.map +1 -0
  73. package/dist/content/runs.d.ts +51 -0
  74. package/dist/content/runs.d.ts.map +1 -0
  75. package/dist/content/runs.js +171 -0
  76. package/dist/content/runs.js.map +1 -0
  77. package/dist/index.js +71 -21
  78. package/dist/index.js.map +1 -1
  79. package/dist/types.d.ts +17 -64
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/types.js +4 -4
  82. package/dist/utils/args.d.ts +15 -0
  83. package/dist/utils/args.d.ts.map +1 -0
  84. package/dist/utils/args.js +91 -0
  85. package/dist/utils/args.js.map +1 -0
  86. package/dist/utils/keys.d.ts +11 -0
  87. package/dist/utils/keys.d.ts.map +1 -0
  88. package/dist/utils/keys.js +29 -0
  89. package/dist/utils/keys.js.map +1 -0
  90. package/dist/utils/output.d.ts.map +1 -1
  91. package/dist/utils/output.js +21 -6
  92. package/dist/utils/output.js.map +1 -1
  93. package/dist/utils/runtime.d.ts +14 -4
  94. package/dist/utils/runtime.d.ts.map +1 -1
  95. package/dist/utils/runtime.js +42 -7
  96. package/dist/utils/runtime.js.map +1 -1
  97. package/package.json +4 -3
  98. package/dist/utils/spinner.d.ts +0 -8
  99. package/dist/utils/spinner.d.ts.map +0 -1
  100. package/dist/utils/spinner.js +0 -26
  101. package/dist/utils/spinner.js.map +0 -1
@@ -38,13 +38,23 @@ function printResult(data) {
38
38
  for (const [k, v] of Object.entries(data)) {
39
39
  if (v === undefined || v === null)
40
40
  continue;
41
- process.stdout.write(chalk_1.default.gray(` ${k}: ${v}\n`));
41
+ process.stdout.write(chalk_1.default.gray(` ${k}: ${formatValue(v)}\n`));
42
42
  }
43
43
  }
44
44
  else {
45
45
  process.stdout.write(String(data) + '\n');
46
46
  }
47
47
  }
48
+ const MAX_TEXT_VALUE_LENGTH = 200;
49
+ /** Nested values print as compact JSON instead of "[object Object]". */
50
+ function formatValue(value) {
51
+ if (typeof value !== 'object')
52
+ return String(value);
53
+ const json = JSON.stringify(value);
54
+ return json.length > MAX_TEXT_VALUE_LENGTH
55
+ ? `${json.slice(0, MAX_TEXT_VALUE_LENGTH)}… (use --json for the full value)`
56
+ : json;
57
+ }
48
58
  /** Status/progress line. Suppressed in JSON mode to keep stdout clean. */
49
59
  function printStatus(message, kind = 'info') {
50
60
  if ((0, runtime_1.isJsonMode)())
@@ -58,23 +68,28 @@ function formatTable(rows) {
58
68
  const columns = Object.keys(rows[0]);
59
69
  const colWidths = {};
60
70
  columns.forEach((col) => {
61
- colWidths[col] = Math.max(col.length, ...rows.map((r) => String(r[col] ?? '').length));
71
+ colWidths[col] = Math.max(col.length, ...rows.map((r) => formatCell(r[col]).length));
62
72
  });
63
- const border = columns.map((c) => '─'.repeat(colWidths[c] + 2)).join('┼');
73
+ const border = (junction) => columns.map((c) => '─'.repeat(colWidths[c] + 2)).join(junction);
64
74
  const header = columns
65
75
  .map((c) => ` ${c}${' '.repeat(colWidths[c] - c.length)} `)
66
76
  .join('│');
67
77
  const body = rows
68
78
  .map((r) => columns
69
79
  .map((c) => {
70
- const v = String(r[c] ?? '');
80
+ const v = formatCell(r[c]);
71
81
  return ` ${v}${' '.repeat(colWidths[c] - v.length)} `;
72
82
  })
73
83
  .join('│'))
74
84
  .join('\n');
75
- return `┌${border}┐\n│${header}│\n├${border}┤\n${body
85
+ return `┌${border('┬')}┐\n│${header}│\n├${border('┼')}┤\n${body
76
86
  .split('\n')
77
87
  .map((r) => `│${r}│`)
78
- .join('\n')}\n└${border}┘`;
88
+ .join('\n')}\n└${border('┴')}┘`;
89
+ }
90
+ function formatCell(value) {
91
+ if (value === undefined || value === null)
92
+ return '';
93
+ return typeof value === 'object' ? JSON.stringify(value) : String(value);
79
94
  }
80
95
  //# sourceMappingURL=output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":";;;;;AAeA,kCAmBC;AAGD,kCAIC;AAED,kCAgCC;AA3ED,kDAA0B;AAC1B,uCAAuC;AAEvC;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,SAAgB,WAAW,CAAC,IAAa;IACvC,IAAI,IAAA,oBAAU,GAAE,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAiC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACrD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;gBAAE,SAAS;YAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,SAAgB,WAAW,CAAC,OAAe,EAAE,OAA2B,MAAM;IAC5E,IAAI,IAAA,oBAAU,GAAE;QAAE,OAAO;IACzB,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC;IAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAgB,WAAW,CAAC,IAA+B;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CACvB,GAAG,CAAC,MAAM,EACV,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAChD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,OAAO;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SAC1D,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAAG,IAAI;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,OAAO;SACJ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACxD,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CACb;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,IAAI,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,IAAI;SAClD,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;SACpB,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,GAAG,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  /**
2
2
  * Runtime helpers shared by every command.
3
3
  *
4
- * Output mode and debug are set once on the root program and read here so
5
- * subcommands don't need to thread options through. They are the *only*
6
- * pieces of mutable global state in the CLI.
4
+ * Output mode, debug and the classroom override are set once on the root
5
+ * program and read here so subcommands don't need to thread options through.
6
+ * They are the *only* pieces of mutable global state in the CLI.
7
7
  */
8
8
  export declare function setJsonMode(on: boolean): void;
9
9
  export declare function setDebugMode(on: boolean): void;
10
+ export declare function setClassroomOverride(classroomId: string | undefined): void;
11
+ export declare function getClassroomOverride(): string | undefined;
10
12
  export declare function isJsonMode(): boolean;
11
13
  export declare function isDebugMode(): boolean;
12
14
  /**
@@ -14,20 +16,26 @@ export declare function isDebugMode(): boolean;
14
16
  * AI agent sandboxes, etc. — i.e. anywhere `@clack/prompts` would crash.
15
17
  */
16
18
  export declare function isInteractive(): boolean;
19
+ /** Prompts write to stdout, so JSON mode never prompts even on a TTY. */
20
+ export declare function canPrompt(): boolean;
17
21
  /**
18
22
  * Wrap a command action so:
19
23
  * - thrown errors always set exit code 1 (or the error's `exitCode`)
20
- * - in JSON mode, errors are serialized as { error: { message, code? } }
24
+ * - in JSON mode, errors are serialized as { error: { message, code, ...details } }
21
25
  * - in text mode, errors are formatted via `printError`
22
26
  * - stack traces are printed only when DEBUG / --debug is on
23
27
  */
24
28
  export declare function command<T extends unknown[]>(fn: (...args: T) => Promise<void> | void): (...args: T) => Promise<void>;
29
+ export type CliErrorDetails = Record<string, unknown>;
25
30
  export declare class CliError extends Error {
26
31
  readonly code: string;
27
32
  readonly exitCode: number;
33
+ /** Extra machine-readable fields merged into the JSON error (status, apiCode, hint, …). */
34
+ readonly details?: CliErrorDetails;
28
35
  constructor(message: string, opts?: {
29
36
  code?: string;
30
37
  exitCode?: number;
38
+ details?: CliErrorDetails;
31
39
  });
32
40
  }
33
41
  export declare function printError(error: unknown): void;
@@ -36,4 +44,6 @@ export declare function printError(error: unknown): void;
36
44
  * `hint` should describe the flags the caller could use instead.
37
45
  */
38
46
  export declare function requireInteractive(hint: string): void;
47
+ /** Progress line for long waits: stderr, text mode only, never in JSON mode. */
48
+ export declare function printProgress(message: string): void;
39
49
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/utils/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED,wBAAgB,UAAU,IAAI,OAAO,CAGpC;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EACzC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACvC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAS/B;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;CAK7E;AAiBD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAc/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMrD"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/utils/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAE9C;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE1E;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAEzD;AAED,wBAAgB,UAAU,IAAI,OAAO,CAGpC;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,yEAAyE;AACzE,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EACzC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACvC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAS/B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;gBAGjC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,eAAe,CAAA;KAAO;CAO7E;AA0BD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAqB/C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGnD"}
@@ -2,28 +2,39 @@
2
2
  /**
3
3
  * Runtime helpers shared by every command.
4
4
  *
5
- * Output mode and debug are set once on the root program and read here so
6
- * subcommands don't need to thread options through. They are the *only*
7
- * pieces of mutable global state in the CLI.
5
+ * Output mode, debug and the classroom override are set once on the root
6
+ * program and read here so subcommands don't need to thread options through.
7
+ * They are the *only* pieces of mutable global state in the CLI.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.CliError = void 0;
11
11
  exports.setJsonMode = setJsonMode;
12
12
  exports.setDebugMode = setDebugMode;
13
+ exports.setClassroomOverride = setClassroomOverride;
14
+ exports.getClassroomOverride = getClassroomOverride;
13
15
  exports.isJsonMode = isJsonMode;
14
16
  exports.isDebugMode = isDebugMode;
15
17
  exports.isInteractive = isInteractive;
18
+ exports.canPrompt = canPrompt;
16
19
  exports.command = command;
17
20
  exports.printError = printError;
18
21
  exports.requireInteractive = requireInteractive;
22
+ exports.printProgress = printProgress;
19
23
  let jsonMode = false;
20
24
  let debugMode = false;
25
+ let classroomOverride;
21
26
  function setJsonMode(on) {
22
27
  jsonMode = on;
23
28
  }
24
29
  function setDebugMode(on) {
25
30
  debugMode = on;
26
31
  }
32
+ function setClassroomOverride(classroomId) {
33
+ classroomOverride = classroomId?.trim() || undefined;
34
+ }
35
+ function getClassroomOverride() {
36
+ return classroomOverride;
37
+ }
27
38
  function isJsonMode() {
28
39
  // Env var override lets agents set this once globally without a flag.
29
40
  return jsonMode || process.env.TUTORFLOW_JSON === '1';
@@ -38,10 +49,14 @@ function isDebugMode() {
38
49
  function isInteractive() {
39
50
  return Boolean(process.stdin.isTTY) && Boolean(process.stdout.isTTY);
40
51
  }
52
+ /** Prompts write to stdout, so JSON mode never prompts even on a TTY. */
53
+ function canPrompt() {
54
+ return isInteractive() && !isJsonMode();
55
+ }
41
56
  /**
42
57
  * Wrap a command action so:
43
58
  * - thrown errors always set exit code 1 (or the error's `exitCode`)
44
- * - in JSON mode, errors are serialized as { error: { message, code? } }
59
+ * - in JSON mode, errors are serialized as { error: { message, code, ...details } }
45
60
  * - in text mode, errors are formatted via `printError`
46
61
  * - stack traces are printed only when DEBUG / --debug is on
47
62
  */
@@ -61,6 +76,7 @@ class CliError extends Error {
61
76
  super(message);
62
77
  this.code = opts.code ?? 'EGENERIC';
63
78
  this.exitCode = opts.exitCode ?? 1;
79
+ this.details = opts.details;
64
80
  }
65
81
  }
66
82
  exports.CliError = CliError;
@@ -79,15 +95,28 @@ function getErrorMessage(error) {
79
95
  return error.message;
80
96
  return String(error);
81
97
  }
98
+ function getErrorDetails(error) {
99
+ if (error instanceof CliError && error.details) {
100
+ return Object.fromEntries(Object.entries(error.details).filter(([, value]) => value !== undefined));
101
+ }
102
+ return {};
103
+ }
82
104
  function printError(error) {
83
105
  const message = getErrorMessage(error);
84
106
  const code = getErrorCode(error);
107
+ const details = getErrorDetails(error);
85
108
  if (isJsonMode()) {
86
- process.stderr.write(JSON.stringify({ error: { message, code } }) + '\n');
109
+ process.stderr.write(JSON.stringify({ error: { message, code, ...details } }) + '\n');
87
110
  }
88
111
  else {
89
112
  // chalk is loaded by callers; keep this dependency-free and use ANSI directly.
90
113
  process.stderr.write(`\x1b[31m✗ ${message}\x1b[0m\n`);
114
+ if (typeof details.hint === 'string') {
115
+ process.stderr.write(`\x1b[90m ${details.hint}\x1b[0m\n`);
116
+ }
117
+ if (typeof details.requestId === 'string') {
118
+ process.stderr.write(`\x1b[90m request id: ${details.requestId}\x1b[0m\n`);
119
+ }
91
120
  }
92
121
  if (isDebugMode() && error instanceof Error && error.stack) {
93
122
  process.stderr.write(error.stack + '\n');
@@ -98,8 +127,14 @@ function printError(error) {
98
127
  * `hint` should describe the flags the caller could use instead.
99
128
  */
100
129
  function requireInteractive(hint) {
101
- if (isInteractive())
130
+ if (canPrompt())
131
+ return;
132
+ throw new CliError(`Required input not provided and no prompt is possible (no terminal, or JSON mode). ${hint}`, { code: 'ENOINTERACTIVE', exitCode: 2 });
133
+ }
134
+ /** Progress line for long waits: stderr, text mode only, never in JSON mode. */
135
+ function printProgress(message) {
136
+ if (isJsonMode())
102
137
  return;
103
- throw new CliError(`Required input not provided and stdin is not a terminal. ${hint}`, { code: 'ENOINTERACTIVE', exitCode: 2 });
138
+ process.stderr.write(`\x1b[90m${message}\x1b[0m\n`);
104
139
  }
105
140
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/utils/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/utils/runtime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tutorflow/cli",
3
- "version": "0.3.0",
4
- "description": "TutorFlow CLI - agent-friendly tool for creating AI-powered educational content (slides, videos, courses) and evaluating student responses. Supports --json output, env-var auth, and non-interactive use.",
3
+ "version": "0.4.0",
4
+ "description": "TutorFlow CLI - agent-friendly command line for the TutorFlow Content API: generate courses, slides, tests, modules, videos, games and simulations, grade learner answers, and manage learners and webhooks. Supports --json output, env-var auth, --wait polling, and non-interactive use.",
5
5
  "keywords": [
6
6
  "tutorflow",
7
7
  "education",
@@ -14,12 +14,13 @@
14
14
  "tutor",
15
15
  "lesson",
16
16
  "evaluation",
17
+ "content-api",
17
18
  "cli",
18
19
  "agent",
19
20
  "automation"
20
21
  ],
21
22
  "bin": {
22
- "tutorflow": "./dist/index.js"
23
+ "tutorflow": "dist/index.js"
23
24
  },
24
25
  "main": "./dist/index.js",
25
26
  "types": "./dist/index.d.ts",
@@ -1,8 +0,0 @@
1
- import { spinner as clackSpinner } from '@clack/prompts';
2
- export type Spinner = ReturnType<typeof clackSpinner>;
3
- export declare function createSpinner(): Spinner;
4
- export declare function startSpinner(message: string): Spinner;
5
- export declare function stopSpinner(s: Spinner, message: string): void;
6
- export declare function successSpinner(s: Spinner, message: string): void;
7
- export declare function errorSpinner(s: Spinner, message: string): void;
8
- //# sourceMappingURL=spinner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAEtD,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7D;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9D"}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSpinner = createSpinner;
4
- exports.startSpinner = startSpinner;
5
- exports.stopSpinner = stopSpinner;
6
- exports.successSpinner = successSpinner;
7
- exports.errorSpinner = errorSpinner;
8
- const prompts_1 = require("@clack/prompts");
9
- function createSpinner() {
10
- return (0, prompts_1.spinner)();
11
- }
12
- function startSpinner(message) {
13
- const s = (0, prompts_1.spinner)();
14
- s.start(message);
15
- return s;
16
- }
17
- function stopSpinner(s, message) {
18
- s.stop(message);
19
- }
20
- function successSpinner(s, message) {
21
- s.stop(`✓ ${message}`);
22
- }
23
- function errorSpinner(s, message) {
24
- s.stop(`✗ ${message}`);
25
- }
26
- //# sourceMappingURL=spinner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":";;AAIA,sCAEC;AAED,oCAIC;AAED,kCAEC;AAED,wCAEC;AAED,oCAEC;AAxBD,4CAAyD;AAIzD,SAAgB,aAAa;IAC3B,OAAO,IAAA,iBAAY,GAAE,CAAC;AACxB,CAAC;AAED,SAAgB,YAAY,CAAC,OAAe;IAC1C,MAAM,CAAC,GAAG,IAAA,iBAAY,GAAE,CAAC;IACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,WAAW,CAAC,CAAU,EAAE,OAAe;IACrD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,cAAc,CAAC,CAAU,EAAE,OAAe;IACxD,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,YAAY,CAAC,CAAU,EAAE,OAAe;IACtD,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AACzB,CAAC"}