@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,60 @@
1
+ /**
2
+ * agent-runtime/skills/sqlite-store — SQLite-backed
3
+ * {@link SkillCacheStore}.
4
+ *
5
+ * Phase 3.1 of the [device-agent reflector upgrade plan](../../../../../../.cursor/plans/device-agent-reflector-skills_d5599350.plan.md).
6
+ *
7
+ * Schema (kept verbatim with the plan):
8
+ * ```sql
9
+ * CREATE TABLE skills (
10
+ * id TEXT PRIMARY KEY,
11
+ * app_package TEXT NOT NULL,
12
+ * task_summary TEXT NOT NULL,
13
+ * task_embedding BLOB,
14
+ * action_sequence_json TEXT NOT NULL,
15
+ * success_count INTEGER NOT NULL DEFAULT 1,
16
+ * fail_count INTEGER NOT NULL DEFAULT 0,
17
+ * last_used_at INTEGER NOT NULL,
18
+ * created_at INTEGER NOT NULL
19
+ * );
20
+ * CREATE INDEX idx_skills_app ON skills(app_package);
21
+ * ```
22
+ *
23
+ * Default DB path: `~/.beeos/device-agent/skills.sqlite`. Containerised
24
+ * deployments mount `/var/lib/beeos/device-agent` and override
25
+ * `SKILL_CACHE_PATH` accordingly.
26
+ *
27
+ * Search is implemented as a full scan over the matching app rows —
28
+ * the cache is intentionally small (<10k rows / device), so a brute
29
+ * cosine pass is cheaper than maintaining an ANN index. If profile
30
+ * data shows that's wrong we can plug in `sqlite-vss` / `pgvector`
31
+ * later behind the same {@link SkillCacheStore} interface.
32
+ */
33
+ import type { Database as DB } from "better-sqlite3";
34
+ import type { NewSkillInput, Skill, SkillCacheStore, SkillMatch } from "./types.js";
35
+ export interface SQLiteSkillCacheStoreOptions {
36
+ /** Override the default DB path. Use ":memory:" for ephemeral tests. */
37
+ path?: string;
38
+ /** Pre-built better-sqlite3 Database (used by tests). */
39
+ db?: DB;
40
+ /** Skip auto-mkdir on the parent dir (when path is :memory:). */
41
+ noMkdir?: boolean;
42
+ }
43
+ export declare function defaultSkillCachePath(): string;
44
+ export declare class SQLiteSkillCacheStore implements SkillCacheStore {
45
+ private readonly db;
46
+ private readonly stmts;
47
+ private closed;
48
+ constructor(opts?: SQLiteSkillCacheStoreOptions);
49
+ insert(input: NewSkillInput): Skill;
50
+ get(id: string): Skill | undefined;
51
+ listByApp(appPackage: string, limit?: number): Skill[];
52
+ listAll(limit?: number): Skill[];
53
+ search(appPackage: string, query: Float32Array, k: number): SkillMatch[];
54
+ recordSuccess(id: string, now?: number): void;
55
+ recordFailure(id: string, now?: number): void;
56
+ delete(id: string): boolean;
57
+ clear(): void;
58
+ close(): void;
59
+ private applyMigrations;
60
+ }
@@ -0,0 +1,234 @@
1
+ /**
2
+ * agent-runtime/skills/sqlite-store — SQLite-backed
3
+ * {@link SkillCacheStore}.
4
+ *
5
+ * Phase 3.1 of the [device-agent reflector upgrade plan](../../../../../../.cursor/plans/device-agent-reflector-skills_d5599350.plan.md).
6
+ *
7
+ * Schema (kept verbatim with the plan):
8
+ * ```sql
9
+ * CREATE TABLE skills (
10
+ * id TEXT PRIMARY KEY,
11
+ * app_package TEXT NOT NULL,
12
+ * task_summary TEXT NOT NULL,
13
+ * task_embedding BLOB,
14
+ * action_sequence_json TEXT NOT NULL,
15
+ * success_count INTEGER NOT NULL DEFAULT 1,
16
+ * fail_count INTEGER NOT NULL DEFAULT 0,
17
+ * last_used_at INTEGER NOT NULL,
18
+ * created_at INTEGER NOT NULL
19
+ * );
20
+ * CREATE INDEX idx_skills_app ON skills(app_package);
21
+ * ```
22
+ *
23
+ * Default DB path: `~/.beeos/device-agent/skills.sqlite`. Containerised
24
+ * deployments mount `/var/lib/beeos/device-agent` and override
25
+ * `SKILL_CACHE_PATH` accordingly.
26
+ *
27
+ * Search is implemented as a full scan over the matching app rows —
28
+ * the cache is intentionally small (<10k rows / device), so a brute
29
+ * cosine pass is cheaper than maintaining an ANN index. If profile
30
+ * data shows that's wrong we can plug in `sqlite-vss` / `pgvector`
31
+ * later behind the same {@link SkillCacheStore} interface.
32
+ */
33
+ import { mkdirSync } from "node:fs";
34
+ import path from "node:path";
35
+ import { homedir } from "node:os";
36
+ import { randomUUID } from "node:crypto";
37
+ import Database from "better-sqlite3";
38
+ import { bufferToEmbedding, cosine, embeddingToBuffer, } from "./embedding.js";
39
+ const SCHEMA_VERSION = 1;
40
+ const SCHEMA_SQL = `
41
+ PRAGMA journal_mode=WAL;
42
+ PRAGMA synchronous=NORMAL;
43
+ PRAGMA foreign_keys=ON;
44
+
45
+ CREATE TABLE IF NOT EXISTS skills (
46
+ id TEXT PRIMARY KEY,
47
+ app_package TEXT NOT NULL,
48
+ task_summary TEXT NOT NULL,
49
+ task_embedding BLOB,
50
+ action_sequence_json TEXT NOT NULL,
51
+ success_count INTEGER NOT NULL DEFAULT 1,
52
+ fail_count INTEGER NOT NULL DEFAULT 0,
53
+ last_used_at INTEGER NOT NULL,
54
+ created_at INTEGER NOT NULL
55
+ );
56
+ CREATE INDEX IF NOT EXISTS idx_skills_app ON skills(app_package);
57
+
58
+ CREATE TABLE IF NOT EXISTS skill_meta (
59
+ key TEXT PRIMARY KEY,
60
+ value TEXT NOT NULL
61
+ );
62
+ `;
63
+ export function defaultSkillCachePath() {
64
+ const env = process.env.SKILL_CACHE_PATH;
65
+ if (env && env.length > 0)
66
+ return env;
67
+ return path.join(homedir(), ".beeos", "device-agent", "skills.sqlite");
68
+ }
69
+ export class SQLiteSkillCacheStore {
70
+ db;
71
+ stmts;
72
+ closed = false;
73
+ constructor(opts = {}) {
74
+ const dbPath = opts.path ?? defaultSkillCachePath();
75
+ if (opts.db) {
76
+ this.db = opts.db;
77
+ }
78
+ else {
79
+ if (!opts.noMkdir && dbPath !== ":memory:") {
80
+ mkdirSync(path.dirname(dbPath), { recursive: true });
81
+ }
82
+ this.db = new Database(dbPath);
83
+ }
84
+ this.db.exec(SCHEMA_SQL);
85
+ this.applyMigrations();
86
+ this.stmts = prepareStatements(this.db);
87
+ }
88
+ insert(input) {
89
+ if (this.closed)
90
+ throw new Error("SQLiteSkillCacheStore: handle closed");
91
+ const now = Date.now();
92
+ const id = randomUUID();
93
+ this.stmts.insert.run({
94
+ id,
95
+ app: input.appPackage,
96
+ summary: input.taskSummary,
97
+ embed: input.taskEmbedding ? embeddingToBuffer(input.taskEmbedding) : null,
98
+ seq: serialiseSequence(input.actionSequence),
99
+ now,
100
+ });
101
+ return {
102
+ id,
103
+ appPackage: input.appPackage,
104
+ taskSummary: input.taskSummary,
105
+ taskEmbedding: input.taskEmbedding ? new Float32Array(input.taskEmbedding) : undefined,
106
+ actionSequence: input.actionSequence,
107
+ successCount: 1,
108
+ failCount: 0,
109
+ lastUsedAt: now,
110
+ createdAt: now,
111
+ };
112
+ }
113
+ get(id) {
114
+ const row = this.stmts.getById.get({ id });
115
+ return row ? rowToSkill(row) : undefined;
116
+ }
117
+ listByApp(appPackage, limit = 50) {
118
+ const rows = this.stmts.listByApp.all({ app: appPackage, limit });
119
+ return rows.map(rowToSkill);
120
+ }
121
+ listAll(limit = 200) {
122
+ const rows = this.stmts.listAll.all({ limit });
123
+ return rows.map(rowToSkill);
124
+ }
125
+ search(appPackage, query, k) {
126
+ const rows = this.stmts.searchByApp.all({ app: appPackage });
127
+ const matches = [];
128
+ for (const row of rows) {
129
+ if (!row.task_embedding)
130
+ continue;
131
+ const v = bufferToEmbedding(row.task_embedding);
132
+ if (v.length !== query.length)
133
+ continue;
134
+ const score = cosine(query, v);
135
+ matches.push({ skill: rowToSkill(row), score });
136
+ }
137
+ matches.sort((a, b) => b.score - a.score);
138
+ return matches.slice(0, Math.max(0, k));
139
+ }
140
+ recordSuccess(id, now = Date.now()) {
141
+ this.stmts.success.run({ id, now });
142
+ }
143
+ recordFailure(id, now = Date.now()) {
144
+ this.stmts.failure.run({ id, now });
145
+ }
146
+ delete(id) {
147
+ const res = this.stmts.delete.run({ id });
148
+ return res.changes > 0;
149
+ }
150
+ clear() {
151
+ this.db.exec("DELETE FROM skills;");
152
+ }
153
+ close() {
154
+ if (this.closed)
155
+ return;
156
+ this.closed = true;
157
+ try {
158
+ this.db.close();
159
+ }
160
+ catch {
161
+ /* swallow — close is best-effort */
162
+ }
163
+ }
164
+ applyMigrations() {
165
+ const row = this.db
166
+ .prepare("SELECT value FROM skill_meta WHERE key = 'schema_version'")
167
+ .get();
168
+ if (!row) {
169
+ this.db
170
+ .prepare("INSERT INTO skill_meta(key, value) VALUES('schema_version', ?)")
171
+ .run(String(SCHEMA_VERSION));
172
+ return;
173
+ }
174
+ // Future migrations would diff `row.value` against SCHEMA_VERSION here.
175
+ }
176
+ }
177
+ function prepareStatements(db) {
178
+ return {
179
+ insert: db.prepare(`INSERT INTO skills (
180
+ id, app_package, task_summary, task_embedding,
181
+ action_sequence_json, success_count, fail_count, last_used_at, created_at
182
+ ) VALUES (
183
+ @id, @app, @summary, @embed,
184
+ @seq, 1, 0, @now, @now
185
+ );`),
186
+ getById: db.prepare(`SELECT * FROM skills WHERE id = @id`),
187
+ listByApp: db.prepare(`SELECT * FROM skills
188
+ WHERE app_package = @app
189
+ ORDER BY last_used_at DESC
190
+ LIMIT @limit`),
191
+ listAll: db.prepare(`SELECT * FROM skills
192
+ ORDER BY last_used_at DESC
193
+ LIMIT @limit`),
194
+ searchByApp: db.prepare(`SELECT * FROM skills WHERE app_package = @app`),
195
+ success: db.prepare(`UPDATE skills SET success_count = success_count + 1,
196
+ last_used_at = @now
197
+ WHERE id = @id`),
198
+ failure: db.prepare(`UPDATE skills SET fail_count = fail_count + 1,
199
+ last_used_at = @now
200
+ WHERE id = @id`),
201
+ delete: db.prepare(`DELETE FROM skills WHERE id = @id`),
202
+ };
203
+ }
204
+ function serialiseSequence(seq) {
205
+ return JSON.stringify(seq);
206
+ }
207
+ function deserialiseSequence(raw) {
208
+ if (!raw)
209
+ return [];
210
+ try {
211
+ const v = JSON.parse(raw);
212
+ if (Array.isArray(v)) {
213
+ return v;
214
+ }
215
+ return [];
216
+ }
217
+ catch {
218
+ return [];
219
+ }
220
+ }
221
+ function rowToSkill(row) {
222
+ return {
223
+ id: row.id,
224
+ appPackage: row.app_package,
225
+ taskSummary: row.task_summary,
226
+ taskEmbedding: row.task_embedding ? bufferToEmbedding(row.task_embedding) : undefined,
227
+ actionSequence: deserialiseSequence(row.action_sequence_json),
228
+ successCount: row.success_count,
229
+ failCount: row.fail_count,
230
+ lastUsedAt: row.last_used_at,
231
+ createdAt: row.created_at,
232
+ };
233
+ }
234
+ //# sourceMappingURL=sqlite-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../../src/agent-runtime/skills/sqlite-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * agent-runtime/skills/types — Skill memory shared types.
3
+ *
4
+ * Phase 3.1 of the [device-agent reflector upgrade plan](../../../../../../.cursor/plans/device-agent-reflector-skills_d5599350.plan.md).
5
+ *
6
+ * The skill cache stores normalised action sequences keyed by (app, task
7
+ * summary). At task-entry time the {@link SkillMatcher} consults the
8
+ * cache; at task-exit time the {@link SkillEvolver} updates success /
9
+ * failure counters. Both layers depend only on this minimal type
10
+ * surface, which is also exercised by the unit tests via the in-memory
11
+ * implementation.
12
+ */
13
+ import type { Action } from "@beeos-ai/device-common";
14
+ /**
15
+ * Normalised action sequence — the minimum the executor needs to
16
+ * replay a successful task. Coordinates and rationales are kept; ad-hoc
17
+ * `screenshot` / `wait` steps are stripped by the evolver before
18
+ * persistence so the replay budget stays small.
19
+ */
20
+ export type SkillActionSequence = readonly Action[];
21
+ /**
22
+ * One persisted skill row.
23
+ *
24
+ * All numeric fields are stored as integers (epoch millis for
25
+ * timestamps). `taskEmbedding` is an optional dense vector — the
26
+ * matcher computes cosine similarity against the live task embedding.
27
+ * When the embedding model is unavailable we fall back to the
28
+ * deterministic hash bag-of-words producer in
29
+ * [embedding.ts](./embedding.ts), which is good enough for "same
30
+ * grocery-shopping task" recall.
31
+ */
32
+ export interface Skill {
33
+ id: string;
34
+ appPackage: string;
35
+ taskSummary: string;
36
+ taskEmbedding?: Float32Array;
37
+ actionSequence: SkillActionSequence;
38
+ successCount: number;
39
+ failCount: number;
40
+ lastUsedAt: number;
41
+ createdAt: number;
42
+ }
43
+ /** Result of a similarity search. */
44
+ export interface SkillMatch {
45
+ skill: Skill;
46
+ /** cosine similarity in `[0, 1]`. */
47
+ score: number;
48
+ }
49
+ /** Read-only skill view returned by the CLI. Hides the raw embedding blob. */
50
+ export type SkillSummary = Omit<Skill, "taskEmbedding"> & {
51
+ successRate: number;
52
+ hasEmbedding: boolean;
53
+ };
54
+ export interface NewSkillInput {
55
+ appPackage: string;
56
+ taskSummary: string;
57
+ taskEmbedding?: Float32Array;
58
+ actionSequence: SkillActionSequence;
59
+ }
60
+ /**
61
+ * Storage abstraction for the skill cache. Implementations:
62
+ * - {@link FileSystemSkillCacheStore} — production directory layout at
63
+ * `~/.beeos/device-agent/skills/<appPackage>/<id>.json` with
64
+ * append-only `<id>.deltas.jsonl` counter logs (POSIX-atomic, lock-free).
65
+ * - {@link InMemorySkillCacheStore} — used by tests and any caller
66
+ * that wants ephemeral state.
67
+ *
68
+ * Methods are synchronous because the filesystem backend uses
69
+ * `fs.appendFileSync` / atomic tmp+rename — both are synchronous and
70
+ * we deliberately avoid leaking a Promise indirection through the
71
+ * loop's hot path. Concurrency across processes is handled by
72
+ * O_APPEND for ≤PIPE_BUF writes; no in-process locking is required.
73
+ */
74
+ export interface SkillCacheStore {
75
+ /** Persist a brand-new skill row and return the id. */
76
+ insert(input: NewSkillInput): Skill;
77
+ /** Fetch a single skill by id (or undefined). */
78
+ get(id: string): Skill | undefined;
79
+ /** List all skills for one app package, newest first. */
80
+ listByApp(appPackage: string, limit?: number): Skill[];
81
+ /** List every skill (debug / CLI). */
82
+ listAll(limit?: number): Skill[];
83
+ /**
84
+ * Top-K cosine search restricted to the given app package. Skills
85
+ * without an embedding are skipped (caller may still call `listByApp`
86
+ * to consider them).
87
+ */
88
+ search(appPackage: string, query: Float32Array, k: number): SkillMatch[];
89
+ /** Increment the success counter and bump `last_used_at`. */
90
+ recordSuccess(id: string, now?: number): void;
91
+ /** Increment the fail counter and bump `last_used_at`. */
92
+ recordFailure(id: string, now?: number): void;
93
+ /** Delete a single skill (CLI `forget`). */
94
+ delete(id: string): boolean;
95
+ /** Delete all skills (test reset / CLI `forget --all`). */
96
+ clear(): void;
97
+ /** Free underlying handles. Safe to call multiple times. */
98
+ close(): void;
99
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * agent-runtime/skills/types — Skill memory shared types.
3
+ *
4
+ * Phase 3.1 of the [device-agent reflector upgrade plan](../../../../../../.cursor/plans/device-agent-reflector-skills_d5599350.plan.md).
5
+ *
6
+ * The skill cache stores normalised action sequences keyed by (app, task
7
+ * summary). At task-entry time the {@link SkillMatcher} consults the
8
+ * cache; at task-exit time the {@link SkillEvolver} updates success /
9
+ * failure counters. Both layers depend only on this minimal type
10
+ * surface, which is also exercised by the unit tests via the in-memory
11
+ * implementation.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent-runtime/skills/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @deprecated since v0.3.0 — use `AgentRunner` from `agent-runtime/agent-runner.ts`
3
+ * (or the `AgentRunnerCore` adapter at `adapters/agentcore-runner.ts` for
4
+ * embedders that need an `IAgentCore`). This shim only exists so that
5
+ * `InnerLoopVlm`, the legacy `api.ts` HTTP debug server, and external
6
+ * test embedders keep working without changes — new call sites must NOT
7
+ * reach for this class.
8
+ *
9
+ * Migration sketch:
10
+ *
11
+ * ```typescript
12
+ * // Before (v0.2.x)
13
+ * const a = new Agent(modelClient, device);
14
+ * const r = await a.run(task, { onStep, signal });
15
+ *
16
+ * // After (v0.3.0+)
17
+ * const adapter = new OpenAIAdapter({ client: modelClient, lang: "cn" });
18
+ * const mcp = new InProcMcpClient(device);
19
+ * const runner = new AgentRunner({ task, env: "mobile", mcp, adapter });
20
+ * const r = await runner.run();
21
+ * ```
22
+ *
23
+ * Legacy `Agent` — backwards-compatible shim around the new `AgentLoop`.
24
+ *
25
+ * Pre-monorepo this class hosted a hand-rolled screenshot → reason → act
26
+ * loop. The loop has now moved into `agent-runtime/core.AgentLoop`, which is
27
+ * Plan-Act-Reflect-aware, drives any `IMcpRuntime`, and wires every model
28
+ * through an `IModelAdapter`. This file keeps the original constructor
29
+ * signature, public methods, hook payload shapes, and termination strings so
30
+ * that `InnerLoopVlm`, `api.ts`, the `agent-hooks` test suite, and any
31
+ * external embedder continue to work without changes.
32
+ *
33
+ * Internally a fresh `AgentLoop` is constructed for each `run()` call. The
34
+ * device handed to the constructor is wrapped in `InProcMcpClient` (no HTTP
35
+ * hop), and the `ModelClient` is wrapped in `OpenAIAdapter` (the adapter
36
+ * that already translates legacy `ParsedAction` outputs onto the new unified
37
+ * `Action` schema, preserving coordinate-system metadata for AgentLoop's
38
+ * scaling layer).
39
+ *
40
+ * The shim is intentionally thin — anything new (waitForUser, reflection
41
+ * hooks, custom adapters, alternate envs) should go straight to `AgentLoop`
42
+ * (or `AgentRunner` for the Hybrid Plan-Act path).
43
+ */
44
+ import type { Device } from "./device/base.js";
45
+ import type { ModelClient } from "./model/base.js";
46
+ export interface AgentConfig {
47
+ maxSteps?: number;
48
+ lang?: "cn" | "en";
49
+ verbose?: boolean;
50
+ }
51
+ /**
52
+ * Per-step record surfaced via `Agent.run`'s `onStep` hook. Kept stable so
53
+ * callers (notably `InnerLoopVlm`) can map directly onto the public
54
+ * `VlmStep` shape without re-deriving fields.
55
+ */
56
+ export interface AgentStepRecord {
57
+ /** 1-based step index, matches `Agent.stepCount`. */
58
+ index: number;
59
+ /** Model thinking text for this step. */
60
+ thinking: string;
61
+ /** Parsed action (tool call) the model decided on. */
62
+ action: {
63
+ actionType: string;
64
+ params: Record<string, unknown>;
65
+ } | null;
66
+ /** True iff this step was the terminating step. */
67
+ finished: boolean;
68
+ /** Final user-facing message when `finished` is true. */
69
+ message: string | null;
70
+ }
71
+ /** Optional progress callbacks for `Agent.run`. */
72
+ export interface AgentRunHooks {
73
+ /** Streaming token delta from the underlying model. */
74
+ onText?: (delta: string) => void | Promise<void>;
75
+ /** Fired exactly once per step after the action has been parsed. */
76
+ onStep?: (step: AgentStepRecord) => void | Promise<void>;
77
+ }
78
+ export interface AgentRunOptions extends AgentRunHooks {
79
+ signal?: AbortSignal;
80
+ /**
81
+ * Per-call override of `AgentConfig.maxSteps`. When omitted the value
82
+ * passed to the constructor is used.
83
+ */
84
+ maxSteps?: number;
85
+ }
86
+ export interface AgentRunResult {
87
+ /** Final user-facing message, identical to the legacy `string` return. */
88
+ finalText: string;
89
+ /** Number of `executeStep` invocations (1-based count). */
90
+ steps: number;
91
+ /** True iff the run terminated due to abort. */
92
+ cancelled: boolean;
93
+ }
94
+ /** @deprecated since v0.3.0 — use `AgentRunner` instead. */
95
+ export declare class Agent {
96
+ private readonly modelClient;
97
+ private readonly cfg;
98
+ private readonly mcp;
99
+ private readonly adapter;
100
+ constructor(modelClient: ModelClient, device: Device, config?: AgentConfig);
101
+ run(task: string, opts?: AgentRunOptions): Promise<AgentRunResult>;
102
+ /**
103
+ * Legacy hook — clears any rolling adapter context so the next `run()`
104
+ * starts fresh. The new `AgentLoop` already isolates state per run, so
105
+ * this only matters if callers reach into the adapter directly.
106
+ */
107
+ reset(): void;
108
+ /** Internal — kept for backwards compatibility with embedders that peek. */
109
+ get model(): ModelClient;
110
+ }