cerevox 0.2.0 → 0.3.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.
@@ -0,0 +1,579 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /*
4
+ * MCP Server
5
+ * CallTool 有些工具要求的时间较长,可能会60秒超时,callTool 的时候最好设置一下 timeout
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
12
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
13
+ const zod_1 = require("zod");
14
+ const index_1 = __importDefault(require("../../index"));
15
+ const constants_1 = require("../../utils/constants");
16
+ const videokit_1 = require("../../utils/videokit");
17
+ const promises_1 = require("node:fs/promises");
18
+ const node_path_1 = require("node:path");
19
+ /* Configuration
20
+ {
21
+ "mcpServers": {
22
+ "cerevox-zerocut": {
23
+ "command": "npx",
24
+ "args": ["-y", "cerevox-zerocut"],
25
+ "env": {
26
+ "CEREVOX_API_KEY": "ck-**************"
27
+ }
28
+ },
29
+ }
30
+ }
31
+ */
32
+ async function initProject(session) {
33
+ const terminal = session.terminal;
34
+ const workDir = `/home/user/cerevox-zerocut/projects/${terminal.id}`;
35
+ await session.files.mkdir(workDir);
36
+ await (await terminal.run(`cd ${workDir}`)).end();
37
+ // 创建素材目录和成品目录 materials、output
38
+ await (await terminal.run('mkdir materials output')).end();
39
+ // 文件包括(大部分不需要此时创建)
40
+ // story_board.json 故事版
41
+ // draft_content.json 草稿内容,Agent在创作过程中,会根据项目规范,自动生成和修改该文件
42
+ return workDir;
43
+ }
44
+ async function saveMertial(session, url, saveToFileName) {
45
+ const terminal = session.terminal;
46
+ const saveToPath = `/home/user/cerevox-zerocut/projects/${terminal.id}/materials/${saveToFileName}`;
47
+ const response = await terminal.run(`curl -L -o ${saveToPath} '${url}'`);
48
+ await response.end();
49
+ const files = session.files;
50
+ const saveLocalPath = (0, node_path_1.resolve)(projectLocalDir, 'materials', saveToFileName);
51
+ await files.download(saveToPath, saveLocalPath);
52
+ return saveToPath;
53
+ }
54
+ async function runFfmpeg(session, compiled) {
55
+ const files = session.files;
56
+ if (compiled.extraFiles?.length) {
57
+ for (const f of compiled.extraFiles) {
58
+ await files.write(f.path, f.content);
59
+ }
60
+ }
61
+ const terminal = session.terminal;
62
+ const response = await terminal.run(compiled.cmd);
63
+ response.stdout.pipe(process.stdout);
64
+ response.stderr.pipe(process.stderr);
65
+ return response.json();
66
+ }
67
+ async function sendProgress(context, progress, total, message) {
68
+ const token = context._meta?.progressToken;
69
+ if (!token)
70
+ return; // 客户端没要进度就不用发
71
+ await context.sendNotification({
72
+ method: 'notifications/progress',
73
+ params: { progressToken: token, progress, total, message },
74
+ });
75
+ }
76
+ async function listFiles(dir) {
77
+ const entries = await (0, promises_1.readdir)(dir, { withFileTypes: true });
78
+ return entries.filter(e => e.isFile()).map(e => (0, node_path_1.resolve)(dir, e.name));
79
+ }
80
+ // Create an MCP server
81
+ const server = new mcp_js_1.McpServer({
82
+ name: 'Cerevox Server',
83
+ version: constants_1.VERSION,
84
+ });
85
+ const cerevox = new index_1.default({
86
+ apiKey: process.env.CEREVOX_API_KEY || '',
87
+ logLevel: 'error',
88
+ });
89
+ let session = null;
90
+ let projectLocalDir = '.';
91
+ server.registerTool('zerocut-project-open', {
92
+ title: 'Open Project',
93
+ description: 'Launch a new Cerevox session with a Chromium browser instance and open a new project context.',
94
+ inputSchema: {
95
+ localDir: zod_1.z
96
+ .string()
97
+ .optional()
98
+ .default('.')
99
+ .describe('The path of the file to upload.'),
100
+ },
101
+ }, async ({ localDir }, context) => {
102
+ session = await cerevox.launch({
103
+ browser: {
104
+ liveview: true,
105
+ },
106
+ keepAliveMS: 10000,
107
+ timeoutMS: 3600000,
108
+ });
109
+ const workDir = await initProject(session);
110
+ projectLocalDir = (0, node_path_1.resolve)(process.env.ZEROCUT_PROJECT_CWD || process.cwd(), localDir);
111
+ const syncDir = (0, node_path_1.resolve)(projectLocalDir, 'materials');
112
+ await (0, promises_1.mkdir)(syncDir, { recursive: true });
113
+ const materials = await listFiles(syncDir);
114
+ const files = session.files;
115
+ let progress = 0;
116
+ for (const material of materials) {
117
+ await files.upload(material, `${workDir}/materials/${(0, node_path_1.basename)(material)}`);
118
+ sendProgress(context, ++progress, materials.length, material);
119
+ }
120
+ return {
121
+ content: [
122
+ {
123
+ type: 'text',
124
+ text: JSON.stringify({
125
+ sessionId: session.id,
126
+ workDir,
127
+ projectLocalDir,
128
+ materials,
129
+ }),
130
+ },
131
+ ],
132
+ };
133
+ });
134
+ server.registerTool('zerocut-project-close', {
135
+ title: 'Close Project',
136
+ description: 'Close the current Cerevox session and release all resources.',
137
+ inputSchema: {},
138
+ }, async () => {
139
+ if (session) {
140
+ await session.close();
141
+ session = null;
142
+ }
143
+ return {
144
+ content: [{ type: 'text', text: 'Cerevox session closed' }],
145
+ };
146
+ });
147
+ // 将完成的成品下载到本地
148
+ server.registerTool('download-outputs', {
149
+ title: 'Download Outputs',
150
+ description: 'Download the output files from the server.',
151
+ inputSchema: {},
152
+ }, async (_, context) => {
153
+ const terminal = session.terminal;
154
+ const workDir = `/home/user/cerevox-zerocut/projects/${terminal.id}/output`;
155
+ const outputDir = (0, node_path_1.resolve)(process.env.ZEROCUT_PROJECT_CWD || process.cwd(), projectLocalDir, 'output');
156
+ await (0, promises_1.mkdir)(outputDir, { recursive: true });
157
+ let progress = 0;
158
+ const outputs = (await session?.files.listFiles(workDir)) || [];
159
+ const files = session.files;
160
+ for (const output of outputs) {
161
+ await files.download(`${workDir}/${output}`, `${outputDir}/${output}`);
162
+ sendProgress(context, ++progress, outputs.length, output);
163
+ }
164
+ // await session!.files.syncDownloadsDirectory(
165
+ // outputDir,
166
+ // workDir,
167
+ // async metaData => {
168
+ // await sendProgress(
169
+ // context,
170
+ // ++progress,
171
+ // outputs.length,
172
+ // JSON.stringify(metaData)
173
+ // );
174
+ // }
175
+ // );
176
+ return {
177
+ content: [
178
+ { type: 'text', text: JSON.stringify({ success: true, outputs }) },
179
+ ],
180
+ };
181
+ });
182
+ // 列出项目下的所有文件
183
+ server.registerTool('list-project-files', {
184
+ title: 'List Project Files',
185
+ description: 'List all files in the materials directory.',
186
+ inputSchema: {},
187
+ }, async () => {
188
+ const terminal = session.terminal;
189
+ if (!terminal) {
190
+ return {
191
+ content: [{ type: 'text', text: 'No session found' }],
192
+ };
193
+ }
194
+ const cwd = await terminal.getCwd();
195
+ const rootFiles = await session?.files.listFiles(cwd);
196
+ const materialsFiles = await session?.files.listFiles(`${cwd}/materials`);
197
+ const outputFiles = await session?.files.listFiles(`${cwd}/output`);
198
+ return {
199
+ content: [
200
+ {
201
+ type: 'text',
202
+ text: JSON.stringify({
203
+ root: rootFiles,
204
+ materials: materialsFiles,
205
+ output: outputFiles,
206
+ }),
207
+ },
208
+ ],
209
+ };
210
+ });
211
+ // server.registerTool(
212
+ // 'read-file',
213
+ // {
214
+ // title: 'Read File',
215
+ // description: 'Read the content of a file.',
216
+ // inputSchema: {
217
+ // path: z.string().describe('The path of the file to read.'),
218
+ // },
219
+ // },
220
+ // async ({ path }) => {
221
+ // const files = session!.files;
222
+ // const content: string = await files.read(path, { encoding: 'utf8' });
223
+ // return {
224
+ // content: [{ type: 'text', text: content }],
225
+ // };
226
+ // }
227
+ // );
228
+ // server.registerTool(
229
+ // 'write-file',
230
+ // {
231
+ // title: 'Write File',
232
+ // description: 'Write the content to a file.',
233
+ // inputSchema: {
234
+ // path: z.string().describe('The path of the file to write.'),
235
+ // content: z.string().describe('The content to write.'),
236
+ // },
237
+ // },
238
+ // async ({ path, content }) => {
239
+ // const files = session!.files;
240
+ // await files.write(path, content);
241
+ // assetsCount++;
242
+ // return {
243
+ // content: [
244
+ // { type: 'text', text: JSON.stringify({ path, success: true }) },
245
+ // ],
246
+ // };
247
+ // }
248
+ // );
249
+ server.registerTool('search-context', {
250
+ title: 'Search Context',
251
+ description: 'Search the context.',
252
+ inputSchema: {
253
+ query: zod_1.z.string().describe('The query to search.'),
254
+ },
255
+ }, async ({ query }) => {
256
+ const ai = session.ai;
257
+ const res = await ai.searchText({ q: query });
258
+ return {
259
+ content: [{ type: 'text', text: JSON.stringify(res) }],
260
+ };
261
+ });
262
+ server.registerTool('search-image', {
263
+ title: 'Search Image',
264
+ description: 'Search the image.',
265
+ inputSchema: {
266
+ query: zod_1.z.string().describe('The query to search.'),
267
+ },
268
+ }, async ({ query }) => {
269
+ const ai = session.ai;
270
+ const res = await ai.searchImage({ q: query });
271
+ return {
272
+ content: [{ type: 'text', text: JSON.stringify(res) }],
273
+ };
274
+ });
275
+ server.registerTool('generate-image', {
276
+ title: 'Generate Image',
277
+ description: 'Generate the image.',
278
+ inputSchema: {
279
+ prompt: zod_1.z.string().describe('The prompt to generate.'),
280
+ size: zod_1.z
281
+ .enum([
282
+ '1024x1024',
283
+ '864x1152',
284
+ '1152x864',
285
+ '1280x720',
286
+ '720x1280',
287
+ '832x1248',
288
+ '1248x832',
289
+ '1512x648',
290
+ ])
291
+ .optional()
292
+ .describe('The size of the image.'),
293
+ saveToFileName: zod_1.z.string().describe('The filename to save.'),
294
+ },
295
+ }, async ({ prompt, size, saveToFileName }) => {
296
+ const ai = session.ai;
297
+ const res = await ai.generateImage({
298
+ prompt,
299
+ size,
300
+ });
301
+ if (res.url) {
302
+ const uri = await saveMertial(session, res.url, saveToFileName);
303
+ return {
304
+ content: [
305
+ { type: 'text', text: JSON.stringify({ source: res.url, uri }) },
306
+ ],
307
+ };
308
+ }
309
+ return {
310
+ content: [{ type: 'text', text: JSON.stringify(res) }],
311
+ };
312
+ });
313
+ server.registerTool('generate-video', {
314
+ title: 'Generate Video',
315
+ description: 'Generate the video.',
316
+ inputSchema: {
317
+ prompt: zod_1.z.string().describe('The prompt to generate.'),
318
+ saveToFileName: zod_1.z.string().describe('The filename to save.'),
319
+ start_frame: zod_1.z.string().url().describe('The start frame image URL.'),
320
+ duration: zod_1.z
321
+ .number()
322
+ .min(3)
323
+ .max(12)
324
+ .describe('The duration of the video.'),
325
+ end_frame: zod_1.z
326
+ .string()
327
+ .url()
328
+ .optional()
329
+ .describe('The end frame image URL.'),
330
+ },
331
+ }, async ({ prompt, saveToFileName, start_frame, end_frame, duration }, context) => {
332
+ const ai = session.ai;
333
+ let progress = 0;
334
+ const res = await ai.framesToVideo({
335
+ prompt,
336
+ start_frame,
337
+ end_frame,
338
+ duration,
339
+ resolution: '720p',
340
+ onProgress: async (metaData) => {
341
+ await sendProgress(context, ++progress, undefined, JSON.stringify(metaData));
342
+ },
343
+ });
344
+ if (res.url) {
345
+ const uri = await saveMertial(session, res.url, saveToFileName);
346
+ const { url, duration, ...opts } = res;
347
+ return {
348
+ content: [
349
+ {
350
+ type: 'text',
351
+ text: JSON.stringify({
352
+ source: url,
353
+ uri,
354
+ durationMs: Math.floor(duration * 1000),
355
+ ...opts,
356
+ }),
357
+ },
358
+ ],
359
+ };
360
+ }
361
+ return {
362
+ content: [{ type: 'text', text: JSON.stringify(res) }],
363
+ };
364
+ });
365
+ server.registerTool('generate-bgm', {
366
+ title: 'Generate BGM',
367
+ description: 'Generate the bgm.',
368
+ inputSchema: {
369
+ prompt: zod_1.z.string().describe('The prompt to generate.'),
370
+ duration: zod_1.z
371
+ .number()
372
+ .min(30)
373
+ .max(120)
374
+ .describe('The duration of the bgm.'),
375
+ saveToFileName: zod_1.z.string().describe('The filename to save.'),
376
+ },
377
+ }, async ({ prompt, duration, saveToFileName }, context) => {
378
+ const ai = session.ai;
379
+ let progress = 0;
380
+ const res = await ai.generateBGM({
381
+ prompt,
382
+ duration,
383
+ onProgress: async (metaData) => {
384
+ await sendProgress(context, metaData.Result?.Progress ?? ++progress, metaData.Result?.Progress ? 100 : undefined, JSON.stringify(metaData));
385
+ },
386
+ });
387
+ if (res.url) {
388
+ const uri = await saveMertial(session, res.url, saveToFileName);
389
+ const { url, duration, ...opts } = res;
390
+ return {
391
+ content: [
392
+ {
393
+ type: 'text',
394
+ text: JSON.stringify({
395
+ source: url,
396
+ uri,
397
+ durationMs: Math.floor(duration * 1000),
398
+ ...opts,
399
+ }),
400
+ },
401
+ ],
402
+ };
403
+ }
404
+ return {
405
+ content: [{ type: 'text', text: JSON.stringify(res) }],
406
+ };
407
+ });
408
+ server.registerTool('generate-scene-tts', {
409
+ title: 'Generate Scene TTS',
410
+ description: 'Generate the tts for the scene.',
411
+ inputSchema: {
412
+ text: zod_1.z.string().describe('The text to generate.'),
413
+ saveToFileName: zod_1.z.string().describe('The filename to save.'),
414
+ voiceName: zod_1.z
415
+ .enum([
416
+ 'presenter_female',
417
+ 'presenter_male',
418
+ 'Chinese (Mandarin)_News_Anchor',
419
+ 'Chinese (Mandarin)_Male_Announcer',
420
+ 'Chinese (Mandarin)_Gentleman',
421
+ 'Chinese (Mandarin)_Radio_Host',
422
+ 'Chinese (Mandarin)_Sweet_Lady',
423
+ 'audiobook_female_1',
424
+ 'audiobook_male_1',
425
+ 'Chinese (Mandarin)_Warm_Bestie',
426
+ 'English_Graceful_Lady',
427
+ 'English_Gentle-voiced_man',
428
+ 'English_Aussie_Bloke',
429
+ 'English_Whispering_girl',
430
+ 'English_Diligent_Man',
431
+ ])
432
+ .describe('适合作为视频配音的中英文音色(推荐15个)。来源于系统音色清单,偏中性、耐听,覆盖新闻/主持、企业宣传、科普解说、纪录片与生活方式等场景。'),
433
+ },
434
+ }, async ({ text, voiceName, saveToFileName }) => {
435
+ const ai = session.ai;
436
+ const res = await ai.textToSpeech({
437
+ text,
438
+ voiceName,
439
+ });
440
+ if (res.url) {
441
+ const uri = await saveMertial(session, res.url, saveToFileName);
442
+ const { url, duration, ...opts } = res;
443
+ return {
444
+ content: [
445
+ {
446
+ type: 'text',
447
+ text: JSON.stringify({
448
+ source: url,
449
+ uri,
450
+ durationMs: Math.floor(duration * 1000),
451
+ ...opts,
452
+ }),
453
+ },
454
+ ],
455
+ };
456
+ }
457
+ return {
458
+ content: [{ type: 'text', text: JSON.stringify(res) }],
459
+ };
460
+ });
461
+ server.registerTool('compile-and-run', {
462
+ title: 'Compile And Run',
463
+ description: 'Compile project to ffmpeg command and run it.',
464
+ inputSchema: {
465
+ project: videokit_1.zVideoProject.describe('The VideoProject configuration object.'),
466
+ outputFileName: zod_1.z
467
+ .string()
468
+ .optional()
469
+ .describe('Output video filename (optional, defaults to output.mp4).'),
470
+ },
471
+ }, async ({ project, outputFileName }) => {
472
+ try {
473
+ // Project is already validated by zVideoProject schema
474
+ const validated = project;
475
+ // Get working directory
476
+ const terminal = session.terminal;
477
+ const workDir = `/home/user/cerevox-zerocut/projects/${terminal.id}`;
478
+ const outputDir = `${workDir}/output`;
479
+ // Set output file
480
+ const outFile = outputFileName || 'output.mp4';
481
+ const outputPath = `${outputDir}/${outFile}`;
482
+ // Update export configuration
483
+ validated.export.outFile = outputPath;
484
+ // Compile to FFmpeg command
485
+ const compiled = (0, videokit_1.compileToFfmpeg)(validated, {
486
+ workingDir: outputDir,
487
+ subtitleStrategy: 'auto',
488
+ });
489
+ // Log the FFmpeg command for debugging
490
+ console.log('FFmpeg Command:', compiled.cmd);
491
+ // Run FFmpeg
492
+ const result = await runFfmpeg(session, compiled);
493
+ if (result.exitCode === 0) {
494
+ return {
495
+ content: [
496
+ {
497
+ type: 'text',
498
+ text: JSON.stringify({
499
+ success: true,
500
+ outputPath,
501
+ command: compiled.cmd,
502
+ message: 'Video compilation completed successfully',
503
+ }),
504
+ },
505
+ ],
506
+ };
507
+ }
508
+ else {
509
+ return {
510
+ content: [
511
+ {
512
+ type: 'text',
513
+ text: JSON.stringify({
514
+ success: false,
515
+ exitCode: result.exitCode,
516
+ command: compiled.cmd,
517
+ message: `FFmpeg exited with code ${result.exitCode}`,
518
+ }),
519
+ },
520
+ ],
521
+ };
522
+ }
523
+ }
524
+ catch (error) {
525
+ const errorMessage = error instanceof Error ? error.message : String(error);
526
+ return {
527
+ content: [
528
+ {
529
+ type: 'text',
530
+ text: JSON.stringify({
531
+ success: false,
532
+ error: errorMessage,
533
+ message: 'Failed to compile and run project',
534
+ }),
535
+ },
536
+ ],
537
+ };
538
+ }
539
+ });
540
+ server.registerTool('get-video-project-schema', {
541
+ title: 'Get VideoProject Schema',
542
+ description: 'Get the complete VideoProject JSON Schema definition.',
543
+ inputSchema: {},
544
+ }, async () => {
545
+ try {
546
+ const schemaPath = (0, node_path_1.resolve)(__dirname, '../../utils/videoproject-schema.json');
547
+ const schemaContent = await (0, promises_1.readFile)(schemaPath, 'utf-8');
548
+ const schema = JSON.parse(schemaContent);
549
+ return {
550
+ content: [
551
+ {
552
+ type: 'text',
553
+ text: `VideoProject JSON Schema:\n\n${JSON.stringify(schema, null, 2)}`,
554
+ },
555
+ ],
556
+ };
557
+ }
558
+ catch (error) {
559
+ return {
560
+ content: [
561
+ {
562
+ type: 'text',
563
+ text: `Error reading VideoProject schema: ${error}`,
564
+ },
565
+ ],
566
+ isError: true,
567
+ };
568
+ }
569
+ });
570
+ async function run() {
571
+ // Start receiving messages on stdin and sending messages on stdout
572
+ const transport = new stdio_js_1.StdioServerTransport();
573
+ await server.connect(transport);
574
+ console.log('Server started');
575
+ }
576
+ if (require.main === module) {
577
+ run();
578
+ }
579
+ //# sourceMappingURL=zerocut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zerocut.js","sourceRoot":"","sources":["../../../src/mcp/servers/zerocut.ts"],"names":[],"mappings":"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"}