@midscene/core 1.16.2 → 1.16.6-beta-20261023073257.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/dist/es/agent/agent.mjs +11 -11
  2. package/dist/es/agent/agent.mjs.map +1 -1
  3. package/dist/es/agent/insight.mjs.map +1 -1
  4. package/dist/es/agent/tasks.mjs +72 -39
  5. package/dist/es/agent/tasks.mjs.map +1 -1
  6. package/dist/es/agent/utils.mjs +1 -1
  7. package/dist/es/ai-model/connectivity/run-connectivity-test.mjs +27 -22
  8. package/dist/es/ai-model/connectivity/run-connectivity-test.mjs.map +1 -1
  9. package/dist/es/ai-model/index.mjs +4 -2
  10. package/dist/es/ai-model/model-adapter/resolve.mjs +4 -2
  11. package/dist/es/ai-model/model-adapter/resolve.mjs.map +1 -1
  12. package/dist/es/ai-model/models/jev/adapter.mjs +6 -110
  13. package/dist/es/ai-model/models/jev/adapter.mjs.map +1 -1
  14. package/dist/es/ai-model/models/jev/boolean.mjs +48 -0
  15. package/dist/es/ai-model/models/jev/boolean.mjs.map +1 -0
  16. package/dist/es/ai-model/models/jev/image.mjs +39 -36
  17. package/dist/es/ai-model/models/jev/image.mjs.map +1 -1
  18. package/dist/es/ai-model/models/jev/locate.mjs +48 -0
  19. package/dist/es/ai-model/models/jev/locate.mjs.map +1 -0
  20. package/dist/es/ai-model/models/jev/planning-action.mjs +35 -0
  21. package/dist/es/ai-model/models/jev/planning-action.mjs.map +1 -0
  22. package/dist/es/ai-model/models/jev/planning-context.mjs +38 -0
  23. package/dist/es/ai-model/models/jev/planning-context.mjs.map +1 -0
  24. package/dist/es/ai-model/models/jev/planning-decision.mjs +68 -0
  25. package/dist/es/ai-model/models/jev/planning-decision.mjs.map +1 -0
  26. package/dist/es/ai-model/models/jev/planning.mjs +19 -131
  27. package/dist/es/ai-model/models/jev/planning.mjs.map +1 -1
  28. package/dist/es/ai-model/models/model-fallback.mjs +28 -0
  29. package/dist/es/ai-model/models/model-fallback.mjs.map +1 -0
  30. package/dist/es/ai-model/service-caller/call-ai.mjs +54 -27
  31. package/dist/es/ai-model/service-caller/call-ai.mjs.map +1 -1
  32. package/dist/es/ai-model/service-caller/codex/call-codex.mjs.map +1 -1
  33. package/dist/es/ai-model/service-caller/index.mjs +2 -2
  34. package/dist/es/ai-model/service-caller/model-call.mjs +3 -3
  35. package/dist/es/ai-model/service-caller/model-call.mjs.map +1 -1
  36. package/dist/es/ai-model/service-caller/openai/call-openai.mjs +4 -2
  37. package/dist/es/ai-model/service-caller/openai/call-openai.mjs.map +1 -1
  38. package/dist/es/ai-model/service-caller/openai/chat-completion/chat-completion.mjs.map +1 -1
  39. package/dist/es/ai-model/service-caller/openai/openai-client.mjs.map +1 -1
  40. package/dist/es/ai-model/service-caller/openai/responses/responses.mjs.map +1 -1
  41. package/dist/es/ai-model/service-caller/openai/siwc/authorization.mjs +117 -0
  42. package/dist/es/ai-model/service-caller/openai/siwc/authorization.mjs.map +1 -0
  43. package/dist/es/ai-model/service-caller/openai/siwc/credential-storage.mjs +66 -0
  44. package/dist/es/ai-model/service-caller/openai/siwc/credential-storage.mjs.map +1 -0
  45. package/dist/es/ai-model/service-caller/openai/siwc/errors.mjs +42 -0
  46. package/dist/es/ai-model/service-caller/openai/siwc/errors.mjs.map +1 -0
  47. package/dist/es/ai-model/service-caller/openai/siwc/index.mjs +7 -0
  48. package/dist/es/ai-model/service-caller/openai/siwc/prepare-call.mjs +33 -0
  49. package/dist/es/ai-model/service-caller/openai/siwc/prepare-call.mjs.map +1 -0
  50. package/dist/es/ai-model/service-caller/openai/siwc/refresh.mjs +60 -0
  51. package/dist/es/ai-model/service-caller/openai/siwc/refresh.mjs.map +1 -0
  52. package/dist/es/ai-model/service-caller/openai/siwc/token-manager.mjs +51 -0
  53. package/dist/es/ai-model/service-caller/openai/siwc/token-manager.mjs.map +1 -0
  54. package/dist/es/ai-model/service-caller/system-one/call-system-one.mjs +69 -0
  55. package/dist/es/ai-model/service-caller/system-one/call-system-one.mjs.map +1 -0
  56. package/dist/es/ai-model/service-caller/system-one/index.mjs +3 -0
  57. package/dist/es/ai-model/service-caller/system-one/prepare-system-one.mjs +44 -0
  58. package/dist/es/ai-model/service-caller/system-one/prepare-system-one.mjs.map +1 -0
  59. package/dist/es/ai-model/service-caller/system-one/schema.mjs +32 -0
  60. package/dist/es/ai-model/service-caller/system-one/schema.mjs.map +1 -0
  61. package/dist/es/ai-model/service-caller/system-one/utils.mjs +34 -0
  62. package/dist/es/ai-model/service-caller/system-one/utils.mjs.map +1 -0
  63. package/dist/es/ai-model/service-caller/utils.mjs +2 -2
  64. package/dist/es/ai-model/service-caller/utils.mjs.map +1 -1
  65. package/dist/es/ai-model/shared/model-locate-result/factory.mjs +7 -3
  66. package/dist/es/ai-model/shared/model-locate-result/factory.mjs.map +1 -1
  67. package/dist/es/ai-model/shared/model-locate-result/pixel-mapper.mjs +10 -4
  68. package/dist/es/ai-model/shared/model-locate-result/pixel-mapper.mjs.map +1 -1
  69. package/dist/es/ai-model/shared/model-locate-result/types.mjs.map +1 -1
  70. package/dist/es/ai-model/shared/model-locate-result/validation.mjs +4 -0
  71. package/dist/es/ai-model/shared/model-locate-result/validation.mjs.map +1 -1
  72. package/dist/es/ai-model/workflows/grounding/locate.mjs +2 -2
  73. package/dist/es/ai-model/workflows/grounding/locate.mjs.map +1 -1
  74. package/dist/es/ai-model/workflows/grounding/section-locate.mjs +2 -2
  75. package/dist/es/ai-model/workflows/grounding/section-locate.mjs.map +1 -1
  76. package/dist/es/ai-model/workflows/insight/boolean.mjs +1 -1
  77. package/dist/es/ai-model/workflows/insight/boolean.mjs.map +1 -1
  78. package/dist/es/ai-model/workflows/insight/extraction.mjs +3 -3
  79. package/dist/es/ai-model/workflows/insight/extraction.mjs.map +1 -1
  80. package/dist/es/ai-model/workflows/planning/standard-planning.mjs +4 -3
  81. package/dist/es/ai-model/workflows/planning/standard-planning.mjs.map +1 -1
  82. package/dist/es/ai-model/workflows/recorder-generation/playwright.mjs +2 -2
  83. package/dist/es/ai-model/workflows/recorder-generation/playwright.mjs.map +1 -1
  84. package/dist/es/ai-model/workflows/recorder-generation/yaml.mjs +2 -2
  85. package/dist/es/ai-model/workflows/recorder-generation/yaml.mjs.map +1 -1
  86. package/dist/es/device/index.mjs +7 -0
  87. package/dist/es/device/index.mjs.map +1 -1
  88. package/dist/es/report-html-template.mjs +1 -1
  89. package/dist/es/service/index.mjs +2 -1
  90. package/dist/es/service/index.mjs.map +1 -1
  91. package/dist/es/types.mjs.map +1 -1
  92. package/dist/es/utils.mjs +1 -1
  93. package/dist/lib/agent/agent.js +11 -11
  94. package/dist/lib/agent/agent.js.map +1 -1
  95. package/dist/lib/agent/insight.js.map +1 -1
  96. package/dist/lib/agent/tasks.js +72 -39
  97. package/dist/lib/agent/tasks.js.map +1 -1
  98. package/dist/lib/agent/utils.js +1 -1
  99. package/dist/lib/ai-model/connectivity/run-connectivity-test.js +27 -22
  100. package/dist/lib/ai-model/connectivity/run-connectivity-test.js.map +1 -1
  101. package/dist/lib/ai-model/index.js +34 -5
  102. package/dist/lib/ai-model/model-adapter/resolve.js +4 -2
  103. package/dist/lib/ai-model/model-adapter/resolve.js.map +1 -1
  104. package/dist/lib/ai-model/models/jev/adapter.js +6 -110
  105. package/dist/lib/ai-model/models/jev/adapter.js.map +1 -1
  106. package/dist/lib/ai-model/models/jev/boolean.js +82 -0
  107. package/dist/lib/ai-model/models/jev/boolean.js.map +1 -0
  108. package/dist/lib/ai-model/models/jev/image.js +41 -35
  109. package/dist/lib/ai-model/models/jev/image.js.map +1 -1
  110. package/dist/lib/ai-model/models/jev/locate.js +82 -0
  111. package/dist/lib/ai-model/models/jev/locate.js.map +1 -0
  112. package/dist/lib/ai-model/models/jev/planning-action.js +69 -0
  113. package/dist/lib/ai-model/models/jev/planning-action.js.map +1 -0
  114. package/dist/lib/ai-model/models/jev/planning-context.js +72 -0
  115. package/dist/lib/ai-model/models/jev/planning-context.js.map +1 -0
  116. package/dist/lib/ai-model/models/jev/planning-decision.js +102 -0
  117. package/dist/lib/ai-model/models/jev/planning-decision.js.map +1 -0
  118. package/dist/lib/ai-model/models/jev/planning.js +19 -131
  119. package/dist/lib/ai-model/models/jev/planning.js.map +1 -1
  120. package/dist/lib/ai-model/models/{task-routing.js → model-fallback.js} +11 -11
  121. package/dist/lib/ai-model/models/model-fallback.js.map +1 -0
  122. package/dist/lib/ai-model/service-caller/call-ai.js +59 -29
  123. package/dist/lib/ai-model/service-caller/call-ai.js.map +1 -1
  124. package/dist/lib/ai-model/service-caller/codex/call-codex.js.map +1 -1
  125. package/dist/lib/ai-model/service-caller/index.js +6 -3
  126. package/dist/lib/ai-model/service-caller/model-call.js +2 -2
  127. package/dist/lib/ai-model/service-caller/model-call.js.map +1 -1
  128. package/dist/lib/ai-model/service-caller/openai/call-openai.js +4 -2
  129. package/dist/lib/ai-model/service-caller/openai/call-openai.js.map +1 -1
  130. package/dist/lib/ai-model/service-caller/openai/chat-completion/chat-completion.js.map +1 -1
  131. package/dist/lib/ai-model/service-caller/openai/openai-client.js.map +1 -1
  132. package/dist/lib/ai-model/service-caller/openai/responses/responses.js.map +1 -1
  133. package/dist/lib/ai-model/service-caller/openai/siwc/authorization.js +157 -0
  134. package/dist/lib/ai-model/service-caller/openai/siwc/authorization.js.map +1 -0
  135. package/dist/lib/ai-model/service-caller/openai/siwc/credential-storage.js +103 -0
  136. package/dist/lib/ai-model/service-caller/openai/siwc/credential-storage.js.map +1 -0
  137. package/dist/lib/ai-model/service-caller/openai/siwc/errors.js +85 -0
  138. package/dist/lib/ai-model/service-caller/openai/siwc/errors.js.map +1 -0
  139. package/dist/lib/ai-model/service-caller/openai/siwc/index.js +64 -0
  140. package/dist/lib/ai-model/service-caller/openai/siwc/index.js.map +1 -0
  141. package/dist/lib/ai-model/service-caller/openai/siwc/prepare-call.js +67 -0
  142. package/dist/lib/ai-model/service-caller/openai/siwc/prepare-call.js.map +1 -0
  143. package/dist/lib/ai-model/service-caller/openai/siwc/refresh.js +94 -0
  144. package/dist/lib/ai-model/service-caller/openai/siwc/refresh.js.map +1 -0
  145. package/dist/lib/ai-model/service-caller/openai/siwc/token-manager.js +85 -0
  146. package/dist/lib/ai-model/service-caller/openai/siwc/token-manager.js.map +1 -0
  147. package/dist/lib/ai-model/service-caller/system-one/call-system-one.js +103 -0
  148. package/dist/lib/ai-model/service-caller/system-one/call-system-one.js.map +1 -0
  149. package/dist/lib/ai-model/service-caller/system-one/index.js +42 -0
  150. package/dist/lib/ai-model/service-caller/system-one/index.js.map +1 -0
  151. package/dist/lib/ai-model/service-caller/system-one/prepare-system-one.js +78 -0
  152. package/dist/lib/ai-model/service-caller/system-one/prepare-system-one.js.map +1 -0
  153. package/dist/lib/ai-model/service-caller/system-one/schema.js +69 -0
  154. package/dist/lib/ai-model/service-caller/system-one/schema.js.map +1 -0
  155. package/dist/lib/ai-model/service-caller/system-one/utils.js +68 -0
  156. package/dist/lib/ai-model/service-caller/system-one/utils.js.map +1 -0
  157. package/dist/lib/ai-model/service-caller/utils.js +2 -2
  158. package/dist/lib/ai-model/service-caller/utils.js.map +1 -1
  159. package/dist/lib/ai-model/shared/model-locate-result/factory.js +7 -3
  160. package/dist/lib/ai-model/shared/model-locate-result/factory.js.map +1 -1
  161. package/dist/lib/ai-model/shared/model-locate-result/pixel-mapper.js +10 -4
  162. package/dist/lib/ai-model/shared/model-locate-result/pixel-mapper.js.map +1 -1
  163. package/dist/lib/ai-model/shared/model-locate-result/types.js.map +1 -1
  164. package/dist/lib/ai-model/shared/model-locate-result/validation.js +4 -0
  165. package/dist/lib/ai-model/shared/model-locate-result/validation.js.map +1 -1
  166. package/dist/lib/ai-model/workflows/grounding/locate.js +1 -1
  167. package/dist/lib/ai-model/workflows/grounding/locate.js.map +1 -1
  168. package/dist/lib/ai-model/workflows/grounding/section-locate.js +1 -1
  169. package/dist/lib/ai-model/workflows/grounding/section-locate.js.map +1 -1
  170. package/dist/lib/ai-model/workflows/insight/boolean.js +1 -1
  171. package/dist/lib/ai-model/workflows/insight/boolean.js.map +1 -1
  172. package/dist/lib/ai-model/workflows/insight/extraction.js +2 -2
  173. package/dist/lib/ai-model/workflows/insight/extraction.js.map +1 -1
  174. package/dist/lib/ai-model/workflows/planning/standard-planning.js +3 -2
  175. package/dist/lib/ai-model/workflows/planning/standard-planning.js.map +1 -1
  176. package/dist/lib/ai-model/workflows/recorder-generation/playwright.js +1 -1
  177. package/dist/lib/ai-model/workflows/recorder-generation/playwright.js.map +1 -1
  178. package/dist/lib/ai-model/workflows/recorder-generation/yaml.js +1 -1
  179. package/dist/lib/ai-model/workflows/recorder-generation/yaml.js.map +1 -1
  180. package/dist/lib/device/index.js +7 -0
  181. package/dist/lib/device/index.js.map +1 -1
  182. package/dist/lib/report-html-template.js +1 -1
  183. package/dist/lib/service/index.js +2 -1
  184. package/dist/lib/service/index.js.map +1 -1
  185. package/dist/lib/test-runner/engine/index.js +2 -2
  186. package/dist/lib/test-runner/node/index.js +2 -2
  187. package/dist/lib/types.js.map +1 -1
  188. package/dist/lib/utils.js +1 -1
  189. package/dist/types/agent/agent.d.ts.map +1 -1
  190. package/dist/types/agent/insight.d.ts +2 -2
  191. package/dist/types/agent/insight.d.ts.map +1 -1
  192. package/dist/types/agent/tasks.d.ts.map +1 -1
  193. package/dist/types/ai-model/connectivity/run-connectivity-test.d.ts.map +1 -1
  194. package/dist/types/ai-model/index.d.ts +4 -1
  195. package/dist/types/ai-model/index.d.ts.map +1 -1
  196. package/dist/types/ai-model/model-adapter/resolve.d.ts +2 -1
  197. package/dist/types/ai-model/model-adapter/resolve.d.ts.map +1 -1
  198. package/dist/types/ai-model/model-adapter/types.d.ts +8 -5
  199. package/dist/types/ai-model/model-adapter/types.d.ts.map +1 -1
  200. package/dist/types/ai-model/models/gpt.d.ts +2 -2
  201. package/dist/types/ai-model/models/jev/adapter.d.ts +4 -5
  202. package/dist/types/ai-model/models/jev/adapter.d.ts.map +1 -1
  203. package/dist/types/ai-model/models/jev/boolean.d.ts +3 -0
  204. package/dist/types/ai-model/models/jev/boolean.d.ts.map +1 -0
  205. package/dist/types/ai-model/models/jev/image.d.ts +11 -11
  206. package/dist/types/ai-model/models/jev/image.d.ts.map +1 -1
  207. package/dist/types/ai-model/models/jev/locate.d.ts +3 -0
  208. package/dist/types/ai-model/models/jev/locate.d.ts.map +1 -0
  209. package/dist/types/ai-model/models/jev/planning-action.d.ts +6 -0
  210. package/dist/types/ai-model/models/jev/planning-action.d.ts.map +1 -0
  211. package/dist/types/ai-model/models/jev/planning-context.d.ts +23 -0
  212. package/dist/types/ai-model/models/jev/planning-context.d.ts.map +1 -0
  213. package/dist/types/ai-model/models/jev/planning-decision.d.ts +35 -0
  214. package/dist/types/ai-model/models/jev/planning-decision.d.ts.map +1 -0
  215. package/dist/types/ai-model/models/jev/planning.d.ts.map +1 -1
  216. package/dist/types/ai-model/models/model-fallback.d.ts +6 -0
  217. package/dist/types/ai-model/models/model-fallback.d.ts.map +1 -0
  218. package/dist/types/ai-model/models/registry.d.ts +4 -3
  219. package/dist/types/ai-model/models/registry.d.ts.map +1 -1
  220. package/dist/types/ai-model/service-caller/call-ai.d.ts +3 -1
  221. package/dist/types/ai-model/service-caller/call-ai.d.ts.map +1 -1
  222. package/dist/types/ai-model/service-caller/codex/call-codex.d.ts +5 -3
  223. package/dist/types/ai-model/service-caller/codex/call-codex.d.ts.map +1 -1
  224. package/dist/types/ai-model/service-caller/index.d.ts +1 -1
  225. package/dist/types/ai-model/service-caller/index.d.ts.map +1 -1
  226. package/dist/types/ai-model/service-caller/model-call.d.ts +2 -2
  227. package/dist/types/ai-model/service-caller/model-call.d.ts.map +1 -1
  228. package/dist/types/ai-model/service-caller/openai/call-openai.d.ts +2 -2
  229. package/dist/types/ai-model/service-caller/openai/call-openai.d.ts.map +1 -1
  230. package/dist/types/ai-model/service-caller/openai/chat-completion/chat-completion.d.ts +4 -2
  231. package/dist/types/ai-model/service-caller/openai/chat-completion/chat-completion.d.ts.map +1 -1
  232. package/dist/types/ai-model/service-caller/openai/responses/responses.d.ts +4 -2
  233. package/dist/types/ai-model/service-caller/openai/responses/responses.d.ts.map +1 -1
  234. package/dist/types/ai-model/service-caller/openai/siwc/authorization.d.ts +42 -0
  235. package/dist/types/ai-model/service-caller/openai/siwc/authorization.d.ts.map +1 -0
  236. package/dist/types/ai-model/service-caller/openai/siwc/credential-storage.d.ts +21 -0
  237. package/dist/types/ai-model/service-caller/openai/siwc/credential-storage.d.ts.map +1 -0
  238. package/dist/types/ai-model/service-caller/openai/siwc/errors.d.ts +10 -0
  239. package/dist/types/ai-model/service-caller/openai/siwc/errors.d.ts.map +1 -0
  240. package/dist/types/ai-model/service-caller/openai/siwc/index.d.ts +7 -0
  241. package/dist/types/ai-model/service-caller/openai/siwc/index.d.ts.map +1 -0
  242. package/dist/types/ai-model/service-caller/openai/siwc/prepare-call.d.ts +8 -0
  243. package/dist/types/ai-model/service-caller/openai/siwc/prepare-call.d.ts.map +1 -0
  244. package/dist/types/ai-model/service-caller/openai/siwc/refresh.d.ts +19 -0
  245. package/dist/types/ai-model/service-caller/openai/siwc/refresh.d.ts.map +1 -0
  246. package/dist/types/ai-model/service-caller/openai/siwc/token-manager.d.ts +10 -0
  247. package/dist/types/ai-model/service-caller/openai/siwc/token-manager.d.ts.map +1 -0
  248. package/dist/types/ai-model/service-caller/system-one/call-system-one.d.ts +4 -0
  249. package/dist/types/ai-model/service-caller/system-one/call-system-one.d.ts.map +1 -0
  250. package/dist/types/ai-model/service-caller/system-one/index.d.ts +3 -0
  251. package/dist/types/ai-model/service-caller/system-one/index.d.ts.map +1 -0
  252. package/dist/types/ai-model/service-caller/system-one/prepare-system-one.d.ts +21 -0
  253. package/dist/types/ai-model/service-caller/system-one/prepare-system-one.d.ts.map +1 -0
  254. package/dist/types/ai-model/service-caller/{system-one.d.ts → system-one/schema.d.ts} +1 -22
  255. package/dist/types/ai-model/service-caller/system-one/schema.d.ts.map +1 -0
  256. package/dist/types/ai-model/service-caller/system-one/utils.d.ts +6 -0
  257. package/dist/types/ai-model/service-caller/system-one/utils.d.ts.map +1 -0
  258. package/dist/types/ai-model/service-caller/types.d.ts +0 -3
  259. package/dist/types/ai-model/service-caller/types.d.ts.map +1 -1
  260. package/dist/types/ai-model/service-caller/utils.d.ts +3 -3
  261. package/dist/types/ai-model/shared/model-locate-result/factory.d.ts.map +1 -1
  262. package/dist/types/ai-model/shared/model-locate-result/index.d.ts +1 -1
  263. package/dist/types/ai-model/shared/model-locate-result/index.d.ts.map +1 -1
  264. package/dist/types/ai-model/shared/model-locate-result/pixel-mapper.d.ts +3 -3
  265. package/dist/types/ai-model/shared/model-locate-result/pixel-mapper.d.ts.map +1 -1
  266. package/dist/types/ai-model/shared/model-locate-result/types.d.ts +4 -0
  267. package/dist/types/ai-model/shared/model-locate-result/types.d.ts.map +1 -1
  268. package/dist/types/ai-model/shared/model-locate-result/validation.d.ts.map +1 -1
  269. package/dist/types/ai-model/workflows/grounding/locate.d.ts.map +1 -1
  270. package/dist/types/ai-model/workflows/grounding/section-locate.d.ts.map +1 -1
  271. package/dist/types/ai-model/workflows/insight/boolean.d.ts.map +1 -1
  272. package/dist/types/ai-model/workflows/insight/extraction.d.ts +2 -0
  273. package/dist/types/ai-model/workflows/insight/extraction.d.ts.map +1 -1
  274. package/dist/types/ai-model/workflows/planning/standard-planning.d.ts.map +1 -1
  275. package/dist/types/ai-model/workflows/planning/types.d.ts +2 -1
  276. package/dist/types/ai-model/workflows/planning/types.d.ts.map +1 -1
  277. package/dist/types/ai-model/workflows/recorder-generation/playwright.d.ts.map +1 -1
  278. package/dist/types/ai-model/workflows/recorder-generation/yaml.d.ts.map +1 -1
  279. package/dist/types/device/index.d.ts +1 -0
  280. package/dist/types/device/index.d.ts.map +1 -1
  281. package/dist/types/service/index.d.ts +1 -1
  282. package/dist/types/service/index.d.ts.map +1 -1
  283. package/dist/types/types.d.ts +14 -3
  284. package/dist/types/types.d.ts.map +1 -1
  285. package/package.json +3 -2
  286. package/dist/es/ai-model/models/task-routing.mjs +0 -28
  287. package/dist/es/ai-model/models/task-routing.mjs.map +0 -1
  288. package/dist/es/ai-model/service-caller/system-one.mjs +0 -163
  289. package/dist/es/ai-model/service-caller/system-one.mjs.map +0 -1
  290. package/dist/lib/ai-model/models/task-routing.js.map +0 -1
  291. package/dist/lib/ai-model/service-caller/system-one.js +0 -206
  292. package/dist/lib/ai-model/service-caller/system-one.js.map +0 -1
  293. package/dist/types/ai-model/models/task-routing.d.ts +0 -6
  294. package/dist/types/ai-model/models/task-routing.d.ts.map +0 -1
  295. package/dist/types/ai-model/service-caller/system-one.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai-model/models/jev/image.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/jev/image.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Buffer } from 'node:buffer';\nimport {\n imageInfoOfBase64,\n padBase64ImageToMinimumSize,\n parseBase64,\n preProcessImageUrl,\n resizeBase64ImageToJpeg,\n} from '@midscene/shared/img';\nimport { assert } from '@midscene/shared/utils';\nimport type { PixelLocateResult } from '../../shared/model-locate-result';\n\nexport async function prepareJevImage(url: string) {\n const base64 = await preProcessImageUrl(url, true);\n const source = await imageInfoOfBase64(base64);\n const scale = Math.min(1, 1568 / source.width, 1568 / source.height);\n const contentSize = {\n width: Math.max(1, Math.round(source.width * scale)),\n height: Math.max(1, Math.round(source.height * scale)),\n };\n const resized = await resizeBase64ImageToJpeg(base64, {\n targetSize: contentSize,\n });\n const prepared = await padBase64ImageToMinimumSize(resized, 280);\n assert(\n Buffer.from(parseBase64(prepared.imageBase64).body, 'base64').length <=\n 16 * 1024 * 1024,\n 'Jev image exceeds 16 MiB',\n );\n return {\n ...prepared,\n contentSize,\n sourceSize: { width: source.width, height: source.height },\n };\n}\n\nexport function mapJevBox(\n box: { left: number; top: number; right: number; bottom: number },\n image: Awaited<ReturnType<typeof prepareJevImage>>,\n targetSize: { width: number; height: number },\n): PixelLocateResult {\n // Jev returns fractions of the padded image. Undo padding and scale before\n // the grounding workflow maps a DeepLocate crop back to the full screenshot.\n const left =\n (box.left * image.width * targetSize.width) / image.contentSize.width;\n const top =\n (box.top * image.height * targetSize.height) / image.contentSize.height;\n const right =\n (box.right * image.width * targetSize.width) / image.contentSize.width;\n const bottom =\n (box.bottom * image.height * targetSize.height) / image.contentSize.height;\n const center: [number, number] = [(left + right) / 2, (top + bottom) / 2];\n assert(\n center[0] >= 0 &&\n center[0] < targetSize.width &&\n center[1] >= 0 &&\n center[1] < targetSize.height,\n 'Jev returned a target in image padding, outside the screenshot',\n );\n return {\n center,\n rect: { left, top, width: right - left, height: bottom - top },\n };\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","prepareJevImage","url","base64","preProcessImageUrl","source","imageInfoOfBase64","scale","Math","contentSize","resized","resizeBase64ImageToJpeg","prepared","padBase64ImageToMinimumSize","assert","Buffer","parseBase64","mapJevBox","box","image","targetSize","left","top","right","bottom","center"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;ACKO,eAAeI,gBAAgBC,GAAW;IAC/C,MAAMC,SAAS,MAAMC,AAAAA,IAAAA,oBAAAA,kBAAAA,AAAAA,EAAmBF,KAAK;IAC7C,MAAMG,SAAS,MAAMC,AAAAA,IAAAA,oBAAAA,iBAAAA,AAAAA,EAAkBH;IACvC,MAAMI,QAAQC,KAAK,GAAG,CAAC,GAAG,OAAOH,OAAO,KAAK,EAAE,OAAOA,OAAO,MAAM;IACnE,MAAMI,cAAc;QAClB,OAAOD,KAAK,GAAG,CAAC,GAAGA,KAAK,KAAK,CAACH,OAAO,KAAK,GAAGE;QAC7C,QAAQC,KAAK,GAAG,CAAC,GAAGA,KAAK,KAAK,CAACH,OAAO,MAAM,GAAGE;IACjD;IACA,MAAMG,UAAU,MAAMC,AAAAA,IAAAA,oBAAAA,uBAAAA,AAAAA,EAAwBR,QAAQ;QACpD,YAAYM;IACd;IACA,MAAMG,WAAW,MAAMC,AAAAA,IAAAA,oBAAAA,2BAAAA,AAAAA,EAA4BH,SAAS;IAC5DI,IAAAA,sBAAAA,MAAAA,AAAAA,EACEC,qCAAAA,MAAAA,CAAAA,IAAW,CAACC,AAAAA,IAAAA,oBAAAA,WAAAA,AAAAA,EAAYJ,SAAS,WAAW,EAAE,IAAI,EAAE,UAAU,MAAM,IAClE,UACF;IAEF,OAAO;QACL,GAAGA,QAAQ;QACXH;QACA,YAAY;YAAE,OAAOJ,OAAO,KAAK;YAAE,QAAQA,OAAO,MAAM;QAAC;IAC3D;AACF;AAEO,SAASY,UACdC,GAAiE,EACjEC,KAAkD,EAClDC,UAA6C;IAI7C,MAAMC,OACHH,IAAI,IAAI,GAAGC,MAAM,KAAK,GAAGC,WAAW,KAAK,GAAID,MAAM,WAAW,CAAC,KAAK;IACvE,MAAMG,MACHJ,IAAI,GAAG,GAAGC,MAAM,MAAM,GAAGC,WAAW,MAAM,GAAID,MAAM,WAAW,CAAC,MAAM;IACzE,MAAMI,QACHL,IAAI,KAAK,GAAGC,MAAM,KAAK,GAAGC,WAAW,KAAK,GAAID,MAAM,WAAW,CAAC,KAAK;IACxE,MAAMK,SACHN,IAAI,MAAM,GAAGC,MAAM,MAAM,GAAGC,WAAW,MAAM,GAAID,MAAM,WAAW,CAAC,MAAM;IAC5E,MAAMM,SAA2B;QAAEJ,CAAAA,OAAOE,KAAI,IAAK;QAAID,CAAAA,MAAME,MAAK,IAAK;KAAE;IACzEV,IAAAA,sBAAAA,MAAAA,AAAAA,EACEW,MAAM,CAAC,EAAE,IAAI,KACXA,MAAM,CAAC,EAAE,GAAGL,WAAW,KAAK,IAC5BK,MAAM,CAAC,EAAE,IAAI,KACbA,MAAM,CAAC,EAAE,GAAGL,WAAW,MAAM,EAC/B;IAEF,OAAO;QACLK;QACA,MAAM;YAAEJ;YAAMC;YAAK,OAAOC,QAAQF;YAAM,QAAQG,SAASF;QAAI;IAC/D;AACF"}
1
+ {"version":3,"file":"ai-model/models/jev/image.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/jev/image.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { Buffer } from 'node:buffer';\nimport { parseBase64, preProcessImageUrl } from '@midscene/shared/img';\nimport { assert } from '@midscene/shared/utils';\nimport { createLocateResultCodec } from '../../shared/model-locate-result';\nimport type { PixelLocateResult } from '../../shared/model-locate-result';\nimport { prepareUserPrompt } from '../../shared/multimodal-prompt';\n\nexport async function prepareJevImage(url: string) {\n const base64 = await preProcessImageUrl(url, true);\n assert(\n Buffer.from(parseBase64(base64).body, 'base64').length <= 16 * 1024 * 1024,\n 'Jev image exceeds 16 MiB',\n );\n return { imageBase64: base64 };\n}\n\nconst jevBoxCodec = createLocateResultCodec({\n coordinates: {\n shape: 'bbox',\n normalizedBy: 1,\n rounding: 'none',\n boundsType: 'edges',\n },\n});\n\nexport function mapJevBox(\n box: { left: number; top: number; right: number; bottom: number },\n targetSize: { width: number; height: number },\n): PixelLocateResult {\n return jevBoxCodec.toPixelResult([box.left, box.top, box.right, box.bottom], {\n preparedSize: targetSize,\n });\n}\n\nexport async function prepareReferences(\n prompt: Parameters<typeof prepareUserPrompt>[0],\n) {\n const { referenceImages } = await prepareUserPrompt(prompt);\n const prepared = await Promise.all(\n referenceImages.map(async (image, index) => ({\n key: `reference_${index}`,\n name: image.name,\n image: await prepareJevImage(image.url),\n })),\n );\n return {\n references: prepared.map(({ key, name }) => ({\n image: `\\`${key}\\``,\n name,\n })),\n images: Object.fromEntries(\n prepared.map(({ key, image }) => [key, image.imageBase64]),\n ),\n };\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","prepareJevImage","url","base64","preProcessImageUrl","assert","Buffer","parseBase64","jevBoxCodec","createLocateResultCodec","mapJevBox","box","targetSize","prepareReferences","prompt","referenceImages","prepareUserPrompt","prepared","Promise","image","index","name"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;;;;ACCO,eAAeI,gBAAgBC,GAAW;IAC/C,MAAMC,SAAS,MAAMC,AAAAA,IAAAA,oBAAAA,kBAAAA,AAAAA,EAAmBF,KAAK;IAC7CG,IAAAA,sBAAAA,MAAAA,AAAAA,EACEC,qCAAAA,MAAAA,CAAAA,IAAW,CAACC,AAAAA,IAAAA,oBAAAA,WAAAA,AAAAA,EAAYJ,QAAQ,IAAI,EAAE,UAAU,MAAM,IAAI,UAC1D;IAEF,OAAO;QAAE,aAAaA;IAAO;AAC/B;AAEA,MAAMK,cAAcC,AAAAA,IAAAA,yBAAAA,uBAAAA,AAAAA,EAAwB;IAC1C,aAAa;QACX,OAAO;QACP,cAAc;QACd,UAAU;QACV,YAAY;IACd;AACF;AAEO,SAASC,UACdC,GAAiE,EACjEC,UAA6C;IAE7C,OAAOJ,YAAY,aAAa,CAAC;QAACG,IAAI,IAAI;QAAEA,IAAI,GAAG;QAAEA,IAAI,KAAK;QAAEA,IAAI,MAAM;KAAC,EAAE;QAC3E,cAAcC;IAChB;AACF;AAEO,eAAeC,kBACpBC,MAA+C;IAE/C,MAAM,EAAEC,eAAe,EAAE,GAAG,MAAMC,AAAAA,IAAAA,qCAAAA,iBAAAA,AAAAA,EAAkBF;IACpD,MAAMG,WAAW,MAAMC,QAAQ,GAAG,CAChCH,gBAAgB,GAAG,CAAC,OAAOI,OAAOC,QAAW;YAC3C,KAAK,CAAC,UAAU,EAAEA,OAAO;YACzB,MAAMD,MAAM,IAAI;YAChB,OAAO,MAAMlB,gBAAgBkB,MAAM,GAAG;QACxC;IAEF,OAAO;QACL,YAAYF,SAAS,GAAG,CAAC,CAAC,EAAErB,GAAG,EAAEyB,IAAI,EAAE,GAAM;gBAC3C,OAAO,CAAC,EAAE,EAAEzB,IAAI,EAAE,CAAC;gBACnByB;YACF;QACA,QAAQxB,OAAO,WAAW,CACxBoB,SAAS,GAAG,CAAC,CAAC,EAAErB,GAAG,EAAEuB,KAAK,EAAE,GAAK;gBAACvB;gBAAKuB,MAAM,WAAW;aAAC;IAE7D;AACF"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ jevLocate: ()=>jevLocate
28
+ });
29
+ const external_common_js_namespaceObject = require("../../../common.js");
30
+ const utils_namespaceObject = require("@midscene/shared/utils");
31
+ const index_js_namespaceObject = require("../../service-caller/index.js");
32
+ const schema_js_namespaceObject = require("../../service-caller/system-one/schema.js");
33
+ const external_image_js_namespaceObject = require("./image.js");
34
+ const jevLocate = async ({ targetElementDescription, locateImage, options })=>{
35
+ const image = await (0, external_image_js_namespaceObject.prepareJevImage)(locateImage.imageBase64);
36
+ const references = await (0, external_image_js_namespaceObject.prepareReferences)(targetElementDescription);
37
+ const target = (0, external_common_js_namespaceObject.userPromptToString)(targetElementDescription);
38
+ const response = await (0, index_js_namespaceObject.callSystemOneAI)({
39
+ state: {
40
+ target,
41
+ references: references.references
42
+ },
43
+ images: {
44
+ screenshot: image.imageBase64,
45
+ ...references.images
46
+ },
47
+ questions: {
48
+ present: {
49
+ type: 'noul',
50
+ instructions: 'Is the target described in `target` present in `screenshot`? Reference images, if any, describe the target; they are not the screenshot.'
51
+ },
52
+ target: {
53
+ type: 'box',
54
+ instructions: 'The single target described in `target`, in `screenshot`.'
55
+ }
56
+ }
57
+ }, options.modelRuntime, {
58
+ abortSignal: options.abortSignal
59
+ });
60
+ const { answers } = schema_js_namespaceObject.systemOneResponseSchema.parse(JSON.parse(response.content));
61
+ (0, utils_namespaceObject.assert)('noul' === answers.present.type && 'box' === answers.target.type, 'Invalid Jev locate answers');
62
+ return {
63
+ rawResponse: response.content,
64
+ usage: response.usage,
65
+ ...answers.present.noul >= 0.5 ? {
66
+ locatedPixelResult: (0, external_image_js_namespaceObject.mapJevBox)(answers.target.box, locateImage)
67
+ } : {
68
+ errors: [
69
+ 'The target is not present in the screenshot'
70
+ ]
71
+ }
72
+ };
73
+ };
74
+ exports.jevLocate = __webpack_exports__.jevLocate;
75
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
76
+ "jevLocate"
77
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
78
+ Object.defineProperty(exports, '__esModule', {
79
+ value: true
80
+ });
81
+
82
+ //# sourceMappingURL=locate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-model/models/jev/locate.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/jev/locate.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { userPromptToString } from '@/common';\nimport { assert } from '@midscene/shared/utils';\nimport { callSystemOneAI } from '../../service-caller';\nimport { systemOneResponseSchema } from '../../service-caller/system-one/schema';\nimport type { LocateFn } from '../../workflows/grounding/types';\nimport { mapJevBox, prepareJevImage, prepareReferences } from './image';\n\nexport const jevLocate: LocateFn = async ({\n targetElementDescription,\n locateImage,\n options,\n}) => {\n const image = await prepareJevImage(locateImage.imageBase64);\n const references = await prepareReferences(targetElementDescription);\n const target = userPromptToString(targetElementDescription);\n const response = await callSystemOneAI(\n {\n state: { target, references: references.references },\n images: { screenshot: image.imageBase64, ...references.images },\n questions: {\n present: {\n type: 'noul',\n instructions:\n 'Is the target described in `target` present in `screenshot`? Reference images, if any, describe the target; they are not the screenshot.',\n },\n target: {\n type: 'box',\n instructions:\n 'The single target described in `target`, in `screenshot`.',\n },\n },\n },\n options.modelRuntime,\n { abortSignal: options.abortSignal },\n );\n const { answers } = systemOneResponseSchema.parse(\n JSON.parse(response.content),\n );\n assert(\n answers.present.type === 'noul' && answers.target.type === 'box',\n 'Invalid Jev locate answers',\n );\n return {\n rawResponse: response.content,\n usage: response.usage,\n ...(answers.present.noul >= 0.5\n ? {\n locatedPixelResult: mapJevBox(answers.target.box, locateImage),\n }\n : { errors: ['The target is not present in the screenshot'] }),\n };\n};\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","jevLocate","targetElementDescription","locateImage","options","image","prepareJevImage","references","prepareReferences","target","userPromptToString","response","callSystemOneAI","answers","systemOneResponseSchema","JSON","assert","mapJevBox"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;;ACCO,MAAMI,YAAsB,OAAO,EACxCC,wBAAwB,EACxBC,WAAW,EACXC,OAAO,EACR;IACC,MAAMC,QAAQ,MAAMC,AAAAA,IAAAA,kCAAAA,eAAAA,AAAAA,EAAgBH,YAAY,WAAW;IAC3D,MAAMI,aAAa,MAAMC,AAAAA,IAAAA,kCAAAA,iBAAAA,AAAAA,EAAkBN;IAC3C,MAAMO,SAASC,AAAAA,IAAAA,mCAAAA,kBAAAA,AAAAA,EAAmBR;IAClC,MAAMS,WAAW,MAAMC,AAAAA,IAAAA,yBAAAA,eAAAA,AAAAA,EACrB;QACE,OAAO;YAAEH;YAAQ,YAAYF,WAAW,UAAU;QAAC;QACnD,QAAQ;YAAE,YAAYF,MAAM,WAAW;YAAE,GAAGE,WAAW,MAAM;QAAC;QAC9D,WAAW;YACT,SAAS;gBACP,MAAM;gBACN,cACE;YACJ;YACA,QAAQ;gBACN,MAAM;gBACN,cACE;YACJ;QACF;IACF,GACAH,QAAQ,YAAY,EACpB;QAAE,aAAaA,QAAQ,WAAW;IAAC;IAErC,MAAM,EAAES,OAAO,EAAE,GAAGC,0BAAAA,uBAAAA,CAAAA,KAA6B,CAC/CC,KAAK,KAAK,CAACJ,SAAS,OAAO;IAE7BK,IAAAA,sBAAAA,MAAAA,AAAAA,EACEH,AAAyB,WAAzBA,QAAQ,OAAO,CAAC,IAAI,IAAeA,AAAwB,UAAxBA,QAAQ,MAAM,CAAC,IAAI,EACtD;IAEF,OAAO;QACL,aAAaF,SAAS,OAAO;QAC7B,OAAOA,SAAS,KAAK;QACrB,GAAIE,QAAQ,OAAO,CAAC,IAAI,IAAI,MACxB;YACE,oBAAoBI,AAAAA,IAAAA,kCAAAA,SAAAA,AAAAA,EAAUJ,QAAQ,MAAM,CAAC,GAAG,EAAEV;QACpD,IACA;YAAE,QAAQ;gBAAC;aAA8C;QAAC,CAAC;IACjE;AACF"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ buildJevAction: ()=>buildJevAction
28
+ });
29
+ const external_common_js_namespaceObject = require("../../../common.js");
30
+ const utils_namespaceObject = require("@midscene/shared/utils");
31
+ const external_image_js_namespaceObject = require("./image.js");
32
+ function buildJevAction(decision, context, instruction, options) {
33
+ const { choice } = decision;
34
+ if ('complete' === choice.kind) return [];
35
+ (0, utils_namespaceObject.assert)('action' === choice.kind, 'Delegated actions must use the default planner');
36
+ const action = choice.action;
37
+ const fields = action.paramSchema ? (0, external_common_js_namespaceObject.findAllMidsceneLocatorField)(action.paramSchema) : [];
38
+ const locatedPixelResult = (()=>{
39
+ if (!options.includeLocateInPlanning || 1 !== fields.length) return;
40
+ (0, utils_namespaceObject.assert)(decision.target?.type === 'box', 'Missing Jev planning target box');
41
+ return (0, external_image_js_namespaceObject.mapJevBox)(decision.target.box, options.context.shotSize);
42
+ })();
43
+ const param = Object.fromEntries(fields.map((field)=>[
44
+ field,
45
+ {
46
+ prompt: `Locate the target for parameter ${JSON.stringify(field)} of action ${JSON.stringify(action.name)} (${action.description ?? action.name}) for the NEXT step toward this goal. Use the current screenshot as authoritative and consider execution feedback. Task context: ${JSON.stringify(context.state)}`,
47
+ images: instruction.referenceImages,
48
+ ...locatedPixelResult ? {
49
+ locatedPixelResult
50
+ } : {}
51
+ }
52
+ ]));
53
+ (0, external_common_js_namespaceObject.parseActionParam)(param, action.paramSchema);
54
+ return [
55
+ {
56
+ type: action.name,
57
+ param
58
+ }
59
+ ];
60
+ }
61
+ exports.buildJevAction = __webpack_exports__.buildJevAction;
62
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
63
+ "buildJevAction"
64
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
65
+ Object.defineProperty(exports, '__esModule', {
66
+ value: true
67
+ });
68
+
69
+ //# sourceMappingURL=planning-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-model/models/jev/planning-action.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/jev/planning-action.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { findAllMidsceneLocatorField, parseActionParam } from '@/common';\nimport type { PlanningAction } from '@/types';\nimport { assert } from '@midscene/shared/utils';\nimport type { PlanFn, PlanOptions } from '../../workflows/planning/types';\nimport { mapJevBox } from './image';\nimport type { JevPlanningContext } from './planning-context';\nimport type { JevActionDecision } from './planning-decision';\n\nexport function buildJevAction(\n decision: JevActionDecision,\n context: JevPlanningContext,\n instruction: Parameters<PlanFn>[0],\n options: PlanOptions,\n): PlanningAction[] {\n const { choice } = decision;\n if (choice.kind === 'complete') {\n return [];\n }\n assert(\n choice.kind === 'action',\n 'Delegated actions must use the default planner',\n );\n const action = choice.action;\n const fields = action.paramSchema\n ? findAllMidsceneLocatorField(action.paramSchema)\n : [];\n const locatedPixelResult = (() => {\n if (!options.includeLocateInPlanning || fields.length !== 1) {\n return undefined;\n }\n assert(decision.target?.type === 'box', 'Missing Jev planning target box');\n return mapJevBox(decision.target.box, options.context.shotSize);\n })();\n const param = Object.fromEntries(\n fields.map((field) => [\n field,\n {\n prompt: `Locate the target for parameter ${JSON.stringify(field)} of action ${JSON.stringify(action.name)} (${action.description ?? action.name}) for the NEXT step toward this goal. Use the current screenshot as authoritative and consider execution feedback. Task context: ${JSON.stringify(context.state)}`,\n images: instruction.referenceImages,\n ...(locatedPixelResult ? { locatedPixelResult } : {}),\n },\n ]),\n );\n // Validate declared direct-action support before handing the plan to execution.\n parseActionParam(param, action.paramSchema);\n return [{ type: action.name, param }];\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","buildJevAction","decision","context","instruction","options","choice","assert","action","fields","findAllMidsceneLocatorField","locatedPixelResult","mapJevBox","param","field","JSON","parseActionParam"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;ACEO,SAASI,eACdC,QAA2B,EAC3BC,OAA2B,EAC3BC,WAAkC,EAClCC,OAAoB;IAEpB,MAAM,EAAEC,MAAM,EAAE,GAAGJ;IACnB,IAAII,AAAgB,eAAhBA,OAAO,IAAI,EACb,OAAO,EAAE;IAEXC,IAAAA,sBAAAA,MAAAA,AAAAA,EACED,AAAgB,aAAhBA,OAAO,IAAI,EACX;IAEF,MAAME,SAASF,OAAO,MAAM;IAC5B,MAAMG,SAASD,OAAO,WAAW,GAC7BE,AAAAA,IAAAA,mCAAAA,2BAAAA,AAAAA,EAA4BF,OAAO,WAAW,IAC9C,EAAE;IACN,MAAMG,qBAAsB,AAAC;QAC3B,IAAI,CAACN,QAAQ,uBAAuB,IAAII,AAAkB,MAAlBA,OAAO,MAAM,EACnD;QAEFF,IAAAA,sBAAAA,MAAAA,AAAAA,EAAOL,SAAS,MAAM,EAAE,SAAS,OAAO;QACxC,OAAOU,AAAAA,IAAAA,kCAAAA,SAAAA,AAAAA,EAAUV,SAAS,MAAM,CAAC,GAAG,EAAEG,QAAQ,OAAO,CAAC,QAAQ;IAChE;IACA,MAAMQ,QAAQhB,OAAO,WAAW,CAC9BY,OAAO,GAAG,CAAC,CAACK,QAAU;YACpBA;YACA;gBACE,QAAQ,CAAC,gCAAgC,EAAEC,KAAK,SAAS,CAACD,OAAO,WAAW,EAAEC,KAAK,SAAS,CAACP,OAAO,IAAI,EAAE,EAAE,EAAEA,OAAO,WAAW,IAAIA,OAAO,IAAI,CAAC,iIAAiI,EAAEO,KAAK,SAAS,CAACZ,QAAQ,KAAK,GAAG;gBAClT,QAAQC,YAAY,eAAe;gBACnC,GAAIO,qBAAqB;oBAAEA;gBAAmB,IAAI,CAAC,CAAC;YACtD;SACD;IAGHK,IAAAA,mCAAAA,gBAAAA,AAAAA,EAAiBH,OAAOL,OAAO,WAAW;IAC1C,OAAO;QAAC;YAAE,MAAMA,OAAO,IAAI;YAAEK;QAAM;KAAE;AACvC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ prepareJevPlanningContext: ()=>prepareJevPlanningContext
28
+ });
29
+ const external_image_js_namespaceObject = require("./image.js");
30
+ async function prepareJevPlanningContext(instruction, options) {
31
+ const history = options.conversationHistory;
32
+ const image = await (0, external_image_js_namespaceObject.prepareJevImage)(options.context.screenshot.base64);
33
+ const references = await Promise.all(instruction.referenceImages.map(async (reference, index)=>({
34
+ key: `reference_${index}`,
35
+ name: reference.name,
36
+ image: await (0, external_image_js_namespaceObject.prepareJevImage)(reference.url)
37
+ })));
38
+ const state = {
39
+ goal: instruction.text,
40
+ context: options.actionContext,
41
+ history: history.historicalLogsToText(),
42
+ memory: history.memoriesToText(),
43
+ feedback: history.pendingFeedbackMessage,
44
+ references: references.map(({ key, name })=>({
45
+ image: `\`${key}\``,
46
+ name
47
+ })),
48
+ availableActions: options.actionSpace.map(({ name, description })=>({
49
+ name,
50
+ description
51
+ }))
52
+ };
53
+ return {
54
+ state,
55
+ images: {
56
+ screenshot: image.imageBase64,
57
+ ...Object.fromEntries(references.map(({ key, image })=>[
58
+ key,
59
+ image.imageBase64
60
+ ]))
61
+ }
62
+ };
63
+ }
64
+ exports.prepareJevPlanningContext = __webpack_exports__.prepareJevPlanningContext;
65
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
66
+ "prepareJevPlanningContext"
67
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
68
+ Object.defineProperty(exports, '__esModule', {
69
+ value: true
70
+ });
71
+
72
+ //# sourceMappingURL=planning-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-model/models/jev/planning-context.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/jev/planning-context.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type { PlanFn, PlanOptions } from '../../workflows/planning/types';\nimport { prepareJevImage } from './image';\n\nexport async function prepareJevPlanningContext(\n instruction: Parameters<PlanFn>[0],\n options: PlanOptions,\n) {\n const history = options.conversationHistory;\n const image = await prepareJevImage(options.context.screenshot.base64);\n const references = await Promise.all(\n instruction.referenceImages.map(async (reference, index) => ({\n key: `reference_${index}`,\n name: reference.name,\n image: await prepareJevImage(reference.url),\n })),\n );\n const state = {\n goal: instruction.text,\n context: options.actionContext,\n history: history.historicalLogsToText(),\n memory: history.memoriesToText(),\n feedback: history.pendingFeedbackMessage,\n references: references.map(({ key, name }) => ({\n image: `\\`${key}\\``,\n name,\n })),\n availableActions: options.actionSpace.map(({ name, description }) => ({\n name,\n description,\n })),\n };\n return {\n state,\n images: {\n screenshot: image.imageBase64,\n ...Object.fromEntries(\n references.map(({ key, image }) => [key, image.imageBase64]),\n ),\n },\n };\n}\n\nexport type JevPlanningContext = Awaited<\n ReturnType<typeof prepareJevPlanningContext>\n>;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","prepareJevPlanningContext","instruction","options","history","image","prepareJevImage","references","Promise","reference","index","state","name","description"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;ACHO,eAAeI,0BACpBC,WAAkC,EAClCC,OAAoB;IAEpB,MAAMC,UAAUD,QAAQ,mBAAmB;IAC3C,MAAME,QAAQ,MAAMC,AAAAA,IAAAA,kCAAAA,eAAAA,AAAAA,EAAgBH,QAAQ,OAAO,CAAC,UAAU,CAAC,MAAM;IACrE,MAAMI,aAAa,MAAMC,QAAQ,GAAG,CAClCN,YAAY,eAAe,CAAC,GAAG,CAAC,OAAOO,WAAWC,QAAW;YAC3D,KAAK,CAAC,UAAU,EAAEA,OAAO;YACzB,MAAMD,UAAU,IAAI;YACpB,OAAO,MAAMH,AAAAA,IAAAA,kCAAAA,eAAAA,AAAAA,EAAgBG,UAAU,GAAG;QAC5C;IAEF,MAAME,QAAQ;QACZ,MAAMT,YAAY,IAAI;QACtB,SAASC,QAAQ,aAAa;QAC9B,SAASC,QAAQ,oBAAoB;QACrC,QAAQA,QAAQ,cAAc;QAC9B,UAAUA,QAAQ,sBAAsB;QACxC,YAAYG,WAAW,GAAG,CAAC,CAAC,EAAEX,GAAG,EAAEgB,IAAI,EAAE,GAAM;gBAC7C,OAAO,CAAC,EAAE,EAAEhB,IAAI,EAAE,CAAC;gBACnBgB;YACF;QACA,kBAAkBT,QAAQ,WAAW,CAAC,GAAG,CAAC,CAAC,EAAES,IAAI,EAAEC,WAAW,EAAE,GAAM;gBACpED;gBACAC;YACF;IACF;IACA,OAAO;QACLF;QACA,QAAQ;YACN,YAAYN,MAAM,WAAW;YAC7B,GAAGR,OAAO,WAAW,CACnBU,WAAW,GAAG,CAAC,CAAC,EAAEX,GAAG,EAAES,KAAK,EAAE,GAAK;oBAACT;oBAAKS,MAAM,WAAW;iBAAC,EAC5D;QACH;IACF;AACF"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ decideJevAction: ()=>decideJevAction
28
+ });
29
+ const external_common_js_namespaceObject = require("../../../common.js");
30
+ const utils_namespaceObject = require("@midscene/shared/utils");
31
+ const index_js_namespaceObject = require("../../service-caller/index.js");
32
+ const schema_js_namespaceObject = require("../../service-caller/system-one/schema.js");
33
+ async function decideJevAction(context, options) {
34
+ const criteria = {
35
+ 'control:complete': 'The entire user goal is already satisfied, confirmed by the current screenshot and execution feedback. No text answer is requested.',
36
+ 'control:delegate': 'The next step needs generated output, an explanation of why the task cannot be completed, or something not covered by the action choices. Delegate to the default model.'
37
+ };
38
+ const choices = new Map([
39
+ [
40
+ 'control:complete',
41
+ {
42
+ kind: 'complete'
43
+ }
44
+ ],
45
+ [
46
+ 'control:delegate',
47
+ {
48
+ kind: 'delegate'
49
+ }
50
+ ]
51
+ ]);
52
+ for (const action of options.actionSpace){
53
+ const kind = action.supportedBySystemOne ? 'action' : 'delegate';
54
+ const key = `${kind}:${action.name}`;
55
+ (0, utils_namespaceObject.assert)(!choices.has(key), `Duplicate Jev planning choice: ${key}`);
56
+ choices.set(key, {
57
+ kind,
58
+ action
59
+ });
60
+ criteria[key] = `${action.name}: ${action.description ?? action.name}. ${'action' === kind ? 'Perform this action.' : 'Suggest this action and delegate the next planning step, including its parameters, to the default model.'}`;
61
+ }
62
+ (0, utils_namespaceObject.assert)(choices.size <= 255, 'Jev Choice supports at most 255 options');
63
+ const locateInPlanning = options.includeLocateInPlanning && options.actionSpace.some((action)=>action.supportedBySystemOne && action.paramSchema && 1 === (0, external_common_js_namespaceObject.findAllMidsceneLocatorField)(action.paramSchema).length);
64
+ const response = await (0, index_js_namespaceObject.callSystemOneAI)({
65
+ ...context,
66
+ questions: {
67
+ ...locateInPlanning ? {
68
+ target: {
69
+ type: 'box',
70
+ instructions: 'Identify the single UI element to interact with in the NEXT step toward `goal`, using the current `screenshot`, context, history and feedback. Return its bounding box in `screenshot`. This is the target of the next direct action (such as Tap, DoubleClick, Hover or ClearInput), not the final goal of the entire task. Reference images describe targets, not the current page. If the next step needs no target or must be delegated, this box is unused.'
71
+ }
72
+ } : {},
73
+ action: {
74
+ type: 'choice',
75
+ instructions: 'Choose exactly the next step toward `goal` using the current `screenshot`, context, history and feedback. History records proposed actions; feedback and current screenshot establish what actually happened. Do not repeat completed steps. Reference images describe targets, not the current page. A delegate choice means the named action is likely needed; it has not been executed. Choose control:complete only when no requested work or text answer remains.',
76
+ criteria
77
+ }
78
+ }
79
+ }, options.modelRuntime, {
80
+ abortSignal: options.abortSignal
81
+ });
82
+ const { answers } = schema_js_namespaceObject.systemOneResponseSchema.parse(JSON.parse(response.content));
83
+ (0, utils_namespaceObject.assert)('choice' === answers.action.type, 'Invalid Jev planning action');
84
+ const selected = answers.action.choice;
85
+ const choice = choices.get(selected);
86
+ (0, utils_namespaceObject.assert)(choice, `Unknown Jev planning choice: ${selected}`);
87
+ return {
88
+ selected,
89
+ choice,
90
+ response,
91
+ target: locateInPlanning ? answers.target : void 0
92
+ };
93
+ }
94
+ exports.decideJevAction = __webpack_exports__.decideJevAction;
95
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
96
+ "decideJevAction"
97
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
98
+ Object.defineProperty(exports, '__esModule', {
99
+ value: true
100
+ });
101
+
102
+ //# sourceMappingURL=planning-decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-model/models/jev/planning-decision.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../../src/ai-model/models/jev/planning-decision.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { findAllMidsceneLocatorField } from '@/common';\nimport type { DeviceAction } from '@/types';\nimport { assert } from '@midscene/shared/utils';\nimport { callSystemOneAI } from '../../service-caller';\nimport { systemOneResponseSchema } from '../../service-caller/system-one/schema';\nimport type { PlanOptions } from '../../workflows/planning/types';\nimport type { JevPlanningContext } from './planning-context';\n\ntype JevPlanningChoice =\n | { kind: 'complete' }\n | { kind: 'delegate'; action?: DeviceAction }\n | { kind: 'action'; action: DeviceAction };\n\nexport async function decideJevAction(\n context: JevPlanningContext,\n options: PlanOptions,\n) {\n const criteria: Record<string, string> = {\n 'control:complete':\n 'The entire user goal is already satisfied, confirmed by the current screenshot and execution feedback. No text answer is requested.',\n 'control:delegate':\n 'The next step needs generated output, an explanation of why the task cannot be completed, or something not covered by the action choices. Delegate to the default model.',\n };\n const choices = new Map<string, JevPlanningChoice>([\n ['control:complete', { kind: 'complete' }],\n ['control:delegate', { kind: 'delegate' }],\n ]);\n for (const action of options.actionSpace) {\n const kind = action.supportedBySystemOne ? 'action' : 'delegate';\n const key = `${kind}:${action.name}`;\n assert(!choices.has(key), `Duplicate Jev planning choice: ${key}`);\n choices.set(key, { kind, action });\n criteria[key] = `${action.name}: ${action.description ?? action.name}. ${\n kind === 'action'\n ? 'Perform this action.'\n : 'Suggest this action and delegate the next planning step, including its parameters, to the default model.'\n }`;\n }\n assert(choices.size <= 255, 'Jev Choice supports at most 255 options');\n const locateInPlanning =\n options.includeLocateInPlanning &&\n options.actionSpace.some(\n (action) =>\n action.supportedBySystemOne &&\n action.paramSchema &&\n findAllMidsceneLocatorField(action.paramSchema).length === 1,\n );\n const response = await callSystemOneAI(\n {\n ...context,\n questions: {\n ...(locateInPlanning\n ? {\n target: {\n type: 'box' as const,\n instructions:\n 'Identify the single UI element to interact with in the NEXT step toward `goal`, using the current `screenshot`, context, history and feedback. Return its bounding box in `screenshot`. This is the target of the next direct action (such as Tap, DoubleClick, Hover or ClearInput), not the final goal of the entire task. Reference images describe targets, not the current page. If the next step needs no target or must be delegated, this box is unused.',\n },\n }\n : {}),\n action: {\n type: 'choice',\n instructions:\n 'Choose exactly the next step toward `goal` using the current `screenshot`, context, history and feedback. History records proposed actions; feedback and current screenshot establish what actually happened. Do not repeat completed steps. Reference images describe targets, not the current page. A delegate choice means the named action is likely needed; it has not been executed. Choose control:complete only when no requested work or text answer remains.',\n criteria,\n },\n },\n },\n options.modelRuntime,\n { abortSignal: options.abortSignal },\n );\n const { answers } = systemOneResponseSchema.parse(\n JSON.parse(response.content),\n );\n assert(answers.action.type === 'choice', 'Invalid Jev planning action');\n const selected = answers.action.choice;\n const choice = choices.get(selected);\n assert(choice, `Unknown Jev planning choice: ${selected}`);\n return {\n selected,\n choice,\n response,\n target: locateInPlanning ? answers.target : undefined,\n };\n}\n\nexport type JevActionDecision = Awaited<ReturnType<typeof decideJevAction>>;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","decideJevAction","context","options","criteria","choices","Map","action","kind","assert","locateInPlanning","findAllMidsceneLocatorField","response","callSystemOneAI","answers","systemOneResponseSchema","JSON","selected","choice","undefined"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;ACOO,eAAeI,gBACpBC,OAA2B,EAC3BC,OAAoB;IAEpB,MAAMC,WAAmC;QACvC,oBACE;QACF,oBACE;IACJ;IACA,MAAMC,UAAU,IAAIC,IAA+B;QACjD;YAAC;YAAoB;gBAAE,MAAM;YAAW;SAAE;QAC1C;YAAC;YAAoB;gBAAE,MAAM;YAAW;SAAE;KAC3C;IACD,KAAK,MAAMC,UAAUJ,QAAQ,WAAW,CAAE;QACxC,MAAMK,OAAOD,OAAO,oBAAoB,GAAG,WAAW;QACtD,MAAMX,MAAM,GAAGY,KAAK,CAAC,EAAED,OAAO,IAAI,EAAE;QACpCE,IAAAA,sBAAAA,MAAAA,AAAAA,EAAO,CAACJ,QAAQ,GAAG,CAACT,MAAM,CAAC,+BAA+B,EAAEA,KAAK;QACjES,QAAQ,GAAG,CAACT,KAAK;YAAEY;YAAMD;QAAO;QAChCH,QAAQ,CAACR,IAAI,GAAG,GAAGW,OAAO,IAAI,CAAC,EAAE,EAAEA,OAAO,WAAW,IAAIA,OAAO,IAAI,CAAC,EAAE,EACrEC,AAAS,aAATA,OACI,yBACA,4GACJ;IACJ;IACAC,IAAAA,sBAAAA,MAAAA,AAAAA,EAAOJ,QAAQ,IAAI,IAAI,KAAK;IAC5B,MAAMK,mBACJP,QAAQ,uBAAuB,IAC/BA,QAAQ,WAAW,CAAC,IAAI,CACtB,CAACI,SACCA,OAAO,oBAAoB,IAC3BA,OAAO,WAAW,IAClBI,AAA2D,MAA3DA,AAAAA,IAAAA,mCAAAA,2BAAAA,AAAAA,EAA4BJ,OAAO,WAAW,EAAE,MAAM;IAE5D,MAAMK,WAAW,MAAMC,AAAAA,IAAAA,yBAAAA,eAAAA,AAAAA,EACrB;QACE,GAAGX,OAAO;QACV,WAAW;YACT,GAAIQ,mBACA;gBACE,QAAQ;oBACN,MAAM;oBACN,cACE;gBACJ;YACF,IACA,CAAC,CAAC;YACN,QAAQ;gBACN,MAAM;gBACN,cACE;gBACFN;YACF;QACF;IACF,GACAD,QAAQ,YAAY,EACpB;QAAE,aAAaA,QAAQ,WAAW;IAAC;IAErC,MAAM,EAAEW,OAAO,EAAE,GAAGC,0BAAAA,uBAAAA,CAAAA,KAA6B,CAC/CC,KAAK,KAAK,CAACJ,SAAS,OAAO;IAE7BH,IAAAA,sBAAAA,MAAAA,AAAAA,EAAOK,AAAwB,aAAxBA,QAAQ,MAAM,CAAC,IAAI,EAAe;IACzC,MAAMG,WAAWH,QAAQ,MAAM,CAAC,MAAM;IACtC,MAAMI,SAASb,QAAQ,GAAG,CAACY;IAC3BR,IAAAA,sBAAAA,MAAAA,AAAAA,EAAOS,QAAQ,CAAC,6BAA6B,EAAED,UAAU;IACzD,OAAO;QACLA;QACAC;QACAN;QACA,QAAQF,mBAAmBI,QAAQ,MAAM,GAAGK;IAC9C;AACF"}
@@ -27,139 +27,27 @@ __webpack_require__.d(__webpack_exports__, {
27
27
  jevPlan: ()=>jevPlan
28
28
  });
29
29
  const external_common_js_namespaceObject = require("../../../common.js");
30
- const utils_namespaceObject = require("@midscene/shared/utils");
31
- const index_js_namespaceObject = require("../../service-caller/index.js");
32
- const system_one_js_namespaceObject = require("../../service-caller/system-one.js");
33
- const standard_planning_js_namespaceObject = require("../../workflows/planning/standard-planning.js");
34
- const external_image_js_namespaceObject = require("./image.js");
30
+ const external_planning_action_js_namespaceObject = require("./planning-action.js");
31
+ const external_planning_context_js_namespaceObject = require("./planning-context.js");
32
+ const external_planning_decision_js_namespaceObject = require("./planning-decision.js");
35
33
  const jevPlan = async (instruction, options)=>{
34
+ if (options.actionSpace.length + 2 > 255) throw new Error('Jev planning supports at most 253 actions (255 choices including completion and delegation).');
36
35
  const history = options.conversationHistory;
37
- const delegate = async (reason)=>{
38
- (0, utils_namespaceObject.assert)(options.getDefaultModelRuntime, 'Default model runtime is required for Jev planning delegation');
39
- const base = options.getDefaultModelRuntime();
40
- (0, utils_namespaceObject.assert)('jev' !== base.config.modelFamily, 'Jev cannot delegate planning to itself');
41
- const runtime = {
42
- ...base,
43
- config: {
44
- ...base.config,
45
- intent: 'planning'
46
- },
47
- executionId: options.modelRuntime.executionId,
48
- onUsage: base.onUsage ? (usage)=>base.onUsage?.({
49
- ...usage,
50
- intent: 'planning'
51
- }) : void 0,
52
- modelRouting: {
53
- requestedModel: options.modelRuntime.config.modelName,
54
- requestedSlot: options.modelRuntime.config.slot,
55
- task: 'planning',
56
- reason
57
- }
58
- };
59
- const planner = 'custom' === runtime.adapter.planning.kind ? runtime.adapter.planning.planFn : standard_planning_js_namespaceObject.standardPlan;
60
- return planner(instruction, {
61
- ...options,
62
- modelRuntime: runtime,
63
- includeLocateInPlanning: false
64
- });
65
- };
66
- const image = await (0, external_image_js_namespaceObject.prepareJevImage)(options.context.screenshot.base64);
67
- const references = await Promise.all(instruction.referenceImages.map(async (reference, index)=>({
68
- key: `reference_${index}`,
69
- name: reference.name,
70
- image: await (0, external_image_js_namespaceObject.prepareJevImage)(reference.url)
71
- })));
72
- const state = {
73
- goal: instruction.text,
74
- context: options.actionContext,
75
- history: history.historicalLogsToText(),
76
- memory: history.memoriesToText(),
77
- feedback: history.pendingFeedbackMessage,
78
- references: references.map(({ key, name })=>({
79
- image: `\`${key}\``,
80
- name
81
- })),
82
- availableActions: options.actionSpace.map(({ name, description })=>({
83
- name,
84
- description
85
- }))
86
- };
87
- const criteria = {
88
- Complete: 'The entire user goal is already satisfied, confirmed by the current screenshot and execution feedback. No text answer is requested.',
89
- Delegate: 'The next step requires text input, generated output, an action or parameters not covered by the other choices. Also use for impossible tasks needing explanation.'
90
- };
91
- for (const action of options.actionSpace)if ('Tap' === action.name || 'Scroll' === action.name || 'Sleep' === action.name) criteria[action.name] = 'Sleep' === action.name ? 'Wait 800 ms for a transient loading state.' : action.description ?? action.name;
92
- const response = await (0, index_js_namespaceObject.callAI)([], options.modelRuntime, {
93
- abortSignal: options.abortSignal,
94
- systemOneRequest: {
95
- state,
96
- images: {
97
- screenshot: image.imageBase64,
98
- ...Object.fromEntries(references.map(({ key, image })=>[
99
- key,
100
- image.imageBase64
101
- ]))
102
- },
103
- questions: {
104
- action: {
105
- type: 'choice',
106
- instructions: 'Choose exactly the next step toward `goal` using the current `screenshot`, context, history and feedback. History records proposed actions; feedback and current screenshot establish what actually happened. Do not repeat completed steps. Reference images describe targets, not the current page.',
107
- criteria
108
- },
109
- ...criteria.Scroll ? {
110
- direction: {
111
- type: 'choice',
112
- instructions: 'If scrolling is the next step toward `goal`, which direction reveals the desired off-screen content? Evaluate from the screenshot and history independently of the action question.',
113
- criteria: {
114
- down: 'Reveal content below',
115
- up: 'Reveal content above',
116
- left: 'Reveal content to the left',
117
- right: 'Reveal content to the right'
118
- }
119
- }
120
- } : {}
121
- }
36
+ const context = await (0, external_planning_context_js_namespaceObject.prepareJevPlanningContext)(instruction, options);
37
+ const decision = await (0, external_planning_decision_js_namespaceObject.decideJevAction)(context, options);
38
+ const { selected, choice, response } = decision;
39
+ if ('delegate' === choice.kind) return {
40
+ actions: [],
41
+ log: `Jev selected ${selected}`,
42
+ rawResponse: response.content,
43
+ usage: response.usage,
44
+ shouldContinuePlanning: true,
45
+ delegation: {
46
+ reason: choice.action ? `The previous planner suggested ${choice.action.name}; delegating planning with this action as an advisory suggestion` : 'The previous planner delegated planning of the next step',
47
+ suggestedAction: choice.action?.name
122
48
  }
123
- });
124
- const { answers } = system_one_js_namespaceObject.systemOneResponseSchema.parse(JSON.parse(response.content));
125
- (0, utils_namespaceObject.assert)('choice' === answers.action.type, 'Invalid Jev planning action');
126
- const selected = answers.action.choice;
127
- if ('Delegate' === selected) return delegate('The next step requires parameters or output that Jev cannot generate');
128
- if (('Tap' === selected || 'Scroll' === selected) && options.locateModelRuntime?.config.modelFamily !== 'jev') return delegate("The configured Locate model requires a concrete target description from a general-purpose planner");
129
- const locate = {
130
- prompt: `Locate the single ${'Scroll' === selected ? 'scrollable region to scroll' : 'element to tap'} for the NEXT step toward this goal. Use the current screenshot as authoritative. Previous proposals may have failed; use feedback. Task context: ${JSON.stringify(state)}`,
131
- images: instruction.referenceImages
132
49
  };
133
- const actions = (()=>{
134
- if ('Complete' === selected) return [];
135
- if ('Sleep' === selected) return [
136
- {
137
- type: 'Sleep',
138
- param: {
139
- timeMs: 800
140
- }
141
- }
142
- ];
143
- if ('Tap' === selected) return [
144
- {
145
- type: 'Tap',
146
- param: {
147
- locate
148
- }
149
- }
150
- ];
151
- (0, utils_namespaceObject.assert)('Scroll' === selected && answers.direction?.type === 'choice', 'Invalid Jev scroll action');
152
- return [
153
- {
154
- type: 'Scroll',
155
- param: {
156
- locate,
157
- direction: answers.direction.choice,
158
- scrollType: 'singleAction'
159
- }
160
- }
161
- ];
162
- })();
50
+ const actions = (0, external_planning_action_js_namespaceObject.buildJevAction)(decision, context, instruction, options);
163
51
  const log = `Jev selected ${selected}`;
164
52
  const feedback = history.pendingFeedbackMessage;
165
53
  history.resetPendingFeedbackMessageIfExists();
@@ -184,8 +72,8 @@ const jevPlan = async (instruction, options)=>{
184
72
  log,
185
73
  rawResponse: response.content,
186
74
  usage: response.usage,
187
- shouldContinuePlanning: 'Complete' !== selected,
188
- ...'Complete' === selected ? {
75
+ shouldContinuePlanning: 'complete' !== choice.kind,
76
+ ...'complete' === choice.kind ? {
189
77
  finalizeSuccess: true
190
78
  } : {},
191
79
  yamlFlow: (0, external_common_js_namespaceObject.buildYamlFlowFromPlans)(actions, options.actionSpace)