donobu
Version:
Create browser automations with an LLM agent and replay them as Playwright scripts.
98 lines (97 loc) • 4.22 kB
JavaScript
;
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