puppeteer-browser-agent
Version:
Puppeteer browser agent for use in AI agent systems
64 lines (55 loc) • 1.54 kB
text/typescript
import type { ElementHandle } from "puppeteer";
import { ElementAction } from "./element-action";
import { findCode } from "./definitions/find-code";
export type ICodeInfo = {
title: string;
descriptions: string;
code: string;
};
export class FindCodeAction extends ElementAction {
name = "find_code";
definition = findCode;
async getCodeLinesFor(
codeHandle: ElementHandle,
lineSelector = "span.line",
) {
return await this.getContentForAll(codeHandle, lineSelector);
}
get lineSelector() {
return this.fnArgs.lineSelector || "span.line";
}
get codeTitle() {
return this.fnArgs.codeTitle;
}
async execute() {
const codeBlocks = await this.page?.$$('code');
if (!codeBlocks) {
return;
}
const codeTitle = this.codeTitle;
const results: ICodeInfo[] = [];
for (const codeBlock of codeBlocks) {
const codeBlockElem = await this.handleToElement(codeBlock)
const nearestHeader = this.findNearestHeadingElement(codeBlockElem)
const title = nearestHeader?.textContent
if (codeTitle && !title?.toLocaleLowerCase().includes(codeTitle)) {
continue;
}
if (!title) {
continue
}
const descriptions = await this.getRelevantTextBeforeNextHeader(codeBlockElem);
const lines = await this.getCodeLinesFor(
codeBlock,
this.lineSelector,
);
const result: ICodeInfo = {
title,
descriptions: descriptions ?? undefined,
code: lines.join('\n'),
};
results.push(result);
}
this.addToMessage(`Code found on page:${JSON.stringify(results)}`);
}
}