diff --git a/packages/core/src/PageAgentCore.ts b/packages/core/src/PageAgentCore.ts index 5c35636..f97ab36 100644 --- a/packages/core/src/PageAgentCore.ts +++ b/packages/core/src/PageAgentCore.ts @@ -344,7 +344,7 @@ export class PageAgentCore extends EventTarget { return result } - await waitFor(0.4) // @TODO: configurable + await waitFor(this.config.stepDelay ?? 0.4) } } @@ -512,7 +512,8 @@ export class PageAgentCore extends EventTarget { // Accumulated wait time warning if (this.#states.totalWaitTime >= 3) { this.pushObservation( - `You have waited ${this.#states.totalWaitTime} seconds accumulatively. DO NOT wait any longer unless you have a good reason.` + `You have waited ${this.#states.totalWaitTime} seconds accumulatively. ` + + `DO NOT wait any longer unless you have a good reason.` ) } @@ -528,7 +529,8 @@ export class PageAgentCore extends EventTarget { const remaining = this.config.maxSteps - step if (remaining === 5) { this.pushObservation( - `⚠️ Only ${remaining} steps remaining. Consider wrapping up or calling done with partial results.` + `⚠️ Only ${remaining} steps remaining. ` + + `Consider wrapping up or calling done with partial results.` ) } else if (remaining === 2) { this.pushObservation( diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 33669c3..9daff76 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -152,6 +152,12 @@ export interface AgentConfig extends LLMConfig { * @experimental Use with caution - incorrect prompts may break agent behavior. */ customSystemPrompt?: string + + /** + * Delay between steps in seconds. + * @default 0.4 + */ + stepDelay?: number } /** diff --git a/packages/page-controller/src/actions.ts b/packages/page-controller/src/actions.ts index 983192f..53b3c6c 100644 --- a/packages/page-controller/src/actions.ts +++ b/packages/page-controller/src/actions.ts @@ -213,14 +213,18 @@ export async function selectOptionElement(selectElement: HTMLSelectElement, opti await waitFor(0.1) // Wait to ensure change event processing completes } +interface ScrollableElement extends HTMLElement { + scrollIntoViewIfNeeded?: (centerIfNeeded?: boolean) => void +} + export async function scrollIntoViewIfNeeded(element: HTMLElement) { - const el = element as any - if (el.scrollIntoViewIfNeeded) { + const el = element as ScrollableElement + if (typeof el.scrollIntoViewIfNeeded === 'function') { el.scrollIntoViewIfNeeded() // await waitFor(0.5) // Animation playback } else { // @todo visibility check - el.scrollIntoView({ behavior: 'auto', block: 'center', inline: 'nearest' }) + element.scrollIntoView({ behavior: 'auto', block: 'center', inline: 'nearest' }) // await waitFor(0.5) // Animation playback } }