UNPKG

donobu

Version:

Create browser automations with an LLM agent and replay them as Playwright scripts.

98 lines (97 loc) 4.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CreateBrowserCookieReportTool = void 0; const Tool_1 = require("./Tool"); const JsonUtils_1 = require("../utils/JsonUtils"); const MiscUtils_1 = require("../utils/MiscUtils"); const Logger_1 = require("../utils/Logger"); class CreateBrowserCookieReportTool extends Tool_1.Tool { constructor() { super(CreateBrowserCookieReportTool.NAME, 'Perform an analysis of the cookies for the current web browsing session.', 'CreateBrowserCookieReportToolCoreParameters', 'CreateBrowserCookieReportToolGptParameters', true); } async call(context, _parameters) { const gptClient = context.gptClient; const cookies = JsonUtils_1.JsonUtils.objectToJson(await context.page.context().cookies()); // Create a map to store cookies by name for easy lookup and to convert the // "expires" field to a string const cookieMap = new Map(); for (const cookie of cookies) { if ('expires' in cookie && typeof cookie.expires === 'number') { cookie.expires = this.convertUnixTimeToString(cookie.expires); } if ('name' in cookie) { cookieMap.set(cookie.name, cookie); } } const prompt = ` ${JSON.stringify(cookies, null, 2)} Above is a list of cookies for the current web browsing session. For each cookie, report on its actual or potential purpose. Do not report on any cookies that are not listed above. `; const userMessage = { type: 'user', items: [{ type: 'text', text: prompt }], }; const cookieAnalysesSchema = { type: 'object', properties: { analyses: { type: 'array', items: { type: 'object', properties: { cookieName: { type: 'string', description: 'The cookie that has been analyzed.', }, analysis: { type: 'string', description: 'The analysis for the cookie, including its actual or perceived intended purpose.', }, }, required: ['cookieName', 'analysis'], additionalProperties: false, }, }, }, required: ['analyses'], additionalProperties: false, }; const gptReportResponse = await gptClient.getStructuredOutput([userMessage], cookieAnalysesSchema); MiscUtils_1.MiscUtils.updateTokenCounts(gptReportResponse, context.metadata); const filteredCookieAnalyses = { analyses: [] }; for (const analysis of gptReportResponse.output.analyses) { const originalCookie = cookieMap.get(analysis.cookieName); if (originalCookie) { const filteredAnalysis = { analysis: analysis.analysis, ...originalCookie, }; filteredCookieAnalyses.analyses.push(filteredAnalysis); } else { Logger_1.appLogger.error(`No matching cookie found for analysis: ${analysis.cookieName}`); } } return { isSuccessful: true, forLlm: JSON.stringify(filteredCookieAnalyses, null, 2), metadata: filteredCookieAnalyses, }; } async callFromGpt(context, parameters) { return this.call(context, parameters); } convertUnixTimeToString(unixTime) { if (unixTime < 0) { return 'session'; } const unixTimeMillis = Math.round(unixTime * 1000); const date = new Date(unixTimeMillis); return date.toUTCString(); } } exports.CreateBrowserCookieReportTool = CreateBrowserCookieReportTool; CreateBrowserCookieReportTool.NAME = 'createBrowserCookieReport'; //# sourceMappingURL=CreateBrowserCookieReportTool.js.map