cerevox 0.4.12 → 1.0.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/dist/cli/cerevox-run.d.ts.map +1 -1
- package/dist/cli/cerevox-run.js +6 -25
- package/dist/cli/cerevox-run.js.map +1 -1
- package/dist/core/ai.d.ts +0 -1
- package/dist/core/ai.d.ts.map +1 -1
- package/dist/core/ai.js +14 -18
- package/dist/core/ai.js.map +1 -1
- package/dist/core/base.d.ts +1 -3
- package/dist/core/base.d.ts.map +1 -1
- package/dist/core/base.js +1 -2
- package/dist/core/base.js.map +1 -1
- package/dist/core/browser.d.ts +1 -6
- package/dist/core/browser.d.ts.map +1 -1
- package/dist/core/browser.js +34 -50
- package/dist/core/browser.js.map +1 -1
- package/dist/core/cerevox.d.ts +3 -11
- package/dist/core/cerevox.d.ts.map +1 -1
- package/dist/core/cerevox.js +10 -155
- package/dist/core/cerevox.js.map +1 -1
- package/dist/core/code-runner.d.ts +1 -1
- package/dist/core/code-runner.d.ts.map +1 -1
- package/dist/core/code-runner.js +4 -4
- package/dist/core/code-runner.js.map +1 -1
- package/dist/core/file-system.d.ts +12 -33
- package/dist/core/file-system.d.ts.map +1 -1
- package/dist/core/file-system.js +111 -93
- package/dist/core/file-system.js.map +1 -1
- package/dist/core/sandbox.d.ts +20 -0
- package/dist/core/sandbox.d.ts.map +1 -0
- package/dist/core/sandbox.js +120 -0
- package/dist/core/sandbox.js.map +1 -0
- package/dist/core/session.d.ts +5 -8
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +29 -64
- package/dist/core/session.js.map +1 -1
- package/dist/core/terminal.d.ts +6 -5
- package/dist/core/terminal.d.ts.map +1 -1
- package/dist/core/terminal.js +175 -58
- package/dist/core/terminal.js.map +1 -1
- package/dist/core/types.d.ts +23 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/mcp/servers/browser-use.d.ts.map +1 -1
- package/dist/mcp/servers/browser-use.js +3 -7
- package/dist/mcp/servers/browser-use.js.map +1 -1
- package/dist/mcp/servers/zerocut.d.ts.map +1 -1
- package/dist/mcp/servers/zerocut.js +12 -71
- package/dist/mcp/servers/zerocut.js.map +1 -1
- package/package.json +7 -3
- package/dist/utils/auth.d.ts +0 -4
- package/dist/utils/auth.d.ts.map +0 -1
- package/dist/utils/auth.js +0 -14
- package/dist/utils/auth.js.map +0 -1
package/dist/core/cerevox.js
CHANGED
|
@@ -1,22 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.Cerevox = void 0;
|
|
7
|
-
const e2b_1 = __importDefault(require("e2b"));
|
|
8
4
|
const session_1 = require("./session");
|
|
9
|
-
const node_fs_1 = require("node:fs");
|
|
10
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
-
const promises_1 = require("node:timers/promises");
|
|
12
|
-
const session_2 = require("./session");
|
|
13
5
|
require("dotenv/config");
|
|
14
|
-
const auth_1 = require("../utils/auth");
|
|
15
6
|
const logger_1 = require("../utils/logger");
|
|
7
|
+
const sandbox_1 = require("./sandbox");
|
|
16
8
|
class Cerevox {
|
|
17
9
|
constructor(options = {}) {
|
|
18
|
-
this.token = '';
|
|
19
|
-
this.domain = 'sandbox.novita.ai';
|
|
20
10
|
this.debug = false;
|
|
21
11
|
this.apiKey = options.apiKey || process.env.CEREVOX_API_KEY || '';
|
|
22
12
|
this.debug = !!options.debug;
|
|
@@ -24,153 +14,20 @@ class Cerevox {
|
|
|
24
14
|
this.logLevel = options.logLevel || (this.debug ? 'debug' : 'error');
|
|
25
15
|
this.logger = (0, logger_1.createClassLogger)('Cerevox', {}, this.logLevel);
|
|
26
16
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return this.token;
|
|
30
|
-
}
|
|
31
|
-
const res = await (0, auth_1.verify)({ key: this.apiKey });
|
|
32
|
-
if (!res.success) {
|
|
33
|
-
throw new Error('Invalid Cerevox key');
|
|
34
|
-
}
|
|
35
|
-
this.token = res.data.token;
|
|
36
|
-
return this.token;
|
|
37
|
-
}
|
|
38
|
-
async createSession(session, headless = true) {
|
|
39
|
-
let remoteScript = '/home/user/http-proxy.js';
|
|
40
|
-
const localPath = node_path_1.default.resolve(__dirname, `../../sandbox/http-proxy.js`);
|
|
41
|
-
const logger = session.getLogger();
|
|
42
|
-
if ((0, node_fs_1.existsSync)(localPath)) {
|
|
43
|
-
remoteScript = '/home/user/http-proxy.local.js';
|
|
44
|
-
logger.debug(`🗂️ Load local file: ${localPath}`);
|
|
45
|
-
await session.files.upload(localPath, remoteScript);
|
|
46
|
-
}
|
|
47
|
-
const command = headless
|
|
48
|
-
? `node ${remoteScript}`
|
|
49
|
-
: `xvfb-run -a node ${remoteScript}`;
|
|
50
|
-
session.process = await session.terminal.run(command);
|
|
51
|
-
if (this.debug) {
|
|
52
|
-
const serverLogger = logger.child({ class: 'Server' });
|
|
53
|
-
session.process.stdout.on('data', msg => {
|
|
54
|
-
serverLogger.debug(msg.toString('utf-8').trim());
|
|
55
|
-
});
|
|
56
|
-
session.process.stderr.on('data', msg => {
|
|
57
|
-
serverLogger.warn(msg.toString('utf-8').trim());
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}
|
|
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) {
|
|
80
|
-
const host = session.getHost();
|
|
81
|
-
const interval = 50;
|
|
82
|
-
const maxTries = 1000;
|
|
83
|
-
let tries = 0;
|
|
84
|
-
const logger = session.getLogger();
|
|
85
|
-
while (tries++ < maxTries) {
|
|
86
|
-
try {
|
|
87
|
-
const response = await fetch(`https://${host}/json/version`);
|
|
88
|
-
if (response.ok) {
|
|
89
|
-
const responseText = await response.text();
|
|
90
|
-
if (responseText.includes('Browser')) {
|
|
91
|
-
const metaData = JSON.parse(responseText);
|
|
92
|
-
metaData.wsUrl = metaData.webSocketDebuggerUrl;
|
|
93
|
-
metaData.httpUrl = `https://${host}`;
|
|
94
|
-
delete metaData.webSocketDebuggerUrl;
|
|
95
|
-
logger.debug('CDP server is ready', metaData);
|
|
96
|
-
session._setConnectionMetaData(metaData);
|
|
97
|
-
return metaData;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
logger.debug(`CDP check failed (attempt ${tries}):`, error);
|
|
103
|
-
}
|
|
104
|
-
await (0, promises_1.setTimeout)(interval);
|
|
105
|
-
}
|
|
106
|
-
throw new Error('CDP server failed to become ready within timeout');
|
|
17
|
+
get workspace() {
|
|
18
|
+
return this.apiKey.slice(3, 19);
|
|
107
19
|
}
|
|
108
20
|
getLogger() {
|
|
109
21
|
return this.logger;
|
|
110
22
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
if (session_2.sessions[sandboxId]) {
|
|
116
|
-
return session_2.sessions[sandboxId];
|
|
117
|
-
}
|
|
118
|
-
const token = await this.getToken();
|
|
119
|
-
const sandbox = await e2b_1.default.connect(sandboxId, {
|
|
120
|
-
apiKey: token,
|
|
121
|
-
});
|
|
122
|
-
const session = new session_1.Session(sandbox, {
|
|
123
|
-
envs: {
|
|
124
|
-
SANDBOX_ID: sandbox.sandboxId,
|
|
125
|
-
},
|
|
126
|
-
logLevel: this.logLevel,
|
|
127
|
-
workspace: this.workspace,
|
|
128
|
-
});
|
|
129
|
-
await this.waitForHttpServerReady(session);
|
|
130
|
-
this.waitForBrowserReady(session); // 不需要 await
|
|
131
|
-
return session;
|
|
23
|
+
async createSandbox(timeout = 60, metadata) {
|
|
24
|
+
const logger = this.logger;
|
|
25
|
+
const sandbox = await (0, sandbox_1.createSandbox)(this.apiKey, logger, timeout, metadata);
|
|
26
|
+
return sandbox;
|
|
132
27
|
}
|
|
133
28
|
async launch(config = {}) {
|
|
134
|
-
const {
|
|
135
|
-
const
|
|
136
|
-
type: 'chromium',
|
|
137
|
-
args: [],
|
|
138
|
-
headless: true,
|
|
139
|
-
liveview: false,
|
|
140
|
-
adblock: false,
|
|
141
|
-
webgl: false,
|
|
142
|
-
...browser,
|
|
143
|
-
};
|
|
144
|
-
const launchConfig = {
|
|
145
|
-
timeoutMS: config.timeoutMS || 300000,
|
|
146
|
-
keepAliveMS: config.keepAliveMS || 5000,
|
|
147
|
-
...options,
|
|
148
|
-
};
|
|
149
|
-
const token = await this.getToken();
|
|
150
|
-
const sandbox = await e2b_1.default.create(`cerevox-${browserConfig.type}`, {
|
|
151
|
-
timeoutMs: launchConfig.timeoutMS,
|
|
152
|
-
apiKey: token,
|
|
153
|
-
domain: this.domain,
|
|
154
|
-
metadata: launchConfig.metadata,
|
|
155
|
-
envs: {
|
|
156
|
-
NODE_ENV: this.debug ? 'development' : 'production',
|
|
157
|
-
PLAYWRIGHT_BROWSERS_PATH: '0',
|
|
158
|
-
CDP_PORT: '9222',
|
|
159
|
-
HEADLESS: browserConfig.headless.toString(),
|
|
160
|
-
ADBLOCK: browserConfig.adblock.toString(),
|
|
161
|
-
SANDBOX_TIMEOUT: launchConfig.timeoutMS.toString(),
|
|
162
|
-
ENABLE_LIVEVIEW: browserConfig.liveview.toString(),
|
|
163
|
-
KEEP_ALIVE_MS: launchConfig.keepAliveMS.toString(),
|
|
164
|
-
APIKEY: token,
|
|
165
|
-
WORKSPACE: this.workspace,
|
|
166
|
-
SANDBOX_DOMAIN: this.domain,
|
|
167
|
-
BROWSER_TYPE: browserConfig.type,
|
|
168
|
-
ENABLE_WEBGL: browserConfig.webgl.toString(),
|
|
169
|
-
BROWSER_ARGS: JSON.stringify(browserConfig.args),
|
|
170
|
-
CEREVOX_DOMAIN: 'cerevox.io',
|
|
171
|
-
PW_TEST_SCREENSHOT_NO_FONTS_READY: '1', // 避免 page.screenshot 崩溃
|
|
172
|
-
},
|
|
173
|
-
});
|
|
29
|
+
const { timeout, metadata } = config;
|
|
30
|
+
const sandbox = await this.createSandbox(timeout, metadata);
|
|
174
31
|
const session = new session_1.Session(sandbox, {
|
|
175
32
|
envs: {
|
|
176
33
|
SANDBOX_ID: sandbox.sandboxId,
|
|
@@ -178,9 +35,7 @@ class Cerevox {
|
|
|
178
35
|
logLevel: this.logLevel,
|
|
179
36
|
workspace: this.workspace,
|
|
180
37
|
});
|
|
181
|
-
await
|
|
182
|
-
await this.waitForHttpServerReady(session);
|
|
183
|
-
this.waitForBrowserReady(session); // 不需要 await
|
|
38
|
+
await session.connect();
|
|
184
39
|
return session;
|
|
185
40
|
}
|
|
186
41
|
}
|
package/dist/core/cerevox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cerevox.js","sourceRoot":"","sources":["../../src/core/cerevox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cerevox.js","sourceRoot":"","sources":["../../src/core/cerevox.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AACpC,yBAAuB;AACvB,4CAAoD;AAEpD,uCAA0C;AAgB1C,MAAa,OAAO;IAMlB,YACE,UAII,EAAE;QATA,UAAK,GAAY,KAAK,CAAC;QAW7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7B,0CAA0C;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,IAAA,0BAAiB,EAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,EAAE,QAAiC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAa,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAwB,EAAE;QACrC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAErC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,OAAO,EAAE;YACnC,IAAI,EAAE;gBACJ,UAAU,EAAE,OAAO,CAAC,SAAU;aAC/B;YACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAjDD,0BAiDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-runner.d.ts","sourceRoot":"","sources":["../../src/core/code-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"code-runner.d.ts","sourceRoot":"","sources":["../../src/core/code-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,SAAS,EAAU,MAAM,QAAQ,CAAC;AAI3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,qBACa,UAAW,SAAQ,SAAS;IACvC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAU;IAEzB;;;;;OAKG;gBACS,OAAO,EAAE,OAAO;YAQd,UAAU;IAuGlB,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GACrE,OAAO,CAAC,aAAa,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAmChD"}
|
package/dist/core/code-runner.js
CHANGED
|
@@ -27,12 +27,12 @@ let CodeRunner = class CodeRunner extends base_1.BaseClass {
|
|
|
27
27
|
* @param logLevel - 日志级别
|
|
28
28
|
*/
|
|
29
29
|
constructor(session) {
|
|
30
|
-
super(session.
|
|
30
|
+
super(session.getLogger().level);
|
|
31
31
|
this.terminal = session.terminal.create();
|
|
32
32
|
this.session = session;
|
|
33
33
|
}
|
|
34
34
|
async injectCode(code, type) {
|
|
35
|
-
const wsUrl = await this.session.browser.
|
|
35
|
+
const wsUrl = await this.session.browser.getCDPEndpoint();
|
|
36
36
|
if (type === 'py') {
|
|
37
37
|
// 替换 python 调用
|
|
38
38
|
code = code.replace(/\.launch\s*\(/gm, `.connect_over_cdp('${wsUrl}',`);
|
|
@@ -105,7 +105,7 @@ let CodeRunner = class CodeRunner extends base_1.BaseClass {
|
|
|
105
105
|
const scriptFile = `/home/user/scripts/script-${scriptId}.${type === 'esm' ? 'mjs' : type}`;
|
|
106
106
|
await this.session.files.write(scriptFile, code);
|
|
107
107
|
const terminal = this.terminal;
|
|
108
|
-
const timeout = options.timeout ||
|
|
108
|
+
const timeout = options.timeout || 300;
|
|
109
109
|
const syncDir = options.syncDir || './cerevox-output';
|
|
110
110
|
let cmd;
|
|
111
111
|
if (type === 'sh') {
|
|
@@ -114,7 +114,7 @@ let CodeRunner = class CodeRunner extends base_1.BaseClass {
|
|
|
114
114
|
else {
|
|
115
115
|
cmd = `cd ${workDir} && ${type === 'py' ? 'python3' : 'node'} ${scriptFile}`;
|
|
116
116
|
}
|
|
117
|
-
const ret = await terminal.run(cmd, { timeoutMs: timeout });
|
|
117
|
+
const ret = await terminal.run(cmd, { timeoutMs: timeout * 1000 });
|
|
118
118
|
ret.stdout.pipe(process.stdout);
|
|
119
119
|
ret.stderr.pipe(process.stderr);
|
|
120
120
|
return ret.json().then(async (result) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-runner.js","sourceRoot":"","sources":["../../src/core/code-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,iCAA2C;AAC3C,+BAAoC;AAEpC,sDAAsD;AACtD,uCAAoC;AACpC,kDAA6C;AAC7C,0DAA6B;AAGtB,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,gBAAS;IAIvC;;;;;OAKG;IACH,YAAY,OAAgB;QAC1B,KAAK,CACH,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"code-runner.js","sourceRoot":"","sources":["../../src/core/code-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Sandbox from 'e2b';
|
|
2
1
|
import { BaseClass } from './base';
|
|
2
|
+
import { Session } from './session';
|
|
3
3
|
/**
|
|
4
4
|
* FileSystem 类 - 提供沙箱环境中的文件系统操作功能
|
|
5
5
|
*
|
|
@@ -25,21 +25,14 @@ import { BaseClass } from './base';
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
export declare class FileSystem extends BaseClass {
|
|
28
|
+
private session;
|
|
28
29
|
/**
|
|
29
30
|
* 创建 FileSystem 实例
|
|
30
31
|
* @param sandbox - E2B 沙箱实例
|
|
32
|
+
* @param session - Session 实例(用于获取 API 主机地址)
|
|
31
33
|
* @param options - 可选配置参数
|
|
32
34
|
*/
|
|
33
|
-
constructor(
|
|
34
|
-
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
35
|
-
});
|
|
36
|
-
/**
|
|
37
|
-
* 检查文件是否为二进制文件(基于文件扩展名)
|
|
38
|
-
* @param filePath - 要检查的文件路径
|
|
39
|
-
* @returns 如果是二进制文件返回 true,否则返回 false
|
|
40
|
-
* @private
|
|
41
|
-
*/
|
|
42
|
-
private isBinaryFile;
|
|
35
|
+
constructor(session: Session);
|
|
43
36
|
/**
|
|
44
37
|
* 验证路径是否安全,只允许同步 /home/user 目录下的子目录
|
|
45
38
|
* @param path - 要验证的路径
|
|
@@ -47,14 +40,6 @@ export declare class FileSystem extends BaseClass {
|
|
|
47
40
|
* @private
|
|
48
41
|
*/
|
|
49
42
|
private validateSafePathToDownload;
|
|
50
|
-
/**
|
|
51
|
-
* 根据指定编码格式转换数据
|
|
52
|
-
* @param data - 要转换的数据(Buffer 或 Uint8Array)
|
|
53
|
-
* @param encoding - 目标编码格式
|
|
54
|
-
* @returns 转换后的数据
|
|
55
|
-
* @private
|
|
56
|
-
*/
|
|
57
|
-
private encodeContent;
|
|
58
43
|
/**
|
|
59
44
|
* 列出沙箱目录中的文件
|
|
60
45
|
* @param path - 沙箱中的目录路径
|
|
@@ -79,31 +64,25 @@ export declare class FileSystem extends BaseClass {
|
|
|
79
64
|
*/
|
|
80
65
|
private syncDirectoryRecursive;
|
|
81
66
|
/**
|
|
82
|
-
*
|
|
67
|
+
* 向沙箱中写入文件(通过 API 接口)
|
|
83
68
|
* @param path - 沙箱中的文件路径
|
|
84
|
-
* @param content -
|
|
69
|
+
* @param content - 要写入的文本内容(仅支持字符串)
|
|
85
70
|
*/
|
|
86
|
-
write(path: string, content: string
|
|
71
|
+
write(path: string, content: string): Promise<void>;
|
|
87
72
|
/**
|
|
88
|
-
*
|
|
73
|
+
* 从沙箱中读取文件(通过 API 接口,仅支持 UTF-8 编码)
|
|
89
74
|
* @param remotePath - 沙箱中的文件路径
|
|
90
|
-
* @
|
|
91
|
-
* @returns 文件内容
|
|
75
|
+
* @returns 文件的文本内容
|
|
92
76
|
*/
|
|
93
|
-
read(remotePath: string
|
|
94
|
-
encoding: 'utf8' | 'base64';
|
|
95
|
-
}): Promise<string>;
|
|
96
|
-
read(remotePath: string, options?: {
|
|
97
|
-
encoding: 'binary';
|
|
98
|
-
}): Promise<Buffer>;
|
|
77
|
+
read(remotePath: string): Promise<string>;
|
|
99
78
|
/**
|
|
100
|
-
*
|
|
79
|
+
* 上传本地文件到沙箱(通过 API 接口)
|
|
101
80
|
* @param localPath - 本地文件路径
|
|
102
81
|
* @param remotePath - 沙箱中的目标路径
|
|
103
82
|
*/
|
|
104
83
|
upload(localPath: string, remotePath: string): Promise<void>;
|
|
105
84
|
/**
|
|
106
|
-
*
|
|
85
|
+
* 从沙箱下载文件到本地(通过 API 接口)
|
|
107
86
|
* @param remotePath - 沙箱中的文件路径
|
|
108
87
|
* @param localPath - 本地目标路径
|
|
109
88
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/core/file-system.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/core/file-system.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAU,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBACa,UAAW,SAAQ,SAAS;IAO3B,OAAO,CAAC,OAAO;IAN3B;;;;;OAKG;gBACiB,OAAO,EAAE,OAAO;IAOpC;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IAgClC;;;;;OAKG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkChD;;;;;OAKG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBjD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxC;;;;;;OAMG;YACW,sBAAsB;IAsEpC;;;;OAIG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCzD;;;;OAIG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkC/C;;;;OAIG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+ClE;;;;OAIG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CpE;;;;;;OAMG;IACU,sBAAsB,CACjC,IAAI,GAAE,MAAiC,EACvC,GAAG,GAAE,MAA+B,EACpC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAC3E,OAAO,CAAC,MAAM,CAAC;CAyDnB"}
|