@aiscene/core 9.0.6 → 9.0.8

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 (686) hide show
  1. package/dist/es/agent/agent.mjs +24 -11
  2. package/dist/es/agent/agent.mjs.map +1 -1
  3. package/dist/es/agent/cache-config.mjs +19 -0
  4. package/dist/es/agent/cache-config.mjs.map +1 -0
  5. package/dist/es/agent/file-chooser.mjs +82 -0
  6. package/dist/es/agent/file-chooser.mjs.map +1 -0
  7. package/dist/es/agent/insight.mjs +101 -0
  8. package/dist/es/agent/insight.mjs.map +1 -0
  9. package/dist/es/agent/metrics.mjs +81 -0
  10. package/dist/es/agent/metrics.mjs.map +1 -0
  11. package/dist/es/agent/progress/ai-act-progress.mjs +199 -0
  12. package/dist/es/agent/progress/ai-act-progress.mjs.map +1 -0
  13. package/dist/es/agent/progress/index.mjs +2 -0
  14. package/dist/es/agent/progress/progress-bus.mjs +52 -0
  15. package/dist/es/agent/progress/progress-bus.mjs.map +1 -0
  16. package/dist/es/agent/prompt-context.mjs +25 -0
  17. package/dist/es/agent/prompt-context.mjs.map +1 -0
  18. package/dist/es/agent/record-to-report.mjs +14 -0
  19. package/dist/es/agent/record-to-report.mjs.map +1 -0
  20. package/dist/es/agent/run-gherkin-scenario.mjs +114 -0
  21. package/dist/es/agent/run-gherkin-scenario.mjs.map +1 -0
  22. package/dist/es/agent/run-markdown.mjs +62 -0
  23. package/dist/es/agent/run-markdown.mjs.map +1 -0
  24. package/dist/es/agent/screenshot-preparation.mjs +37 -0
  25. package/dist/es/agent/screenshot-preparation.mjs.map +1 -0
  26. package/dist/es/agent/ui-observer.mjs +385 -0
  27. package/dist/es/agent/ui-observer.mjs.map +1 -0
  28. package/dist/es/agent/utils.mjs +42 -4
  29. package/dist/es/agent/utils.mjs.map +1 -1
  30. package/dist/es/ai-model/connectivity/fixture.mjs +8 -0
  31. package/dist/es/ai-model/connectivity/fixture.mjs.map +1 -0
  32. package/dist/es/ai-model/connectivity/index.mjs +2 -0
  33. package/dist/es/ai-model/connectivity/run-connectivity-test.mjs +160 -0
  34. package/dist/es/ai-model/connectivity/run-connectivity-test.mjs.map +1 -0
  35. package/dist/es/ai-model/conversation-history.mjs.map +1 -1
  36. package/dist/es/ai-model/index.mjs +2 -1
  37. package/dist/es/ai-model/inspect.mjs +1 -1
  38. package/dist/es/ai-model/inspect.mjs.map +1 -1
  39. package/dist/es/ai-model/model-adapter/chat-completion.mjs +69 -0
  40. package/dist/es/ai-model/model-adapter/chat-completion.mjs.map +1 -0
  41. package/dist/es/ai-model/model-adapter/custom-planning-action.mjs +6 -0
  42. package/dist/es/ai-model/model-adapter/custom-planning-action.mjs.map +1 -0
  43. package/dist/es/ai-model/model-adapter/custom-planning-types.mjs +0 -0
  44. package/dist/es/ai-model/model-adapter/default-insight-protocol.mjs +28 -0
  45. package/dist/es/ai-model/model-adapter/default-insight-protocol.mjs.map +1 -0
  46. package/dist/es/ai-model/model-adapter/default-locate-protocol.mjs +145 -0
  47. package/dist/es/ai-model/model-adapter/default-locate-protocol.mjs.map +1 -0
  48. package/dist/es/ai-model/model-adapter/default-planning-protocol.mjs +124 -0
  49. package/dist/es/ai-model/model-adapter/default-planning-protocol.mjs.map +1 -0
  50. package/dist/es/ai-model/model-adapter/image-preprocess.mjs +27 -0
  51. package/dist/es/ai-model/model-adapter/image-preprocess.mjs.map +1 -0
  52. package/dist/es/ai-model/model-adapter/index.mjs +2 -0
  53. package/dist/es/ai-model/model-adapter/insight-protocol.mjs +0 -0
  54. package/dist/es/ai-model/model-adapter/insight.mjs +13 -0
  55. package/dist/es/ai-model/model-adapter/insight.mjs.map +1 -0
  56. package/dist/es/ai-model/model-adapter/locate-protocol.mjs +0 -0
  57. package/dist/es/ai-model/model-adapter/locate.mjs +53 -0
  58. package/dist/es/ai-model/model-adapter/locate.mjs.map +1 -0
  59. package/dist/es/ai-model/model-adapter/planning-protocol.mjs +0 -0
  60. package/dist/es/ai-model/model-adapter/planning.mjs +49 -0
  61. package/dist/es/ai-model/model-adapter/planning.mjs.map +1 -0
  62. package/dist/es/ai-model/model-adapter/resolve.mjs +54 -0
  63. package/dist/es/ai-model/model-adapter/resolve.mjs.map +1 -0
  64. package/dist/es/ai-model/model-adapter/types.mjs +0 -0
  65. package/dist/es/ai-model/models/auto-glm/actions.mjs +205 -0
  66. package/dist/es/ai-model/models/auto-glm/actions.mjs.map +1 -0
  67. package/dist/es/ai-model/models/auto-glm/adapter.mjs +45 -0
  68. package/dist/es/ai-model/models/auto-glm/adapter.mjs.map +1 -0
  69. package/dist/es/ai-model/models/auto-glm/locate.mjs +11 -0
  70. package/dist/es/ai-model/models/auto-glm/locate.mjs.map +1 -0
  71. package/dist/es/ai-model/models/auto-glm/parser.mjs +217 -0
  72. package/dist/es/ai-model/models/auto-glm/parser.mjs.map +1 -0
  73. package/dist/es/ai-model/models/auto-glm/planning.mjs +33 -0
  74. package/dist/es/ai-model/models/auto-glm/planning.mjs.map +1 -0
  75. package/dist/es/ai-model/models/auto-glm/prompt.mjs +214 -0
  76. package/dist/es/ai-model/models/auto-glm/prompt.mjs.map +1 -0
  77. package/dist/es/ai-model/models/deepseek/adapter.mjs +79 -0
  78. package/dist/es/ai-model/models/deepseek/adapter.mjs.map +1 -0
  79. package/dist/es/ai-model/models/deepseek/locate-protocol.mjs +89 -0
  80. package/dist/es/ai-model/models/deepseek/locate-protocol.mjs.map +1 -0
  81. package/dist/es/ai-model/models/default.mjs +13 -0
  82. package/dist/es/ai-model/models/default.mjs.map +1 -0
  83. package/dist/es/ai-model/models/doubao.mjs +95 -0
  84. package/dist/es/ai-model/models/doubao.mjs.map +1 -0
  85. package/dist/es/ai-model/models/gemini.mjs +100 -0
  86. package/dist/es/ai-model/models/gemini.mjs.map +1 -0
  87. package/dist/es/ai-model/models/glm.mjs +46 -0
  88. package/dist/es/ai-model/models/glm.mjs.map +1 -0
  89. package/dist/es/ai-model/models/gpt.mjs +43 -0
  90. package/dist/es/ai-model/models/gpt.mjs.map +1 -0
  91. package/dist/es/ai-model/models/index.mjs +2 -0
  92. package/dist/es/ai-model/models/kimi.mjs +102 -0
  93. package/dist/es/ai-model/models/kimi.mjs.map +1 -0
  94. package/dist/es/ai-model/models/mimo.mjs +36 -0
  95. package/dist/es/ai-model/models/mimo.mjs.map +1 -0
  96. package/dist/es/ai-model/models/qwen.mjs +139 -0
  97. package/dist/es/ai-model/models/qwen.mjs.map +1 -0
  98. package/dist/es/ai-model/models/registry.mjs +51 -0
  99. package/dist/es/ai-model/models/registry.mjs.map +1 -0
  100. package/dist/es/ai-model/models/ui-tars/actions.mjs +147 -0
  101. package/dist/es/ai-model/models/ui-tars/actions.mjs.map +1 -0
  102. package/dist/es/ai-model/models/ui-tars/adapter.mjs +102 -0
  103. package/dist/es/ai-model/models/ui-tars/adapter.mjs.map +1 -0
  104. package/dist/es/ai-model/models/ui-tars/parser.mjs +40 -0
  105. package/dist/es/ai-model/models/ui-tars/parser.mjs.map +1 -0
  106. package/dist/es/ai-model/models/ui-tars/planning.mjs +25 -0
  107. package/dist/es/ai-model/models/ui-tars/planning.mjs.map +1 -0
  108. package/dist/es/ai-model/models/ui-tars/prompt.mjs +36 -0
  109. package/dist/es/ai-model/models/ui-tars/prompt.mjs.map +1 -0
  110. package/dist/es/ai-model/models/utils/intent.mjs +6 -0
  111. package/dist/es/ai-model/models/utils/intent.mjs.map +1 -0
  112. package/dist/es/ai-model/prompt/insight/index.mjs +3 -0
  113. package/dist/es/ai-model/prompt/insight/system-prompt.mjs +104 -0
  114. package/dist/es/ai-model/prompt/insight/system-prompt.mjs.map +1 -0
  115. package/dist/es/ai-model/prompt/insight/user-prompt.mjs +23 -0
  116. package/dist/es/ai-model/prompt/insight/user-prompt.mjs.map +1 -0
  117. package/dist/es/ai-model/prompt/locate/element-system-prompt.mjs +12 -0
  118. package/dist/es/ai-model/prompt/locate/element-system-prompt.mjs.map +1 -0
  119. package/dist/es/ai-model/prompt/locate/grounding-rules.mjs +13 -0
  120. package/dist/es/ai-model/prompt/locate/grounding-rules.mjs.map +1 -0
  121. package/dist/es/ai-model/prompt/locate/index.mjs +4 -0
  122. package/dist/es/ai-model/prompt/locate/search-area-system-prompt.mjs +9 -0
  123. package/dist/es/ai-model/prompt/locate/search-area-system-prompt.mjs.map +1 -0
  124. package/dist/es/ai-model/prompt/planning/action-output-example.mjs +52 -0
  125. package/dist/es/ai-model/prompt/planning/action-output-example.mjs.map +1 -0
  126. package/dist/es/ai-model/prompt/planning/action-space-description.mjs +28 -0
  127. package/dist/es/ai-model/prompt/planning/action-space-description.mjs.map +1 -0
  128. package/dist/es/ai-model/prompt/planning/index.mjs +6 -0
  129. package/dist/es/ai-model/prompt/planning/multi-turn-example.mjs +221 -0
  130. package/dist/es/ai-model/prompt/planning/multi-turn-example.mjs.map +1 -0
  131. package/dist/es/ai-model/prompt/planning/planning-response-example.mjs +25 -0
  132. package/dist/es/ai-model/prompt/planning/planning-response-example.mjs.map +1 -0
  133. package/dist/es/ai-model/prompt/planning/sub-goals-text.mjs +17 -0
  134. package/dist/es/ai-model/prompt/planning/sub-goals-text.mjs.map +1 -0
  135. package/dist/es/ai-model/prompt/planning/system-prompt.mjs +293 -0
  136. package/dist/es/ai-model/prompt/planning/system-prompt.mjs.map +1 -0
  137. package/dist/es/ai-model/service-caller/codex-app-server.mjs +1 -0
  138. package/dist/es/ai-model/service-caller/codex-app-server.mjs.map +1 -1
  139. package/dist/es/ai-model/service-caller/index.mjs +35 -16
  140. package/dist/es/ai-model/service-caller/index.mjs.map +1 -1
  141. package/dist/es/ai-model/service-caller/model-call-recorder.mjs +74 -0
  142. package/dist/es/ai-model/service-caller/model-call-recorder.mjs.map +1 -0
  143. package/dist/es/ai-model/service-caller/openai-error.mjs +147 -0
  144. package/dist/es/ai-model/service-caller/openai-error.mjs.map +1 -0
  145. package/dist/es/ai-model/service-caller/proxy-deps.node.mjs +9 -0
  146. package/dist/es/ai-model/service-caller/proxy-deps.node.mjs.map +1 -0
  147. package/dist/es/ai-model/service-caller/proxy-deps.stub.mjs +12 -0
  148. package/dist/es/ai-model/service-caller/proxy-deps.stub.mjs.map +1 -0
  149. package/dist/es/ai-model/service-caller/semantic-retry.mjs +33 -0
  150. package/dist/es/ai-model/service-caller/semantic-retry.mjs.map +1 -0
  151. package/dist/es/ai-model/service-caller/types.mjs +0 -0
  152. package/dist/es/ai-model/shared/action-schema.mjs +15 -0
  153. package/dist/es/ai-model/shared/action-schema.mjs.map +1 -0
  154. package/dist/es/ai-model/shared/json.mjs +63 -0
  155. package/dist/es/ai-model/shared/json.mjs.map +1 -0
  156. package/dist/es/ai-model/shared/model-locate-result/bbox.mjs +60 -0
  157. package/dist/es/ai-model/shared/model-locate-result/bbox.mjs.map +1 -0
  158. package/dist/es/ai-model/shared/model-locate-result/coordinate-distance.mjs +10 -0
  159. package/dist/es/ai-model/shared/model-locate-result/coordinate-distance.mjs.map +1 -0
  160. package/dist/es/ai-model/shared/model-locate-result/errors.mjs +9 -0
  161. package/dist/es/ai-model/shared/model-locate-result/errors.mjs.map +1 -0
  162. package/dist/es/ai-model/shared/model-locate-result/factory.mjs +39 -0
  163. package/dist/es/ai-model/shared/model-locate-result/factory.mjs.map +1 -0
  164. package/dist/es/ai-model/shared/model-locate-result/index.mjs +6 -0
  165. package/dist/es/ai-model/shared/model-locate-result/parse.mjs +45 -0
  166. package/dist/es/ai-model/shared/model-locate-result/parse.mjs.map +1 -0
  167. package/dist/es/ai-model/shared/model-locate-result/pixel-bbox-mapper.mjs +67 -0
  168. package/dist/es/ai-model/shared/model-locate-result/pixel-bbox-mapper.mjs.map +1 -0
  169. package/dist/es/ai-model/shared/model-locate-result/prompt-spec.mjs +110 -0
  170. package/dist/es/ai-model/shared/model-locate-result/prompt-spec.mjs.map +1 -0
  171. package/dist/es/ai-model/shared/model-locate-result/types.mjs +9 -0
  172. package/dist/es/ai-model/shared/model-locate-result/types.mjs.map +1 -0
  173. package/dist/es/ai-model/shared/multimodal-prompt.mjs +55 -0
  174. package/dist/es/ai-model/shared/multimodal-prompt.mjs.map +1 -0
  175. package/dist/es/ai-model/shared/xml.mjs +42 -0
  176. package/dist/es/ai-model/shared/xml.mjs.map +1 -0
  177. package/dist/es/ai-model/workflows/grounding/index.mjs +4 -0
  178. package/dist/es/ai-model/workflows/grounding/locate-result-rect.mjs +23 -0
  179. package/dist/es/ai-model/workflows/grounding/locate-result-rect.mjs.map +1 -0
  180. package/dist/es/ai-model/workflows/grounding/locate.mjs +168 -0
  181. package/dist/es/ai-model/workflows/grounding/locate.mjs.map +1 -0
  182. package/dist/es/ai-model/workflows/grounding/planning-action-locate.mjs +97 -0
  183. package/dist/es/ai-model/workflows/grounding/planning-action-locate.mjs.map +1 -0
  184. package/dist/es/ai-model/workflows/grounding/search-area-mapping.mjs +18 -0
  185. package/dist/es/ai-model/workflows/grounding/search-area-mapping.mjs.map +1 -0
  186. package/dist/es/ai-model/workflows/grounding/search-area.mjs +55 -0
  187. package/dist/es/ai-model/workflows/grounding/search-area.mjs.map +1 -0
  188. package/dist/es/ai-model/workflows/grounding/section-locate.mjs +146 -0
  189. package/dist/es/ai-model/workflows/grounding/section-locate.mjs.map +1 -0
  190. package/dist/es/ai-model/workflows/grounding/types.mjs +0 -0
  191. package/dist/es/ai-model/workflows/grounding/utils.mjs +50 -0
  192. package/dist/es/ai-model/workflows/grounding/utils.mjs.map +1 -0
  193. package/dist/es/ai-model/workflows/insight/extraction.mjs +101 -0
  194. package/dist/es/ai-model/workflows/insight/extraction.mjs.map +1 -0
  195. package/dist/es/ai-model/workflows/insight/index.mjs +3 -0
  196. package/dist/es/ai-model/workflows/insight/insight-response-parser.mjs +26 -0
  197. package/dist/es/ai-model/workflows/insight/insight-response-parser.mjs.map +1 -0
  198. package/dist/es/ai-model/workflows/insight/order-sensitive.mjs +29 -0
  199. package/dist/es/ai-model/workflows/insight/order-sensitive.mjs.map +1 -0
  200. package/dist/es/ai-model/workflows/planning/conversation-history.mjs +185 -0
  201. package/dist/es/ai-model/workflows/planning/conversation-history.mjs.map +1 -0
  202. package/dist/es/ai-model/workflows/planning/custom-planning.mjs +129 -0
  203. package/dist/es/ai-model/workflows/planning/custom-planning.mjs.map +1 -0
  204. package/dist/es/ai-model/workflows/planning/index.mjs +4 -0
  205. package/dist/es/ai-model/workflows/planning/locate-normalization.mjs +41 -0
  206. package/dist/es/ai-model/workflows/planning/locate-normalization.mjs.map +1 -0
  207. package/dist/es/ai-model/workflows/planning/planning-action-log.mjs +22 -0
  208. package/dist/es/ai-model/workflows/planning/planning-action-log.mjs.map +1 -0
  209. package/dist/es/ai-model/workflows/planning/standard-planning-parser.mjs +99 -0
  210. package/dist/es/ai-model/workflows/planning/standard-planning-parser.mjs.map +1 -0
  211. package/dist/es/ai-model/workflows/planning/standard-planning.mjs +219 -0
  212. package/dist/es/ai-model/workflows/planning/standard-planning.mjs.map +1 -0
  213. package/dist/es/ai-model/workflows/planning/types.mjs +0 -0
  214. package/dist/es/ai-model/workflows/recorder-generation/common.mjs +171 -0
  215. package/dist/es/ai-model/workflows/recorder-generation/common.mjs.map +1 -0
  216. package/dist/es/ai-model/workflows/recorder-generation/index.mjs +5 -0
  217. package/dist/es/ai-model/workflows/recorder-generation/markdown.mjs +253 -0
  218. package/dist/es/ai-model/workflows/recorder-generation/markdown.mjs.map +1 -0
  219. package/dist/es/ai-model/workflows/recorder-generation/metadata.mjs +83 -0
  220. package/dist/es/ai-model/workflows/recorder-generation/metadata.mjs.map +1 -0
  221. package/dist/es/ai-model/workflows/recorder-generation/playwright.mjs +123 -0
  222. package/dist/es/ai-model/workflows/recorder-generation/playwright.mjs.map +1 -0
  223. package/dist/es/ai-model/workflows/recorder-generation/yaml.mjs +162 -0
  224. package/dist/es/ai-model/workflows/recorder-generation/yaml.mjs.map +1 -0
  225. package/dist/es/common.mjs +12 -1
  226. package/dist/es/common.mjs.map +1 -1
  227. package/dist/es/constants.mjs +4 -0
  228. package/dist/es/constants.mjs.map +1 -0
  229. package/dist/es/device/index.mjs.map +1 -1
  230. package/dist/es/device/input-strategy.mjs +34 -0
  231. package/dist/es/device/input-strategy.mjs.map +1 -0
  232. package/dist/es/dump/html-utils.mjs +16 -1
  233. package/dist/es/dump/html-utils.mjs.map +1 -1
  234. package/dist/es/dump/image-reference.mjs +63 -0
  235. package/dist/es/dump/image-reference.mjs.map +1 -0
  236. package/dist/es/dump/report-action-dump.mjs +244 -0
  237. package/dist/es/dump/report-action-dump.mjs.map +1 -0
  238. package/dist/es/dump/report-dump-compactor.mjs +200 -0
  239. package/dist/es/dump/report-dump-compactor.mjs.map +1 -0
  240. package/dist/es/dump/screenshot-store.mjs +124 -37
  241. package/dist/es/dump/screenshot-store.mjs.map +1 -1
  242. package/dist/es/dump/task-service-dump.mjs +17 -0
  243. package/dist/es/dump/task-service-dump.mjs.map +1 -0
  244. package/dist/es/dump/task-status.mjs +18 -0
  245. package/dist/es/dump/task-status.mjs.map +1 -0
  246. package/dist/es/element-describer.mjs +198 -0
  247. package/dist/es/element-describer.mjs.map +1 -0
  248. package/dist/es/errors.mjs +20 -0
  249. package/dist/es/errors.mjs.map +1 -0
  250. package/dist/es/report-html-template.mjs +4 -0
  251. package/dist/es/report-html-template.mjs.map +1 -0
  252. package/dist/es/report-stats.mjs +113 -0
  253. package/dist/es/report-stats.mjs.map +1 -0
  254. package/dist/es/screenshot-item.mjs +7 -2
  255. package/dist/es/screenshot-item.mjs.map +1 -1
  256. package/dist/es/service/index.mjs +10 -5
  257. package/dist/es/service/index.mjs.map +1 -1
  258. package/dist/es/task-runner.mjs.map +1 -1
  259. package/dist/es/types.mjs.map +1 -1
  260. package/dist/es/utils.mjs +1 -1
  261. package/dist/es/yaml/cleanup.mjs +13 -0
  262. package/dist/es/yaml/cleanup.mjs.map +1 -0
  263. package/dist/lib/agent/agent.js +24 -11
  264. package/dist/lib/agent/agent.js.map +1 -1
  265. package/dist/lib/agent/cache-config.js +53 -0
  266. package/dist/lib/agent/cache-config.js.map +1 -0
  267. package/dist/lib/agent/file-chooser.js +125 -0
  268. package/dist/lib/agent/file-chooser.js.map +1 -0
  269. package/dist/lib/agent/insight.js +135 -0
  270. package/dist/lib/agent/insight.js.map +1 -0
  271. package/dist/lib/agent/metrics.js +115 -0
  272. package/dist/lib/agent/metrics.js.map +1 -0
  273. package/dist/lib/agent/progress/ai-act-progress.js +239 -0
  274. package/dist/lib/agent/progress/ai-act-progress.js.map +1 -0
  275. package/dist/lib/agent/progress/index.js +67 -0
  276. package/dist/lib/agent/progress/index.js.map +1 -0
  277. package/dist/lib/agent/progress/progress-bus.js +86 -0
  278. package/dist/lib/agent/progress/progress-bus.js.map +1 -0
  279. package/dist/lib/agent/prompt-context.js +62 -0
  280. package/dist/lib/agent/prompt-context.js.map +1 -0
  281. package/dist/lib/agent/record-to-report.js +48 -0
  282. package/dist/lib/agent/record-to-report.js.map +1 -0
  283. package/dist/lib/agent/run-gherkin-scenario.js +151 -0
  284. package/dist/lib/agent/run-gherkin-scenario.js.map +1 -0
  285. package/dist/lib/agent/run-markdown.js +96 -0
  286. package/dist/lib/agent/run-markdown.js.map +1 -0
  287. package/dist/lib/agent/screenshot-preparation.js +74 -0
  288. package/dist/lib/agent/screenshot-preparation.js.map +1 -0
  289. package/dist/lib/agent/ui-observer.js +425 -0
  290. package/dist/lib/agent/ui-observer.js.map +1 -0
  291. package/dist/lib/agent/utils.js +46 -2
  292. package/dist/lib/agent/utils.js.map +1 -1
  293. package/dist/lib/ai-model/connectivity/fixture.js +45 -0
  294. package/dist/lib/ai-model/connectivity/fixture.js.map +1 -0
  295. package/dist/lib/ai-model/connectivity/index.js +38 -0
  296. package/dist/lib/ai-model/connectivity/index.js.map +1 -0
  297. package/dist/lib/ai-model/connectivity/run-connectivity-test.js +204 -0
  298. package/dist/lib/ai-model/connectivity/run-connectivity-test.js.map +1 -0
  299. package/dist/lib/ai-model/conversation-history.js.map +1 -1
  300. package/dist/lib/ai-model/index.js +15 -11
  301. package/dist/lib/ai-model/inspect.js +1 -1
  302. package/dist/lib/ai-model/inspect.js.map +1 -1
  303. package/dist/lib/ai-model/model-adapter/chat-completion.js +103 -0
  304. package/dist/lib/ai-model/model-adapter/chat-completion.js.map +1 -0
  305. package/dist/lib/ai-model/model-adapter/custom-planning-action.js +40 -0
  306. package/dist/lib/ai-model/model-adapter/custom-planning-action.js.map +1 -0
  307. package/dist/lib/ai-model/model-adapter/custom-planning-types.js +20 -0
  308. package/dist/lib/ai-model/model-adapter/custom-planning-types.js.map +1 -0
  309. package/dist/lib/ai-model/model-adapter/default-insight-protocol.js +62 -0
  310. package/dist/lib/ai-model/model-adapter/default-insight-protocol.js.map +1 -0
  311. package/dist/lib/ai-model/model-adapter/default-locate-protocol.js +182 -0
  312. package/dist/lib/ai-model/model-adapter/default-locate-protocol.js.map +1 -0
  313. package/dist/lib/ai-model/model-adapter/default-planning-protocol.js +170 -0
  314. package/dist/lib/ai-model/model-adapter/default-planning-protocol.js.map +1 -0
  315. package/dist/lib/ai-model/model-adapter/image-preprocess.js +61 -0
  316. package/dist/lib/ai-model/model-adapter/image-preprocess.js.map +1 -0
  317. package/dist/lib/ai-model/model-adapter/index.js +38 -0
  318. package/dist/lib/ai-model/model-adapter/index.js.map +1 -0
  319. package/dist/lib/ai-model/model-adapter/insight-protocol.js +20 -0
  320. package/dist/lib/ai-model/model-adapter/insight-protocol.js.map +1 -0
  321. package/dist/lib/ai-model/model-adapter/insight.js +50 -0
  322. package/dist/lib/ai-model/model-adapter/insight.js.map +1 -0
  323. package/dist/lib/ai-model/model-adapter/locate-protocol.js +20 -0
  324. package/dist/lib/ai-model/model-adapter/locate-protocol.js.map +1 -0
  325. package/dist/lib/ai-model/model-adapter/locate.js +87 -0
  326. package/dist/lib/ai-model/model-adapter/locate.js.map +1 -0
  327. package/dist/lib/ai-model/model-adapter/planning-protocol.js +20 -0
  328. package/dist/lib/ai-model/model-adapter/planning-protocol.js.map +1 -0
  329. package/dist/lib/ai-model/model-adapter/planning.js +86 -0
  330. package/dist/lib/ai-model/model-adapter/planning.js.map +1 -0
  331. package/dist/lib/ai-model/model-adapter/resolve.js +88 -0
  332. package/dist/lib/ai-model/model-adapter/resolve.js.map +1 -0
  333. package/dist/lib/ai-model/model-adapter/types.js +20 -0
  334. package/dist/lib/ai-model/model-adapter/types.js.map +1 -0
  335. package/dist/lib/ai-model/models/auto-glm/actions.js +239 -0
  336. package/dist/lib/ai-model/models/auto-glm/actions.js.map +1 -0
  337. package/dist/lib/ai-model/models/auto-glm/adapter.js +79 -0
  338. package/dist/lib/ai-model/models/auto-glm/adapter.js.map +1 -0
  339. package/dist/lib/ai-model/models/auto-glm/locate.js +45 -0
  340. package/dist/lib/ai-model/models/auto-glm/locate.js.map +1 -0
  341. package/dist/lib/ai-model/models/auto-glm/parser.js +260 -0
  342. package/dist/lib/ai-model/models/auto-glm/parser.js.map +1 -0
  343. package/dist/lib/ai-model/models/auto-glm/planning.js +67 -0
  344. package/dist/lib/ai-model/models/auto-glm/planning.js.map +1 -0
  345. package/dist/lib/ai-model/models/auto-glm/prompt.js +257 -0
  346. package/dist/lib/ai-model/models/auto-glm/prompt.js.map +1 -0
  347. package/dist/lib/ai-model/models/deepseek/adapter.js +113 -0
  348. package/dist/lib/ai-model/models/deepseek/adapter.js.map +1 -0
  349. package/dist/lib/ai-model/models/deepseek/locate-protocol.js +132 -0
  350. package/dist/lib/ai-model/models/deepseek/locate-protocol.js.map +1 -0
  351. package/dist/lib/ai-model/models/default.js +47 -0
  352. package/dist/lib/ai-model/models/default.js.map +1 -0
  353. package/dist/lib/ai-model/models/doubao.js +132 -0
  354. package/dist/lib/ai-model/models/doubao.js.map +1 -0
  355. package/dist/lib/ai-model/models/gemini.js +137 -0
  356. package/dist/lib/ai-model/models/gemini.js.map +1 -0
  357. package/dist/lib/ai-model/models/glm.js +80 -0
  358. package/dist/lib/ai-model/models/glm.js.map +1 -0
  359. package/dist/lib/ai-model/models/gpt.js +77 -0
  360. package/dist/lib/ai-model/models/gpt.js.map +1 -0
  361. package/dist/lib/ai-model/models/index.js +41 -0
  362. package/dist/lib/ai-model/models/index.js.map +1 -0
  363. package/dist/lib/ai-model/models/kimi.js +136 -0
  364. package/dist/lib/ai-model/models/kimi.js.map +1 -0
  365. package/dist/lib/ai-model/models/mimo.js +70 -0
  366. package/dist/lib/ai-model/models/mimo.js.map +1 -0
  367. package/dist/lib/ai-model/models/qwen.js +173 -0
  368. package/dist/lib/ai-model/models/qwen.js.map +1 -0
  369. package/dist/lib/ai-model/models/registry.js +91 -0
  370. package/dist/lib/ai-model/models/registry.js.map +1 -0
  371. package/dist/lib/ai-model/models/ui-tars/actions.js +181 -0
  372. package/dist/lib/ai-model/models/ui-tars/actions.js.map +1 -0
  373. package/dist/lib/ai-model/models/ui-tars/adapter.js +136 -0
  374. package/dist/lib/ai-model/models/ui-tars/adapter.js.map +1 -0
  375. package/dist/lib/ai-model/models/ui-tars/parser.js +74 -0
  376. package/dist/lib/ai-model/models/ui-tars/parser.js.map +1 -0
  377. package/dist/lib/ai-model/models/ui-tars/planning.js +59 -0
  378. package/dist/lib/ai-model/models/ui-tars/planning.js.map +1 -0
  379. package/dist/lib/ai-model/models/ui-tars/prompt.js +73 -0
  380. package/dist/lib/ai-model/models/ui-tars/prompt.js.map +1 -0
  381. package/dist/lib/ai-model/models/utils/intent.js +40 -0
  382. package/dist/lib/ai-model/models/utils/intent.js.map +1 -0
  383. package/dist/lib/ai-model/prompt/insight/index.js +45 -0
  384. package/dist/lib/ai-model/prompt/insight/index.js.map +1 -0
  385. package/dist/lib/ai-model/prompt/insight/system-prompt.js +138 -0
  386. package/dist/lib/ai-model/prompt/insight/system-prompt.js.map +1 -0
  387. package/dist/lib/ai-model/prompt/insight/user-prompt.js +60 -0
  388. package/dist/lib/ai-model/prompt/insight/user-prompt.js.map +1 -0
  389. package/dist/lib/ai-model/prompt/locate/element-system-prompt.js +46 -0
  390. package/dist/lib/ai-model/prompt/locate/element-system-prompt.js.map +1 -0
  391. package/dist/lib/ai-model/prompt/locate/grounding-rules.js +47 -0
  392. package/dist/lib/ai-model/prompt/locate/grounding-rules.js.map +1 -0
  393. package/dist/lib/ai-model/prompt/locate/index.js +46 -0
  394. package/dist/lib/ai-model/prompt/locate/index.js.map +1 -0
  395. package/dist/lib/ai-model/prompt/locate/search-area-system-prompt.js +43 -0
  396. package/dist/lib/ai-model/prompt/locate/search-area-system-prompt.js.map +1 -0
  397. package/dist/lib/ai-model/prompt/planning/action-output-example.js +92 -0
  398. package/dist/lib/ai-model/prompt/planning/action-output-example.js.map +1 -0
  399. package/dist/lib/ai-model/prompt/planning/action-space-description.js +75 -0
  400. package/dist/lib/ai-model/prompt/planning/action-space-description.js.map +1 -0
  401. package/dist/lib/ai-model/prompt/planning/index.js +63 -0
  402. package/dist/lib/ai-model/prompt/planning/index.js.map +1 -0
  403. package/dist/lib/ai-model/prompt/planning/multi-turn-example.js +255 -0
  404. package/dist/lib/ai-model/prompt/planning/multi-turn-example.js.map +1 -0
  405. package/dist/lib/ai-model/prompt/planning/planning-response-example.js +59 -0
  406. package/dist/lib/ai-model/prompt/planning/planning-response-example.js.map +1 -0
  407. package/dist/lib/ai-model/prompt/planning/sub-goals-text.js +51 -0
  408. package/dist/lib/ai-model/prompt/planning/sub-goals-text.js.map +1 -0
  409. package/dist/lib/ai-model/prompt/planning/system-prompt.js +327 -0
  410. package/dist/lib/ai-model/prompt/planning/system-prompt.js.map +1 -0
  411. package/dist/lib/ai-model/service-caller/codex-app-server.js +1 -0
  412. package/dist/lib/ai-model/service-caller/codex-app-server.js.map +1 -1
  413. package/dist/lib/ai-model/service-caller/index.js +35 -16
  414. package/dist/lib/ai-model/service-caller/index.js.map +1 -1
  415. package/dist/lib/ai-model/service-caller/model-call-recorder.js +124 -0
  416. package/dist/lib/ai-model/service-caller/model-call-recorder.js.map +1 -0
  417. package/dist/lib/ai-model/service-caller/openai-error.js +184 -0
  418. package/dist/lib/ai-model/service-caller/openai-error.js.map +1 -0
  419. package/dist/lib/ai-model/service-caller/proxy-deps.node.js +46 -0
  420. package/dist/lib/ai-model/service-caller/proxy-deps.node.js.map +1 -0
  421. package/dist/lib/ai-model/service-caller/proxy-deps.stub.js +49 -0
  422. package/dist/lib/ai-model/service-caller/proxy-deps.stub.js.map +1 -0
  423. package/dist/lib/ai-model/service-caller/semantic-retry.js +70 -0
  424. package/dist/lib/ai-model/service-caller/semantic-retry.js.map +1 -0
  425. package/dist/lib/ai-model/service-caller/types.js +20 -0
  426. package/dist/lib/ai-model/service-caller/types.js.map +1 -0
  427. package/dist/lib/ai-model/shared/action-schema.js +49 -0
  428. package/dist/lib/ai-model/shared/action-schema.js.map +1 -0
  429. package/dist/lib/ai-model/shared/json.js +103 -0
  430. package/dist/lib/ai-model/shared/json.js.map +1 -0
  431. package/dist/lib/ai-model/shared/model-locate-result/bbox.js +106 -0
  432. package/dist/lib/ai-model/shared/model-locate-result/bbox.js.map +1 -0
  433. package/dist/lib/ai-model/shared/model-locate-result/coordinate-distance.js +44 -0
  434. package/dist/lib/ai-model/shared/model-locate-result/coordinate-distance.js.map +1 -0
  435. package/dist/lib/ai-model/shared/model-locate-result/errors.js +46 -0
  436. package/dist/lib/ai-model/shared/model-locate-result/errors.js.map +1 -0
  437. package/dist/lib/ai-model/shared/model-locate-result/factory.js +76 -0
  438. package/dist/lib/ai-model/shared/model-locate-result/factory.js.map +1 -0
  439. package/dist/lib/ai-model/shared/model-locate-result/index.js +66 -0
  440. package/dist/lib/ai-model/shared/model-locate-result/index.js.map +1 -0
  441. package/dist/lib/ai-model/shared/model-locate-result/parse.js +88 -0
  442. package/dist/lib/ai-model/shared/model-locate-result/parse.js.map +1 -0
  443. package/dist/lib/ai-model/shared/model-locate-result/pixel-bbox-mapper.js +101 -0
  444. package/dist/lib/ai-model/shared/model-locate-result/pixel-bbox-mapper.js.map +1 -0
  445. package/dist/lib/ai-model/shared/model-locate-result/prompt-spec.js +156 -0
  446. package/dist/lib/ai-model/shared/model-locate-result/prompt-spec.js.map +1 -0
  447. package/dist/lib/ai-model/shared/model-locate-result/types.js +46 -0
  448. package/dist/lib/ai-model/shared/model-locate-result/types.js.map +1 -0
  449. package/dist/lib/ai-model/shared/multimodal-prompt.js +95 -0
  450. package/dist/lib/ai-model/shared/multimodal-prompt.js.map +1 -0
  451. package/dist/lib/ai-model/shared/xml.js +79 -0
  452. package/dist/lib/ai-model/shared/xml.js.map +1 -0
  453. package/dist/lib/ai-model/workflows/grounding/index.js +46 -0
  454. package/dist/lib/ai-model/workflows/grounding/index.js.map +1 -0
  455. package/dist/lib/ai-model/workflows/grounding/locate-result-rect.js +60 -0
  456. package/dist/lib/ai-model/workflows/grounding/locate-result-rect.js.map +1 -0
  457. package/dist/lib/ai-model/workflows/grounding/locate.js +208 -0
  458. package/dist/lib/ai-model/workflows/grounding/locate.js.map +1 -0
  459. package/dist/lib/ai-model/workflows/grounding/planning-action-locate.js +131 -0
  460. package/dist/lib/ai-model/workflows/grounding/planning-action-locate.js.map +1 -0
  461. package/dist/lib/ai-model/workflows/grounding/search-area-mapping.js +52 -0
  462. package/dist/lib/ai-model/workflows/grounding/search-area-mapping.js.map +1 -0
  463. package/dist/lib/ai-model/workflows/grounding/search-area.js +92 -0
  464. package/dist/lib/ai-model/workflows/grounding/search-area.js.map +1 -0
  465. package/dist/lib/ai-model/workflows/grounding/section-locate.js +180 -0
  466. package/dist/lib/ai-model/workflows/grounding/section-locate.js.map +1 -0
  467. package/dist/lib/ai-model/workflows/grounding/types.js +20 -0
  468. package/dist/lib/ai-model/workflows/grounding/types.js.map +1 -0
  469. package/dist/lib/ai-model/workflows/grounding/utils.js +87 -0
  470. package/dist/lib/ai-model/workflows/grounding/utils.js.map +1 -0
  471. package/dist/lib/ai-model/workflows/insight/extraction.js +135 -0
  472. package/dist/lib/ai-model/workflows/insight/extraction.js.map +1 -0
  473. package/dist/lib/ai-model/workflows/insight/index.js +42 -0
  474. package/dist/lib/ai-model/workflows/insight/index.js.map +1 -0
  475. package/dist/lib/ai-model/workflows/insight/insight-response-parser.js +60 -0
  476. package/dist/lib/ai-model/workflows/insight/insight-response-parser.js.map +1 -0
  477. package/dist/lib/ai-model/workflows/insight/order-sensitive.js +63 -0
  478. package/dist/lib/ai-model/workflows/insight/order-sensitive.js.map +1 -0
  479. package/dist/lib/ai-model/workflows/planning/conversation-history.js +219 -0
  480. package/dist/lib/ai-model/workflows/planning/conversation-history.js.map +1 -0
  481. package/dist/lib/ai-model/workflows/planning/custom-planning.js +166 -0
  482. package/dist/lib/ai-model/workflows/planning/custom-planning.js.map +1 -0
  483. package/dist/lib/ai-model/workflows/planning/index.js +49 -0
  484. package/dist/lib/ai-model/workflows/planning/index.js.map +1 -0
  485. package/dist/lib/ai-model/workflows/planning/locate-normalization.js +75 -0
  486. package/dist/lib/ai-model/workflows/planning/locate-normalization.js.map +1 -0
  487. package/dist/lib/ai-model/workflows/planning/planning-action-log.js +56 -0
  488. package/dist/lib/ai-model/workflows/planning/planning-action-log.js.map +1 -0
  489. package/dist/lib/ai-model/workflows/planning/standard-planning-parser.js +142 -0
  490. package/dist/lib/ai-model/workflows/planning/standard-planning-parser.js.map +1 -0
  491. package/dist/lib/ai-model/workflows/planning/standard-planning.js +253 -0
  492. package/dist/lib/ai-model/workflows/planning/standard-planning.js.map +1 -0
  493. package/dist/lib/ai-model/workflows/planning/types.js +20 -0
  494. package/dist/lib/ai-model/workflows/planning/types.js.map +1 -0
  495. package/dist/lib/ai-model/workflows/recorder-generation/common.js +232 -0
  496. package/dist/lib/ai-model/workflows/recorder-generation/common.js.map +1 -0
  497. package/dist/lib/ai-model/workflows/recorder-generation/index.js +68 -0
  498. package/dist/lib/ai-model/workflows/recorder-generation/index.js.map +1 -0
  499. package/dist/lib/ai-model/workflows/recorder-generation/markdown.js +293 -0
  500. package/dist/lib/ai-model/workflows/recorder-generation/markdown.js.map +1 -0
  501. package/dist/lib/ai-model/workflows/recorder-generation/metadata.js +117 -0
  502. package/dist/lib/ai-model/workflows/recorder-generation/metadata.js.map +1 -0
  503. package/dist/lib/ai-model/workflows/recorder-generation/playwright.js +184 -0
  504. package/dist/lib/ai-model/workflows/recorder-generation/playwright.js.map +1 -0
  505. package/dist/lib/ai-model/workflows/recorder-generation/yaml.js +232 -0
  506. package/dist/lib/ai-model/workflows/recorder-generation/yaml.js.map +1 -0
  507. package/dist/lib/common.js +18 -1
  508. package/dist/lib/common.js.map +1 -1
  509. package/dist/lib/constants.js +38 -0
  510. package/dist/lib/constants.js.map +1 -0
  511. package/dist/lib/device/index.js.map +1 -1
  512. package/dist/lib/device/input-strategy.js +80 -0
  513. package/dist/lib/device/input-strategy.js.map +1 -0
  514. package/dist/lib/dump/html-utils.js +18 -0
  515. package/dist/lib/dump/html-utils.js.map +1 -1
  516. package/dist/lib/dump/image-reference.js +115 -0
  517. package/dist/lib/dump/image-reference.js.map +1 -0
  518. package/dist/lib/dump/report-action-dump.js +284 -0
  519. package/dist/lib/dump/report-action-dump.js.map +1 -0
  520. package/dist/lib/dump/report-dump-compactor.js +234 -0
  521. package/dist/lib/dump/report-dump-compactor.js.map +1 -0
  522. package/dist/lib/dump/screenshot-store.js +146 -38
  523. package/dist/lib/dump/screenshot-store.js.map +1 -1
  524. package/dist/lib/dump/task-service-dump.js +54 -0
  525. package/dist/lib/dump/task-service-dump.js.map +1 -0
  526. package/dist/lib/dump/task-status.js +55 -0
  527. package/dist/lib/dump/task-status.js.map +1 -0
  528. package/dist/lib/element-describer.js +238 -0
  529. package/dist/lib/element-describer.js.map +1 -0
  530. package/dist/lib/errors.js +54 -0
  531. package/dist/lib/errors.js.map +1 -0
  532. package/dist/lib/report-html-template.js +38 -0
  533. package/dist/lib/report-html-template.js.map +1 -0
  534. package/dist/lib/report-stats.js +147 -0
  535. package/dist/lib/report-stats.js.map +1 -0
  536. package/dist/lib/screenshot-item.js +7 -2
  537. package/dist/lib/screenshot-item.js.map +1 -1
  538. package/dist/lib/service/index.js +10 -5
  539. package/dist/lib/service/index.js.map +1 -1
  540. package/dist/lib/task-runner.js.map +1 -1
  541. package/dist/lib/types.js +2 -2
  542. package/dist/lib/types.js.map +1 -1
  543. package/dist/lib/utils.js +1 -1
  544. package/dist/lib/yaml/cleanup.js +47 -0
  545. package/dist/lib/yaml/cleanup.js.map +1 -0
  546. package/dist/types/agent/agent.d.ts +5 -9
  547. package/dist/types/agent/cache-config.d.ts +2 -0
  548. package/dist/types/agent/file-chooser.d.ts +19 -0
  549. package/dist/types/agent/insight.d.ts +21 -0
  550. package/dist/types/agent/metrics.d.ts +48 -0
  551. package/dist/types/agent/progress/ai-act-progress.d.ts +21 -0
  552. package/dist/types/agent/progress/index.d.ts +2 -0
  553. package/dist/types/agent/progress/progress-bus.d.ts +33 -0
  554. package/dist/types/agent/prompt-context.d.ts +3 -0
  555. package/dist/types/agent/record-to-report.d.ts +2 -0
  556. package/dist/types/agent/run-gherkin-scenario.d.ts +26 -0
  557. package/dist/types/agent/run-markdown.d.ts +6 -0
  558. package/dist/types/agent/screenshot-preparation.d.ts +20 -0
  559. package/dist/types/agent/ui-observer.d.ts +103 -0
  560. package/dist/types/agent/utils.d.ts +12 -1
  561. package/dist/types/ai-model/connectivity/fixture.d.ts +5 -0
  562. package/dist/types/ai-model/connectivity/index.d.ts +1 -0
  563. package/dist/types/ai-model/connectivity/run-connectivity-test.d.ts +11 -0
  564. package/dist/types/ai-model/index.d.ts +2 -0
  565. package/dist/types/ai-model/model-adapter/chat-completion.d.ts +2 -0
  566. package/dist/types/ai-model/model-adapter/custom-planning-action.d.ts +25 -0
  567. package/dist/types/ai-model/model-adapter/custom-planning-types.d.ts +31 -0
  568. package/dist/types/ai-model/model-adapter/default-insight-protocol.d.ts +2 -0
  569. package/dist/types/ai-model/model-adapter/default-locate-protocol.d.ts +7 -0
  570. package/dist/types/ai-model/model-adapter/default-planning-protocol.d.ts +25 -0
  571. package/dist/types/ai-model/model-adapter/image-preprocess.d.ts +30 -0
  572. package/dist/types/ai-model/model-adapter/index.d.ts +2 -0
  573. package/dist/types/ai-model/model-adapter/insight-protocol.d.ts +24 -0
  574. package/dist/types/ai-model/model-adapter/insight.d.ts +3 -0
  575. package/dist/types/ai-model/model-adapter/locate-protocol.d.ts +23 -0
  576. package/dist/types/ai-model/model-adapter/locate.d.ts +4 -0
  577. package/dist/types/ai-model/model-adapter/planning-protocol.d.ts +53 -0
  578. package/dist/types/ai-model/model-adapter/planning.d.ts +6 -0
  579. package/dist/types/ai-model/model-adapter/resolve.d.ts +12 -0
  580. package/dist/types/ai-model/model-adapter/types.d.ts +218 -0
  581. package/dist/types/ai-model/models/auto-glm/actions.d.ts +81 -0
  582. package/dist/types/ai-model/models/auto-glm/adapter.d.ts +5 -0
  583. package/dist/types/ai-model/models/auto-glm/locate.d.ts +2 -0
  584. package/dist/types/ai-model/models/auto-glm/parser.d.ts +14 -0
  585. package/dist/types/ai-model/models/auto-glm/planning.d.ts +5 -0
  586. package/dist/types/ai-model/models/auto-glm/prompt.d.ts +4 -0
  587. package/dist/types/ai-model/models/deepseek/adapter.d.ts +39 -0
  588. package/dist/types/ai-model/models/deepseek/locate-protocol.d.ts +5 -0
  589. package/dist/types/ai-model/models/default.d.ts +2 -0
  590. package/dist/types/ai-model/models/doubao.d.ts +7 -0
  591. package/dist/types/ai-model/models/gemini.d.ts +37 -0
  592. package/dist/types/ai-model/models/glm.d.ts +21 -0
  593. package/dist/types/ai-model/models/gpt.d.ts +20 -0
  594. package/dist/types/ai-model/models/index.d.ts +2 -0
  595. package/dist/types/ai-model/models/kimi.d.ts +45 -0
  596. package/dist/types/ai-model/models/mimo.d.ts +10 -0
  597. package/dist/types/ai-model/models/qwen.d.ts +33 -0
  598. package/dist/types/ai-model/models/registry.d.ts +187 -0
  599. package/dist/types/ai-model/models/ui-tars/actions.d.ts +3 -0
  600. package/dist/types/ai-model/models/ui-tars/adapter.d.ts +6 -0
  601. package/dist/types/ai-model/models/ui-tars/parser.d.ts +72 -0
  602. package/dist/types/ai-model/models/ui-tars/planning.d.ts +4 -0
  603. package/dist/types/ai-model/models/ui-tars/prompt.d.ts +2 -0
  604. package/dist/types/ai-model/models/utils/intent.d.ts +2 -0
  605. package/dist/types/ai-model/prompt/insight/index.d.ts +2 -0
  606. package/dist/types/ai-model/prompt/insight/system-prompt.d.ts +6 -0
  607. package/dist/types/ai-model/prompt/insight/user-prompt.d.ts +3 -0
  608. package/dist/types/ai-model/prompt/locate/element-system-prompt.d.ts +4 -0
  609. package/dist/types/ai-model/prompt/locate/grounding-rules.d.ts +1 -0
  610. package/dist/types/ai-model/prompt/locate/index.d.ts +3 -0
  611. package/dist/types/ai-model/prompt/locate/search-area-system-prompt.d.ts +4 -0
  612. package/dist/types/ai-model/prompt/planning/action-output-example.d.ts +17 -0
  613. package/dist/types/ai-model/prompt/planning/action-space-description.d.ts +11 -0
  614. package/dist/types/ai-model/prompt/planning/index.d.ts +6 -0
  615. package/dist/types/ai-model/prompt/planning/multi-turn-example.d.ts +10 -0
  616. package/dist/types/ai-model/prompt/planning/planning-response-example.d.ts +28 -0
  617. package/dist/types/ai-model/prompt/planning/sub-goals-text.d.ts +2 -0
  618. package/dist/types/ai-model/prompt/planning/system-prompt.d.ts +18 -0
  619. package/dist/types/ai-model/service-caller/index.d.ts +21 -6
  620. package/dist/types/ai-model/service-caller/model-call-recorder.d.ts +12 -0
  621. package/dist/types/ai-model/service-caller/openai-error.d.ts +26 -0
  622. package/dist/types/ai-model/service-caller/proxy-deps.node.d.ts +2 -0
  623. package/dist/types/ai-model/service-caller/proxy-deps.stub.d.ts +2 -0
  624. package/dist/types/ai-model/service-caller/semantic-retry.d.ts +30 -0
  625. package/dist/types/ai-model/service-caller/types.d.ts +2 -0
  626. package/dist/types/ai-model/shared/action-schema.d.ts +4 -0
  627. package/dist/types/ai-model/shared/json.d.ts +26 -0
  628. package/dist/types/ai-model/shared/model-locate-result/bbox.d.ts +6 -0
  629. package/dist/types/ai-model/shared/model-locate-result/coordinate-distance.d.ts +4 -0
  630. package/dist/types/ai-model/shared/model-locate-result/errors.d.ts +2 -0
  631. package/dist/types/ai-model/shared/model-locate-result/factory.d.ts +3 -0
  632. package/dist/types/ai-model/shared/model-locate-result/index.d.ts +7 -0
  633. package/dist/types/ai-model/shared/model-locate-result/parse.d.ts +8 -0
  634. package/dist/types/ai-model/shared/model-locate-result/pixel-bbox-mapper.d.ts +7 -0
  635. package/dist/types/ai-model/shared/model-locate-result/prompt-spec.d.ts +6 -0
  636. package/dist/types/ai-model/shared/model-locate-result/types.d.ts +150 -0
  637. package/dist/types/ai-model/shared/multimodal-prompt.d.ts +13 -0
  638. package/dist/types/ai-model/shared/xml.d.ts +15 -0
  639. package/dist/types/ai-model/workflows/grounding/index.d.ts +3 -0
  640. package/dist/types/ai-model/workflows/grounding/locate-result-rect.d.ts +5 -0
  641. package/dist/types/ai-model/workflows/grounding/locate.d.ts +7 -0
  642. package/dist/types/ai-model/workflows/grounding/planning-action-locate.d.ts +4 -0
  643. package/dist/types/ai-model/workflows/grounding/search-area-mapping.d.ts +4 -0
  644. package/dist/types/ai-model/workflows/grounding/search-area.d.ts +18 -0
  645. package/dist/types/ai-model/workflows/grounding/section-locate.d.ts +16 -0
  646. package/dist/types/ai-model/workflows/grounding/types.d.ts +56 -0
  647. package/dist/types/ai-model/workflows/grounding/utils.d.ts +25 -0
  648. package/dist/types/ai-model/workflows/insight/extraction.d.ts +18 -0
  649. package/dist/types/ai-model/workflows/insight/index.d.ts +2 -0
  650. package/dist/types/ai-model/workflows/insight/insight-response-parser.d.ts +4 -0
  651. package/dist/types/ai-model/workflows/insight/order-sensitive.d.ts +6 -0
  652. package/dist/types/ai-model/workflows/planning/conversation-history.d.ts +105 -0
  653. package/dist/types/ai-model/workflows/planning/custom-planning.d.ts +7 -0
  654. package/dist/types/ai-model/workflows/planning/index.d.ts +3 -0
  655. package/dist/types/ai-model/workflows/planning/locate-normalization.d.ts +12 -0
  656. package/dist/types/ai-model/workflows/planning/planning-action-log.d.ts +2 -0
  657. package/dist/types/ai-model/workflows/planning/standard-planning-parser.d.ts +31 -0
  658. package/dist/types/ai-model/workflows/planning/standard-planning.d.ts +4 -0
  659. package/dist/types/ai-model/workflows/planning/types.d.ts +16 -0
  660. package/dist/types/ai-model/workflows/recorder-generation/common.d.ts +89 -0
  661. package/dist/types/ai-model/workflows/recorder-generation/index.d.ts +7 -0
  662. package/dist/types/ai-model/workflows/recorder-generation/markdown.d.ts +7 -0
  663. package/dist/types/ai-model/workflows/recorder-generation/metadata.d.ts +13 -0
  664. package/dist/types/ai-model/workflows/recorder-generation/playwright.d.ts +26 -0
  665. package/dist/types/ai-model/workflows/recorder-generation/yaml.d.ts +17 -0
  666. package/dist/types/common.d.ts +2 -0
  667. package/dist/types/constants.d.ts +1 -0
  668. package/dist/types/device/index.d.ts +15 -4
  669. package/dist/types/device/input-strategy.d.ts +44 -0
  670. package/dist/types/dump/html-utils.d.ts +1 -0
  671. package/dist/types/dump/image-reference.d.ts +36 -0
  672. package/dist/types/dump/report-action-dump.d.ts +127 -0
  673. package/dist/types/dump/report-dump-compactor.d.ts +7 -0
  674. package/dist/types/dump/screenshot-store.d.ts +32 -15
  675. package/dist/types/dump/task-service-dump.d.ts +3 -0
  676. package/dist/types/dump/task-status.d.ts +41 -0
  677. package/dist/types/element-describer.d.ts +43 -0
  678. package/dist/types/errors.d.ts +5 -0
  679. package/dist/types/report-html-template.d.ts +1 -0
  680. package/dist/types/report-stats.d.ts +39 -0
  681. package/dist/types/screenshot-item.d.ts +1 -0
  682. package/dist/types/service/index.d.ts +6 -2
  683. package/dist/types/task-runner.d.ts +6 -0
  684. package/dist/types/types.d.ts +98 -5
  685. package/dist/types/yaml/cleanup.d.ts +2 -0
  686. package/package.json +2 -2
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ UIObservationImpl: ()=>UIObservationImpl,
28
+ uiContextFromObservationRecord: ()=>uiContextFromObservationRecord,
29
+ UIObserverImpl: ()=>UIObserverImpl
30
+ });
31
+ const observation_record_namespaceObject = require("@aiscene/shared/agent-tools/observation-record");
32
+ const logger_namespaceObject = require("@aiscene/shared/logger");
33
+ const utils_namespaceObject = require("@aiscene/shared/utils");
34
+ const external_screenshot_item_js_namespaceObject = require("../screenshot-item.js");
35
+ const external_screenshot_preparation_js_namespaceObject = require("./screenshot-preparation.js");
36
+ function _define_property(obj, key, value) {
37
+ if (key in obj) Object.defineProperty(obj, key, {
38
+ value: value,
39
+ enumerable: true,
40
+ configurable: true,
41
+ writable: true
42
+ });
43
+ else obj[key] = value;
44
+ return obj;
45
+ }
46
+ const debug = (0, logger_namespaceObject.getDebug)('ui-observer');
47
+ const warnObserver = (0, logger_namespaceObject.getDebug)('ui-observer', {
48
+ console: true
49
+ });
50
+ const DEFAULT_INTERVAL_MS = 1000;
51
+ const MIN_INTERVAL_MS = 200;
52
+ const DEFAULT_MAX_FRAMES = 30;
53
+ const FIRST_FRAME_TIMEOUT_MS = 3000;
54
+ const DEFAULT_WATCHDOG_MS = 300000;
55
+ const MAX_FRAMES_PER_RECORD = 50;
56
+ const DECODE_BATCH_SIZE = 4;
57
+ class UIObservationImpl {
58
+ get frameCount() {
59
+ return this.record.frames.length;
60
+ }
61
+ get startedAt() {
62
+ return this.record.startedAt;
63
+ }
64
+ get endedAt() {
65
+ return this.record.endedAt;
66
+ }
67
+ ensureUsable() {
68
+ (0, utils_namespaceObject.assert)(!this.disposed, 'UI observation has been disposed');
69
+ }
70
+ ensureFixedWindowOptions(options) {
71
+ (0, utils_namespaceObject.assert)(options?.domIncluded === void 0, 'UIObservation does not support domIncluded because it only evaluates recorded screenshots');
72
+ }
73
+ async aiQuery(demand, options) {
74
+ this.ensureUsable();
75
+ this.ensureFixedWindowOptions(options);
76
+ return this.insight.aiQuery(demand, options);
77
+ }
78
+ async aiBoolean(prompt, options) {
79
+ this.ensureUsable();
80
+ this.ensureFixedWindowOptions(options);
81
+ return this.insight.aiBoolean(prompt, options);
82
+ }
83
+ async aiNumber(prompt, options) {
84
+ this.ensureUsable();
85
+ this.ensureFixedWindowOptions(options);
86
+ return this.insight.aiNumber(prompt, options);
87
+ }
88
+ async aiString(prompt, options) {
89
+ this.ensureUsable();
90
+ this.ensureFixedWindowOptions(options);
91
+ return this.insight.aiString(prompt, options);
92
+ }
93
+ async aiAsk(prompt, options) {
94
+ this.ensureUsable();
95
+ this.ensureFixedWindowOptions(options);
96
+ return this.insight.aiAsk(prompt, options);
97
+ }
98
+ async aiAssert(assertion, message, options) {
99
+ this.ensureUsable();
100
+ this.ensureFixedWindowOptions(options);
101
+ return this.insight.aiAssert(assertion, message, options);
102
+ }
103
+ async exportRecord() {
104
+ this.ensureUsable();
105
+ return (0, observation_record_namespaceObject.cloneUIObservationRecord)(this.record);
106
+ }
107
+ async dispose() {
108
+ if (this.disposed) return;
109
+ this.disposeRecord?.();
110
+ this.disposed = true;
111
+ this.onDisposed?.();
112
+ }
113
+ constructor(record, insight, disposeRecord, onDisposed){
114
+ _define_property(this, "insight", void 0);
115
+ _define_property(this, "disposeRecord", void 0);
116
+ _define_property(this, "onDisposed", void 0);
117
+ _define_property(this, "disposed", void 0);
118
+ _define_property(this, "record", void 0);
119
+ this.insight = insight;
120
+ this.disposeRecord = disposeRecord;
121
+ this.onDisposed = onDisposed;
122
+ this.disposed = false;
123
+ this.record = (0, observation_record_namespaceObject.cloneUIObservationRecord)(record);
124
+ }
125
+ }
126
+ function isImageDataUrl(value) {
127
+ return 'string' == typeof value && /^data:image\/(?:png|jpe?g);base64,/i.test(value);
128
+ }
129
+ class UIObserverImpl {
130
+ get bufferedFrameCount() {
131
+ return this.frames.length;
132
+ }
133
+ async start() {
134
+ (0, utils_namespaceObject.assert)(!this.loopPromise && !this.stopped, 'observer has already started');
135
+ this.startedAt = Date.now();
136
+ try {
137
+ this.source = await this.deps.openFrameSource() ?? null;
138
+ } catch (error) {
139
+ debug(`frame source unavailable, using screenshot fallback: ${error}`);
140
+ this.source = null;
141
+ }
142
+ this.usingFallback = !this.source;
143
+ if (this.usingFallback) debug('no continuous frame source; sampling via plain screenshots');
144
+ else {
145
+ const waitStart = Date.now();
146
+ while(!this.source.latest() && Date.now() - waitStart < FIRST_FRAME_TIMEOUT_MS)await new Promise((resolve)=>setTimeout(resolve, 50));
147
+ if (!this.source.latest()) debug(`no first frame within ${FIRST_FRAME_TIMEOUT_MS}ms; starting anyway`);
148
+ }
149
+ await this.captureOnce();
150
+ this.loopPromise = this.runLoop();
151
+ if (this.watchdogMs > 0) {
152
+ this.watchdogTimer = setTimeout(()=>{
153
+ warnObserver(`UIObserver auto-stopped after ${this.watchdogMs}ms. Call observer.stop() explicitly to avoid this.`);
154
+ this.stop().catch(()=>{});
155
+ }, this.watchdogMs);
156
+ if ('function' == typeof this.watchdogTimer.unref) this.watchdogTimer.unref();
157
+ }
158
+ }
159
+ stop() {
160
+ if (!this.stopPromise) this.stopPromise = this.finalizeStop();
161
+ return this.stopPromise;
162
+ }
163
+ async finalizeStop() {
164
+ this.stopped = true;
165
+ if (this.watchdogTimer) {
166
+ clearTimeout(this.watchdogTimer);
167
+ this.watchdogTimer = null;
168
+ }
169
+ await this.loopPromise;
170
+ try {
171
+ if (this.frames.length > 0) this.persistPromise = this.persistUnstoredFrames().catch((error)=>{
172
+ debug(`frame persistence failed, will retry during export: ${error}`);
173
+ });
174
+ const representativePromise = this.deps.capturePreparedRepresentative();
175
+ const [, representative] = await Promise.all([
176
+ this.persistPromise,
177
+ representativePromise
178
+ ]);
179
+ const lastFrame = this.frames.at(-1);
180
+ if (this.source && lastFrame?.persisted) {
181
+ this.representativeFrame = {
182
+ ...lastFrame.persisted,
183
+ capturedAt: lastFrame.capturedAt
184
+ };
185
+ representative.screenshot = external_screenshot_item_js_namespaceObject.ScreenshotItem.fromFile(this.writer.resolveFramePath(lastFrame.persisted), lastFrame.persisted.mimeType, lastFrame.capturedAt);
186
+ debug('representative screenshot aligned with last sampled frame');
187
+ }
188
+ this.representative = representative;
189
+ const endedAt = Date.now();
190
+ const record = await this.finalizeRecord(endedAt);
191
+ this.observation = new UIObservationImpl(record, this.deps.createInsight(record), ()=>this.writer.dispose(), this.deps.onDisposed);
192
+ return this.observation;
193
+ } finally{
194
+ if (this.source) try {
195
+ await this.source.stop();
196
+ } catch (error) {
197
+ debug(`error stopping frame source: ${error}`);
198
+ }
199
+ debug(`observation stopped with ${this.frames.length} buffered frames (+1 representative)`);
200
+ this.deps.onStopped?.();
201
+ }
202
+ }
203
+ async finalizeRecord(endedAt) {
204
+ (0, utils_namespaceObject.assert)(this.stopped && this.representative, 'observation must be stopped before finalizing the observed window');
205
+ if (this.persistPromise) {
206
+ await this.persistPromise;
207
+ this.persistPromise = null;
208
+ }
209
+ await this.persistUnstoredFrames();
210
+ const sampledFrames = this.frames.map((frame)=>{
211
+ (0, utils_namespaceObject.assert)(frame.persisted, 'observation frame was not persisted');
212
+ return {
213
+ ...frame.persisted,
214
+ capturedAt: frame.capturedAt
215
+ };
216
+ });
217
+ if (!this.representativeFrame) {
218
+ const representative = this.representative;
219
+ this.representativeFrame = this.writer.persistFrame(representative.screenshot.base64, representative.screenshot.capturedAt);
220
+ representative.screenshot = external_screenshot_item_js_namespaceObject.ScreenshotItem.fromFile(this.writer.resolveFramePath(this.representativeFrame), this.representativeFrame.mimeType, this.representativeFrame.capturedAt);
221
+ }
222
+ const frames = [
223
+ ...sampledFrames,
224
+ this.representativeFrame
225
+ ];
226
+ if (frames.length > MAX_FRAMES_PER_RECORD) warnObserver(`WARNING: exporting ${frames.length} frames (soft limit ${MAX_FRAMES_PER_RECORD}). Running insight against this observation sends every frame to the model; consider increasing intervalMs or decreasing maxFrames to reduce token cost.`);
227
+ debug(`exporting ${frames.length} file-backed observation frames (${this.persistedByRef.size} decoded source refs)`);
228
+ const metadata = {
229
+ startedAt: this.startedAt,
230
+ endedAt,
231
+ shotSize: {
232
+ ...this.representative.shotSize
233
+ },
234
+ shrunkShotToLogicalRatio: this.representative.shrunkShotToLogicalRatio
235
+ };
236
+ return this.writer.finalize(frames, metadata);
237
+ }
238
+ async dispose() {
239
+ if (this.disposed) return;
240
+ try {
241
+ if (this.stopPromise) await this.stopPromise;
242
+ else if (!this.stopped) await this.stop();
243
+ } finally{
244
+ if (this.observation) await this.observation.dispose();
245
+ else {
246
+ this.writer.dispose();
247
+ this.deps.onDisposed?.();
248
+ }
249
+ this.frames = [];
250
+ this.persistedByRef.clear();
251
+ this.observation = null;
252
+ this.disposed = true;
253
+ }
254
+ }
255
+ async persistUnstoredFrames() {
256
+ const uniqueFrames = this.dedupeRefs(this.frames.filter((frame)=>!frame.persisted));
257
+ const uncachedFrames = uniqueFrames.filter((frame)=>!this.persistedByRef.has(frame.ref));
258
+ for(let start = 0; start < uncachedFrames.length; start += DECODE_BATCH_SIZE){
259
+ const batch = uncachedFrames.slice(start, start + DECODE_BATCH_SIZE);
260
+ const decoded = this.source ? await this.source.decode(batch) : batch.map((frame)=>{
261
+ (0, utils_namespaceObject.assert)(isImageDataUrl(frame.ref), 'fallback observation frame must be an image data URL');
262
+ return frame.ref;
263
+ });
264
+ (0, utils_namespaceObject.assert)(decoded.length === batch.length, 'frame source decode() must return one image per frame handle');
265
+ const preparedDataUrls = await Promise.all(decoded.map((dataUrl)=>(0, external_screenshot_preparation_js_namespaceObject.prepareScreenshotForPersistence)(dataUrl, {
266
+ shrinkFactor: this.screenshotShrinkFactor
267
+ })));
268
+ for(let index = 0; index < batch.length; index++)this.persistedByRef.set(batch[index].ref, this.writer.persistFrame(preparedDataUrls[index], batch[index].capturedAt));
269
+ }
270
+ for (const frame of this.frames)frame.persisted ??= this.persistedByRef.get(frame.ref);
271
+ if (uncachedFrames.length > 0) debug(`decoded and persisted ${uncachedFrames.length} source frames`);
272
+ }
273
+ async captureOnce() {
274
+ try {
275
+ if (this.source) {
276
+ const frame = this.source.latest();
277
+ if (!frame) return;
278
+ if (isImageDataUrl(frame.ref)) {
279
+ const preparedDataUrl = await (0, external_screenshot_preparation_js_namespaceObject.prepareScreenshotForPersistence)(frame.ref, {
280
+ shrinkFactor: this.screenshotShrinkFactor
281
+ });
282
+ const persisted = this.writer.persistFrame(preparedDataUrl, frame.capturedAt);
283
+ this.pushFrame({
284
+ ref: persisted.path,
285
+ capturedAt: frame.capturedAt,
286
+ persisted
287
+ });
288
+ } else this.pushFrame(frame);
289
+ return;
290
+ }
291
+ const preparedDataUrl = await (0, external_screenshot_preparation_js_namespaceObject.prepareScreenshotForPersistence)(await this.deps.captureRawScreenshot(), {
292
+ shrinkFactor: this.screenshotShrinkFactor
293
+ });
294
+ const persisted = this.writer.persistFrame(preparedDataUrl, Date.now());
295
+ this.pushFrame({
296
+ ref: persisted.path,
297
+ capturedAt: persisted.capturedAt,
298
+ persisted
299
+ });
300
+ } catch (error) {
301
+ debug(`frame capture failed, skipping tick: ${error}`);
302
+ }
303
+ }
304
+ async runLoop() {
305
+ while(!this.stopped){
306
+ const tickStart = Date.now();
307
+ await this.captureOnce();
308
+ while(!this.stopped && Date.now() - tickStart < this.intervalMs)await new Promise((resolve)=>setTimeout(resolve, 50));
309
+ }
310
+ }
311
+ pushFrame(frame) {
312
+ this.frames.push(frame);
313
+ if (this.frames.length > this.maxFrames) {
314
+ this.frames = this.thinBuffer(this.frames);
315
+ this.writer.pruneFrames(this.frames.flatMap((retainedFrame)=>retainedFrame.persisted ? [
316
+ retainedFrame.persisted
317
+ ] : []));
318
+ debug(`frame buffer thinned to ${this.frames.length} frames`);
319
+ }
320
+ }
321
+ thinBuffer(frames) {
322
+ if (frames.length <= 1) return frames;
323
+ const isChangePoint = new Array(frames.length).fill(false);
324
+ isChangePoint[0] = true;
325
+ for(let index = 1; index < frames.length; index++)if (frames[index].ref !== frames[index - 1].ref) isChangePoint[index] = true;
326
+ isChangePoint[frames.length - 1] = true;
327
+ let result = [];
328
+ let staticCounter = 0;
329
+ for(let index = 0; index < frames.length; index++)if (isChangePoint[index]) {
330
+ result.push(frames[index]);
331
+ staticCounter = 0;
332
+ } else if (staticCounter % 2 === 0) {
333
+ result.push(frames[index]);
334
+ staticCounter++;
335
+ } else staticCounter++;
336
+ if (result.length > this.maxFrames) {
337
+ const step = result.length / this.maxFrames;
338
+ const sampled = [];
339
+ for(let index = 0; index < this.maxFrames; index++)sampled.push(result[Math.floor(index * step)]);
340
+ sampled[this.maxFrames - 1] = result[result.length - 1];
341
+ result = sampled;
342
+ }
343
+ return result;
344
+ }
345
+ dedupeRefs(frames) {
346
+ const seen = new Set();
347
+ const result = [];
348
+ for (const frame of frames)if (!seen.has(frame.ref)) {
349
+ seen.add(frame.ref);
350
+ result.push(frame);
351
+ }
352
+ return result;
353
+ }
354
+ constructor(deps, opt){
355
+ _define_property(this, "deps", void 0);
356
+ _define_property(this, "frames", void 0);
357
+ _define_property(this, "source", void 0);
358
+ _define_property(this, "usingFallback", void 0);
359
+ _define_property(this, "stopped", void 0);
360
+ _define_property(this, "disposed", void 0);
361
+ _define_property(this, "loopPromise", void 0);
362
+ _define_property(this, "stopPromise", void 0);
363
+ _define_property(this, "representative", void 0);
364
+ _define_property(this, "representativeFrame", void 0);
365
+ _define_property(this, "watchdogTimer", void 0);
366
+ _define_property(this, "persistPromise", void 0);
367
+ _define_property(this, "persistedByRef", void 0);
368
+ _define_property(this, "observation", void 0);
369
+ _define_property(this, "startedAt", void 0);
370
+ _define_property(this, "intervalMs", void 0);
371
+ _define_property(this, "maxFrames", void 0);
372
+ _define_property(this, "watchdogMs", void 0);
373
+ _define_property(this, "screenshotShrinkFactor", void 0);
374
+ _define_property(this, "writer", void 0);
375
+ this.deps = deps;
376
+ this.frames = [];
377
+ this.source = null;
378
+ this.usingFallback = false;
379
+ this.stopped = false;
380
+ this.disposed = false;
381
+ this.loopPromise = null;
382
+ this.stopPromise = null;
383
+ this.representative = null;
384
+ this.representativeFrame = null;
385
+ this.watchdogTimer = null;
386
+ this.persistPromise = null;
387
+ this.persistedByRef = new Map();
388
+ this.observation = null;
389
+ this.startedAt = 0;
390
+ this.intervalMs = Math.max(MIN_INTERVAL_MS, opt?.intervalMs ?? DEFAULT_INTERVAL_MS);
391
+ this.maxFrames = Math.max(2, opt?.maxFrames ?? DEFAULT_MAX_FRAMES);
392
+ this.watchdogMs = opt?.watchdogMs ?? DEFAULT_WATCHDOG_MS;
393
+ this.screenshotShrinkFactor = deps.screenshotShrinkFactor ?? 1;
394
+ this.writer = deps.observationRecordWriter ?? new observation_record_namespaceObject.UIObservationRecordWriter();
395
+ }
396
+ }
397
+ function uiContextFromObservationRecord(record) {
398
+ (0, utils_namespaceObject.assert)('midscene_ui_observation' === record.type && 1 === record.version, 'invalid UI observation record type or version');
399
+ (0, utils_namespaceObject.assert)(record.frames.length > 0, 'UI observation record contains no frames');
400
+ (0, utils_namespaceObject.assert)(Number.isFinite(record.shotSize.width) && record.shotSize.width > 0, 'UI observation record shot width must be positive');
401
+ (0, utils_namespaceObject.assert)(Number.isFinite(record.shotSize.height) && record.shotSize.height > 0, 'UI observation record shot height must be positive');
402
+ (0, utils_namespaceObject.assert)(Number.isFinite(record.shrunkShotToLogicalRatio) && record.shrunkShotToLogicalRatio > 0, 'UI observation record screenshot ratio must be positive');
403
+ const screenshotSequence = record.frames.map((frame)=>external_screenshot_item_js_namespaceObject.ScreenshotItem.fromFile(frame.path, frame.mimeType, frame.capturedAt));
404
+ return {
405
+ screenshot: screenshotSequence[screenshotSequence.length - 1],
406
+ screenshotSequence,
407
+ shotSize: {
408
+ ...record.shotSize
409
+ },
410
+ shrunkShotToLogicalRatio: record.shrunkShotToLogicalRatio
411
+ };
412
+ }
413
+ exports.UIObservationImpl = __webpack_exports__.UIObservationImpl;
414
+ exports.UIObserverImpl = __webpack_exports__.UIObserverImpl;
415
+ exports.uiContextFromObservationRecord = __webpack_exports__.uiContextFromObservationRecord;
416
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
417
+ "UIObservationImpl",
418
+ "UIObserverImpl",
419
+ "uiContextFromObservationRecord"
420
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
421
+ Object.defineProperty(exports, '__esModule', {
422
+ value: true
423
+ });
424
+
425
+ //# sourceMappingURL=ui-observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent/ui-observer.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/agent/ui-observer.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 {\n type UIObservationRecordMetadata,\n UIObservationRecordWriter,\n cloneUIObservationRecord,\n} from '@aiscene/shared/agent-tools/observation-record';\nimport type {\n BaseUIObserverOptions,\n UIObservationFrame,\n UIObservationRecord,\n} from '@aiscene/shared/agent-tools/types';\nimport { getDebug } from '@aiscene/shared/logger';\nimport { assert } from '@aiscene/shared/utils';\nimport type { TUserPrompt } from '../common';\nimport type { DeviceFrameRef, DeviceFrameSource } from '../device';\nimport { ScreenshotItem } from '../screenshot-item';\nimport type {\n AgentAssertResult,\n InsightAPI,\n ObservationAssertOptions,\n ObservationQueryOptions,\n ServiceExtractParam,\n UIContext,\n} from '../types';\nimport { prepareScreenshotForPersistence } from './screenshot-preparation';\n\nconst debug = getDebug('ui-observer');\nconst warnObserver = getDebug('ui-observer', { console: true });\n\nconst DEFAULT_INTERVAL_MS = 1000;\nconst MIN_INTERVAL_MS = 200;\nconst DEFAULT_MAX_FRAMES = 30;\nconst FIRST_FRAME_TIMEOUT_MS = 3000;\nconst DEFAULT_WATCHDOG_MS = 5 * 60 * 1000;\nconst MAX_FRAMES_PER_RECORD = 50;\nconst DECODE_BATCH_SIZE = 4;\n\n/** Options for a UI observation window. */\nexport type UIObserverOption = BaseUIObserverOptions;\n\ninterface UIObserverDeps {\n openFrameSource: () => Promise<DeviceFrameSource | undefined>;\n captureRawScreenshot: () => Promise<string>;\n capturePreparedRepresentative: () => Promise<UIContext>;\n createInsight: (record: UIObservationRecord) => InsightAPI;\n onStopped?: () => void;\n onDisposed?: () => void;\n screenshotShrinkFactor?: number;\n /** Test/internal persistence override; not part of the Agent SDK options. */\n observationRecordWriter?: UIObservationRecordWriter;\n}\n\n/** A fixed screen-recording window that supports read-only AI insights. */\nexport interface UIObservation\n extends InsightAPI<ObservationQueryOptions, ObservationAssertOptions> {\n /** Number of captured frames in the fixed observation window. */\n readonly frameCount: number;\n /** Timestamp when screen sampling started. */\n readonly startedAt: number;\n /** Timestamp when screen sampling ended. */\n readonly endedAt: number;\n /** Release image files owned by this observation. Failed cleanup is retryable. */\n dispose(): Promise<void>;\n}\n\n/** Recording lifecycle returned by {@link Agent.startObserving}. */\nexport interface UIObserver {\n /** Number of frames currently buffered while recording. */\n readonly bufferedFrameCount: number;\n /** Stop recording and return its fixed observation window. */\n stop(): Promise<UIObservation>;\n /** Stop recording if needed and release its image files. */\n dispose(): Promise<void>;\n}\n\n/** @internal Concrete fixed-window implementation. */\nexport class UIObservationImpl implements UIObservation {\n private disposed = false;\n private readonly record: UIObservationRecord;\n\n constructor(\n record: UIObservationRecord,\n private readonly insight: InsightAPI,\n private readonly disposeRecord?: () => void,\n private readonly onDisposed?: () => void,\n ) {\n this.record = cloneUIObservationRecord(record);\n }\n\n get frameCount(): number {\n return this.record.frames.length;\n }\n\n get startedAt(): number {\n return this.record.startedAt;\n }\n\n get endedAt(): number {\n return this.record.endedAt;\n }\n\n private ensureUsable(): void {\n assert(!this.disposed, 'UI observation has been disposed');\n }\n\n private ensureFixedWindowOptions(options?: { domIncluded?: unknown }): void {\n assert(\n options?.domIncluded === undefined,\n 'UIObservation does not support domIncluded because it only evaluates recorded screenshots',\n );\n }\n\n async aiQuery<ReturnType = any>(\n demand: ServiceExtractParam,\n options?: ObservationQueryOptions,\n ): Promise<ReturnType> {\n this.ensureUsable();\n this.ensureFixedWindowOptions(options);\n return this.insight.aiQuery<ReturnType>(demand, options);\n }\n\n async aiBoolean(\n prompt: TUserPrompt,\n options?: ObservationQueryOptions,\n ): Promise<boolean> {\n this.ensureUsable();\n this.ensureFixedWindowOptions(options);\n return this.insight.aiBoolean(prompt, options);\n }\n\n async aiNumber(\n prompt: TUserPrompt,\n options?: ObservationQueryOptions,\n ): Promise<number> {\n this.ensureUsable();\n this.ensureFixedWindowOptions(options);\n return this.insight.aiNumber(prompt, options);\n }\n\n async aiString(\n prompt: TUserPrompt,\n options?: ObservationQueryOptions,\n ): Promise<string> {\n this.ensureUsable();\n this.ensureFixedWindowOptions(options);\n return this.insight.aiString(prompt, options);\n }\n\n async aiAsk(\n prompt: TUserPrompt,\n options?: ObservationQueryOptions,\n ): Promise<string> {\n this.ensureUsable();\n this.ensureFixedWindowOptions(options);\n return this.insight.aiAsk(prompt, options);\n }\n\n async aiAssert(\n assertion: TUserPrompt,\n message?: string,\n options?: ObservationAssertOptions,\n ): Promise<AgentAssertResult | undefined> {\n this.ensureUsable();\n this.ensureFixedWindowOptions(options);\n return this.insight.aiAssert(assertion, message, options);\n }\n\n /** @internal Used only by the CLI observation artifact adapter. */\n async exportRecord(): Promise<UIObservationRecord> {\n this.ensureUsable();\n return cloneUIObservationRecord(this.record);\n }\n\n async dispose(): Promise<void> {\n if (this.disposed) return;\n this.disposeRecord?.();\n this.disposed = true;\n this.onDisposed?.();\n }\n}\n\ninterface BufferedFrame extends DeviceFrameRef {\n /** Present once the frame no longer needs to retain an in-memory data URL. */\n persisted?: UIObservationFrame;\n}\n\nfunction isImageDataUrl(value: unknown): value is string {\n return (\n typeof value === 'string' &&\n /^data:image\\/(?:png|jpe?g);base64,/i.test(value)\n );\n}\n\n/**\n * Observe an explicit screen window and produce a fixed UIObservation.\n */\nexport class UIObserverImpl implements UIObserver {\n private frames: BufferedFrame[] = [];\n private source: DeviceFrameSource | null = null;\n private usingFallback = false;\n private stopped = false;\n private disposed = false;\n private loopPromise: Promise<void> | null = null;\n private stopPromise: Promise<UIObservationImpl> | null = null;\n private representative: UIContext | null = null;\n private representativeFrame: UIObservationFrame | null = null;\n private watchdogTimer: ReturnType<typeof setTimeout> | null = null;\n private persistPromise: Promise<void> | null = null;\n private persistedByRef = new Map<unknown, UIObservationFrame>();\n private observation: UIObservationImpl | null = null;\n private startedAt = 0;\n private readonly intervalMs: number;\n private readonly maxFrames: number;\n private readonly watchdogMs: number;\n private readonly screenshotShrinkFactor: number;\n private readonly writer: UIObservationRecordWriter;\n\n constructor(\n private readonly deps: UIObserverDeps,\n opt?: UIObserverOption,\n ) {\n this.intervalMs = Math.max(\n MIN_INTERVAL_MS,\n opt?.intervalMs ?? DEFAULT_INTERVAL_MS,\n );\n this.maxFrames = Math.max(2, opt?.maxFrames ?? DEFAULT_MAX_FRAMES);\n this.watchdogMs = opt?.watchdogMs ?? DEFAULT_WATCHDOG_MS;\n this.screenshotShrinkFactor = deps.screenshotShrinkFactor ?? 1;\n this.writer =\n deps.observationRecordWriter ?? new UIObservationRecordWriter();\n }\n\n get bufferedFrameCount(): number {\n return this.frames.length;\n }\n\n async start(): Promise<void> {\n assert(!this.loopPromise && !this.stopped, 'observer has already started');\n this.startedAt = Date.now();\n try {\n this.source = (await this.deps.openFrameSource()) ?? null;\n } catch (error) {\n debug(`frame source unavailable, using screenshot fallback: ${error}`);\n this.source = null;\n }\n this.usingFallback = !this.source;\n if (this.usingFallback) {\n debug('no continuous frame source; sampling via plain screenshots');\n } else {\n const waitStart = Date.now();\n while (\n !this.source!.latest() &&\n Date.now() - waitStart < FIRST_FRAME_TIMEOUT_MS\n ) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n if (!this.source!.latest()) {\n debug(\n `no first frame within ${FIRST_FRAME_TIMEOUT_MS}ms; starting anyway`,\n );\n }\n }\n await this.captureOnce();\n this.loopPromise = this.runLoop();\n\n if (this.watchdogMs > 0) {\n this.watchdogTimer = setTimeout(() => {\n warnObserver(\n `UIObserver auto-stopped after ${this.watchdogMs}ms. Call observer.stop() explicitly to avoid this.`,\n );\n this.stop().catch(() => {});\n }, this.watchdogMs);\n if (\n typeof (this.watchdogTimer as { unref?: () => void }).unref ===\n 'function'\n ) {\n (this.watchdogTimer as { unref: () => void }).unref();\n }\n }\n }\n\n stop(): Promise<UIObservationImpl> {\n if (!this.stopPromise) {\n this.stopPromise = this.finalizeStop();\n }\n return this.stopPromise;\n }\n\n private async finalizeStop(): Promise<UIObservationImpl> {\n this.stopped = true;\n if (this.watchdogTimer) {\n clearTimeout(this.watchdogTimer);\n this.watchdogTimer = null;\n }\n await this.loopPromise;\n\n try {\n if (this.frames.length > 0) {\n this.persistPromise = this.persistUnstoredFrames().catch((error) => {\n debug(`frame persistence failed, will retry during export: ${error}`);\n });\n }\n const representativePromise = this.deps.capturePreparedRepresentative();\n const [, representative] = await Promise.all([\n this.persistPromise,\n representativePromise,\n ]);\n\n const lastFrame = this.frames.at(-1);\n if (this.source && lastFrame?.persisted) {\n this.representativeFrame = {\n ...lastFrame.persisted,\n capturedAt: lastFrame.capturedAt,\n };\n representative.screenshot = ScreenshotItem.fromFile(\n this.writer.resolveFramePath(lastFrame.persisted),\n lastFrame.persisted.mimeType,\n lastFrame.capturedAt,\n );\n debug('representative screenshot aligned with last sampled frame');\n }\n this.representative = representative;\n const endedAt = Date.now();\n const record = await this.finalizeRecord(endedAt);\n this.observation = new UIObservationImpl(\n record,\n this.deps.createInsight(record),\n () => this.writer.dispose(),\n this.deps.onDisposed,\n );\n return this.observation;\n } finally {\n if (this.source) {\n try {\n await this.source.stop();\n } catch (error) {\n debug(`error stopping frame source: ${error}`);\n }\n }\n debug(\n `observation stopped with ${this.frames.length} buffered frames (+1 representative)`,\n );\n this.deps.onStopped?.();\n }\n }\n\n private async finalizeRecord(endedAt: number): Promise<UIObservationRecord> {\n assert(\n this.stopped && this.representative,\n 'observation must be stopped before finalizing the observed window',\n );\n if (this.persistPromise) {\n await this.persistPromise;\n this.persistPromise = null;\n }\n await this.persistUnstoredFrames();\n\n const sampledFrames = this.frames.map((frame) => {\n assert(frame.persisted, 'observation frame was not persisted');\n return { ...frame.persisted, capturedAt: frame.capturedAt };\n });\n\n if (!this.representativeFrame) {\n const representative = this.representative!;\n // The representative UIContext has already been prepared by\n // commonContextParser().\n this.representativeFrame = this.writer.persistFrame(\n representative.screenshot.base64,\n representative.screenshot.capturedAt,\n );\n representative.screenshot = ScreenshotItem.fromFile(\n this.writer.resolveFramePath(this.representativeFrame),\n this.representativeFrame.mimeType,\n this.representativeFrame.capturedAt,\n );\n }\n\n const frames = [...sampledFrames, this.representativeFrame];\n if (frames.length > MAX_FRAMES_PER_RECORD) {\n warnObserver(\n `WARNING: exporting ${frames.length} frames (soft limit ${MAX_FRAMES_PER_RECORD}). Running insight against this observation sends every frame to the model; consider increasing intervalMs or decreasing maxFrames to reduce token cost.`,\n );\n }\n debug(\n `exporting ${frames.length} file-backed observation frames (${this.persistedByRef.size} decoded source refs)`,\n );\n const metadata: UIObservationRecordMetadata = {\n startedAt: this.startedAt,\n endedAt,\n shotSize: { ...this.representative!.shotSize },\n shrunkShotToLogicalRatio: this.representative!.shrunkShotToLogicalRatio,\n };\n return this.writer.finalize(frames, metadata);\n }\n\n /** Release writer-owned image files after the observation is no longer needed. */\n async dispose(): Promise<void> {\n if (this.disposed) return;\n try {\n if (this.stopPromise) {\n await this.stopPromise;\n } else if (!this.stopped) {\n await this.stop();\n }\n } finally {\n if (this.observation) {\n await this.observation.dispose();\n } else {\n this.writer.dispose();\n this.deps.onDisposed?.();\n }\n this.frames = [];\n this.persistedByRef.clear();\n this.observation = null;\n this.disposed = true;\n }\n }\n\n private async persistUnstoredFrames(): Promise<void> {\n const uniqueFrames = this.dedupeRefs(\n this.frames.filter((frame) => !frame.persisted),\n );\n const uncachedFrames = uniqueFrames.filter(\n (frame) => !this.persistedByRef.has(frame.ref),\n );\n\n for (\n let start = 0;\n start < uncachedFrames.length;\n start += DECODE_BATCH_SIZE\n ) {\n const batch = uncachedFrames.slice(start, start + DECODE_BATCH_SIZE);\n const decoded = this.source\n ? await this.source.decode(batch)\n : batch.map((frame) => {\n assert(\n isImageDataUrl(frame.ref),\n 'fallback observation frame must be an image data URL',\n );\n return frame.ref;\n });\n assert(\n decoded.length === batch.length,\n 'frame source decode() must return one image per frame handle',\n );\n const preparedDataUrls = await Promise.all(\n decoded.map((dataUrl) =>\n prepareScreenshotForPersistence(dataUrl, {\n shrinkFactor: this.screenshotShrinkFactor,\n }),\n ),\n );\n for (let index = 0; index < batch.length; index++) {\n this.persistedByRef.set(\n batch[index].ref,\n this.writer.persistFrame(\n preparedDataUrls[index],\n batch[index].capturedAt,\n ),\n );\n }\n }\n\n for (const frame of this.frames) {\n frame.persisted ??= this.persistedByRef.get(frame.ref);\n }\n if (uncachedFrames.length > 0) {\n debug(`decoded and persisted ${uncachedFrames.length} source frames`);\n }\n }\n\n private async captureOnce(): Promise<void> {\n try {\n if (this.source) {\n const frame = this.source.latest();\n if (!frame) return;\n if (isImageDataUrl(frame.ref)) {\n const preparedDataUrl = await prepareScreenshotForPersistence(\n frame.ref,\n { shrinkFactor: this.screenshotShrinkFactor },\n );\n const persisted = this.writer.persistFrame(\n preparedDataUrl,\n frame.capturedAt,\n );\n this.pushFrame({\n ref: persisted.path,\n capturedAt: frame.capturedAt,\n persisted,\n });\n } else {\n this.pushFrame(frame);\n }\n return;\n }\n const preparedDataUrl = await prepareScreenshotForPersistence(\n await this.deps.captureRawScreenshot(),\n { shrinkFactor: this.screenshotShrinkFactor },\n );\n const persisted = this.writer.persistFrame(preparedDataUrl, Date.now());\n this.pushFrame({\n ref: persisted.path,\n capturedAt: persisted.capturedAt,\n persisted,\n });\n } catch (error) {\n debug(`frame capture failed, skipping tick: ${error}`);\n }\n }\n\n private async runLoop(): Promise<void> {\n while (!this.stopped) {\n const tickStart = Date.now();\n await this.captureOnce();\n while (!this.stopped && Date.now() - tickStart < this.intervalMs) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n }\n }\n\n private pushFrame(frame: DeviceFrameRef | BufferedFrame): void {\n this.frames.push(frame);\n if (this.frames.length > this.maxFrames) {\n this.frames = this.thinBuffer(this.frames);\n this.writer.pruneFrames(\n this.frames.flatMap((retainedFrame) =>\n retainedFrame.persisted ? [retainedFrame.persisted] : [],\n ),\n );\n debug(`frame buffer thinned to ${this.frames.length} frames`);\n }\n }\n\n private thinBuffer(frames: BufferedFrame[]): BufferedFrame[] {\n if (frames.length <= 1) return frames;\n const isChangePoint = new Array(frames.length).fill(false);\n isChangePoint[0] = true;\n for (let index = 1; index < frames.length; index++) {\n if (frames[index].ref !== frames[index - 1].ref) {\n isChangePoint[index] = true;\n }\n }\n isChangePoint[frames.length - 1] = true;\n\n let result: BufferedFrame[] = [];\n let staticCounter = 0;\n for (let index = 0; index < frames.length; index++) {\n if (isChangePoint[index]) {\n result.push(frames[index]);\n staticCounter = 0;\n } else if (staticCounter % 2 === 0) {\n result.push(frames[index]);\n staticCounter++;\n } else {\n staticCounter++;\n }\n }\n\n if (result.length > this.maxFrames) {\n const step = result.length / this.maxFrames;\n const sampled: BufferedFrame[] = [];\n for (let index = 0; index < this.maxFrames; index++) {\n sampled.push(result[Math.floor(index * step)]);\n }\n sampled[this.maxFrames - 1] = result[result.length - 1];\n result = sampled;\n }\n return result;\n }\n\n private dedupeRefs(frames: BufferedFrame[]): BufferedFrame[] {\n const seen = new Set<unknown>();\n const result: BufferedFrame[] = [];\n for (const frame of frames) {\n if (!seen.has(frame.ref)) {\n seen.add(frame.ref);\n result.push(frame);\n }\n }\n return result;\n }\n}\n\n/** Rebuild model-facing temporal context from resolved image file paths. */\nexport function uiContextFromObservationRecord(\n record: UIObservationRecord,\n): UIContext {\n assert(\n record.type === 'midscene_ui_observation' && record.version === 1,\n 'invalid UI observation record type or version',\n );\n assert(record.frames.length > 0, 'UI observation record contains no frames');\n assert(\n Number.isFinite(record.shotSize.width) && record.shotSize.width > 0,\n 'UI observation record shot width must be positive',\n );\n assert(\n Number.isFinite(record.shotSize.height) && record.shotSize.height > 0,\n 'UI observation record shot height must be positive',\n );\n assert(\n Number.isFinite(record.shrunkShotToLogicalRatio) &&\n record.shrunkShotToLogicalRatio > 0,\n 'UI observation record screenshot ratio must be positive',\n );\n const screenshotSequence = record.frames.map((frame) =>\n ScreenshotItem.fromFile(frame.path, frame.mimeType, frame.capturedAt),\n );\n return {\n screenshot: screenshotSequence[screenshotSequence.length - 1],\n screenshotSequence,\n shotSize: { ...record.shotSize },\n shrunkShotToLogicalRatio: record.shrunkShotToLogicalRatio,\n };\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","warnObserver","DEFAULT_INTERVAL_MS","MIN_INTERVAL_MS","DEFAULT_MAX_FRAMES","FIRST_FRAME_TIMEOUT_MS","DEFAULT_WATCHDOG_MS","MAX_FRAMES_PER_RECORD","DECODE_BATCH_SIZE","UIObservationImpl","assert","options","undefined","demand","prompt","assertion","message","cloneUIObservationRecord","record","insight","disposeRecord","onDisposed","isImageDataUrl","value","UIObserverImpl","Date","error","waitStart","Promise","resolve","setTimeout","clearTimeout","representativePromise","representative","lastFrame","ScreenshotItem","endedAt","sampledFrames","frame","frames","metadata","uniqueFrames","uncachedFrames","start","batch","decoded","preparedDataUrls","dataUrl","prepareScreenshotForPersistence","index","preparedDataUrl","persisted","tickStart","retainedFrame","isChangePoint","Array","result","staticCounter","step","sampled","Math","seen","Set","deps","opt","Map","UIObservationRecordWriter","uiContextFromObservationRecord","Number","screenshotSequence"],"mappings":"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"}
@@ -33,18 +33,22 @@ var __webpack_require__ = {};
33
33
  var __webpack_exports__ = {};
34
34
  __webpack_require__.r(__webpack_exports__);
35
35
  __webpack_require__.d(__webpack_exports__, {
36
+ createScreenshotBoundUIContext: ()=>createScreenshotBoundUIContext,
36
37
  getMidsceneVersion: ()=>getMidsceneVersion,
37
38
  getReportFileName: ()=>getReportFileName,
38
39
  matchElementFromPlan: ()=>matchElementFromPlan,
39
- parsePrompt: ()=>parsePrompt,
40
40
  matchElementFromCache: ()=>matchElementFromCache,
41
41
  commonContextParser: ()=>commonContextParser,
42
+ normalizeFilePaths: ()=>normalizeFilePaths,
43
+ parsePrompt: ()=>parsePrompt,
42
44
  transformLogicalElementToScreenshot: ()=>transformLogicalElementToScreenshot,
43
45
  ifPlanLocateParamIsBbox: ()=>ifPlanLocateParamIsBbox,
44
46
  printReportMsg: ()=>printReportMsg,
45
47
  transformLogicalRectToScreenshotRect: ()=>transformLogicalRectToScreenshotRect
46
48
  });
47
49
  const external_screenshot_item_js_namespaceObject = require("../screenshot-item.js");
50
+ const external_node_fs_namespaceObject = require("node:fs");
51
+ const external_node_path_namespaceObject = require("node:path");
48
52
  const external_utils_js_namespaceObject = require("../utils.js");
49
53
  const env_namespaceObject = require("@aiscene/shared/env");
50
54
  const extractor_namespaceObject = require("@aiscene/shared/extractor");
@@ -54,6 +58,19 @@ const utils_namespaceObject = require("@aiscene/shared/utils");
54
58
  const external_dayjs_namespaceObject = require("dayjs");
55
59
  var external_dayjs_default = /*#__PURE__*/ __webpack_require__.n(external_dayjs_namespaceObject);
56
60
  const external_task_cache_js_namespaceObject = require("./task-cache.js");
61
+ const agentDebug = (0, logger_namespaceObject.getDebug)('agent');
62
+ const screenshotDataUrlPattern = /^data:image\/[a-zA-Z0-9.+-]+;base64,/i;
63
+ const inferBase64ImageFormat = (base64Body)=>{
64
+ if (base64Body.startsWith('iVBORw0KGgo')) return 'png';
65
+ return 'jpeg';
66
+ };
67
+ const normalizeScreenshotBase64 = (screenshotBase64)=>{
68
+ const trimmedBase64 = screenshotBase64.trim();
69
+ if (screenshotDataUrlPattern.test(trimmedBase64)) return trimmedBase64;
70
+ const base64Body = trimmedBase64.replace(/\s/g, '');
71
+ (0, utils_namespaceObject.assert)(base64Body, 'screenshotBase64 must include image data');
72
+ return (0, img_namespaceObject.createImgBase64ByFormat)(inferBase64ImageFormat(base64Body), base64Body);
73
+ };
57
74
  async function commonContextParser(interfaceInstance, _opt) {
58
75
  const debug = (0, logger_namespaceObject.getDebug)('commonContextParser');
59
76
  (0, utils_namespaceObject.assert)(interfaceInstance, 'interfaceInstance is required');
@@ -122,6 +139,20 @@ async function commonContextParser(interfaceInstance, _opt) {
122
139
  shrunkShotToLogicalRatio
123
140
  };
124
141
  }
142
+ async function createScreenshotBoundUIContext(screenshotBase64, opt) {
143
+ const normalizedScreenshotBase64 = normalizeScreenshotBase64(screenshotBase64);
144
+ const actualScreenshotSize = await (0, img_namespaceObject.imageInfoOfBase64)(normalizedScreenshotBase64);
145
+ if (opt.screenshotSize && (opt.screenshotSize.width !== actualScreenshotSize.width || opt.screenshotSize.height !== actualScreenshotSize.height)) agentDebug('describeElementAtPoint screenshotSize mismatch, use actual size', {
146
+ provided: opt.screenshotSize,
147
+ actual: actualScreenshotSize
148
+ });
149
+ return {
150
+ screenshot: external_screenshot_item_js_namespaceObject.ScreenshotItem.create(normalizedScreenshotBase64, Date.now()),
151
+ shotSize: actualScreenshotSize,
152
+ shrunkShotToLogicalRatio: 1,
153
+ _isFrozen: true
154
+ };
155
+ }
125
156
  function getReportFileName(tag = 'web') {
126
157
  const reportTagName = env_namespaceObject.globalConfigManager.getEnvConfigValue(env_namespaceObject.MIDSCENE_REPORT_TAG_NAME);
127
158
  const dateTimeInFileName = external_dayjs_default()().format('YYYY-MM-DD_HH-mm-ss');
@@ -170,7 +201,7 @@ async function matchElementFromCache(context, cacheEntry, cachePrompt, cacheable
170
201
  return;
171
202
  }
172
203
  }
173
- const getMidsceneVersion = ()=>"9.0.5";
204
+ const getMidsceneVersion = ()=>"9.0.8";
174
205
  const parsePrompt = (prompt)=>{
175
206
  if ('string' == typeof prompt) return {
176
207
  textPrompt: prompt,
@@ -184,6 +215,15 @@ const parsePrompt = (prompt)=>{
184
215
  } : void 0
185
216
  };
186
217
  };
218
+ function normalizeFilePaths(files, options = {}) {
219
+ const { fileExists = external_node_fs_namespaceObject.existsSync, isInBrowser = utils_namespaceObject.ifInBrowser, resolvePath = external_node_path_namespaceObject.resolve, cwd = process.cwd() } = options;
220
+ if (isInBrowser) throw new Error('File chooser is not supported in browser environment');
221
+ return files.map((file)=>{
222
+ const absolutePath = resolvePath(file);
223
+ if (!fileExists(absolutePath)) throw new Error(`File not found: ${file}. Resolved to: ${absolutePath}. Current working directory: ${cwd}`);
224
+ return absolutePath;
225
+ });
226
+ }
187
227
  const transformLogicalElementToScreenshot = (element, shrunkShotToLogicalRatio)=>{
188
228
  if (1 === shrunkShotToLogicalRatio) return element;
189
229
  return {
@@ -212,22 +252,26 @@ const transformLogicalRectToScreenshotRect = (rect, shrunkShotToLogicalRatio)=>{
212
252
  };
213
253
  };
214
254
  exports.commonContextParser = __webpack_exports__.commonContextParser;
255
+ exports.createScreenshotBoundUIContext = __webpack_exports__.createScreenshotBoundUIContext;
215
256
  exports.getMidsceneVersion = __webpack_exports__.getMidsceneVersion;
216
257
  exports.getReportFileName = __webpack_exports__.getReportFileName;
217
258
  exports.ifPlanLocateParamIsBbox = __webpack_exports__.ifPlanLocateParamIsBbox;
218
259
  exports.matchElementFromCache = __webpack_exports__.matchElementFromCache;
219
260
  exports.matchElementFromPlan = __webpack_exports__.matchElementFromPlan;
261
+ exports.normalizeFilePaths = __webpack_exports__.normalizeFilePaths;
220
262
  exports.parsePrompt = __webpack_exports__.parsePrompt;
221
263
  exports.printReportMsg = __webpack_exports__.printReportMsg;
222
264
  exports.transformLogicalElementToScreenshot = __webpack_exports__.transformLogicalElementToScreenshot;
223
265
  exports.transformLogicalRectToScreenshotRect = __webpack_exports__.transformLogicalRectToScreenshotRect;
224
266
  for(var __rspack_i in __webpack_exports__)if (-1 === [
225
267
  "commonContextParser",
268
+ "createScreenshotBoundUIContext",
226
269
  "getMidsceneVersion",
227
270
  "getReportFileName",
228
271
  "ifPlanLocateParamIsBbox",
229
272
  "matchElementFromCache",
230
273
  "matchElementFromPlan",
274
+ "normalizeFilePaths",
231
275
  "parsePrompt",
232
276
  "printReportMsg",
233
277
  "transformLogicalElementToScreenshot",