@tutorflow/cli 0.1.2 → 0.2.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.
@@ -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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"}
@@ -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;AAIpC,wBAAgB,aAAa,IAAI,OAAO,CAuDvC"}
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,65 +1,54 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.configCommand = configCommand;
7
4
  const commander_1 = require("commander");
8
- const chalk_1 = __importDefault(require("chalk"));
9
5
  const config_1 = require("../config");
6
+ const output_1 = require("../utils/output");
7
+ const runtime_1 = require("../utils/runtime");
8
+ const VALID_KEYS = ['apiKey', 'baseUrl', 'workspace'];
10
9
  function configCommand() {
11
10
  const config = new commander_1.Command('config').description('Manage CLI configuration');
12
11
  config
13
12
  .command('set <key> <value>')
14
13
  .description('Set a configuration value')
15
- .action(async (key, value) => {
16
- try {
17
- const validKeys = ['apiKey', 'baseUrl', 'workspace'];
18
- if (!validKeys.includes(key)) {
19
- console.log(chalk_1.default.red(`✗ Unknown config key: ${key}`));
20
- console.log(chalk_1.default.gray(`Valid keys: ${validKeys.join(', ')}`));
21
- return;
22
- }
23
- const updatePayload = {};
24
- updatePayload[key] = value;
25
- await (0, config_1.updateConfig)(updatePayload);
26
- console.log(chalk_1.default.green(`✓ Config updated: ${key}`));
27
- }
28
- catch (error) {
29
- console.error(chalk_1.default.red('✗ Failed to update config'), error);
14
+ .action((0, runtime_1.command)(async (key, value) => {
15
+ if (!VALID_KEYS.includes(key)) {
16
+ throw new runtime_1.CliError(`Unknown config key "${key}". Valid keys: ${VALID_KEYS.join(', ')}`, { code: 'EINVAL', exitCode: 2 });
30
17
  }
31
- });
18
+ const updated = await (0, config_1.updateConfig)({ [key]: value });
19
+ (0, output_1.printResult)({ key, value: maskIfSecret(key, value), config: maskConfig(updated) });
20
+ }));
32
21
  config
33
22
  .command('get [key]')
34
- .description('Get a configuration value')
35
- .action(async (key) => {
36
- try {
37
- const cfg = await (0, config_1.readConfig)();
38
- if (key) {
39
- const value = cfg[key];
40
- if (value === undefined) {
41
- console.log(chalk_1.default.gray(`Config key not set: ${key}`));
42
- }
43
- else {
44
- console.log(`${key}=${value}`);
45
- }
23
+ .description('Get a configuration value (or all if no key)')
24
+ .action((0, runtime_1.command)(async (key) => {
25
+ const cfg = await (0, config_1.readConfig)();
26
+ if (key) {
27
+ if (!VALID_KEYS.includes(key)) {
28
+ throw new runtime_1.CliError(`Unknown config key "${key}". Valid keys: ${VALID_KEYS.join(', ')}`, { code: 'EINVAL', exitCode: 2 });
46
29
  }
47
- else {
48
- console.log(chalk_1.default.green('Current configuration:'));
49
- Object.entries(cfg).forEach(([k, v]) => {
50
- if (k === 'apiKey' && v) {
51
- console.log(chalk_1.default.gray(` ${k}: ${v.slice(0, 10)}...`));
52
- }
53
- else {
54
- console.log(chalk_1.default.gray(` ${k}: ${v}`));
55
- }
56
- });
30
+ const value = cfg[key];
31
+ if (value === undefined) {
32
+ throw new runtime_1.CliError(`Config key not set: ${key}`, { code: 'ENOTFOUND', exitCode: 1 });
57
33
  }
34
+ (0, output_1.printResult)({ [key]: maskIfSecret(key, value) });
58
35
  }
59
- catch (error) {
60
- console.error(chalk_1.default.red('✗ Failed to read config'), error);
36
+ else {
37
+ (0, output_1.printResult)(maskConfig(cfg));
61
38
  }
62
- });
39
+ }));
63
40
  return config;
64
41
  }
42
+ function maskIfSecret(key, value) {
43
+ if (key === 'apiKey' && value.length > 10)
44
+ return `${value.slice(0, 10)}...`;
45
+ return value;
46
+ }
47
+ function maskConfig(cfg) {
48
+ return {
49
+ apiKey: cfg.apiKey ? maskIfSecret('apiKey', cfg.apiKey) : undefined,
50
+ baseUrl: cfg.baseUrl,
51
+ workspace: cfg.workspace,
52
+ };
53
+ }
65
54
  //# sourceMappingURL=config.js.map
@@ -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;AAkBpC,wBAAgB,aAAa,IAAI,OAAO,CAqHvC"}
1
+ {"version":3,"file":"course.d.ts","sourceRoot":"","sources":["../../src/commands/course.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,aAAa,IAAI,OAAO,CA2GvC"}
@@ -6,108 +6,94 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.courseCommand = courseCommand;
7
7
  const commander_1 = require("commander");
8
8
  const prompts_1 = require("@clack/prompts");
9
- const chalk_1 = __importDefault(require("chalk"));
10
9
  const open_1 = __importDefault(require("open"));
11
10
  const client_1 = require("../client");
12
- const config_1 = require("../config");
13
11
  const output_1 = require("../utils/output");
12
+ const runtime_1 = require("../utils/runtime");
14
13
  function courseCommand() {
15
14
  const course = new commander_1.Command('course').description('Manage courses');
16
15
  course
17
16
  .command('create')
18
17
  .argument('[prompt]', 'Prompt describing the course content')
19
- .option('-l, --lessons <number>', 'Number of lessons (default: 8)', '8')
20
- .option('-lang, --language <lang>', 'Language code (default: en)', 'en')
21
- .action(async (prompt, options) => {
22
- try {
23
- const config = await (0, config_1.readConfig)();
24
- if (!config.apiKey) {
25
- console.log(chalk_1.default.red('✗ Not authenticated. Run "tutorflow auth login" first.'));
26
- return;
27
- }
28
- const client = await client_1.ApiClient.create();
29
- const coursePrompt = prompt || (await (0, prompts_1.text)({ message: 'Describe the course content:' }));
30
- if (!coursePrompt || typeof coursePrompt === 'symbol') {
31
- console.log(chalk_1.default.gray('Cancelled'));
32
- return;
18
+ .option('-l, --lessons <number>', 'Number of lessons', '8')
19
+ .option('-lang, --language <lang>', 'Language code', 'en')
20
+ .option('--open', 'Open the result in a browser when done (TTY only)')
21
+ .action((0, runtime_1.command)(async (prompt, options) => {
22
+ let coursePrompt = prompt;
23
+ if (!coursePrompt) {
24
+ (0, runtime_1.requireInteractive)('Pass a prompt argument: tutorflow course create "Beginner Python"');
25
+ const result = await (0, prompts_1.text)({ message: 'Describe the course content:' });
26
+ if (typeof result === 'symbol') {
27
+ throw new runtime_1.CliError('Cancelled', { code: 'ECANCELLED', exitCode: 130 });
33
28
  }
34
- const s = (0, prompts_1.spinner)();
35
- s.start('Creating course...');
36
- const response = await client.request('POST', '/v1/platform/courses', {
29
+ coursePrompt = result;
30
+ }
31
+ const client = await client_1.ApiClient.createAuthenticated();
32
+ const s = (0, runtime_1.isJsonMode)() || !(0, runtime_1.isInteractive)() ? null : (0, prompts_1.spinner)();
33
+ s?.start('Creating course...');
34
+ let response;
35
+ try {
36
+ response = await client.request('POST', '/v1/platform/courses', {
37
37
  prompt: coursePrompt,
38
38
  lessonCount: parseInt(options.lessons, 10),
39
39
  language: options.language,
40
40
  mode: 'sync',
41
41
  });
42
- s.stop('Course created!');
43
- console.log(chalk_1.default.green('✓ Course created successfully'));
44
- console.log(chalk_1.default.gray(` ID: ${response.id}`));
45
- console.log(chalk_1.default.gray(` Status: ${response.status}`));
46
- if (response.previewUrl) {
47
- console.log(chalk_1.default.gray(` Edit: ${response.previewUrl}`));
48
- }
42
+ }
43
+ finally {
44
+ s?.stop('Done');
45
+ }
46
+ (0, output_1.printResult)(response);
47
+ if (options.open && response.previewUrl && (0, runtime_1.isInteractive)()) {
49
48
  const shouldOpen = await (0, prompts_1.confirm)({ message: 'Open in browser?' });
50
- if (shouldOpen && response.previewUrl) {
49
+ if (shouldOpen === true)
51
50
  await (0, open_1.default)(response.previewUrl);
52
- }
53
- }
54
- catch (error) {
55
- console.error(chalk_1.default.red('✗ Failed to create course'), error);
56
51
  }
57
- });
52
+ }));
58
53
  course
59
54
  .command('list')
60
- .option('-l, --limit <number>', 'Number of results (default: 10)', '10')
61
- .action(async (options) => {
62
- try {
63
- const config = await (0, config_1.readConfig)();
64
- if (!config.apiKey) {
65
- console.log(chalk_1.default.red('✗ Not authenticated'));
66
- return;
67
- }
68
- const client = await client_1.ApiClient.create();
69
- const response = await client.request('GET', `/v1/platform/courses?limit=${options.limit}`);
70
- const courses = response.data || [];
71
- if (courses.length === 0) {
72
- console.log(chalk_1.default.gray('No courses found'));
73
- return;
74
- }
75
- const tableData = courses.map((c) => ({
76
- ID: c.id.slice(0, 8),
55
+ .option('-l, --limit <number>', 'Number of results', '10')
56
+ .action((0, runtime_1.command)(async (options) => {
57
+ const client = await client_1.ApiClient.createAuthenticated();
58
+ const response = await client.request('GET', `/v1/platform/courses?limit=${options.limit}`);
59
+ const courses = response.data ?? [];
60
+ if ((0, runtime_1.isJsonMode)()) {
61
+ (0, output_1.printResult)(courses);
62
+ }
63
+ else {
64
+ (0, output_1.printResult)(courses.map((c) => ({
65
+ ID: c.id,
77
66
  Title: c.title || 'Untitled',
78
67
  Status: c.status,
79
68
  Created: new Date(c.createdAt).toLocaleDateString(),
80
- }));
81
- console.log((0, output_1.formatTable)(tableData));
82
- }
83
- catch (error) {
84
- console.error(chalk_1.default.red('✗ Failed to list courses'), error);
69
+ })));
85
70
  }
86
- });
71
+ }));
72
+ course
73
+ .command('get <id>')
74
+ .description('Fetch a single course by ID')
75
+ .action((0, runtime_1.command)(async (id) => {
76
+ const client = await client_1.ApiClient.createAuthenticated();
77
+ const response = await client.request('GET', `/v1/platform/courses/${id}`);
78
+ (0, output_1.printResult)(response);
79
+ }));
87
80
  course
88
81
  .command('open <id>')
89
82
  .description('Open a course in the browser')
90
- .action(async (id) => {
91
- try {
92
- const config = await (0, config_1.readConfig)();
93
- if (!config.apiKey) {
94
- console.log(chalk_1.default.red('✗ Not authenticated'));
95
- return;
96
- }
97
- const client = await client_1.ApiClient.create();
98
- const response = await client.request('GET', `/v1/platform/courses/${id}`);
99
- if (response.previewUrl) {
100
- await (0, open_1.default)(response.previewUrl);
101
- console.log(chalk_1.default.green('✓ Opening in browser...'));
102
- }
103
- else {
104
- console.log(chalk_1.default.red('✗ No preview URL available'));
105
- }
106
- }
107
- catch (error) {
108
- console.error(chalk_1.default.red('✗ Failed to open course'), error);
83
+ .action((0, runtime_1.command)(async (id) => {
84
+ const client = await client_1.ApiClient.createAuthenticated();
85
+ const response = await client.request('GET', `/v1/platform/courses/${id}`);
86
+ if (!response.previewUrl) {
87
+ throw new runtime_1.CliError('No preview URL available for this course', {
88
+ code: 'ENOPREVIEW',
89
+ exitCode: 1,
90
+ });
109
91
  }
110
- });
92
+ if ((0, runtime_1.isInteractive)())
93
+ await (0, open_1.default)(response.previewUrl);
94
+ (0, output_1.printResult)({ previewUrl: response.previewUrl });
95
+ (0, output_1.printStatus)('Opening in browser...', 'success');
96
+ }));
111
97
  return course;
112
98
  }
113
99
  //# sourceMappingURL=course.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"course.js","sourceRoot":"","sources":["../../src/commands/course.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"course.js","sourceRoot":"","sources":["../../src/commands/course.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/commands/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,eAAe,IAAI,OAAO,CA+DzC"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/commands/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,eAAe,IAAI,OAAO,CA2DzC"}
@@ -1,68 +1,62 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.evaluateCommand = evaluateCommand;
7
4
  const commander_1 = require("commander");
8
5
  const prompts_1 = require("@clack/prompts");
9
- const chalk_1 = __importDefault(require("chalk"));
10
6
  const client_1 = require("../client");
11
- const config_1 = require("../config");
7
+ const output_1 = require("../utils/output");
8
+ const runtime_1 = require("../utils/runtime");
9
+ const VALID_TYPES = ['exact', 'rubric', 'open-ended'];
12
10
  function evaluateCommand() {
13
- const evaluate = new commander_1.Command('evaluate')
11
+ return new commander_1.Command('evaluate')
14
12
  .description('Evaluate student responses')
15
- .option('-t, --type <type>', 'Evaluation type: exact, rubric, open-ended')
16
- .action(async (options) => {
17
- try {
18
- const config = await (0, config_1.readConfig)();
19
- if (!config.apiKey) {
20
- console.log(chalk_1.default.red('✗ Not authenticated. Run "tutorflow auth login" first.'));
21
- return;
22
- }
23
- let evalType = options.type;
24
- if (!evalType) {
25
- evalType = (await (0, prompts_1.select)({
26
- message: 'Select evaluation type:',
27
- options: [
28
- { value: 'exact', label: 'Exact Match' },
29
- { value: 'rubric', label: 'Rubric-based' },
30
- { value: 'open-ended', label: 'Open-ended AI Evaluation' },
31
- ],
32
- }));
33
- }
34
- if (!evalType || typeof evalType === 'symbol') {
35
- console.log(chalk_1.default.gray('Cancelled'));
36
- return;
37
- }
38
- const question = await (0, prompts_1.text)({ message: 'Enter the question:' });
39
- if (!question || typeof question === 'symbol')
40
- return;
41
- const studentAnswer = await (0, prompts_1.text)({ message: 'Enter the student answer:' });
42
- if (!studentAnswer || typeof studentAnswer === 'symbol')
43
- return;
44
- let expectedAnswer;
45
- if (evalType !== 'open-ended') {
46
- const expected = await (0, prompts_1.text)({ message: 'Enter the expected answer:' });
47
- if (!expected || typeof expected === 'symbol')
48
- return;
49
- expectedAnswer = expected;
50
- }
51
- const client = await client_1.ApiClient.create();
52
- const response = await client.request('POST', '/v1/platform/evaluate', {
53
- evaluationType: evalType,
54
- question,
55
- studentAnswer,
56
- expectedAnswer,
13
+ .option('-t, --type <type>', `Evaluation type (${VALID_TYPES.join(' | ')})`)
14
+ .option('-q, --question <text>', 'The question being evaluated')
15
+ .option('-a, --student-answer <text>', "Student's answer")
16
+ .option('-e, --expected-answer <text>', 'Expected answer (required for exact and rubric)')
17
+ .action((0, runtime_1.command)(async (options) => {
18
+ let evalType = options.type;
19
+ if (!evalType) {
20
+ (0, runtime_1.requireInteractive)(`Pass --type ${VALID_TYPES.join('|')}`);
21
+ const result = await (0, prompts_1.select)({
22
+ message: 'Select evaluation type:',
23
+ options: [
24
+ { value: 'exact', label: 'Exact Match' },
25
+ { value: 'rubric', label: 'Rubric-based' },
26
+ { value: 'open-ended', label: 'Open-ended AI Evaluation' },
27
+ ],
57
28
  });
58
- console.log(chalk_1.default.green('\n✓ Evaluation Complete\n'));
59
- console.log(chalk_1.default.gray(`Score: ${response.score}`));
60
- console.log(chalk_1.default.gray(`Feedback: ${response.feedback}`));
29
+ if (typeof result === 'symbol') {
30
+ throw new runtime_1.CliError('Cancelled', { code: 'ECANCELLED', exitCode: 130 });
31
+ }
32
+ evalType = result;
33
+ }
34
+ if (!VALID_TYPES.includes(evalType)) {
35
+ throw new runtime_1.CliError(`Invalid --type "${evalType}". Must be one of: ${VALID_TYPES.join(', ')}`, { code: 'EINVAL', exitCode: 2 });
61
36
  }
62
- catch (error) {
63
- console.error(chalk_1.default.red('✗ Evaluation failed'), error);
37
+ const question = options.question ?? (await promptOrThrow('Enter the question:', '--question'));
38
+ const studentAnswer = options.studentAnswer ??
39
+ (await promptOrThrow('Enter the student answer:', '--student-answer'));
40
+ let expectedAnswer = options.expectedAnswer;
41
+ if (evalType !== 'open-ended' && !expectedAnswer) {
42
+ expectedAnswer = await promptOrThrow('Enter the expected answer:', '--expected-answer');
64
43
  }
65
- });
66
- return evaluate;
44
+ const client = await client_1.ApiClient.createAuthenticated();
45
+ const response = await client.request('POST', '/v1/platform/evaluate', {
46
+ evaluationType: evalType,
47
+ question,
48
+ studentAnswer,
49
+ expectedAnswer,
50
+ });
51
+ (0, output_1.printResult)(response);
52
+ }));
53
+ }
54
+ async function promptOrThrow(message, flagHint) {
55
+ (0, runtime_1.requireInteractive)(`Pass ${flagHint} <text>.`);
56
+ const result = await (0, prompts_1.text)({ message });
57
+ if (!result || typeof result === 'symbol') {
58
+ throw new runtime_1.CliError('Cancelled', { code: 'ECANCELLED', exitCode: 130 });
59
+ }
60
+ return result;
67
61
  }
68
62
  //# sourceMappingURL=evaluate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/commands/evaluate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/commands/evaluate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"slide.d.ts","sourceRoot":"","sources":["../../src/commands/slide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,YAAY,IAAI,OAAO,CAqHtC"}
1
+ {"version":3,"file":"slide.d.ts","sourceRoot":"","sources":["../../src/commands/slide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,YAAY,IAAI,OAAO,CA8GtC"}