@tutorflow/cli 0.3.1 → 0.5.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 (105) hide show
  1. package/README.md +261 -659
  2. package/dist/client.d.ts +16 -2
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +76 -16
  5. package/dist/client.js.map +1 -1
  6. package/dist/commands/agent.d.ts.map +1 -1
  7. package/dist/commands/agent.js +38 -23
  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 +27 -96
  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 +98 -57
  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 +105 -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 +20 -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 +10 -2
  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 +27 -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 +40 -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 +143 -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/content/sharing.d.ts +24 -0
  78. package/dist/content/sharing.d.ts.map +1 -0
  79. package/dist/content/sharing.js +88 -0
  80. package/dist/content/sharing.js.map +1 -0
  81. package/dist/index.js +71 -21
  82. package/dist/index.js.map +1 -1
  83. package/dist/types.d.ts +15 -65
  84. package/dist/types.d.ts.map +1 -1
  85. package/dist/types.js +4 -4
  86. package/dist/utils/args.d.ts +15 -0
  87. package/dist/utils/args.d.ts.map +1 -0
  88. package/dist/utils/args.js +91 -0
  89. package/dist/utils/args.js.map +1 -0
  90. package/dist/utils/keys.d.ts +11 -0
  91. package/dist/utils/keys.d.ts.map +1 -0
  92. package/dist/utils/keys.js +29 -0
  93. package/dist/utils/keys.js.map +1 -0
  94. package/dist/utils/output.d.ts.map +1 -1
  95. package/dist/utils/output.js +21 -6
  96. package/dist/utils/output.js.map +1 -1
  97. package/dist/utils/runtime.d.ts +14 -4
  98. package/dist/utils/runtime.d.ts.map +1 -1
  99. package/dist/utils/runtime.js +42 -7
  100. package/dist/utils/runtime.js.map +1 -1
  101. package/package.json +4 -3
  102. package/dist/utils/spinner.d.ts +0 -8
  103. package/dist/utils/spinner.d.ts.map +0 -1
  104. package/dist/utils/spinner.js +0 -26
  105. package/dist/utils/spinner.js.map +0 -1
package/dist/client.d.ts CHANGED
@@ -1,7 +1,21 @@
1
+ import { CliError } from './utils/runtime';
1
2
  export interface IClientConfig {
2
3
  apiKey: string;
3
4
  baseUrl: string;
4
5
  }
6
+ export declare const DEFAULT_BASE_URL = "https://api.tutorflow.io";
7
+ /** An env var counts only when it is set to something non-empty. */
8
+ export declare function envValue(name: string): string | undefined;
9
+ /**
10
+ * Resolution order (env wins so CI/agents can override config without
11
+ * touching ~/.tutorflow/config.json):
12
+ *
13
+ * 1. TUTORFLOW_API_KEY / TUTORFLOW_BASE_URL env vars
14
+ * 2. ~/.tutorflow/config.json
15
+ * 3. baseUrl default
16
+ */
17
+ export declare function resolveConfig(): Promise<IClientConfig>;
18
+ export declare function toApiError(status: number, data: unknown, headerRequestId?: string): CliError;
5
19
  export declare class ApiClient {
6
20
  private config;
7
21
  constructor(config?: IClientConfig);
@@ -13,8 +27,8 @@ export declare class ApiClient {
13
27
  * "not authenticated" path.
14
28
  */
15
29
  static createAuthenticated(): Promise<ApiClient>;
30
+ get apiKey(): string;
31
+ get baseUrl(): string;
16
32
  request<T>(method: string, endpoint: string, body?: Record<string, unknown>, extraHeaders?: Record<string, string>): Promise<T>;
17
- setApiKey(apiKey: string): void;
18
- setBaseUrl(baseUrl: string): void;
19
33
  }
20
34
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAqBD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,CAAC,EAAE,aAAa;WAIrB,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;WAI5B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAK/C;;;;OAIG;WACU,mBAAmB,IAAI,OAAO,CAAC,SAAS,CAAC;IAWhD,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,OAAO,CAAC,CAAC,CAAC;IA4Cb,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,UAAU,CAAC,OAAO,EAAE,MAAM;CAG3B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAE3D,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzD;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAM5D;AAiDD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,QAAQ,CAqB5F;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,CAAC,EAAE,aAAa;WAKrB,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;WAI5B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAK/C;;;;OAIG;WACU,mBAAmB,IAAI,OAAO,CAAC,SAAS,CAAC;IAWtD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAEK,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,OAAO,CAAC,CAAC,CAAC;CAsCd"}
package/dist/client.js CHANGED
@@ -1,10 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ApiClient = void 0;
3
+ exports.ApiClient = exports.DEFAULT_BASE_URL = void 0;
4
+ exports.envValue = envValue;
5
+ exports.resolveConfig = resolveConfig;
6
+ exports.toApiError = toApiError;
4
7
  const undici_1 = require("undici");
5
8
  const config_1 = require("./config");
6
9
  const runtime_1 = require("./utils/runtime");
7
- const DEFAULT_BASE_URL = 'https://api.tutorflow.io';
10
+ exports.DEFAULT_BASE_URL = 'https://api.tutorflow.io';
11
+ /** An env var counts only when it is set to something non-empty. */
12
+ function envValue(name) {
13
+ const value = process.env[name]?.trim();
14
+ return value ? value : undefined;
15
+ }
8
16
  /**
9
17
  * Resolution order (env wins so CI/agents can override config without
10
18
  * touching ~/.tutorflow/config.json):
@@ -16,13 +24,66 @@ const DEFAULT_BASE_URL = 'https://api.tutorflow.io';
16
24
  async function resolveConfig() {
17
25
  const fileConfig = await (0, config_1.readConfig)();
18
26
  return {
19
- apiKey: process.env.TUTORFLOW_API_KEY ?? fileConfig.apiKey ?? '',
20
- baseUrl: process.env.TUTORFLOW_BASE_URL ?? fileConfig.baseUrl ?? DEFAULT_BASE_URL,
27
+ apiKey: envValue('TUTORFLOW_API_KEY') ?? fileConfig.apiKey ?? '',
28
+ baseUrl: envValue('TUTORFLOW_BASE_URL') ?? fileConfig.baseUrl ?? exports.DEFAULT_BASE_URL,
21
29
  };
22
30
  }
31
+ /** Advice for API error codes an agent can act on. */
32
+ const API_ERROR_HINTS = {
33
+ content_payment_required: 'Add credits: `tutorflow agent billing session` (needs a verified email) or ' +
34
+ '`tutorflow agent billing x402-deposit --amount-usd <n>`. Check the balance with `tutorflow credits balance`.',
35
+ content_platform_key_not_accepted: 'The Content API takes tf_content_ keys only. `tutorflow agent register` returns one (contentApiKey).',
36
+ platform_content_key_too_narrow: 'Account routes need a full live tf_content_ key. Pass --classroom <id> to skip the account lookup.',
37
+ content_insufficient_scope: 'This key lacks the scope named in requiredScope.',
38
+ content_classroom_not_allowed: 'This key cannot reach that classroom. `tutorflow classroom list` shows the ones it can.',
39
+ content_sandbox_unsupported: 'Test keys (tf_content_test_) cannot use this route; use a live key.',
40
+ email_verification_required: 'Verify the account email first: `tutorflow agent verify-email resend`.',
41
+ content_precondition_failed: 'The resource changed meanwhile; fetch it again and retry.',
42
+ };
43
+ const STATUS_HINTS = {
44
+ 401: 'Check the API key: `tutorflow auth whoami`.',
45
+ 402: API_ERROR_HINTS.content_payment_required,
46
+ 429: 'Rate limited; retry after retryAfterSeconds.',
47
+ };
48
+ function readErrorBody(data) {
49
+ if (!data || typeof data !== 'object')
50
+ return undefined;
51
+ const record = data;
52
+ if (record.error && typeof record.error === 'object')
53
+ return record.error;
54
+ if ('message' in record)
55
+ return record;
56
+ return undefined;
57
+ }
58
+ function formatMessage(message) {
59
+ if (Array.isArray(message))
60
+ return message.join('; ');
61
+ return message;
62
+ }
63
+ function toApiError(status, data, headerRequestId) {
64
+ const body = readErrorBody(data);
65
+ const apiCode = typeof body?.code === 'string' ? body.code : undefined;
66
+ const message = formatMessage(body?.message) ?? (typeof data === 'string' && data ? data : JSON.stringify(data));
67
+ const prefix = apiCode ? `API error ${status} ${apiCode}` : `API error ${status}`;
68
+ return new runtime_1.CliError(`${prefix}: ${message}`, {
69
+ code: `EHTTP_${status}`,
70
+ details: {
71
+ status,
72
+ apiCode,
73
+ requestId: body?.requestId ?? headerRequestId,
74
+ retryAfterSeconds: body?.retryAfterSeconds,
75
+ requiredScope: body?.requiredScope,
76
+ validation: Array.isArray(body?.details) ? body?.details : undefined,
77
+ billingSessionUrl: body?.billingSessionUrl,
78
+ x402: body?.x402,
79
+ hint: (apiCode && API_ERROR_HINTS[apiCode]) ?? STATUS_HINTS[status],
80
+ },
81
+ });
82
+ }
23
83
  class ApiClient {
24
84
  constructor(config) {
25
- this.config = config || { apiKey: '', baseUrl: DEFAULT_BASE_URL };
85
+ const resolved = config || { apiKey: '', baseUrl: exports.DEFAULT_BASE_URL };
86
+ this.config = { ...resolved, baseUrl: resolved.baseUrl.replace(/\/+$/, '') };
26
87
  }
27
88
  static async create() {
28
89
  return new ApiClient(await resolveConfig());
@@ -43,12 +104,17 @@ class ApiClient {
43
104
  }
44
105
  return new ApiClient(config);
45
106
  }
107
+ get apiKey() {
108
+ return this.config.apiKey;
109
+ }
110
+ get baseUrl() {
111
+ return this.config.baseUrl;
112
+ }
46
113
  async request(method, endpoint, body, extraHeaders) {
47
114
  const url = `${this.config.baseUrl}${endpoint}`;
48
- const headers = {
49
- 'Content-Type': 'application/json',
50
- ...extraHeaders,
51
- };
115
+ const headers = { Accept: 'application/json', ...extraHeaders };
116
+ if (body)
117
+ headers['Content-Type'] = 'application/json';
52
118
  if (this.config.apiKey) {
53
119
  headers.Authorization = `Bearer ${this.config.apiKey}`;
54
120
  }
@@ -74,16 +140,10 @@ class ApiClient {
74
140
  // non-JSON response; keep as text
75
141
  }
76
142
  if (!response.ok) {
77
- throw new runtime_1.CliError(`API error ${response.status}: ${typeof data === 'string' ? data : JSON.stringify(data)}`, { code: `EHTTP_${response.status}` });
143
+ throw toApiError(response.status, data, response.headers.get('request-id') ?? undefined);
78
144
  }
79
145
  return data;
80
146
  }
81
- setApiKey(apiKey) {
82
- this.config.apiKey = apiKey;
83
- }
84
- setBaseUrl(baseUrl) {
85
- this.config.baseUrl = baseUrl;
86
- }
87
147
  }
88
148
  exports.ApiClient = ApiClient;
89
149
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,YAAY,IAAI,OAAO,CAiKtC"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,YAAY,IAAI,OAAO,CAkLtC"}
@@ -4,44 +4,49 @@ exports.agentCommand = agentCommand;
4
4
  const commander_1 = require("commander");
5
5
  const prompts_1 = require("@clack/prompts");
6
6
  const client_1 = require("../client");
7
+ const keys_1 = require("../utils/keys");
7
8
  const config_1 = require("../config");
8
9
  const output_1 = require("../utils/output");
9
10
  const runtime_1 = require("../utils/runtime");
10
- const DEFAULT_BASE_URL = 'https://api.tutorflow.io';
11
+ const args_1 = require("../utils/args");
11
12
  function agentCommand() {
12
- const agent = new commander_1.Command('agent').description('Manage TutorFlow agent platform account');
13
+ const agent = new commander_1.Command('agent').description('Agent Platform account: registration, balance, billing and email verification');
13
14
  agent
14
15
  .command('register')
15
- .description('Self-register a TutorFlow Platform workspace and receive an API key')
16
+ .description('Self-register an agent account and receive a Content API key (tf_content_)')
16
17
  .option('--name <name>', 'Workspace display name')
17
18
  .option('--slug <slug>', 'Unique workspace slug')
18
- .option('--email <email>', 'Contact email for the workspace')
19
+ .option('--email <email>', 'Contact email; needed to verify the account and buy credits')
19
20
  .option('--agent-identity <identity>', 'Optional agent identity string')
20
- .option('--no-save', 'Do not save the returned API key to ~/.tutorflow/config.json')
21
+ .option('--no-save', 'Do not save the returned Content API key to ~/.tutorflow/config.json')
21
22
  .action((0, runtime_1.command)(async (options) => {
22
23
  const name = await requiredOptionOrPrompt(options.name, 'Workspace display name:', '--name <name>');
23
24
  const slug = await requiredOptionOrPrompt(options.slug, 'Workspace slug:', '--slug <slug>');
24
- const baseUrl = await resolveBaseUrl();
25
+ const { baseUrl } = await (0, client_1.resolveConfig)();
26
+ // Pin the API origin only when it is not the default (staging, self-hosted).
27
+ const savedBaseUrl = baseUrl === client_1.DEFAULT_BASE_URL ? undefined : baseUrl;
25
28
  const client = await client_1.ApiClient.createPublic();
26
- const body = {
29
+ const body = (0, args_1.compact)({
27
30
  name,
28
31
  slug,
29
32
  email: options.email,
30
33
  agentIdentity: options.agentIdentity,
31
- };
32
- Object.keys(body).forEach((key) => {
33
- if (body[key] === undefined || body[key] === '')
34
- delete body[key];
35
34
  });
36
35
  const response = await client.request('POST', '/v1/platform/agent/register', body);
36
+ // Content commands need the tf_content_ key; the platform key is kept
37
+ // in the answer only for the deprecated /v1/platform content routes.
38
+ const savedKey = response.contentApiKey ?? response.apiKey;
37
39
  if (options.save !== false) {
38
- await (0, config_1.updateConfig)({ apiKey: response.apiKey, baseUrl });
40
+ await (0, config_1.updateConfig)({ apiKey: savedKey, baseUrl: savedBaseUrl });
39
41
  }
40
42
  (0, output_1.printResult)(response);
43
+ if (options.save !== false) {
44
+ (0, output_1.printStatus)(`Saved ${(0, keys_1.maskApiKey)(savedKey)} to ~/.tutorflow/config.json`, 'success');
45
+ }
41
46
  }));
42
47
  agent
43
48
  .command('account')
44
- .description('Show the authenticated agent account')
49
+ .description('Show balance, defaultClassroomId, sandboxClassroomId and Content API URLs')
45
50
  .action((0, runtime_1.command)(async () => {
46
51
  const client = await client_1.ApiClient.createAuthenticated();
47
52
  const response = await client.request('GET', '/v1/platform/agent/account');
@@ -64,6 +69,16 @@ function agentCommand() {
64
69
  const response = await client.request('POST', '/v1/platform/agent/billing/session');
65
70
  (0, output_1.printResult)(response);
66
71
  }));
72
+ billing
73
+ .command('x402-deposit')
74
+ .description('Get a USDC (Base) deposit address for an amount; pay it, then send the x402 payment')
75
+ .requiredOption('--amount-usd <amount>', 'Amount in USD')
76
+ .action((0, runtime_1.command)(async (options) => {
77
+ const amountUsd = parseAmountUsd(options.amountUsd);
78
+ const client = await client_1.ApiClient.createAuthenticated();
79
+ const response = await client.request('POST', '/v1/platform/agent/billing/x402/deposit', { amountUsd });
80
+ (0, output_1.printResult)(response);
81
+ }));
67
82
  agent.addCommand(billing);
68
83
  const checkout = new commander_1.Command('checkout').description('Use public checkout token endpoints');
69
84
  checkout
@@ -82,13 +97,7 @@ function agentCommand() {
82
97
  .requiredOption('--token <token>', 'Checkout token from agent billing session URL')
83
98
  .requiredOption('--amount-usd <amount>', 'Top-up amount in USD')
84
99
  .action((0, runtime_1.command)(async (options) => {
85
- const amountUsd = Number.parseFloat(options.amountUsd);
86
- if (!Number.isFinite(amountUsd)) {
87
- throw new runtime_1.CliError('--amount-usd must be a number', {
88
- code: 'EINVAL',
89
- exitCode: 2,
90
- });
91
- }
100
+ const amountUsd = parseAmountUsd(options.amountUsd);
92
101
  const client = await client_1.ApiClient.createPublic();
93
102
  const response = await client.request('POST', '/v1/platform/agent/checkout', { token: options.token, amountUsd });
94
103
  (0, output_1.printResult)(response);
@@ -116,8 +125,14 @@ async function requiredOptionOrPrompt(value, message, flagHint) {
116
125
  }
117
126
  return result;
118
127
  }
119
- async function resolveBaseUrl() {
120
- const fileConfig = await (0, config_1.readConfig)();
121
- return process.env.TUTORFLOW_BASE_URL ?? fileConfig.baseUrl ?? DEFAULT_BASE_URL;
128
+ function parseAmountUsd(value) {
129
+ const amountUsd = Number(value);
130
+ if (!Number.isFinite(amountUsd) || amountUsd <= 0) {
131
+ throw new runtime_1.CliError('--amount-usd must be a positive number', {
132
+ code: 'EINVAL',
133
+ exitCode: 2,
134
+ });
135
+ }
136
+ return amountUsd;
122
137
  }
123
138
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,WAAW,IAAI,OAAO,CAiFrC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,WAAW,IAAI,OAAO,CA8ErC"}
@@ -3,17 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.authCommand = authCommand;
4
4
  const commander_1 = require("commander");
5
5
  const prompts_1 = require("@clack/prompts");
6
+ const client_1 = require("../client");
6
7
  const config_1 = require("../config");
8
+ const keys_1 = require("../utils/keys");
7
9
  const runtime_1 = require("../utils/runtime");
8
10
  const output_1 = require("../utils/output");
9
11
  function authCommand() {
10
12
  const auth = new commander_1.Command('auth').description('Manage authentication');
11
13
  auth
12
14
  .command('login')
13
- .description('Authenticate with your API key')
15
+ .description('Save an API key (tf_content_… for content commands)')
14
16
  .option('--api-key <key>', 'API key (overrides interactive prompt; also reads TUTORFLOW_API_KEY)')
15
17
  .action((0, runtime_1.command)(async (options) => {
16
- let apiKey = options.apiKey ?? process.env.TUTORFLOW_API_KEY;
18
+ let apiKey = options.apiKey ?? (0, client_1.envValue)('TUTORFLOW_API_KEY');
17
19
  if (!apiKey) {
18
20
  (0, runtime_1.requireInteractive)('Pass --api-key <key> or set TUTORFLOW_API_KEY.');
19
21
  const result = await (0, prompts_1.password)({ message: 'Enter your TutorFlow API key:' });
@@ -22,12 +24,14 @@ function authCommand() {
22
24
  }
23
25
  apiKey = result;
24
26
  }
25
- if (!apiKey || !apiKey.trim()) {
27
+ apiKey = apiKey?.trim();
28
+ if (!apiKey) {
26
29
  throw new runtime_1.CliError('API key is empty', { code: 'EINVAL', exitCode: 2 });
27
30
  }
28
31
  await (0, config_1.updateConfig)({ apiKey });
29
- (0, output_1.printStatus)('Authentication successful', 'success');
30
- (0, output_1.printResult)({ ok: true, apiKeyPreview: `${apiKey.slice(0, 10)}...` });
32
+ const keyKind = (0, keys_1.getApiKeyKind)(apiKey);
33
+ (0, output_1.printStatus)('Authentication saved', 'success');
34
+ (0, output_1.printResult)({ ok: true, apiKeyPreview: (0, keys_1.maskApiKey)(apiKey), keyKind, warning: keyWarning(keyKind) });
31
35
  }));
32
36
  auth
33
37
  .command('logout')
@@ -36,7 +40,7 @@ function authCommand() {
36
40
  .action((0, runtime_1.command)(async (options) => {
37
41
  if (!options.force) {
38
42
  // In non-interactive mode require --force so we never block silently.
39
- if (!process.stdin.isTTY) {
43
+ if (!(0, runtime_1.canPrompt)()) {
40
44
  throw new runtime_1.CliError('Pass --force to logout in non-interactive mode.', {
41
45
  code: 'ENOINTERACTIVE',
42
46
  exitCode: 2,
@@ -55,21 +59,25 @@ function authCommand() {
55
59
  }));
56
60
  auth
57
61
  .command('whoami')
58
- .description('Show current authenticated workspace')
62
+ .description('Show which key and API the CLI will use (no network call)')
59
63
  .action((0, runtime_1.command)(async () => {
60
- const fileConfig = await (0, config_1.readConfig)();
61
- const apiKey = process.env.TUTORFLOW_API_KEY ?? fileConfig.apiKey;
62
- const baseUrl = process.env.TUTORFLOW_BASE_URL ?? fileConfig.baseUrl ?? 'https://api.tutorflow.io';
64
+ const { apiKey, baseUrl } = await (0, client_1.resolveConfig)();
63
65
  if (!apiKey) {
64
66
  throw new runtime_1.CliError('Not authenticated', { code: 'EAUTH', exitCode: 1 });
65
67
  }
68
+ const keyKind = (0, keys_1.getApiKeyKind)(apiKey);
66
69
  (0, output_1.printResult)({
67
70
  authenticated: true,
68
- apiKeyPreview: `${apiKey.slice(0, 10)}...`,
71
+ apiKeyPreview: (0, keys_1.maskApiKey)(apiKey),
72
+ keyKind,
69
73
  baseUrl,
70
- source: process.env.TUTORFLOW_API_KEY ? 'env' : 'config',
74
+ source: (0, client_1.envValue)('TUTORFLOW_API_KEY') ? 'env' : 'config',
75
+ warning: keyWarning(keyKind),
71
76
  });
72
77
  }));
73
78
  return auth;
74
79
  }
80
+ function keyWarning(keyKind) {
81
+ return keyKind === 'platform' ? keys_1.PLATFORM_KEY_MESSAGE : undefined;
82
+ }
75
83
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function classroomCommand(): Command;
3
+ //# sourceMappingURL=classroom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classroom.d.ts","sourceRoot":"","sources":["../../src/commands/classroom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,gBAAgB,IAAI,OAAO,CAwB1C"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classroomCommand = classroomCommand;
4
+ const commander_1 = require("commander");
5
+ const output_1 = require("../utils/output");
6
+ const runtime_1 = require("../utils/runtime");
7
+ const context_1 = require("../content/context");
8
+ function classroomCommand() {
9
+ const classroom = new commander_1.Command('classroom').description('Classrooms this Content API key can reach');
10
+ classroom
11
+ .command('list')
12
+ .description('List classrooms (pin one with --classroom, TUTORFLOW_CLASSROOM_ID or `config set classroomId`)')
13
+ .action((0, runtime_1.command)(async () => {
14
+ const client = await (0, context_1.createContentClient)();
15
+ const classrooms = await client.request('GET', '/v1/content/classrooms');
16
+ (0, output_1.printResult)((0, runtime_1.isJsonMode)()
17
+ ? classrooms
18
+ : classrooms.map((c) => ({
19
+ ID: c.id,
20
+ Name: c.name ?? '',
21
+ Slug: c.slug ?? '',
22
+ Sandbox: c.isSandbox ? 'yes' : '',
23
+ })));
24
+ }));
25
+ return classroom;
26
+ }
27
+ //# sourceMappingURL=classroom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classroom.js","sourceRoot":"","sources":["../../src/commands/classroom.ts"],"names":[],"mappings":";;AAaA,4CAwBC;AArCD,yCAAoC;AACpC,4CAA8C;AAC9C,8CAAuD;AACvD,gDAAyD;AAUzD,SAAgB,gBAAgB;IAC9B,MAAM,SAAS,GAAG,IAAI,mBAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC;IAEpG,SAAS;SACN,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gGAAgG,CAAC;SAC7G,MAAM,CACL,IAAA,iBAAO,EAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAmB,GAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CAAc,KAAK,EAAE,wBAAwB,CAAC,CAAC;QACtF,IAAA,oBAAW,EACT,IAAA,oBAAU,GAAE;YACV,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAClB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;aAClC,CAAC,CAAC,CACR,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEJ,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,aAAa,IAAI,OAAO,CA4CvC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,aAAa,IAAI,OAAO,CA4CvC"}
@@ -5,7 +5,8 @@ const commander_1 = require("commander");
5
5
  const config_1 = require("../config");
6
6
  const output_1 = require("../utils/output");
7
7
  const runtime_1 = require("../utils/runtime");
8
- const VALID_KEYS = ['apiKey', 'baseUrl', 'workspace'];
8
+ const keys_1 = require("../utils/keys");
9
+ const VALID_KEYS = ['apiKey', 'baseUrl', 'classroomId', 'workspace'];
9
10
  function configCommand() {
10
11
  const config = new commander_1.Command('config').description('Manage CLI configuration');
11
12
  config
@@ -40,14 +41,13 @@ function configCommand() {
40
41
  return config;
41
42
  }
42
43
  function maskIfSecret(key, value) {
43
- if (key === 'apiKey' && value.length > 10)
44
- return `${value.slice(0, 10)}...`;
45
- return value;
44
+ return key === 'apiKey' ? (0, keys_1.maskApiKey)(value) : value;
46
45
  }
47
46
  function maskConfig(cfg) {
48
47
  return {
49
48
  apiKey: cfg.apiKey ? maskIfSecret('apiKey', cfg.apiKey) : undefined,
50
49
  baseUrl: cfg.baseUrl,
50
+ classroomId: cfg.classroomId,
51
51
  workspace: cfg.workspace,
52
52
  };
53
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"course.d.ts","sourceRoot":"","sources":["../../src/commands/course.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,aAAa,IAAI,OAAO,CAgHvC"}
1
+ {"version":3,"file":"course.d.ts","sourceRoot":"","sources":["../../src/commands/course.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,aAAa,IAAI,OAAO,CA2BvC"}