UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

96 lines • 3.27 kB
/** * @license * Copyright 2026 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { zod } from '../../third_party/index.js'; import { ToolCategory } from '../categories.js'; import { definePageTool } from '../ToolDefinition.js'; import { validateUrl } from '../../utils/url.js'; export const screenshot = definePageTool({ name: 'screenshot', description: `Takes a screenshot`, annotations: { category: ToolCategory.DEBUGGING, // Not read-only due to filePath param. readOnlyHint: false, }, schema: {}, blockedByDialog: true, verifyFilesSchema: {}, handler: async (request, response, context) => { const page = request.page; const screenshot = await page.pptrPage.screenshot({ type: 'png', optimizeForSpeed: true, }); const { filepath } = await context.saveTemporaryFile(screenshot, `screenshot.png`); response.appendResponseLine(filepath); }, }); export const navigate = definePageTool(args => { return { name: 'navigate', description: `Loads a URL`, annotations: { category: ToolCategory.NAVIGATION, readOnlyHint: false, }, schema: { url: zod.string().describe('URL to navigate to'), }, blockedByDialog: false, verifyFilesSchema: {}, handler: async (request, response) => { validateUrl(request.params.url, { javascriptEvaluation: args?.javascriptEvaluation, categoryExtensions: args?.categoryExtensions, }); const page = request.page; const options = { timeout: 30_000, }; const dialogHandler = (dialog) => { if (dialog.type() === 'beforeunload') { response.appendResponseLine(`Accepted a beforeunload dialog.`); void dialog.accept(); // We are not going to report the dialog like regular dialogs. page.clearDialog(); } }; page.pptrPage.on('dialog', dialogHandler); try { await page.pptrPage.goto(request.params.url, options); response.appendResponseLine(`Navigated to ${page.pptrPage.url()}.`); } finally { page.pptrPage.off('dialog', dialogHandler); } }, }; }); export const evaluate = definePageTool({ name: 'evaluate', description: `Evaluates a JavaScript script`, annotations: { category: ToolCategory.DEBUGGING, readOnlyHint: false, conditions: ['javascriptEvaluation'], }, schema: { script: zod.string().describe(`JS script to run on the page`), }, blockedByDialog: true, verifyFilesSchema: {}, handler: async (request, response) => { const page = request.page; try { const result = await page.pptrPage.evaluate(request.params.script); response.appendResponseLine(JSON.stringify(result)); } catch (err) { response.appendResponseLine(String(err.message)); } }, }); //# sourceMappingURL=tools.js.map