@midscene/web 0.26.6 → 0.26.7-beta-20250815153024.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/es/bridge-mode/io-client.mjs +1 -1
  2. package/dist/es/bridge-mode/io-server.mjs +2 -2
  3. package/dist/es/bridge-mode/io-server.mjs.map +1 -1
  4. package/dist/es/bridge-mode/page-browser-side.mjs +1 -1
  5. package/dist/es/bridge-mode/page-browser-side.mjs.map +1 -1
  6. package/dist/es/chrome-extension/page.mjs +1 -1
  7. package/dist/es/common/agent.mjs +95 -59
  8. package/dist/es/common/agent.mjs.map +1 -1
  9. package/dist/es/common/tasks.mjs +8 -8
  10. package/dist/es/common/tasks.mjs.map +1 -1
  11. package/dist/es/common/utils.mjs +6 -1
  12. package/dist/es/common/utils.mjs.map +1 -1
  13. package/dist/es/yaml/player.mjs +75 -13
  14. package/dist/es/yaml/player.mjs.map +1 -1
  15. package/dist/lib/bridge-mode/io-client.js +1 -1
  16. package/dist/lib/bridge-mode/io-server.js +2 -2
  17. package/dist/lib/bridge-mode/io-server.js.map +1 -1
  18. package/dist/lib/bridge-mode/page-browser-side.js +1 -1
  19. package/dist/lib/bridge-mode/page-browser-side.js.map +1 -1
  20. package/dist/lib/chrome-extension/page.js +1 -1
  21. package/dist/lib/common/agent.js +94 -58
  22. package/dist/lib/common/agent.js.map +1 -1
  23. package/dist/lib/common/tasks.js +8 -8
  24. package/dist/lib/common/tasks.js.map +1 -1
  25. package/dist/lib/common/utils.js +6 -1
  26. package/dist/lib/common/utils.js.map +1 -1
  27. package/dist/lib/yaml/player.js +75 -13
  28. package/dist/lib/yaml/player.js.map +1 -1
  29. package/dist/types/common/agent.d.ts +23 -4
  30. package/dist/types/yaml/player.d.ts +1 -0
  31. package/package.json +3 -3
  32. package/dist/es/common/plan-builder.mjs +0 -89
  33. package/dist/es/common/plan-builder.mjs.map +0 -1
  34. package/dist/lib/common/plan-builder.js +0 -123
  35. package/dist/lib/common/plan-builder.js.map +0 -1
  36. package/dist/types/common/plan-builder.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"common/agent.js","sources":["webpack://@midscene/web/webpack/runtime/compat_get_default_export","webpack://@midscene/web/webpack/runtime/define_property_getters","webpack://@midscene/web/webpack/runtime/has_own_property","webpack://@midscene/web/webpack/runtime/make_namespace_object","webpack://@midscene/web/./src/common/agent.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { WebPage } from '@/common/page';\nimport {\n type AgentAssertOpt,\n type AgentDescribeElementAtPointResult,\n type AgentWaitForOpt,\n type DetailedLocateParam,\n type ExecutionDump,\n type ExecutionRecorderItem,\n type ExecutionTask,\n type ExecutionTaskLog,\n type Executor,\n type GroupedActionDump,\n Insight,\n type InsightAction,\n type InsightExtractOption,\n type InsightExtractParam,\n type LocateOption,\n type LocateResultElement,\n type LocateValidatorResult,\n type LocatorValidatorOption,\n type MidsceneYamlScript,\n type OnTaskStartTip,\n type Rect,\n type ScrollParam,\n type TUserPrompt,\n} from '@midscene/core';\n\nimport yaml from 'js-yaml';\n\nimport { ScriptPlayer, parseYamlScript } from '@/yaml/index';\nimport {\n groupedActionDumpFileExt,\n reportHTMLContent,\n stringifyDumpData,\n writeLogFile,\n} from '@midscene/core/utils';\nimport {\n DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT,\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT,\n} from '@midscene/shared/constants';\nimport { getAIConfigInBoolean, vlLocateMode } from '@midscene/shared/env';\nimport { getDebug } from '@midscene/shared/logger';\nimport { assert } from '@midscene/shared/utils';\nimport { PageTaskExecutor } from '../common/tasks';\nimport type { PlaywrightWebPage } from '../playwright';\nimport type { PuppeteerWebPage } from '../puppeteer';\nimport type { WebElementInfo, WebUIContext } from '../web-element';\nimport type { AndroidDeviceInputOpt } from './page';\nimport { buildPlans } from './plan-builder';\nimport { TaskCache } from './task-cache';\nimport {\n locateParamStr,\n paramStr,\n scrollParamStr,\n taskTitleStr,\n typeStr,\n} from './ui-utils';\nimport { getReportFileName, printReportMsg } from './utils';\nimport { parseContextFromWebPage } from './utils';\nimport { trimContextByViewport } from './utils';\n\nconst debug = getDebug('web-integration');\n\nconst distanceOfTwoPoints = (p1: [number, number], p2: [number, number]) => {\n const [x1, y1] = p1;\n const [x2, y2] = p2;\n return Math.round(Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2));\n};\n\nconst includedInRect = (point: [number, number], rect: Rect) => {\n const [x, y] = point;\n const { left, top, width, height } = rect;\n return x >= left && x <= left + width && y >= top && y <= top + height;\n};\n\nconst defaultInsightExtractOption: InsightExtractOption = {\n domIncluded: false,\n screenshotIncluded: true,\n};\n\nexport interface PageAgentOpt {\n forceSameTabNavigation?: boolean /* if limit the new tab to the current page, default true */;\n testId?: string;\n cacheId?: string;\n groupName?: string;\n groupDescription?: string;\n /* if auto generate report, default true */\n generateReport?: boolean;\n /* if auto print report msg, default true */\n autoPrintReportMsg?: boolean;\n onTaskStartTip?: OnTaskStartTip;\n aiActionContext?: string;\n /* custom report file name */\n reportFileName?: string;\n}\n\nexport type WebPageAgentOpt = PageAgentOpt & WebPageOpt;\nexport type WebPageOpt = {\n waitForNavigationTimeout?: number;\n waitForNetworkIdleTimeout?: number;\n};\n\nexport class PageAgent<PageType extends WebPage = WebPage> {\n page: PageType;\n\n insight: Insight<WebElementInfo, WebUIContext>;\n\n dump: GroupedActionDump;\n\n reportFile?: string | null;\n\n reportFileName?: string;\n\n taskExecutor: PageTaskExecutor;\n\n opts: PageAgentOpt;\n\n /**\n * If true, the agent will not perform any actions\n */\n dryMode = false;\n\n onTaskStartTip?: OnTaskStartTip;\n\n taskCache?: TaskCache;\n\n onDumpUpdate?: (dump: string) => void;\n\n destroyed = false;\n\n /**\n * Frozen page context for consistent AI operations\n */\n private frozenPageContext?: WebUIContext;\n\n constructor(page: PageType, opts?: PageAgentOpt) {\n this.page = page;\n this.opts = Object.assign(\n {\n generateReport: true,\n autoPrintReportMsg: true,\n groupName: 'Midscene Report',\n groupDescription: '',\n },\n opts || {},\n );\n\n if (\n this.page.pageType === 'puppeteer' ||\n this.page.pageType === 'playwright'\n ) {\n (\n this.page as PuppeteerWebPage | PlaywrightWebPage\n ).waitForNavigationTimeout =\n (this.opts as WebPageAgentOpt).waitForNavigationTimeout ??\n DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT;\n (\n this.page as PuppeteerWebPage | PlaywrightWebPage\n ).waitForNetworkIdleTimeout =\n (this.opts as WebPageAgentOpt).waitForNetworkIdleTimeout ??\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;\n }\n\n this.onTaskStartTip = this.opts.onTaskStartTip;\n // get the parent browser of the puppeteer page\n // const browser = (this.page as PuppeteerWebPage).browser();\n\n this.insight = new Insight<WebElementInfo, WebUIContext>(\n async (action: InsightAction) => {\n return this.getUIContext(action);\n },\n );\n\n if (opts?.cacheId && this.page.pageType !== 'android') {\n this.taskCache = new TaskCache(\n opts.cacheId,\n getAIConfigInBoolean('MIDSCENE_CACHE'), // if we should use cache to match the element\n );\n }\n\n this.taskExecutor = new PageTaskExecutor(this.page, this.insight, {\n taskCache: this.taskCache,\n onTaskStart: this.callbackOnTaskStartTip.bind(this),\n });\n this.dump = this.resetDump();\n this.reportFileName =\n opts?.reportFileName ||\n getReportFileName(opts?.testId || this.page.pageType || 'web');\n }\n\n async getUIContext(action?: InsightAction): Promise<WebUIContext> {\n // If page context is frozen, return the frozen context for all actions\n if (this.frozenPageContext) {\n debug('Using frozen page context for action:', action);\n return this.frozenPageContext;\n }\n\n // Otherwise, get fresh context based on the action type\n if (action && (action === 'extract' || action === 'assert')) {\n return await parseContextFromWebPage(this.page, {\n ignoreMarker: true,\n });\n }\n return await parseContextFromWebPage(this.page, {\n ignoreMarker: !!vlLocateMode(),\n });\n }\n\n async _snapshotContext(): Promise<WebUIContext> {\n return await this.getUIContext('locate');\n }\n\n async setAIActionContext(prompt: string) {\n this.opts.aiActionContext = prompt;\n }\n\n resetDump() {\n this.dump = {\n groupName: this.opts.groupName!,\n groupDescription: this.opts.groupDescription,\n executions: [],\n };\n\n return this.dump;\n }\n\n appendExecutionDump(execution: ExecutionDump) {\n // use trimContextByViewport to process execution\n const trimmedExecution = trimContextByViewport(execution);\n const currentDump = this.dump;\n currentDump.executions.push(trimmedExecution);\n }\n\n dumpDataString() {\n // update dump info\n this.dump.groupName = this.opts.groupName!;\n this.dump.groupDescription = this.opts.groupDescription;\n return stringifyDumpData(this.dump);\n }\n\n reportHTMLString() {\n return reportHTMLContent(this.dumpDataString());\n }\n\n writeOutActionDumps() {\n if (this.destroyed) {\n throw new Error(\n 'PageAgent has been destroyed. Cannot update report file.',\n );\n }\n const { generateReport, autoPrintReportMsg } = this.opts;\n this.reportFile = writeLogFile({\n fileName: this.reportFileName!,\n fileExt: groupedActionDumpFileExt,\n fileContent: this.dumpDataString(),\n type: 'dump',\n generateReport,\n });\n debug('writeOutActionDumps', this.reportFile);\n if (generateReport && autoPrintReportMsg && this.reportFile) {\n printReportMsg(this.reportFile);\n }\n }\n\n private async callbackOnTaskStartTip(task: ExecutionTask) {\n const param = paramStr(task);\n const tip = param ? `${typeStr(task)} - ${param}` : typeStr(task);\n\n if (this.onTaskStartTip) {\n await this.onTaskStartTip(tip);\n }\n }\n\n private async afterTaskRunning(executor: Executor, doNotThrowError = false) {\n this.appendExecutionDump(executor.dump());\n\n try {\n await this.onDumpUpdate?.(this.dumpDataString());\n } catch (error) {\n console.error('Error in onDumpUpdate', error);\n }\n\n this.writeOutActionDumps();\n\n if (executor.isInErrorState() && !doNotThrowError) {\n const errorTask = executor.latestErrorTask();\n throw new Error(`${errorTask?.errorMessage}\\n${errorTask?.errorStack}`, {\n cause: errorTask?.error,\n });\n }\n }\n\n private buildDetailedLocateParam(\n locatePrompt: TUserPrompt,\n opt?: LocateOption,\n ): DetailedLocateParam {\n assert(locatePrompt, 'missing locate prompt');\n\n if (typeof opt === 'object' && opt !== null) {\n const prompt = locatePrompt;\n const deepThink = opt.deepThink ?? false;\n const cacheable = opt.cacheable ?? true;\n const xpath = opt.xpath;\n\n return {\n prompt,\n deepThink,\n cacheable,\n xpath,\n };\n }\n\n return {\n prompt: locatePrompt,\n };\n }\n\n async aiTap(locatePrompt: TUserPrompt, opt?: LocateOption) {\n const detailedLocateParam = this.buildDetailedLocateParam(\n locatePrompt,\n opt,\n );\n const plans = buildPlans('Tap', detailedLocateParam);\n const { executor, output } = await this.taskExecutor.runPlans(\n taskTitleStr('Tap', locateParamStr(detailedLocateParam)),\n plans,\n { cacheable: opt?.cacheable },\n );\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiRightClick(locatePrompt: TUserPrompt, opt?: LocateOption) {\n const detailedLocateParam = this.buildDetailedLocateParam(\n locatePrompt,\n opt,\n );\n const plans = buildPlans('RightClick', detailedLocateParam);\n const { executor, output } = await this.taskExecutor.runPlans(\n taskTitleStr('RightClick', locateParamStr(detailedLocateParam)),\n plans,\n { cacheable: opt?.cacheable },\n );\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiHover(locatePrompt: TUserPrompt, opt?: LocateOption) {\n const detailedLocateParam = this.buildDetailedLocateParam(\n locatePrompt,\n opt,\n );\n const plans = buildPlans('Hover', detailedLocateParam);\n const { executor, output } = await this.taskExecutor.runPlans(\n taskTitleStr('Hover', locateParamStr(detailedLocateParam)),\n plans,\n { cacheable: opt?.cacheable },\n );\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiInput(\n value: string,\n locatePrompt: TUserPrompt,\n opt?: AndroidDeviceInputOpt & LocateOption,\n ) {\n assert(\n typeof value === 'string',\n 'input value must be a string, use empty string if you want to clear the input',\n );\n assert(locatePrompt, 'missing locate prompt for input');\n const detailedLocateParam = this.buildDetailedLocateParam(\n locatePrompt,\n opt,\n );\n const plans = buildPlans('Input', detailedLocateParam, {\n value,\n autoDismissKeyboard: opt?.autoDismissKeyboard,\n });\n const { executor, output } = await this.taskExecutor.runPlans(\n taskTitleStr('Input', locateParamStr(detailedLocateParam)),\n plans,\n {\n cacheable: opt?.cacheable,\n },\n );\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiKeyboardPress(\n keyName: string,\n locatePrompt?: TUserPrompt,\n opt?: LocateOption,\n ) {\n assert(keyName, 'missing keyName for keyboard press');\n const detailedLocateParam = locatePrompt\n ? this.buildDetailedLocateParam(locatePrompt, opt)\n : undefined;\n const plans = buildPlans('KeyboardPress', detailedLocateParam, {\n value: keyName,\n });\n const { executor, output } = await this.taskExecutor.runPlans(\n taskTitleStr('KeyboardPress', locateParamStr(detailedLocateParam)),\n plans,\n { cacheable: opt?.cacheable },\n );\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiScroll(\n scrollParam: ScrollParam,\n locatePrompt?: TUserPrompt,\n opt?: LocateOption,\n ) {\n const detailedLocateParam = locatePrompt\n ? this.buildDetailedLocateParam(locatePrompt, opt)\n : undefined;\n const plans = buildPlans('Scroll', detailedLocateParam, scrollParam);\n const paramInTitle = locatePrompt\n ? `${locateParamStr(detailedLocateParam)} - ${scrollParamStr(scrollParam)}`\n : scrollParamStr(scrollParam);\n const { executor, output } = await this.taskExecutor.runPlans(\n taskTitleStr('Scroll', paramInTitle),\n plans,\n { cacheable: opt?.cacheable },\n );\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiAction(\n taskPrompt: string,\n opt?: {\n cacheable?: boolean;\n },\n ) {\n const cacheable = opt?.cacheable;\n // if vlm-ui-tars, plan cache is not used\n const isVlmUiTars = vlLocateMode() === 'vlm-ui-tars';\n const matchedCache =\n isVlmUiTars || cacheable === false\n ? undefined\n : this.taskCache?.matchPlanCache(taskPrompt);\n if (matchedCache && this.taskCache?.isCacheResultUsed) {\n // log into report file\n const { executor } = await this.taskExecutor.loadYamlFlowAsPlanning(\n taskPrompt,\n matchedCache.cacheContent?.yamlWorkflow,\n );\n\n await await this.afterTaskRunning(executor);\n\n debug('matched cache, will call .runYaml to run the action');\n const yaml = matchedCache.cacheContent?.yamlWorkflow;\n return this.runYaml(yaml);\n }\n\n const { output, executor } = await (isVlmUiTars\n ? this.taskExecutor.actionToGoal(taskPrompt, { cacheable })\n : this.taskExecutor.action(taskPrompt, this.opts.aiActionContext, {\n cacheable,\n }));\n\n // update cache\n if (this.taskCache && output?.yamlFlow && cacheable !== false) {\n const yamlContent: MidsceneYamlScript = {\n tasks: [\n {\n name: taskPrompt,\n flow: output.yamlFlow,\n },\n ],\n };\n const yamlFlowStr = yaml.dump(yamlContent);\n this.taskCache.updateOrAppendCacheRecord(\n {\n type: 'plan',\n prompt: taskPrompt,\n yamlWorkflow: yamlFlowStr,\n },\n matchedCache,\n );\n }\n\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiQuery(\n demand: InsightExtractParam,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n const { output, executor } = await this.taskExecutor.query(demand, opt);\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiBoolean(\n prompt: TUserPrompt,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n const { output, executor } = await this.taskExecutor.boolean(prompt, opt);\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiNumber(\n prompt: TUserPrompt,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n const { output, executor } = await this.taskExecutor.number(prompt, opt);\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiString(\n prompt: TUserPrompt,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n const { output, executor } = await this.taskExecutor.string(prompt, opt);\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiAsk(\n prompt: TUserPrompt,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n return this.aiString(prompt, opt);\n }\n\n async describeElementAtPoint(\n center: [number, number],\n opt?: {\n verifyPrompt?: boolean;\n retryLimit?: number;\n deepThink?: boolean;\n } & LocatorValidatorOption,\n ): Promise<AgentDescribeElementAtPointResult> {\n const { verifyPrompt = true, retryLimit = 3 } = opt || {};\n\n let success = false;\n let retryCount = 0;\n let resultPrompt = '';\n let deepThink = opt?.deepThink || false;\n let verifyResult: LocateValidatorResult | undefined;\n\n while (!success && retryCount < retryLimit) {\n if (retryCount >= 2) {\n deepThink = true;\n }\n debug(\n 'aiDescribe',\n center,\n 'verifyPrompt',\n verifyPrompt,\n 'retryCount',\n retryCount,\n 'deepThink',\n deepThink,\n );\n const text = await this.insight.describe(center, { deepThink });\n debug('aiDescribe text', text);\n assert(text.description, `failed to describe element at [${center}]`);\n resultPrompt = text.description;\n\n verifyResult = await this.verifyLocator(\n resultPrompt,\n deepThink ? { deepThink: true } : undefined,\n center,\n opt,\n );\n if (verifyResult.pass) {\n success = true;\n } else {\n retryCount++;\n }\n }\n\n return {\n prompt: resultPrompt,\n deepThink,\n verifyResult,\n };\n }\n\n async verifyLocator(\n prompt: string,\n locateOpt: LocateOption | undefined,\n expectCenter: [number, number],\n verifyLocateOption?: LocatorValidatorOption,\n ): Promise<LocateValidatorResult> {\n debug('verifyLocator', prompt, locateOpt, expectCenter, verifyLocateOption);\n\n const { center: verifyCenter, rect: verifyRect } = await this.aiLocate(\n prompt,\n locateOpt,\n );\n const distance = distanceOfTwoPoints(expectCenter, verifyCenter);\n const included = includedInRect(expectCenter, verifyRect);\n const pass =\n distance <= (verifyLocateOption?.centerDistanceThreshold || 20) ||\n included;\n const verifyResult = {\n pass,\n rect: verifyRect,\n center: verifyCenter,\n centerDistance: distance,\n };\n debug('aiDescribe verifyResult', verifyResult);\n return verifyResult;\n }\n\n async aiLocate(prompt: TUserPrompt, opt?: LocateOption) {\n const detailedLocateParam = this.buildDetailedLocateParam(prompt, opt);\n const plans = buildPlans('Locate', detailedLocateParam);\n const { executor, output } = await this.taskExecutor.runPlans(\n taskTitleStr('Locate', locateParamStr(detailedLocateParam)),\n plans,\n { cacheable: opt?.cacheable },\n );\n await this.afterTaskRunning(executor);\n\n const { element } = output;\n\n return {\n rect: element?.rect,\n center: element?.center,\n scale: (await this.page.size()).dpr,\n } as Pick<LocateResultElement, 'rect' | 'center'> & {\n scale: number;\n };\n }\n\n async aiAssert(assertion: TUserPrompt, msg?: string, opt?: AgentAssertOpt) {\n const { output, executor, thought } = await this.taskExecutor.assert(\n assertion,\n {\n returnThought: true,\n },\n );\n await this.afterTaskRunning(executor, true);\n\n if (opt?.keepRawResponse) {\n return {\n pass: output,\n thought,\n };\n }\n\n if (!output) {\n const errMsg = msg || `Assertion failed: ${assertion}`;\n const reasonMsg = `Reason: ${\n thought || executor.latestErrorTask()?.error || '(no_reason)'\n }`;\n throw new Error(`${errMsg}\\n${reasonMsg}`);\n }\n }\n\n async aiWaitFor(assertion: string, opt?: AgentWaitForOpt) {\n const { executor } = await this.taskExecutor.waitFor(assertion, {\n timeoutMs: opt?.timeoutMs || 15 * 1000,\n checkIntervalMs: opt?.checkIntervalMs || 3 * 1000,\n assertion,\n });\n await this.afterTaskRunning(executor, true);\n\n if (executor.isInErrorState()) {\n const errorTask = executor.latestErrorTask();\n throw new Error(`${errorTask?.error}\\n${errorTask?.errorStack}`);\n }\n }\n\n async ai(taskPrompt: string, type = 'action') {\n if (type === 'action') {\n return this.aiAction(taskPrompt);\n }\n if (type === 'query') {\n return this.aiQuery(taskPrompt);\n }\n\n if (type === 'assert') {\n return this.aiAssert(taskPrompt);\n }\n\n if (type === 'tap') {\n return this.aiTap(taskPrompt);\n }\n\n if (type === 'rightClick') {\n return this.aiRightClick(taskPrompt);\n }\n\n throw new Error(\n `Unknown type: ${type}, only support 'action', 'query', 'assert', 'tap', 'rightClick'`,\n );\n }\n\n async runYaml(yamlScriptContent: string): Promise<{\n result: Record<string, any>;\n }> {\n const script = parseYamlScript(yamlScriptContent, 'yaml', true);\n const player = new ScriptPlayer(script, async (target) => {\n return { agent: this, freeFn: [] };\n });\n await player.run();\n\n if (player.status === 'error') {\n const errors = player.taskStatusList\n .filter((task) => task.status === 'error')\n .map((task) => {\n return `task - ${task.name}: ${task.error?.message}`;\n })\n .join('\\n');\n throw new Error(`Error(s) occurred in running yaml script:\\n${errors}`);\n }\n\n return {\n result: player.result,\n };\n }\n\n async evaluateJavaScript(script: string) {\n assert(\n this.page.evaluateJavaScript,\n 'evaluateJavaScript is not supported in current agent',\n );\n return this.page.evaluateJavaScript(script);\n }\n\n async destroy() {\n await this.page.destroy();\n this.resetDump(); // reset dump to release memory\n this.destroyed = true;\n }\n\n async logScreenshot(\n title?: string,\n opt?: {\n content: string;\n },\n ) {\n // 1. screenshot\n const base64 = await this.page.screenshotBase64();\n const now = Date.now();\n // 2. build recorder\n const recorder: ExecutionRecorderItem[] = [\n {\n type: 'screenshot',\n ts: now,\n screenshot: base64,\n },\n ];\n // 3. build ExecutionTaskLog\n const task: ExecutionTaskLog = {\n type: 'Log',\n subType: 'Screenshot',\n status: 'finished',\n recorder,\n timing: {\n start: now,\n end: now,\n cost: 0,\n },\n param: {\n content: opt?.content || '',\n },\n executor: async () => {},\n };\n // 4. build ExecutionDump\n const executionDump: ExecutionDump = {\n sdkVersion: '',\n logTime: now,\n model_name: '',\n model_description: '',\n name: `Log - ${title || 'untitled'}`,\n description: opt?.content || '',\n tasks: [task],\n };\n // 5. append to execution dump\n this.appendExecutionDump(executionDump);\n\n try {\n this.onDumpUpdate?.(this.dumpDataString());\n } catch (error) {\n console.error('Failed to update dump', error);\n }\n\n this.writeOutActionDumps();\n }\n\n _unstableLogContent() {\n const { groupName, groupDescription, executions } = this.dump;\n const newExecutions = Array.isArray(executions)\n ? executions.map((execution: any) => {\n const { tasks, ...restExecution } = execution;\n let newTasks = tasks;\n if (Array.isArray(tasks)) {\n newTasks = tasks.map((task: any) => {\n // only remove pageContext and log from task\n const { pageContext, log, ...restTask } = task;\n return restTask;\n });\n }\n return { ...restExecution, ...(newTasks ? { tasks: newTasks } : {}) };\n })\n : [];\n return {\n groupName,\n groupDescription,\n executions: newExecutions,\n };\n }\n\n /**\n * Freezes the current page context to be reused in subsequent AI operations\n * This avoids recalculating page context for each operation\n */\n async freezePageContext(): Promise<void> {\n debug('Freezing page context');\n const context = await this._snapshotContext();\n // Mark the context as frozen\n context._isFrozen = true;\n this.frozenPageContext = context;\n debug('Page context frozen successfully');\n }\n\n /**\n * Unfreezes the page context, allowing AI operations to calculate context dynamically\n */\n async unfreezePageContext(): Promise<void> {\n debug('Unfreezing page context');\n this.frozenPageContext = undefined;\n debug('Page context unfrozen successfully');\n }\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","debug","getDebug","distanceOfTwoPoints","p1","p2","x1","y1","x2","y2","Math","includedInRect","point","rect","x","y","left","top","width","height","defaultInsightExtractOption","PageAgent","action","parseContextFromWebPage","vlLocateMode","prompt","execution","trimmedExecution","trimContextByViewport","currentDump","stringifyDumpData","reportHTMLContent","Error","generateReport","autoPrintReportMsg","writeLogFile","groupedActionDumpFileExt","printReportMsg","task","param","paramStr","tip","typeStr","executor","doNotThrowError","_this","error","console","errorTask","locatePrompt","opt","assert","deepThink","cacheable","xpath","detailedLocateParam","plans","buildPlans","output","taskTitleStr","locateParamStr","value","keyName","undefined","scrollParam","paramInTitle","scrollParamStr","taskPrompt","_this_taskCache","_this_taskCache1","isVlmUiTars","matchedCache","_matchedCache_cacheContent","_matchedCache_cacheContent1","yaml","yamlContent","yamlFlowStr","demand","center","verifyPrompt","retryLimit","success","retryCount","resultPrompt","verifyResult","text","locateOpt","expectCenter","verifyLocateOption","verifyCenter","verifyRect","distance","included","pass","element","assertion","msg","thought","_executor_latestErrorTask","errMsg","reasonMsg","type","yamlScriptContent","script","parseYamlScript","player","ScriptPlayer","target","errors","_task_error","title","base64","now","Date","recorder","executionDump","groupName","groupDescription","executions","newExecutions","Array","tasks","restExecution","newTasks","pageContext","log","restTask","context","page","opts","DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT","DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT","Insight","TaskCache","getAIConfigInBoolean","PageTaskExecutor","getReportFileName"],"mappings":"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"}
1
+ {"version":3,"file":"common/agent.js","sources":["webpack://@midscene/web/webpack/runtime/compat_get_default_export","webpack://@midscene/web/webpack/runtime/define_property_getters","webpack://@midscene/web/webpack/runtime/has_own_property","webpack://@midscene/web/webpack/runtime/make_namespace_object","webpack://@midscene/web/./src/common/agent.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { WebPage } from '@/common/page';\nimport {\n type AgentAssertOpt,\n type AgentDescribeElementAtPointResult,\n type AgentWaitForOpt,\n type DetailedLocateParam,\n type DeviceAction,\n type ExecutionDump,\n type ExecutionRecorderItem,\n type ExecutionTask,\n type ExecutionTaskLog,\n type Executor,\n type GroupedActionDump,\n Insight,\n type InsightAction,\n type InsightExtractOption,\n type InsightExtractParam,\n type LocateOption,\n type LocateResultElement,\n type LocateValidatorResult,\n type LocatorValidatorOption,\n type MidsceneYamlScript,\n type OnTaskStartTip,\n type PlanningAction,\n type PlanningLocateParam,\n type Rect,\n type ScrollParam,\n type TUserPrompt,\n} from '@midscene/core';\n\nimport yaml from 'js-yaml';\n\nimport { ScriptPlayer, parseYamlScript } from '@/yaml/index';\nimport {\n groupedActionDumpFileExt,\n reportHTMLContent,\n stringifyDumpData,\n writeLogFile,\n} from '@midscene/core/utils';\nimport {\n DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT,\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT,\n} from '@midscene/shared/constants';\nimport { getAIConfigInBoolean, vlLocateMode } from '@midscene/shared/env';\nimport { getDebug } from '@midscene/shared/logger';\nimport { assert } from '@midscene/shared/utils';\nimport { PageTaskExecutor } from '../common/tasks';\nimport type { PlaywrightWebPage } from '../playwright';\nimport type { PuppeteerWebPage } from '../puppeteer';\nimport type { WebElementInfo, WebUIContext } from '../web-element';\nimport type { AndroidDeviceInputOpt } from './page';\nimport { TaskCache } from './task-cache';\nimport { locateParamStr, paramStr, taskTitleStr, typeStr } from './ui-utils';\nimport { getReportFileName, printReportMsg } from './utils';\nimport { parseContextFromWebPage } from './utils';\nimport { trimContextByViewport } from './utils';\n\nconst debug = getDebug('agent');\n\nconst distanceOfTwoPoints = (p1: [number, number], p2: [number, number]) => {\n const [x1, y1] = p1;\n const [x2, y2] = p2;\n return Math.round(Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2));\n};\n\nconst includedInRect = (point: [number, number], rect: Rect) => {\n const [x, y] = point;\n const { left, top, width, height } = rect;\n return x >= left && x <= left + width && y >= top && y <= top + height;\n};\n\nconst defaultInsightExtractOption: InsightExtractOption = {\n domIncluded: false,\n screenshotIncluded: true,\n};\n\nexport interface PageAgentOpt {\n forceSameTabNavigation?: boolean /* if limit the new tab to the current page, default true */;\n testId?: string;\n cacheId?: string;\n groupName?: string;\n groupDescription?: string;\n /* if auto generate report, default true */\n generateReport?: boolean;\n /* if auto print report msg, default true */\n autoPrintReportMsg?: boolean;\n onTaskStartTip?: OnTaskStartTip;\n aiActionContext?: string;\n /* custom report file name */\n reportFileName?: string;\n}\n\nexport type WebPageAgentOpt = PageAgentOpt & WebPageOpt;\nexport type WebPageOpt = {\n waitForNavigationTimeout?: number;\n waitForNetworkIdleTimeout?: number;\n};\n\nexport class PageAgent<PageType extends WebPage = WebPage> {\n page: PageType;\n\n insight: Insight<WebElementInfo, WebUIContext>;\n\n dump: GroupedActionDump;\n\n reportFile?: string | null;\n\n reportFileName?: string;\n\n taskExecutor: PageTaskExecutor;\n\n opts: PageAgentOpt;\n\n /**\n * If true, the agent will not perform any actions\n */\n dryMode = false;\n\n onTaskStartTip?: OnTaskStartTip;\n\n taskCache?: TaskCache;\n\n onDumpUpdate?: (dump: string) => void;\n\n destroyed = false;\n\n /**\n * Frozen page context for consistent AI operations\n */\n private frozenPageContext?: WebUIContext;\n\n constructor(page: PageType, opts?: PageAgentOpt) {\n this.page = page;\n this.opts = Object.assign(\n {\n generateReport: true,\n autoPrintReportMsg: true,\n groupName: 'Midscene Report',\n groupDescription: '',\n },\n opts || {},\n );\n\n if (\n this.page.pageType === 'puppeteer' ||\n this.page.pageType === 'playwright'\n ) {\n (\n this.page as PuppeteerWebPage | PlaywrightWebPage\n ).waitForNavigationTimeout =\n (this.opts as WebPageAgentOpt).waitForNavigationTimeout ??\n DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT;\n (\n this.page as PuppeteerWebPage | PlaywrightWebPage\n ).waitForNetworkIdleTimeout =\n (this.opts as WebPageAgentOpt).waitForNetworkIdleTimeout ??\n DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;\n }\n\n this.onTaskStartTip = this.opts.onTaskStartTip;\n // get the parent browser of the puppeteer page\n // const browser = (this.page as PuppeteerWebPage).browser();\n\n this.insight = new Insight<WebElementInfo, WebUIContext>(\n async (action: InsightAction) => {\n return this.getUIContext(action);\n },\n );\n\n if (opts?.cacheId && this.page.pageType !== 'android') {\n this.taskCache = new TaskCache(\n opts.cacheId,\n getAIConfigInBoolean('MIDSCENE_CACHE'), // if we should use cache to match the element\n );\n }\n\n this.taskExecutor = new PageTaskExecutor(this.page, this.insight, {\n taskCache: this.taskCache,\n onTaskStart: this.callbackOnTaskStartTip.bind(this),\n });\n this.dump = this.resetDump();\n this.reportFileName =\n opts?.reportFileName ||\n getReportFileName(opts?.testId || this.page.pageType || 'web');\n }\n\n async getActionSpace(): Promise<DeviceAction[]> {\n return this.page.actionSpace();\n }\n\n async getUIContext(action?: InsightAction): Promise<WebUIContext> {\n // If page context is frozen, return the frozen context for all actions\n if (this.frozenPageContext) {\n debug('Using frozen page context for action:', action);\n return this.frozenPageContext;\n }\n\n // Otherwise, get fresh context based on the action type\n if (action && (action === 'extract' || action === 'assert')) {\n return await parseContextFromWebPage(this.page, {\n ignoreMarker: true,\n });\n }\n return await parseContextFromWebPage(this.page, {\n ignoreMarker: !!vlLocateMode(),\n });\n }\n\n async _snapshotContext(): Promise<WebUIContext> {\n return await this.getUIContext('locate');\n }\n\n async setAIActionContext(prompt: string) {\n this.opts.aiActionContext = prompt;\n }\n\n resetDump() {\n this.dump = {\n groupName: this.opts.groupName!,\n groupDescription: this.opts.groupDescription,\n executions: [],\n };\n\n return this.dump;\n }\n\n appendExecutionDump(execution: ExecutionDump) {\n // use trimContextByViewport to process execution\n const trimmedExecution = trimContextByViewport(execution);\n const currentDump = this.dump;\n currentDump.executions.push(trimmedExecution);\n }\n\n dumpDataString() {\n // update dump info\n this.dump.groupName = this.opts.groupName!;\n this.dump.groupDescription = this.opts.groupDescription;\n return stringifyDumpData(this.dump);\n }\n\n reportHTMLString() {\n return reportHTMLContent(this.dumpDataString());\n }\n\n writeOutActionDumps() {\n if (this.destroyed) {\n throw new Error(\n 'PageAgent has been destroyed. Cannot update report file.',\n );\n }\n const { generateReport, autoPrintReportMsg } = this.opts;\n this.reportFile = writeLogFile({\n fileName: this.reportFileName!,\n fileExt: groupedActionDumpFileExt,\n fileContent: this.dumpDataString(),\n type: 'dump',\n generateReport,\n });\n debug('writeOutActionDumps', this.reportFile);\n if (generateReport && autoPrintReportMsg && this.reportFile) {\n printReportMsg(this.reportFile);\n }\n }\n\n private async callbackOnTaskStartTip(task: ExecutionTask) {\n const param = paramStr(task);\n const tip = param ? `${typeStr(task)} - ${param}` : typeStr(task);\n\n if (this.onTaskStartTip) {\n await this.onTaskStartTip(tip);\n }\n }\n\n private async afterTaskRunning(executor: Executor, doNotThrowError = false) {\n this.appendExecutionDump(executor.dump());\n\n try {\n await this.onDumpUpdate?.(this.dumpDataString());\n } catch (error) {\n console.error('Error in onDumpUpdate', error);\n }\n\n this.writeOutActionDumps();\n\n if (executor.isInErrorState() && !doNotThrowError) {\n const errorTask = executor.latestErrorTask();\n throw new Error(`${errorTask?.errorMessage}\\n${errorTask?.errorStack}`, {\n cause: errorTask?.error,\n });\n }\n }\n\n private buildDetailedLocateParam(\n locatePrompt: TUserPrompt,\n opt?: LocateOption,\n ): DetailedLocateParam {\n assert(locatePrompt, 'missing locate prompt');\n\n if (typeof opt === 'object' && opt !== null) {\n const prompt = locatePrompt;\n const deepThink = opt.deepThink ?? false;\n const cacheable = opt.cacheable ?? true;\n const xpath = opt.xpath;\n\n return {\n prompt,\n deepThink,\n cacheable,\n xpath,\n };\n }\n\n return {\n prompt: locatePrompt,\n };\n }\n\n private locateTaskForLocate(prompt: TUserPrompt, opt?: LocateOption) {\n const detailedLocateParam = this.buildDetailedLocateParam(prompt, opt);\n const locatePlan: PlanningAction<PlanningLocateParam> = {\n type: 'Locate',\n locate: detailedLocateParam,\n param: detailedLocateParam,\n thought: '',\n };\n return locatePlan;\n }\n\n async callActionInActionSpace<T = any>(\n type: string,\n locatePrompt?: TUserPrompt,\n opt?: LocateOption, // and all other action params\n ) {\n debug('callActionInActionSpace', type, ',', locatePrompt, ',', opt);\n const locatePlan = locatePrompt\n ? this.locateTaskForLocate(locatePrompt, opt)\n : null;\n\n const actionPlan: PlanningAction<T> = {\n type: type as any,\n param: opt as any,\n thought: '',\n locate: locatePlan?.locate,\n };\n\n const plans: PlanningAction[] = [locatePlan, actionPlan].filter(\n Boolean,\n ) as PlanningAction[];\n\n const title = taskTitleStr(\n type as any,\n locateParamStr(locatePlan?.locate || undefined),\n );\n\n const { executor } = await this.taskExecutor.runPlans(title, plans, {\n cacheable: opt?.cacheable,\n });\n await this.afterTaskRunning(executor);\n }\n\n async aiTap(locatePrompt: TUserPrompt, opt?: LocateOption) {\n return this.callActionInActionSpace('Tap', locatePrompt, opt);\n }\n\n async aiRightClick(locatePrompt: TUserPrompt, opt?: LocateOption) {\n return this.callActionInActionSpace('RightClick', locatePrompt, opt);\n }\n\n async aiHover(locatePrompt: TUserPrompt, opt?: LocateOption) {\n return this.callActionInActionSpace('Hover', locatePrompt, opt);\n }\n\n // New signature, always use locatePrompt as the first param\n async aiInput(\n locatePrompt: TUserPrompt,\n opt: AndroidDeviceInputOpt & LocateOption & { value: string },\n ): Promise<any>;\n\n // Legacy signature - deprecated\n /**\n * @deprecated Use aiInput(locatePrompt, opt) instead where opt contains the value\n */\n async aiInput(\n value: string,\n locatePrompt: TUserPrompt,\n opt?: AndroidDeviceInputOpt & LocateOption,\n ): Promise<any>;\n\n // Implementation\n async aiInput(\n locatePromptOrValue: TUserPrompt | string,\n locatePromptOrOpt:\n | TUserPrompt\n | (AndroidDeviceInputOpt & LocateOption & { value: string })\n | undefined,\n optOrUndefined?: AndroidDeviceInputOpt & LocateOption,\n ) {\n let value: string;\n let locatePrompt: TUserPrompt;\n let opt:\n | (AndroidDeviceInputOpt & LocateOption & { value: string })\n | undefined;\n\n // Check if using new signature (first param is locatePrompt, second has value)\n if (\n typeof locatePromptOrOpt === 'object' &&\n locatePromptOrOpt !== null &&\n 'value' in locatePromptOrOpt\n ) {\n // New signature: aiInput(locatePrompt, opt)\n locatePrompt = locatePromptOrValue as TUserPrompt;\n const optWithValue = locatePromptOrOpt as AndroidDeviceInputOpt &\n LocateOption & { value: string };\n value = optWithValue.value;\n opt = optWithValue;\n } else {\n // Legacy signature: aiInput(value, locatePrompt, opt)\n value = locatePromptOrValue as string;\n locatePrompt = locatePromptOrOpt as TUserPrompt;\n opt = {\n ...optOrUndefined,\n value,\n };\n }\n\n assert(\n typeof value === 'string',\n 'input value must be a string, use empty string if you want to clear the input',\n );\n assert(locatePrompt, 'missing locate prompt for input');\n return this.callActionInActionSpace('Input', locatePrompt, opt);\n }\n\n // New signature\n async aiKeyboardPress(\n locatePrompt: TUserPrompt,\n opt: LocateOption & { keyName: string },\n ): Promise<any>;\n\n // Legacy signature - deprecated\n /**\n * @deprecated Use aiKeyboardPress(locatePrompt, opt) instead where opt contains the keyName\n */\n async aiKeyboardPress(\n keyName: string,\n locatePrompt?: TUserPrompt,\n opt?: LocateOption,\n ): Promise<any>;\n\n // Implementation\n async aiKeyboardPress(\n locatePromptOrKeyName: TUserPrompt | string,\n locatePromptOrOpt:\n | TUserPrompt\n | (LocateOption & { keyName: string })\n | undefined,\n optOrUndefined?: LocateOption,\n ) {\n let keyName: string;\n let locatePrompt: TUserPrompt | undefined;\n let opt: (LocateOption & { keyName: string }) | undefined;\n\n // Check if using new signature (first param is locatePrompt, second has keyName)\n if (\n typeof locatePromptOrOpt === 'object' &&\n locatePromptOrOpt !== null &&\n 'keyName' in locatePromptOrOpt\n ) {\n // New signature: aiKeyboardPress(locatePrompt, opt)\n locatePrompt = locatePromptOrKeyName as TUserPrompt;\n opt = locatePromptOrOpt as LocateOption & {\n keyName: string;\n };\n } else {\n // Legacy signature: aiKeyboardPress(keyName, locatePrompt, opt)\n keyName = locatePromptOrKeyName as string;\n locatePrompt = locatePromptOrOpt as TUserPrompt | undefined;\n opt = {\n ...(optOrUndefined || {}),\n keyName,\n };\n }\n\n assert(opt?.keyName, 'missing keyName for keyboard press');\n return this.callActionInActionSpace('KeyboardPress', locatePrompt, opt);\n }\n\n // New signature\n async aiScroll(\n locatePrompt: TUserPrompt | undefined,\n opt: LocateOption & ScrollParam,\n ): Promise<any>;\n\n // Legacy signature - deprecated\n /**\n * @deprecated Use aiScroll(locatePrompt, opt) instead where opt contains the scroll parameters\n */\n async aiScroll(\n scrollParam: ScrollParam,\n locatePrompt?: TUserPrompt,\n opt?: LocateOption,\n ): Promise<any>;\n\n // Implementation\n async aiScroll(\n locatePromptOrScrollParam: TUserPrompt | ScrollParam | undefined,\n locatePromptOrOpt: TUserPrompt | (LocateOption & ScrollParam) | undefined,\n optOrUndefined?: LocateOption,\n ) {\n let scrollParam: ScrollParam;\n let locatePrompt: TUserPrompt | undefined;\n let opt: LocateOption | undefined;\n\n // Check if using new signature (first param is locatePrompt, second has scroll params)\n if (\n typeof locatePromptOrOpt === 'object' &&\n ('direction' in locatePromptOrOpt ||\n 'scrollType' in locatePromptOrOpt ||\n 'distance' in locatePromptOrOpt)\n ) {\n // New signature: aiScroll(locatePrompt, opt)\n locatePrompt = locatePromptOrScrollParam as TUserPrompt;\n opt = locatePromptOrOpt as LocateOption & ScrollParam;\n } else {\n // Legacy signature: aiScroll(scrollParam, locatePrompt, opt)\n scrollParam = locatePromptOrScrollParam as ScrollParam;\n locatePrompt = locatePromptOrOpt as TUserPrompt | undefined;\n opt = {\n ...(optOrUndefined || {}),\n ...(scrollParam || {}),\n };\n }\n\n return this.callActionInActionSpace('Scroll', locatePrompt, opt);\n }\n\n async aiAction(\n taskPrompt: string,\n opt?: {\n cacheable?: boolean;\n },\n ) {\n const cacheable = opt?.cacheable;\n // if vlm-ui-tars, plan cache is not used\n const isVlmUiTars = vlLocateMode() === 'vlm-ui-tars';\n const matchedCache =\n isVlmUiTars || cacheable === false\n ? undefined\n : this.taskCache?.matchPlanCache(taskPrompt);\n if (matchedCache && this.taskCache?.isCacheResultUsed) {\n // log into report file\n const { executor } = await this.taskExecutor.loadYamlFlowAsPlanning(\n taskPrompt,\n matchedCache.cacheContent?.yamlWorkflow,\n );\n\n await await this.afterTaskRunning(executor);\n\n debug('matched cache, will call .runYaml to run the action');\n const yaml = matchedCache.cacheContent?.yamlWorkflow;\n return this.runYaml(yaml);\n }\n\n const { output, executor } = await (isVlmUiTars\n ? this.taskExecutor.actionToGoal(taskPrompt, { cacheable })\n : this.taskExecutor.action(taskPrompt, this.opts.aiActionContext, {\n cacheable,\n }));\n\n // update cache\n if (this.taskCache && output?.yamlFlow && cacheable !== false) {\n const yamlContent: MidsceneYamlScript = {\n tasks: [\n {\n name: taskPrompt,\n flow: output.yamlFlow,\n },\n ],\n };\n const yamlFlowStr = yaml.dump(yamlContent);\n this.taskCache.updateOrAppendCacheRecord(\n {\n type: 'plan',\n prompt: taskPrompt,\n yamlWorkflow: yamlFlowStr,\n },\n matchedCache,\n );\n }\n\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiQuery(\n demand: InsightExtractParam,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n const { output, executor } = await this.taskExecutor.query(demand, opt);\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiBoolean(\n prompt: TUserPrompt,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n const { output, executor } = await this.taskExecutor.boolean(prompt, opt);\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiNumber(\n prompt: TUserPrompt,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n const { output, executor } = await this.taskExecutor.number(prompt, opt);\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiString(\n prompt: TUserPrompt,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n const { output, executor } = await this.taskExecutor.string(prompt, opt);\n await this.afterTaskRunning(executor);\n return output;\n }\n\n async aiAsk(\n prompt: TUserPrompt,\n opt: InsightExtractOption = defaultInsightExtractOption,\n ) {\n return this.aiString(prompt, opt);\n }\n\n async describeElementAtPoint(\n center: [number, number],\n opt?: {\n verifyPrompt?: boolean;\n retryLimit?: number;\n deepThink?: boolean;\n } & LocatorValidatorOption,\n ): Promise<AgentDescribeElementAtPointResult> {\n const { verifyPrompt = true, retryLimit = 3 } = opt || {};\n\n let success = false;\n let retryCount = 0;\n let resultPrompt = '';\n let deepThink = opt?.deepThink || false;\n let verifyResult: LocateValidatorResult | undefined;\n\n while (!success && retryCount < retryLimit) {\n if (retryCount >= 2) {\n deepThink = true;\n }\n debug(\n 'aiDescribe',\n center,\n 'verifyPrompt',\n verifyPrompt,\n 'retryCount',\n retryCount,\n 'deepThink',\n deepThink,\n );\n const text = await this.insight.describe(center, { deepThink });\n debug('aiDescribe text', text);\n assert(text.description, `failed to describe element at [${center}]`);\n resultPrompt = text.description;\n\n verifyResult = await this.verifyLocator(\n resultPrompt,\n deepThink ? { deepThink: true } : undefined,\n center,\n opt,\n );\n if (verifyResult.pass) {\n success = true;\n } else {\n retryCount++;\n }\n }\n\n return {\n prompt: resultPrompt,\n deepThink,\n verifyResult,\n };\n }\n\n async verifyLocator(\n prompt: string,\n locateOpt: LocateOption | undefined,\n expectCenter: [number, number],\n verifyLocateOption?: LocatorValidatorOption,\n ): Promise<LocateValidatorResult> {\n debug('verifyLocator', prompt, locateOpt, expectCenter, verifyLocateOption);\n\n const { center: verifyCenter, rect: verifyRect } = await this.aiLocate(\n prompt,\n locateOpt,\n );\n const distance = distanceOfTwoPoints(expectCenter, verifyCenter);\n const included = includedInRect(expectCenter, verifyRect);\n const pass =\n distance <= (verifyLocateOption?.centerDistanceThreshold || 20) ||\n included;\n const verifyResult = {\n pass,\n rect: verifyRect,\n center: verifyCenter,\n centerDistance: distance,\n };\n debug('aiDescribe verifyResult', verifyResult);\n return verifyResult;\n }\n\n async aiLocate(prompt: TUserPrompt, opt?: LocateOption) {\n const locatePlan = this.locateTaskForLocate(prompt, opt);\n const plans = [locatePlan];\n const { executor, output } = await this.taskExecutor.runPlans(\n taskTitleStr('Locate', locateParamStr(locatePlan?.locate || undefined)),\n plans,\n { cacheable: opt?.cacheable },\n );\n await this.afterTaskRunning(executor);\n\n const { element } = output;\n\n return {\n rect: element?.rect,\n center: element?.center,\n scale: (await this.page.size()).dpr,\n } as Pick<LocateResultElement, 'rect' | 'center'> & {\n scale: number;\n };\n }\n\n async aiAssert(assertion: TUserPrompt, msg?: string, opt?: AgentAssertOpt) {\n const { output, executor, thought } = await this.taskExecutor.assert(\n assertion,\n {\n returnThought: true,\n },\n );\n await this.afterTaskRunning(executor, true);\n\n if (opt?.keepRawResponse) {\n return {\n pass: output,\n thought,\n };\n }\n\n if (!output) {\n const errMsg = msg || `Assertion failed: ${assertion}`;\n const reasonMsg = `Reason: ${\n thought || executor.latestErrorTask()?.error || '(no_reason)'\n }`;\n throw new Error(`${errMsg}\\n${reasonMsg}`);\n }\n }\n\n async aiWaitFor(assertion: string, opt?: AgentWaitForOpt) {\n const { executor } = await this.taskExecutor.waitFor(assertion, {\n timeoutMs: opt?.timeoutMs || 15 * 1000,\n checkIntervalMs: opt?.checkIntervalMs || 3 * 1000,\n assertion,\n });\n await this.afterTaskRunning(executor, true);\n\n if (executor.isInErrorState()) {\n const errorTask = executor.latestErrorTask();\n throw new Error(`${errorTask?.error}\\n${errorTask?.errorStack}`);\n }\n }\n\n async ai(taskPrompt: string, type = 'action') {\n if (type === 'action') {\n return this.aiAction(taskPrompt);\n }\n if (type === 'query') {\n return this.aiQuery(taskPrompt);\n }\n\n if (type === 'assert') {\n return this.aiAssert(taskPrompt);\n }\n\n if (type === 'tap') {\n return this.aiTap(taskPrompt);\n }\n\n if (type === 'rightClick') {\n return this.aiRightClick(taskPrompt);\n }\n\n throw new Error(\n `Unknown type: ${type}, only support 'action', 'query', 'assert', 'tap', 'rightClick'`,\n );\n }\n\n async runYaml(yamlScriptContent: string): Promise<{\n result: Record<string, any>;\n }> {\n const script = parseYamlScript(yamlScriptContent, 'yaml', true);\n const actionSpace = await this.page.actionSpace();\n const player = new ScriptPlayer(script, async (target) => {\n return { agent: this, freeFn: [] };\n });\n await player.run();\n\n if (player.status === 'error') {\n const errors = player.taskStatusList\n .filter((task) => task.status === 'error')\n .map((task) => {\n return `task - ${task.name}: ${task.error?.message}`;\n })\n .join('\\n');\n throw new Error(`Error(s) occurred in running yaml script:\\n${errors}`);\n }\n\n return {\n result: player.result,\n };\n }\n\n async evaluateJavaScript(script: string) {\n assert(\n this.page.evaluateJavaScript,\n 'evaluateJavaScript is not supported in current agent',\n );\n return this.page.evaluateJavaScript(script);\n }\n\n async destroy() {\n await this.page.destroy();\n this.resetDump(); // reset dump to release memory\n this.destroyed = true;\n }\n\n async logScreenshot(\n title?: string,\n opt?: {\n content: string;\n },\n ) {\n // 1. screenshot\n const base64 = await this.page.screenshotBase64();\n const now = Date.now();\n // 2. build recorder\n const recorder: ExecutionRecorderItem[] = [\n {\n type: 'screenshot',\n ts: now,\n screenshot: base64,\n },\n ];\n // 3. build ExecutionTaskLog\n const task: ExecutionTaskLog = {\n type: 'Log',\n subType: 'Screenshot',\n status: 'finished',\n recorder,\n timing: {\n start: now,\n end: now,\n cost: 0,\n },\n param: {\n content: opt?.content || '',\n },\n executor: async () => {},\n };\n // 4. build ExecutionDump\n const executionDump: ExecutionDump = {\n sdkVersion: '',\n logTime: now,\n model_name: '',\n model_description: '',\n name: `Log - ${title || 'untitled'}`,\n description: opt?.content || '',\n tasks: [task],\n };\n // 5. append to execution dump\n this.appendExecutionDump(executionDump);\n\n try {\n this.onDumpUpdate?.(this.dumpDataString());\n } catch (error) {\n console.error('Failed to update dump', error);\n }\n\n this.writeOutActionDumps();\n }\n\n _unstableLogContent() {\n const { groupName, groupDescription, executions } = this.dump;\n const newExecutions = Array.isArray(executions)\n ? executions.map((execution: any) => {\n const { tasks, ...restExecution } = execution;\n let newTasks = tasks;\n if (Array.isArray(tasks)) {\n newTasks = tasks.map((task: any) => {\n // only remove pageContext and log from task\n const { pageContext, log, ...restTask } = task;\n return restTask;\n });\n }\n return { ...restExecution, ...(newTasks ? { tasks: newTasks } : {}) };\n })\n : [];\n return {\n groupName,\n groupDescription,\n executions: newExecutions,\n };\n }\n\n /**\n * Freezes the current page context to be reused in subsequent AI operations\n * This avoids recalculating page context for each operation\n */\n async freezePageContext(): Promise<void> {\n debug('Freezing page context');\n const context = await this._snapshotContext();\n // Mark the context as frozen\n context._isFrozen = true;\n this.frozenPageContext = context;\n debug('Page context frozen successfully');\n }\n\n /**\n * Unfreezes the page context, allowing AI operations to calculate context dynamically\n */\n async unfreezePageContext(): Promise<void> {\n debug('Unfreezing page context');\n this.frozenPageContext = undefined;\n debug('Page context unfrozen successfully');\n }\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","debug","getDebug","distanceOfTwoPoints","p1","p2","x1","y1","x2","y2","Math","includedInRect","point","rect","x","y","left","top","width","height","defaultInsightExtractOption","PageAgent","action","parseContextFromWebPage","vlLocateMode","prompt","execution","trimmedExecution","trimContextByViewport","currentDump","stringifyDumpData","reportHTMLContent","Error","generateReport","autoPrintReportMsg","writeLogFile","groupedActionDumpFileExt","printReportMsg","task","param","paramStr","tip","typeStr","executor","doNotThrowError","_this","error","console","errorTask","locatePrompt","opt","assert","deepThink","cacheable","xpath","detailedLocateParam","locatePlan","type","actionPlan","plans","Boolean","title","taskTitleStr","locateParamStr","undefined","locatePromptOrValue","locatePromptOrOpt","optOrUndefined","value","optWithValue","locatePromptOrKeyName","keyName","locatePromptOrScrollParam","scrollParam","taskPrompt","_this_taskCache","_this_taskCache1","isVlmUiTars","matchedCache","_matchedCache_cacheContent","_matchedCache_cacheContent1","yaml","output","yamlContent","yamlFlowStr","demand","center","verifyPrompt","retryLimit","success","retryCount","resultPrompt","verifyResult","text","locateOpt","expectCenter","verifyLocateOption","verifyCenter","verifyRect","distance","included","pass","element","assertion","msg","thought","_executor_latestErrorTask","errMsg","reasonMsg","yamlScriptContent","script","parseYamlScript","player","ScriptPlayer","target","errors","_task_error","base64","now","Date","recorder","executionDump","groupName","groupDescription","executions","newExecutions","Array","tasks","restExecution","newTasks","pageContext","log","restTask","context","page","opts","DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT","DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT","Insight","TaskCache","getAIConfigInBoolean","PageTaskExecutor","getReportFileName"],"mappings":"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"}
@@ -440,14 +440,14 @@ class PageTaskExecutor {
440
440
  param: null,
441
441
  thought: planningAction.locate.prompt
442
442
  });
443
- } else if ([
444
- 'Tap',
445
- 'Hover',
446
- 'Input'
447
- ].includes(planningAction.type)) {
448
- planParsingError = `invalid planning response: ${JSON.stringify(planningAction)}`;
449
- stopCollecting = true;
450
- return acc;
443
+ } else {
444
+ const actionType = planningAction.type;
445
+ const action = actionSpace.find((action)=>action.name === actionType);
446
+ if (action && (null == action ? void 0 : action.location) === 'required') {
447
+ planParsingError = `Location is required for action: ${actionType}, but not provided by planning`;
448
+ stopCollecting = true;
449
+ return acc;
450
+ }
451
451
  }
452
452
  acc.push(planningAction);
453
453
  return acc;
@@ -1 +1 @@
1
- {"version":3,"file":"common/tasks.js","sources":["webpack://@midscene/web/webpack/runtime/define_property_getters","webpack://@midscene/web/webpack/runtime/has_own_property","webpack://@midscene/web/webpack/runtime/make_namespace_object","webpack://@midscene/web/./src/common/tasks.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { AndroidDevicePage, WebPage } from '@/common/page';\nimport type { PuppeteerWebPage } from '@/puppeteer';\nimport {\n type AIUsageInfo,\n type BaseElement,\n type DeviceAction,\n type DumpSubscriber,\n type ExecutionRecorderItem,\n type ExecutionTaskActionApply,\n type ExecutionTaskApply,\n type ExecutionTaskHitBy,\n type ExecutionTaskInsightLocateApply,\n type ExecutionTaskInsightQueryApply,\n type ExecutionTaskPlanning,\n type ExecutionTaskPlanningApply,\n type ExecutionTaskProgressOptions,\n Executor,\n type ExecutorContext,\n type Insight,\n type InsightAssertionResponse,\n type InsightDump,\n type InsightExtractOption,\n type InsightExtractParam,\n type LocateResultElement,\n type MidsceneYamlFlowItem,\n type PageType,\n type PlanningAIResponse,\n type PlanningAction,\n type PlanningActionParamAssert,\n type PlanningActionParamError,\n type PlanningActionParamSleep,\n type PlanningActionParamWaitFor,\n type TMultimodalPrompt,\n type TUserPrompt,\n type UIContext,\n plan,\n} from '@midscene/core';\nimport {\n type ChatCompletionMessageParam,\n elementByPositionWithElementInfo,\n resizeImageForUiTars,\n vlmPlanning,\n} from '@midscene/core/ai-model';\nimport { sleep } from '@midscene/core/utils';\nimport { NodeType } from '@midscene/shared/constants';\nimport {\n MIDSCENE_REPLANNING_CYCLE_LIMIT,\n getAIConfigInNumber,\n} from '@midscene/shared/env';\nimport { getDebug } from '@midscene/shared/logger';\nimport { assert } from '@midscene/shared/utils';\nimport type { WebElementInfo, WebUIContext } from '../web-element';\nimport type { TaskCache } from './task-cache';\nimport { taskTitleStr } from './ui-utils';\nimport {\n matchElementFromCache,\n matchElementFromPlan,\n parsePrompt,\n} from './utils';\n\ninterface ExecutionResult<OutputType = any> {\n output: OutputType;\n thought?: string;\n executor: Executor;\n}\n\nconst debug = getDebug('device-task-executor');\nconst defaultReplanningCycleLimit = 10;\n\nexport class PageTaskExecutor {\n page: WebPage;\n\n insight: Insight<WebElementInfo, WebUIContext>;\n\n taskCache?: TaskCache;\n\n conversationHistory: ChatCompletionMessageParam[] = [];\n\n onTaskStartCallback?: ExecutionTaskProgressOptions['onTaskStart'];\n\n constructor(\n page: WebPage,\n insight: Insight<WebElementInfo, WebUIContext>,\n opts: {\n taskCache?: TaskCache;\n onTaskStart?: ExecutionTaskProgressOptions['onTaskStart'];\n },\n ) {\n this.page = page;\n this.insight = insight;\n\n this.taskCache = opts.taskCache;\n\n this.onTaskStartCallback = opts?.onTaskStart;\n }\n\n private async recordScreenshot(timing: ExecutionRecorderItem['timing']) {\n const base64 = await this.page.screenshotBase64();\n const item: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: Date.now(),\n screenshot: base64,\n timing,\n };\n return item;\n }\n\n private async getElementXpath(\n pageContext: UIContext<BaseElement>,\n element: LocateResultElement,\n ): Promise<string[] | undefined> {\n let elementId = element?.id;\n if (element?.isOrderSensitive !== undefined) {\n const xpaths = await this.page.getXpathsByPoint(\n {\n left: element.center[0],\n top: element.center[1],\n },\n element?.isOrderSensitive,\n );\n\n return xpaths;\n }\n\n // find the nearest xpath for the element\n if (element?.attributes?.nodeType === NodeType.POSITION) {\n await this.insight.contextRetrieverFn('locate');\n const info = elementByPositionWithElementInfo(\n pageContext.tree,\n {\n x: element.center[0],\n y: element.center[1],\n },\n {\n requireStrictDistance: false,\n filterPositionElements: true,\n },\n );\n if (info?.id) {\n elementId = info.id;\n } else {\n debug(\n 'no element id found for position node, will not update cache',\n element,\n );\n }\n }\n\n if (!elementId) {\n return undefined;\n }\n try {\n const result = await this.page.getXpathsById(elementId);\n return result;\n } catch (error) {\n debug('getXpathsById error: ', error);\n }\n }\n\n private prependExecutorWithScreenshot(\n taskApply: ExecutionTaskApply,\n appendAfterExecution = false,\n ): ExecutionTaskApply {\n const taskWithScreenshot: ExecutionTaskApply = {\n ...taskApply,\n executor: async (param, context, ...args) => {\n const recorder: ExecutionRecorderItem[] = [];\n const { task } = context;\n // set the recorder before executor in case of error\n task.recorder = recorder;\n const shot = await this.recordScreenshot(`before ${task.type}`);\n recorder.push(shot);\n const result = await taskApply.executor(param, context, ...args);\n if (taskApply.type === 'Action') {\n await Promise.all([\n (async () => {\n await sleep(100);\n if ((this.page as PuppeteerWebPage).waitUntilNetworkIdle) {\n try {\n await (this.page as PuppeteerWebPage).waitUntilNetworkIdle();\n } catch (error) {\n // console.error('waitUntilNetworkIdle error', error);\n }\n }\n })(),\n sleep(200),\n ]);\n }\n if (appendAfterExecution) {\n const shot2 = await this.recordScreenshot('after Action');\n recorder.push(shot2);\n }\n return result;\n },\n };\n return taskWithScreenshot;\n }\n\n public async convertPlanToExecutable(\n plans: PlanningAction[],\n opts?: {\n cacheable?: boolean;\n },\n ) {\n const tasks: ExecutionTaskApply[] = [];\n for (const plan of plans) {\n if (plan.type === 'Locate') {\n if (\n plan.locate === null ||\n plan.locate?.id === null ||\n plan.locate?.id === 'null'\n ) {\n // console.warn('Locate action with id is null, will be ignored');\n continue;\n }\n const taskFind: ExecutionTaskInsightLocateApply = {\n type: 'Insight',\n subType: 'Locate',\n param: plan.locate\n ? {\n ...plan.locate,\n cacheable: opts?.cacheable,\n }\n : undefined,\n thought: plan.thought,\n locate: plan.locate,\n executor: async (param, taskContext) => {\n const { task } = taskContext;\n assert(\n param?.prompt || param?.id || param?.bbox,\n 'No prompt or id or position or bbox to locate',\n );\n let insightDump: InsightDump | undefined;\n let usage: AIUsageInfo | undefined;\n const dumpCollector: DumpSubscriber = (dump) => {\n insightDump = dump;\n usage = dump?.taskInfo?.usage;\n\n task.log = {\n dump: insightDump,\n };\n\n task.usage = usage;\n };\n this.insight.onceDumpUpdatedFn = dumpCollector;\n const shotTime = Date.now();\n\n // Get context through contextRetrieverFn which handles frozen context\n const pageContext = await this.insight.contextRetrieverFn('locate');\n task.pageContext = pageContext;\n\n const recordItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: shotTime,\n screenshot: pageContext.screenshotBase64,\n timing: 'before Insight',\n };\n task.recorder = [recordItem];\n\n // try matching xpath\n const elementFromXpath = param.xpath\n ? await this.page.getElementInfoByXpath(param.xpath)\n : undefined;\n const userExpectedPathHitFlag = !!elementFromXpath;\n\n // try matching cache\n const cachePrompt = param.prompt;\n const locateCacheRecord =\n this.taskCache?.matchLocateCache(cachePrompt);\n const xpaths = locateCacheRecord?.cacheContent?.xpaths;\n const elementFromCache = userExpectedPathHitFlag\n ? null\n : await matchElementFromCache(\n this,\n xpaths,\n cachePrompt,\n param.cacheable,\n );\n const cacheHitFlag = !!elementFromCache;\n\n // try matching plan\n const elementFromPlan =\n !userExpectedPathHitFlag && !cacheHitFlag\n ? matchElementFromPlan(param, pageContext.tree)\n : undefined;\n const planHitFlag = !!elementFromPlan;\n\n // try ai locate\n const elementFromAiLocate =\n !userExpectedPathHitFlag && !cacheHitFlag && !planHitFlag\n ? (\n await this.insight.locate(param, {\n // fallback to ai locate\n context: pageContext,\n })\n ).element\n : undefined;\n const aiLocateHitFlag = !!elementFromAiLocate;\n\n const element =\n elementFromXpath || // highest priority\n elementFromCache || // second priority\n elementFromPlan || // third priority\n elementFromAiLocate;\n\n // update cache\n let currentXpaths: string[] | undefined;\n if (\n element &&\n this.taskCache &&\n !cacheHitFlag &&\n param?.cacheable !== false\n ) {\n const elementXpaths = await this.getElementXpath(\n pageContext,\n element,\n );\n if (elementXpaths?.length) {\n currentXpaths = elementXpaths;\n this.taskCache.updateOrAppendCacheRecord(\n {\n type: 'locate',\n prompt: cachePrompt,\n xpaths: elementXpaths,\n },\n locateCacheRecord,\n );\n } else {\n debug(\n 'no xpaths found, will not update cache',\n cachePrompt,\n elementXpaths,\n );\n }\n }\n if (!element) {\n throw new Error(`Element not found: ${param.prompt}`);\n }\n\n let hitBy: ExecutionTaskHitBy | undefined;\n\n if (userExpectedPathHitFlag) {\n hitBy = {\n from: 'User expected path',\n context: {\n xpath: param.xpath,\n },\n };\n } else if (cacheHitFlag) {\n hitBy = {\n from: 'Cache',\n context: {\n xpathsFromCache: xpaths,\n xpathsToSave: currentXpaths,\n },\n };\n } else if (planHitFlag) {\n hitBy = {\n from: 'Planning',\n context: {\n id: elementFromPlan?.id,\n bbox: elementFromPlan?.bbox,\n },\n };\n } else if (aiLocateHitFlag) {\n hitBy = {\n from: 'AI model',\n context: {\n prompt: param.prompt,\n },\n };\n }\n\n return {\n output: {\n element,\n },\n pageContext,\n hitBy,\n };\n },\n };\n tasks.push(taskFind);\n } else if (plan.type === 'Assert' || plan.type === 'AssertWithoutThrow') {\n const assertPlan = plan as PlanningAction<PlanningActionParamAssert>;\n const taskAssert: ExecutionTaskApply = {\n type: 'Insight',\n subType: 'Assert',\n param: assertPlan.param,\n thought: assertPlan.thought,\n locate: assertPlan.locate,\n executor: async (param, taskContext) => {\n const { task } = taskContext;\n let insightDump: InsightDump | undefined;\n const dumpCollector: DumpSubscriber = (dump) => {\n insightDump = dump;\n };\n this.insight.onceDumpUpdatedFn = dumpCollector;\n const shotTime = Date.now();\n const pageContext = await this.insight.contextRetrieverFn('assert');\n task.pageContext = pageContext;\n\n const recordItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: shotTime,\n screenshot: pageContext.screenshotBase64,\n timing: 'before Insight',\n };\n task.recorder = [recordItem];\n\n const assertion = await this.insight.assert(\n assertPlan.param.assertion,\n );\n\n if (!assertion.pass) {\n if (plan.type === 'Assert') {\n task.output = assertion;\n task.log = {\n dump: insightDump,\n };\n throw new Error(\n assertion.thought || 'Assertion failed without reason',\n );\n }\n\n task.error = new Error(assertion.thought);\n }\n\n return {\n output: assertion,\n pageContext,\n log: {\n dump: insightDump,\n },\n usage: assertion.usage,\n };\n },\n };\n tasks.push(taskAssert);\n } else if (plan.type === 'Error') {\n const taskActionError: ExecutionTaskActionApply<PlanningActionParamError> =\n {\n type: 'Action',\n subType: 'Error',\n param: plan.param,\n thought: plan.thought || plan.param?.thought,\n locate: plan.locate,\n executor: async () => {\n throw new Error(\n plan?.thought || plan.param?.thought || 'error without thought',\n );\n },\n };\n tasks.push(taskActionError);\n } else if (plan.type === 'Finished') {\n const taskActionFinished: ExecutionTaskActionApply<null> = {\n type: 'Action',\n subType: 'Finished',\n param: null,\n thought: plan.thought,\n locate: plan.locate,\n executor: async (param) => {},\n };\n tasks.push(taskActionFinished);\n } else if (plan.type === 'Sleep') {\n const taskActionSleep: ExecutionTaskActionApply<PlanningActionParamSleep> =\n {\n type: 'Action',\n subType: 'Sleep',\n param: plan.param,\n thought: plan.thought,\n locate: plan.locate,\n executor: async (taskParam) => {\n await sleep(taskParam?.timeMs || 3000);\n },\n };\n tasks.push(taskActionSleep);\n } else if (plan.type === 'Drag') {\n const taskActionDrag: ExecutionTaskActionApply<{\n start_box: { x: number; y: number };\n end_box: { x: number; y: number };\n }> = {\n type: 'Action',\n subType: 'Drag',\n param: plan.param,\n thought: plan.thought,\n locate: plan.locate,\n executor: async (taskParam) => {\n assert(\n taskParam?.start_box && taskParam?.end_box,\n 'No start_box or end_box to drag',\n );\n await this.page.mouse.drag(taskParam.start_box, taskParam.end_box);\n },\n };\n tasks.push(taskActionDrag);\n } else {\n const planType = plan.type;\n const task: ExecutionTaskActionApply = {\n type: 'Action',\n subType: planType,\n thought: plan.thought,\n param: plan.param,\n executor: async (param, context) => {\n debug(\n 'executing action',\n planType,\n param,\n `context.element.center: ${context.element?.center}`,\n );\n const actionSpace = await this.page.actionSpace();\n const action = actionSpace.find(\n (action) => action.name === planType,\n );\n if (!action) {\n throw new Error(`Action type '${planType}' not found`);\n }\n const actionFn = action.call.bind(this.page);\n return await actionFn(context, param);\n },\n };\n tasks.push(task);\n }\n }\n\n const wrappedTasks = tasks.map(\n (task: ExecutionTaskApply, index: number) => {\n if (task.type === 'Action') {\n return this.prependExecutorWithScreenshot(\n task,\n index === tasks.length - 1,\n );\n }\n return task;\n },\n );\n\n return {\n tasks: wrappedTasks,\n };\n }\n\n private async setupPlanningContext(executorContext: ExecutorContext) {\n const shotTime = Date.now();\n const pageContext = await this.insight.contextRetrieverFn('locate');\n const recordItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: shotTime,\n screenshot: pageContext.screenshotBase64,\n timing: 'before Planning',\n };\n\n executorContext.task.recorder = [recordItem];\n (executorContext.task as ExecutionTaskPlanning).pageContext = pageContext;\n\n return {\n pageContext,\n };\n }\n\n async loadYamlFlowAsPlanning(userInstruction: string, yamlString: string) {\n const taskExecutor = new Executor(taskTitleStr('Action', userInstruction), {\n onTaskStart: this.onTaskStartCallback,\n });\n\n const task: ExecutionTaskPlanningApply = {\n type: 'Planning',\n subType: 'LoadYaml',\n locate: null,\n param: {\n userInstruction,\n },\n executor: async (param, executorContext) => {\n await this.setupPlanningContext(executorContext);\n return {\n output: {\n actions: [],\n more_actions_needed_by_instruction: false,\n log: '',\n yamlString,\n },\n cache: {\n hit: true,\n },\n };\n },\n };\n\n await taskExecutor.append(task);\n await taskExecutor.flush();\n\n return {\n executor: taskExecutor,\n };\n }\n\n private planningTaskFromPrompt(\n userInstruction: string,\n log?: string,\n actionContext?: string,\n ) {\n const task: ExecutionTaskPlanningApply = {\n type: 'Planning',\n subType: 'Plan',\n locate: null,\n param: {\n userInstruction,\n log,\n },\n executor: async (param, executorContext) => {\n const startTime = Date.now();\n const { pageContext } =\n await this.setupPlanningContext(executorContext);\n\n assert(\n this.page.actionSpace,\n 'actionSpace for device is not implemented',\n );\n const actionSpace = await this.page.actionSpace();\n debug(\n 'actionSpace for page is:',\n actionSpace.map((action) => action.name).join(', '),\n );\n assert(Array.isArray(actionSpace), 'actionSpace must be an array');\n if (actionSpace.length === 0) {\n console.warn(\n `ActionSpace for ${this.page.pageType} is empty. This may lead to unexpected behavior.`,\n );\n }\n\n const planResult = await plan(param.userInstruction, {\n context: pageContext,\n log: param.log,\n actionContext,\n pageType: this.page.pageType as PageType,\n actionSpace,\n });\n\n const {\n actions,\n log,\n more_actions_needed_by_instruction,\n error,\n usage,\n rawResponse,\n sleep,\n } = planResult;\n\n executorContext.task.log = {\n ...(executorContext.task.log || {}),\n rawResponse,\n };\n executorContext.task.usage = usage;\n\n let stopCollecting = false;\n let bboxCollected = false;\n let planParsingError = '';\n const finalActions = (actions || []).reduce<PlanningAction[]>(\n (acc, planningAction) => {\n if (stopCollecting) {\n return acc;\n }\n\n if (planningAction.locate) {\n // we only collect bbox once, let qwen re-locate in the following steps\n if (bboxCollected && planningAction.locate.bbox) {\n // biome-ignore lint/performance/noDelete: <explanation>\n delete planningAction.locate.bbox;\n }\n\n if (planningAction.locate.bbox) {\n bboxCollected = true;\n }\n\n acc.push({\n type: 'Locate',\n locate: planningAction.locate,\n param: null,\n // thought is prompt created by ai, always a string\n thought: planningAction.locate.prompt as string,\n });\n } else if (\n ['Tap', 'Hover', 'Input'].includes(planningAction.type)\n ) {\n planParsingError = `invalid planning response: ${JSON.stringify(planningAction)}`;\n // should include locate but get null\n stopCollecting = true;\n return acc;\n }\n acc.push(planningAction);\n return acc;\n },\n [],\n );\n\n if (sleep) {\n const timeNow = Date.now();\n const timeRemaining = sleep - (timeNow - startTime);\n if (timeRemaining > 0) {\n finalActions.push({\n type: 'Sleep',\n param: {\n timeMs: timeRemaining,\n },\n locate: null,\n } as PlanningAction<PlanningActionParamSleep>);\n }\n }\n\n if (finalActions.length === 0) {\n assert(\n !more_actions_needed_by_instruction || sleep,\n error\n ? `Failed to plan: ${error}`\n : planParsingError || 'No plan found',\n );\n }\n\n return {\n output: {\n actions: finalActions,\n more_actions_needed_by_instruction,\n log,\n yamlFlow: planResult.yamlFlow,\n },\n cache: {\n hit: false,\n },\n pageContext,\n };\n },\n };\n\n return task;\n }\n\n private planningTaskToGoal(userInstruction: string) {\n const task: ExecutionTaskPlanningApply = {\n type: 'Planning',\n subType: 'Plan',\n locate: null,\n param: {\n userInstruction,\n },\n executor: async (param, executorContext) => {\n const { pageContext } =\n await this.setupPlanningContext(executorContext);\n\n const imagePayload = await resizeImageForUiTars(\n pageContext.screenshotBase64,\n pageContext.size,\n );\n\n this.appendConversationHistory({\n role: 'user',\n content: [\n {\n type: 'image_url',\n image_url: {\n url: imagePayload,\n },\n },\n ],\n });\n const planResult: {\n actions: PlanningAction<any>[];\n action_summary: string;\n usage?: AIUsageInfo;\n yamlFlow?: MidsceneYamlFlowItem[];\n rawResponse?: string;\n } = await vlmPlanning({\n userInstruction: param.userInstruction,\n conversationHistory: this.conversationHistory,\n size: pageContext.size,\n });\n\n const { actions, action_summary, usage } = planResult;\n executorContext.task.log = {\n ...(executorContext.task.log || {}),\n rawResponse: planResult.rawResponse,\n };\n executorContext.task.usage = usage;\n this.appendConversationHistory({\n role: 'assistant',\n content: action_summary,\n });\n return {\n output: {\n actions,\n thought: actions[0]?.thought,\n actionType: actions[0].type,\n more_actions_needed_by_instruction: true,\n log: '',\n yamlFlow: planResult.yamlFlow,\n },\n cache: {\n hit: false,\n },\n };\n },\n };\n\n return task;\n }\n\n async runPlans(\n title: string,\n plans: PlanningAction[],\n opts?: {\n cacheable?: boolean;\n },\n ): Promise<ExecutionResult> {\n const taskExecutor = new Executor(title, {\n onTaskStart: this.onTaskStartCallback,\n });\n const { tasks } = await this.convertPlanToExecutable(plans, opts);\n await taskExecutor.append(tasks);\n const result = await taskExecutor.flush();\n const { output } = result!;\n return {\n output,\n executor: taskExecutor,\n };\n }\n\n async action(\n userPrompt: string,\n actionContext?: string,\n opts?: {\n cacheable?: boolean;\n },\n ): Promise<\n ExecutionResult<\n | {\n yamlFlow?: MidsceneYamlFlowItem[]; // for cache use\n }\n | undefined\n >\n > {\n const taskExecutor = new Executor(taskTitleStr('Action', userPrompt), {\n onTaskStart: this.onTaskStartCallback,\n });\n\n let planningTask: ExecutionTaskPlanningApply | null =\n this.planningTaskFromPrompt(userPrompt, undefined, actionContext);\n let replanCount = 0;\n const logList: string[] = [];\n\n const yamlFlow: MidsceneYamlFlowItem[] = [];\n const replanningCycleLimit =\n getAIConfigInNumber(MIDSCENE_REPLANNING_CYCLE_LIMIT) ||\n defaultReplanningCycleLimit;\n while (planningTask) {\n if (replanCount > replanningCycleLimit) {\n const errorMsg =\n 'Replanning too many times, please split the task into multiple steps';\n\n return this.appendErrorPlan(taskExecutor, errorMsg);\n }\n\n // plan\n await taskExecutor.append(planningTask);\n const result = await taskExecutor.flush();\n const planResult: PlanningAIResponse = result?.output;\n if (taskExecutor.isInErrorState()) {\n return {\n output: planResult,\n executor: taskExecutor,\n };\n }\n\n const plans = planResult.actions || [];\n yamlFlow.push(...(planResult.yamlFlow || []));\n\n let executables: Awaited<ReturnType<typeof this.convertPlanToExecutable>>;\n try {\n executables = await this.convertPlanToExecutable(plans, opts);\n taskExecutor.append(executables.tasks);\n } catch (error) {\n return this.appendErrorPlan(\n taskExecutor,\n `Error converting plans to executable tasks: ${error}, plans: ${JSON.stringify(\n plans,\n )}`,\n );\n }\n\n await taskExecutor.flush();\n if (taskExecutor.isInErrorState()) {\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n if (planResult?.log) {\n logList.push(planResult.log);\n }\n\n if (!planResult.more_actions_needed_by_instruction) {\n planningTask = null;\n break;\n }\n planningTask = this.planningTaskFromPrompt(\n userPrompt,\n logList.length > 0 ? `- ${logList.join('\\n- ')}` : undefined,\n actionContext,\n );\n replanCount++;\n }\n\n return {\n output: {\n yamlFlow,\n },\n executor: taskExecutor,\n };\n }\n\n async actionToGoal(\n userPrompt: string,\n opts?: {\n cacheable?: boolean;\n },\n ): Promise<\n ExecutionResult<\n | {\n yamlFlow?: MidsceneYamlFlowItem[]; // for cache use\n }\n | undefined\n >\n > {\n const taskExecutor = new Executor(taskTitleStr('Action', userPrompt), {\n onTaskStart: this.onTaskStartCallback,\n });\n this.conversationHistory = [];\n const isCompleted = false;\n let currentActionNumber = 0;\n const maxActionNumber = 40;\n\n const yamlFlow: MidsceneYamlFlowItem[] = [];\n while (!isCompleted && currentActionNumber < maxActionNumber) {\n currentActionNumber++;\n const planningTask: ExecutionTaskPlanningApply =\n this.planningTaskToGoal(userPrompt);\n await taskExecutor.append(planningTask);\n const result = await taskExecutor.flush();\n if (taskExecutor.isInErrorState()) {\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n if (!result) {\n throw new Error(\n 'result of taskExecutor.flush() is undefined in function actionToGoal',\n );\n }\n const { output } = result;\n const plans = output.actions;\n yamlFlow.push(...(output.yamlFlow || []));\n let executables: Awaited<ReturnType<typeof this.convertPlanToExecutable>>;\n try {\n executables = await this.convertPlanToExecutable(plans, opts);\n taskExecutor.append(executables.tasks);\n } catch (error) {\n return this.appendErrorPlan(\n taskExecutor,\n `Error converting plans to executable tasks: ${error}, plans: ${JSON.stringify(\n plans,\n )}`,\n );\n }\n\n await taskExecutor.flush();\n\n if (taskExecutor.isInErrorState()) {\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n\n if (plans[0].type === 'Finished') {\n break;\n }\n }\n return {\n output: {\n yamlFlow,\n },\n executor: taskExecutor,\n };\n }\n\n private async createTypeQueryTask<T>(\n type: 'Query' | 'Boolean' | 'Number' | 'String' | 'Assert',\n demand: InsightExtractParam,\n opt?: InsightExtractOption,\n multimodalPrompt?: TMultimodalPrompt,\n ): Promise<ExecutionResult<T>> {\n const taskExecutor = new Executor(\n taskTitleStr(\n type,\n typeof demand === 'string' ? demand : JSON.stringify(demand),\n ),\n {\n onTaskStart: this.onTaskStartCallback,\n },\n );\n\n const queryTask: ExecutionTaskInsightQueryApply = {\n type: 'Insight',\n subType: type,\n locate: null,\n param: {\n // TODO: display image thumbnail in report\n dataDemand: multimodalPrompt\n ? ({\n demand,\n multimodalPrompt,\n } as never)\n : demand, // for user param presentation in report right sidebar\n },\n executor: async (param, taskContext) => {\n const { task } = taskContext;\n let insightDump: InsightDump | undefined;\n const dumpCollector: DumpSubscriber = (dump) => {\n insightDump = dump;\n };\n this.insight.onceDumpUpdatedFn = dumpCollector;\n\n // Get page context for query operations\n const shotTime = Date.now();\n const pageContext = await this.insight.contextRetrieverFn('extract');\n task.pageContext = pageContext;\n\n const recordItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: shotTime,\n screenshot: pageContext.screenshotBase64,\n timing: 'before Extract',\n };\n task.recorder = [recordItem];\n\n const ifTypeRestricted = type !== 'Query';\n let demandInput = demand;\n if (ifTypeRestricted) {\n const returnType = type === 'Assert' ? 'Boolean' : type;\n demandInput = {\n result: `${returnType}, ${demand}`,\n };\n }\n\n const { data, usage, thought } = await this.insight.extract<any>(\n demandInput,\n opt,\n multimodalPrompt,\n );\n\n let outputResult = data;\n if (ifTypeRestricted) {\n assert(data?.result !== undefined, 'No result in query data');\n outputResult = (data as any).result;\n }\n\n return {\n output: outputResult,\n log: { dump: insightDump },\n usage,\n thought,\n };\n },\n };\n\n await taskExecutor.append(this.prependExecutorWithScreenshot(queryTask));\n const result = await taskExecutor.flush();\n\n if (!result) {\n throw new Error(\n 'result of taskExecutor.flush() is undefined in function createTypeQueryTask',\n );\n }\n\n const { output, thought } = result;\n\n return {\n output,\n thought,\n executor: taskExecutor,\n };\n }\n\n async query(\n demand: InsightExtractParam,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult> {\n return this.createTypeQueryTask('Query', demand, opt);\n }\n\n async boolean(\n prompt: TUserPrompt,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult<boolean>> {\n const { textPrompt, multimodalPrompt } = parsePrompt(prompt);\n return this.createTypeQueryTask<boolean>(\n 'Boolean',\n textPrompt,\n opt,\n multimodalPrompt,\n );\n }\n\n async number(\n prompt: TUserPrompt,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult<number>> {\n const { textPrompt, multimodalPrompt } = parsePrompt(prompt);\n return this.createTypeQueryTask<number>(\n 'Number',\n textPrompt,\n opt,\n multimodalPrompt,\n );\n }\n\n async string(\n prompt: TUserPrompt,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult<string>> {\n const { textPrompt, multimodalPrompt } = parsePrompt(prompt);\n return this.createTypeQueryTask<string>(\n 'String',\n textPrompt,\n opt,\n multimodalPrompt,\n );\n }\n\n async assert(\n assertion: TUserPrompt,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult<boolean>> {\n const { textPrompt, multimodalPrompt } = parsePrompt(assertion);\n return await this.createTypeQueryTask<boolean>(\n 'Assert',\n textPrompt,\n opt,\n multimodalPrompt,\n );\n }\n\n /**\n * Append a message to the conversation history\n * For user messages with images:\n * - Keep max 4 user image messages in history\n * - Remove oldest user image message when limit reached\n * For assistant messages:\n * - Simply append to history\n * @param conversationHistory Message to append\n */\n private appendConversationHistory(\n conversationHistory: ChatCompletionMessageParam,\n ) {\n if (conversationHistory.role === 'user') {\n // Get all existing user messages with images\n const userImgItems = this.conversationHistory.filter(\n (item) => item.role === 'user',\n );\n\n // If we already have 4 user image messages\n if (userImgItems.length >= 4 && conversationHistory.role === 'user') {\n // Remove first user image message when we already have 4, before adding new one\n const firstUserImgIndex = this.conversationHistory.findIndex(\n (item) => item.role === 'user',\n );\n if (firstUserImgIndex >= 0) {\n this.conversationHistory.splice(firstUserImgIndex, 1);\n }\n }\n }\n // For non-user messages, simply append to history\n this.conversationHistory.push(conversationHistory);\n }\n\n private async appendErrorPlan(taskExecutor: Executor, errorMsg: string) {\n const errorPlan: PlanningAction<PlanningActionParamError> = {\n type: 'Error',\n param: {\n thought: errorMsg,\n },\n locate: null,\n };\n const { tasks } = await this.convertPlanToExecutable([errorPlan]);\n await taskExecutor.append(this.prependExecutorWithScreenshot(tasks[0]));\n await taskExecutor.flush();\n\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n\n async waitFor(\n assertion: string,\n opt: PlanningActionParamWaitFor,\n ): Promise<ExecutionResult<void>> {\n const description = `waitFor: ${assertion}`;\n const taskExecutor = new Executor(taskTitleStr('WaitFor', description), {\n onTaskStart: this.onTaskStartCallback,\n });\n const { timeoutMs, checkIntervalMs } = opt;\n\n assert(assertion, 'No assertion for waitFor');\n assert(timeoutMs, 'No timeoutMs for waitFor');\n assert(checkIntervalMs, 'No checkIntervalMs for waitFor');\n\n const overallStartTime = Date.now();\n let startTime = Date.now();\n let errorThought = '';\n while (Date.now() - overallStartTime < timeoutMs) {\n startTime = Date.now();\n const assertPlan: PlanningAction<PlanningActionParamAssert> = {\n type: 'AssertWithoutThrow',\n param: {\n assertion,\n },\n locate: null,\n };\n const { tasks: assertTasks } = await this.convertPlanToExecutable([\n assertPlan,\n ]);\n await taskExecutor.append(\n this.prependExecutorWithScreenshot(assertTasks[0]),\n );\n const result = await taskExecutor.flush();\n\n if (!result) {\n throw new Error(\n 'result of taskExecutor.flush() is undefined in function waitFor',\n );\n }\n\n const { output } = result as { output: InsightAssertionResponse };\n\n if (output?.pass) {\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n\n errorThought =\n output?.thought ||\n `unknown error when waiting for assertion: ${assertion}`;\n const now = Date.now();\n if (now - startTime < checkIntervalMs) {\n const timeRemaining = checkIntervalMs - (now - startTime);\n const sleepPlan: PlanningAction<PlanningActionParamSleep> = {\n type: 'Sleep',\n param: {\n timeMs: timeRemaining,\n },\n locate: null,\n };\n const { tasks: sleepTasks } = await this.convertPlanToExecutable([\n sleepPlan,\n ]);\n await taskExecutor.append(\n this.prependExecutorWithScreenshot(sleepTasks[0]),\n );\n await taskExecutor.flush();\n }\n }\n\n return this.appendErrorPlan(\n taskExecutor,\n `waitFor timeout: ${errorThought}`,\n );\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","defaultReplanningCycleLimit","PageTaskExecutor","timing","base64","item","Date","pageContext","element","_element_attributes","elementId","undefined","xpaths","NodeType","info","elementByPositionWithElementInfo","result","error","taskApply","appendAfterExecution","taskWithScreenshot","param","context","args","recorder","task","shot","Promise","sleep","shot2","plans","opts","tasks","plan","_plan_locate","_plan_locate1","taskFind","taskContext","_this_taskCache","_locateCacheRecord_cacheContent","assert","insightDump","usage","dumpCollector","dump","_dump_taskInfo","shotTime","recordItem","elementFromXpath","userExpectedPathHitFlag","cachePrompt","locateCacheRecord","elementFromCache","matchElementFromCache","cacheHitFlag","elementFromPlan","matchElementFromPlan","planHitFlag","elementFromAiLocate","aiLocateHitFlag","currentXpaths","elementXpaths","Error","hitBy","assertPlan","taskAssert","assertion","_plan_param","taskActionError","taskActionFinished","taskActionSleep","taskParam","taskActionDrag","planType","_context_element","actionSpace","action","actionFn","wrappedTasks","index","executorContext","userInstruction","yamlString","taskExecutor","Executor","taskTitleStr","log","actionContext","startTime","Array","console","planResult","actions","more_actions_needed_by_instruction","rawResponse","stopCollecting","bboxCollected","planParsingError","finalActions","acc","planningAction","JSON","timeNow","timeRemaining","_actions_","imagePayload","resizeImageForUiTars","vlmPlanning","action_summary","title","output","userPrompt","planningTask","replanCount","logList","yamlFlow","replanningCycleLimit","getAIConfigInNumber","MIDSCENE_REPLANNING_CYCLE_LIMIT","errorMsg","executables","isCompleted","currentActionNumber","maxActionNumber","type","demand","opt","multimodalPrompt","queryTask","ifTypeRestricted","demandInput","returnType","data","thought","outputResult","prompt","textPrompt","parsePrompt","conversationHistory","userImgItems","firstUserImgIndex","errorPlan","description","timeoutMs","checkIntervalMs","overallStartTime","errorThought","assertTasks","now","sleepPlan","sleepTasks","page","insight"],"mappings":"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"}
1
+ {"version":3,"file":"common/tasks.js","sources":["webpack://@midscene/web/webpack/runtime/define_property_getters","webpack://@midscene/web/webpack/runtime/has_own_property","webpack://@midscene/web/webpack/runtime/make_namespace_object","webpack://@midscene/web/./src/common/tasks.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { WebPage } from '@/common/page';\nimport type { PuppeteerWebPage } from '@/puppeteer';\nimport {\n type AIUsageInfo,\n type BaseElement,\n type DumpSubscriber,\n type ExecutionRecorderItem,\n type ExecutionTaskActionApply,\n type ExecutionTaskApply,\n type ExecutionTaskHitBy,\n type ExecutionTaskInsightLocateApply,\n type ExecutionTaskInsightQueryApply,\n type ExecutionTaskPlanning,\n type ExecutionTaskPlanningApply,\n type ExecutionTaskProgressOptions,\n Executor,\n type ExecutorContext,\n type Insight,\n type InsightAssertionResponse,\n type InsightDump,\n type InsightExtractOption,\n type InsightExtractParam,\n type LocateResultElement,\n type MidsceneYamlFlowItem,\n type PageType,\n type PlanningAIResponse,\n type PlanningAction,\n type PlanningActionParamAssert,\n type PlanningActionParamError,\n type PlanningActionParamSleep,\n type PlanningActionParamWaitFor,\n type TMultimodalPrompt,\n type TUserPrompt,\n type UIContext,\n plan,\n} from '@midscene/core';\nimport {\n type ChatCompletionMessageParam,\n elementByPositionWithElementInfo,\n resizeImageForUiTars,\n vlmPlanning,\n} from '@midscene/core/ai-model';\nimport { sleep } from '@midscene/core/utils';\nimport { NodeType } from '@midscene/shared/constants';\nimport {\n MIDSCENE_REPLANNING_CYCLE_LIMIT,\n getAIConfigInNumber,\n} from '@midscene/shared/env';\nimport { getDebug } from '@midscene/shared/logger';\nimport { assert } from '@midscene/shared/utils';\nimport type { WebElementInfo, WebUIContext } from '../web-element';\nimport type { TaskCache } from './task-cache';\nimport { taskTitleStr } from './ui-utils';\nimport {\n matchElementFromCache,\n matchElementFromPlan,\n parsePrompt,\n} from './utils';\n\ninterface ExecutionResult<OutputType = any> {\n output: OutputType;\n thought?: string;\n executor: Executor;\n}\n\nconst debug = getDebug('device-task-executor');\nconst defaultReplanningCycleLimit = 10;\n\nexport class PageTaskExecutor {\n page: WebPage;\n\n insight: Insight<WebElementInfo, WebUIContext>;\n\n taskCache?: TaskCache;\n\n conversationHistory: ChatCompletionMessageParam[] = [];\n\n onTaskStartCallback?: ExecutionTaskProgressOptions['onTaskStart'];\n\n constructor(\n page: WebPage,\n insight: Insight<WebElementInfo, WebUIContext>,\n opts: {\n taskCache?: TaskCache;\n onTaskStart?: ExecutionTaskProgressOptions['onTaskStart'];\n },\n ) {\n this.page = page;\n this.insight = insight;\n this.taskCache = opts.taskCache;\n this.onTaskStartCallback = opts?.onTaskStart;\n }\n\n private async recordScreenshot(timing: ExecutionRecorderItem['timing']) {\n const base64 = await this.page.screenshotBase64();\n const item: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: Date.now(),\n screenshot: base64,\n timing,\n };\n return item;\n }\n\n private async getElementXpath(\n pageContext: UIContext<BaseElement>,\n element: LocateResultElement,\n ): Promise<string[] | undefined> {\n let elementId = element?.id;\n if (element?.isOrderSensitive !== undefined) {\n const xpaths = await this.page.getXpathsByPoint(\n {\n left: element.center[0],\n top: element.center[1],\n },\n element?.isOrderSensitive,\n );\n\n return xpaths;\n }\n\n // find the nearest xpath for the element\n if (element?.attributes?.nodeType === NodeType.POSITION) {\n await this.insight.contextRetrieverFn('locate');\n const info = elementByPositionWithElementInfo(\n pageContext.tree,\n {\n x: element.center[0],\n y: element.center[1],\n },\n {\n requireStrictDistance: false,\n filterPositionElements: true,\n },\n );\n if (info?.id) {\n elementId = info.id;\n } else {\n debug(\n 'no element id found for position node, will not update cache',\n element,\n );\n }\n }\n\n if (!elementId) {\n return undefined;\n }\n try {\n const result = await this.page.getXpathsById(elementId);\n return result;\n } catch (error) {\n debug('getXpathsById error: ', error);\n }\n }\n\n private prependExecutorWithScreenshot(\n taskApply: ExecutionTaskApply,\n appendAfterExecution = false,\n ): ExecutionTaskApply {\n const taskWithScreenshot: ExecutionTaskApply = {\n ...taskApply,\n executor: async (param, context, ...args) => {\n const recorder: ExecutionRecorderItem[] = [];\n const { task } = context;\n // set the recorder before executor in case of error\n task.recorder = recorder;\n const shot = await this.recordScreenshot(`before ${task.type}`);\n recorder.push(shot);\n const result = await taskApply.executor(param, context, ...args);\n if (taskApply.type === 'Action') {\n await Promise.all([\n (async () => {\n await sleep(100);\n if ((this.page as PuppeteerWebPage).waitUntilNetworkIdle) {\n try {\n await (this.page as PuppeteerWebPage).waitUntilNetworkIdle();\n } catch (error) {\n // console.error('waitUntilNetworkIdle error', error);\n }\n }\n })(),\n sleep(200),\n ]);\n }\n if (appendAfterExecution) {\n const shot2 = await this.recordScreenshot('after Action');\n recorder.push(shot2);\n }\n return result;\n },\n };\n return taskWithScreenshot;\n }\n\n public async convertPlanToExecutable(\n plans: PlanningAction[],\n opts?: {\n cacheable?: boolean;\n },\n ) {\n const tasks: ExecutionTaskApply[] = [];\n for (const plan of plans) {\n if (plan.type === 'Locate') {\n if (\n plan.locate === null ||\n plan.locate?.id === null ||\n plan.locate?.id === 'null'\n ) {\n // console.warn('Locate action with id is null, will be ignored');\n continue;\n }\n const taskFind: ExecutionTaskInsightLocateApply = {\n type: 'Insight',\n subType: 'Locate',\n param: plan.locate\n ? {\n ...plan.locate,\n cacheable: opts?.cacheable,\n }\n : undefined,\n thought: plan.thought,\n locate: plan.locate,\n executor: async (param, taskContext) => {\n const { task } = taskContext;\n assert(\n param?.prompt || param?.id || param?.bbox,\n 'No prompt or id or position or bbox to locate',\n );\n let insightDump: InsightDump | undefined;\n let usage: AIUsageInfo | undefined;\n const dumpCollector: DumpSubscriber = (dump) => {\n insightDump = dump;\n usage = dump?.taskInfo?.usage;\n\n task.log = {\n dump: insightDump,\n };\n\n task.usage = usage;\n };\n this.insight.onceDumpUpdatedFn = dumpCollector;\n const shotTime = Date.now();\n\n // Get context through contextRetrieverFn which handles frozen context\n const pageContext = await this.insight.contextRetrieverFn('locate');\n task.pageContext = pageContext;\n\n const recordItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: shotTime,\n screenshot: pageContext.screenshotBase64,\n timing: 'before Insight',\n };\n task.recorder = [recordItem];\n\n // try matching xpath\n const elementFromXpath = param.xpath\n ? await this.page.getElementInfoByXpath(param.xpath)\n : undefined;\n const userExpectedPathHitFlag = !!elementFromXpath;\n\n // try matching cache\n const cachePrompt = param.prompt;\n const locateCacheRecord =\n this.taskCache?.matchLocateCache(cachePrompt);\n const xpaths = locateCacheRecord?.cacheContent?.xpaths;\n const elementFromCache = userExpectedPathHitFlag\n ? null\n : await matchElementFromCache(\n this,\n xpaths,\n cachePrompt,\n param.cacheable,\n );\n const cacheHitFlag = !!elementFromCache;\n\n // try matching plan\n const elementFromPlan =\n !userExpectedPathHitFlag && !cacheHitFlag\n ? matchElementFromPlan(param, pageContext.tree)\n : undefined;\n const planHitFlag = !!elementFromPlan;\n\n // try ai locate\n const elementFromAiLocate =\n !userExpectedPathHitFlag && !cacheHitFlag && !planHitFlag\n ? (\n await this.insight.locate(param, {\n // fallback to ai locate\n context: pageContext,\n })\n ).element\n : undefined;\n const aiLocateHitFlag = !!elementFromAiLocate;\n\n const element =\n elementFromXpath || // highest priority\n elementFromCache || // second priority\n elementFromPlan || // third priority\n elementFromAiLocate;\n\n // update cache\n let currentXpaths: string[] | undefined;\n if (\n element &&\n this.taskCache &&\n !cacheHitFlag &&\n param?.cacheable !== false\n ) {\n const elementXpaths = await this.getElementXpath(\n pageContext,\n element,\n );\n if (elementXpaths?.length) {\n currentXpaths = elementXpaths;\n this.taskCache.updateOrAppendCacheRecord(\n {\n type: 'locate',\n prompt: cachePrompt,\n xpaths: elementXpaths,\n },\n locateCacheRecord,\n );\n } else {\n debug(\n 'no xpaths found, will not update cache',\n cachePrompt,\n elementXpaths,\n );\n }\n }\n if (!element) {\n throw new Error(`Element not found: ${param.prompt}`);\n }\n\n let hitBy: ExecutionTaskHitBy | undefined;\n\n if (userExpectedPathHitFlag) {\n hitBy = {\n from: 'User expected path',\n context: {\n xpath: param.xpath,\n },\n };\n } else if (cacheHitFlag) {\n hitBy = {\n from: 'Cache',\n context: {\n xpathsFromCache: xpaths,\n xpathsToSave: currentXpaths,\n },\n };\n } else if (planHitFlag) {\n hitBy = {\n from: 'Planning',\n context: {\n id: elementFromPlan?.id,\n bbox: elementFromPlan?.bbox,\n },\n };\n } else if (aiLocateHitFlag) {\n hitBy = {\n from: 'AI model',\n context: {\n prompt: param.prompt,\n },\n };\n }\n\n return {\n output: {\n element,\n },\n pageContext,\n hitBy,\n };\n },\n };\n tasks.push(taskFind);\n } else if (plan.type === 'Assert' || plan.type === 'AssertWithoutThrow') {\n const assertPlan = plan as PlanningAction<PlanningActionParamAssert>;\n const taskAssert: ExecutionTaskApply = {\n type: 'Insight',\n subType: 'Assert',\n param: assertPlan.param,\n thought: assertPlan.thought,\n locate: assertPlan.locate,\n executor: async (param, taskContext) => {\n const { task } = taskContext;\n let insightDump: InsightDump | undefined;\n const dumpCollector: DumpSubscriber = (dump) => {\n insightDump = dump;\n };\n this.insight.onceDumpUpdatedFn = dumpCollector;\n const shotTime = Date.now();\n const pageContext = await this.insight.contextRetrieverFn('assert');\n task.pageContext = pageContext;\n\n const recordItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: shotTime,\n screenshot: pageContext.screenshotBase64,\n timing: 'before Insight',\n };\n task.recorder = [recordItem];\n\n const assertion = await this.insight.assert(\n assertPlan.param.assertion,\n );\n\n if (!assertion.pass) {\n if (plan.type === 'Assert') {\n task.output = assertion;\n task.log = {\n dump: insightDump,\n };\n throw new Error(\n assertion.thought || 'Assertion failed without reason',\n );\n }\n\n task.error = new Error(assertion.thought);\n }\n\n return {\n output: assertion,\n pageContext,\n log: {\n dump: insightDump,\n },\n usage: assertion.usage,\n };\n },\n };\n tasks.push(taskAssert);\n } else if (plan.type === 'Error') {\n const taskActionError: ExecutionTaskActionApply<PlanningActionParamError> =\n {\n type: 'Action',\n subType: 'Error',\n param: plan.param,\n thought: plan.thought || plan.param?.thought,\n locate: plan.locate,\n executor: async () => {\n throw new Error(\n plan?.thought || plan.param?.thought || 'error without thought',\n );\n },\n };\n tasks.push(taskActionError);\n } else if (plan.type === 'Finished') {\n const taskActionFinished: ExecutionTaskActionApply<null> = {\n type: 'Action',\n subType: 'Finished',\n param: null,\n thought: plan.thought,\n locate: plan.locate,\n executor: async (param) => {},\n };\n tasks.push(taskActionFinished);\n } else if (plan.type === 'Sleep') {\n const taskActionSleep: ExecutionTaskActionApply<PlanningActionParamSleep> =\n {\n type: 'Action',\n subType: 'Sleep',\n param: plan.param,\n thought: plan.thought,\n locate: plan.locate,\n executor: async (taskParam) => {\n await sleep(taskParam?.timeMs || 3000);\n },\n };\n tasks.push(taskActionSleep);\n } else if (plan.type === 'Drag') {\n const taskActionDrag: ExecutionTaskActionApply<{\n start_box: { x: number; y: number };\n end_box: { x: number; y: number };\n }> = {\n type: 'Action',\n subType: 'Drag',\n param: plan.param,\n thought: plan.thought,\n locate: plan.locate,\n executor: async (taskParam) => {\n assert(\n taskParam?.start_box && taskParam?.end_box,\n 'No start_box or end_box to drag',\n );\n await this.page.mouse.drag(taskParam.start_box, taskParam.end_box);\n },\n };\n tasks.push(taskActionDrag);\n } else {\n const planType = plan.type;\n const task: ExecutionTaskActionApply = {\n type: 'Action',\n subType: planType,\n thought: plan.thought,\n param: plan.param,\n executor: async (param, context) => {\n debug(\n 'executing action',\n planType,\n param,\n `context.element.center: ${context.element?.center}`,\n );\n const actionSpace = await this.page.actionSpace();\n const action = actionSpace.find(\n (action) => action.name === planType,\n );\n if (!action) {\n throw new Error(`Action type '${planType}' not found`);\n }\n const actionFn = action.call.bind(this.page);\n return await actionFn(context, param);\n },\n };\n tasks.push(task);\n }\n }\n\n const wrappedTasks = tasks.map(\n (task: ExecutionTaskApply, index: number) => {\n if (task.type === 'Action') {\n return this.prependExecutorWithScreenshot(\n task,\n index === tasks.length - 1,\n );\n }\n return task;\n },\n );\n\n return {\n tasks: wrappedTasks,\n };\n }\n\n private async setupPlanningContext(executorContext: ExecutorContext) {\n const shotTime = Date.now();\n const pageContext = await this.insight.contextRetrieverFn('locate');\n const recordItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: shotTime,\n screenshot: pageContext.screenshotBase64,\n timing: 'before Planning',\n };\n\n executorContext.task.recorder = [recordItem];\n (executorContext.task as ExecutionTaskPlanning).pageContext = pageContext;\n\n return {\n pageContext,\n };\n }\n\n async loadYamlFlowAsPlanning(userInstruction: string, yamlString: string) {\n const taskExecutor = new Executor(taskTitleStr('Action', userInstruction), {\n onTaskStart: this.onTaskStartCallback,\n });\n\n const task: ExecutionTaskPlanningApply = {\n type: 'Planning',\n subType: 'LoadYaml',\n locate: null,\n param: {\n userInstruction,\n },\n executor: async (param, executorContext) => {\n await this.setupPlanningContext(executorContext);\n return {\n output: {\n actions: [],\n more_actions_needed_by_instruction: false,\n log: '',\n yamlString,\n },\n cache: {\n hit: true,\n },\n };\n },\n };\n\n await taskExecutor.append(task);\n await taskExecutor.flush();\n\n return {\n executor: taskExecutor,\n };\n }\n\n private planningTaskFromPrompt(\n userInstruction: string,\n log?: string,\n actionContext?: string,\n ) {\n const task: ExecutionTaskPlanningApply = {\n type: 'Planning',\n subType: 'Plan',\n locate: null,\n param: {\n userInstruction,\n log,\n },\n executor: async (param, executorContext) => {\n const startTime = Date.now();\n const { pageContext } =\n await this.setupPlanningContext(executorContext);\n\n assert(\n this.page.actionSpace,\n 'actionSpace for device is not implemented',\n );\n const actionSpace = await this.page.actionSpace();\n debug(\n 'actionSpace for page is:',\n actionSpace.map((action) => action.name).join(', '),\n );\n assert(Array.isArray(actionSpace), 'actionSpace must be an array');\n if (actionSpace.length === 0) {\n console.warn(\n `ActionSpace for ${this.page.pageType} is empty. This may lead to unexpected behavior.`,\n );\n }\n\n const planResult = await plan(param.userInstruction, {\n context: pageContext,\n log: param.log,\n actionContext,\n pageType: this.page.pageType as PageType,\n actionSpace,\n });\n\n const {\n actions,\n log,\n more_actions_needed_by_instruction,\n error,\n usage,\n rawResponse,\n sleep,\n } = planResult;\n\n executorContext.task.log = {\n ...(executorContext.task.log || {}),\n rawResponse,\n };\n executorContext.task.usage = usage;\n\n let stopCollecting = false;\n let bboxCollected = false;\n let planParsingError = '';\n const finalActions = (actions || []).reduce<PlanningAction[]>(\n (acc, planningAction) => {\n if (stopCollecting) {\n return acc;\n }\n\n if (planningAction.locate) {\n // we only collect bbox once, let qwen re-locate in the following steps\n if (bboxCollected && planningAction.locate.bbox) {\n // biome-ignore lint/performance/noDelete: <explanation>\n delete planningAction.locate.bbox;\n }\n\n if (planningAction.locate.bbox) {\n bboxCollected = true;\n }\n\n acc.push({\n type: 'Locate',\n locate: planningAction.locate,\n param: null,\n // thought is prompt created by ai, always a string\n thought: planningAction.locate.prompt as string,\n });\n } else {\n const actionType = planningAction.type;\n const action = actionSpace.find(\n (action) => action.name === actionType,\n );\n if (action && action?.location === 'required') {\n planParsingError = `Location is required for action: ${actionType}, but not provided by planning`;\n stopCollecting = true;\n return acc;\n }\n }\n acc.push(planningAction);\n return acc;\n },\n [],\n );\n\n if (sleep) {\n const timeNow = Date.now();\n const timeRemaining = sleep - (timeNow - startTime);\n if (timeRemaining > 0) {\n finalActions.push({\n type: 'Sleep',\n param: {\n timeMs: timeRemaining,\n },\n locate: null,\n } as PlanningAction<PlanningActionParamSleep>);\n }\n }\n\n if (finalActions.length === 0) {\n assert(\n !more_actions_needed_by_instruction || sleep,\n error\n ? `Failed to plan: ${error}`\n : planParsingError || 'No plan found',\n );\n }\n\n return {\n output: {\n actions: finalActions,\n more_actions_needed_by_instruction,\n log,\n yamlFlow: planResult.yamlFlow,\n },\n cache: {\n hit: false,\n },\n pageContext,\n };\n },\n };\n\n return task;\n }\n\n private planningTaskToGoal(userInstruction: string) {\n const task: ExecutionTaskPlanningApply = {\n type: 'Planning',\n subType: 'Plan',\n locate: null,\n param: {\n userInstruction,\n },\n executor: async (param, executorContext) => {\n const { pageContext } =\n await this.setupPlanningContext(executorContext);\n\n const imagePayload = await resizeImageForUiTars(\n pageContext.screenshotBase64,\n pageContext.size,\n );\n\n this.appendConversationHistory({\n role: 'user',\n content: [\n {\n type: 'image_url',\n image_url: {\n url: imagePayload,\n },\n },\n ],\n });\n const planResult: {\n actions: PlanningAction<any>[];\n action_summary: string;\n usage?: AIUsageInfo;\n yamlFlow?: MidsceneYamlFlowItem[];\n rawResponse?: string;\n } = await vlmPlanning({\n userInstruction: param.userInstruction,\n conversationHistory: this.conversationHistory,\n size: pageContext.size,\n });\n\n const { actions, action_summary, usage } = planResult;\n executorContext.task.log = {\n ...(executorContext.task.log || {}),\n rawResponse: planResult.rawResponse,\n };\n executorContext.task.usage = usage;\n this.appendConversationHistory({\n role: 'assistant',\n content: action_summary,\n });\n return {\n output: {\n actions,\n thought: actions[0]?.thought,\n actionType: actions[0].type,\n more_actions_needed_by_instruction: true,\n log: '',\n yamlFlow: planResult.yamlFlow,\n },\n cache: {\n hit: false,\n },\n };\n },\n };\n\n return task;\n }\n\n async runPlans(\n title: string,\n plans: PlanningAction[],\n opts?: {\n cacheable?: boolean;\n },\n ): Promise<ExecutionResult> {\n const taskExecutor = new Executor(title, {\n onTaskStart: this.onTaskStartCallback,\n });\n const { tasks } = await this.convertPlanToExecutable(plans, opts);\n await taskExecutor.append(tasks);\n const result = await taskExecutor.flush();\n const { output } = result!;\n return {\n output,\n executor: taskExecutor,\n };\n }\n\n async action(\n userPrompt: string,\n actionContext?: string,\n opts?: {\n cacheable?: boolean;\n },\n ): Promise<\n ExecutionResult<\n | {\n yamlFlow?: MidsceneYamlFlowItem[]; // for cache use\n }\n | undefined\n >\n > {\n const taskExecutor = new Executor(taskTitleStr('Action', userPrompt), {\n onTaskStart: this.onTaskStartCallback,\n });\n\n let planningTask: ExecutionTaskPlanningApply | null =\n this.planningTaskFromPrompt(userPrompt, undefined, actionContext);\n let replanCount = 0;\n const logList: string[] = [];\n\n const yamlFlow: MidsceneYamlFlowItem[] = [];\n const replanningCycleLimit =\n getAIConfigInNumber(MIDSCENE_REPLANNING_CYCLE_LIMIT) ||\n defaultReplanningCycleLimit;\n while (planningTask) {\n if (replanCount > replanningCycleLimit) {\n const errorMsg =\n 'Replanning too many times, please split the task into multiple steps';\n\n return this.appendErrorPlan(taskExecutor, errorMsg);\n }\n\n // plan\n await taskExecutor.append(planningTask);\n const result = await taskExecutor.flush();\n const planResult: PlanningAIResponse = result?.output;\n if (taskExecutor.isInErrorState()) {\n return {\n output: planResult,\n executor: taskExecutor,\n };\n }\n\n const plans = planResult.actions || [];\n yamlFlow.push(...(planResult.yamlFlow || []));\n\n let executables: Awaited<ReturnType<typeof this.convertPlanToExecutable>>;\n try {\n executables = await this.convertPlanToExecutable(plans, opts);\n taskExecutor.append(executables.tasks);\n } catch (error) {\n return this.appendErrorPlan(\n taskExecutor,\n `Error converting plans to executable tasks: ${error}, plans: ${JSON.stringify(\n plans,\n )}`,\n );\n }\n\n await taskExecutor.flush();\n if (taskExecutor.isInErrorState()) {\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n if (planResult?.log) {\n logList.push(planResult.log);\n }\n\n if (!planResult.more_actions_needed_by_instruction) {\n planningTask = null;\n break;\n }\n planningTask = this.planningTaskFromPrompt(\n userPrompt,\n logList.length > 0 ? `- ${logList.join('\\n- ')}` : undefined,\n actionContext,\n );\n replanCount++;\n }\n\n return {\n output: {\n yamlFlow,\n },\n executor: taskExecutor,\n };\n }\n\n async actionToGoal(\n userPrompt: string,\n opts?: {\n cacheable?: boolean;\n },\n ): Promise<\n ExecutionResult<\n | {\n yamlFlow?: MidsceneYamlFlowItem[]; // for cache use\n }\n | undefined\n >\n > {\n const taskExecutor = new Executor(taskTitleStr('Action', userPrompt), {\n onTaskStart: this.onTaskStartCallback,\n });\n this.conversationHistory = [];\n const isCompleted = false;\n let currentActionNumber = 0;\n const maxActionNumber = 40;\n\n const yamlFlow: MidsceneYamlFlowItem[] = [];\n while (!isCompleted && currentActionNumber < maxActionNumber) {\n currentActionNumber++;\n const planningTask: ExecutionTaskPlanningApply =\n this.planningTaskToGoal(userPrompt);\n await taskExecutor.append(planningTask);\n const result = await taskExecutor.flush();\n if (taskExecutor.isInErrorState()) {\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n if (!result) {\n throw new Error(\n 'result of taskExecutor.flush() is undefined in function actionToGoal',\n );\n }\n const { output } = result;\n const plans = output.actions;\n yamlFlow.push(...(output.yamlFlow || []));\n let executables: Awaited<ReturnType<typeof this.convertPlanToExecutable>>;\n try {\n executables = await this.convertPlanToExecutable(plans, opts);\n taskExecutor.append(executables.tasks);\n } catch (error) {\n return this.appendErrorPlan(\n taskExecutor,\n `Error converting plans to executable tasks: ${error}, plans: ${JSON.stringify(\n plans,\n )}`,\n );\n }\n\n await taskExecutor.flush();\n\n if (taskExecutor.isInErrorState()) {\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n\n if (plans[0].type === 'Finished') {\n break;\n }\n }\n return {\n output: {\n yamlFlow,\n },\n executor: taskExecutor,\n };\n }\n\n private async createTypeQueryTask<T>(\n type: 'Query' | 'Boolean' | 'Number' | 'String' | 'Assert',\n demand: InsightExtractParam,\n opt?: InsightExtractOption,\n multimodalPrompt?: TMultimodalPrompt,\n ): Promise<ExecutionResult<T>> {\n const taskExecutor = new Executor(\n taskTitleStr(\n type,\n typeof demand === 'string' ? demand : JSON.stringify(demand),\n ),\n {\n onTaskStart: this.onTaskStartCallback,\n },\n );\n\n const queryTask: ExecutionTaskInsightQueryApply = {\n type: 'Insight',\n subType: type,\n locate: null,\n param: {\n // TODO: display image thumbnail in report\n dataDemand: multimodalPrompt\n ? ({\n demand,\n multimodalPrompt,\n } as never)\n : demand, // for user param presentation in report right sidebar\n },\n executor: async (param, taskContext) => {\n const { task } = taskContext;\n let insightDump: InsightDump | undefined;\n const dumpCollector: DumpSubscriber = (dump) => {\n insightDump = dump;\n };\n this.insight.onceDumpUpdatedFn = dumpCollector;\n\n // Get page context for query operations\n const shotTime = Date.now();\n const pageContext = await this.insight.contextRetrieverFn('extract');\n task.pageContext = pageContext;\n\n const recordItem: ExecutionRecorderItem = {\n type: 'screenshot',\n ts: shotTime,\n screenshot: pageContext.screenshotBase64,\n timing: 'before Extract',\n };\n task.recorder = [recordItem];\n\n const ifTypeRestricted = type !== 'Query';\n let demandInput = demand;\n if (ifTypeRestricted) {\n const returnType = type === 'Assert' ? 'Boolean' : type;\n demandInput = {\n result: `${returnType}, ${demand}`,\n };\n }\n\n const { data, usage, thought } = await this.insight.extract<any>(\n demandInput,\n opt,\n multimodalPrompt,\n );\n\n let outputResult = data;\n if (ifTypeRestricted) {\n assert(data?.result !== undefined, 'No result in query data');\n outputResult = (data as any).result;\n }\n\n return {\n output: outputResult,\n log: { dump: insightDump },\n usage,\n thought,\n };\n },\n };\n\n await taskExecutor.append(this.prependExecutorWithScreenshot(queryTask));\n const result = await taskExecutor.flush();\n\n if (!result) {\n throw new Error(\n 'result of taskExecutor.flush() is undefined in function createTypeQueryTask',\n );\n }\n\n const { output, thought } = result;\n\n return {\n output,\n thought,\n executor: taskExecutor,\n };\n }\n\n async query(\n demand: InsightExtractParam,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult> {\n return this.createTypeQueryTask('Query', demand, opt);\n }\n\n async boolean(\n prompt: TUserPrompt,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult<boolean>> {\n const { textPrompt, multimodalPrompt } = parsePrompt(prompt);\n return this.createTypeQueryTask<boolean>(\n 'Boolean',\n textPrompt,\n opt,\n multimodalPrompt,\n );\n }\n\n async number(\n prompt: TUserPrompt,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult<number>> {\n const { textPrompt, multimodalPrompt } = parsePrompt(prompt);\n return this.createTypeQueryTask<number>(\n 'Number',\n textPrompt,\n opt,\n multimodalPrompt,\n );\n }\n\n async string(\n prompt: TUserPrompt,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult<string>> {\n const { textPrompt, multimodalPrompt } = parsePrompt(prompt);\n return this.createTypeQueryTask<string>(\n 'String',\n textPrompt,\n opt,\n multimodalPrompt,\n );\n }\n\n async assert(\n assertion: TUserPrompt,\n opt?: InsightExtractOption,\n ): Promise<ExecutionResult<boolean>> {\n const { textPrompt, multimodalPrompt } = parsePrompt(assertion);\n return await this.createTypeQueryTask<boolean>(\n 'Assert',\n textPrompt,\n opt,\n multimodalPrompt,\n );\n }\n\n /**\n * Append a message to the conversation history\n * For user messages with images:\n * - Keep max 4 user image messages in history\n * - Remove oldest user image message when limit reached\n * For assistant messages:\n * - Simply append to history\n * @param conversationHistory Message to append\n */\n private appendConversationHistory(\n conversationHistory: ChatCompletionMessageParam,\n ) {\n if (conversationHistory.role === 'user') {\n // Get all existing user messages with images\n const userImgItems = this.conversationHistory.filter(\n (item) => item.role === 'user',\n );\n\n // If we already have 4 user image messages\n if (userImgItems.length >= 4 && conversationHistory.role === 'user') {\n // Remove first user image message when we already have 4, before adding new one\n const firstUserImgIndex = this.conversationHistory.findIndex(\n (item) => item.role === 'user',\n );\n if (firstUserImgIndex >= 0) {\n this.conversationHistory.splice(firstUserImgIndex, 1);\n }\n }\n }\n // For non-user messages, simply append to history\n this.conversationHistory.push(conversationHistory);\n }\n\n private async appendErrorPlan(taskExecutor: Executor, errorMsg: string) {\n const errorPlan: PlanningAction<PlanningActionParamError> = {\n type: 'Error',\n param: {\n thought: errorMsg,\n },\n locate: null,\n };\n const { tasks } = await this.convertPlanToExecutable([errorPlan]);\n await taskExecutor.append(this.prependExecutorWithScreenshot(tasks[0]));\n await taskExecutor.flush();\n\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n\n async waitFor(\n assertion: string,\n opt: PlanningActionParamWaitFor,\n ): Promise<ExecutionResult<void>> {\n const description = `waitFor: ${assertion}`;\n const taskExecutor = new Executor(taskTitleStr('WaitFor', description), {\n onTaskStart: this.onTaskStartCallback,\n });\n const { timeoutMs, checkIntervalMs } = opt;\n\n assert(assertion, 'No assertion for waitFor');\n assert(timeoutMs, 'No timeoutMs for waitFor');\n assert(checkIntervalMs, 'No checkIntervalMs for waitFor');\n\n const overallStartTime = Date.now();\n let startTime = Date.now();\n let errorThought = '';\n while (Date.now() - overallStartTime < timeoutMs) {\n startTime = Date.now();\n const assertPlan: PlanningAction<PlanningActionParamAssert> = {\n type: 'AssertWithoutThrow',\n param: {\n assertion,\n },\n locate: null,\n };\n const { tasks: assertTasks } = await this.convertPlanToExecutable([\n assertPlan,\n ]);\n await taskExecutor.append(\n this.prependExecutorWithScreenshot(assertTasks[0]),\n );\n const result = await taskExecutor.flush();\n\n if (!result) {\n throw new Error(\n 'result of taskExecutor.flush() is undefined in function waitFor',\n );\n }\n\n const { output } = result as { output: InsightAssertionResponse };\n\n if (output?.pass) {\n return {\n output: undefined,\n executor: taskExecutor,\n };\n }\n\n errorThought =\n output?.thought ||\n `unknown error when waiting for assertion: ${assertion}`;\n const now = Date.now();\n if (now - startTime < checkIntervalMs) {\n const timeRemaining = checkIntervalMs - (now - startTime);\n const sleepPlan: PlanningAction<PlanningActionParamSleep> = {\n type: 'Sleep',\n param: {\n timeMs: timeRemaining,\n },\n locate: null,\n };\n const { tasks: sleepTasks } = await this.convertPlanToExecutable([\n sleepPlan,\n ]);\n await taskExecutor.append(\n this.prependExecutorWithScreenshot(sleepTasks[0]),\n );\n await taskExecutor.flush();\n }\n }\n\n return this.appendErrorPlan(\n taskExecutor,\n `waitFor timeout: ${errorThought}`,\n );\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","defaultReplanningCycleLimit","PageTaskExecutor","timing","base64","item","Date","pageContext","element","_element_attributes","elementId","undefined","xpaths","NodeType","info","elementByPositionWithElementInfo","result","error","taskApply","appendAfterExecution","taskWithScreenshot","param","context","args","recorder","task","shot","Promise","sleep","shot2","plans","opts","tasks","plan","_plan_locate","_plan_locate1","taskFind","taskContext","_this_taskCache","_locateCacheRecord_cacheContent","assert","insightDump","usage","dumpCollector","dump","_dump_taskInfo","shotTime","recordItem","elementFromXpath","userExpectedPathHitFlag","cachePrompt","locateCacheRecord","elementFromCache","matchElementFromCache","cacheHitFlag","elementFromPlan","matchElementFromPlan","planHitFlag","elementFromAiLocate","aiLocateHitFlag","currentXpaths","elementXpaths","Error","hitBy","assertPlan","taskAssert","assertion","_plan_param","taskActionError","taskActionFinished","taskActionSleep","taskParam","taskActionDrag","planType","_context_element","actionSpace","action","actionFn","wrappedTasks","index","executorContext","userInstruction","yamlString","taskExecutor","Executor","taskTitleStr","log","actionContext","startTime","Array","console","planResult","actions","more_actions_needed_by_instruction","rawResponse","stopCollecting","bboxCollected","planParsingError","finalActions","acc","planningAction","actionType","timeNow","timeRemaining","_actions_","imagePayload","resizeImageForUiTars","vlmPlanning","action_summary","title","output","userPrompt","planningTask","replanCount","logList","yamlFlow","replanningCycleLimit","getAIConfigInNumber","MIDSCENE_REPLANNING_CYCLE_LIMIT","errorMsg","executables","JSON","isCompleted","currentActionNumber","maxActionNumber","type","demand","opt","multimodalPrompt","queryTask","ifTypeRestricted","demandInput","returnType","data","thought","outputResult","prompt","textPrompt","parsePrompt","conversationHistory","userImgItems","firstUserImgIndex","errorPlan","description","timeoutMs","checkIntervalMs","overallStartTime","errorThought","assertTasks","now","sleepPlan","sleepTasks","page","insight"],"mappings":"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"}