UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

63 lines • 2.38 kB
/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { zod } from '../third_party/index.js'; import { ToolCategory } from './categories.js'; import { definePageTool, timeoutSchema } from './ToolDefinition.js'; export const takeSnapshot = definePageTool({ name: 'take_snapshot', description: `Take a text snapshot of the target page based on the a11y tree. The snapshot lists page elements along with a unique identifier (uid). Always use the latest snapshot. Prefer taking a snapshot over taking a screenshot. The snapshot indicates the element selected in the DevTools Elements panel (if any).`, annotations: { category: ToolCategory.DEBUGGING, // Not read-only due to filePath param. readOnlyHint: false, }, schema: { verbose: zod .boolean() .optional() .describe('Whether to include all possible information available in the full a11y tree. Default is false.'), filePath: zod .string() .optional() .describe('The absolute path, or a path relative to the current working directory, to save the snapshot to instead of attaching it to the response.'), }, blockedByDialog: true, verifyFilesSchema: { filePath: true, }, handler: async (request, response) => { response.includeSnapshot({ verbose: request.params.verbose ?? false, filePath: request.params.filePath, }); }, }); export const waitFor = definePageTool({ name: 'wait_for', description: `Wait for the specified text to appear on the selected page.`, annotations: { category: ToolCategory.NAVIGATION, readOnlyHint: true, }, schema: { text: zod .array(zod.string()) .min(1) .describe('Non-empty list of texts. Resolves when any value appears on the page.'), ...timeoutSchema, }, blockedByDialog: true, verifyFilesSchema: {}, handler: async (request, response) => { const page = request.page; await page.waitForTextOnPage(request.params.text, request.params.timeout); response.appendResponseLine(`Element matching one of ${JSON.stringify(request.params.text)} found.`); response.includeSnapshot(); }, }); //# sourceMappingURL=snapshot.js.map