cerevox 0.1.3 → 0.2.1
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/README.md +162 -2
- package/dist/core/ai.d.ts +43 -0
- package/dist/core/ai.d.ts.map +1 -0
- package/dist/core/ai.js +219 -0
- package/dist/core/ai.js.map +1 -0
- package/dist/core/browser.d.ts +3 -2
- package/dist/core/browser.d.ts.map +1 -1
- package/dist/core/browser.js +7 -5
- package/dist/core/browser.js.map +1 -1
- package/dist/core/cerevox.d.ts +2 -1
- package/dist/core/cerevox.d.ts.map +1 -1
- package/dist/core/cerevox.js +24 -3
- package/dist/core/cerevox.js.map +1 -1
- package/dist/core/code-runner.d.ts +3 -1
- package/dist/core/code-runner.d.ts.map +1 -1
- package/dist/core/code-runner.js +18 -4
- package/dist/core/code-runner.js.map +1 -1
- package/dist/core/file-system.d.ts +5 -2
- package/dist/core/file-system.d.ts.map +1 -1
- package/dist/core/file-system.js +3 -7
- package/dist/core/file-system.js.map +1 -1
- package/dist/core/session.d.ts +2 -0
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +25 -5
- package/dist/core/session.js.map +1 -1
- package/dist/core/terminal.d.ts.map +1 -1
- package/dist/core/terminal.js +5 -4
- package/dist/core/terminal.js.map +1 -1
- package/dist/mcp/servers/browser-use.d.ts +3 -0
- package/dist/mcp/servers/browser-use.d.ts.map +1 -0
- package/dist/{cli/cerevox-mcp.js → mcp/servers/browser-use.js} +32 -44
- package/dist/mcp/servers/browser-use.js.map +1 -0
- package/dist/mcp/servers/zerocut.d.ts +3 -0
- package/dist/mcp/servers/zerocut.d.ts.map +1 -0
- package/dist/mcp/servers/zerocut.js +388 -0
- package/dist/mcp/servers/zerocut.js.map +1 -0
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +3 -1
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/detect-code.d.ts +2 -2
- package/dist/utils/detect-code.d.ts.map +1 -1
- package/dist/utils/detect-code.js +5 -1
- package/dist/utils/detect-code.js.map +1 -1
- package/dist/utils/videokit.d.ts +921 -0
- package/dist/utils/videokit.d.ts.map +1 -0
- package/dist/utils/videokit.js +588 -0
- package/dist/utils/videokit.js.map +1 -0
- package/package.json +4 -2
- package/dist/cli/cerevox-mcp.d.ts +0 -3
- package/dist/cli/cerevox-mcp.d.ts.map +0 -1
- package/dist/cli/cerevox-mcp.js.map +0 -1
|
@@ -0,0 +1,388 @@
|
|
|
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
|
+
/* Configuration
|
|
18
|
+
{
|
|
19
|
+
"mcpServers": {
|
|
20
|
+
"cerevox-zerocut": {
|
|
21
|
+
"command": "npx",
|
|
22
|
+
"args": ["-y", "cerevox-zerocut"],
|
|
23
|
+
"env": {
|
|
24
|
+
"CEREVOX_API_KEY": "ck-**************"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
*/
|
|
30
|
+
async function initProject(session) {
|
|
31
|
+
const terminal = session.terminal;
|
|
32
|
+
const workDir = `/home/user/cerevox-zerocut/projects/${terminal.id}`;
|
|
33
|
+
await session.files.mkdir(workDir);
|
|
34
|
+
await (await terminal.run(`cd ${workDir}`)).end();
|
|
35
|
+
// 创建素材目录和成品目录 materials、output
|
|
36
|
+
await (await terminal.run('mkdir materials output')).end();
|
|
37
|
+
// 文件包括(大部分不需要此时创建)
|
|
38
|
+
// story_board.json 故事版
|
|
39
|
+
// draft_content.json 草稿内容,Agent在创作过程中,会根据项目规范,自动生成和修改该文件
|
|
40
|
+
return workDir;
|
|
41
|
+
}
|
|
42
|
+
async function saveMertial(session, url, saveToFileName) {
|
|
43
|
+
const terminal = session.terminal;
|
|
44
|
+
const saveToPath = `/home/user/cerevox-zerocut/projects/${terminal.id}/materials/${saveToFileName}`;
|
|
45
|
+
// console.log(`run: curl -L -o ${saveToPath} '${url}'`);
|
|
46
|
+
const response = await terminal.run(`curl -L -o ${saveToPath} '${url}'`);
|
|
47
|
+
// response.stdout.pipe(process.stdout);
|
|
48
|
+
// response.stderr.pipe(process.stderr);
|
|
49
|
+
await response.end();
|
|
50
|
+
return saveToPath;
|
|
51
|
+
}
|
|
52
|
+
async function runFfmpeg(session, compiled) {
|
|
53
|
+
const files = session.files;
|
|
54
|
+
if (compiled.extraFiles?.length) {
|
|
55
|
+
for (const f of compiled.extraFiles) {
|
|
56
|
+
await files.write(f.path, f.content);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const terminal = session.terminal;
|
|
60
|
+
const response = await terminal.run(compiled.cmd);
|
|
61
|
+
response.stdout.pipe(process.stdout);
|
|
62
|
+
response.stderr.pipe(process.stderr);
|
|
63
|
+
return response.json();
|
|
64
|
+
}
|
|
65
|
+
// Create an MCP server
|
|
66
|
+
const server = new mcp_js_1.McpServer({
|
|
67
|
+
name: 'Cerevox Server',
|
|
68
|
+
version: constants_1.VERSION,
|
|
69
|
+
});
|
|
70
|
+
const cerevox = new index_1.default({
|
|
71
|
+
apiKey: process.env.CEREVOX_API_KEY || '',
|
|
72
|
+
logLevel: 'error',
|
|
73
|
+
});
|
|
74
|
+
let session = null;
|
|
75
|
+
server.tool('zerocut-project-create', 'Launch a new Cerevox session with a Chromium browser instance and create a new project.', async () => {
|
|
76
|
+
session = await cerevox.launch({
|
|
77
|
+
browser: {
|
|
78
|
+
liveview: true,
|
|
79
|
+
},
|
|
80
|
+
keepAliveMS: 10000,
|
|
81
|
+
timeoutMS: 3600000,
|
|
82
|
+
});
|
|
83
|
+
const workDir = await initProject(session);
|
|
84
|
+
return {
|
|
85
|
+
content: [
|
|
86
|
+
{
|
|
87
|
+
type: 'text',
|
|
88
|
+
text: JSON.stringify({
|
|
89
|
+
sessionId: session.id,
|
|
90
|
+
workDir,
|
|
91
|
+
}),
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
server.tool('zerocut-project-close', 'Close the current Cerevox session and release all resources.', async () => {
|
|
97
|
+
if (session) {
|
|
98
|
+
await session.close();
|
|
99
|
+
session = null;
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
content: [{ type: 'text', text: 'Cerevox session closed' }],
|
|
103
|
+
};
|
|
104
|
+
});
|
|
105
|
+
// 将完成的成品下载到本地
|
|
106
|
+
server.tool('download-outputs', 'Download the output files from the server.', {
|
|
107
|
+
path: zod_1.z.string().describe('The path of the dir to sync.'),
|
|
108
|
+
}, async ({ path }) => {
|
|
109
|
+
const terminal = session.terminal;
|
|
110
|
+
const workDir = `/home/user/cerevox-zerocut/projects/${terminal.id}`;
|
|
111
|
+
await session.files.syncDownloadsDirectory(path, workDir);
|
|
112
|
+
return {
|
|
113
|
+
content: [{ type: 'text', text: 'Download completed' }],
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
// 列出项目下的所有文件
|
|
117
|
+
server.tool('list-project-files', 'List all files in the materials directory.', async () => {
|
|
118
|
+
const terminal = session.terminal;
|
|
119
|
+
if (!terminal) {
|
|
120
|
+
return {
|
|
121
|
+
content: [{ type: 'text', text: 'No session found' }],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const cwd = await terminal.getCwd();
|
|
125
|
+
const rootFiles = await session?.files.listFiles(cwd);
|
|
126
|
+
const materialsFiles = await session?.files.listFiles(`${cwd}/materials`);
|
|
127
|
+
const outputFiles = await session?.files.listFiles(`${cwd}/output`);
|
|
128
|
+
return {
|
|
129
|
+
content: [
|
|
130
|
+
{
|
|
131
|
+
type: 'text',
|
|
132
|
+
text: JSON.stringify({
|
|
133
|
+
root: rootFiles,
|
|
134
|
+
materials: materialsFiles,
|
|
135
|
+
output: outputFiles,
|
|
136
|
+
}),
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
server.tool('read-file', 'Read the content of a file.', {
|
|
142
|
+
path: zod_1.z.string().describe('The path of the file to read.'),
|
|
143
|
+
}, async ({ path }) => {
|
|
144
|
+
const files = session.files;
|
|
145
|
+
const content = await files.read(path, { encoding: 'utf8' });
|
|
146
|
+
return {
|
|
147
|
+
content: [{ type: 'text', text: content }],
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
server.tool('write-file', 'Write the content to a file.', {
|
|
151
|
+
path: zod_1.z.string().describe('The path of the file to write.'),
|
|
152
|
+
content: zod_1.z.string().describe('The content to write.'),
|
|
153
|
+
}, async ({ path, content }) => {
|
|
154
|
+
const files = session.files;
|
|
155
|
+
await files.write(path, content);
|
|
156
|
+
return {
|
|
157
|
+
content: [
|
|
158
|
+
{ type: 'text', text: JSON.stringify({ path, success: true }) },
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
server.tool('search-context', 'Search the context.', {
|
|
163
|
+
query: zod_1.z.string().describe('The query to search.'),
|
|
164
|
+
}, async ({ query }) => {
|
|
165
|
+
const ai = session.ai;
|
|
166
|
+
const res = await ai.searchText({ q: query });
|
|
167
|
+
return {
|
|
168
|
+
content: [{ type: 'text', text: JSON.stringify(res) }],
|
|
169
|
+
};
|
|
170
|
+
});
|
|
171
|
+
server.tool('search-image', 'Search the image.', {
|
|
172
|
+
query: zod_1.z.string().describe('The query to search.'),
|
|
173
|
+
}, async ({ query }) => {
|
|
174
|
+
const ai = session.ai;
|
|
175
|
+
const res = await ai.searchImage({ q: query });
|
|
176
|
+
return {
|
|
177
|
+
content: [{ type: 'text', text: JSON.stringify(res) }],
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
server.tool('generate-image', 'Generate the image.', {
|
|
181
|
+
prompt: zod_1.z.string().describe('The prompt to generate.'),
|
|
182
|
+
size: zod_1.z
|
|
183
|
+
.enum([
|
|
184
|
+
'1024x1024',
|
|
185
|
+
'864x1152',
|
|
186
|
+
'1152x864',
|
|
187
|
+
'1280x720',
|
|
188
|
+
'720x1280',
|
|
189
|
+
'832x1248',
|
|
190
|
+
'1248x832',
|
|
191
|
+
'1512x648',
|
|
192
|
+
])
|
|
193
|
+
.optional()
|
|
194
|
+
.describe('The size of the image.'),
|
|
195
|
+
saveToFileName: zod_1.z.string().describe('The filename to save.'),
|
|
196
|
+
}, async ({ prompt, size, saveToFileName }) => {
|
|
197
|
+
const ai = session.ai;
|
|
198
|
+
const res = await ai.generateImage({
|
|
199
|
+
prompt,
|
|
200
|
+
size,
|
|
201
|
+
});
|
|
202
|
+
if (res.url) {
|
|
203
|
+
const saveToPath = await saveMertial(session, res.url, saveToFileName);
|
|
204
|
+
return {
|
|
205
|
+
content: [
|
|
206
|
+
{ type: 'text', text: JSON.stringify({ ...res, path: saveToPath }) },
|
|
207
|
+
],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
content: [{ type: 'text', text: JSON.stringify(res) }],
|
|
212
|
+
};
|
|
213
|
+
});
|
|
214
|
+
server.tool('generate-video', 'Generate the video.', {
|
|
215
|
+
prompt: zod_1.z.string().describe('The prompt to generate.'),
|
|
216
|
+
saveToFileName: zod_1.z.string().describe('The filename to save.'),
|
|
217
|
+
start_frame: zod_1.z.string().describe('The start frame image.'),
|
|
218
|
+
duration: zod_1.z.number().min(3).max(12).describe('The duration of the video.'),
|
|
219
|
+
end_frame: zod_1.z.string().optional().describe('The end frame image.'),
|
|
220
|
+
}, async ({ prompt, saveToFileName, start_frame, end_frame, duration }) => {
|
|
221
|
+
const ai = session.ai;
|
|
222
|
+
const res = await ai.framesToVideo({
|
|
223
|
+
prompt,
|
|
224
|
+
start_frame,
|
|
225
|
+
end_frame,
|
|
226
|
+
duration,
|
|
227
|
+
resolution: '720p',
|
|
228
|
+
});
|
|
229
|
+
if (res.url) {
|
|
230
|
+
const saveToPath = await saveMertial(session, res.url, saveToFileName);
|
|
231
|
+
return {
|
|
232
|
+
content: [
|
|
233
|
+
{ type: 'text', text: JSON.stringify({ ...res, path: saveToPath }) },
|
|
234
|
+
],
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
content: [{ type: 'text', text: JSON.stringify(res) }],
|
|
239
|
+
};
|
|
240
|
+
});
|
|
241
|
+
server.tool('generate-bgm', 'Generate the bgm.', {
|
|
242
|
+
prompt: zod_1.z.string().describe('The prompt to generate.'),
|
|
243
|
+
duration: zod_1.z.number().min(30).max(120).describe('The duration of the bgm.'),
|
|
244
|
+
saveToFileName: zod_1.z.string().describe('The filename to save.'),
|
|
245
|
+
}, async ({ prompt, duration, saveToFileName }) => {
|
|
246
|
+
const ai = session.ai;
|
|
247
|
+
const res = await ai.generateBGM({
|
|
248
|
+
prompt,
|
|
249
|
+
duration,
|
|
250
|
+
});
|
|
251
|
+
if (res.url) {
|
|
252
|
+
const saveToPath = await saveMertial(session, res.url, saveToFileName);
|
|
253
|
+
return {
|
|
254
|
+
content: [
|
|
255
|
+
{ type: 'text', text: JSON.stringify({ ...res, path: saveToPath }) },
|
|
256
|
+
],
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
content: [{ type: 'text', text: JSON.stringify(res) }],
|
|
261
|
+
};
|
|
262
|
+
});
|
|
263
|
+
server.tool('generate-scene-tts', 'Generate the tts for the scene.', {
|
|
264
|
+
text: zod_1.z.string().describe('The text to generate.'),
|
|
265
|
+
saveToFileName: zod_1.z.string().describe('The filename to save.'),
|
|
266
|
+
voiceName: zod_1.z
|
|
267
|
+
.enum([
|
|
268
|
+
'presenter_female',
|
|
269
|
+
'presenter_male',
|
|
270
|
+
'Chinese (Mandarin)_News_Anchor',
|
|
271
|
+
'Chinese (Mandarin)_Male_Announcer',
|
|
272
|
+
'Chinese (Mandarin)_Gentleman',
|
|
273
|
+
'Chinese (Mandarin)_Radio_Host',
|
|
274
|
+
'Chinese (Mandarin)_Sweet_Lady',
|
|
275
|
+
'audiobook_female_1',
|
|
276
|
+
'audiobook_male_1',
|
|
277
|
+
'Chinese (Mandarin)_Warm_Bestie',
|
|
278
|
+
'English_Trustworthy_Man',
|
|
279
|
+
'English_Gentle-voiced_man',
|
|
280
|
+
'English_Graceful_Lady',
|
|
281
|
+
'English_Aussie_Bloke',
|
|
282
|
+
'English_Whispering_girl',
|
|
283
|
+
'English_Diligent_Man',
|
|
284
|
+
])
|
|
285
|
+
.describe('适合作为视频配音的中英文音色(推荐16个)。来源于系统音色清单,偏中性、耐听,覆盖新闻/主持、企业宣传、科普解说、纪录片与生活方式等场景。'),
|
|
286
|
+
}, async ({ text, voiceName, saveToFileName }) => {
|
|
287
|
+
const ai = session.ai;
|
|
288
|
+
const res = await ai.textToSpeech({
|
|
289
|
+
text,
|
|
290
|
+
voiceName,
|
|
291
|
+
});
|
|
292
|
+
if (res.url) {
|
|
293
|
+
const saveToPath = await saveMertial(session, res.url, saveToFileName);
|
|
294
|
+
return {
|
|
295
|
+
content: [
|
|
296
|
+
{ type: 'text', text: JSON.stringify({ ...res, path: saveToPath }) },
|
|
297
|
+
],
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
content: [{ type: 'text', text: JSON.stringify(res) }],
|
|
302
|
+
};
|
|
303
|
+
});
|
|
304
|
+
server.tool('compile-and-run', 'Compile project to ffmpeg command and run it.', {
|
|
305
|
+
project: videokit_1.zVideoProject.describe('The VideoProject configuration object.'),
|
|
306
|
+
outputFileName: zod_1.z
|
|
307
|
+
.string()
|
|
308
|
+
.optional()
|
|
309
|
+
.describe('Output video filename (optional, defaults to output.mp4).'),
|
|
310
|
+
}, async ({ project, outputFileName }) => {
|
|
311
|
+
try {
|
|
312
|
+
// Project is already validated by zVideoProject schema
|
|
313
|
+
const validated = project;
|
|
314
|
+
// Get working directory
|
|
315
|
+
const terminal = session.terminal;
|
|
316
|
+
const workDir = `/home/user/cerevox-zerocut/projects/${terminal.id}`;
|
|
317
|
+
const outputDir = `${workDir}/output`;
|
|
318
|
+
// Set output file
|
|
319
|
+
const outFile = outputFileName || 'output.mp4';
|
|
320
|
+
const outputPath = `${outputDir}/${outFile}`;
|
|
321
|
+
// Update export configuration
|
|
322
|
+
validated.export.outFile = outputPath;
|
|
323
|
+
// Compile to FFmpeg command
|
|
324
|
+
const compiled = (0, videokit_1.compileToFfmpeg)(validated, {
|
|
325
|
+
workingDir: outputDir,
|
|
326
|
+
subtitleStrategy: 'auto',
|
|
327
|
+
});
|
|
328
|
+
// Log the FFmpeg command for debugging
|
|
329
|
+
console.log('FFmpeg Command:', compiled.cmd);
|
|
330
|
+
// Run FFmpeg
|
|
331
|
+
const result = await runFfmpeg(session, compiled);
|
|
332
|
+
if (result.exitCode === 0) {
|
|
333
|
+
return {
|
|
334
|
+
content: [
|
|
335
|
+
{
|
|
336
|
+
type: 'text',
|
|
337
|
+
text: JSON.stringify({
|
|
338
|
+
success: true,
|
|
339
|
+
outputPath,
|
|
340
|
+
command: compiled.cmd,
|
|
341
|
+
message: 'Video compilation completed successfully',
|
|
342
|
+
}),
|
|
343
|
+
},
|
|
344
|
+
],
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
return {
|
|
349
|
+
content: [
|
|
350
|
+
{
|
|
351
|
+
type: 'text',
|
|
352
|
+
text: JSON.stringify({
|
|
353
|
+
success: false,
|
|
354
|
+
exitCode: result.exitCode,
|
|
355
|
+
command: compiled.cmd,
|
|
356
|
+
message: `FFmpeg exited with code ${result.exitCode}`,
|
|
357
|
+
}),
|
|
358
|
+
},
|
|
359
|
+
],
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
365
|
+
return {
|
|
366
|
+
content: [
|
|
367
|
+
{
|
|
368
|
+
type: 'text',
|
|
369
|
+
text: JSON.stringify({
|
|
370
|
+
success: false,
|
|
371
|
+
error: errorMessage,
|
|
372
|
+
message: 'Failed to compile and run project',
|
|
373
|
+
}),
|
|
374
|
+
},
|
|
375
|
+
],
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
async function run() {
|
|
380
|
+
// Start receiving messages on stdin and sending messages on stdout
|
|
381
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
382
|
+
await server.connect(transport);
|
|
383
|
+
console.log('Server started');
|
|
384
|
+
}
|
|
385
|
+
if (require.main === module) {
|
|
386
|
+
run();
|
|
387
|
+
}
|
|
388
|
+
//# 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC;AAGjC,eAAO,MAAM,OAAO,KAAwC,CAAC"}
|
package/dist/utils/constants.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_PORT = void 0;
|
|
3
|
+
exports.VERSION = exports.DEFAULT_PORT = void 0;
|
|
4
4
|
exports.DEFAULT_PORT = 9223;
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
6
|
+
exports.VERSION = require('../../package.json').version;
|
|
5
7
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEjC,iEAAiE;AACpD,QAAA,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC"}
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
/**
|
|
7
7
|
* 检测代码类型(ES模块 vs CommonJS vs Python)
|
|
8
8
|
* @param code - 要检测的代码字符串
|
|
9
|
-
* @returns 'esm' 表示ES模块,'cjs' 表示CommonJS,'py' 表示Python
|
|
9
|
+
* @returns 'esm' 表示ES模块,'cjs' 表示CommonJS,'py' 表示Python, 'sh' 表示Shell脚本
|
|
10
10
|
*/
|
|
11
|
-
export declare function detectCodeType(code: string): 'esm' | 'cjs' | 'py';
|
|
11
|
+
export declare function detectCodeType(code: string): 'esm' | 'cjs' | 'py' | 'sh';
|
|
12
12
|
/**
|
|
13
13
|
* 检查代码是否为 ES 模块
|
|
14
14
|
* @param code - 要检测的代码字符串
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-code.d.ts","sourceRoot":"","sources":["../../src/utils/detect-code.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"detect-code.d.ts","sourceRoot":"","sources":["../../src/utils/detect-code.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAkFxE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9C"}
|
|
@@ -12,9 +12,13 @@ exports.isPython = isPython;
|
|
|
12
12
|
/**
|
|
13
13
|
* 检测代码类型(ES模块 vs CommonJS vs Python)
|
|
14
14
|
* @param code - 要检测的代码字符串
|
|
15
|
-
* @returns 'esm' 表示ES模块,'cjs' 表示CommonJS,'py' 表示Python
|
|
15
|
+
* @returns 'esm' 表示ES模块,'cjs' 表示CommonJS,'py' 表示Python, 'sh' 表示Shell脚本
|
|
16
16
|
*/
|
|
17
17
|
function detectCodeType(code) {
|
|
18
|
+
// 检查是否包含 Shell 脚本特征
|
|
19
|
+
if (code.trim().startsWith('#!/bin/bash')) {
|
|
20
|
+
return 'sh';
|
|
21
|
+
}
|
|
18
22
|
// 移除注释和字符串字面量,避免误判
|
|
19
23
|
const cleanCode = code
|
|
20
24
|
.replace(/\/\*[\s\S]*?\*\//g, '') // 移除块注释
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-code.js","sourceRoot":"","sources":["../../src/utils/detect-code.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAOH,
|
|
1
|
+
{"version":3,"file":"detect-code.js","sourceRoot":"","sources":["../../src/utils/detect-code.ts"],"names":[],"mappings":"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"}
|