@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,255 @@
1
+ /**
2
+ * Adapter — AgentRunnerCore (v0.3.0 default).
3
+ *
4
+ * Wraps the new `AgentRunner` (Hybrid Plan-Act runtime) behind the
5
+ * legacy `IAgentCore` port so the ACP plugin / `AgentHost` /
6
+ * `SessionManager` keep working without protocol changes.
7
+ *
8
+ * This is the **default** core path as of v0.3.0. The two opt-in
9
+ * decorators retained from earlier versions are:
10
+ * - `--legacy-inner` → `InnerLoopAgent` (single-layer fallback)
11
+ * - (default off) → `PiOrchestratorAgent` (outer LLM + inner
12
+ * mobile_use VLM, two-layer)
13
+ *
14
+ * The runner picks the strategy according to the user-tunable
15
+ * Plan-Act options:
16
+ * - `mode: "auto"` (default) → ReAct for short tasks, Plan-Act for
17
+ * long ones, with mid-run replan-fallback when ReAct stalls.
18
+ * - `mode: "always"` → straight Plan-Act
19
+ * - `mode: "never"` → pure ReAct
20
+ *
21
+ * Translation contract (IAgentCore → AgentRunner):
22
+ * - `opts.task` → `runner.task`
23
+ * - `opts.maxSteps` → `runner.maxSteps`
24
+ * - `opts.abortSignal` → `runner.signal`
25
+ * - `opts.onText` → `runner.hooks.onText`
26
+ * - `opts.onReasoning` → `runner.hooks.onReasoning` (planner plan
27
+ * descriptions + per-step VLM rationale; the
28
+ * ACP plugin translates this into
29
+ * `agent_thought_chunk`).
30
+ * - `opts.onTool` → synthesised from `runner.hooks.onTool` /
31
+ * `runner.hooks.onError` (start + end pair).
32
+ * - `opts.onStep` → synthesised from `runner.hooks.onStep`,
33
+ * mapped onto the legacy `VlmStep` shape so
34
+ * ACP `tool_call_update` envelopes keep their
35
+ * historical fields (`thinking`, `action`,
36
+ * `finished`, `message`).
37
+ */
38
+ import { AgentRunner, } from "../agent-runtime/index.js";
39
+ const DEFAULT_MAX_STEPS = 30;
40
+ const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000;
41
+ export class AgentRunnerCore {
42
+ opts;
43
+ currentModel;
44
+ currentProvider;
45
+ constructor(opts) {
46
+ this.opts = opts;
47
+ this.currentModel = opts.adapter.modelName ?? "(unknown)";
48
+ this.currentProvider = opts.providerTag ?? opts.adapter.name;
49
+ }
50
+ get modelName() {
51
+ return this.currentModel;
52
+ }
53
+ get providerName() {
54
+ return this.currentProvider;
55
+ }
56
+ async run(opts) {
57
+ const mcp = this.opts.mcpProvider();
58
+ const env = this.opts.env ?? "mobile";
59
+ // Build hooks adapter. The runner's `onStep` carries the canonical
60
+ // `Action` (from `@beeos-ai/device-common`); we shape that into the
61
+ // legacy `VlmStep` so the ACP host side keeps working unchanged.
62
+ let stepCounter = 0;
63
+ const runnerHooks = {
64
+ onText: opts.onText,
65
+ onReasoning: opts.onReasoning,
66
+ onStep: async (ev) => {
67
+ stepCounter += 1;
68
+ if (opts.onStep) {
69
+ const vlm = {
70
+ stepIndex: ev.index,
71
+ thinking: ev.rationale ?? "",
72
+ action: actionForLegacyStep(ev.action),
73
+ finished: ev.finished,
74
+ message: ev.finished
75
+ ? ev.action.payload?.message ?? null
76
+ : null,
77
+ };
78
+ await opts.onStep(vlm);
79
+ }
80
+ },
81
+ onTool: async (ev) => {
82
+ if (!opts.onTool)
83
+ return;
84
+ const id = `runner-${stepCounter}-${ev.name}`;
85
+ const args = ev.args && typeof ev.args === "object" ? ev.args : {};
86
+ const start = { id, name: ev.name, args, status: "start" };
87
+ await opts.onTool(start);
88
+ const end = {
89
+ id,
90
+ name: ev.name,
91
+ args,
92
+ status: "end",
93
+ result: ev.result,
94
+ isError: false,
95
+ };
96
+ await opts.onTool(end);
97
+ },
98
+ onError: async (ev) => {
99
+ // Forward the structured error to the host so it can dispatch a
100
+ // throttled `task:notice` (UI-visible "still retrying" / "task
101
+ // failed" hint). This is the user-perception channel and runs
102
+ // independently of the tool_call audit pair below.
103
+ if (opts.onError) {
104
+ try {
105
+ await opts.onError({
106
+ code: ev.code ?? "ERROR",
107
+ message: ev.message ?? "",
108
+ fatal: !!ev.fatal,
109
+ });
110
+ }
111
+ catch {
112
+ // host listener faults should not abort the runner
113
+ }
114
+ }
115
+ // Keep the legacy "synthesise an isError=true tool_call pair"
116
+ // translation for structured audit (HTTP debug, future
117
+ // event-log replay) — distinct envelope, distinct purpose.
118
+ if (!opts.onTool)
119
+ return;
120
+ const id = `runner-${stepCounter}-error`;
121
+ const start = {
122
+ id,
123
+ name: ev.code ?? "error",
124
+ args: {},
125
+ status: "start",
126
+ };
127
+ await opts.onTool(start);
128
+ const end = {
129
+ id,
130
+ name: ev.code ?? "error",
131
+ args: {},
132
+ status: "end",
133
+ result: ev.message,
134
+ isError: true,
135
+ };
136
+ await opts.onTool(end);
137
+ },
138
+ };
139
+ const runner = new AgentRunner({
140
+ task: opts.task,
141
+ env,
142
+ mcp,
143
+ adapter: this.opts.adapter,
144
+ planner: this.opts.planner,
145
+ mode: this.opts.mode ?? "auto",
146
+ maxSteps: opts.maxSteps ?? this.opts.defaultMaxSteps ?? DEFAULT_MAX_STEPS,
147
+ timeoutMs: this.opts.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS,
148
+ signal: opts.abortSignal,
149
+ hooks: runnerHooks,
150
+ });
151
+ const result = await runner.run();
152
+ return {
153
+ finalMessage: result.finalText,
154
+ steps: result.steps,
155
+ cancelled: result.cancelled,
156
+ };
157
+ }
158
+ async setModel(provider, model) {
159
+ // The runner's adapter is configured at construction time; hot
160
+ // model swap is delegated to the embedder. We surface the new
161
+ // identity for `modelName` / `providerName` getters and let the
162
+ // owner re-initialise the adapter on the next `run`.
163
+ this.currentProvider = provider;
164
+ this.currentModel = model;
165
+ }
166
+ }
167
+ /**
168
+ * Translate a `@beeos-ai/device-common` `Action` into the legacy
169
+ * `core/actions.ts` `Action` shape that historical `VlmStep.action`
170
+ * consumers (http-debug, ACP `tool_call_update`) expect.
171
+ *
172
+ * The legacy form is a discriminated union keyed by `kind` with flat
173
+ * fields (`x`, `y`, `text`, …). The new common form is a flat
174
+ * `{type, target, payload}` triple. We map the verbs that exist in
175
+ * both vocabularies and fall through to a permissive shell for verbs
176
+ * that only exist in the new form (e.g. `done`, `fail`, `launch_app`).
177
+ */
178
+ function actionForLegacyStep(action) {
179
+ if (!action || typeof action !== "object")
180
+ return null;
181
+ const t = action.type;
182
+ const tgt = action.target;
183
+ const p = action.payload ?? {};
184
+ switch (t) {
185
+ case "tap":
186
+ case "click":
187
+ return { kind: "tap", x: numFromTarget(tgt, "x"), y: numFromTarget(tgt, "y") };
188
+ case "double_click":
189
+ case "double_tap":
190
+ return { kind: "double_tap", x: numFromTarget(tgt, "x"), y: numFromTarget(tgt, "y") };
191
+ case "long_press":
192
+ return {
193
+ kind: "long_press",
194
+ x: numFromTarget(tgt, "x"),
195
+ y: numFromTarget(tgt, "y"),
196
+ durationMs: typeof p.durationMs === "number" ? p.durationMs : undefined,
197
+ };
198
+ case "swipe":
199
+ case "drag":
200
+ return {
201
+ kind: "swipe",
202
+ x1: numFromTarget(tgt, "x1"),
203
+ y1: numFromTarget(tgt, "y1"),
204
+ x2: numFromTarget(tgt, "x2"),
205
+ y2: numFromTarget(tgt, "y2"),
206
+ durationMs: typeof p.durationMs === "number" ? p.durationMs : undefined,
207
+ };
208
+ case "scroll": {
209
+ const direction = p.direction ?? "down";
210
+ return {
211
+ kind: "scroll",
212
+ x: numFromTarget(tgt, "x"),
213
+ y: numFromTarget(tgt, "y"),
214
+ direction: direction,
215
+ };
216
+ }
217
+ case "type":
218
+ return { kind: "type", text: stringPayload(p, "text") };
219
+ case "key":
220
+ case "press_key":
221
+ case "hotkey":
222
+ return { kind: "press_key", keycode: stringPayload(p, "keycode") };
223
+ case "back":
224
+ return { kind: "press_back" };
225
+ case "home":
226
+ return { kind: "press_home" };
227
+ case "launch_app":
228
+ case "open_app":
229
+ return {
230
+ kind: "open_app",
231
+ packageOrName: stringPayload(p, "packageOrName") || stringPayload(p, "package"),
232
+ };
233
+ case "wait":
234
+ return {
235
+ kind: "wait",
236
+ durationSeconds: typeof p.durationSeconds === "number" ? p.durationSeconds : 2,
237
+ };
238
+ case "execute_command":
239
+ case "shell":
240
+ return { kind: "shell", command: stringPayload(p, "command") };
241
+ default:
242
+ // Terminal / opaque actions — the legacy consumers either ignore the
243
+ // record (done / fail) or surface `kind` only.
244
+ return { kind: t, ...p };
245
+ }
246
+ }
247
+ function numFromTarget(tgt, key) {
248
+ const v = tgt?.[key];
249
+ return typeof v === "number" && Number.isFinite(v) ? v : 0;
250
+ }
251
+ function stringPayload(p, key) {
252
+ const v = p[key];
253
+ return typeof v === "string" ? v : "";
254
+ }
255
+ //# sourceMappingURL=agentcore-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentcore-runner.js","sourceRoot":"","sources":["../../src/adapters/agentcore-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Adapter — Android device over ADB.
3
+ *
4
+ * Wraps the legacy `AndroidDevice` (`src/device/android.ts`) so the inner VLM
5
+ * loop continues to use the proven implementation, and re-exposes it through
6
+ * the new `IDevice` port for the application/inbound layers.
7
+ *
8
+ * All side effects (child_process exec, sharp encoding, sleep) live here;
9
+ * the application layer never imports `child_process` directly.
10
+ */
11
+ import { AndroidDevice } from "../device/android.js";
12
+ import type { Action } from "../core/actions.js";
13
+ import type { ScreenObservation, UiNode } from "../core/screen.js";
14
+ import type { DeviceInfo, IDevice } from "../ports/device.js";
15
+ export interface AndroidAdbAdapterOptions {
16
+ /** ADB serial, e.g. `emulator-5554`. Optional when a single device is connected. */
17
+ serial?: string;
18
+ /** Skip the connect-time `adb devices` validation; useful for tests. */
19
+ skipConnectValidation?: boolean;
20
+ }
21
+ export declare class AndroidAdbAdapter implements IDevice {
22
+ private readonly device;
23
+ private readonly skipConnectValidation;
24
+ constructor(opts?: AndroidAdbAdapterOptions);
25
+ /** Expose the underlying low-level driver for the inner VLM loop. */
26
+ get raw(): AndroidDevice;
27
+ connect(): Promise<void>;
28
+ disconnect(): Promise<void>;
29
+ getInfo(): Promise<DeviceInfo>;
30
+ capture(opts?: {
31
+ raw?: boolean;
32
+ }): Promise<ScreenObservation>;
33
+ getUiTree(): Promise<UiNode[]>;
34
+ apply(action: Action): Promise<void>;
35
+ install(path: string): Promise<void>;
36
+ shell(command: string): Promise<string>;
37
+ private runShell;
38
+ private captureRawPng;
39
+ private adbPlain;
40
+ private adbArgs;
41
+ }
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Adapter — Android device over ADB.
3
+ *
4
+ * Wraps the legacy `AndroidDevice` (`src/device/android.ts`) so the inner VLM
5
+ * loop continues to use the proven implementation, and re-exposes it through
6
+ * the new `IDevice` port for the application/inbound layers.
7
+ *
8
+ * All side effects (child_process exec, sharp encoding, sleep) live here;
9
+ * the application layer never imports `child_process` directly.
10
+ */
11
+ import { execFile } from "node:child_process";
12
+ import { promisify } from "node:util";
13
+ import { AndroidDevice } from "../device/android.js";
14
+ import { searchUiXmlNodes } from "../device/ui-xml.js";
15
+ import { DeviceError } from "../core/errors.js";
16
+ import { getAppPackage } from "../device/apps.js";
17
+ const execFileAsync = promisify(execFile);
18
+ export class AndroidAdbAdapter {
19
+ device;
20
+ skipConnectValidation;
21
+ constructor(opts = {}) {
22
+ this.device = new AndroidDevice(opts.serial);
23
+ this.skipConnectValidation = !!opts.skipConnectValidation;
24
+ }
25
+ /** Expose the underlying low-level driver for the inner VLM loop. */
26
+ get raw() {
27
+ return this.device;
28
+ }
29
+ async connect() {
30
+ if (this.skipConnectValidation)
31
+ return;
32
+ const devices = await AndroidDevice.listDevices();
33
+ if (devices.length === 0) {
34
+ throw new DeviceError("No ADB devices connected. Run `adb devices`.", {
35
+ subtype: "no_device",
36
+ retriable: true,
37
+ });
38
+ }
39
+ }
40
+ async disconnect() {
41
+ // No-op — adb daemon stays alive between commands.
42
+ }
43
+ async getInfo() {
44
+ // ACP wire v2: pull every static prop in a single `getprop` dump (cheap,
45
+ // ~200ms) and dynamic info (size/density/currentApp) in parallel.
46
+ const [size, density, propDump, currentApp] = await Promise.all([
47
+ this.runShell("wm size").catch(() => ""),
48
+ this.runShell("wm density").catch(() => ""),
49
+ this.runShell("getprop").catch(() => ""),
50
+ this.device.getCurrentApp().catch(() => "System Home"),
51
+ ]);
52
+ const sizeMatch = size.match(/Physical size:\s*(\d+)x(\d+)/i);
53
+ const width = sizeMatch ? Number(sizeMatch[1]) : 1080;
54
+ const height = sizeMatch ? Number(sizeMatch[2]) : 1920;
55
+ const densityMatch = density.match(/Physical density:\s*(\d+)/i);
56
+ const dpi = densityMatch ? Number(densityMatch[1]) : 0;
57
+ const props = parseGetpropDump(propDump);
58
+ const model = props.get("ro.product.model") ?? "";
59
+ const version = props.get("ro.build.version.release") ?? "";
60
+ const sdk = props.get("ro.build.version.sdk") ?? "";
61
+ const abi = props.get("ro.product.cpu.abi") ?? "";
62
+ const manufacturer = props.get("ro.product.manufacturer") ?? "";
63
+ const brand = props.get("ro.product.brand") ?? "";
64
+ const serial = this.device.serial ?? props.get("ro.serialno") ?? "";
65
+ const capabilities = [
66
+ "screenshot",
67
+ "ui-tree",
68
+ "tap",
69
+ "swipe",
70
+ "type",
71
+ "press_key",
72
+ "install",
73
+ "shell",
74
+ ];
75
+ const metadata = {
76
+ currentApp,
77
+ serial,
78
+ sdk,
79
+ model,
80
+ abi,
81
+ manufacturer,
82
+ brand,
83
+ };
84
+ return {
85
+ type: "android",
86
+ name: model || "Android",
87
+ os: "android",
88
+ width,
89
+ height,
90
+ capabilities,
91
+ osVersion: version,
92
+ density: dpi,
93
+ metadata,
94
+ };
95
+ }
96
+ async capture(opts = {}) {
97
+ const currentApp = await this.device.getCurrentApp().catch(() => "System Home");
98
+ if (opts.raw) {
99
+ const buf = await this.captureRawPng();
100
+ const [w, h] = parsePngDimensions(buf);
101
+ return {
102
+ width: w,
103
+ height: h,
104
+ imageBase64: buf.toString("base64"),
105
+ imageFormat: "png",
106
+ uiXml: null,
107
+ currentApp,
108
+ capturedAt: Date.now(),
109
+ };
110
+ }
111
+ const ss = await this.device.takeScreenshot();
112
+ return {
113
+ width: ss.width,
114
+ height: ss.height,
115
+ imageBase64: ss.base64Data,
116
+ imageFormat: "jpeg",
117
+ uiXml: null,
118
+ currentApp,
119
+ capturedAt: Date.now(),
120
+ };
121
+ }
122
+ async getUiTree() {
123
+ const xml = await this.device.getUiXml();
124
+ if (!xml)
125
+ return [];
126
+ return searchUiXmlNodes(xml, "");
127
+ }
128
+ async apply(action) {
129
+ switch (action.kind) {
130
+ case "tap":
131
+ return this.device.tap(action.x, action.y);
132
+ case "double_tap":
133
+ return this.device.doubleTap(action.x, action.y);
134
+ case "long_press":
135
+ return this.device.longPress(action.x, action.y, action.durationMs);
136
+ case "swipe":
137
+ return this.device.swipe(action.x1, action.y1, action.x2, action.y2, action.durationMs);
138
+ case "scroll": {
139
+ // Default to screen-center origin if caller did not specify (x,y).
140
+ // Direction semantics: "up" means content moves up == finger swipes up.
141
+ let { x, y } = action;
142
+ if ((!x && !y) || x < 0 || y < 0) {
143
+ const sizeOut = await this.runShell("wm size").catch(() => "");
144
+ const m = sizeOut.match(/Physical size:\s*(\d+)x(\d+)/i);
145
+ const w = m ? Number(m[1]) : 1080;
146
+ const h = m ? Number(m[2]) : 1920;
147
+ x = Math.round(w / 2);
148
+ y = Math.round(h / 2);
149
+ }
150
+ const dist = action.direction === "left" || action.direction === "right" ? 300 : 600;
151
+ const dx = action.direction === "left" ? dist : action.direction === "right" ? -dist : 0;
152
+ const dy = action.direction === "up" ? dist : action.direction === "down" ? -dist : 0;
153
+ return this.device.swipe(x, y, x + dx, y + dy);
154
+ }
155
+ case "type":
156
+ return this.device.inputText(action.text);
157
+ case "press_key":
158
+ return this.device.pressKey(action.keycode);
159
+ case "press_back":
160
+ return this.device.pressBack();
161
+ case "press_home":
162
+ return this.device.pressHome();
163
+ case "open_app": {
164
+ const pkg = looksLikePackage(action.packageOrName)
165
+ ? action.packageOrName
166
+ : (getAppPackage(action.packageOrName) ?? action.packageOrName);
167
+ await this.runShell(`monkey -p ${pkg} -c android.intent.category.LAUNCHER 1`);
168
+ return;
169
+ }
170
+ case "wait":
171
+ return new Promise((res) => setTimeout(res, Math.max(0, action.durationSeconds * 1000)));
172
+ case "shell":
173
+ await this.shell(action.command);
174
+ return;
175
+ }
176
+ }
177
+ async install(path) {
178
+ await this.adbPlain("install", "-r", path);
179
+ }
180
+ async shell(command) {
181
+ return this.runShell(command);
182
+ }
183
+ // ── Internal ──────────────────────────────────────────────────────────────
184
+ async runShell(command) {
185
+ try {
186
+ const { stdout } = (await execFileAsync("adb", this.adbArgs("shell", command), {
187
+ maxBuffer: SHELL_OUTPUT_CAP_BYTES,
188
+ timeout: SHELL_TIMEOUT_MS,
189
+ killSignal: "SIGTERM",
190
+ }));
191
+ return stdout;
192
+ }
193
+ catch (e) {
194
+ const err = e;
195
+ if (err.killed && err.signal === "SIGTERM") {
196
+ throw new DeviceError(`adb shell timed out after ${SHELL_TIMEOUT_MS}ms`, {
197
+ subtype: "adb_timeout",
198
+ retriable: true,
199
+ cause: err,
200
+ });
201
+ }
202
+ throw new DeviceError(`adb shell failed: ${err.message}`, {
203
+ subtype: "adb_shell_failed",
204
+ cause: err,
205
+ });
206
+ }
207
+ }
208
+ async captureRawPng() {
209
+ const { stdout } = (await execFileAsync("adb", this.adbArgs("exec-out", "screencap", "-p"), {
210
+ encoding: "buffer",
211
+ maxBuffer: 32 * 1024 * 1024,
212
+ timeout: ADB_DEFAULT_TIMEOUT_MS,
213
+ killSignal: "SIGTERM",
214
+ }));
215
+ return stdout;
216
+ }
217
+ async adbPlain(...args) {
218
+ try {
219
+ return (await execFileAsync("adb", this.adbArgs(...args), {
220
+ maxBuffer: 32 * 1024 * 1024,
221
+ timeout: ADB_DEFAULT_TIMEOUT_MS,
222
+ killSignal: "SIGTERM",
223
+ }));
224
+ }
225
+ catch (e) {
226
+ const err = e;
227
+ if (err.killed && err.signal === "SIGTERM") {
228
+ throw new DeviceError(`adb ${args[0] ?? ""} timed out after ${ADB_DEFAULT_TIMEOUT_MS}ms`, {
229
+ subtype: "adb_timeout",
230
+ retriable: true,
231
+ cause: err,
232
+ });
233
+ }
234
+ throw new DeviceError(`adb ${args[0] ?? ""} failed: ${err.message}`, {
235
+ subtype: "adb_failed",
236
+ cause: err,
237
+ });
238
+ }
239
+ }
240
+ adbArgs(...args) {
241
+ return this.device.serial ? ["-s", this.device.serial, ...args] : args;
242
+ }
243
+ }
244
+ const ADB_DEFAULT_TIMEOUT_MS = 10_000;
245
+ const SHELL_TIMEOUT_MS = 30_000;
246
+ const SHELL_OUTPUT_CAP_BYTES = 8 * 1024 * 1024;
247
+ function parsePngDimensions(data) {
248
+ try {
249
+ return [data.readUInt32BE(16), data.readUInt32BE(20)];
250
+ }
251
+ catch {
252
+ return [1080, 1920];
253
+ }
254
+ }
255
+ function looksLikePackage(s) {
256
+ return /^[a-z][a-z0-9_]*(?:\.[a-z][a-z0-9_]*)+$/i.test(s);
257
+ }
258
+ /**
259
+ * Parse the `adb shell getprop` output into a flat key/value map.
260
+ *
261
+ * Each line is `[key]: [value]`. Values are pre-trimmed; missing keys map to
262
+ * undefined (callers fall back to `""`).
263
+ */
264
+ function parseGetpropDump(out) {
265
+ const map = new Map();
266
+ if (!out)
267
+ return map;
268
+ const re = /^\[([^\]]+)\]:\s*\[([^\]]*)\]\s*$/gm;
269
+ let m;
270
+ while ((m = re.exec(out)) !== null) {
271
+ const key = m[1];
272
+ const val = m[2];
273
+ if (key !== undefined && val !== undefined) {
274
+ map.set(key, val);
275
+ }
276
+ }
277
+ return map;
278
+ }
279
+ //# sourceMappingURL=device-android-adb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-android-adb.js","sourceRoot":"","sources":["../../src/adapters/device-android-adb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Adapter — desktop mock device.
3
+ *
4
+ * Equivalent to the Python `mode=desktop` runtime: returns a fixed canvas,
5
+ * records every action into an in-memory log, and never touches the host.
6
+ *
7
+ * Used for:
8
+ * - local UI development without ADB
9
+ * - unit testing the application/inbound layers
10
+ * - smoke-testing CI without a real device
11
+ */
12
+ import type { Action } from "../core/actions.js";
13
+ import type { ScreenObservation, UiNode } from "../core/screen.js";
14
+ import type { DeviceInfo, IDevice } from "../ports/device.js";
15
+ export interface DesktopAdapterOptions {
16
+ width?: number;
17
+ height?: number;
18
+ name?: string;
19
+ os?: "desktop-linux" | "desktop-windows" | "desktop-macos";
20
+ }
21
+ export declare class DesktopAdapter implements IDevice {
22
+ readonly actions: Action[];
23
+ private readonly width;
24
+ private readonly height;
25
+ private readonly name;
26
+ private readonly osType;
27
+ private connected;
28
+ constructor(opts?: DesktopAdapterOptions);
29
+ connect(): Promise<void>;
30
+ disconnect(): Promise<void>;
31
+ getInfo(): Promise<DeviceInfo>;
32
+ capture(): Promise<ScreenObservation>;
33
+ getUiTree(): Promise<UiNode[]>;
34
+ apply(action: Action): Promise<void>;
35
+ install(_path: string): Promise<void>;
36
+ shell(command: string): Promise<string>;
37
+ }