donobu
Version:
Create browser automations with an LLM agent and replay them as Playwright scripts.
51 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RunSandboxedJavaScriptCodeTool = exports.RunSandboxedJavaScriptCodeGptSchema = exports.RunSandboxedJavaScriptCodeCoreSchema = void 0;
const playwright_1 = require("playwright");
const v4_1 = require("zod/v4");
const ToolSchema_1 = require("../models/ToolSchema");
const Tool_1 = require("./Tool");
exports.RunSandboxedJavaScriptCodeCoreSchema = v4_1.z.object({
javaScriptCode: v4_1.z.string().describe('The JavaScript code to run.'),
});
exports.RunSandboxedJavaScriptCodeGptSchema = v4_1.z.object({
...ToolSchema_1.BaseGptArgsSchema.shape,
...exports.RunSandboxedJavaScriptCodeCoreSchema.shape,
});
class RunSandboxedJavaScriptCodeTool extends Tool_1.Tool {
constructor() {
super(RunSandboxedJavaScriptCodeTool.NAME, `Run arbitrary JavaScript code in a sandboxed environment. The current
webpage's DOM is *not* available. The JS code must be of the form:
\`\`\`
() => {
// ...some code...
return ...some result...
}
\`\`\``, exports.RunSandboxedJavaScriptCodeCoreSchema, exports.RunSandboxedJavaScriptCodeGptSchema, false, undefined, ['web']);
}
async call(_context, parameters) {
const sandBoxedBrowser = await playwright_1.chromium.launch({
headless: true,
chromiumSandbox: true,
});
const sandBoxedPage = await sandBoxedBrowser.newPage();
try {
const result = await sandBoxedPage.evaluate(parameters.javaScriptCode);
return {
isSuccessful: true,
forLlm: '' + JSON.stringify(result),
metadata: null,
};
}
finally {
await sandBoxedPage.close();
await sandBoxedBrowser.close();
}
}
async callFromGpt(context, parameters) {
return this.call(context, parameters);
}
}
exports.RunSandboxedJavaScriptCodeTool = RunSandboxedJavaScriptCodeTool;
RunSandboxedJavaScriptCodeTool.NAME = 'runSandboxedJavaScriptCode';
//# sourceMappingURL=RunSandboxedJavaScriptCodeTool.js.map