import type { Context, IAgentDriver } from "../agent-driver"; import type { DebugOpts } from "../../../types"; import type { FnArgs } from "../handlers/function-handler"; export interface IDriverAction { execute(): Promise; definition: any; name: string; setState({ args, context }: { args: any; context: any }): void; } export type IDriverActionOpts = DebugOpts & { definition?: any; }; export abstract class BaseDriverAction implements IDriverAction { driver: IAgentDriver; fnArgs: FnArgs = {}; context: Context = []; debug = false; definition: any; opts: IDriverActionOpts; taskPrefix = ""; name = "unknown"; constructor(driver: IAgentDriver, opts: IDriverActionOpts = {}) { this.driver = driver; this.opts = opts; this.debug = Boolean(opts.debug); this.definition = opts.definition; this.baseInit(); this.initialize(); } protected updateState() {} public setState({ args, context }: { args: any; context: any }) { this.setContext(context); this.setArgs(args); } protected setContext(context: any[]) { this.context = context; this.updateState(); } protected setArgs(args: any) { this.fnArgs = args; this.updateState(); } protected get prefix(): string | undefined { return this.taskPrefix; } // biome-ignore lint/suspicious/useAwait: public async execute() { this.log("Action: To be implemented"); } protected baseInit() { if (this.autopilot) { this.taskPrefix = ""; } } // override as needed protected initialize() {} protected addToMessage(message: string) { this.driver.addToMessage(message); } protected get page() { return this.driver.page; } protected get autopilot() { return this.driver.autopilot; } protected async getInput(msg: string) { return await this.driver.getInput(msg); } resetMessage() { this.driver.setMessage(""); } // biome-ignore lint/suspicious/useAwait: protected setMessage(msg: string) { this.driver.setMessage(msg); } protected logTask(msg: any) { this.log(`${this.prefix}${msg}`); } // biome-ignore lint/suspicious/noExplicitAny: protected log(msg: any) { if (!this.debug) { return; } console.info(msg); } }