@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,475 @@
1
+ /**
2
+ * Fleet domain — pure FSM reducer.
3
+ *
4
+ * Single entry point: `step(record, event, ctx) => { record', effects }`.
5
+ *
6
+ * Effects are *intent descriptors* the supervisor (`fleet/supervisor.ts`)
7
+ * translates into actual side effects (process spawn, timer, log line). This
8
+ * keeps the FSM trivially testable — the M1 unit suite covers the entire
9
+ * lifecycle without any IO.
10
+ *
11
+ * Lifecycle (see also v4 plan):
12
+ * adb_offline ─► (adb_online + bound) ─► spawning ─► healthy
13
+ * (adb_online + unbound) ─► awaiting_bind
14
+ * (adb_online + unauthorized) ─► adb_unauthorized
15
+ * healthy ─► (adb_offline) ─► grace
16
+ * grace ─► (adb_online same serial) ─► healthy (USB jitter, transparent)
17
+ * (grace_expired) ─► degraded (kill mcp only, daemon survives)
18
+ * degraded ─► (adb_online same serial) ─► spawning (respawn mcp, daemon self-heals)
19
+ * (keep_expired) ─► gone (kill daemon, session paused)
20
+ * gone ─► (adb_online) ─► spawning
21
+ * healthy ─► (mcp_exited unexpected) ─► spawning (mcp_only_restart)
22
+ * (daemon_exited unexpected) ─► spawning (daemon_only_restart)
23
+ * (both crashed back-to-back) ─► crashed → spawning
24
+ *
25
+ * The reducer never reads outside its inputs (`record`, `event`, `ctx`) — pure.
26
+ */
27
+ function transition(record, next, ctx) {
28
+ if (record.state === next)
29
+ return record;
30
+ return { ...record, state: next, enteredAt: ctx.now };
31
+ }
32
+ function withRestartCount(record, count) {
33
+ if (record.restartCount === count)
34
+ return record;
35
+ return { ...record, restartCount: count };
36
+ }
37
+ const MAX_RESTARTS_BEFORE_BACKOFF = 3;
38
+ // ── Per-state handlers ─────────────────────────────────────────────────────
39
+ function fromAdbOffline(record, event, ctx) {
40
+ switch (event.kind) {
41
+ case "adb_online": {
42
+ if (!record.binding || !record.binding.instanceId) {
43
+ return {
44
+ record: transition(record, "awaiting_bind", ctx),
45
+ effects: [
46
+ {
47
+ kind: "log",
48
+ level: "info",
49
+ serial: record.serial,
50
+ msg: "adb online but unbound — awaiting `beeos device attach`",
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ return {
56
+ record: withRestartCount(transition(record, "spawning", ctx), 0),
57
+ effects: [
58
+ { kind: "allocate_port", serial: record.serial },
59
+ { kind: "spawn_mcp", serial: record.serial },
60
+ { kind: "spawn_daemon", serial: record.serial },
61
+ {
62
+ kind: "log",
63
+ level: "info",
64
+ serial: record.serial,
65
+ msg: "adb online — spawning mcp + daemon",
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ case "adb_unauthorized":
71
+ return {
72
+ record: transition(record, "adb_unauthorized", ctx),
73
+ effects: [
74
+ {
75
+ kind: "log",
76
+ level: "warn",
77
+ serial: record.serial,
78
+ msg: "adb device is unauthorized — accept the prompt on the phone",
79
+ },
80
+ ],
81
+ };
82
+ case "binding_added":
83
+ case "binding_changed":
84
+ case "binding_removed":
85
+ // Binding mutations while ADB is offline only update record.binding;
86
+ // no transition. The supervisor refreshes `record.binding` before
87
+ // calling step(), so nothing to do here.
88
+ return { record, effects: [] };
89
+ default:
90
+ return { record, effects: [] };
91
+ }
92
+ }
93
+ function fromAdbUnauthorized(record, event, ctx) {
94
+ switch (event.kind) {
95
+ case "adb_online":
96
+ // User authorized the phone — re-evaluate as if adb just came online.
97
+ return fromAdbOffline(transition(record, "adb_offline", ctx), event, ctx);
98
+ case "adb_offline":
99
+ return { record: transition(record, "adb_offline", ctx), effects: [] };
100
+ default:
101
+ return { record, effects: [] };
102
+ }
103
+ }
104
+ function fromAwaitingBind(record, event, ctx) {
105
+ switch (event.kind) {
106
+ case "adb_offline":
107
+ return { record: transition(record, "adb_offline", ctx), effects: [] };
108
+ case "adb_unauthorized":
109
+ return { record: transition(record, "adb_unauthorized", ctx), effects: [] };
110
+ case "binding_added":
111
+ case "binding_changed":
112
+ if (record.binding && record.binding.instanceId) {
113
+ return {
114
+ record: withRestartCount(transition(record, "spawning", ctx), 0),
115
+ effects: [
116
+ { kind: "allocate_port", serial: record.serial },
117
+ { kind: "spawn_mcp", serial: record.serial },
118
+ { kind: "spawn_daemon", serial: record.serial },
119
+ {
120
+ kind: "log",
121
+ level: "info",
122
+ serial: record.serial,
123
+ msg: "binding added — spawning mcp + daemon",
124
+ },
125
+ ],
126
+ };
127
+ }
128
+ return { record, effects: [] };
129
+ default:
130
+ return { record, effects: [] };
131
+ }
132
+ }
133
+ function fromSpawning(record, event, ctx) {
134
+ switch (event.kind) {
135
+ case "mcp_started":
136
+ case "daemon_started":
137
+ // Stay in spawning until BOTH children are observed alive. The supervisor
138
+ // tracks alive flags externally and emits a synthetic transition by
139
+ // calling `markHealthy()` (see supervisor.ts). The pure FSM is told via
140
+ // a follow-up… actually we keep it simple: the supervisor consults
141
+ // `mcpAlive && daemonAlive` and dispatches an internal `healthy_check`.
142
+ // In M1 we just keep `spawning` here; M3 will issue an explicit signal.
143
+ return { record, effects: [] };
144
+ case "adb_offline":
145
+ // Lost ADB during spawn — go to grace as if we had been healthy.
146
+ return {
147
+ record: transition(record, "grace", ctx),
148
+ effects: [
149
+ { kind: "start_grace_timer", serial: record.serial },
150
+ {
151
+ kind: "log",
152
+ level: "warn",
153
+ serial: record.serial,
154
+ msg: "adb went offline during spawn — entering GRACE",
155
+ },
156
+ ],
157
+ };
158
+ case "mcp_exited":
159
+ case "daemon_exited":
160
+ if (event.expected) {
161
+ // Fleet-requested teardown during spawn (binding removed mid-startup).
162
+ return { record, effects: [] };
163
+ }
164
+ return enterCrashed(record, ctx);
165
+ case "binding_removed":
166
+ return tearDown(record, ctx, "binding removed");
167
+ default:
168
+ return { record, effects: [] };
169
+ }
170
+ }
171
+ function fromHealthy(record, event, ctx) {
172
+ switch (event.kind) {
173
+ case "adb_offline":
174
+ return {
175
+ record: transition(record, "grace", ctx),
176
+ effects: [
177
+ { kind: "start_grace_timer", serial: record.serial },
178
+ {
179
+ kind: "log",
180
+ level: "info",
181
+ serial: record.serial,
182
+ msg: "adb went offline — entering GRACE (USB jitter window)",
183
+ },
184
+ ],
185
+ };
186
+ case "mcp_exited":
187
+ if (event.expected)
188
+ return { record, effects: [] };
189
+ return {
190
+ record: withRestartCount(transition(record, "spawning", ctx), record.restartCount + 1),
191
+ effects: [
192
+ { kind: "spawn_mcp", serial: record.serial },
193
+ {
194
+ kind: "log",
195
+ level: "warn",
196
+ serial: record.serial,
197
+ msg: "mcp exited unexpectedly — restarting (daemon untouched)",
198
+ data: { code: event.code, signal: event.signal },
199
+ },
200
+ ],
201
+ };
202
+ case "daemon_exited":
203
+ if (event.expected)
204
+ return { record, effects: [] };
205
+ return {
206
+ record: withRestartCount(transition(record, "spawning", ctx), record.restartCount + 1),
207
+ effects: [
208
+ { kind: "spawn_daemon", serial: record.serial },
209
+ {
210
+ kind: "log",
211
+ level: "warn",
212
+ serial: record.serial,
213
+ msg: "daemon exited unexpectedly — restarting (mcp untouched)",
214
+ data: { code: event.code, signal: event.signal },
215
+ },
216
+ ],
217
+ };
218
+ case "binding_removed":
219
+ return tearDown(record, ctx, "binding removed");
220
+ default:
221
+ return { record, effects: [] };
222
+ }
223
+ }
224
+ function fromGrace(record, event, ctx) {
225
+ switch (event.kind) {
226
+ case "adb_online":
227
+ return {
228
+ record: transition(record, "healthy", ctx),
229
+ effects: [
230
+ { kind: "cancel_grace_timer", serial: record.serial },
231
+ {
232
+ kind: "log",
233
+ level: "info",
234
+ serial: record.serial,
235
+ msg: "adb came back within grace window — transparent recovery",
236
+ },
237
+ ],
238
+ };
239
+ case "grace_expired":
240
+ return {
241
+ record: transition(record, "degraded", ctx),
242
+ effects: [
243
+ { kind: "kill_mcp", serial: record.serial, expected: true },
244
+ { kind: "release_port", serial: record.serial },
245
+ { kind: "start_keep_timer", serial: record.serial },
246
+ {
247
+ kind: "log",
248
+ level: "warn",
249
+ serial: record.serial,
250
+ msg: "grace expired — killed mcp, daemon retained for keep window",
251
+ },
252
+ ],
253
+ };
254
+ case "binding_removed":
255
+ return tearDown(record, ctx, "binding removed during GRACE");
256
+ default:
257
+ return { record, effects: [] };
258
+ }
259
+ }
260
+ function fromDegraded(record, event, ctx) {
261
+ switch (event.kind) {
262
+ case "adb_online":
263
+ return {
264
+ record: withRestartCount(transition(record, "spawning", ctx), 0),
265
+ effects: [
266
+ { kind: "cancel_keep_timer", serial: record.serial },
267
+ { kind: "allocate_port", serial: record.serial },
268
+ { kind: "spawn_mcp", serial: record.serial },
269
+ {
270
+ kind: "log",
271
+ level: "info",
272
+ serial: record.serial,
273
+ msg: "adb came back within keep window — respawning mcp (daemon self-heals)",
274
+ },
275
+ ],
276
+ };
277
+ case "keep_expired":
278
+ return {
279
+ record: transition(record, "gone", ctx),
280
+ effects: [
281
+ { kind: "kill_daemon", serial: record.serial, expected: true },
282
+ {
283
+ kind: "log",
284
+ level: "warn",
285
+ serial: record.serial,
286
+ msg: "keep window expired — killed daemon, session paused",
287
+ },
288
+ ],
289
+ };
290
+ case "daemon_exited":
291
+ // While in degraded the daemon SHOULD still be alive. If it dies on its
292
+ // own, we just mark gone (no re-spawn — adb is offline).
293
+ return { record: transition(record, "gone", ctx), effects: [] };
294
+ case "binding_removed":
295
+ return tearDown(record, ctx, "binding removed during DEGRADED");
296
+ default:
297
+ return { record, effects: [] };
298
+ }
299
+ }
300
+ function fromGone(record, event, ctx) {
301
+ switch (event.kind) {
302
+ case "adb_online":
303
+ if (!record.binding || !record.binding.instanceId) {
304
+ return { record: transition(record, "awaiting_bind", ctx), effects: [] };
305
+ }
306
+ return {
307
+ record: withRestartCount(transition(record, "spawning", ctx), 0),
308
+ effects: [
309
+ { kind: "allocate_port", serial: record.serial },
310
+ { kind: "spawn_mcp", serial: record.serial },
311
+ { kind: "spawn_daemon", serial: record.serial },
312
+ {
313
+ kind: "log",
314
+ level: "info",
315
+ serial: record.serial,
316
+ msg: "adb back after long absence — full respawn",
317
+ },
318
+ ],
319
+ };
320
+ case "binding_removed":
321
+ return { record, effects: [] };
322
+ default:
323
+ return { record, effects: [] };
324
+ }
325
+ }
326
+ function fromCrashed(record, event, ctx) {
327
+ switch (event.kind) {
328
+ case "backoff_elapsed":
329
+ return {
330
+ record: transition(record, "spawning", ctx),
331
+ effects: [
332
+ { kind: "spawn_mcp", serial: record.serial },
333
+ { kind: "spawn_daemon", serial: record.serial },
334
+ {
335
+ kind: "log",
336
+ level: "info",
337
+ serial: record.serial,
338
+ msg: "backoff elapsed — retrying spawn",
339
+ data: { restartCount: record.restartCount },
340
+ },
341
+ ],
342
+ };
343
+ case "adb_offline":
344
+ return {
345
+ record: transition(record, "grace", ctx),
346
+ effects: [
347
+ { kind: "cancel_backoff_timer", serial: record.serial },
348
+ { kind: "start_grace_timer", serial: record.serial },
349
+ ],
350
+ };
351
+ case "binding_removed":
352
+ return tearDown(record, ctx, "binding removed during CRASHED");
353
+ default:
354
+ return { record, effects: [] };
355
+ }
356
+ }
357
+ // ── Helpers ────────────────────────────────────────────────────────────────
358
+ function enterCrashed(record, ctx) {
359
+ const next = record.restartCount + 1;
360
+ if (next >= MAX_RESTARTS_BEFORE_BACKOFF) {
361
+ return {
362
+ record: withRestartCount(transition(record, "crashed", ctx), next),
363
+ effects: [
364
+ { kind: "start_backoff_timer", serial: record.serial, attempt: next },
365
+ {
366
+ kind: "log",
367
+ level: "warn",
368
+ serial: record.serial,
369
+ msg: "child process crashed — entering exponential backoff",
370
+ data: { restartCount: next },
371
+ },
372
+ ],
373
+ };
374
+ }
375
+ return {
376
+ record: withRestartCount(transition(record, "spawning", ctx), next),
377
+ effects: [
378
+ { kind: "spawn_mcp", serial: record.serial },
379
+ { kind: "spawn_daemon", serial: record.serial },
380
+ {
381
+ kind: "log",
382
+ level: "warn",
383
+ serial: record.serial,
384
+ msg: "child process crashed — restarting",
385
+ data: { restartCount: next },
386
+ },
387
+ ],
388
+ };
389
+ }
390
+ function tearDown(record, ctx, reason) {
391
+ return {
392
+ record: transition(record, "adb_offline", ctx),
393
+ effects: [
394
+ { kind: "cancel_grace_timer", serial: record.serial },
395
+ { kind: "cancel_keep_timer", serial: record.serial },
396
+ { kind: "cancel_backoff_timer", serial: record.serial },
397
+ { kind: "kill_mcp", serial: record.serial, expected: true },
398
+ { kind: "kill_daemon", serial: record.serial, expected: true },
399
+ { kind: "release_port", serial: record.serial },
400
+ {
401
+ kind: "log",
402
+ level: "info",
403
+ serial: record.serial,
404
+ msg: `tearing down: ${reason}`,
405
+ },
406
+ ],
407
+ };
408
+ }
409
+ // ── Public entry point ─────────────────────────────────────────────────────
410
+ /**
411
+ * Pure FSM reducer.
412
+ *
413
+ * Apply `event` to `record` and return the next `record` plus the effects the
414
+ * supervisor must enact. Events that the current state does not care about
415
+ * are no-ops (empty effects, identical record).
416
+ *
417
+ * Important: the supervisor MUST update `record.binding` before calling
418
+ * `step()` for binding events, because some transitions consult
419
+ * `record.binding.instanceId` to decide between `spawning` and
420
+ * `awaiting_bind`.
421
+ */
422
+ export function step(record, event, ctx) {
423
+ switch (record.state) {
424
+ case "adb_offline":
425
+ return fromAdbOffline(record, event, ctx);
426
+ case "adb_unauthorized":
427
+ return fromAdbUnauthorized(record, event, ctx);
428
+ case "awaiting_bind":
429
+ return fromAwaitingBind(record, event, ctx);
430
+ case "spawning":
431
+ return fromSpawning(record, event, ctx);
432
+ case "healthy":
433
+ return fromHealthy(record, event, ctx);
434
+ case "grace":
435
+ return fromGrace(record, event, ctx);
436
+ case "degraded":
437
+ return fromDegraded(record, event, ctx);
438
+ case "gone":
439
+ return fromGone(record, event, ctx);
440
+ case "crashed":
441
+ return fromCrashed(record, event, ctx);
442
+ }
443
+ }
444
+ /**
445
+ * Internal helper for the supervisor: when both children have been observed
446
+ * alive (mcp_started + daemon_started), the supervisor calls this to flip the
447
+ * record from `spawning` → `healthy`. Centralised here so the transition
448
+ * lives next to the rest of the state machine.
449
+ */
450
+ export function markHealthy(record, ctx) {
451
+ if (record.state !== "spawning")
452
+ return { record, effects: [] };
453
+ return {
454
+ record: withRestartCount(transition(record, "healthy", ctx), 0),
455
+ effects: [
456
+ {
457
+ kind: "log",
458
+ level: "info",
459
+ serial: record.serial,
460
+ msg: "device is HEALTHY (mcp + daemon both alive)",
461
+ },
462
+ ],
463
+ };
464
+ }
465
+ /**
466
+ * Backoff schedule used by the supervisor when arming the
467
+ * `start_backoff_timer` effect. Exponential with cap.
468
+ */
469
+ export function backoffMs(attempt) {
470
+ const base = 500;
471
+ const cap = 60_000;
472
+ const exp = Math.min(cap, base * 2 ** Math.max(0, attempt - 1));
473
+ return exp;
474
+ }
475
+ //# sourceMappingURL=fsm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsm.js","sourceRoot":"","sources":["../../../src/fleet/domain/fsm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA+FH,SAAS,UAAU,CACjB,MAAoB,EACpB,IAAgB,EAChB,GAAgB;IAEhB,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACzC,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAoB,EAAE,KAAa;IAC3D,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IACjD,OAAO,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,8EAA8E;AAE9E,SAAS,cAAc,CACrB,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClD,OAAO;oBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,CAAC;oBAChD,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,KAAK;4BACX,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,GAAG,EAAE,yDAAyD;yBAC/D;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChE,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAChD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC5C,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC/C;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,oCAAoC;qBAC1C;iBACF;aACF,CAAC;QACJ,CAAC;QACD,KAAK,kBAAkB;YACrB,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,CAAC;gBACnD,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,6DAA6D;qBACnE;iBACF;aACF,CAAC;QACJ,KAAK,eAAe,CAAC;QACrB,KAAK,iBAAiB,CAAC;QACvB,KAAK,iBAAiB;YACpB,qEAAqE;YACrE,kEAAkE;YAClE,yCAAyC;YACzC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACjC;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,sEAAsE;YACtE,OAAO,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5E,KAAK,aAAa;YAChB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzE;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzE,KAAK,kBAAkB;YACrB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC9E,KAAK,eAAe,CAAC;QACrB,KAAK,iBAAiB;YACpB,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAChD,OAAO;oBACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChE,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;wBAChD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;wBAC5C,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;wBAC/C;4BACE,IAAI,EAAE,KAAK;4BACX,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,GAAG,EAAE,uCAAuC;yBAC7C;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACjC;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,aAAa,CAAC;QACnB,KAAK,gBAAgB;YACnB,0EAA0E;YAC1E,oEAAoE;YACpE,wEAAwE;YACxE,mEAAmE;YACnE,wEAAwE;YACxE,wEAAwE;YACxE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACjC,KAAK,aAAa;YAChB,iEAAiE;YACjE,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC;gBACxC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBACpD;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,gDAAgD;qBACtD;iBACF;aACF,CAAC;QACJ,KAAK,YAAY,CAAC;QAClB,KAAK,eAAe;YAClB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,uEAAuE;gBACvE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACjC,CAAC;YACD,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnC,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAClD;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC;gBACxC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBACpD;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,uDAAuD;qBAC7D;iBACF;aACF,CAAC;QACJ,KAAK,YAAY;YACf,IAAI,KAAK,CAAC,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACnD,OAAO;gBACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtF,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC5C;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,yDAAyD;wBAC9D,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;qBACjD;iBACF;aACF,CAAC;QACJ,KAAK,eAAe;YAClB,IAAI,KAAK,CAAC,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACnD,OAAO;gBACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtF,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC/C;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,yDAAyD;wBAC9D,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;qBACjD;iBACF;aACF,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAClD;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAChB,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC;gBAC1C,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBACrD;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,0DAA0D;qBAChE;iBACF;aACF,CAAC;QACJ,KAAK,eAAe;YAClB,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC;gBAC3C,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC3D,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC/C,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBACnD;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,6DAA6D;qBACnE;iBACF;aACF,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,8BAA8B,CAAC,CAAC;QAC/D;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,OAAO;gBACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChE,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBACpD,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAChD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC5C;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,uEAAuE;qBAC7E;iBACF;aACF,CAAC;QACJ,KAAK,cAAc;YACjB,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;gBACvC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC9D;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,qDAAqD;qBAC3D;iBACF;aACF,CAAC;QACJ,KAAK,eAAe;YAClB,wEAAwE;YACxE,yDAAyD;YACzD,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAClE,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,iCAAiC,CAAC,CAAC;QAClE;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClD,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAC3E,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChE,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAChD,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC5C,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC/C;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,4CAA4C;qBAClD;iBACF;aACF,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACjC;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC;gBAC3C,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC5C,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC/C;wBACE,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,EAAE,kCAAkC;wBACvC,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE;qBAC5C;iBACF;aACF,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO;gBACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC;gBACxC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBACvD,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;iBACrD;aACF,CAAC;QACJ,KAAK,iBAAiB;YACpB,OAAO,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,gCAAgC,CAAC,CAAC;QACjE;YACE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,8EAA8E;AAE9E,SAAS,YAAY,CACnB,MAAoB,EACpB,GAAgB;IAEhB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,IAAI,2BAA2B,EAAE,CAAC;QACxC,OAAO;YACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC;YAClE,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;gBACrE;oBACE,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,GAAG,EAAE,sDAAsD;oBAC3D,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;iBAC7B;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC;QACnE,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAC5C,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAC/C;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,EAAE,oCAAoC;gBACzC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;aAC7B;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,MAAoB,EACpB,GAAgB,EAChB,MAAc;IAEd,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC;QAC9C,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YACrD,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YACpD,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YACvD,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC3D,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9D,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAC/C;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,EAAE,iBAAiB,MAAM,EAAE;aAC/B;SACF;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,IAAI,CAClB,MAAoB,EACpB,KAAiB,EACjB,GAAgB;IAEhB,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,aAAa;YAChB,OAAO,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,KAAK,kBAAkB;YACrB,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACjD,KAAK,eAAe;YAClB,OAAO,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9C,KAAK,UAAU;YACb,OAAO,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1C,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACvC,KAAK,UAAU;YACb,OAAO,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1C,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACtC,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,MAAoB,EACpB,GAAgB;IAEhB,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAChE,OAAO;QACL,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,EAAE,6CAA6C;aACnD;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC;IACjB,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Fleet status HTTP client — used by every `device-agent fleet …` CLI
3
+ * subcommand that needs to talk to an already-running fleet supervisor on
4
+ * loopback :7950.
5
+ *
6
+ * Loopback only; no auth (see `status-server.ts`). The client deliberately
7
+ * fails fast when the fleet is not running — every CLI subcommand that
8
+ * depends on it surfaces an actionable hint ("run `device-agent fleet
9
+ * enable`" / "is the fleet running?").
10
+ */
11
+ import type { DeviceSnapshot } from "../domain/device.js";
12
+ export declare class FleetStatusClient {
13
+ private readonly base;
14
+ constructor(base?: string);
15
+ healthz(): Promise<boolean>;
16
+ listDevices(): Promise<DeviceSnapshot[]>;
17
+ getDevice(serial: string): Promise<DeviceSnapshot | null>;
18
+ restartDevice(serial: string): Promise<boolean>;
19
+ reload(): Promise<void>;
20
+ /**
21
+ * Ask the running fleet supervisor to gracefully shut down. Returns
22
+ * `true` when the supervisor accepted the request (HTTP 202), `false`
23
+ * when the supervisor was started without a shutdown hook (HTTP 501).
24
+ * Any other non-2xx response is surfaced as `FleetClientError`.
25
+ */
26
+ shutdown(): Promise<boolean>;
27
+ private request;
28
+ }
29
+ export declare class FleetClientError extends Error {
30
+ constructor(msg: string);
31
+ }
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Fleet status HTTP client — used by every `device-agent fleet …` CLI
3
+ * subcommand that needs to talk to an already-running fleet supervisor on
4
+ * loopback :7950.
5
+ *
6
+ * Loopback only; no auth (see `status-server.ts`). The client deliberately
7
+ * fails fast when the fleet is not running — every CLI subcommand that
8
+ * depends on it surfaces an actionable hint ("run `device-agent fleet
9
+ * enable`" / "is the fleet running?").
10
+ */
11
+ import * as http from "node:http";
12
+ import { Buffer } from "node:buffer";
13
+ function defaultBase() {
14
+ return `http://127.0.0.1:${process.env.FLEET_STATUS_PORT ?? "7950"}`;
15
+ }
16
+ export class FleetStatusClient {
17
+ base;
18
+ constructor(base) {
19
+ this.base = base ?? defaultBase();
20
+ }
21
+ async healthz() {
22
+ try {
23
+ const { status } = await this.request("GET", "/healthz");
24
+ return status === 200;
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ }
30
+ async listDevices() {
31
+ const { status, body } = await this.request("GET", "/fleet/devices");
32
+ if (status !== 200) {
33
+ throw new FleetClientError(`/fleet/devices failed: HTTP ${status}: ${body}`);
34
+ }
35
+ return JSON.parse(body);
36
+ }
37
+ async getDevice(serial) {
38
+ const { status, body } = await this.request("GET", `/fleet/devices/${encodeURIComponent(serial)}`);
39
+ if (status === 404)
40
+ return null;
41
+ if (status !== 200) {
42
+ throw new FleetClientError(`fleet GET device failed: HTTP ${status}: ${body}`);
43
+ }
44
+ return JSON.parse(body);
45
+ }
46
+ async restartDevice(serial) {
47
+ const { status, body } = await this.request("POST", `/fleet/devices/${encodeURIComponent(serial)}/restart`);
48
+ if (status === 404)
49
+ return false;
50
+ if (status !== 202) {
51
+ throw new FleetClientError(`fleet restart failed: HTTP ${status}: ${body}`);
52
+ }
53
+ return true;
54
+ }
55
+ async reload() {
56
+ const { status, body } = await this.request("POST", "/fleet/reload");
57
+ if (status !== 202) {
58
+ throw new FleetClientError(`fleet reload failed: HTTP ${status}: ${body}`);
59
+ }
60
+ }
61
+ /**
62
+ * Ask the running fleet supervisor to gracefully shut down. Returns
63
+ * `true` when the supervisor accepted the request (HTTP 202), `false`
64
+ * when the supervisor was started without a shutdown hook (HTTP 501).
65
+ * Any other non-2xx response is surfaced as `FleetClientError`.
66
+ */
67
+ async shutdown() {
68
+ const { status, body } = await this.request("POST", "/fleet/shutdown");
69
+ if (status === 202)
70
+ return true;
71
+ if (status === 501)
72
+ return false;
73
+ throw new FleetClientError(`fleet shutdown failed: HTTP ${status}: ${body}`);
74
+ }
75
+ request(method, path) {
76
+ return new Promise((resolve, reject) => {
77
+ const url = new URL(path, this.base);
78
+ const req = http.request({
79
+ method,
80
+ hostname: url.hostname,
81
+ port: Number(url.port),
82
+ path: url.pathname + url.search,
83
+ headers: { "content-length": "0" },
84
+ }, (res) => {
85
+ const chunks = [];
86
+ res.on("data", (c) => chunks.push(c));
87
+ res.on("end", () => resolve({
88
+ status: res.statusCode ?? 0,
89
+ body: Buffer.concat(chunks).toString("utf8"),
90
+ }));
91
+ res.on("error", reject);
92
+ });
93
+ req.setTimeout(5_000, () => {
94
+ req.destroy(new FleetClientError("fleet request timed out"));
95
+ });
96
+ req.on("error", (err) => {
97
+ if ("code" in err && err.code === "ECONNREFUSED") {
98
+ reject(new FleetClientError(`fleet supervisor is not running at ${this.base}. ` +
99
+ "Start it with `device-agent fleet start` (or `fleet enable`)."));
100
+ }
101
+ else {
102
+ reject(err);
103
+ }
104
+ });
105
+ req.end();
106
+ });
107
+ }
108
+ }
109
+ export class FleetClientError extends Error {
110
+ constructor(msg) {
111
+ super(msg);
112
+ this.name = "FleetClientError";
113
+ }
114
+ }
115
+ //# sourceMappingURL=status-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-client.js","sourceRoot":"","sources":["../../../src/fleet/http/status-client.ts"],"names":[],"mappings":"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"}