@tutorflow/cli 0.1.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.
- package/LICENSE +21 -0
- package/README.md +441 -0
- package/dist/client.d.ts +13 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +48 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +72 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +65 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/course.d.ts +3 -0
- package/dist/commands/course.d.ts.map +1 -0
- package/dist/commands/course.js +113 -0
- package/dist/commands/course.js.map +1 -0
- package/dist/commands/evaluate.d.ts +3 -0
- package/dist/commands/evaluate.d.ts.map +1 -0
- package/dist/commands/evaluate.js +68 -0
- package/dist/commands/evaluate.js.map +1 -0
- package/dist/commands/slide.d.ts +3 -0
- package/dist/commands/slide.d.ts.map +1 -0
- package/dist/commands/slide.js +116 -0
- package/dist/commands/slide.js.map +1 -0
- package/dist/commands/video.d.ts +3 -0
- package/dist/commands/video.d.ts.map +1 -0
- package/dist/commands/video.js +120 -0
- package/dist/commands/video.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +80 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/output.d.ts +3 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +36 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/spinner.d.ts +8 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +26 -0
- package/dist/utils/spinner.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.configCommand = configCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const config_1 = require("../config");
|
|
10
|
+
function configCommand() {
|
|
11
|
+
const config = new commander_1.Command('config').description('Manage CLI configuration');
|
|
12
|
+
config
|
|
13
|
+
.command('set <key> <value>')
|
|
14
|
+
.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);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
config
|
|
33
|
+
.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
|
+
}
|
|
46
|
+
}
|
|
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
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error(chalk_1.default.red('✗ Failed to read config'), error);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return config;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.courseCommand = courseCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const prompts_1 = require("@clack/prompts");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const open_1 = __importDefault(require("open"));
|
|
11
|
+
const client_1 = require("../client");
|
|
12
|
+
const config_1 = require("../config");
|
|
13
|
+
const output_1 = require("../utils/output");
|
|
14
|
+
function courseCommand() {
|
|
15
|
+
const course = new commander_1.Command('course').description('Manage courses');
|
|
16
|
+
course
|
|
17
|
+
.command('create')
|
|
18
|
+
.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;
|
|
33
|
+
}
|
|
34
|
+
const s = (0, prompts_1.spinner)();
|
|
35
|
+
s.start('Creating course...');
|
|
36
|
+
const response = await client.request('POST', '/v1/platform/courses', {
|
|
37
|
+
prompt: coursePrompt,
|
|
38
|
+
lessonCount: parseInt(options.lessons, 10),
|
|
39
|
+
language: options.language,
|
|
40
|
+
mode: 'sync',
|
|
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
|
+
}
|
|
49
|
+
const shouldOpen = await (0, prompts_1.confirm)({ message: 'Open in browser?' });
|
|
50
|
+
if (shouldOpen && response.previewUrl) {
|
|
51
|
+
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
|
+
}
|
|
57
|
+
});
|
|
58
|
+
course
|
|
59
|
+
.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),
|
|
77
|
+
Title: c.title || 'Untitled',
|
|
78
|
+
Status: c.status,
|
|
79
|
+
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);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
course
|
|
88
|
+
.command('open <id>')
|
|
89
|
+
.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);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
return course;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=course.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"course.js","sourceRoot":"","sources":["../../src/commands/course.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.evaluateCommand = evaluateCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const prompts_1 = require("@clack/prompts");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const client_1 = require("../client");
|
|
11
|
+
const config_1 = require("../config");
|
|
12
|
+
function evaluateCommand() {
|
|
13
|
+
const evaluate = new commander_1.Command('evaluate')
|
|
14
|
+
.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,
|
|
57
|
+
});
|
|
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}`));
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error(chalk_1.default.red('✗ Evaluation failed'), error);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return evaluate;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/commands/evaluate.ts"],"names":[],"mappings":";;;;;AAWA,0CA+DC;AA1ED,yCAAoC;AACpC,4CAA8C;AAC9C,kDAA0B;AAC1B,sCAAsC;AACtC,sCAAuC;AAOvC,SAAgB,eAAe;IAC7B,MAAM,QAAQ,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;SACrC,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;SACzE,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;QACzC,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,IAAI,QAAQ,GAAwC,OAAO,CAAC,IAAI,CAAC;YACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,CAAC,MAAM,IAAA,gBAAM,EAAC;oBACvB,OAAO,EAAE,yBAAyB;oBAClC,OAAO,EAAE;wBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE;wBACxC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE;wBAC1C,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,0BAA0B,EAAE;qBAC3D;iBACF,CAAC,CAA4B,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAA,cAAI,EAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,OAAO;YAEtD,MAAM,aAAa,GAAG,MAAM,IAAA,cAAI,EAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ;gBAAE,OAAO;YAEhE,IAAI,cAAkC,CAAC;YACvC,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,MAAM,IAAA,cAAI,EAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;gBACvE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;oBAAE,OAAO;gBACtD,cAAc,GAAG,QAAkB,CAAC;YACtC,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,kBAAS,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC,MAAM,EACN,uBAAuB,EACvB;gBACE,cAAc,EAAE,QAAQ;gBACxB,QAAQ;gBACR,aAAa;gBACb,cAAc;aACf,CACF,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.slideCommand = slideCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const prompts_1 = require("@clack/prompts");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const open_1 = __importDefault(require("open"));
|
|
11
|
+
const client_1 = require("../client");
|
|
12
|
+
const config_1 = require("../config");
|
|
13
|
+
const output_1 = require("../utils/output");
|
|
14
|
+
function slideCommand() {
|
|
15
|
+
const slide = new commander_1.Command('slide').description('Manage slides');
|
|
16
|
+
slide
|
|
17
|
+
.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')
|
|
21
|
+
.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;
|
|
34
|
+
}
|
|
35
|
+
const s = (0, prompts_1.spinner)();
|
|
36
|
+
s.start('Creating slide...');
|
|
37
|
+
const response = await client.request('POST', '/v1/platform/slides', {
|
|
38
|
+
prompt: slidePrompt,
|
|
39
|
+
slideCount: parseInt(options.count, 10),
|
|
40
|
+
language: options.language,
|
|
41
|
+
theme: options.theme,
|
|
42
|
+
mode: 'sync',
|
|
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
|
+
}
|
|
51
|
+
const shouldOpen = await (0, prompts_1.confirm)({ message: 'Open in browser?' });
|
|
52
|
+
if (shouldOpen && response.previewUrl) {
|
|
53
|
+
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
|
+
}
|
|
59
|
+
});
|
|
60
|
+
slide
|
|
61
|
+
.command('list')
|
|
62
|
+
.option('-l, --limit <number>', 'Number of results (default: 10)', '10')
|
|
63
|
+
.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),
|
|
80
|
+
Title: s.title || 'Untitled',
|
|
81
|
+
Status: s.status,
|
|
82
|
+
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);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
slide
|
|
91
|
+
.command('open <id>')
|
|
92
|
+
.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);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return slide;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=slide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slide.js","sourceRoot":"","sources":["../../src/commands/slide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.videoCommand = videoCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const prompts_1 = require("@clack/prompts");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const open_1 = __importDefault(require("open"));
|
|
11
|
+
const client_1 = require("../client");
|
|
12
|
+
const config_1 = require("../config");
|
|
13
|
+
const output_1 = require("../utils/output");
|
|
14
|
+
function videoCommand() {
|
|
15
|
+
const video = new commander_1.Command('video').description('Manage videos');
|
|
16
|
+
video
|
|
17
|
+
.command('create')
|
|
18
|
+
.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;
|
|
35
|
+
}
|
|
36
|
+
const s = (0, prompts_1.spinner)();
|
|
37
|
+
s.start('Creating video...');
|
|
38
|
+
const response = await client.request('POST', '/v1/platform/videos', {
|
|
39
|
+
prompt: videoPrompt,
|
|
40
|
+
sceneCount: parseInt(options.scenes, 10),
|
|
41
|
+
aspectRatio: options.ratio,
|
|
42
|
+
targetDurationSeconds: parseInt(options.duration, 10),
|
|
43
|
+
language: options.language,
|
|
44
|
+
mode: 'sync',
|
|
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
|
+
}
|
|
54
|
+
const shouldOpen = await (0, prompts_1.confirm)({ message: 'Open in browser?' });
|
|
55
|
+
if (shouldOpen && response.previewUrl) {
|
|
56
|
+
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
|
+
}
|
|
62
|
+
});
|
|
63
|
+
video
|
|
64
|
+
.command('list')
|
|
65
|
+
.option('-l, --limit <number>', 'Number of results (default: 10)', '10')
|
|
66
|
+
.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),
|
|
83
|
+
Title: v.title || 'Untitled',
|
|
84
|
+
Status: v.status,
|
|
85
|
+
Scenes: v.sceneCount?.toString() || '—',
|
|
86
|
+
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);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
video
|
|
95
|
+
.command('open <id>')
|
|
96
|
+
.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);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
return video;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface IConfig {
|
|
2
|
+
apiKey?: string;
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
workspace?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function readConfig(): Promise<IConfig>;
|
|
7
|
+
export declare function writeConfig(config: IConfig): Promise<void>;
|
|
8
|
+
export declare function updateConfig(updates: Partial<IConfig>): Promise<IConfig>;
|
|
9
|
+
export declare function deleteConfig(): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAOnD;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAK9E;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAMlD"}
|