UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

128 lines • 4.73 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 } from './ToolDefinition.js'; const FILTERABLE_RESOURCE_TYPES = [ 'document', 'stylesheet', 'image', 'media', 'font', 'script', 'texttrack', 'xhr', 'fetch', 'prefetch', 'eventsource', 'websocket', 'manifest', 'signedexchange', 'ping', 'cspviolationreport', 'preflight', 'fedcm', 'other', ]; export const listNetworkRequests = definePageTool(() => ({ name: 'list_network_requests', description: `Lists the most recent requests for the target page since the last navigation.`, annotations: { category: ToolCategory.NETWORK, readOnlyHint: true, }, schema: { pageSize: zod .number() .int() .positive() .optional() .describe('Maximum number of requests to return. When omitted, returns all requests.'), pageIdx: zod .number() .int() .min(0) .optional() .describe('Page number to return (0-based). When omitted, returns the first page.'), resourceTypes: zod .array(zod.enum(FILTERABLE_RESOURCE_TYPES)) .optional() .describe('Filter requests to only return requests of the specified resource types. When omitted or empty, returns all requests.'), includePreservedRequests: zod .boolean() .default(false) .optional() .describe('Set to true to return the preserved requests over the last 3 navigations.'), }, blockedByDialog: false, verifyFilesSchema: {}, handler: async (request, response) => { const data = await request.page.getDevToolsData(); response.attachDevToolsData(data); const reqid = data?.cdpRequestId ? request.page.resolveCdpRequestId(data.cdpRequestId) : undefined; response.setIncludeNetworkRequests(true, { pageSize: request.params.pageSize, pageIdx: request.params.pageIdx, resourceTypes: request.params.resourceTypes, includePreservedRequests: request.params.includePreservedRequests, networkRequestIdInDevToolsUI: reqid, }); }, })); export const getNetworkRequest = definePageTool(() => ({ name: 'get_network_request', description: `Gets a network request by an optional reqid, if omitted returns the currently selected request in the DevTools Network panel. Useful for inspecting request headers (including 'Cookie') and response headers (including 'Set-Cookie' and directives).`, annotations: { category: ToolCategory.NETWORK, readOnlyHint: false, }, schema: { reqid: zod .number() .optional() .describe('The reqid of the network request. If omitted returns the currently selected request in the DevTools Network panel.'), requestFilePath: zod .string() .optional() .describe('The absolute or relative path to a .network-request file to save the request body to. If omitted, the body is returned inline.'), responseFilePath: zod .string() .optional() .describe('The absolute or relative path to a .network-response file to save the response body to. If omitted, the body is returned inline.'), }, blockedByDialog: true, verifyFilesSchema: { requestFilePath: true, responseFilePath: true, }, handler: async (request, response) => { if (request.params.reqid) { response.attachNetworkRequest(request.params.reqid, { requestFilePath: request.params.requestFilePath, responseFilePath: request.params.responseFilePath, }); } else { const data = await request.page.getDevToolsData(); response.attachDevToolsData(data); const reqid = data?.cdpRequestId ? request.page.resolveCdpRequestId(data.cdpRequestId) : undefined; if (reqid) { response.attachNetworkRequest(reqid, { requestFilePath: request.params.requestFilePath, responseFilePath: request.params.responseFilePath, }); } else { response.appendResponseLine(`Nothing is currently selected in the DevTools Network panel.`); } } }, })); //# sourceMappingURL=network.js.map