@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,101 @@
1
+ import { TaskExecutionError } from "./tasks.mjs";
2
+ import { parsePrompt } from "./utils.mjs";
3
+ function _define_property(obj, key, value) {
4
+ if (key in obj) Object.defineProperty(obj, key, {
5
+ value: value,
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true
9
+ });
10
+ else obj[key] = value;
11
+ return obj;
12
+ }
13
+ const defaultQueryOptions = {
14
+ domIncluded: false,
15
+ screenshotIncluded: true
16
+ };
17
+ class Insight {
18
+ executionOptions(options, includeAbortSignal = false) {
19
+ const uiContext = this.getUIContext?.();
20
+ if (!uiContext && !includeAbortSignal && !options?.abortSignal) return;
21
+ return {
22
+ ...includeAbortSignal || options?.abortSignal ? {
23
+ abortSignal: options?.abortSignal
24
+ } : {},
25
+ ...uiContext ? {
26
+ uiContext
27
+ } : {}
28
+ };
29
+ }
30
+ async aiQuery(demand, options = defaultQueryOptions) {
31
+ const modelConfig = this.resolveModelConfig();
32
+ const { output } = await this.taskExecutor.createTypeQueryExecution('Query', demand, modelConfig, options);
33
+ return output;
34
+ }
35
+ async aiBoolean(prompt, options = defaultQueryOptions) {
36
+ return this.queryPrimitive('Boolean', prompt, options);
37
+ }
38
+ async aiNumber(prompt, options = defaultQueryOptions) {
39
+ return this.queryPrimitive('Number', prompt, options);
40
+ }
41
+ async aiString(prompt, options = defaultQueryOptions) {
42
+ return this.queryPrimitive('String', prompt, options);
43
+ }
44
+ async aiAsk(prompt, options = defaultQueryOptions) {
45
+ return this.aiString(prompt, options);
46
+ }
47
+ async queryPrimitive(type, prompt, options) {
48
+ const { textPrompt, multimodalPrompt } = parsePrompt(prompt);
49
+ const { output } = await this.taskExecutor.createTypeQueryExecution(type, textPrompt, this.resolveModelConfig(), options, multimodalPrompt);
50
+ return output;
51
+ }
52
+ async aiAssert(assertion, message, options) {
53
+ const serviceOptions = {
54
+ domIncluded: options?.domIncluded ?? defaultQueryOptions.domIncluded,
55
+ screenshotIncluded: options?.screenshotIncluded ?? defaultQueryOptions.screenshotIncluded,
56
+ ...options?.context !== void 0 ? {
57
+ context: options.context
58
+ } : {}
59
+ };
60
+ const { textPrompt, multimodalPrompt } = parsePrompt(assertion);
61
+ const assertionText = 'string' == typeof assertion ? assertion : assertion.prompt;
62
+ try {
63
+ const { output, thought } = await this.taskExecutor.createTypeQueryExecution('Assert', textPrompt, this.resolveModelConfig(), serviceOptions, multimodalPrompt);
64
+ const pass = Boolean(output);
65
+ const failureMessage = pass ? void 0 : `Assertion failed: ${message || assertionText}\nReason: ${thought || '(no_reason)'}`;
66
+ if (options?.keepRawResponse) return {
67
+ pass,
68
+ thought,
69
+ message: failureMessage
70
+ };
71
+ if (!pass) throw new Error(failureMessage);
72
+ } catch (error) {
73
+ if (error instanceof TaskExecutionError) {
74
+ const thought = error.errorTask?.thought;
75
+ const diagnosticMessage = error.errorTask?.errorMessage || (error.cause instanceof Error ? error.cause.message : void 0);
76
+ const reason = thought || diagnosticMessage || '(no_reason)';
77
+ const failureMessage = `Assertion failed: ${message || assertionText}\nReason: ${reason}`;
78
+ if (options?.keepRawResponse) return {
79
+ pass: false,
80
+ thought,
81
+ message: failureMessage
82
+ };
83
+ throw new Error(failureMessage, {
84
+ cause: error.cause
85
+ });
86
+ }
87
+ throw error;
88
+ }
89
+ }
90
+ constructor(taskExecutor, resolveModelConfig, getUIContext){
91
+ _define_property(this, "taskExecutor", void 0);
92
+ _define_property(this, "resolveModelConfig", void 0);
93
+ _define_property(this, "getUIContext", void 0);
94
+ this.taskExecutor = taskExecutor;
95
+ this.resolveModelConfig = resolveModelConfig;
96
+ this.getUIContext = getUIContext;
97
+ }
98
+ }
99
+ export { Insight };
100
+
101
+ //# sourceMappingURL=insight.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent/insight.mjs","sources":["../../../src/agent/insight.ts"],"sourcesContent":["import type { TUserPrompt } from '@/ai-model/index';\nimport type {\n AgentAssertResult,\n AssertOptions,\n InsightAPI,\n QueryOptions,\n ServiceExtractParam,\n UIContext,\n} from '@/types';\nimport type { IModelConfig } from '@aiscene/shared/env';\nimport { TaskExecutionError, type TaskExecutor } from './tasks';\nimport { parsePrompt } from './utils';\n\nconst defaultQueryOptions: QueryOptions = {\n domIncluded: false,\n screenshotIncluded: true,\n};\n\ntype InsightTaskExecutor = Pick<TaskExecutor, 'createTypeQueryExecution'>;\n\n/** Execute read-only AI operations against either live or fixed UI context. */\nexport class Insight implements InsightAPI {\n constructor(\n private readonly taskExecutor: InsightTaskExecutor,\n private readonly resolveModelConfig: () => IModelConfig,\n private readonly getUIContext?: () => UIContext,\n ) {}\n\n private executionOptions(\n options?: AssertOptions,\n includeAbortSignal = false,\n ): { abortSignal?: AbortSignal; uiContext?: UIContext } | undefined {\n const uiContext = this.getUIContext?.();\n if (!uiContext && !includeAbortSignal && !options?.abortSignal) {\n return undefined;\n }\n return {\n ...(includeAbortSignal || options?.abortSignal\n ? { abortSignal: options?.abortSignal }\n : {}),\n ...(uiContext ? { uiContext } : {}),\n };\n }\n\n async aiQuery<ReturnType = any>(\n demand: ServiceExtractParam,\n options: QueryOptions = defaultQueryOptions,\n ): Promise<ReturnType> {\n const modelConfig = this.resolveModelConfig();\n const { output } = await this.taskExecutor.createTypeQueryExecution(\n 'Query',\n demand,\n modelConfig,\n options,\n );\n return output as ReturnType;\n }\n\n async aiBoolean(\n prompt: TUserPrompt,\n options: QueryOptions = defaultQueryOptions,\n ): Promise<boolean> {\n return this.queryPrimitive('Boolean', prompt, options);\n }\n\n async aiNumber(\n prompt: TUserPrompt,\n options: QueryOptions = defaultQueryOptions,\n ): Promise<number> {\n return this.queryPrimitive('Number', prompt, options);\n }\n\n async aiString(\n prompt: TUserPrompt,\n options: QueryOptions = defaultQueryOptions,\n ): Promise<string> {\n return this.queryPrimitive('String', prompt, options);\n }\n\n async aiAsk(\n prompt: TUserPrompt,\n options: QueryOptions = defaultQueryOptions,\n ): Promise<string> {\n return this.aiString(prompt, options);\n }\n\n private async queryPrimitive<ReturnType>(\n type: 'Boolean' | 'Number' | 'String',\n prompt: TUserPrompt,\n options: QueryOptions,\n ): Promise<ReturnType> {\n const { textPrompt, multimodalPrompt } = parsePrompt(prompt);\n const { output } = await this.taskExecutor.createTypeQueryExecution(\n type,\n textPrompt,\n this.resolveModelConfig(),\n options,\n multimodalPrompt,\n );\n return output as ReturnType;\n }\n\n async aiAssert(\n assertion: TUserPrompt,\n message?: string,\n options?: AssertOptions,\n ): Promise<AgentAssertResult | undefined> {\n const serviceOptions: QueryOptions = {\n domIncluded: options?.domIncluded ?? defaultQueryOptions.domIncluded,\n screenshotIncluded:\n options?.screenshotIncluded ?? defaultQueryOptions.screenshotIncluded,\n ...(options?.context !== undefined ? { context: options.context } : {}),\n };\n const { textPrompt, multimodalPrompt } = parsePrompt(assertion);\n const assertionText =\n typeof assertion === 'string' ? assertion : assertion.prompt;\n\n try {\n const { output, thought } =\n await this.taskExecutor.createTypeQueryExecution<boolean>(\n 'Assert',\n textPrompt,\n this.resolveModelConfig(),\n serviceOptions,\n multimodalPrompt,\n );\n\n const pass = Boolean(output);\n const failureMessage = pass\n ? undefined\n : `Assertion failed: ${message || assertionText}\\nReason: ${thought || '(no_reason)'}`;\n\n if (options?.keepRawResponse) {\n return { pass, thought, message: failureMessage };\n }\n if (!pass) {\n throw new Error(failureMessage);\n }\n } catch (error) {\n if (error instanceof TaskExecutionError) {\n const thought = error.errorTask?.thought;\n const diagnosticMessage =\n error.errorTask?.errorMessage ||\n (error.cause instanceof Error ? error.cause.message : undefined);\n const reason = thought || diagnosticMessage || '(no_reason)';\n const failureMessage = `Assertion failed: ${message || assertionText}\\nReason: ${reason}`;\n\n if (options?.keepRawResponse) {\n return { pass: false, thought, message: failureMessage };\n }\n throw new Error(failureMessage, { cause: error.cause });\n }\n throw error;\n }\n }\n}\n"],"names":["defaultQueryOptions","Insight","options","includeAbortSignal","uiContext","demand","modelConfig","output","prompt","type","textPrompt","multimodalPrompt","parsePrompt","assertion","message","serviceOptions","undefined","assertionText","thought","pass","Boolean","failureMessage","Error","error","TaskExecutionError","diagnosticMessage","reason","taskExecutor","resolveModelConfig","getUIContext"],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) Object.defineProperty(obj, key, {
3
+ value: value,
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true
7
+ });
8
+ else obj[key] = value;
9
+ return obj;
10
+ }
11
+ const emptyBucket = ()=>({
12
+ promptTokens: 0,
13
+ completionTokens: 0,
14
+ totalTokens: 0,
15
+ calls: 0
16
+ });
17
+ const addToBucket = (map, key, prompt, completion, total)=>{
18
+ if (!map[key]) map[key] = emptyBucket();
19
+ const bucket = map[key];
20
+ bucket.promptTokens += prompt;
21
+ bucket.completionTokens += completion;
22
+ bucket.totalTokens += total;
23
+ bucket.calls += 1;
24
+ };
25
+ class MetricsCollector {
26
+ add(usage) {
27
+ const prompt = usage.prompt_tokens ?? 0;
28
+ const completion = usage.completion_tokens ?? 0;
29
+ const total = usage.total_tokens ?? 0;
30
+ this.totalPromptTokens += prompt;
31
+ this.totalCompletionTokens += completion;
32
+ this.totalTokens += total;
33
+ this.totalCachedInput += usage.cached_input ?? 0;
34
+ this.totalTimeCostMs += usage.time_cost ?? 0;
35
+ this.calls += 1;
36
+ addToBucket(this.byIntent, usage.intent ?? 'unknown', prompt, completion, total);
37
+ addToBucket(this.byModel, usage.model_name ?? 'unknown', prompt, completion, total);
38
+ }
39
+ snapshot() {
40
+ const cloneBuckets = (map)=>{
41
+ const out = {};
42
+ for (const [key, bucket] of Object.entries(map))out[key] = {
43
+ ...bucket
44
+ };
45
+ return out;
46
+ };
47
+ return {
48
+ totalPromptTokens: this.totalPromptTokens,
49
+ totalCompletionTokens: this.totalCompletionTokens,
50
+ totalTokens: this.totalTokens,
51
+ totalCachedInput: this.totalCachedInput,
52
+ totalTimeCostMs: this.totalTimeCostMs,
53
+ calls: this.calls,
54
+ byIntent: cloneBuckets(this.byIntent),
55
+ byModel: cloneBuckets(this.byModel)
56
+ };
57
+ }
58
+ reset() {
59
+ this.totalPromptTokens = 0;
60
+ this.totalCompletionTokens = 0;
61
+ this.totalTokens = 0;
62
+ this.totalCachedInput = 0;
63
+ this.totalTimeCostMs = 0;
64
+ this.calls = 0;
65
+ this.byIntent = {};
66
+ this.byModel = {};
67
+ }
68
+ constructor(){
69
+ _define_property(this, "totalPromptTokens", 0);
70
+ _define_property(this, "totalCompletionTokens", 0);
71
+ _define_property(this, "totalTokens", 0);
72
+ _define_property(this, "totalCachedInput", 0);
73
+ _define_property(this, "totalTimeCostMs", 0);
74
+ _define_property(this, "calls", 0);
75
+ _define_property(this, "byIntent", {});
76
+ _define_property(this, "byModel", {});
77
+ }
78
+ }
79
+ export { MetricsCollector };
80
+
81
+ //# sourceMappingURL=metrics.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent/metrics.mjs","sources":["../../../src/agent/metrics.ts"],"sourcesContent":["import type { AIUsageInfo } from '@/types';\n\n/**\n * Aggregated usage for a single grouping key (intent or model).\n */\nexport interface UsageBucket {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n calls: number;\n}\n\n/**\n * Instance-level snapshot of LLM usage accumulated by an Agent.\n *\n * Designed for cost observability: read it back after a logical unit of work\n * and push to tools like Langfuse. `byIntent` / `byModel` provide free\n * breakdowns derived from the usage data Midscene already records per call.\n */\nexport interface MidsceneUsageMetrics {\n totalPromptTokens: number;\n totalCompletionTokens: number;\n totalTokens: number;\n totalCachedInput: number;\n totalTimeCostMs: number;\n calls: number;\n byIntent: Record<string, UsageBucket>;\n byModel: Record<string, UsageBucket>;\n}\n\nconst emptyBucket = (): UsageBucket => ({\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n calls: 0,\n});\n\nconst addToBucket = (\n map: Record<string, UsageBucket>,\n key: string,\n prompt: number,\n completion: number,\n total: number,\n): void => {\n if (!map[key]) {\n map[key] = emptyBucket();\n }\n const bucket = map[key];\n bucket.promptTokens += prompt;\n bucket.completionTokens += completion;\n bucket.totalTokens += total;\n bucket.calls += 1;\n};\n\n/**\n * Pure accumulator for {@link AIUsageInfo}. Deduplication of calls is the\n * caller's responsibility; every `add` counts as one call.\n */\nexport class MetricsCollector {\n private totalPromptTokens = 0;\n private totalCompletionTokens = 0;\n private totalTokens = 0;\n private totalCachedInput = 0;\n private totalTimeCostMs = 0;\n private calls = 0;\n private byIntent: Record<string, UsageBucket> = {};\n private byModel: Record<string, UsageBucket> = {};\n\n add(usage: AIUsageInfo): void {\n const prompt = usage.prompt_tokens ?? 0;\n const completion = usage.completion_tokens ?? 0;\n const total = usage.total_tokens ?? 0;\n\n this.totalPromptTokens += prompt;\n this.totalCompletionTokens += completion;\n this.totalTokens += total;\n this.totalCachedInput += usage.cached_input ?? 0;\n this.totalTimeCostMs += usage.time_cost ?? 0;\n this.calls += 1;\n\n addToBucket(\n this.byIntent,\n usage.intent ?? 'unknown',\n prompt,\n completion,\n total,\n );\n addToBucket(\n this.byModel,\n usage.model_name ?? 'unknown',\n prompt,\n completion,\n total,\n );\n }\n\n snapshot(): MidsceneUsageMetrics {\n const cloneBuckets = (\n map: Record<string, UsageBucket>,\n ): Record<string, UsageBucket> => {\n const out: Record<string, UsageBucket> = {};\n for (const [key, bucket] of Object.entries(map)) {\n out[key] = { ...bucket };\n }\n return out;\n };\n\n return {\n totalPromptTokens: this.totalPromptTokens,\n totalCompletionTokens: this.totalCompletionTokens,\n totalTokens: this.totalTokens,\n totalCachedInput: this.totalCachedInput,\n totalTimeCostMs: this.totalTimeCostMs,\n calls: this.calls,\n byIntent: cloneBuckets(this.byIntent),\n byModel: cloneBuckets(this.byModel),\n };\n }\n\n /**\n * Clear all accumulated state. Not wired to a public Agent API yet; kept for\n * a future per-unit reset (e.g. resetting metrics at the start of a spec).\n */\n reset(): void {\n this.totalPromptTokens = 0;\n this.totalCompletionTokens = 0;\n this.totalTokens = 0;\n this.totalCachedInput = 0;\n this.totalTimeCostMs = 0;\n this.calls = 0;\n this.byIntent = {};\n this.byModel = {};\n }\n}\n"],"names":["emptyBucket","addToBucket","map","key","prompt","completion","total","bucket","MetricsCollector","usage","cloneBuckets","out","Object"],"mappings":";;;;;;;;;;AA8BA,MAAMA,cAAc,IAAoB;QACtC,cAAc;QACd,kBAAkB;QAClB,aAAa;QACb,OAAO;IACT;AAEA,MAAMC,cAAc,CAClBC,KACAC,KACAC,QACAC,YACAC;IAEA,IAAI,CAACJ,GAAG,CAACC,IAAI,EACXD,GAAG,CAACC,IAAI,GAAGH;IAEb,MAAMO,SAASL,GAAG,CAACC,IAAI;IACvBI,OAAO,YAAY,IAAIH;IACvBG,OAAO,gBAAgB,IAAIF;IAC3BE,OAAO,WAAW,IAAID;IACtBC,OAAO,KAAK,IAAI;AAClB;AAMO,MAAMC;IAUX,IAAIC,KAAkB,EAAQ;QAC5B,MAAML,SAASK,MAAM,aAAa,IAAI;QACtC,MAAMJ,aAAaI,MAAM,iBAAiB,IAAI;QAC9C,MAAMH,QAAQG,MAAM,YAAY,IAAI;QAEpC,IAAI,CAAC,iBAAiB,IAAIL;QAC1B,IAAI,CAAC,qBAAqB,IAAIC;QAC9B,IAAI,CAAC,WAAW,IAAIC;QACpB,IAAI,CAAC,gBAAgB,IAAIG,MAAM,YAAY,IAAI;QAC/C,IAAI,CAAC,eAAe,IAAIA,MAAM,SAAS,IAAI;QAC3C,IAAI,CAAC,KAAK,IAAI;QAEdR,YACE,IAAI,CAAC,QAAQ,EACbQ,MAAM,MAAM,IAAI,WAChBL,QACAC,YACAC;QAEFL,YACE,IAAI,CAAC,OAAO,EACZQ,MAAM,UAAU,IAAI,WACpBL,QACAC,YACAC;IAEJ;IAEA,WAAiC;QAC/B,MAAMI,eAAe,CACnBR;YAEA,MAAMS,MAAmC,CAAC;YAC1C,KAAK,MAAM,CAACR,KAAKI,OAAO,IAAIK,OAAO,OAAO,CAACV,KACzCS,GAAG,CAACR,IAAI,GAAG;gBAAE,GAAGI,MAAM;YAAC;YAEzB,OAAOI;QACT;QAEA,OAAO;YACL,mBAAmB,IAAI,CAAC,iBAAiB;YACzC,uBAAuB,IAAI,CAAC,qBAAqB;YACjD,aAAa,IAAI,CAAC,WAAW;YAC7B,kBAAkB,IAAI,CAAC,gBAAgB;YACvC,iBAAiB,IAAI,CAAC,eAAe;YACrC,OAAO,IAAI,CAAC,KAAK;YACjB,UAAUD,aAAa,IAAI,CAAC,QAAQ;YACpC,SAASA,aAAa,IAAI,CAAC,OAAO;QACpC;IACF;IAMA,QAAc;QACZ,IAAI,CAAC,iBAAiB,GAAG;QACzB,IAAI,CAAC,qBAAqB,GAAG;QAC7B,IAAI,CAAC,WAAW,GAAG;QACnB,IAAI,CAAC,gBAAgB,GAAG;QACxB,IAAI,CAAC,eAAe,GAAG;QACvB,IAAI,CAAC,KAAK,GAAG;QACb,IAAI,CAAC,QAAQ,GAAG,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,CAAC;IAClB;;QAzEA,uBAAQ,qBAAoB;QAC5B,uBAAQ,yBAAwB;QAChC,uBAAQ,eAAc;QACtB,uBAAQ,oBAAmB;QAC3B,uBAAQ,mBAAkB;QAC1B,uBAAQ,SAAQ;QAChB,uBAAQ,YAAwC,CAAC;QACjD,uBAAQ,WAAuC,CAAC;;AAmElD"}
@@ -0,0 +1,199 @@
1
+ function isRecord(value) {
2
+ return 'object' == typeof value && null !== value && !Array.isArray(value);
3
+ }
4
+ const maxCompactStringLength = 180;
5
+ function compactProgressValue(value) {
6
+ if (null == value) return value;
7
+ if ('string' == typeof value) return value.length > maxCompactStringLength ? `${value.slice(0, maxCompactStringLength - 3)}...` : value;
8
+ if ('number' == typeof value || 'boolean' == typeof value) return value;
9
+ if (Array.isArray(value)) return value.slice(0, 5).map(compactProgressValue);
10
+ if (isRecord(value) && 'string' == typeof value.prompt) return compactProgressValue(value.prompt);
11
+ if (!isRecord(value)) return String(value);
12
+ const entries = Object.entries(value).slice(0, 6);
13
+ return Object.fromEntries(entries.map(([key, entryValue])=>[
14
+ key,
15
+ compactProgressValue(entryValue)
16
+ ]));
17
+ }
18
+ function summarizeParam(param) {
19
+ if (!param || 'object' != typeof param) return compactProgressValue(param);
20
+ const record = param;
21
+ if ('string' == typeof record.prompt) return compactProgressValue(record.prompt);
22
+ if (record.locate && 'object' == typeof record.locate && null !== record.locate) {
23
+ const locate = record.locate;
24
+ return {
25
+ locate: compactProgressValue(locate.prompt),
26
+ ...Object.fromEntries(Object.entries(record).filter(([key])=>'locate' !== key).slice(0, 4).map(([key, value])=>[
27
+ key,
28
+ compactProgressValue(value)
29
+ ]))
30
+ };
31
+ }
32
+ return compactProgressValue(record);
33
+ }
34
+ function errorMessageForAiAct(error) {
35
+ return error instanceof Error ? error.message : String(error);
36
+ }
37
+ function numberFromUnknown(value) {
38
+ return 'number' == typeof value && Number.isFinite(value) ? value : void 0;
39
+ }
40
+ function bboxArrayFromProperty(value, key) {
41
+ const bbox = value[key];
42
+ if (!Array.isArray(bbox) || bbox.length < 4) return;
43
+ const left = numberFromUnknown(bbox[0]);
44
+ const top = numberFromUnknown(bbox[1]);
45
+ const right = numberFromUnknown(bbox[2]);
46
+ const bottom = numberFromUnknown(bbox[3]);
47
+ if (void 0 === left || void 0 === top || void 0 === right || void 0 === bottom) return;
48
+ return [
49
+ left,
50
+ top,
51
+ right,
52
+ bottom
53
+ ];
54
+ }
55
+ function centerPointFromBbox(bbox) {
56
+ return [
57
+ Math.floor((bbox[0] + bbox[2]) / 2),
58
+ Math.floor((bbox[1] + bbox[3]) / 2)
59
+ ];
60
+ }
61
+ function pointFromLocateLike(value) {
62
+ const center = value.center;
63
+ if (Array.isArray(center) && center.length >= 2) {
64
+ const x = numberFromUnknown(center[0]);
65
+ const y = numberFromUnknown(center[1]);
66
+ if (void 0 !== x && void 0 !== y) return [
67
+ x,
68
+ y
69
+ ];
70
+ }
71
+ const point = value.point;
72
+ if (Array.isArray(point) && point.length >= 2) {
73
+ const x = numberFromUnknown(point[0]);
74
+ const y = numberFromUnknown(point[1]);
75
+ if (void 0 !== x && void 0 !== y) return [
76
+ x,
77
+ y
78
+ ];
79
+ }
80
+ const locatedPixelBbox = bboxArrayFromProperty(value, 'locatedPixelBbox');
81
+ if (locatedPixelBbox) return centerPointFromBbox(locatedPixelBbox);
82
+ const bbox = bboxArrayFromProperty(value, 'bbox');
83
+ if (bbox) return centerPointFromBbox(bbox);
84
+ }
85
+ function bboxFromLocateLike(value) {
86
+ const locatedPixelBbox = bboxArrayFromProperty(value, 'locatedPixelBbox');
87
+ if (locatedPixelBbox) return locatedPixelBbox;
88
+ const bbox = bboxArrayFromProperty(value, 'bbox');
89
+ if (bbox) return bbox;
90
+ if (!isRecord(value.rect)) return;
91
+ const left = numberFromUnknown(value.rect.left);
92
+ const top = numberFromUnknown(value.rect.top);
93
+ const width = numberFromUnknown(value.rect.width);
94
+ const height = numberFromUnknown(value.rect.height);
95
+ if (void 0 === left || void 0 === top || void 0 === width || void 0 === height) return;
96
+ return [
97
+ left,
98
+ top,
99
+ left + width,
100
+ top + height
101
+ ];
102
+ }
103
+ function targetTextFromLocateLike(value) {
104
+ if ('string' == typeof value.description) return value.description;
105
+ if ('string' == typeof value.prompt) return value.prompt;
106
+ return '';
107
+ }
108
+ function isLocateLike(value) {
109
+ if (!isRecord(value)) return false;
110
+ return 'center' in value || 'rect' in value || 'point' in value || 'bbox' in value || 'prompt' in value || "description" in value;
111
+ }
112
+ const locatorParamKeys = [
113
+ 'locate',
114
+ 'from',
115
+ 'to',
116
+ 'start',
117
+ 'end'
118
+ ];
119
+ function firstLocateLikeParam(param) {
120
+ if (!isRecord(param)) return;
121
+ for (const key of locatorParamKeys){
122
+ const value = param[key];
123
+ if (isLocateLike(value)) return value;
124
+ }
125
+ return Object.values(param).find(isLocateLike);
126
+ }
127
+ function hasUnresolvedLocateLikeParam(param) {
128
+ if (!isRecord(param)) return false;
129
+ return Object.entries(param).some(([key, value])=>{
130
+ if (locatorParamKeys.includes(key) && 'string' == typeof value) return true;
131
+ return isLocateLike(value) && !pointFromLocateLike(value) && !bboxFromLocateLike(value);
132
+ });
133
+ }
134
+ function extractProgressAction(task) {
135
+ if ('Action Space' !== task.type || 'Finished' === task.subType || 'Error' === task.subType) return;
136
+ const name = 'string' == typeof task.subType && task.subType.length > 0 ? task.subType : 'Action';
137
+ const locate = firstLocateLikeParam(task.param);
138
+ if (locate) {
139
+ const point = pointFromLocateLike(locate);
140
+ if (point) {
141
+ const bbox = bboxFromLocateLike(locate);
142
+ const target = targetTextFromLocateLike(locate);
143
+ return {
144
+ name,
145
+ ...target ? {
146
+ target
147
+ } : {},
148
+ point,
149
+ ...bbox ? {
150
+ bbox
151
+ } : {}
152
+ };
153
+ }
154
+ }
155
+ if (hasUnresolvedLocateLikeParam(task.param)) return;
156
+ const param = summarizeParam(task.param);
157
+ return {
158
+ name,
159
+ ...void 0 !== param && '' !== param ? {
160
+ param
161
+ } : {}
162
+ };
163
+ }
164
+ function createAiActActionReporter(planIndex, planLimit, emit) {
165
+ return async (event)=>{
166
+ const action = extractProgressAction(event.task);
167
+ if (!action) return;
168
+ const base = {
169
+ planIndex,
170
+ planLimit,
171
+ action
172
+ };
173
+ const durationMs = event.task.timing?.cost;
174
+ switch(event.kind){
175
+ case 'start':
176
+ await emit('plan_action', base);
177
+ await emit('action_running', base);
178
+ break;
179
+ case 'finish':
180
+ await emit('action_done', {
181
+ ...base,
182
+ durationMs
183
+ });
184
+ break;
185
+ case 'error':
186
+ await emit('action_failed', {
187
+ ...base,
188
+ durationMs,
189
+ error: event.task.errorMessage
190
+ });
191
+ break;
192
+ default:
193
+ break;
194
+ }
195
+ };
196
+ }
197
+ export { createAiActActionReporter, errorMessageForAiAct, extractProgressAction };
198
+
199
+ //# sourceMappingURL=ai-act-progress.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent/progress/ai-act-progress.mjs","sources":["../../../../src/agent/progress/ai-act-progress.ts"],"sourcesContent":["import type { TaskRunnerEvent } from '@/task-runner';\nimport type {\n AiActProgressAction,\n AiActProgressData,\n AiActProgressPhase,\n ExecutionTask,\n} from '@/types';\n\n/**\n * Structured extraction helpers for aiAct progress notifications.\n *\n * This module turns a raw {@link ExecutionTask} into the structured\n * {@link AiActProgressAction} carried by progress events. It deliberately does\n * NOT build human-readable strings, truncate text for display, or format\n * coordinates into log lines - that is the consumer's job. Everything here is a\n * data transform that yields plain numbers/objects.\n */\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n// Keep params from bloating the progress payload without rendering them: this\n// only bounds the size of the structured value, it never formats it.\nconst maxCompactStringLength = 180;\n\nfunction compactProgressValue(value: unknown): unknown {\n if (value === undefined || value === null) {\n return value;\n }\n\n if (typeof value === 'string') {\n return value.length > maxCompactStringLength\n ? `${value.slice(0, maxCompactStringLength - 3)}...`\n : value;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.slice(0, 5).map(compactProgressValue);\n }\n\n if (isRecord(value) && typeof value.prompt === 'string') {\n return compactProgressValue(value.prompt);\n }\n\n if (!isRecord(value)) {\n return String(value);\n }\n\n const entries = Object.entries(value).slice(0, 6);\n return Object.fromEntries(\n entries.map(([key, entryValue]) => [key, compactProgressValue(entryValue)]),\n );\n}\n\nfunction summarizeParam(param: unknown): unknown {\n if (!param || typeof param !== 'object') {\n return compactProgressValue(param);\n }\n\n const record = param as Record<string, unknown>;\n if (typeof record.prompt === 'string') {\n return compactProgressValue(record.prompt);\n }\n if (\n record.locate &&\n typeof record.locate === 'object' &&\n record.locate !== null\n ) {\n const locate = record.locate as Record<string, unknown>;\n return {\n locate: compactProgressValue(locate.prompt),\n ...Object.fromEntries(\n Object.entries(record)\n .filter(([key]) => key !== 'locate')\n .slice(0, 4)\n .map(([key, value]) => [key, compactProgressValue(value)]),\n ),\n };\n }\n\n return compactProgressValue(record);\n}\n\nexport function errorMessageForAiAct(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction numberFromUnknown(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction bboxArrayFromProperty(\n value: Record<string, unknown>,\n key: string,\n): [number, number, number, number] | undefined {\n const bbox = value[key];\n if (!Array.isArray(bbox) || bbox.length < 4) {\n return undefined;\n }\n\n const left = numberFromUnknown(bbox[0]);\n const top = numberFromUnknown(bbox[1]);\n const right = numberFromUnknown(bbox[2]);\n const bottom = numberFromUnknown(bbox[3]);\n if (\n left === undefined ||\n top === undefined ||\n right === undefined ||\n bottom === undefined\n ) {\n return undefined;\n }\n\n return [left, top, right, bottom];\n}\n\nfunction centerPointFromBbox(\n bbox: readonly [number, number, number, number],\n): [number, number] {\n return [\n Math.floor((bbox[0] + bbox[2]) / 2),\n Math.floor((bbox[1] + bbox[3]) / 2),\n ];\n}\n\nfunction pointFromLocateLike(\n value: Record<string, unknown>,\n): [number, number] | undefined {\n const center = value.center;\n if (Array.isArray(center) && center.length >= 2) {\n const x = numberFromUnknown(center[0]);\n const y = numberFromUnknown(center[1]);\n if (x !== undefined && y !== undefined) {\n return [x, y];\n }\n }\n\n const point = value.point;\n if (Array.isArray(point) && point.length >= 2) {\n const x = numberFromUnknown(point[0]);\n const y = numberFromUnknown(point[1]);\n if (x !== undefined && y !== undefined) {\n return [x, y];\n }\n }\n\n const locatedPixelBbox = bboxArrayFromProperty(value, 'locatedPixelBbox');\n if (locatedPixelBbox) {\n return centerPointFromBbox(locatedPixelBbox);\n }\n\n const bbox = bboxArrayFromProperty(value, 'bbox');\n if (bbox) {\n return centerPointFromBbox(bbox);\n }\n\n return undefined;\n}\n\nfunction bboxFromLocateLike(\n value: Record<string, unknown>,\n): [number, number, number, number] | undefined {\n const locatedPixelBbox = bboxArrayFromProperty(value, 'locatedPixelBbox');\n if (locatedPixelBbox) {\n return locatedPixelBbox;\n }\n\n const bbox = bboxArrayFromProperty(value, 'bbox');\n if (bbox) {\n return bbox;\n }\n\n if (!isRecord(value.rect)) {\n return undefined;\n }\n\n const left = numberFromUnknown(value.rect.left);\n const top = numberFromUnknown(value.rect.top);\n const width = numberFromUnknown(value.rect.width);\n const height = numberFromUnknown(value.rect.height);\n if (\n left === undefined ||\n top === undefined ||\n width === undefined ||\n height === undefined\n ) {\n return undefined;\n }\n\n return [left, top, left + width, top + height];\n}\n\nfunction targetTextFromLocateLike(value: Record<string, unknown>): string {\n if (typeof value.description === 'string') {\n return value.description;\n }\n if (typeof value.prompt === 'string') {\n return value.prompt;\n }\n return '';\n}\n\nfunction isLocateLike(value: unknown): value is Record<string, unknown> {\n if (!isRecord(value)) {\n return false;\n }\n\n return (\n 'center' in value ||\n 'rect' in value ||\n 'point' in value ||\n 'bbox' in value ||\n 'prompt' in value ||\n 'description' in value\n );\n}\n\nconst locatorParamKeys = ['locate', 'from', 'to', 'start', 'end'];\n\nfunction firstLocateLikeParam(\n param: unknown,\n): Record<string, unknown> | undefined {\n if (!isRecord(param)) {\n return undefined;\n }\n\n for (const key of locatorParamKeys) {\n const value = param[key];\n if (isLocateLike(value)) {\n return value;\n }\n }\n\n return Object.values(param).find(isLocateLike);\n}\n\nfunction hasUnresolvedLocateLikeParam(param: unknown): boolean {\n if (!isRecord(param)) {\n return false;\n }\n\n return Object.entries(param).some(([key, value]) => {\n if (locatorParamKeys.includes(key) && typeof value === 'string') {\n return true;\n }\n\n return (\n isLocateLike(value) &&\n !pointFromLocateLike(value) &&\n !bboxFromLocateLike(value)\n );\n });\n}\n\n/**\n * Extract the structured action descriptor for an Action Space task, or\n * `undefined` when the task is not a reportable action yet (e.g. a locate param\n * that has not been resolved to coordinates). Returns plain data only.\n */\nexport function extractProgressAction(\n task: ExecutionTask,\n): AiActProgressAction | undefined {\n if (\n task.type !== 'Action Space' ||\n task.subType === 'Finished' ||\n task.subType === 'Error'\n ) {\n return undefined;\n }\n\n const name =\n typeof task.subType === 'string' && task.subType.length > 0\n ? task.subType\n : 'Action';\n\n const locate = firstLocateLikeParam(task.param);\n if (locate) {\n const point = pointFromLocateLike(locate);\n if (point) {\n const bbox = bboxFromLocateLike(locate);\n const target = targetTextFromLocateLike(locate);\n return {\n name,\n ...(target ? { target } : {}),\n point,\n ...(bbox ? { bbox } : {}),\n };\n }\n }\n\n // A locate-like param that has not resolved to a point/bbox is not reportable\n // yet; skip it so the consumer never renders a half-resolved action.\n if (hasUnresolvedLocateLikeParam(task.param)) {\n return undefined;\n }\n\n const param = summarizeParam(task.param);\n return {\n name,\n ...(param !== undefined && param !== '' ? { param } : {}),\n };\n}\n\nexport type AiActProgressEmit = (\n phase: AiActProgressPhase,\n data: AiActProgressData,\n) => void | Promise<void>;\n\n/**\n * Translate the runner's native task-lifecycle events into aiAct action\n * progress for a single planning round.\n *\n * Returned as a closure so each action batch captures its own plan context\n * instead of the executor threading it through shared mutable state. The\n * mapping is deliberate and one-shot per transition: a `start` (coordinates are\n * resolved by the time an action starts) becomes the \"planned\" + \"running\"\n * pair, and `finish`/`error` become \"done\"/\"failed\".\n */\nexport function createAiActActionReporter(\n planIndex: number,\n planLimit: number,\n emit: AiActProgressEmit,\n): (event: TaskRunnerEvent) => Promise<void> {\n return async (event) => {\n const action = extractProgressAction(event.task);\n if (!action) {\n return;\n }\n\n const base = { planIndex, planLimit, action };\n const durationMs = event.task.timing?.cost;\n\n switch (event.kind) {\n case 'start':\n await emit('plan_action', base);\n await emit('action_running', base);\n break;\n case 'finish':\n await emit('action_done', { ...base, durationMs });\n break;\n case 'error':\n await emit('action_failed', {\n ...base,\n durationMs,\n error: event.task.errorMessage,\n });\n break;\n default:\n break;\n }\n };\n}\n"],"names":["isRecord","value","Array","maxCompactStringLength","compactProgressValue","String","entries","Object","key","entryValue","summarizeParam","param","record","locate","errorMessageForAiAct","error","Error","numberFromUnknown","Number","undefined","bboxArrayFromProperty","bbox","left","top","right","bottom","centerPointFromBbox","Math","pointFromLocateLike","center","x","y","point","locatedPixelBbox","bboxFromLocateLike","width","height","targetTextFromLocateLike","isLocateLike","locatorParamKeys","firstLocateLikeParam","hasUnresolvedLocateLikeParam","extractProgressAction","task","name","target","createAiActActionReporter","planIndex","planLimit","emit","event","action","base","durationMs"],"mappings":"AAkBA,SAASA,SAASC,KAAc;IAC9B,OAAO,AAAiB,YAAjB,OAAOA,SAAsBA,AAAU,SAAVA,SAAkB,CAACC,MAAM,OAAO,CAACD;AACvE;AAIA,MAAME,yBAAyB;AAE/B,SAASC,qBAAqBH,KAAc;IAC1C,IAAIA,QAAAA,OACF,OAAOA;IAGT,IAAI,AAAiB,YAAjB,OAAOA,OACT,OAAOA,MAAM,MAAM,GAAGE,yBAClB,GAAGF,MAAM,KAAK,CAAC,GAAGE,yBAAyB,GAAG,GAAG,CAAC,GAClDF;IAGN,IAAI,AAAiB,YAAjB,OAAOA,SAAsB,AAAiB,aAAjB,OAAOA,OACtC,OAAOA;IAGT,IAAIC,MAAM,OAAO,CAACD,QAChB,OAAOA,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,CAACG;IAG/B,IAAIJ,SAASC,UAAU,AAAwB,YAAxB,OAAOA,MAAM,MAAM,EACxC,OAAOG,qBAAqBH,MAAM,MAAM;IAG1C,IAAI,CAACD,SAASC,QACZ,OAAOI,OAAOJ;IAGhB,MAAMK,UAAUC,OAAO,OAAO,CAACN,OAAO,KAAK,CAAC,GAAG;IAC/C,OAAOM,OAAO,WAAW,CACvBD,QAAQ,GAAG,CAAC,CAAC,CAACE,KAAKC,WAAW,GAAK;YAACD;YAAKJ,qBAAqBK;SAAY;AAE9E;AAEA,SAASC,eAAeC,KAAc;IACpC,IAAI,CAACA,SAAS,AAAiB,YAAjB,OAAOA,OACnB,OAAOP,qBAAqBO;IAG9B,MAAMC,SAASD;IACf,IAAI,AAAyB,YAAzB,OAAOC,OAAO,MAAM,EACtB,OAAOR,qBAAqBQ,OAAO,MAAM;IAE3C,IACEA,OAAO,MAAM,IACb,AAAyB,YAAzB,OAAOA,OAAO,MAAM,IACpBA,AAAkB,SAAlBA,OAAO,MAAM,EACb;QACA,MAAMC,SAASD,OAAO,MAAM;QAC5B,OAAO;YACL,QAAQR,qBAAqBS,OAAO,MAAM;YAC1C,GAAGN,OAAO,WAAW,CACnBA,OAAO,OAAO,CAACK,QACZ,MAAM,CAAC,CAAC,CAACJ,IAAI,GAAKA,AAAQ,aAARA,KAClB,KAAK,CAAC,GAAG,GACT,GAAG,CAAC,CAAC,CAACA,KAAKP,MAAM,GAAK;oBAACO;oBAAKJ,qBAAqBH;iBAAO,EAC5D;QACH;IACF;IAEA,OAAOG,qBAAqBQ;AAC9B;AAEO,SAASE,qBAAqBC,KAAc;IACjD,OAAOA,iBAAiBC,QAAQD,MAAM,OAAO,GAAGV,OAAOU;AACzD;AAEA,SAASE,kBAAkBhB,KAAc;IACvC,OAAO,AAAiB,YAAjB,OAAOA,SAAsBiB,OAAO,QAAQ,CAACjB,SAChDA,QACAkB;AACN;AAEA,SAASC,sBACPnB,KAA8B,EAC9BO,GAAW;IAEX,MAAMa,OAAOpB,KAAK,CAACO,IAAI;IACvB,IAAI,CAACN,MAAM,OAAO,CAACmB,SAASA,KAAK,MAAM,GAAG,GACxC;IAGF,MAAMC,OAAOL,kBAAkBI,IAAI,CAAC,EAAE;IACtC,MAAME,MAAMN,kBAAkBI,IAAI,CAAC,EAAE;IACrC,MAAMG,QAAQP,kBAAkBI,IAAI,CAAC,EAAE;IACvC,MAAMI,SAASR,kBAAkBI,IAAI,CAAC,EAAE;IACxC,IACEC,AAASH,WAATG,QACAC,AAAQJ,WAARI,OACAC,AAAUL,WAAVK,SACAC,AAAWN,WAAXM,QAEA;IAGF,OAAO;QAACH;QAAMC;QAAKC;QAAOC;KAAO;AACnC;AAEA,SAASC,oBACPL,IAA+C;IAE/C,OAAO;QACLM,KAAK,KAAK,CAAEN,AAAAA,CAAAA,IAAI,CAAC,EAAE,GAAGA,IAAI,CAAC,EAAC,IAAK;QACjCM,KAAK,KAAK,CAAEN,AAAAA,CAAAA,IAAI,CAAC,EAAE,GAAGA,IAAI,CAAC,EAAC,IAAK;KAClC;AACH;AAEA,SAASO,oBACP3B,KAA8B;IAE9B,MAAM4B,SAAS5B,MAAM,MAAM;IAC3B,IAAIC,MAAM,OAAO,CAAC2B,WAAWA,OAAO,MAAM,IAAI,GAAG;QAC/C,MAAMC,IAAIb,kBAAkBY,MAAM,CAAC,EAAE;QACrC,MAAME,IAAId,kBAAkBY,MAAM,CAAC,EAAE;QACrC,IAAIC,AAAMX,WAANW,KAAmBC,AAAMZ,WAANY,GACrB,OAAO;YAACD;YAAGC;SAAE;IAEjB;IAEA,MAAMC,QAAQ/B,MAAM,KAAK;IACzB,IAAIC,MAAM,OAAO,CAAC8B,UAAUA,MAAM,MAAM,IAAI,GAAG;QAC7C,MAAMF,IAAIb,kBAAkBe,KAAK,CAAC,EAAE;QACpC,MAAMD,IAAId,kBAAkBe,KAAK,CAAC,EAAE;QACpC,IAAIF,AAAMX,WAANW,KAAmBC,AAAMZ,WAANY,GACrB,OAAO;YAACD;YAAGC;SAAE;IAEjB;IAEA,MAAME,mBAAmBb,sBAAsBnB,OAAO;IACtD,IAAIgC,kBACF,OAAOP,oBAAoBO;IAG7B,MAAMZ,OAAOD,sBAAsBnB,OAAO;IAC1C,IAAIoB,MACF,OAAOK,oBAAoBL;AAI/B;AAEA,SAASa,mBACPjC,KAA8B;IAE9B,MAAMgC,mBAAmBb,sBAAsBnB,OAAO;IACtD,IAAIgC,kBACF,OAAOA;IAGT,MAAMZ,OAAOD,sBAAsBnB,OAAO;IAC1C,IAAIoB,MACF,OAAOA;IAGT,IAAI,CAACrB,SAASC,MAAM,IAAI,GACtB;IAGF,MAAMqB,OAAOL,kBAAkBhB,MAAM,IAAI,CAAC,IAAI;IAC9C,MAAMsB,MAAMN,kBAAkBhB,MAAM,IAAI,CAAC,GAAG;IAC5C,MAAMkC,QAAQlB,kBAAkBhB,MAAM,IAAI,CAAC,KAAK;IAChD,MAAMmC,SAASnB,kBAAkBhB,MAAM,IAAI,CAAC,MAAM;IAClD,IACEqB,AAASH,WAATG,QACAC,AAAQJ,WAARI,OACAY,AAAUhB,WAAVgB,SACAC,AAAWjB,WAAXiB,QAEA;IAGF,OAAO;QAACd;QAAMC;QAAKD,OAAOa;QAAOZ,MAAMa;KAAO;AAChD;AAEA,SAASC,yBAAyBpC,KAA8B;IAC9D,IAAI,AAA6B,YAA7B,OAAOA,MAAM,WAAW,EAC1B,OAAOA,MAAM,WAAW;IAE1B,IAAI,AAAwB,YAAxB,OAAOA,MAAM,MAAM,EACrB,OAAOA,MAAM,MAAM;IAErB,OAAO;AACT;AAEA,SAASqC,aAAarC,KAAc;IAClC,IAAI,CAACD,SAASC,QACZ,OAAO;IAGT,OACE,YAAYA,SACZ,UAAUA,SACV,WAAWA,SACX,UAAUA,SACV,YAAYA,SACZ,iBAAiBA;AAErB;AAEA,MAAMsC,mBAAmB;IAAC;IAAU;IAAQ;IAAM;IAAS;CAAM;AAEjE,SAASC,qBACP7B,KAAc;IAEd,IAAI,CAACX,SAASW,QACZ;IAGF,KAAK,MAAMH,OAAO+B,iBAAkB;QAClC,MAAMtC,QAAQU,KAAK,CAACH,IAAI;QACxB,IAAI8B,aAAarC,QACf,OAAOA;IAEX;IAEA,OAAOM,OAAO,MAAM,CAACI,OAAO,IAAI,CAAC2B;AACnC;AAEA,SAASG,6BAA6B9B,KAAc;IAClD,IAAI,CAACX,SAASW,QACZ,OAAO;IAGT,OAAOJ,OAAO,OAAO,CAACI,OAAO,IAAI,CAAC,CAAC,CAACH,KAAKP,MAAM;QAC7C,IAAIsC,iBAAiB,QAAQ,CAAC/B,QAAQ,AAAiB,YAAjB,OAAOP,OAC3C,OAAO;QAGT,OACEqC,aAAarC,UACb,CAAC2B,oBAAoB3B,UACrB,CAACiC,mBAAmBjC;IAExB;AACF;AAOO,SAASyC,sBACdC,IAAmB;IAEnB,IACEA,AAAc,mBAAdA,KAAK,IAAI,IACTA,AAAiB,eAAjBA,KAAK,OAAO,IACZA,AAAiB,YAAjBA,KAAK,OAAO,EAEZ;IAGF,MAAMC,OACJ,AAAwB,YAAxB,OAAOD,KAAK,OAAO,IAAiBA,KAAK,OAAO,CAAC,MAAM,GAAG,IACtDA,KAAK,OAAO,GACZ;IAEN,MAAM9B,SAAS2B,qBAAqBG,KAAK,KAAK;IAC9C,IAAI9B,QAAQ;QACV,MAAMmB,QAAQJ,oBAAoBf;QAClC,IAAImB,OAAO;YACT,MAAMX,OAAOa,mBAAmBrB;YAChC,MAAMgC,SAASR,yBAAyBxB;YACxC,OAAO;gBACL+B;gBACA,GAAIC,SAAS;oBAAEA;gBAAO,IAAI,CAAC,CAAC;gBAC5Bb;gBACA,GAAIX,OAAO;oBAAEA;gBAAK,IAAI,CAAC,CAAC;YAC1B;QACF;IACF;IAIA,IAAIoB,6BAA6BE,KAAK,KAAK,GACzC;IAGF,MAAMhC,QAAQD,eAAeiC,KAAK,KAAK;IACvC,OAAO;QACLC;QACA,GAAIjC,AAAUQ,WAAVR,SAAuBA,AAAU,OAAVA,QAAe;YAAEA;QAAM,IAAI,CAAC,CAAC;IAC1D;AACF;AAiBO,SAASmC,0BACdC,SAAiB,EACjBC,SAAiB,EACjBC,IAAuB;IAEvB,OAAO,OAAOC;QACZ,MAAMC,SAAST,sBAAsBQ,MAAM,IAAI;QAC/C,IAAI,CAACC,QACH;QAGF,MAAMC,OAAO;YAAEL;YAAWC;YAAWG;QAAO;QAC5C,MAAME,aAAaH,MAAM,IAAI,CAAC,MAAM,EAAE;QAEtC,OAAQA,MAAM,IAAI;YAChB,KAAK;gBACH,MAAMD,KAAK,eAAeG;gBAC1B,MAAMH,KAAK,kBAAkBG;gBAC7B;YACF,KAAK;gBACH,MAAMH,KAAK,eAAe;oBAAE,GAAGG,IAAI;oBAAEC;gBAAW;gBAChD;YACF,KAAK;gBACH,MAAMJ,KAAK,iBAAiB;oBAC1B,GAAGG,IAAI;oBACPC;oBACA,OAAOH,MAAM,IAAI,CAAC,YAAY;gBAChC;gBACA;YACF;gBACE;QACJ;IACF;AACF"}
@@ -0,0 +1,2 @@
1
+ export * from "./progress-bus.mjs";
2
+ export * from "./ai-act-progress.mjs";
@@ -0,0 +1,52 @@
1
+ import { getDebug } from "@aiscene/shared/logger";
2
+ function _define_property(obj, key, value) {
3
+ if (key in obj) Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ else obj[key] = value;
10
+ return obj;
11
+ }
12
+ const debugError = getDebug('agent-progress-bus', {
13
+ console: true
14
+ });
15
+ class AgentProgressBus {
16
+ subscribe(listener) {
17
+ this.listeners.push(listener);
18
+ return ()=>{
19
+ this.unsubscribe(listener);
20
+ };
21
+ }
22
+ unsubscribe(listener) {
23
+ const index = this.listeners.indexOf(listener);
24
+ if (index > -1) this.listeners.splice(index, 1);
25
+ }
26
+ clear() {
27
+ this.listeners = [];
28
+ }
29
+ get listenerCount() {
30
+ return this.listeners.length;
31
+ }
32
+ constructor(){
33
+ _define_property(this, "listeners", []);
34
+ _define_property(this, "sequence", 0);
35
+ _define_property(this, "publish", async (scope, phase, data)=>{
36
+ const event = {
37
+ scope,
38
+ phase,
39
+ sequence: ++this.sequence,
40
+ data
41
+ };
42
+ for (const listener of this.listeners)try {
43
+ await listener(event);
44
+ } catch (error) {
45
+ debugError('error in progress listener', error);
46
+ }
47
+ });
48
+ }
49
+ }
50
+ export { AgentProgressBus };
51
+
52
+ //# sourceMappingURL=progress-bus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent/progress/progress-bus.mjs","sources":["../../../../src/agent/progress/progress-bus.ts"],"sourcesContent":["import type { AgentProgressEvent, AgentProgressListener } from '@/types';\nimport { getDebug } from '@aiscene/shared/logger';\n\nconst debugError = getDebug('agent-progress-bus', { console: true });\n\n/**\n * A function that publishes one progress notification: it names the producer\n * (`scope`) and the lifecycle `phase`, and hands over the structured `data`.\n * The bus owns the sequence number, so producers never stamp it themselves.\n */\nexport type AgentProgressPublisher = (\n scope: string,\n phase: string,\n data: unknown,\n) => Promise<void>;\n\n/**\n * The generic agent progress bus.\n *\n * A single broadcast channel every producer publishes onto and every consumer\n * subscribes to. The bus is intentionally tiny and producer-agnostic: it stamps\n * a monotonic sequence, wraps the payload in an {@link AgentProgressEvent}\n * envelope, and fans it out to listeners with per-listener error isolation.\n * `aiAct` is the first producer; adding more requires nothing here.\n */\nexport class AgentProgressBus {\n private listeners: AgentProgressListener[] = [];\n\n private sequence = 0;\n\n /**\n * Register a listener. Returns a disposer that removes it.\n */\n subscribe(listener: AgentProgressListener): () => void {\n this.listeners.push(listener);\n return () => {\n this.unsubscribe(listener);\n };\n }\n\n unsubscribe(listener: AgentProgressListener): void {\n const index = this.listeners.indexOf(listener);\n if (index > -1) {\n this.listeners.splice(index, 1);\n }\n }\n\n clear(): void {\n this.listeners = [];\n }\n\n get listenerCount(): number {\n return this.listeners.length;\n }\n\n /**\n * Stamp a monotonic sequence, build the envelope, and broadcast it to every\n * listener in registration order. A listener that throws is logged and\n * skipped so it cannot break the others or the producer.\n */\n publish: AgentProgressPublisher = async (scope, phase, data) => {\n const event: AgentProgressEvent = {\n scope,\n phase,\n sequence: ++this.sequence,\n data,\n };\n for (const listener of this.listeners) {\n try {\n await listener(event);\n } catch (error) {\n debugError('error in progress listener', error);\n }\n }\n };\n}\n"],"names":["debugError","getDebug","AgentProgressBus","listener","index","scope","phase","data","event","error"],"mappings":";;;;;;;;;;;AAGA,MAAMA,aAAaC,SAAS,sBAAsB;IAAE,SAAS;AAAK;AAsB3D,MAAMC;IAQX,UAAUC,QAA+B,EAAc;QACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAACA;QACpB,OAAO;YACL,IAAI,CAAC,WAAW,CAACA;QACnB;IACF;IAEA,YAAYA,QAA+B,EAAQ;QACjD,MAAMC,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD;QACrC,IAAIC,QAAQ,IACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAACA,OAAO;IAEjC;IAEA,QAAc;QACZ,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;IAEA,IAAI,gBAAwB;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM;IAC9B;;QA3BA,uBAAQ,aAAqC,EAAE;QAE/C,uBAAQ,YAAW;QAgCnB,kCAAkC,OAAOC,OAAOC,OAAOC;YACrD,MAAMC,QAA4B;gBAChCH;gBACAC;gBACA,UAAU,EAAE,IAAI,CAAC,QAAQ;gBACzBC;YACF;YACA,KAAK,MAAMJ,YAAY,IAAI,CAAC,SAAS,CACnC,IAAI;gBACF,MAAMA,SAASK;YACjB,EAAE,OAAOC,OAAO;gBACdT,WAAW,8BAA8BS;YAC3C;QAEJ;;AACF"}
@@ -0,0 +1,25 @@
1
+ const buildPromptWithContext = (prompt, context)=>{
2
+ const trimmedContext = context?.trim();
3
+ if (!trimmedContext) return prompt;
4
+ const promptText = 'string' == typeof prompt ? prompt : prompt.prompt;
5
+ const promptWithContext = `Context for this request:\n${trimmedContext}\n\n${promptText}`;
6
+ if ('string' == typeof prompt) return promptWithContext;
7
+ return {
8
+ ...prompt,
9
+ prompt: promptWithContext
10
+ };
11
+ };
12
+ const buildLocatePromptWithContext = (prompt, context)=>{
13
+ const trimmedContext = context?.trim();
14
+ if (!trimmedContext) return prompt;
15
+ const promptText = 'string' == typeof prompt ? prompt : prompt.prompt;
16
+ const promptWithContext = `<CONTEXT>\n${trimmedContext}\n</CONTEXT>\n\n<LOCATE_TARGET>\n${promptText}\n</LOCATE_TARGET>`;
17
+ if ('string' == typeof prompt) return promptWithContext;
18
+ return {
19
+ ...prompt,
20
+ prompt: promptWithContext
21
+ };
22
+ };
23
+ export { buildLocatePromptWithContext, buildPromptWithContext };
24
+
25
+ //# sourceMappingURL=prompt-context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent/prompt-context.mjs","sources":["../../../src/agent/prompt-context.ts"],"sourcesContent":["import type { TUserPrompt } from '@/ai-model';\n\nexport const buildPromptWithContext = (\n prompt: TUserPrompt,\n context: string | undefined,\n): TUserPrompt => {\n const trimmedContext = context?.trim();\n if (!trimmedContext) {\n return prompt;\n }\n\n const promptText = typeof prompt === 'string' ? prompt : prompt.prompt;\n const promptWithContext = `Context for this request:\\n${trimmedContext}\\n\\n${promptText}`;\n\n if (typeof prompt === 'string') {\n return promptWithContext;\n }\n\n return {\n ...prompt,\n prompt: promptWithContext,\n };\n};\n\nexport const buildLocatePromptWithContext = (\n prompt: TUserPrompt,\n context: string | undefined,\n): TUserPrompt => {\n const trimmedContext = context?.trim();\n if (!trimmedContext) {\n return prompt;\n }\n\n const promptText = typeof prompt === 'string' ? prompt : prompt.prompt;\n const promptWithContext = `<CONTEXT>\\n${trimmedContext}\\n</CONTEXT>\\n\\n<LOCATE_TARGET>\\n${promptText}\\n</LOCATE_TARGET>`;\n\n if (typeof prompt === 'string') {\n return promptWithContext;\n }\n\n return {\n ...prompt,\n prompt: promptWithContext,\n };\n};\n"],"names":["buildPromptWithContext","prompt","context","trimmedContext","promptText","promptWithContext","buildLocatePromptWithContext"],"mappings":"AAEO,MAAMA,yBAAyB,CACpCC,QACAC;IAEA,MAAMC,iBAAiBD,SAAS;IAChC,IAAI,CAACC,gBACH,OAAOF;IAGT,MAAMG,aAAa,AAAkB,YAAlB,OAAOH,SAAsBA,SAASA,OAAO,MAAM;IACtE,MAAMI,oBAAoB,CAAC,2BAA2B,EAAEF,eAAe,IAAI,EAAEC,YAAY;IAEzF,IAAI,AAAkB,YAAlB,OAAOH,QACT,OAAOI;IAGT,OAAO;QACL,GAAGJ,MAAM;QACT,QAAQI;IACV;AACF;AAEO,MAAMC,+BAA+B,CAC1CL,QACAC;IAEA,MAAMC,iBAAiBD,SAAS;IAChC,IAAI,CAACC,gBACH,OAAOF;IAGT,MAAMG,aAAa,AAAkB,YAAlB,OAAOH,SAAsBA,SAASA,OAAO,MAAM;IACtE,MAAMI,oBAAoB,CAAC,WAAW,EAAEF,eAAe,iCAAiC,EAAEC,WAAW,kBAAkB,CAAC;IAExH,IAAI,AAAkB,YAAlB,OAAOH,QACT,OAAOI;IAGT,OAAO;QACL,GAAGJ,MAAM;QACT,QAAQI;IACV;AACF"}
@@ -0,0 +1,14 @@
1
+ import { normalizeScreenshotBase64 } from "@aiscene/shared/img";
2
+ function normalizeRecordToReportScreenshot(screenshot, index) {
3
+ if (!screenshot || 'string' != typeof screenshot.base64) throw new Error(`recordToReport: screenshot #${index + 1} must include a base64 string`);
4
+ if (void 0 !== screenshot.description && 'string' != typeof screenshot.description) throw new Error(`recordToReport: screenshot #${index + 1} description must be a string`);
5
+ return {
6
+ base64: normalizeScreenshotBase64(screenshot.base64, {
7
+ label: `recordToReport: screenshot #${index + 1} base64`
8
+ }),
9
+ description: screenshot.description
10
+ };
11
+ }
12
+ export { normalizeRecordToReportScreenshot };
13
+
14
+ //# sourceMappingURL=record-to-report.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent/record-to-report.mjs","sources":["../../../src/agent/record-to-report.ts"],"sourcesContent":["import type { RecordToReportScreenshot } from '@/types';\nimport { normalizeScreenshotBase64 } from '@aiscene/shared/img';\n\nexport function normalizeRecordToReportScreenshot(\n screenshot: RecordToReportScreenshot,\n index: number,\n): RecordToReportScreenshot {\n if (!screenshot || typeof screenshot.base64 !== 'string') {\n throw new Error(\n `recordToReport: screenshot #${index + 1} must include a base64 string`,\n );\n }\n\n if (\n screenshot.description !== undefined &&\n typeof screenshot.description !== 'string'\n ) {\n throw new Error(\n `recordToReport: screenshot #${index + 1} description must be a string`,\n );\n }\n\n return {\n base64: normalizeScreenshotBase64(screenshot.base64, {\n label: `recordToReport: screenshot #${index + 1} base64`,\n }),\n description: screenshot.description,\n };\n}\n"],"names":["normalizeRecordToReportScreenshot","screenshot","index","Error","undefined","normalizeScreenshotBase64"],"mappings":";AAGO,SAASA,kCACdC,UAAoC,EACpCC,KAAa;IAEb,IAAI,CAACD,cAAc,AAA6B,YAA7B,OAAOA,WAAW,MAAM,EACzC,MAAM,IAAIE,MACR,CAAC,4BAA4B,EAAED,QAAQ,EAAE,6BAA6B,CAAC;IAI3E,IACED,AAA2BG,WAA3BH,WAAW,WAAW,IACtB,AAAkC,YAAlC,OAAOA,WAAW,WAAW,EAE7B,MAAM,IAAIE,MACR,CAAC,4BAA4B,EAAED,QAAQ,EAAE,6BAA6B,CAAC;IAI3E,OAAO;QACL,QAAQG,0BAA0BJ,WAAW,MAAM,EAAE;YACnD,OAAO,CAAC,4BAA4B,EAAEC,QAAQ,EAAE,OAAO,CAAC;QAC1D;QACA,aAAaD,WAAW,WAAW;IACrC;AACF"}