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
package/README.md
CHANGED
|
@@ -17,6 +17,8 @@ Cerevox 是一个基于 TypeScript 的浏览器自动化和安全命令执行 SD
|
|
|
17
17
|
- 🔒 **安全沙箱环境** - 隔离的命令执行环境,确保安全性
|
|
18
18
|
- 📁 **文件系统操作** - 完整的文件上传、下载、读写功能
|
|
19
19
|
- 💻 **终端命令执行** - 实时流式输出的命令执行
|
|
20
|
+
- 🤖 **AI 功能集成** - 图像生成、视频制作、背景音乐生成等 AI 能力
|
|
21
|
+
- 📝 **多语言代码执行** - 支持 TypeScript、JavaScript、Python、Shell 脚本执行
|
|
20
22
|
- 📊 **高性能日志** - 基于 Pino 的结构化日志系统
|
|
21
23
|
- 🎨 **TypeScript 严格模式** - 完整的类型安全保障
|
|
22
24
|
- 🔧 **模块化设计** - 高内聚低耦合的架构设计
|
|
@@ -128,6 +130,97 @@ async function runCommands() {
|
|
|
128
130
|
}
|
|
129
131
|
```
|
|
130
132
|
|
|
133
|
+
### 代码执行
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { Cerevox } from 'cerevox';
|
|
137
|
+
|
|
138
|
+
async function runCode() {
|
|
139
|
+
const cerevox = new Cerevox();
|
|
140
|
+
const session = await cerevox.launch();
|
|
141
|
+
|
|
142
|
+
// 执行 Python 代码
|
|
143
|
+
const pythonCode = `
|
|
144
|
+
print("Hello from Python!")
|
|
145
|
+
import requests
|
|
146
|
+
response = requests.get("https://api.github.com")
|
|
147
|
+
print(f"Status: {response.status_code}")
|
|
148
|
+
`;
|
|
149
|
+
const pythonResult = await session.codeRunner.run(pythonCode);
|
|
150
|
+
console.log(await pythonResult);
|
|
151
|
+
|
|
152
|
+
// 执行 Shell 脚本
|
|
153
|
+
const shellCode = `#!/bin/bash
|
|
154
|
+
echo "Hello from Shell!"
|
|
155
|
+
ls -la
|
|
156
|
+
pwd
|
|
157
|
+
`;
|
|
158
|
+
const shellResult = await session.codeRunner.run(shellCode);
|
|
159
|
+
console.log(await shellResult);
|
|
160
|
+
|
|
161
|
+
// 执行 TypeScript 代码
|
|
162
|
+
const tsCode = `
|
|
163
|
+
import { chromium } from 'playwright';
|
|
164
|
+
|
|
165
|
+
async function main() {
|
|
166
|
+
const browser = await chromium.launch();
|
|
167
|
+
const page = await browser.newPage();
|
|
168
|
+
await page.goto('https://example.com');
|
|
169
|
+
const title = await page.title();
|
|
170
|
+
console.log('Page title:', title);
|
|
171
|
+
await browser.close();
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
main();
|
|
175
|
+
`;
|
|
176
|
+
const tsResult = await session.codeRunner.run(tsCode, { inject: true });
|
|
177
|
+
console.log(await tsResult);
|
|
178
|
+
|
|
179
|
+
await session.close();
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### AI 功能
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
import { Cerevox } from 'cerevox';
|
|
187
|
+
|
|
188
|
+
async function useAI() {
|
|
189
|
+
const cerevox = new Cerevox();
|
|
190
|
+
const session = await cerevox.launch();
|
|
191
|
+
|
|
192
|
+
// 获取可用的 AI 模型
|
|
193
|
+
const models = await session.ai.getModels();
|
|
194
|
+
console.log('Available models:', models);
|
|
195
|
+
|
|
196
|
+
// 生成图像
|
|
197
|
+
const imageResult = await session.ai.generateImage({
|
|
198
|
+
prompt: '一只可爱的橘猫在阳光下睡觉',
|
|
199
|
+
size: '1024x1024'
|
|
200
|
+
});
|
|
201
|
+
console.log('Generated image:', imageResult);
|
|
202
|
+
|
|
203
|
+
// 帧到视频转换
|
|
204
|
+
const videoResult = await session.ai.framesToVideo({
|
|
205
|
+
prompt: '让这只猫动起来',
|
|
206
|
+
start_frame: '/path/to/start_frame.jpg',
|
|
207
|
+
end_frame: '/path/to/end_frame.jpg',
|
|
208
|
+
duration: 5,
|
|
209
|
+
resolution: '720p'
|
|
210
|
+
});
|
|
211
|
+
console.log('Generated video:', videoResult);
|
|
212
|
+
|
|
213
|
+
// 生成背景音乐
|
|
214
|
+
const bgmResult = await session.ai.generateBGM({
|
|
215
|
+
Text: '轻松愉快的背景音乐',
|
|
216
|
+
Duration: 30
|
|
217
|
+
});
|
|
218
|
+
console.log('Generated BGM:', bgmResult);
|
|
219
|
+
|
|
220
|
+
await session.close();
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
131
224
|
## 🏗️ 架构设计
|
|
132
225
|
|
|
133
226
|
### 核心模块
|
|
@@ -137,6 +230,8 @@ async function runCommands() {
|
|
|
137
230
|
- **Browser** - 浏览器控制,基于 Playwright 的浏览器操作
|
|
138
231
|
- **FileSystem** - 文件系统操作,支持本地和远程文件管理
|
|
139
232
|
- **Terminal** - 终端命令执行,支持实时流式输出
|
|
233
|
+
- **CodeRunner** - 代码执行引擎,支持 TypeScript、JavaScript、Python、Shell 脚本
|
|
234
|
+
- **AI** - AI 功能集成,提供图像生成、视频制作、背景音乐生成等能力
|
|
140
235
|
- **Logger** - 高性能日志系统,基于 Pino 实现
|
|
141
236
|
|
|
142
237
|
### 技术栈
|
|
@@ -176,12 +271,64 @@ const cerevox = new Cerevox({
|
|
|
176
271
|
- `browser: Browser` - 浏览器控制实例
|
|
177
272
|
- `files: FileSystem` - 文件系统操作实例
|
|
178
273
|
- `terminal: Terminal` - 终端操作实例
|
|
274
|
+
- `codeRunner: CodeRunner` - 代码执行引擎实例
|
|
275
|
+
- `ai: AI` - AI 功能实例
|
|
179
276
|
|
|
180
277
|
#### 方法
|
|
181
278
|
|
|
182
279
|
- `getHost(): string` - 获取会话主机地址
|
|
183
280
|
- `close(force?: boolean): Promise<void>` - 关闭会话
|
|
184
281
|
|
|
282
|
+
### CodeRunner 类
|
|
283
|
+
|
|
284
|
+
#### 方法
|
|
285
|
+
|
|
286
|
+
- `run(code: string, options?: RunOptions): Promise<ExecutionResult>` - 执行代码
|
|
287
|
+
- `code` - 要执行的代码字符串
|
|
288
|
+
- `options.inject?` - 是否注入浏览器启动参数(仅 TypeScript/JavaScript)
|
|
289
|
+
- `options.timeout?` - 执行超时时间(毫秒)
|
|
290
|
+
|
|
291
|
+
#### 支持的代码类型
|
|
292
|
+
|
|
293
|
+
- **TypeScript** - 自动检测 ES 模块语法
|
|
294
|
+
- **JavaScript** - 支持 CommonJS 和 ES 模块
|
|
295
|
+
- **Python** - 自动检测 Python 语法特征
|
|
296
|
+
- **Shell** - 检测 `#!/bin/bash` 开头的脚本
|
|
297
|
+
|
|
298
|
+
### AI 类
|
|
299
|
+
|
|
300
|
+
#### 方法
|
|
301
|
+
|
|
302
|
+
- `getModels(): Promise<string[]>` - 获取可用的 AI 模型列表
|
|
303
|
+
- `generateImage(params: ImageGenerationParams): Promise<ImageResult>` - 生成图像
|
|
304
|
+
- `framesToVideo(params: VideoGenerationParams): Promise<VideoResult>` - 帧到视频转换
|
|
305
|
+
- `generateBGM(params: BGMGenerationParams): Promise<BGMResult>` - 生成背景音乐
|
|
306
|
+
|
|
307
|
+
#### 接口定义
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
interface ImageGenerationParams {
|
|
311
|
+
prompt: string;
|
|
312
|
+
size?: string;
|
|
313
|
+
quality?: string;
|
|
314
|
+
style?: string;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
interface VideoGenerationParams {
|
|
318
|
+
prompt: string;
|
|
319
|
+
start_frame: string;
|
|
320
|
+
end_frame: string;
|
|
321
|
+
duration: number;
|
|
322
|
+
resolution?: string;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
interface BGMGenerationParams {
|
|
326
|
+
Text: string;
|
|
327
|
+
Duration: number;
|
|
328
|
+
Style?: string;
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
185
332
|
### 配置接口
|
|
186
333
|
|
|
187
334
|
```typescript
|
|
@@ -200,6 +347,11 @@ interface ILaunchConfig {
|
|
|
200
347
|
keepAliveMS?: number; // 保活时间
|
|
201
348
|
metadata?: Record<string, string>; // 元数据
|
|
202
349
|
}
|
|
350
|
+
|
|
351
|
+
interface RunOptions {
|
|
352
|
+
inject?: boolean;
|
|
353
|
+
timeout?: number;
|
|
354
|
+
}
|
|
203
355
|
```
|
|
204
356
|
|
|
205
357
|
## 🔧 开发指南
|
|
@@ -244,9 +396,13 @@ cerevox/
|
|
|
244
396
|
│ │ ├── session.ts # 会话管理
|
|
245
397
|
│ │ ├── browser.ts # 浏览器控制
|
|
246
398
|
│ │ ├── file-system.ts # 文件系统
|
|
247
|
-
│ │
|
|
399
|
+
│ │ ├── terminal.ts # 终端操作
|
|
400
|
+
│ │ ├── code-runner.ts # 代码执行引擎
|
|
401
|
+
│ │ └── ai.ts # AI 功能集成
|
|
248
402
|
│ └── utils/ # 工具函数
|
|
249
|
-
│
|
|
403
|
+
│ ├── logger.ts # 日志系统
|
|
404
|
+
│ ├── detect-code.ts # 代码类型检测
|
|
405
|
+
│ └── volc-signv4.ts # 火山引擎签名工具
|
|
250
406
|
├── sandbox/ # 沙箱环境代码
|
|
251
407
|
├── examples/ # 使用示例
|
|
252
408
|
├── scripts/ # 构建脚本
|
|
@@ -355,6 +511,10 @@ CEREVOX_API_KEY=your-api-key-here
|
|
|
355
511
|
- **实时预览**:非 headless 模式下自动打开浏览器预览
|
|
356
512
|
- **智能打包**:使用 esbuild 进行代码打包和优化
|
|
357
513
|
- **环境管理**:自动创建和管理 API 密钥配置文件
|
|
514
|
+
- **代码执行**:支持 TypeScript、JavaScript、Python、Shell 脚本执行
|
|
515
|
+
- **AI 功能**:集成图像生成、视频制作、背景音乐生成等 AI 能力
|
|
516
|
+
- **文件管理**:支持文件上传下载和目录操作
|
|
517
|
+
- **命令执行**:实时执行终端命令
|
|
358
518
|
|
|
359
519
|
## 📄 许可证
|
|
360
520
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { BaseClass } from './base';
|
|
2
|
+
import { Session } from './session';
|
|
3
|
+
export declare class AI extends BaseClass {
|
|
4
|
+
private terminal;
|
|
5
|
+
private session;
|
|
6
|
+
constructor(session: Session);
|
|
7
|
+
getModels(): Promise<any>;
|
|
8
|
+
generateImage(options: {
|
|
9
|
+
prompt: string;
|
|
10
|
+
size?: string;
|
|
11
|
+
}): Promise<any>;
|
|
12
|
+
framesToVideo(options: {
|
|
13
|
+
prompt: string;
|
|
14
|
+
start_frame: string;
|
|
15
|
+
end_frame?: string;
|
|
16
|
+
duration: number;
|
|
17
|
+
resolution?: '480p' | '720p' | '1080p';
|
|
18
|
+
}): Promise<any>;
|
|
19
|
+
generateBGM(options: {
|
|
20
|
+
prompt: string;
|
|
21
|
+
duration: number;
|
|
22
|
+
}): Promise<any>;
|
|
23
|
+
textToSpeech(options: {
|
|
24
|
+
voiceName: string;
|
|
25
|
+
text: string;
|
|
26
|
+
speed?: number;
|
|
27
|
+
pitch?: number;
|
|
28
|
+
volume?: number;
|
|
29
|
+
emotion?: string;
|
|
30
|
+
}): Promise<any>;
|
|
31
|
+
searchText(options: {
|
|
32
|
+
q: string;
|
|
33
|
+
count?: number;
|
|
34
|
+
offset?: number;
|
|
35
|
+
type?: 'smart' | 'full';
|
|
36
|
+
}): Promise<any>;
|
|
37
|
+
searchImage(options: {
|
|
38
|
+
q: string;
|
|
39
|
+
count?: number;
|
|
40
|
+
offset?: number;
|
|
41
|
+
}): Promise<any>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/core/ai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAU,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDpC,qBACa,EAAG,SAAQ,SAAS;IAC/B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,OAAO;IAStB,SAAS;IAOT,aAAa,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;IAuBxD,aAAa,CAAC,OAAO,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;KACxC;IAgCK,WAAW,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IA+BzD,YAAY,CAAC,OAAO,EAAE;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAmBK,UAAU,CAAC,OAAO,EAAE;QACxB,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KACzB;IAuBK,WAAW,CAAC,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAqB1E"}
|
package/dist/core/ai.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AI = void 0;
|
|
13
|
+
const constants_1 = require("../utils/constants");
|
|
14
|
+
const base_1 = require("./base");
|
|
15
|
+
const session_1 = require("./session");
|
|
16
|
+
async function waitForViedoTaskComplete(taskUrl, logger) {
|
|
17
|
+
const headers = {
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
};
|
|
20
|
+
while (true) {
|
|
21
|
+
const response = await fetch(taskUrl, {
|
|
22
|
+
method: 'GET',
|
|
23
|
+
headers: headers,
|
|
24
|
+
});
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
logger.debug(`get video task status: ${JSON.stringify(data)}`);
|
|
27
|
+
if (data.status === 'succeeded') {
|
|
28
|
+
return data;
|
|
29
|
+
}
|
|
30
|
+
if (data.status === 'failed') {
|
|
31
|
+
throw new Error('Video generation failed');
|
|
32
|
+
}
|
|
33
|
+
if (data.status === 'canceled') {
|
|
34
|
+
throw new Error('Video generation canceled');
|
|
35
|
+
}
|
|
36
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function waitForBgmTaskComplete(taskUrl, logger) {
|
|
40
|
+
const headers = {
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
};
|
|
43
|
+
while (true) {
|
|
44
|
+
const response = await fetch(taskUrl, {
|
|
45
|
+
method: 'GET',
|
|
46
|
+
headers: headers,
|
|
47
|
+
});
|
|
48
|
+
const data = await response.json();
|
|
49
|
+
logger.debug(`get bgm task status: ${JSON.stringify(data)}`);
|
|
50
|
+
const result = data.Result;
|
|
51
|
+
if (result?.Status === 2) {
|
|
52
|
+
return result.SongDetail;
|
|
53
|
+
}
|
|
54
|
+
if (result?.Status === 3) {
|
|
55
|
+
throw new Error('BGM generation failed');
|
|
56
|
+
}
|
|
57
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
let AI = class AI extends base_1.BaseClass {
|
|
61
|
+
constructor(session) {
|
|
62
|
+
super(session.getSandbox(), session.getLogger().level);
|
|
63
|
+
this.terminal = session.terminal.create();
|
|
64
|
+
this.session = session;
|
|
65
|
+
}
|
|
66
|
+
async getModels() {
|
|
67
|
+
const host = this.session.getHost();
|
|
68
|
+
const res = await fetch(`https://${host}/ai/models`);
|
|
69
|
+
const data = await res.json();
|
|
70
|
+
return data;
|
|
71
|
+
}
|
|
72
|
+
async generateImage(options) {
|
|
73
|
+
try {
|
|
74
|
+
const host = this.session.getHost();
|
|
75
|
+
const res = await fetch(`https://${host}/ai/image/generate`, {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
headers: {
|
|
78
|
+
'Content-Type': 'application/json',
|
|
79
|
+
},
|
|
80
|
+
body: JSON.stringify(options),
|
|
81
|
+
});
|
|
82
|
+
const data = await res.json();
|
|
83
|
+
if (data.data?.[0]?.url) {
|
|
84
|
+
return {
|
|
85
|
+
url: data.data?.[0]?.url,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return data;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
this.logger.error('generateImage error', error);
|
|
92
|
+
return { error: 'generateImage error' };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async framesToVideo(options) {
|
|
96
|
+
try {
|
|
97
|
+
const host = this.session.getHost();
|
|
98
|
+
const res = await fetch(`https://${host}/ai/frames/to/video/generate`, {
|
|
99
|
+
method: 'POST',
|
|
100
|
+
headers: {
|
|
101
|
+
'Content-Type': 'application/json',
|
|
102
|
+
},
|
|
103
|
+
body: JSON.stringify(options),
|
|
104
|
+
});
|
|
105
|
+
const data = await res.json();
|
|
106
|
+
if (data.taskUrl) {
|
|
107
|
+
const result = await waitForViedoTaskComplete(data.taskUrl, this.logger);
|
|
108
|
+
if (result) {
|
|
109
|
+
return {
|
|
110
|
+
url: result.content?.video_url,
|
|
111
|
+
duration: result.duration,
|
|
112
|
+
resolution: result.resolution,
|
|
113
|
+
ratio: result.ratio,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return data;
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
this.logger.error('framesToVideo error', error);
|
|
121
|
+
return { error: error.message };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async generateBGM(options) {
|
|
125
|
+
try {
|
|
126
|
+
const host = this.session.getHost();
|
|
127
|
+
const res = await fetch(`https://${host}/ai/music/bgm/generate`, {
|
|
128
|
+
method: 'POST',
|
|
129
|
+
headers: {
|
|
130
|
+
'Content-Type': 'application/json',
|
|
131
|
+
},
|
|
132
|
+
body: JSON.stringify({
|
|
133
|
+
Text: options.prompt,
|
|
134
|
+
Duration: options.duration,
|
|
135
|
+
}),
|
|
136
|
+
});
|
|
137
|
+
const data = await res.json();
|
|
138
|
+
if (data.taskUrl) {
|
|
139
|
+
const result = await waitForBgmTaskComplete(data.taskUrl, this.logger);
|
|
140
|
+
if (result) {
|
|
141
|
+
return {
|
|
142
|
+
url: result.AudioUrl,
|
|
143
|
+
duration: result.Duration,
|
|
144
|
+
prompt: result.Prompt,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return data;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
this.logger.error('generateBGM error', error);
|
|
152
|
+
return { error: error.message };
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async textToSpeech(options) {
|
|
156
|
+
// TODO 支持分句生成
|
|
157
|
+
try {
|
|
158
|
+
const host = this.session.getHost();
|
|
159
|
+
const res = await fetch(`https://${host}/ai/text_to_speech/generate`, {
|
|
160
|
+
method: 'POST',
|
|
161
|
+
headers: {
|
|
162
|
+
'Content-Type': 'application/json',
|
|
163
|
+
},
|
|
164
|
+
body: JSON.stringify(options),
|
|
165
|
+
});
|
|
166
|
+
const data = await res.json();
|
|
167
|
+
return data;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
this.logger.error('textToSpeech error', error);
|
|
171
|
+
return { error: error.message };
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async searchText(options) {
|
|
175
|
+
try {
|
|
176
|
+
options.count = options.count || 10;
|
|
177
|
+
options.offset = options.offset || 0;
|
|
178
|
+
options.type = options.type || 'smart';
|
|
179
|
+
const host = this.session.getHost();
|
|
180
|
+
const res = await fetch(`https://${host}/ai/search/text?q=${encodeURIComponent(options.q)}&count=${options.count}&offset=${options.offset}&type=${options.type}`, {
|
|
181
|
+
method: 'GET',
|
|
182
|
+
headers: {
|
|
183
|
+
'Content-Type': 'application/json',
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
const data = await res.json();
|
|
187
|
+
return data;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
this.logger.error('searchText error', error);
|
|
191
|
+
return { error: error.message };
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async searchImage(options) {
|
|
195
|
+
try {
|
|
196
|
+
options.count = options.count || 10;
|
|
197
|
+
options.offset = options.offset || 0;
|
|
198
|
+
const host = this.session.getHost();
|
|
199
|
+
const res = await fetch(`https://${host}/ai/search/image?q=${encodeURIComponent(options.q)}&count=${options.count}&offset=${options.offset}`, {
|
|
200
|
+
method: 'GET',
|
|
201
|
+
headers: {
|
|
202
|
+
'Content-Type': 'application/json',
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
const data = await res.json();
|
|
206
|
+
return data;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
this.logger.error('searchImage error', error);
|
|
210
|
+
return { error: error.message };
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
exports.AI = AI;
|
|
215
|
+
exports.AI = AI = __decorate([
|
|
216
|
+
(0, base_1.Logger)({ VERSION: constants_1.VERSION }),
|
|
217
|
+
__metadata("design:paramtypes", [session_1.Session])
|
|
218
|
+
], AI);
|
|
219
|
+
//# sourceMappingURL=ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/core/ai.ts"],"names":[],"mappings":"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"}
|
package/dist/core/browser.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import Sandbox from 'e2b';
|
|
2
1
|
import { BaseClass } from './base';
|
|
2
|
+
import { Session } from './session';
|
|
3
3
|
export declare class Browser extends BaseClass {
|
|
4
4
|
private connectionMetaData;
|
|
5
5
|
private readyDefer;
|
|
6
|
-
|
|
6
|
+
private session;
|
|
7
|
+
constructor(session: Session);
|
|
7
8
|
_setReady(connectionMetaData: Record<string, string>): Promise<void>;
|
|
8
9
|
get ready(): Promise<void>;
|
|
9
10
|
getSessionId(): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/core/browser.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/core/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,qBACa,OAAQ,SAAQ,SAAS;IACpC,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,OAAO;IAQtB,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAK1D,IAAI,KAAK,kBAER;IAEK,YAAY;IAKZ,OAAO;IAKP,WAAW;IAKjB;;;OAGG;IACG,wBAAwB;IA4B9B;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAYvD;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAYlD;;;OAGG;IACG,gBAAgB;CAMvB"}
|
package/dist/core/browser.js
CHANGED
|
@@ -13,9 +13,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.Browser = void 0;
|
|
16
|
-
const e2b_1 = __importDefault(require("e2b"));
|
|
17
16
|
const base_1 = require("./base");
|
|
18
17
|
const open_1 = __importDefault(require("open"));
|
|
18
|
+
const session_1 = require("./session");
|
|
19
|
+
const constants_1 = require("../utils/constants");
|
|
19
20
|
class ReadyDefer {
|
|
20
21
|
constructor() {
|
|
21
22
|
this._resolve = () => { };
|
|
@@ -33,10 +34,11 @@ class ReadyDefer {
|
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
let Browser = class Browser extends base_1.BaseClass {
|
|
36
|
-
constructor(
|
|
37
|
-
super(
|
|
37
|
+
constructor(session) {
|
|
38
|
+
super(session.getSandbox(), session.getLogger().level);
|
|
38
39
|
this.connectionMetaData = {};
|
|
39
40
|
this.readyDefer = new ReadyDefer();
|
|
41
|
+
this.session = session;
|
|
40
42
|
}
|
|
41
43
|
async _setReady(connectionMetaData) {
|
|
42
44
|
this.connectionMetaData = connectionMetaData;
|
|
@@ -130,7 +132,7 @@ let Browser = class Browser extends base_1.BaseClass {
|
|
|
130
132
|
};
|
|
131
133
|
exports.Browser = Browser;
|
|
132
134
|
exports.Browser = Browser = __decorate([
|
|
133
|
-
(0, base_1.Logger)({
|
|
134
|
-
__metadata("design:paramtypes", [
|
|
135
|
+
(0, base_1.Logger)({ VERSION: constants_1.VERSION }),
|
|
136
|
+
__metadata("design:paramtypes", [session_1.Session])
|
|
135
137
|
], Browser);
|
|
136
138
|
//# sourceMappingURL=browser.js.map
|
package/dist/core/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/core/browser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/core/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/core/cerevox.d.ts
CHANGED
|
@@ -29,7 +29,8 @@ export declare class Cerevox {
|
|
|
29
29
|
});
|
|
30
30
|
private getToken;
|
|
31
31
|
private createSession;
|
|
32
|
-
private
|
|
32
|
+
private waitForHttpServerReady;
|
|
33
|
+
private waitForBrowserReady;
|
|
33
34
|
getLogger(): PinoLogger;
|
|
34
35
|
connect(sandboxId: string): Promise<Session>;
|
|
35
36
|
launch(config?: ILaunchConfig): Promise<Session>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cerevox.d.ts","sourceRoot":"","sources":["../../src/core/cerevox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,UAAU,GAAG,eAAe,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,QAAQ,CAAgD;IAChE,OAAO,CAAC,MAAM,CAAa;gBAGzB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;KACrD;YASM,QAAQ;YAYR,aAAa;YA0Bb,
|
|
1
|
+
{"version":3,"file":"cerevox.d.ts","sourceRoot":"","sources":["../../src/core/cerevox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,UAAU,GAAG,eAAe,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,QAAQ,CAAgD;IAChE,OAAO,CAAC,MAAM,CAAa;gBAGzB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;KACrD;YASM,QAAQ;YAYR,aAAa;YA0Bb,sBAAsB;YAmBtB,mBAAmB;IA8BjC,SAAS;IAIH,OAAO,CAAC,SAAS,EAAE,MAAM;IAmBzB,MAAM,CAAC,MAAM,GAAE,aAAkB;CAwDxC"}
|
package/dist/core/cerevox.js
CHANGED
|
@@ -58,7 +58,25 @@ class Cerevox {
|
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
async
|
|
61
|
+
async waitForHttpServerReady(session) {
|
|
62
|
+
const host = session.getHost();
|
|
63
|
+
const interval = 50;
|
|
64
|
+
const maxTries = 1000;
|
|
65
|
+
let tries = 0;
|
|
66
|
+
while (tries++ < maxTries) {
|
|
67
|
+
await (0, promises_1.setTimeout)(interval);
|
|
68
|
+
try {
|
|
69
|
+
const response = await fetch(`https://${host}/health`);
|
|
70
|
+
if (response.ok) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
/* empty */
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async waitForBrowserReady(session) {
|
|
62
80
|
const host = session.getHost();
|
|
63
81
|
const interval = 50;
|
|
64
82
|
const maxTries = 1000;
|
|
@@ -104,7 +122,8 @@ class Cerevox {
|
|
|
104
122
|
},
|
|
105
123
|
logLevel: this.logLevel,
|
|
106
124
|
});
|
|
107
|
-
this.
|
|
125
|
+
await this.waitForHttpServerReady(session);
|
|
126
|
+
this.waitForBrowserReady(session); // 不需要 await
|
|
108
127
|
return session;
|
|
109
128
|
}
|
|
110
129
|
async launch(config = {}) {
|
|
@@ -145,6 +164,7 @@ class Cerevox {
|
|
|
145
164
|
ENABLE_WEBGL: browserConfig.webgl.toString(),
|
|
146
165
|
BROWSER_ARGS: JSON.stringify(browserConfig.args),
|
|
147
166
|
CEREVOX_DOMAIN: 'cerevox.io',
|
|
167
|
+
PW_TEST_SCREENSHOT_NO_FONTS_READY: '1', // 避免 page.screenshot 崩溃
|
|
148
168
|
},
|
|
149
169
|
});
|
|
150
170
|
const session = new session_1.Session(sandbox, {
|
|
@@ -154,7 +174,8 @@ class Cerevox {
|
|
|
154
174
|
logLevel: this.logLevel,
|
|
155
175
|
});
|
|
156
176
|
await this.createSession(session, browserConfig.headless);
|
|
157
|
-
this.
|
|
177
|
+
await this.waitForHttpServerReady(session);
|
|
178
|
+
this.waitForBrowserReady(session); // 不需要 await
|
|
158
179
|
return session;
|
|
159
180
|
}
|
|
160
181
|
}
|