@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,350 @@
1
+ /**
2
+ * Application use case — SessionManager.
3
+ *
4
+ * Owns ACP session lifecycle (new/load/list/rename/delete/clear) and the
5
+ * dispatch of `session/prompt` to the underlying `AgentHost`. Streaming
6
+ * `session/update` envelopes are produced by translating `AgentEvent`s
7
+ * received from the host bus.
8
+ *
9
+ * SessionManager itself is protocol-agnostic w.r.t. the agent core — it
10
+ * speaks `AgentHost` only. The translation of host events into ACP
11
+ * envelopes lives here so swapping `IAgentCore` (single-layer / pi
12
+ * orchestrator / mock) doesn't change ACP semantics.
13
+ *
14
+ * Surface mirrors the Python `SessionHandler` so ACP handlers remain
15
+ * thin pass-throughs.
16
+ */
17
+ import { randomUUID } from "node:crypto";
18
+ import { newSession } from "../core/session.js";
19
+ import { MessageStore } from "./message-store.js";
20
+ export class SessionManager {
21
+ host;
22
+ store;
23
+ notifier;
24
+ onSetModel;
25
+ maxSessions;
26
+ sessionTtlMs;
27
+ sessions = new Map();
28
+ /** taskId → sessionId for routing host events to the right ACP session. */
29
+ taskToSession = new Map();
30
+ activeSessionId = null;
31
+ currentTask = null;
32
+ unsubscribe = null;
33
+ constructor(opts) {
34
+ this.host = opts.host;
35
+ this.store = opts.messageStore ?? new MessageStore();
36
+ this.notifier = opts.notifier;
37
+ this.onSetModel = opts.onSetModel;
38
+ this.maxSessions = opts.maxSessions ?? 50;
39
+ this.sessionTtlMs = opts.sessionTtlMs ?? 60 * 60 * 1000;
40
+ this.unsubscribe = this.host.on((ev) => this.handleHostEvent(ev));
41
+ }
42
+ /** Detach from the host bus (used when shutting down the ACP plugin). */
43
+ detach() {
44
+ if (this.unsubscribe) {
45
+ this.unsubscribe();
46
+ this.unsubscribe = null;
47
+ }
48
+ }
49
+ // ── ACP semantics — name mirrors Python SessionHandler ───────────────────
50
+ newSession() {
51
+ this.evictExpired();
52
+ const id = randomUUID();
53
+ this.sessions.set(id, newSession(id));
54
+ this.activeSessionId = id;
55
+ this.store.upsertSession(id);
56
+ return { sessionId: id };
57
+ }
58
+ loadSession(sessionId) {
59
+ let id = sessionId;
60
+ const known = this.sessions.has(id) || this.store.sessionExists(id);
61
+ if (!known)
62
+ id = randomUUID();
63
+ if (!this.sessions.has(id))
64
+ this.sessions.set(id, newSession(id));
65
+ const s = this.sessions.get(id);
66
+ s.lastActive = Date.now();
67
+ this.activeSessionId = id;
68
+ this.store.upsertSession(id);
69
+ return { sessionId: id, history: this.store.getMessagesAsDicts(id, 50) };
70
+ }
71
+ listSessions() {
72
+ this.evictExpired();
73
+ return { sessions: this.store.listSessions(50) };
74
+ }
75
+ renameSession(sessionId, title) {
76
+ const s = this.sessions.get(sessionId);
77
+ if (s) {
78
+ s.title = title || s.title;
79
+ s.lastActive = Date.now();
80
+ }
81
+ if (title)
82
+ this.store.renameSession(sessionId, title);
83
+ return { sessionId, title };
84
+ }
85
+ deleteSession(sessionId) {
86
+ const had = this.sessions.has(sessionId);
87
+ this.sessions.delete(sessionId);
88
+ if (this.activeSessionId === sessionId)
89
+ this.activeSessionId = null;
90
+ this.store.deleteSession(sessionId);
91
+ return { deleted: had };
92
+ }
93
+ clearSession(sessionId) {
94
+ const s = this.sessions.get(sessionId);
95
+ if (s) {
96
+ s.history = [];
97
+ s.lastActive = Date.now();
98
+ }
99
+ this.store.clearSession(sessionId);
100
+ return { cleared: !!s };
101
+ }
102
+ setMode(sessionId, mode) {
103
+ return { sessionId, mode };
104
+ }
105
+ async setModel(sessionId, model, provider = "") {
106
+ if (!model)
107
+ throw new Error("model is required");
108
+ if (this.onSetModel)
109
+ await this.onSetModel(provider, model);
110
+ return { sessionId, provider, model };
111
+ }
112
+ /**
113
+ * Run a prompt to completion and return the ACP `stopReason`.
114
+ *
115
+ * Streams `session/update` notifications during execution (translated
116
+ * from `AgentHost` events).
117
+ */
118
+ async prompt(rawPrompt, sessionIdHint) {
119
+ const prompt = normalizePrompt(rawPrompt);
120
+ if (!prompt)
121
+ throw new Error("prompt is required");
122
+ const session = this.resolveSession(sessionIdHint);
123
+ session.lastActive = Date.now();
124
+ session.history.push({ role: "user", content: prompt, createdAt: session.lastActive });
125
+ this.store.addMessage(session.id, "user", prompt, "text");
126
+ this.activeSessionId = session.id;
127
+ this.notify(session.id, { sessionUpdate: "agent_status", status: "running" });
128
+ const submitted = this.host.submitTask(prompt, { correlationTag: session.id });
129
+ this.taskToSession.set(submitted.taskId, session.id);
130
+ this.currentTask = submitted;
131
+ session.currentTaskId = submitted.taskId;
132
+ let result;
133
+ try {
134
+ result = await submitted.done;
135
+ }
136
+ finally {
137
+ this.currentTask = null;
138
+ session.currentTaskId = null;
139
+ this.taskToSession.delete(submitted.taskId);
140
+ this.notify(session.id, { sessionUpdate: "agent_status", status: "idle" });
141
+ }
142
+ return { stopReason: result.cancelled ? "cancelled" : "end_turn" };
143
+ }
144
+ /** Cancel the in-flight task for the active session, if any. */
145
+ async cancel() {
146
+ if (!this.currentTask)
147
+ return false;
148
+ return this.currentTask.cancel();
149
+ }
150
+ // ── Internal ──────────────────────────────────────────────────────────────
151
+ /**
152
+ * Translate host `AgentEvent`s into ACP `session/update` envelopes.
153
+ *
154
+ * Handles five legitimate ACP-emitting sources plus structural events:
155
+ * - `task:text` — streamed user-visible reply (agent_message_chunk)
156
+ * - `task:reasoning` — streaming "thinking" delta (agent_thought_chunk):
157
+ * planner plan/replan descriptions and per-step
158
+ * VLM rationale.
159
+ * - `task:tool` — start / end pairs (tool_call / tool_call_update)
160
+ * - `task:notice` — out-of-band protocol notice. level=warn
161
+ * (transient retry hints) is dropped — noise
162
+ * the user can't act on. level=error (terminal
163
+ * failure) becomes a `system_message_chunk`
164
+ * with `metadata.kind = "agent_notice"`; the
165
+ * web client merges it into the matching
166
+ * assistant bubble's footer. NOT persisted.
167
+ * - `task:step` — structural step record (no ACP emission, kept
168
+ * for HTTP debug / future plugins).
169
+ *
170
+ * Every emitted envelope carries `_turnId` (groups all chunks of a
171
+ * single user prompt) and `messageId` (the per-task authoritative id
172
+ * shared by every chunk / thought / tool / notice in this turn). The
173
+ * web `chat-store` sidecar resolver pins thoughts and tool calls to
174
+ * the assistant bubble bearing the matching `_messageId`.
175
+ *
176
+ * Events for tasks not owned by this SessionManager are ignored —
177
+ * other plugins (HTTP debug, custom) may submit tasks through the
178
+ * same host bus.
179
+ */
180
+ handleHostEvent(ev) {
181
+ const sessionId = this.taskToSession.get(ev.taskId);
182
+ if (!sessionId)
183
+ return;
184
+ if (ev.type === "task:text") {
185
+ if (!ev.text)
186
+ return;
187
+ this.notify(sessionId, {
188
+ sessionUpdate: "agent_message_chunk",
189
+ content: { type: "text", text: ev.text },
190
+ _turnId: ev.turnId,
191
+ messageId: ev.messageId,
192
+ });
193
+ this.store.addMessage(sessionId, "assistant", ev.text, "text");
194
+ return;
195
+ }
196
+ if (ev.type === "task:reasoning") {
197
+ // Reasoning / thinking deltas (planner plan descriptions + per-step
198
+ // VLM rationale) flow through the dedicated `agent_thought_chunk`
199
+ // ACP channel so the web UI can render them in the reasoning side
200
+ // panel without polluting the main conversation. We intentionally
201
+ // do NOT persist reasoning text into MessageStore — it would bloat
202
+ // the LLM context window on resume and is purely a presentation
203
+ // signal.
204
+ if (!ev.text)
205
+ return;
206
+ this.notify(sessionId, {
207
+ sessionUpdate: "agent_thought_chunk",
208
+ content: { type: "text", text: ev.text },
209
+ _turnId: ev.turnId,
210
+ messageId: ev.messageId,
211
+ });
212
+ return;
213
+ }
214
+ if (ev.type === "task:tool") {
215
+ const t = ev.tool;
216
+ if (t.status === "start") {
217
+ this.notify(sessionId, {
218
+ sessionUpdate: "tool_call",
219
+ toolCallId: t.id,
220
+ title: t.name,
221
+ arguments: JSON.stringify(t.args),
222
+ status: "in_progress",
223
+ _turnId: ev.turnId,
224
+ messageId: ev.messageId,
225
+ });
226
+ this.store.addMessage(sessionId, "assistant", t.name, "tool_call", {
227
+ toolCallId: t.id,
228
+ parameters: t.args,
229
+ });
230
+ }
231
+ else if (t.status === "end") {
232
+ const status = t.isError ? "failed" : "completed";
233
+ const output = typeof t.result === "string" ? t.result : JSON.stringify(t.result ?? "");
234
+ this.notify(sessionId, {
235
+ sessionUpdate: "tool_call_update",
236
+ toolCallId: t.id,
237
+ status,
238
+ output: output || `${t.name} ${status}`,
239
+ _turnId: ev.turnId,
240
+ messageId: ev.messageId,
241
+ });
242
+ this.store.addMessage(sessionId, "assistant", output || `${t.name} ${status}`, "tool_result", { toolCallId: t.id, status });
243
+ }
244
+ return;
245
+ }
246
+ if (ev.type === "task:notice") {
247
+ // Ephemeral protocol notice. Two flavours:
248
+ // - level=warn : transient retry hint ("Model temporarily
249
+ // unavailable, retrying…"). User can't act on it; if the
250
+ // retry succeeds the message is meaningless, and if it
251
+ // ultimately fails the level=error notice will fire anyway.
252
+ // We DROP it on the floor for the UI — agent-host already
253
+ // logged it via pino, and HTTP debug listeners receive the
254
+ // raw `task:notice` event independent of this ACP path.
255
+ // - level=error: terminal failure ("Task failed: …"). We
256
+ // translate to `system_message_chunk` carrying
257
+ // `metadata.kind = "agent_notice"`. The web client recognises
258
+ // this kind and merges the notice into the matching
259
+ // assistant bubble's `metadata.notices` (correlated by
260
+ // `_turnId`), so the user sees a small inline footer line
261
+ // instead of a centered gray capsule. Older clients that
262
+ // don't know `agent_notice` still render it as a plain
263
+ // system message — the kind tag is purely additive.
264
+ //
265
+ // Intentionally NOT written to MessageStore — replaying retry
266
+ // hints / terminal-failure capsules on session resume would
267
+ // bloat the LLM context with stale degraded-state signals. We
268
+ // forward `_turnId` for ordering / merge correlation but DROP
269
+ // `messageId` because chat-store's sidecar resolver would
270
+ // otherwise still try to merge a system row with assistant
271
+ // rows sharing that id.
272
+ if (ev.level === "warn")
273
+ return;
274
+ if (!ev.text)
275
+ return;
276
+ this.notify(sessionId, {
277
+ sessionUpdate: "system_message_chunk",
278
+ content: { type: "text", text: ev.text },
279
+ _turnId: ev.turnId,
280
+ metadata: { kind: "agent_notice", level: ev.level },
281
+ });
282
+ return;
283
+ }
284
+ if (ev.type === "task:step") {
285
+ // `task:step` is a structural event (`{ stepIndex, action, finished,
286
+ // message }`) consumed by HTTP debug / future plugins. Per-step
287
+ // rationale is now delivered via `task:reasoning` →
288
+ // `agent_thought_chunk` (see above), so we no longer mis-emit
289
+ // `step.thinking` as `agent_message_chunk` here — that double-fire
290
+ // was leaking VLM rationale into the user-visible reply.
291
+ return;
292
+ }
293
+ if (ev.type === "task:end") {
294
+ const status = ev.error ? "failed" : ev.result.cancelled ? "cancelled" : "completed";
295
+ this.store.addMessage(sessionId, "system", `Task ${status}`, "status", {
296
+ taskId: ev.taskId,
297
+ status,
298
+ });
299
+ }
300
+ }
301
+ resolveSession(idHint) {
302
+ if (idHint && this.sessions.has(idHint))
303
+ return this.sessions.get(idHint);
304
+ if (idHint && this.store.sessionExists(idHint)) {
305
+ this.sessions.set(idHint, newSession(idHint));
306
+ return this.sessions.get(idHint);
307
+ }
308
+ if (this.activeSessionId && this.sessions.has(this.activeSessionId)) {
309
+ return this.sessions.get(this.activeSessionId);
310
+ }
311
+ const { sessionId } = this.newSession();
312
+ return this.sessions.get(sessionId);
313
+ }
314
+ notify(sessionId, update) {
315
+ if (!this.notifier)
316
+ return;
317
+ this.notifier.send(sessionId, update);
318
+ }
319
+ evictExpired() {
320
+ const now = Date.now();
321
+ for (const [id, s] of this.sessions) {
322
+ if (now - s.lastActive > this.sessionTtlMs) {
323
+ this.sessions.delete(id);
324
+ this.store.deleteSession(id);
325
+ if (this.activeSessionId === id)
326
+ this.activeSessionId = null;
327
+ }
328
+ }
329
+ if (this.sessions.size > this.maxSessions) {
330
+ const sorted = Array.from(this.sessions.entries()).sort((a, b) => a[1].lastActive - b[1].lastActive);
331
+ for (let i = 0; i < sorted.length - this.maxSessions; i++) {
332
+ const [id] = sorted[i];
333
+ this.sessions.delete(id);
334
+ this.store.deleteSession(id);
335
+ if (this.activeSessionId === id)
336
+ this.activeSessionId = null;
337
+ }
338
+ }
339
+ }
340
+ }
341
+ function normalizePrompt(raw) {
342
+ if (typeof raw === "string")
343
+ return raw.trim();
344
+ return raw
345
+ .filter((b) => b && b.type === "text" && typeof b.text === "string")
346
+ .map((b) => b.text)
347
+ .join("\n")
348
+ .trim();
349
+ }
350
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/app/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Bootstrap — wire up the agent core, host, and plugins.
3
+ *
4
+ * High-level flow:
5
+ *
6
+ * 1. Load identity (Ed25519 keypair on disk).
7
+ * 2. Discover Bridge URL via Agent Gateway (when not standalone).
8
+ * 3. Build the device adapter (`IDevice`) and a `DeviceManager`.
9
+ * 4. Build the agent core (v0.3.0 default = AgentRunner Hybrid Plan-Act):
10
+ * - default → `AgentRunnerCore`
11
+ * (one shared `AgentRunner` driving the new agent-runtime
12
+ * `AgentLoop` + optional `LLMPlanner` via OpenAI-compat client.
13
+ * Wired to the AutoGLM-Phone family via the `OpenAIAdapter`
14
+ * adapter registry pattern.)
15
+ * - `legacyInner: true` → `InnerLoopAgent` over `InnerLoopVlm`
16
+ * (single-layer fallback; opt-in)
17
+ * - `pi: true` → `PiOrchestratorAgent`
18
+ * (outer text LLM + inner mobile_use VLM; opt-in)
19
+ * 5. Construct `AgentHostImpl` around the agent.
20
+ * 6. Register plugins in this order: agent-sync, http-debug, acp.
21
+ * The acp plugin is started LAST so the bridge connection only opens
22
+ * after agent-sync has registered the device-agent in the platform's
23
+ * Agents directory.
24
+ * 7. Run `init()` on every plugin sequentially, then `start()`.
25
+ * 8. Return a `stop()` function that tears down plugins in reverse order.
26
+ *
27
+ * Custom callers (tests, EdgeAgent embeds, alternate CLIs) can call
28
+ * `bootstrap()` directly with a custom plugin list to compose the agent
29
+ * however they want — every behavior beyond the core (HTTP, ACP, sync,
30
+ * any future skill plugin) is opt-in.
31
+ */
32
+ import { type Logger } from "./logger/index.js";
33
+ import { type CliFlags } from "./config/loader.js";
34
+ import type { Config } from "./config/schema.js";
35
+ import { type AgentDeclarationInput } from "./adapters/agent-gateway-client.js";
36
+ import { DeviceManager } from "./app/device-manager.js";
37
+ import { McpClient } from "./mcp-client/index.js";
38
+ import type { IAgentCore } from "./ports/agent-core.js";
39
+ import type { IDevice } from "./ports/device.js";
40
+ import type { IDeviceIdentity } from "./ports/identity.js";
41
+ import type { AgentHost } from "./ports/agent-host.js";
42
+ import type { AgentPlugin } from "./ports/plugin.js";
43
+ export interface BootstrapOptions {
44
+ /** Pre-parsed CLI flags. Defaults to `{}` (env + config file only). */
45
+ flags?: CliFlags;
46
+ /** Override the resolved config (after merging flags / env / file). */
47
+ configOverride?: Partial<Config>;
48
+ /** Inject a custom logger. */
49
+ logger?: Logger;
50
+ /** Inject a custom agent core (e.g. for tests / experimental adapters). */
51
+ agentOverride?: IAgentCore;
52
+ /** Inject a custom device. Useful for tests. */
53
+ deviceOverride?: IDevice;
54
+ /**
55
+ * Replace the default plugin list. When omitted, bootstrap registers
56
+ * agent-sync + http-debug + acp using the loaded config. Pass `[]` to
57
+ * run a barebones agent (host + core only).
58
+ */
59
+ pluginsOverride?: AgentPlugin[];
60
+ /** Version string surfaced in agent-sync declarations. */
61
+ version?: string;
62
+ /**
63
+ * Custom AgentDeclaration builder. Defaults to a device-agent default
64
+ * matching the legacy `main.ts` declaration.
65
+ */
66
+ buildDeclarations?: (info: {
67
+ name?: string;
68
+ type?: string;
69
+ } | null) => AgentDeclarationInput[];
70
+ }
71
+ export interface BootstrappedAgent {
72
+ config: Config;
73
+ host: AgentHost;
74
+ devices: DeviceManager;
75
+ identity: IDeviceIdentity;
76
+ plugins: AgentPlugin[];
77
+ /**
78
+ * Optional handle to the sibling device-mcp-server, present when
79
+ * `config.mcpUrl` was set and the readiness probe succeeded. Subsequent
80
+ * tasks (acp_plugin / pi_orchestrator) wire this through to the runtime.
81
+ */
82
+ mcp?: McpClient;
83
+ /**
84
+ * Tear-down function — stops every plugin in REVERSE registration
85
+ * order, then disconnects all devices. Safe to call multiple times.
86
+ */
87
+ stop: () => Promise<void>;
88
+ }
89
+ export declare function bootstrap(opts?: BootstrapOptions): Promise<BootstrappedAgent>;
90
+ export declare class BootstrapError extends Error {
91
+ readonly exitCode: number;
92
+ readonly details?: Record<string, unknown> | undefined;
93
+ constructor(message: string, exitCode: number, details?: Record<string, unknown> | undefined);
94
+ }