@tutorflow/cli 0.1.1 → 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.
@@ -6,111 +6,100 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.slideCommand = slideCommand;
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 slideCommand() {
15
14
  const slide = new commander_1.Command('slide').description('Manage slides');
16
15
  slide
17
16
  .command('create')
18
- .argument('[prompt]', 'Prompt describing the slide content')
19
- .option('-n, --count <number>', 'Number of slides (default: 10)', '10')
20
- .option('-l, --language <lang>', 'Language code (default: en)', 'en')
17
+ .argument('[prompt]', 'Prompt describing the slide content (or pipe via --json)')
18
+ .option('-n, --count <number>', 'Number of slides', '10')
19
+ .option('-l, --language <lang>', 'Language code', 'en')
21
20
  .option('-t, --theme <theme>', 'Theme for slides')
22
- .action(async (prompt, options) => {
23
- try {
24
- const config = await (0, config_1.readConfig)();
25
- if (!config.apiKey) {
26
- console.log(chalk_1.default.red('✗ Not authenticated. Run "tutorflow auth login" first.'));
27
- return;
28
- }
29
- const client = await client_1.ApiClient.create();
30
- const slidePrompt = prompt || (await (0, prompts_1.text)({ message: 'Describe the slide content:' }));
31
- if (!slidePrompt || typeof slidePrompt === 'symbol') {
32
- console.log(chalk_1.default.gray('Cancelled'));
33
- return;
21
+ .option('--open', 'Open the result in a browser when done (TTY only)')
22
+ .action((0, runtime_1.command)(async (prompt, options) => {
23
+ let slidePrompt = prompt;
24
+ if (!slidePrompt) {
25
+ (0, runtime_1.requireInteractive)('Pass a prompt argument: tutorflow slide create "Photosynthesis" -n 12');
26
+ const result = await (0, prompts_1.text)({ message: 'Describe the slide content:' });
27
+ if (typeof result === 'symbol') {
28
+ throw new runtime_1.CliError('Cancelled', { code: 'ECANCELLED', exitCode: 130 });
34
29
  }
35
- const s = (0, prompts_1.spinner)();
36
- s.start('Creating slide...');
37
- const response = await client.request('POST', '/v1/platform/slides', {
30
+ slidePrompt = result;
31
+ }
32
+ const client = await client_1.ApiClient.createAuthenticated();
33
+ const s = (0, runtime_1.isJsonMode)() || !(0, runtime_1.isInteractive)() ? null : (0, prompts_1.spinner)();
34
+ s?.start('Creating slide...');
35
+ let response;
36
+ try {
37
+ response = await client.request('POST', '/v1/platform/slides', {
38
38
  prompt: slidePrompt,
39
39
  slideCount: parseInt(options.count, 10),
40
40
  language: options.language,
41
41
  theme: options.theme,
42
42
  mode: 'sync',
43
43
  });
44
- s.stop('Slide created!');
45
- console.log(chalk_1.default.green('✓ Slide created successfully'));
46
- console.log(chalk_1.default.gray(` ID: ${response.id}`));
47
- console.log(chalk_1.default.gray(` Status: ${response.status}`));
48
- if (response.previewUrl) {
49
- console.log(chalk_1.default.gray(` Edit: ${response.previewUrl}`));
50
- }
44
+ }
45
+ finally {
46
+ s?.stop('Done');
47
+ }
48
+ (0, output_1.printResult)(response);
49
+ if (options.open && response.previewUrl && (0, runtime_1.isInteractive)()) {
51
50
  const shouldOpen = await (0, prompts_1.confirm)({ message: 'Open in browser?' });
52
- if (shouldOpen && response.previewUrl) {
51
+ if (shouldOpen === true)
53
52
  await (0, open_1.default)(response.previewUrl);
54
- }
55
- }
56
- catch (error) {
57
- console.error(chalk_1.default.red('✗ Failed to create slide'), error);
58
53
  }
59
- });
54
+ }));
60
55
  slide
61
56
  .command('list')
62
- .option('-l, --limit <number>', 'Number of results (default: 10)', '10')
57
+ .option('-l, --limit <number>', 'Number of results', '10')
63
58
  .option('-s, --status <status>', 'Filter by status')
64
- .action(async (options) => {
65
- try {
66
- const config = await (0, config_1.readConfig)();
67
- if (!config.apiKey) {
68
- console.log(chalk_1.default.red('✗ Not authenticated'));
69
- return;
70
- }
71
- const client = await client_1.ApiClient.create();
72
- const response = await client.request('GET', `/v1/platform/slides?limit=${options.limit}${options.status ? `&status=${options.status}` : ''}`);
73
- const slides = response.data || [];
74
- if (slides.length === 0) {
75
- console.log(chalk_1.default.gray('No slides found'));
76
- return;
77
- }
78
- const tableData = slides.map((s) => ({
79
- ID: s.id.slice(0, 8),
59
+ .action((0, runtime_1.command)(async (options) => {
60
+ const client = await client_1.ApiClient.createAuthenticated();
61
+ const qs = new URLSearchParams({ limit: options.limit });
62
+ if (options.status)
63
+ qs.set('status', options.status);
64
+ const response = await client.request('GET', `/v1/platform/slides?${qs.toString()}`);
65
+ const slides = response.data ?? [];
66
+ if ((0, runtime_1.isJsonMode)()) {
67
+ (0, output_1.printResult)(slides);
68
+ }
69
+ else {
70
+ (0, output_1.printResult)(slides.map((s) => ({
71
+ ID: s.id,
80
72
  Title: s.title || 'Untitled',
81
73
  Status: s.status,
82
74
  Created: new Date(s.createdAt).toLocaleDateString(),
83
- }));
84
- console.log((0, output_1.formatTable)(tableData));
85
- }
86
- catch (error) {
87
- console.error(chalk_1.default.red('✗ Failed to list slides'), error);
75
+ })));
88
76
  }
89
- });
77
+ }));
78
+ slide
79
+ .command('get <id>')
80
+ .description('Fetch a single slide by ID')
81
+ .action((0, runtime_1.command)(async (id) => {
82
+ const client = await client_1.ApiClient.createAuthenticated();
83
+ const response = await client.request('GET', `/v1/platform/slides/${id}`);
84
+ (0, output_1.printResult)(response);
85
+ }));
90
86
  slide
91
87
  .command('open <id>')
92
88
  .description('Open a slide in the browser')
93
- .action(async (id) => {
94
- try {
95
- const config = await (0, config_1.readConfig)();
96
- if (!config.apiKey) {
97
- console.log(chalk_1.default.red('✗ Not authenticated'));
98
- return;
99
- }
100
- const client = await client_1.ApiClient.create();
101
- const response = await client.request('GET', `/v1/platform/slides/${id}`);
102
- if (response.previewUrl) {
103
- await (0, open_1.default)(response.previewUrl);
104
- console.log(chalk_1.default.green('✓ Opening in browser...'));
105
- }
106
- else {
107
- console.log(chalk_1.default.red('✗ No preview URL available'));
108
- }
109
- }
110
- catch (error) {
111
- console.error(chalk_1.default.red('✗ Failed to open slide'), error);
89
+ .action((0, runtime_1.command)(async (id) => {
90
+ const client = await client_1.ApiClient.createAuthenticated();
91
+ const response = await client.request('GET', `/v1/platform/slides/${id}`);
92
+ if (!response.previewUrl) {
93
+ throw new runtime_1.CliError('No preview URL available for this slide', {
94
+ code: 'ENOPREVIEW',
95
+ exitCode: 1,
96
+ });
112
97
  }
113
- });
98
+ if ((0, runtime_1.isInteractive)())
99
+ await (0, open_1.default)(response.previewUrl);
100
+ (0, output_1.printResult)({ previewUrl: response.previewUrl });
101
+ (0, output_1.printStatus)('Opening in browser...', 'success');
102
+ }));
114
103
  return slide;
115
104
  }
116
105
  //# sourceMappingURL=slide.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slide.js","sourceRoot":"","sources":["../../src/commands/slide.ts"],"names":[],"mappings":";;;;;AAoBA,oCAqHC;AAzID,yCAAoC;AACpC,4CAAwD;AACxD,kDAA0B;AAC1B,gDAAwB;AACxB,sCAAsC;AACtC,sCAAuC;AACvC,4CAA8C;AAc9C,SAAgB,YAAY;IAC1B,MAAM,KAAK,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAEhE,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,UAAU,EAAE,qCAAqC,CAAC;SAC3D,MAAM,CAAC,sBAAsB,EAAE,gCAAgC,EAAE,IAAI,CAAC;SACtE,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,IAAI,CAAC;SACpE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,OAA2B,EAAE,EAAE;QACxE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,kBAAS,CAAC,MAAM,EAAE,CAAC;YAExC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,IAAA,cAAI,EAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,CAAC,GAAG,IAAA,iBAAO,GAAE,CAAC;YACpB,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAE7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAgB,MAAM,EAAE,qBAAqB,EAAE;gBAClF,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YAEH,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxD,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,IAAA,iBAAO,EAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAClE,IAAI,UAAU,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,IAAA,cAAI,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,sBAAsB,EAAE,iCAAiC,EAAE,IAAI,CAAC;SACvE,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,kBAAS,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC,KAAK,EACL,6BAA6B,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACjG,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,UAAU;gBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE;aACpD,CAAC,CAAC,CAAC;YAEJ,OAAO,CAAC,GAAG,CAAC,IAAA,oBAAW,EAAC,SAAS,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,kBAAS,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAgB,KAAK,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;YAEzF,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,MAAM,IAAA,cAAI,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"slide.js","sourceRoot":"","sources":["../../src/commands/slide.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,YAAY,IAAI,OAAO,CAyHtC"}
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,YAAY,IAAI,OAAO,CAiHtC"}
@@ -6,36 +6,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.videoCommand = videoCommand;
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 videoCommand() {
15
14
  const video = new commander_1.Command('video').description('Manage videos');
16
15
  video
17
16
  .command('create')
18
17
  .argument('[prompt]', 'Prompt describing the video content')
19
- .option('-s, --scenes <number>', 'Number of scenes (default: 5)', '5')
20
- .option('-r, --ratio <ratio>', 'Aspect ratio (default: 16:9)', '16:9')
21
- .option('-d, --duration <seconds>', 'Target duration (default: 60)', '60')
22
- .option('-l, --language <lang>', 'Language code (default: en)', 'en')
23
- .action(async (prompt, options) => {
24
- try {
25
- const config = await (0, config_1.readConfig)();
26
- if (!config.apiKey) {
27
- console.log(chalk_1.default.red('✗ Not authenticated. Run "tutorflow auth login" first.'));
28
- return;
29
- }
30
- const client = await client_1.ApiClient.create();
31
- const videoPrompt = prompt || (await (0, prompts_1.text)({ message: 'Describe the video content:' }));
32
- if (!videoPrompt || typeof videoPrompt === 'symbol') {
33
- console.log(chalk_1.default.gray('Cancelled'));
34
- return;
18
+ .option('-s, --scenes <number>', 'Number of scenes', '5')
19
+ .option('-r, --ratio <ratio>', 'Aspect ratio (16:9, 9:16, 1:1)', '16:9')
20
+ .option('-d, --duration <seconds>', 'Target duration in seconds', '60')
21
+ .option('-l, --language <lang>', 'Language code', 'en')
22
+ .option('--open', 'Open the result in a browser when done (TTY only)')
23
+ .action((0, runtime_1.command)(async (prompt, options) => {
24
+ let videoPrompt = prompt;
25
+ if (!videoPrompt) {
26
+ (0, runtime_1.requireInteractive)('Pass a prompt argument: tutorflow video create "Newton\'s laws"');
27
+ const result = await (0, prompts_1.text)({ message: 'Describe the video content:' });
28
+ if (typeof result === 'symbol') {
29
+ throw new runtime_1.CliError('Cancelled', { code: 'ECANCELLED', exitCode: 130 });
35
30
  }
36
- const s = (0, prompts_1.spinner)();
37
- s.start('Creating video...');
38
- const response = await client.request('POST', '/v1/platform/videos', {
31
+ videoPrompt = result;
32
+ }
33
+ const client = await client_1.ApiClient.createAuthenticated();
34
+ const s = (0, runtime_1.isJsonMode)() || !(0, runtime_1.isInteractive)() ? null : (0, prompts_1.spinner)();
35
+ s?.start('Creating video...');
36
+ let response;
37
+ try {
38
+ response = await client.request('POST', '/v1/platform/videos', {
39
39
  prompt: videoPrompt,
40
40
  sceneCount: parseInt(options.scenes, 10),
41
41
  aspectRatio: options.ratio,
@@ -43,78 +43,66 @@ function videoCommand() {
43
43
  language: options.language,
44
44
  mode: 'sync',
45
45
  });
46
- s.stop('Video created!');
47
- console.log(chalk_1.default.green('✓ Video created successfully'));
48
- console.log(chalk_1.default.gray(` ID: ${response.id}`));
49
- console.log(chalk_1.default.gray(` Status: ${response.status}`));
50
- console.log(chalk_1.default.gray(` Scenes: ${response.sceneCount ?? '—'}`));
51
- if (response.previewUrl) {
52
- console.log(chalk_1.default.gray(` Edit: ${response.previewUrl}`));
53
- }
46
+ }
47
+ finally {
48
+ s?.stop('Done');
49
+ }
50
+ (0, output_1.printResult)(response);
51
+ if (options.open && response.previewUrl && (0, runtime_1.isInteractive)()) {
54
52
  const shouldOpen = await (0, prompts_1.confirm)({ message: 'Open in browser?' });
55
- if (shouldOpen && response.previewUrl) {
53
+ if (shouldOpen === true)
56
54
  await (0, open_1.default)(response.previewUrl);
57
- }
58
- }
59
- catch (error) {
60
- console.error(chalk_1.default.red('✗ Failed to create video'), error);
61
55
  }
62
- });
56
+ }));
63
57
  video
64
58
  .command('list')
65
- .option('-l, --limit <number>', 'Number of results (default: 10)', '10')
59
+ .option('-l, --limit <number>', 'Number of results', '10')
66
60
  .option('-s, --status <status>', 'Filter by status')
67
- .action(async (options) => {
68
- try {
69
- const config = await (0, config_1.readConfig)();
70
- if (!config.apiKey) {
71
- console.log(chalk_1.default.red('✗ Not authenticated'));
72
- return;
73
- }
74
- const client = await client_1.ApiClient.create();
75
- const response = await client.request('GET', `/v1/platform/videos?limit=${options.limit}${options.status ? `&status=${options.status}` : ''}`);
76
- const videos = response.data || [];
77
- if (videos.length === 0) {
78
- console.log(chalk_1.default.gray('No videos found'));
79
- return;
80
- }
81
- const tableData = videos.map((v) => ({
82
- ID: v.id.slice(0, 8),
61
+ .action((0, runtime_1.command)(async (options) => {
62
+ const client = await client_1.ApiClient.createAuthenticated();
63
+ const qs = new URLSearchParams({ limit: options.limit });
64
+ if (options.status)
65
+ qs.set('status', options.status);
66
+ const response = await client.request('GET', `/v1/platform/videos?${qs.toString()}`);
67
+ const videos = response.data ?? [];
68
+ if ((0, runtime_1.isJsonMode)()) {
69
+ (0, output_1.printResult)(videos);
70
+ }
71
+ else {
72
+ (0, output_1.printResult)(videos.map((v) => ({
73
+ ID: v.id,
83
74
  Title: v.title || 'Untitled',
84
75
  Status: v.status,
85
76
  Scenes: v.sceneCount?.toString() || '—',
86
77
  Created: new Date(v.createdAt).toLocaleDateString(),
87
- }));
88
- console.log((0, output_1.formatTable)(tableData));
89
- }
90
- catch (error) {
91
- console.error(chalk_1.default.red('✗ Failed to list videos'), error);
78
+ })));
92
79
  }
93
- });
80
+ }));
81
+ video
82
+ .command('get <id>')
83
+ .description('Fetch a single video by ID')
84
+ .action((0, runtime_1.command)(async (id) => {
85
+ const client = await client_1.ApiClient.createAuthenticated();
86
+ const response = await client.request('GET', `/v1/platform/videos/${id}`);
87
+ (0, output_1.printResult)(response);
88
+ }));
94
89
  video
95
90
  .command('open <id>')
96
91
  .description('Open a video in the browser')
97
- .action(async (id) => {
98
- try {
99
- const config = await (0, config_1.readConfig)();
100
- if (!config.apiKey) {
101
- console.log(chalk_1.default.red('✗ Not authenticated'));
102
- return;
103
- }
104
- const client = await client_1.ApiClient.create();
105
- const response = await client.request('GET', `/v1/platform/videos/${id}`);
106
- if (response.previewUrl) {
107
- await (0, open_1.default)(response.previewUrl);
108
- console.log(chalk_1.default.green('✓ Opening in browser...'));
109
- }
110
- else {
111
- console.log(chalk_1.default.red('✗ No preview URL available'));
112
- }
113
- }
114
- catch (error) {
115
- console.error(chalk_1.default.red('✗ Failed to open video'), error);
92
+ .action((0, runtime_1.command)(async (id) => {
93
+ const client = await client_1.ApiClient.createAuthenticated();
94
+ const response = await client.request('GET', `/v1/platform/videos/${id}`);
95
+ if (!response.previewUrl) {
96
+ throw new runtime_1.CliError('No preview URL available for this video', {
97
+ code: 'ENOPREVIEW',
98
+ exitCode: 1,
99
+ });
116
100
  }
117
- });
101
+ if ((0, runtime_1.isInteractive)())
102
+ await (0, open_1.default)(response.previewUrl);
103
+ (0, output_1.printResult)({ previewUrl: response.previewUrl });
104
+ (0, output_1.printStatus)('Opening in browser...', 'success');
105
+ }));
118
106
  return video;
119
107
  }
120
108
  //# sourceMappingURL=video.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,18 +8,33 @@ const video_1 = require("./commands/video");
8
8
  const course_1 = require("./commands/course");
9
9
  const evaluate_1 = require("./commands/evaluate");
10
10
  const config_1 = require("./commands/config");
11
+ const runtime_1 = require("./utils/runtime");
12
+ const package_json_1 = require("../package.json");
11
13
  commander_1.program
12
14
  .name('tutorflow')
13
15
  .description('TutorFlow CLI - Create AI-powered educational content')
14
- .version('0.1.0');
16
+ .version(package_json_1.version)
17
+ .option('--json', 'Output machine-readable JSON to stdout (errors to stderr)')
18
+ .option('--debug', 'Print stack traces on errors (also via DEBUG=1)')
19
+ .hook('preAction', (cmd) => {
20
+ const opts = cmd.opts();
21
+ if (opts.json)
22
+ (0, runtime_1.setJsonMode)(true);
23
+ if (opts.debug)
24
+ (0, runtime_1.setDebugMode)(true);
25
+ });
15
26
  commander_1.program.addCommand((0, auth_1.authCommand)());
16
27
  commander_1.program.addCommand((0, slide_1.slideCommand)());
17
28
  commander_1.program.addCommand((0, video_1.videoCommand)());
18
29
  commander_1.program.addCommand((0, course_1.courseCommand)());
19
30
  commander_1.program.addCommand((0, evaluate_1.evaluateCommand)());
20
31
  commander_1.program.addCommand((0, config_1.configCommand)());
21
- commander_1.program.parse(process.argv);
32
+ commander_1.program.parseAsync(process.argv).catch(() => {
33
+ // commander already prints its own errors; keep this as a safety net.
34
+ process.exit(1);
35
+ });
22
36
  if (!process.argv.slice(2).length) {
23
37
  commander_1.program.outputHelp();
38
+ process.exit(1);
24
39
  }
25
40
  //# 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":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,4CAAgD;AAChD,4CAAgD;AAChD,8CAAkD;AAClD,kDAAsD;AACtD,8CAAkD;AAElD,mBAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAO,CAAC,UAAU,CAAC,IAAA,kBAAW,GAAE,CAAC,CAAC;AAClC,mBAAO,CAAC,UAAU,CAAC,IAAA,oBAAY,GAAE,CAAC,CAAC;AACnC,mBAAO,CAAC,UAAU,CAAC,IAAA,oBAAY,GAAE,CAAC,CAAC;AACnC,mBAAO,CAAC,UAAU,CAAC,IAAA,sBAAa,GAAE,CAAC,CAAC;AACpC,mBAAO,CAAC,UAAU,CAAC,IAAA,0BAAe,GAAE,CAAC,CAAC;AACtC,mBAAO,CAAC,UAAU,CAAC,IAAA,sBAAa,GAAE,CAAC,CAAC;AAEpC,mBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,mBAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,4CAAgD;AAChD,4CAAgD;AAChD,8CAAkD;AAClD,kDAAsD;AACtD,8CAAkD;AAClD,6CAA4D;AAC5D,kDAA0C;AAE1C,mBAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,sBAAO,CAAC;KAChB,MAAM,CAAC,QAAQ,EAAE,2DAA2D,CAAC;KAC7E,MAAM,CAAC,SAAS,EAAE,iDAAiD,CAAC;KACpE,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;IACzB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,IAAI,IAAI,CAAC,IAAI;QAAE,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,KAAK;QAAE,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEL,mBAAO,CAAC,UAAU,CAAC,IAAA,kBAAW,GAAE,CAAC,CAAC;AAClC,mBAAO,CAAC,UAAU,CAAC,IAAA,oBAAY,GAAE,CAAC,CAAC;AACnC,mBAAO,CAAC,UAAU,CAAC,IAAA,oBAAY,GAAE,CAAC,CAAC;AACnC,mBAAO,CAAC,UAAU,CAAC,IAAA,sBAAa,GAAE,CAAC,CAAC;AACpC,mBAAO,CAAC,UAAU,CAAC,IAAA,0BAAe,GAAE,CAAC,CAAC;AACtC,mBAAO,CAAC,UAAU,CAAC,IAAA,sBAAa,GAAE,CAAC,CAAC;AAEpC,mBAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;IAC1C,sEAAsE;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,mBAAO,CAAC,UAAU,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -1,3 +1,16 @@
1
- export declare function formatTable(data: Record<string, string>[]): string;
2
- export declare function formatJson(data: Record<string, any>): string;
1
+ /**
2
+ * Output helpers. In JSON mode every "user-facing" call writes a single
3
+ * JSON line to stdout (or nothing for purely cosmetic info). In text mode
4
+ * they write human-readable, colored output.
5
+ *
6
+ * Rules:
7
+ * - data results → stdout
8
+ * - errors → stderr (handled by runtime.printError)
9
+ * - status / progress chatter → stderr in JSON mode, stdout in text mode
10
+ */
11
+ /** Print the canonical result of a command. JSON mode writes raw object. */
12
+ export declare function printResult(data: unknown): void;
13
+ /** Status/progress line. Suppressed in JSON mode to keep stdout clean. */
14
+ export declare function printStatus(message: string, kind?: 'info' | 'success'): void;
15
+ export declare function formatTable(rows: Record<string, unknown>[]): string;
3
16
  //# sourceMappingURL=output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAC7B,MAAM,CAqCR;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAE5D"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAmB/C;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,SAAkB,GAAG,IAAI,CAIpF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAgCnE"}
@@ -1,36 +1,80 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.printResult = printResult;
7
+ exports.printStatus = printStatus;
3
8
  exports.formatTable = formatTable;
4
- exports.formatJson = formatJson;
5
- function formatTable(data) {
6
- if (data.length === 0)
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const runtime_1 = require("./runtime");
11
+ /**
12
+ * Output helpers. In JSON mode every "user-facing" call writes a single
13
+ * JSON line to stdout (or nothing for purely cosmetic info). In text mode
14
+ * they write human-readable, colored output.
15
+ *
16
+ * Rules:
17
+ * - data results → stdout
18
+ * - errors → stderr (handled by runtime.printError)
19
+ * - status / progress chatter → stderr in JSON mode, stdout in text mode
20
+ */
21
+ /** Print the canonical result of a command. JSON mode writes raw object. */
22
+ function printResult(data) {
23
+ if ((0, runtime_1.isJsonMode)()) {
24
+ process.stdout.write(JSON.stringify(data) + '\n');
25
+ }
26
+ else if (Array.isArray(data)) {
27
+ if (data.length === 0) {
28
+ process.stdout.write(chalk_1.default.gray('(no results)\n'));
29
+ }
30
+ else if (typeof data[0] === 'object' && data[0] !== null) {
31
+ process.stdout.write(formatTable(data) + '\n');
32
+ }
33
+ else {
34
+ process.stdout.write(data.join('\n') + '\n');
35
+ }
36
+ }
37
+ else if (typeof data === 'object' && data !== null) {
38
+ for (const [k, v] of Object.entries(data)) {
39
+ if (v === undefined || v === null)
40
+ continue;
41
+ process.stdout.write(chalk_1.default.gray(` ${k}: ${v}\n`));
42
+ }
43
+ }
44
+ else {
45
+ process.stdout.write(String(data) + '\n');
46
+ }
47
+ }
48
+ /** Status/progress line. Suppressed in JSON mode to keep stdout clean. */
49
+ function printStatus(message, kind = 'info') {
50
+ if ((0, runtime_1.isJsonMode)())
51
+ return;
52
+ const color = kind === 'success' ? chalk_1.default.green : chalk_1.default.gray;
53
+ process.stdout.write(color(`${kind === 'success' ? '✓ ' : ''}${message}\n`));
54
+ }
55
+ function formatTable(rows) {
56
+ if (rows.length === 0)
7
57
  return '';
8
- const columns = Object.keys(data[0]);
58
+ const columns = Object.keys(rows[0]);
9
59
  const colWidths = {};
10
60
  columns.forEach((col) => {
11
- colWidths[col] = Math.max(col.length, ...data.map((row) => String(row[col] || '').length));
61
+ colWidths[col] = Math.max(col.length, ...rows.map((r) => String(r[col] ?? '').length));
12
62
  });
13
- const border = columns
14
- .map((col) => '─'.repeat(colWidths[col] + 2))
15
- .join('┼');
63
+ const border = columns.map((c) => '─'.repeat(colWidths[c] + 2)).join('┼');
16
64
  const header = columns
17
- .map((col) => {
18
- const padding = colWidths[col] - col.length;
19
- return ` ${col}${' '.repeat(padding)} `;
20
- })
65
+ .map((c) => ` ${c}${' '.repeat(colWidths[c] - c.length)} `)
21
66
  .join('│');
22
- const rows = data
23
- .map((row) => columns
24
- .map((col) => {
25
- const value = String(row[col] || '');
26
- const padding = colWidths[col] - value.length;
27
- return ` ${value}${' '.repeat(padding)} `;
67
+ const body = rows
68
+ .map((r) => columns
69
+ .map((c) => {
70
+ const v = String(r[c] ?? '');
71
+ return ` ${v}${' '.repeat(colWidths[c] - v.length)} `;
28
72
  })
29
73
  .join('│'))
30
74
  .join('\n');
31
- return `┌${border}┐\n│${header}│\n├${border}┤\n${rows.split('\n').map((r) => `│${r}│`).join('\n')}\n└${border}┘`;
32
- }
33
- function formatJson(data) {
34
- return JSON.stringify(data, null, 2);
75
+ return `┌${border}┐\n│${header}│\n├${border}┤\n${body
76
+ .split('\n')
77
+ .map((r) => `│${r}│`)
78
+ .join('\n')}\n└${border}┘`;
35
79
  }
36
80
  //# sourceMappingURL=output.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":";;AAAA,kCAuCC;AAED,gCAEC;AA3CD,SAAgB,WAAW,CACzB,IAA8B;IAE9B,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,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CACpD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO;SACnB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,OAAO;SACnB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QAC5C,OAAO,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;IAEb,MAAM,IAAI,GAAG,IAAI;SACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,OAAO;SACJ,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9C,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5C,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CACb;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,IAAI,MAAM,OAAO,MAAM,OAAO,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,MAAM,GAAG,CAAC;AACnH,CAAC;AAED,SAAgB,UAAU,CAAC,IAAyB;IAClD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}