donobu
Version:
Create browser automations with an LLM agent and replay them as Playwright scripts.
81 lines (80 loc) • 3.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateBrowserCookieReportTool = void 0;
const v4_1 = require("zod/v4");
const ToolSchema_1 = require("../models/ToolSchema");
const MiscUtils_1 = require("../utils/MiscUtils");
const TargetUtils_1 = require("../utils/TargetUtils");
const Tool_1 = require("./Tool");
class CreateBrowserCookieReportTool extends Tool_1.Tool {
constructor() {
super(CreateBrowserCookieReportTool.NAME, 'Perform an analysis of the cookies for the current web browsing session.', ToolSchema_1.NoArgsSchema, ToolSchema_1.BaseGptArgsSchema, true, undefined, ['web']);
}
async call(context, _parameters) {
const gptClient = context.gptClient;
const cookies = (await (0, TargetUtils_1.webPage)(context).context().cookies()).map((c) => {
return {
...c,
expires: this.convertUnixTimeToString(c.expires),
};
});
// 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 (cookie.name) {
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 gptReportResponse = await gptClient.getStructuredOutput([userMessage], v4_1.z.object({
analyses: v4_1.z.array(v4_1.z.object({
cookieName: v4_1.z
.string()
.describe('The cookie that has been analyzed'),
analysis: v4_1.z
.string()
.describe('The analysis for the cookie, including its actual or perceived intended purpose'),
})),
}));
MiscUtils_1.MiscUtils.updateTokenCounts(gptReportResponse, context.metadata);
const filteredCookieAnalyses = {
cookies: [],
};
for (const analysis of gptReportResponse.output.analyses) {
const originalCookie = cookieMap.get(analysis.cookieName);
if (originalCookie) {
filteredCookieAnalyses.cookies.push({
...originalCookie,
analysis: analysis.analysis,
});
}
}
return {
isSuccessful: true,
forLlm: JSON.stringify(filteredCookieAnalyses, null, 2),
metadata: filteredCookieAnalyses,
};
}
async callFromGpt(context, _parameters) {
return this.call(context, {});
}
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