@beeos-ai/device-agent 0.4.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 (398) hide show
  1. package/.pi/extensions/android-tools.ts +139 -0
  2. package/.pi/skills/.gitkeep +0 -0
  3. package/.pi/skills/ground-mobile-fallback/SKILL.md +50 -0
  4. package/LICENSE +201 -0
  5. package/dist/action/handler.d.ts +9 -0
  6. package/dist/action/handler.js +124 -0
  7. package/dist/action/handler.js.map +1 -0
  8. package/dist/adapters/agent-gateway-client.d.ts +256 -0
  9. package/dist/adapters/agent-gateway-client.js +332 -0
  10. package/dist/adapters/agent-gateway-client.js.map +1 -0
  11. package/dist/adapters/agentcore-inner-loop.d.ts +29 -0
  12. package/dist/adapters/agentcore-inner-loop.js +72 -0
  13. package/dist/adapters/agentcore-inner-loop.js.map +1 -0
  14. package/dist/adapters/agentcore-pi.d.ts +215 -0
  15. package/dist/adapters/agentcore-pi.js +464 -0
  16. package/dist/adapters/agentcore-pi.js.map +1 -0
  17. package/dist/adapters/agentcore-runner.d.ts +70 -0
  18. package/dist/adapters/agentcore-runner.js +255 -0
  19. package/dist/adapters/agentcore-runner.js.map +1 -0
  20. package/dist/adapters/device-android-adb.d.ts +41 -0
  21. package/dist/adapters/device-android-adb.js +279 -0
  22. package/dist/adapters/device-android-adb.js.map +1 -0
  23. package/dist/adapters/device-desktop.d.ts +37 -0
  24. package/dist/adapters/device-desktop.js +101 -0
  25. package/dist/adapters/device-desktop.js.map +1 -0
  26. package/dist/adapters/identity-file.d.ts +30 -0
  27. package/dist/adapters/identity-file.js +50 -0
  28. package/dist/adapters/identity-file.js.map +1 -0
  29. package/dist/adapters/transport-bridge-ws.d.ts +39 -0
  30. package/dist/adapters/transport-bridge-ws.js +49 -0
  31. package/dist/adapters/transport-bridge-ws.js.map +1 -0
  32. package/dist/adapters/vlm-inner-loop.d.ts +88 -0
  33. package/dist/adapters/vlm-inner-loop.js +199 -0
  34. package/dist/adapters/vlm-inner-loop.js.map +1 -0
  35. package/dist/agent-runtime/adapters/base.d.ts +145 -0
  36. package/dist/agent-runtime/adapters/base.js +29 -0
  37. package/dist/agent-runtime/adapters/base.js.map +1 -0
  38. package/dist/agent-runtime/adapters/index.d.ts +17 -0
  39. package/dist/agent-runtime/adapters/index.js +17 -0
  40. package/dist/agent-runtime/adapters/index.js.map +1 -0
  41. package/dist/agent-runtime/adapters/mock.d.ts +44 -0
  42. package/dist/agent-runtime/adapters/mock.js +54 -0
  43. package/dist/agent-runtime/adapters/mock.js.map +1 -0
  44. package/dist/agent-runtime/adapters/openai.d.ts +63 -0
  45. package/dist/agent-runtime/adapters/openai.js +302 -0
  46. package/dist/agent-runtime/adapters/openai.js.map +1 -0
  47. package/dist/agent-runtime/adapters/registry.d.ts +49 -0
  48. package/dist/agent-runtime/adapters/registry.js +129 -0
  49. package/dist/agent-runtime/adapters/registry.js.map +1 -0
  50. package/dist/agent-runtime/adapters/ui-tars.d.ts +13 -0
  51. package/dist/agent-runtime/adapters/ui-tars.js +22 -0
  52. package/dist/agent-runtime/adapters/ui-tars.js.map +1 -0
  53. package/dist/agent-runtime/agent-runner.d.ts +149 -0
  54. package/dist/agent-runtime/agent-runner.js +356 -0
  55. package/dist/agent-runtime/agent-runner.js.map +1 -0
  56. package/dist/agent-runtime/core.d.ts +170 -0
  57. package/dist/agent-runtime/core.js +624 -0
  58. package/dist/agent-runtime/core.js.map +1 -0
  59. package/dist/agent-runtime/index.d.ts +16 -0
  60. package/dist/agent-runtime/index.js +17 -0
  61. package/dist/agent-runtime/index.js.map +1 -0
  62. package/dist/agent-runtime/plan-executor.d.ts +118 -0
  63. package/dist/agent-runtime/plan-executor.js +501 -0
  64. package/dist/agent-runtime/plan-executor.js.map +1 -0
  65. package/dist/agent-runtime/planner/base.d.ts +128 -0
  66. package/dist/agent-runtime/planner/base.js +157 -0
  67. package/dist/agent-runtime/planner/base.js.map +1 -0
  68. package/dist/agent-runtime/planner/llm-planner.d.ts +58 -0
  69. package/dist/agent-runtime/planner/llm-planner.js +112 -0
  70. package/dist/agent-runtime/planner/llm-planner.js.map +1 -0
  71. package/dist/agent-runtime/planner/noop-planner.d.ts +13 -0
  72. package/dist/agent-runtime/planner/noop-planner.js +30 -0
  73. package/dist/agent-runtime/planner/noop-planner.js.map +1 -0
  74. package/dist/agent-runtime/planner/prompts.d.ts +33 -0
  75. package/dist/agent-runtime/planner/prompts.js +165 -0
  76. package/dist/agent-runtime/planner/prompts.js.map +1 -0
  77. package/dist/agent-runtime/reflection.d.ts +81 -0
  78. package/dist/agent-runtime/reflection.js +189 -0
  79. package/dist/agent-runtime/reflection.js.map +1 -0
  80. package/dist/agent-runtime/reflectors/action-reflector.d.ts +97 -0
  81. package/dist/agent-runtime/reflectors/action-reflector.js +233 -0
  82. package/dist/agent-runtime/reflectors/action-reflector.js.map +1 -0
  83. package/dist/agent-runtime/reflectors/policy.d.ts +53 -0
  84. package/dist/agent-runtime/reflectors/policy.js +106 -0
  85. package/dist/agent-runtime/reflectors/policy.js.map +1 -0
  86. package/dist/agent-runtime/reflectors/trajectory-reflector.d.ts +94 -0
  87. package/dist/agent-runtime/reflectors/trajectory-reflector.js +223 -0
  88. package/dist/agent-runtime/reflectors/trajectory-reflector.js.map +1 -0
  89. package/dist/agent-runtime/skills/embedding.d.ts +53 -0
  90. package/dist/agent-runtime/skills/embedding.js +134 -0
  91. package/dist/agent-runtime/skills/embedding.js.map +1 -0
  92. package/dist/agent-runtime/skills/fs-store.d.ts +88 -0
  93. package/dist/agent-runtime/skills/fs-store.js +483 -0
  94. package/dist/agent-runtime/skills/fs-store.js.map +1 -0
  95. package/dist/agent-runtime/skills/index.d.ts +10 -0
  96. package/dist/agent-runtime/skills/index.js +10 -0
  97. package/dist/agent-runtime/skills/index.js.map +1 -0
  98. package/dist/agent-runtime/skills/matcher-evolver.d.ts +88 -0
  99. package/dist/agent-runtime/skills/matcher-evolver.js +110 -0
  100. package/dist/agent-runtime/skills/matcher-evolver.js.map +1 -0
  101. package/dist/agent-runtime/skills/memory-store.d.ts +23 -0
  102. package/dist/agent-runtime/skills/memory-store.js +94 -0
  103. package/dist/agent-runtime/skills/memory-store.js.map +1 -0
  104. package/dist/agent-runtime/skills/normalise.d.ts +40 -0
  105. package/dist/agent-runtime/skills/normalise.js +152 -0
  106. package/dist/agent-runtime/skills/normalise.js.map +1 -0
  107. package/dist/agent-runtime/skills/replay.d.ts +46 -0
  108. package/dist/agent-runtime/skills/replay.js +106 -0
  109. package/dist/agent-runtime/skills/replay.js.map +1 -0
  110. package/dist/agent-runtime/skills/sqlite-store.d.ts +60 -0
  111. package/dist/agent-runtime/skills/sqlite-store.js +234 -0
  112. package/dist/agent-runtime/skills/sqlite-store.js.map +1 -0
  113. package/dist/agent-runtime/skills/types.d.ts +99 -0
  114. package/dist/agent-runtime/skills/types.js +14 -0
  115. package/dist/agent-runtime/skills/types.js.map +1 -0
  116. package/dist/agent.d.ts +110 -0
  117. package/dist/agent.js +162 -0
  118. package/dist/agent.js.map +1 -0
  119. package/dist/api.d.ts +27 -0
  120. package/dist/api.js +48 -0
  121. package/dist/api.js.map +1 -0
  122. package/dist/app/agent-host.d.ts +59 -0
  123. package/dist/app/agent-host.js +263 -0
  124. package/dist/app/agent-host.js.map +1 -0
  125. package/dist/app/device-manager.d.ts +28 -0
  126. package/dist/app/device-manager.js +64 -0
  127. package/dist/app/device-manager.js.map +1 -0
  128. package/dist/app/message-store.d.ts +55 -0
  129. package/dist/app/message-store.js +99 -0
  130. package/dist/app/message-store.js.map +1 -0
  131. package/dist/app/session-manager.d.ts +132 -0
  132. package/dist/app/session-manager.js +350 -0
  133. package/dist/app/session-manager.js.map +1 -0
  134. package/dist/bootstrap.d.ts +94 -0
  135. package/dist/bootstrap.js +459 -0
  136. package/dist/bootstrap.js.map +1 -0
  137. package/dist/chat.d.ts +16 -0
  138. package/dist/chat.js +175 -0
  139. package/dist/chat.js.map +1 -0
  140. package/dist/config/loader.d.ts +77 -0
  141. package/dist/config/loader.js +292 -0
  142. package/dist/config/loader.js.map +1 -0
  143. package/dist/config/schema.d.ts +162 -0
  144. package/dist/config/schema.js +243 -0
  145. package/dist/config/schema.js.map +1 -0
  146. package/dist/core/actions.d.ts +60 -0
  147. package/dist/core/actions.js +120 -0
  148. package/dist/core/actions.js.map +1 -0
  149. package/dist/core/errors.d.ts +8 -0
  150. package/dist/core/errors.js +9 -0
  151. package/dist/core/errors.js.map +1 -0
  152. package/dist/core/screen.d.ts +7 -0
  153. package/dist/core/screen.js +8 -0
  154. package/dist/core/screen.js.map +1 -0
  155. package/dist/core/session.d.ts +42 -0
  156. package/dist/core/session.js +29 -0
  157. package/dist/core/session.js.map +1 -0
  158. package/dist/debug/dump-system-prompt.d.ts +1 -0
  159. package/dist/debug/dump-system-prompt.js +34 -0
  160. package/dist/debug/dump-system-prompt.js.map +1 -0
  161. package/dist/device/android.d.ts +25 -0
  162. package/dist/device/android.js +231 -0
  163. package/dist/device/android.js.map +1 -0
  164. package/dist/device/apps.d.ts +3 -0
  165. package/dist/device/apps.js +77 -0
  166. package/dist/device/apps.js.map +1 -0
  167. package/dist/device/base.d.ts +20 -0
  168. package/dist/device/base.js +2 -0
  169. package/dist/device/base.js.map +1 -0
  170. package/dist/device/ui-xml.d.ts +29 -0
  171. package/dist/device/ui-xml.js +194 -0
  172. package/dist/device/ui-xml.js.map +1 -0
  173. package/dist/fleet/adapters/process/node-process-manager.d.ts +157 -0
  174. package/dist/fleet/adapters/process/node-process-manager.js +664 -0
  175. package/dist/fleet/adapters/process/node-process-manager.js.map +1 -0
  176. package/dist/fleet/adapters/sources/local-adb.d.ts +105 -0
  177. package/dist/fleet/adapters/sources/local-adb.js +353 -0
  178. package/dist/fleet/adapters/sources/local-adb.js.map +1 -0
  179. package/dist/fleet/adapters/sources/remote-adb.d.ts +97 -0
  180. package/dist/fleet/adapters/sources/remote-adb.js +138 -0
  181. package/dist/fleet/adapters/sources/remote-adb.js.map +1 -0
  182. package/dist/fleet/adapters/state/beeos-cli-store.d.ts +72 -0
  183. package/dist/fleet/adapters/state/beeos-cli-store.js +250 -0
  184. package/dist/fleet/adapters/state/beeos-cli-store.js.map +1 -0
  185. package/dist/fleet/adapters/state/port-allocator.d.ts +43 -0
  186. package/dist/fleet/adapters/state/port-allocator.js +173 -0
  187. package/dist/fleet/adapters/state/port-allocator.js.map +1 -0
  188. package/dist/fleet/domain/device.d.ts +138 -0
  189. package/dist/fleet/domain/device.js +49 -0
  190. package/dist/fleet/domain/device.js.map +1 -0
  191. package/dist/fleet/domain/events.d.ts +102 -0
  192. package/dist/fleet/domain/events.js +15 -0
  193. package/dist/fleet/domain/events.js.map +1 -0
  194. package/dist/fleet/domain/fsm.d.ts +122 -0
  195. package/dist/fleet/domain/fsm.js +475 -0
  196. package/dist/fleet/domain/fsm.js.map +1 -0
  197. package/dist/fleet/http/status-client.d.ts +31 -0
  198. package/dist/fleet/http/status-client.js +115 -0
  199. package/dist/fleet/http/status-client.js.map +1 -0
  200. package/dist/fleet/http/status-server.d.ts +64 -0
  201. package/dist/fleet/http/status-server.js +200 -0
  202. package/dist/fleet/http/status-server.js.map +1 -0
  203. package/dist/fleet/index.d.ts +27 -0
  204. package/dist/fleet/index.js +17 -0
  205. package/dist/fleet/index.js.map +1 -0
  206. package/dist/fleet/installer/index.d.ts +12 -0
  207. package/dist/fleet/installer/index.js +13 -0
  208. package/dist/fleet/installer/index.js.map +1 -0
  209. package/dist/fleet/installer/launchd-mac.d.ts +73 -0
  210. package/dist/fleet/installer/launchd-mac.js +291 -0
  211. package/dist/fleet/installer/launchd-mac.js.map +1 -0
  212. package/dist/fleet/installer/service-spec.d.ts +70 -0
  213. package/dist/fleet/installer/service-spec.js +43 -0
  214. package/dist/fleet/installer/service-spec.js.map +1 -0
  215. package/dist/fleet/installer/spawn-env.d.ts +45 -0
  216. package/dist/fleet/installer/spawn-env.js +224 -0
  217. package/dist/fleet/installer/spawn-env.js.map +1 -0
  218. package/dist/fleet/ports/clock.d.ts +19 -0
  219. package/dist/fleet/ports/clock.js +26 -0
  220. package/dist/fleet/ports/clock.js.map +1 -0
  221. package/dist/fleet/ports/device-source.d.ts +28 -0
  222. package/dist/fleet/ports/device-source.js +18 -0
  223. package/dist/fleet/ports/device-source.js.map +1 -0
  224. package/dist/fleet/ports/process-manager.d.ts +110 -0
  225. package/dist/fleet/ports/process-manager.js +27 -0
  226. package/dist/fleet/ports/process-manager.js.map +1 -0
  227. package/dist/fleet/ports/state-registry.d.ts +49 -0
  228. package/dist/fleet/ports/state-registry.js +12 -0
  229. package/dist/fleet/ports/state-registry.js.map +1 -0
  230. package/dist/fleet/supervisor.d.ts +107 -0
  231. package/dist/fleet/supervisor.js +508 -0
  232. package/dist/fleet/supervisor.js.map +1 -0
  233. package/dist/grounding/grounder.d.ts +46 -0
  234. package/dist/grounding/grounder.js +82 -0
  235. package/dist/grounding/grounder.js.map +1 -0
  236. package/dist/inbound/acp/handlers/device.d.ts +43 -0
  237. package/dist/inbound/acp/handlers/device.js +153 -0
  238. package/dist/inbound/acp/handlers/device.js.map +1 -0
  239. package/dist/inbound/acp/handlers/initialize.d.ts +71 -0
  240. package/dist/inbound/acp/handlers/initialize.js +53 -0
  241. package/dist/inbound/acp/handlers/initialize.js.map +1 -0
  242. package/dist/inbound/acp/handlers/models.d.ts +16 -0
  243. package/dist/inbound/acp/handlers/models.js +23 -0
  244. package/dist/inbound/acp/handlers/models.js.map +1 -0
  245. package/dist/inbound/acp/handlers/session.d.ts +51 -0
  246. package/dist/inbound/acp/handlers/session.js +61 -0
  247. package/dist/inbound/acp/handlers/session.js.map +1 -0
  248. package/dist/inbound/acp/handlers/skills.d.ts +8 -0
  249. package/dist/inbound/acp/handlers/skills.js +9 -0
  250. package/dist/inbound/acp/handlers/skills.js.map +1 -0
  251. package/dist/inbound/acp/notifier.d.ts +35 -0
  252. package/dist/inbound/acp/notifier.js +45 -0
  253. package/dist/inbound/acp/notifier.js.map +1 -0
  254. package/dist/inbound/acp/router.d.ts +67 -0
  255. package/dist/inbound/acp/router.js +179 -0
  256. package/dist/inbound/acp/router.js.map +1 -0
  257. package/dist/inbound/cli/fleet-command.d.ts +34 -0
  258. package/dist/inbound/cli/fleet-command.js +792 -0
  259. package/dist/inbound/cli/fleet-command.js.map +1 -0
  260. package/dist/inbound/cli/main.d.ts +38 -0
  261. package/dist/inbound/cli/main.js +364 -0
  262. package/dist/inbound/cli/main.js.map +1 -0
  263. package/dist/inbound/cli/run-command.d.ts +101 -0
  264. package/dist/inbound/cli/run-command.js +405 -0
  265. package/dist/inbound/cli/run-command.js.map +1 -0
  266. package/dist/inbound/cli/skills-command.d.ts +39 -0
  267. package/dist/inbound/cli/skills-command.js +333 -0
  268. package/dist/inbound/cli/skills-command.js.map +1 -0
  269. package/dist/inbound/http/server.d.ts +7 -0
  270. package/dist/inbound/http/server.js +8 -0
  271. package/dist/inbound/http/server.js.map +1 -0
  272. package/dist/index.d.ts +66 -0
  273. package/dist/index.js +48 -0
  274. package/dist/index.js.map +1 -0
  275. package/dist/logger/index.d.ts +37 -0
  276. package/dist/logger/index.js +84 -0
  277. package/dist/logger/index.js.map +1 -0
  278. package/dist/mcp-client/autospawn.d.ts +67 -0
  279. package/dist/mcp-client/autospawn.js +173 -0
  280. package/dist/mcp-client/autospawn.js.map +1 -0
  281. package/dist/mcp-client/client.d.ts +78 -0
  282. package/dist/mcp-client/client.js +168 -0
  283. package/dist/mcp-client/client.js.map +1 -0
  284. package/dist/mcp-client/index.d.ts +7 -0
  285. package/dist/mcp-client/index.js +4 -0
  286. package/dist/mcp-client/index.js.map +1 -0
  287. package/dist/mcp-client/inproc.d.ts +47 -0
  288. package/dist/mcp-client/inproc.js +229 -0
  289. package/dist/mcp-client/inproc.js.map +1 -0
  290. package/dist/mcp-client/runtime.d.ts +34 -0
  291. package/dist/mcp-client/runtime.js +15 -0
  292. package/dist/mcp-client/runtime.js.map +1 -0
  293. package/dist/model/adapters/autoglm.d.ts +31 -0
  294. package/dist/model/adapters/autoglm.js +409 -0
  295. package/dist/model/adapters/autoglm.js.map +1 -0
  296. package/dist/model/adapters/base.d.ts +13 -0
  297. package/dist/model/adapters/base.js +27 -0
  298. package/dist/model/adapters/base.js.map +1 -0
  299. package/dist/model/adapters/guiowl.d.ts +1 -0
  300. package/dist/model/adapters/guiowl.js +253 -0
  301. package/dist/model/adapters/guiowl.js.map +1 -0
  302. package/dist/model/adapters/index.d.ts +6 -0
  303. package/dist/model/adapters/index.js +8 -0
  304. package/dist/model/adapters/index.js.map +1 -0
  305. package/dist/model/adapters/maiui.d.ts +1 -0
  306. package/dist/model/adapters/maiui.js +117 -0
  307. package/dist/model/adapters/maiui.js.map +1 -0
  308. package/dist/model/adapters/qwenvl.d.ts +1 -0
  309. package/dist/model/adapters/qwenvl.js +108 -0
  310. package/dist/model/adapters/qwenvl.js.map +1 -0
  311. package/dist/model/adapters/showui.d.ts +1 -0
  312. package/dist/model/adapters/showui.js +132 -0
  313. package/dist/model/adapters/showui.js.map +1 -0
  314. package/dist/model/adapters/tool-call.d.ts +6 -0
  315. package/dist/model/adapters/tool-call.js +102 -0
  316. package/dist/model/adapters/tool-call.js.map +1 -0
  317. package/dist/model/adapters/uitars.d.ts +1 -0
  318. package/dist/model/adapters/uitars.js +180 -0
  319. package/dist/model/adapters/uitars.js.map +1 -0
  320. package/dist/model/base.d.ts +32 -0
  321. package/dist/model/base.js +2 -0
  322. package/dist/model/base.js.map +1 -0
  323. package/dist/model/client.d.ts +26 -0
  324. package/dist/model/client.js +300 -0
  325. package/dist/model/client.js.map +1 -0
  326. package/dist/model/image/compress.d.ts +53 -0
  327. package/dist/model/image/compress.js +89 -0
  328. package/dist/model/image/compress.js.map +1 -0
  329. package/dist/model/image/transport.d.ts +134 -0
  330. package/dist/model/image/transport.js +154 -0
  331. package/dist/model/image/transport.js.map +1 -0
  332. package/dist/orchestrator-system-prompt.d.ts +6 -0
  333. package/dist/orchestrator-system-prompt.js +81 -0
  334. package/dist/orchestrator-system-prompt.js.map +1 -0
  335. package/dist/pi-context.d.ts +82 -0
  336. package/dist/pi-context.js +62 -0
  337. package/dist/pi-context.js.map +1 -0
  338. package/dist/pi-local-skills.d.ts +17 -0
  339. package/dist/pi-local-skills.js +24 -0
  340. package/dist/pi-local-skills.js.map +1 -0
  341. package/dist/plugins/acp/index.d.ts +46 -0
  342. package/dist/plugins/acp/index.js +111 -0
  343. package/dist/plugins/acp/index.js.map +1 -0
  344. package/dist/plugins/agent-sync/index.d.ts +40 -0
  345. package/dist/plugins/agent-sync/index.js +98 -0
  346. package/dist/plugins/agent-sync/index.js.map +1 -0
  347. package/dist/plugins/http-debug/index.d.ts +30 -0
  348. package/dist/plugins/http-debug/index.js +64 -0
  349. package/dist/plugins/http-debug/index.js.map +1 -0
  350. package/dist/plugins/http-debug/server.d.ts +92 -0
  351. package/dist/plugins/http-debug/server.js +464 -0
  352. package/dist/plugins/http-debug/server.js.map +1 -0
  353. package/dist/ports/agent-core.d.ts +158 -0
  354. package/dist/ports/agent-core.js +2 -0
  355. package/dist/ports/agent-core.js.map +1 -0
  356. package/dist/ports/agent-host.d.ts +125 -0
  357. package/dist/ports/agent-host.js +23 -0
  358. package/dist/ports/agent-host.js.map +1 -0
  359. package/dist/ports/device.d.ts +53 -0
  360. package/dist/ports/device.js +13 -0
  361. package/dist/ports/device.js.map +1 -0
  362. package/dist/ports/identity.d.ts +22 -0
  363. package/dist/ports/identity.js +9 -0
  364. package/dist/ports/identity.js.map +1 -0
  365. package/dist/ports/plugin.d.ts +62 -0
  366. package/dist/ports/plugin.js +35 -0
  367. package/dist/ports/plugin.js.map +1 -0
  368. package/dist/ports/transport.d.ts +32 -0
  369. package/dist/ports/transport.js +12 -0
  370. package/dist/ports/transport.js.map +1 -0
  371. package/dist/ports/vlm.d.ts +59 -0
  372. package/dist/ports/vlm.js +14 -0
  373. package/dist/ports/vlm.js.map +1 -0
  374. package/dist/test-lan-autoglm.d.ts +7 -0
  375. package/dist/test-lan-autoglm.js +46 -0
  376. package/dist/test-lan-autoglm.js.map +1 -0
  377. package/dist/test-mem-breakdown.d.ts +1 -0
  378. package/dist/test-mem-breakdown.js +103 -0
  379. package/dist/test-mem-breakdown.js.map +1 -0
  380. package/dist/test-mem.d.ts +1 -0
  381. package/dist/test-mem.js +60 -0
  382. package/dist/test-mem.js.map +1 -0
  383. package/dist/test-mobile-use.d.ts +1 -0
  384. package/dist/test-mobile-use.js +18 -0
  385. package/dist/test-mobile-use.js.map +1 -0
  386. package/dist/test-screenshot-loop.d.ts +1 -0
  387. package/dist/test-screenshot-loop.js +43 -0
  388. package/dist/test-screenshot-loop.js.map +1 -0
  389. package/dist/test-screenshot.d.ts +1 -0
  390. package/dist/test-screenshot.js +10 -0
  391. package/dist/test-screenshot.js.map +1 -0
  392. package/dist/test-ui-xml-dump.d.ts +15 -0
  393. package/dist/test-ui-xml-dump.js +49 -0
  394. package/dist/test-ui-xml-dump.js.map +1 -0
  395. package/dist/types.d.ts +69 -0
  396. package/dist/types.js +23 -0
  397. package/dist/types.js.map +1 -0
  398. package/package.json +94 -0
@@ -0,0 +1,624 @@
1
+ /**
2
+ * agent-runtime/core — Plan-Act-Reflect loop.
3
+ *
4
+ * Mirrors the Python reference at
5
+ * /Users/heat/workspace/deviceagent_research/deviceagent/agent_runtime/loop/core.py
6
+ *
7
+ * Each iteration:
8
+ * 1. **Observe** — pull a fresh screenshot from the MCP server via
9
+ * `McpClient`. The uiautomator dump is fetched only when the active
10
+ * `IModelAdapter.consumesUiDump === true` (e.g. GUI-Owl); the default
11
+ * pure-vision flow (Open-AutoGLM, UI-TARS, Qwen-VL, ShowUI) skips it
12
+ * to save ~1–3 s per step on Android.
13
+ * 2. **Predict** — ask the registered `IModelAdapter` for the next
14
+ * `Action`, given the observation and rolling step history.
15
+ * 3. **Act** — terminal verbs (`done` / `fail` / `call_for_user`) short-
16
+ * circuit the loop. Everything else is dispatched to the MCP `/act`
17
+ * route. Action payloads carrying `_coordSystem: "0-1000" |
18
+ * "smart_resize"` are scaled to absolute screen pixels before
19
+ * dispatch.
20
+ * 4. **Reflect** — heuristic stall detection. A non-null veto string
21
+ * ends the run with `terminator: "reflection_veto"`.
22
+ *
23
+ * Termination conditions:
24
+ * - `done` action → success
25
+ * - `fail` action → failure
26
+ * - `call_for_user` action → handled per `waitForUser` flag
27
+ * - step budget exceeded
28
+ * - wall-clock timeout exceeded
29
+ * - reflection veto
30
+ * - external `AbortSignal` aborted
31
+ */
32
+ import { isTerminal } from "@beeos-ai/device-common";
33
+ import { HierarchicalReflector } from "./reflection.js";
34
+ /* ──────────────────────────────────────────────────────────────────────── */
35
+ /* AgentLoop */
36
+ /* ──────────────────────────────────────────────────────────────────────── */
37
+ export class AgentLoop {
38
+ opts;
39
+ static DEFAULT_MAX_STEPS = 30;
40
+ static DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
41
+ history = [];
42
+ reflector;
43
+ notes = [];
44
+ trajectoryVerdict;
45
+ constructor(opts) {
46
+ this.opts = opts;
47
+ this.reflector = opts.reflector ?? new HierarchicalReflector(opts.adapter);
48
+ }
49
+ async run() {
50
+ const maxSteps = this.opts.maxSteps ?? AgentLoop.DEFAULT_MAX_STEPS;
51
+ const timeoutMs = this.opts.timeoutMs ?? AgentLoop.DEFAULT_TIMEOUT_MS;
52
+ const deadline = Date.now() + timeoutMs;
53
+ const usage = { inputTokens: 0, outputTokens: 0 };
54
+ let step = 0;
55
+ let lastError;
56
+ let finalText = "";
57
+ while (step < maxSteps) {
58
+ if (this.opts.signal?.aborted) {
59
+ return this.finish("cancelled", step, "Task cancelled", usage, lastError);
60
+ }
61
+ if (Date.now() > deadline) {
62
+ const err = {
63
+ code: "TIMEOUT",
64
+ message: `agent exceeded ${timeoutMs}ms budget`,
65
+ fatal: true,
66
+ };
67
+ await this.fire("onError", err);
68
+ return this.finish("timeout", step, err.message, usage, err);
69
+ }
70
+ step += 1;
71
+ // ── 1. Observe ─────────────────────────────────────────────────
72
+ let obs;
73
+ try {
74
+ obs = await this.observe();
75
+ }
76
+ catch (e) {
77
+ const err = {
78
+ code: "MCP_OBSERVE_FAILED",
79
+ message: errMsg(e),
80
+ fatal: true,
81
+ cause: e,
82
+ };
83
+ await this.fire("onError", err);
84
+ return this.finish("error", step, err.message, usage, err);
85
+ }
86
+ // ── Phase 1.5 — derive a text-only observation summary. Prefer
87
+ // uiDump's top text/content-desc nodes (already fetched when the
88
+ // adapter sets `consumesUiDump`); otherwise we fall back to the
89
+ // grounder's rationale once predict() returns. This is what
90
+ // downstream reflectors read so they don't need the screenshot.
91
+ let observationSummary = summarizeUiDump(obs.uiDump);
92
+ // ── 2. Predict ────────────────────────────────────────────────
93
+ let prediction;
94
+ try {
95
+ prediction = await this.opts.adapter.predictAction(obs, this.history, {
96
+ signal: this.opts.signal,
97
+ hooks: { onText: this.opts.hooks?.onText, onReasoning: this.opts.hooks?.onReasoning },
98
+ });
99
+ }
100
+ catch (e) {
101
+ if (this.opts.signal?.aborted) {
102
+ return this.finish("cancelled", step, "Task cancelled", usage, lastError);
103
+ }
104
+ const err = {
105
+ code: "MODEL_PREDICT_FAILED",
106
+ message: errMsg(e),
107
+ fatal: false,
108
+ cause: e,
109
+ };
110
+ lastError = err;
111
+ await this.fire("onError", err);
112
+ // Skip this step, try again (matches the Python reference).
113
+ this.history.push({
114
+ stepIdx: step,
115
+ action: null,
116
+ rationale: `model predict failed: ${err.message}`,
117
+ observationSummary: "",
118
+ actionResult: "predict_failed",
119
+ actErrorMessage: err.message,
120
+ });
121
+ continue;
122
+ }
123
+ usage.inputTokens += prediction.usage.inputTokens;
124
+ usage.outputTokens += prediction.usage.outputTokens;
125
+ if (prediction.usage.cachedInputTokens) {
126
+ usage.cachedInputTokens =
127
+ (usage.cachedInputTokens ?? 0) + prediction.usage.cachedInputTokens;
128
+ }
129
+ if (prediction.usage.costUsd) {
130
+ usage.costUsd = (usage.costUsd ?? 0) + prediction.usage.costUsd;
131
+ }
132
+ if (!observationSummary) {
133
+ observationSummary = summarizeRationale(prediction.rationale);
134
+ }
135
+ // Reasoning event before the action is dispatched.
136
+ if (prediction.rationale)
137
+ await this.fire("onReasoning", prediction.rationale);
138
+ // ── 3. Act ─────────────────────────────────────────────────────
139
+ const action = prediction.action;
140
+ // Phase 2.1 — `take_note` is a *local* book-keeping verb. It does
141
+ // NOT hit MCP, does NOT consume act / pre-sanity budget on the
142
+ // grounder side, and is recorded in history so reflectors / replan
143
+ // can see it. Step counter still ticks (we already incremented
144
+ // above) so a runaway grounder that only emits notes still hits
145
+ // the heuristic veto.
146
+ if (action.type === "take_note") {
147
+ const note = stringFromPayload(action.payload, "note") ?? prediction.rationale ?? "";
148
+ if (note.trim().length > 0) {
149
+ this.notes.push(note.trim());
150
+ }
151
+ this.recordHistory(step, prediction, observationSummary, "ok");
152
+ await this.fireStep(step, prediction, false);
153
+ // Heuristic veto still applies (4 identical take_note in a row =
154
+ // stalled grounder), so fall through to the bottom check.
155
+ const veto = this.reflector.maybeVeto(this.history, step, maxSteps);
156
+ if (veto) {
157
+ const err = {
158
+ code: "REFLECTION_VETO",
159
+ message: veto,
160
+ fatal: true,
161
+ };
162
+ await this.fire("onError", err);
163
+ return this.finish("reflection_veto", step, veto, usage, err);
164
+ }
165
+ // Trajectory check still applies — a runaway grounder that only
166
+ // emits notes is exactly the "stuck" case we want to bail on.
167
+ const trajVeto = await this.maybeRunTrajectoryReflector(step, maxSteps, usage);
168
+ if (trajVeto) {
169
+ const err = {
170
+ code: "REFLECTION_VETO",
171
+ message: trajVeto,
172
+ fatal: true,
173
+ };
174
+ await this.fire("onError", err);
175
+ return this.finish("reflection_veto", step, trajVeto, usage, err);
176
+ }
177
+ continue;
178
+ }
179
+ // Pre-action sanity (Phase 1.3) — block obviously-broken candidates
180
+ // before dispatch. Terminal verbs are short-circuited below so they
181
+ // are never blocked.
182
+ if (!isTerminal(action)) {
183
+ const veto = this.reflector.maybeBlockAction(this.history, action);
184
+ if (veto) {
185
+ const note = `pre-sanity blocked: ${veto.code} — ${veto.reason}`;
186
+ this.recordHistory(step, prediction, note, "skipped", veto.reason);
187
+ await this.fireStep(step, prediction, false);
188
+ // Surface as a non-fatal error event so the orchestrator can log it.
189
+ await this.fire("onError", {
190
+ code: "REFLECTION_VETO",
191
+ message: note,
192
+ fatal: false,
193
+ });
194
+ continue;
195
+ }
196
+ }
197
+ if (action.type === "done") {
198
+ finalText =
199
+ stringFromPayload(action.payload, "message") ??
200
+ stringFromPayload(action.payload, "finalText") ??
201
+ "task complete";
202
+ await this.fireStep(step, prediction, true);
203
+ this.recordHistory(step, prediction, observationSummary, "terminal");
204
+ return this.finish("done", step, finalText, usage, lastError);
205
+ }
206
+ if (action.type === "fail") {
207
+ finalText =
208
+ stringFromPayload(action.payload, "reason") ??
209
+ stringFromPayload(action.payload, "message") ??
210
+ "model gave up";
211
+ const err = {
212
+ code: "MODEL_FAIL",
213
+ message: finalText,
214
+ fatal: true,
215
+ };
216
+ await this.fire("onError", err);
217
+ await this.fireStep(step, prediction, true);
218
+ this.recordHistory(step, prediction, observationSummary, "terminal", finalText);
219
+ return this.finish("fail", step, finalText, usage, err);
220
+ }
221
+ if (action.type === "call_for_user") {
222
+ finalText =
223
+ stringFromPayload(action.payload, "message") ??
224
+ stringFromPayload(action.payload, "reason") ??
225
+ "operator takeover requested";
226
+ await this.fireStep(step, prediction, true);
227
+ this.recordHistory(step, prediction, observationSummary, "terminal");
228
+ if (!this.opts.waitForUser) {
229
+ return this.finish("call_for_user", step, finalText, usage, lastError);
230
+ }
231
+ // Phase-1: surfacing the event is enough — wait-for-user is
232
+ // implemented by the orchestrator layer (PiOrchestratorAgent).
233
+ return this.finish("call_for_user", step, finalText, usage, lastError);
234
+ }
235
+ const t0 = Date.now();
236
+ let actResult;
237
+ try {
238
+ const r = await this.opts.mcp.act(this.scaleAction(action, obs));
239
+ actResult = r.result ?? r;
240
+ }
241
+ catch (e) {
242
+ const err = {
243
+ code: "MCP_ACT_FAILED",
244
+ message: errMsg(e),
245
+ fatal: false,
246
+ cause: e,
247
+ };
248
+ lastError = err;
249
+ await this.fire("onError", err);
250
+ // Record the failed step, then keep going so the model can recover.
251
+ this.recordHistory(step, prediction, observationSummary, "act_failed", err.message);
252
+ await this.fireStep(step, prediction, false);
253
+ // Action reflector is most useful exactly here — fire it before
254
+ // the next predict so the grounder sees the verdict in history.
255
+ await this.maybeRunActionReflector(prediction, "act_failed", usage);
256
+ continue;
257
+ }
258
+ const durationMs = Date.now() - t0;
259
+ await this.fire("onTool", {
260
+ name: action.type,
261
+ args: actionToToolArgs(action),
262
+ result: actResult,
263
+ durationMs,
264
+ });
265
+ this.recordHistory(step, prediction, observationSummary, "ok");
266
+ await this.fireStep(step, prediction, false);
267
+ // ── 4. Reflect (model-based action reflector — Phase 1.4) ──────
268
+ await this.maybeRunActionReflector(prediction, "ok", usage);
269
+ // ── 5. Heuristic veto ─────────────────────────────────────────
270
+ const veto = this.reflector.maybeVeto(this.history, step, maxSteps);
271
+ if (veto) {
272
+ const err = {
273
+ code: "REFLECTION_VETO",
274
+ message: veto,
275
+ fatal: true,
276
+ };
277
+ await this.fire("onError", err);
278
+ return this.finish("reflection_veto", step, veto, usage, err);
279
+ }
280
+ // ── 6. Trajectory reflector (Phase 2.2) ───────────────────────
281
+ const trajVeto = await this.maybeRunTrajectoryReflector(step, maxSteps, usage);
282
+ if (trajVeto) {
283
+ const err = {
284
+ code: "REFLECTION_VETO",
285
+ message: trajVeto,
286
+ fatal: true,
287
+ };
288
+ await this.fire("onError", err);
289
+ return this.finish("reflection_veto", step, trajVeto, usage, err);
290
+ }
291
+ }
292
+ const err = {
293
+ code: "STEP_BUDGET",
294
+ message: `hit step budget ${maxSteps}`,
295
+ fatal: true,
296
+ };
297
+ await this.fire("onError", err);
298
+ return this.finish("step_budget", step, err.message, usage, err);
299
+ }
300
+ /* ─────────────────────────────────────────────────────────────────── */
301
+ /* internals */
302
+ /* ─────────────────────────────────────────────────────────────────── */
303
+ async observe() {
304
+ const ss = await this.opts.mcp.screenshot();
305
+ // Skip the uiautomator round-trip (1–3 s on Android) when the active
306
+ // adapter does NOT splice the UI hierarchy XML into its prompt — this
307
+ // matches the Open-AutoGLM upstream pure-vision flow (see
308
+ // `phone_agent/agent.py:142-169` + `model/client.py:277-290`). Adapters
309
+ // that genuinely consume `Observation.uiDump` opt in via the
310
+ // `consumesUiDump` capability flag (e.g. `guiowl`).
311
+ let uiDump;
312
+ if (this.opts.adapter.consumesUiDump) {
313
+ try {
314
+ const dump = await this.opts.mcp.uiDump();
315
+ if (dump.supported && dump.content)
316
+ uiDump = dump.content;
317
+ }
318
+ catch {
319
+ // ui_dump is best-effort — desktop / iOS backends can't produce it.
320
+ }
321
+ }
322
+ // Use the *click coordinate system* (deviceWidth/Height) for scaling —
323
+ // not the raw image dimensions. They typically match on Android (`wm
324
+ // size` ≡ rendered bytes) but diverge on macOS Retina (downscaled to
325
+ // logical points) and iOS (logical vs. physical pixels). Falling back
326
+ // to width/height keeps older mcp-server builds working — see
327
+ // `ScreenshotResult` docstring in `@beeos-ai/device-common`.
328
+ return {
329
+ task: this.opts.task,
330
+ env: this.opts.env,
331
+ screenW: ss.deviceWidth ?? ss.width ?? 0,
332
+ screenH: ss.deviceHeight ?? ss.height ?? 0,
333
+ screenshotB64: ss.b64,
334
+ uiDump,
335
+ };
336
+ }
337
+ /**
338
+ * Translate a model-frame action into an MCP-frame action by scaling
339
+ * coordinates to the absolute screen size, depending on the
340
+ * `_coordSystem` payload hint that `parsedToAction` plants.
341
+ */
342
+ scaleAction(action, obs) {
343
+ const cs = action.payload?._coordSystem ?? "absolute";
344
+ if (cs === "absolute" || cs === undefined)
345
+ return action;
346
+ const scaled = { ...action };
347
+ if (action.target?.kind === "point") {
348
+ scaled.target = {
349
+ kind: "point",
350
+ x: scaleCoord(action.target.x, cs, obs.screenW, "x"),
351
+ y: scaleCoord(action.target.y, cs, obs.screenH, "y"),
352
+ };
353
+ }
354
+ else if (action.target?.kind === "box") {
355
+ scaled.target = {
356
+ kind: "box",
357
+ x1: scaleCoord(action.target.x1, cs, obs.screenW, "x"),
358
+ y1: scaleCoord(action.target.y1, cs, obs.screenH, "y"),
359
+ x2: scaleCoord(action.target.x2, cs, obs.screenW, "x"),
360
+ y2: scaleCoord(action.target.y2, cs, obs.screenH, "y"),
361
+ };
362
+ }
363
+ return scaled;
364
+ }
365
+ /**
366
+ * Phase 1.4 — invoke the optional model-based action reflector. Verdicts
367
+ * are advisory: a `passed: false` result is appended to the just-pushed
368
+ * StepHistory entry's `rationale` (so the next `predict` sees it), and
369
+ * the entry's `actionResult` is upgraded from `ok` → `act_failed` so
370
+ * downstream code (skill evolver, trajectory reflector) treats it as a
371
+ * miss.
372
+ *
373
+ * The reflector itself is responsible for {@link IActionReflector.shouldReflect}
374
+ * gating; this helper just composes the wiring. Cost is rolled into the
375
+ * surrounding {@link AgentLoop.run} `usage` aggregator.
376
+ */
377
+ async maybeRunActionReflector(prediction, actionResult, usage) {
378
+ const reflector = this.reflector.actionReflector;
379
+ if (!reflector)
380
+ return;
381
+ if (!reflector.shouldReflect(this.history, prediction, actionResult))
382
+ return;
383
+ const last = this.history[this.history.length - 1];
384
+ if (!last)
385
+ return;
386
+ try {
387
+ const verdict = await reflector.reflect({
388
+ goal: this.opts.task,
389
+ history: this.history,
390
+ prediction,
391
+ observationSummary: last.observationSummary ?? "",
392
+ }, this.opts.signal);
393
+ // Roll usage in — even passing reflections cost tokens.
394
+ usage.inputTokens += verdict.usage.inputTokens;
395
+ usage.outputTokens += verdict.usage.outputTokens;
396
+ if (verdict.usage.costUsd) {
397
+ usage.costUsd = (usage.costUsd ?? 0) + verdict.usage.costUsd;
398
+ }
399
+ if (!verdict.passed) {
400
+ // Splice the verdict into the just-recorded step so the grounder's
401
+ // next predict reads it. Upgrade outcome to act_failed so reflectors
402
+ // / evolver downstream treat the step as a miss even if MCP succeeded.
403
+ last.rationale =
404
+ (last.rationale ? last.rationale + "\n" : "") +
405
+ `[action_reflector] ${verdict.reason}`;
406
+ last.actionResult = "act_failed";
407
+ last.actErrorMessage =
408
+ last.actErrorMessage ?? `action reflector flagged: ${verdict.reason}`;
409
+ }
410
+ }
411
+ catch {
412
+ // Reflector failures must NOT abort the loop. The reflector
413
+ // implementation is expected to swallow its own errors and return a
414
+ // `passed: true` verdict — but if it doesn't, the catch-all here is
415
+ // the final safety net.
416
+ }
417
+ }
418
+ /**
419
+ * Phase 2.2 — periodic global progress assessment. The reflector decides
420
+ * its own gating (default: every 5 steps); we just compose the wiring.
421
+ *
422
+ * Returns a non-empty veto string only on `stuck`. `off_track` injects an
423
+ * advisory line into the most recent history entry's rationale so the
424
+ * grounder sees it next predict, but the loop keeps running. The verdict
425
+ * itself is stashed on `this.trajectoryVerdict` so the PlanExecutor can
426
+ * thread it into `PlanContext.trajectoryVerdict` on replan.
427
+ */
428
+ async maybeRunTrajectoryReflector(step, maxSteps, usage) {
429
+ const reflector = this.reflector.trajectoryReflector;
430
+ if (!reflector)
431
+ return undefined;
432
+ if (!reflector.shouldReflect(step, this.history))
433
+ return undefined;
434
+ const last = this.history[this.history.length - 1];
435
+ const observationSummary = last?.observationSummary ?? "";
436
+ try {
437
+ const verdict = await reflector.reflect({
438
+ goal: this.opts.task,
439
+ step,
440
+ maxSteps,
441
+ history: this.history,
442
+ notes: this.notes,
443
+ observationSummary,
444
+ }, this.opts.signal);
445
+ usage.inputTokens += verdict.usage.inputTokens;
446
+ usage.outputTokens += verdict.usage.outputTokens;
447
+ if (verdict.usage.costUsd) {
448
+ usage.costUsd = (usage.costUsd ?? 0) + verdict.usage.costUsd;
449
+ }
450
+ if (verdict.verdict === "on_track")
451
+ return undefined;
452
+ // off_track / stuck — annotate history so grounder sees it.
453
+ const tag = `[trajectory_reflector:${verdict.verdict}] ${verdict.reason}${verdict.suggestion ? ` (suggestion: ${verdict.suggestion})` : ""}`;
454
+ if (last) {
455
+ last.rationale = (last.rationale ? last.rationale + "\n" : "") + tag;
456
+ }
457
+ this.trajectoryVerdict = { verdict: verdict.verdict, reason: verdict.reason };
458
+ if (verdict.verdict === "stuck") {
459
+ return `trajectory stuck: ${verdict.reason}`;
460
+ }
461
+ // off_track is non-fatal — keep going, planner will see the verdict
462
+ // on the *next* replan if the loop later bails for another reason.
463
+ return undefined;
464
+ }
465
+ catch {
466
+ // Trajectory reflector failures must not abort the loop.
467
+ return undefined;
468
+ }
469
+ }
470
+ recordHistory(step, p, summary, actionResult, actErrorMessage) {
471
+ this.history.push({
472
+ stepIdx: step,
473
+ action: p.action,
474
+ rationale: p.rationale,
475
+ observationSummary: summary,
476
+ actionResult,
477
+ confidence: p.confidence,
478
+ actErrorMessage,
479
+ });
480
+ }
481
+ async fireStep(step, prediction, finished) {
482
+ if (!this.opts.hooks?.onStep)
483
+ return;
484
+ try {
485
+ await this.opts.hooks.onStep({
486
+ index: step,
487
+ rationale: prediction.rationale,
488
+ action: prediction.action,
489
+ prediction,
490
+ finished: finished || isTerminal(prediction.action),
491
+ });
492
+ }
493
+ catch {
494
+ // hook failures must never derail the loop
495
+ }
496
+ }
497
+ async fire(name, payload) {
498
+ const h = this.opts.hooks?.[name];
499
+ if (!h)
500
+ return;
501
+ try {
502
+ await h(payload);
503
+ }
504
+ catch {
505
+ // hook failures must never derail the loop
506
+ }
507
+ }
508
+ finish(terminator, steps, finalText, usage, lastError) {
509
+ return {
510
+ terminator,
511
+ steps,
512
+ finalText,
513
+ cancelled: terminator === "cancelled",
514
+ history: [...this.history],
515
+ usage,
516
+ lastError,
517
+ notes: [...this.notes],
518
+ trajectoryVerdict: this.trajectoryVerdict,
519
+ };
520
+ }
521
+ }
522
+ /* ──────────────────────────────────────────────────────────────────────── */
523
+ /* helpers */
524
+ /* ──────────────────────────────────────────────────────────────────────── */
525
+ function errMsg(e) {
526
+ if (e == null)
527
+ return String(e);
528
+ // OpenAI SDK v4 APIError carries status / body / response details that the
529
+ // bare `.message` field elides — preserve them so MODEL_PREDICT_FAILED
530
+ // notices surface the actual upstream failure (e.g. "502 from upstream",
531
+ // "context_length_exceeded", "invalid_image_url") instead of a generic
532
+ // "Connection error".
533
+ if (typeof e === "object") {
534
+ const anyE = e;
535
+ const parts = [];
536
+ if (typeof anyE.status === "number")
537
+ parts.push(`HTTP ${anyE.status}`);
538
+ const upstream = anyE.error?.message ??
539
+ (typeof anyE.code === "string" ? anyE.code : undefined) ??
540
+ anyE.type;
541
+ if (upstream && upstream !== anyE.message)
542
+ parts.push(upstream);
543
+ if (anyE.message)
544
+ parts.push(anyE.message);
545
+ if (parts.length)
546
+ return parts.join(" | ");
547
+ }
548
+ return e instanceof Error ? e.message : String(e);
549
+ }
550
+ function stringFromPayload(p, key) {
551
+ const v = p?.[key];
552
+ return typeof v === "string" ? v : undefined;
553
+ }
554
+ function actionToToolArgs(action) {
555
+ const out = { type: action.type };
556
+ if (action.target)
557
+ out.target = action.target;
558
+ if (action.payload && Object.keys(action.payload).length > 0)
559
+ out.payload = action.payload;
560
+ return out;
561
+ }
562
+ /**
563
+ * Phase 1.5 — derive a ≤200-char text summary from a uiautomator XML dump.
564
+ * Strategy: pull `text="…"` and `content-desc="…"` attributes (top 8 unique,
565
+ * trimmed) and join with " | ". Returns "" when the dump is empty or
566
+ * contains no useful text — caller is expected to fall back to
567
+ * {@link summarizeRationale}. The regex is intentionally permissive (the
568
+ * Android dump is XML but malformed in some edge cases — `xmldom` wouldn't
569
+ * buy us much over a single regex sweep).
570
+ */
571
+ function summarizeUiDump(uiDump) {
572
+ if (!uiDump)
573
+ return "";
574
+ const re = /(?:text|content-desc)="([^"]+)"/g;
575
+ const seen = new Set();
576
+ const items = [];
577
+ let m;
578
+ while ((m = re.exec(uiDump)) !== null) {
579
+ const v = m[1].trim();
580
+ if (!v || seen.has(v))
581
+ continue;
582
+ seen.add(v);
583
+ items.push(v);
584
+ if (items.length >= 8)
585
+ break;
586
+ }
587
+ if (items.length === 0)
588
+ return "";
589
+ return truncateForSummary(items.join(" | "));
590
+ }
591
+ /**
592
+ * Phase 1.5 — fall-back summary when no uiDump is available. We pull the
593
+ * first sentence of the grounder's rationale (Open-AutoGLM tends to prefix
594
+ * the actual UI description, e.g. "Blue Submit button on the bottom-right
595
+ * — tapping it will…"). Truncates to 200 chars.
596
+ */
597
+ function summarizeRationale(rationale) {
598
+ if (!rationale)
599
+ return "";
600
+ const trimmed = rationale.trim();
601
+ if (!trimmed)
602
+ return "";
603
+ // First sentence (CJK and Latin punctuation), or full string if no
604
+ // sentence terminator within 200 chars.
605
+ const m = trimmed.match(/^[^.!?。!?\n]+[.!?。!?]/);
606
+ const first = m ? m[0] : trimmed;
607
+ return truncateForSummary(first);
608
+ }
609
+ function truncateForSummary(s) {
610
+ return s.length > 200 ? `${s.slice(0, 199)}…` : s;
611
+ }
612
+ function scaleCoord(v, system, screen, _axis) {
613
+ if (system === "0-1000")
614
+ return Math.round((v / 1000) * screen);
615
+ if (system === "smart_resize") {
616
+ // smart_resize coordinates are pre-scaled to a 28-px grid relative to the
617
+ // resized image; in the absence of the resize transform we approximate by
618
+ // treating them as already-absolute (the legacy AndroidAdb adapter does
619
+ // the same — see action/handler.ts).
620
+ return Math.round(v);
621
+ }
622
+ return v;
623
+ }
624
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/agent-runtime/core.ts"],"names":[],"mappings":"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"}