@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,64 @@
1
+ /**
2
+ * Fleet status server — local HTTP endpoint exposing supervisor state and a
3
+ * minimal control plane for the `device-agent fleet …` CLI subcommands.
4
+ *
5
+ * Bind: `127.0.0.1:7950` by default (env `FLEET_STATUS_PORT`). Loopback-only
6
+ * by design — there is NO authentication. Anyone on the host who can reach
7
+ * loopback is already trusted (they could read `~/.beeos/keys/`).
8
+ *
9
+ * Routes:
10
+ *
11
+ * GET /healthz — liveness probe (200 "ok\n")
12
+ * GET /fleet/devices — array of `DeviceSnapshot`
13
+ * GET /fleet/devices/:serial — single device snapshot or 404
14
+ * POST /fleet/devices/:serial/restart — kick device's mcp + daemon
15
+ * POST /fleet/reload — re-read `~/.beeos/devices.json`
16
+ * POST /fleet/shutdown — graceful exit (`fleet stop`)
17
+ *
18
+ * `shutdown` is opt-in — the caller must wire an `onShutdown` callback that
19
+ * tears down the supervisor + status server in the right order. Without
20
+ * that callback the route returns 501 so we don't accidentally mask a
21
+ * misconfigured stack with a confusing 200.
22
+ *
23
+ * The dispatcher uses Node's stdlib `http` module to keep the dependency
24
+ * footprint minimal — fastify pulls in a heavy plugin chain we don't need
25
+ * for five trivial endpoints.
26
+ */
27
+ import type { FleetSupervisor, SupervisorLogger } from "../supervisor.js";
28
+ export interface StatusServerOptions {
29
+ supervisor: FleetSupervisor;
30
+ host?: string;
31
+ port?: number;
32
+ logger?: SupervisorLogger;
33
+ /**
34
+ * Optional graceful-shutdown hook for `POST /fleet/shutdown`.
35
+ *
36
+ * The caller is responsible for tearing down the supervisor + status
37
+ * server (and exiting the process if appropriate). We schedule it as
38
+ * a microtask so the HTTP response goes out before we close the
39
+ * listener — a synchronous call would leave the client hanging.
40
+ */
41
+ onShutdown?: () => Promise<void> | void;
42
+ }
43
+ export declare class StatusServer {
44
+ private readonly supervisor;
45
+ private readonly host;
46
+ private port;
47
+ private readonly logger;
48
+ private readonly onShutdown?;
49
+ private server;
50
+ constructor(opts: StatusServerOptions);
51
+ /**
52
+ * Public address (only meaningful after `start()`). When `port: 0` was
53
+ * passed (tests), this reflects the OS-assigned ephemeral port — not the
54
+ * 0 that was supplied at construction time.
55
+ */
56
+ get address(): {
57
+ host: string;
58
+ port: number;
59
+ };
60
+ start(): Promise<void>;
61
+ stop(): Promise<void>;
62
+ private handle;
63
+ private json;
64
+ }
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Fleet status server — local HTTP endpoint exposing supervisor state and a
3
+ * minimal control plane for the `device-agent fleet …` CLI subcommands.
4
+ *
5
+ * Bind: `127.0.0.1:7950` by default (env `FLEET_STATUS_PORT`). Loopback-only
6
+ * by design — there is NO authentication. Anyone on the host who can reach
7
+ * loopback is already trusted (they could read `~/.beeos/keys/`).
8
+ *
9
+ * Routes:
10
+ *
11
+ * GET /healthz — liveness probe (200 "ok\n")
12
+ * GET /fleet/devices — array of `DeviceSnapshot`
13
+ * GET /fleet/devices/:serial — single device snapshot or 404
14
+ * POST /fleet/devices/:serial/restart — kick device's mcp + daemon
15
+ * POST /fleet/reload — re-read `~/.beeos/devices.json`
16
+ * POST /fleet/shutdown — graceful exit (`fleet stop`)
17
+ *
18
+ * `shutdown` is opt-in — the caller must wire an `onShutdown` callback that
19
+ * tears down the supervisor + status server in the right order. Without
20
+ * that callback the route returns 501 so we don't accidentally mask a
21
+ * misconfigured stack with a confusing 200.
22
+ *
23
+ * The dispatcher uses Node's stdlib `http` module to keep the dependency
24
+ * footprint minimal — fastify pulls in a heavy plugin chain we don't need
25
+ * for five trivial endpoints.
26
+ */
27
+ import * as http from "node:http";
28
+ import { Buffer } from "node:buffer";
29
+ const DEFAULT_HOST = "127.0.0.1";
30
+ const DEFAULT_PORT = 7950;
31
+ const noopLogger = {
32
+ debug: () => { },
33
+ info: () => { },
34
+ warn: () => { },
35
+ error: () => { },
36
+ };
37
+ export class StatusServer {
38
+ supervisor;
39
+ host;
40
+ // Mutable so we can reflect the OS-assigned port back when callers pass
41
+ // `port: 0` (tests typically do).
42
+ port;
43
+ logger;
44
+ onShutdown;
45
+ server = null;
46
+ constructor(opts) {
47
+ this.supervisor = opts.supervisor;
48
+ this.host = opts.host ?? DEFAULT_HOST;
49
+ this.port = opts.port ?? Number(process.env.FLEET_STATUS_PORT ?? DEFAULT_PORT);
50
+ this.logger = opts.logger ?? noopLogger;
51
+ this.onShutdown = opts.onShutdown;
52
+ }
53
+ /**
54
+ * Public address (only meaningful after `start()`). When `port: 0` was
55
+ * passed (tests), this reflects the OS-assigned ephemeral port — not the
56
+ * 0 that was supplied at construction time.
57
+ */
58
+ get address() {
59
+ return { host: this.host, port: this.port };
60
+ }
61
+ async start() {
62
+ if (this.server)
63
+ return;
64
+ this.server = http.createServer((req, res) => {
65
+ this.handle(req, res).catch((e) => {
66
+ this.logger.error("status-server handler threw", { error: String(e) });
67
+ if (!res.headersSent) {
68
+ res.statusCode = 500;
69
+ res.setHeader("content-type", "application/json");
70
+ res.end(JSON.stringify({ error: "internal" }));
71
+ }
72
+ });
73
+ });
74
+ await new Promise((resolve, reject) => {
75
+ this.server.once("error", reject);
76
+ this.server.listen(this.port, this.host, () => {
77
+ this.server.off("error", reject);
78
+ // Reflect the OS-assigned port back into `this.port` so callers
79
+ // reading `server.address` after `start()` see the real bound
80
+ // port — important for tests using `port: 0`.
81
+ const addr = this.server.address();
82
+ if (addr && typeof addr === "object") {
83
+ this.port = addr.port;
84
+ }
85
+ resolve();
86
+ });
87
+ });
88
+ this.logger.info("fleet status-server listening", {
89
+ host: this.host,
90
+ port: this.port,
91
+ });
92
+ }
93
+ async stop() {
94
+ const server = this.server;
95
+ if (!server)
96
+ return;
97
+ this.server = null;
98
+ await new Promise((resolve) => {
99
+ server.close(() => resolve());
100
+ });
101
+ }
102
+ // ── Dispatcher ──────────────────────────────────────────────────────────
103
+ async handle(req, res) {
104
+ const url = req.url ?? "/";
105
+ const [pathOnly] = url.split("?");
106
+ const method = (req.method ?? "GET").toUpperCase();
107
+ // Healthz first — used by service managers, must be cheap.
108
+ if (pathOnly === "/healthz" && method === "GET") {
109
+ res.statusCode = 200;
110
+ res.setHeader("content-type", "text/plain");
111
+ res.end("ok\n");
112
+ return;
113
+ }
114
+ if (pathOnly === "/fleet/devices" && method === "GET") {
115
+ this.json(res, 200, this.supervisor.snapshot());
116
+ return;
117
+ }
118
+ if (pathOnly === "/fleet/reload" && method === "POST") {
119
+ await drain(req);
120
+ try {
121
+ await this.supervisor.reload();
122
+ this.json(res, 202, { ok: true });
123
+ }
124
+ catch (e) {
125
+ this.json(res, 500, { ok: false, error: String(e) });
126
+ }
127
+ return;
128
+ }
129
+ if (pathOnly === "/fleet/shutdown" && method === "POST") {
130
+ await drain(req);
131
+ if (!this.onShutdown) {
132
+ this.json(res, 501, {
133
+ ok: false,
134
+ error: "shutdown hook not configured",
135
+ });
136
+ return;
137
+ }
138
+ // Reply first, then run the shutdown hook on the next tick so the
139
+ // socket flushes before we close the listener. Errors inside the
140
+ // hook are logged but not surfaced to the caller — the response
141
+ // has already been sent and the process is on its way out.
142
+ this.json(res, 202, { ok: true });
143
+ const hook = this.onShutdown;
144
+ setImmediate(() => {
145
+ Promise.resolve()
146
+ .then(() => hook())
147
+ .catch((e) => {
148
+ this.logger.error("fleet shutdown hook failed", {
149
+ error: String(e),
150
+ });
151
+ });
152
+ });
153
+ return;
154
+ }
155
+ // /fleet/devices/<serial> [/restart]
156
+ const m = pathOnly.match(/^\/fleet\/devices\/([^/]+)(\/restart)?$/);
157
+ if (m) {
158
+ const serial = decodeURIComponent(m[1]);
159
+ const isRestart = Boolean(m[2]);
160
+ if (isRestart && method === "POST") {
161
+ await drain(req);
162
+ const ok = await this.supervisor.restartDevice(serial);
163
+ if (!ok) {
164
+ this.json(res, 404, { error: "unknown serial", serial });
165
+ }
166
+ else {
167
+ this.json(res, 202, { ok: true, serial });
168
+ }
169
+ return;
170
+ }
171
+ if (!isRestart && method === "GET") {
172
+ const found = this.supervisor.snapshot().find((d) => d.serial === serial);
173
+ if (!found) {
174
+ this.json(res, 404, { error: "unknown serial", serial });
175
+ }
176
+ else {
177
+ this.json(res, 200, found);
178
+ }
179
+ return;
180
+ }
181
+ }
182
+ res.statusCode = 404;
183
+ res.setHeader("content-type", "application/json");
184
+ res.end(JSON.stringify({ error: "not found", path: pathOnly, method }));
185
+ }
186
+ json(res, status, body) {
187
+ res.statusCode = status;
188
+ res.setHeader("content-type", "application/json");
189
+ res.end(JSON.stringify(body));
190
+ }
191
+ }
192
+ async function drain(req) {
193
+ return new Promise((resolve, reject) => {
194
+ const chunks = [];
195
+ req.on("data", (c) => chunks.push(c));
196
+ req.on("end", () => resolve(Buffer.concat(chunks)));
197
+ req.on("error", reject);
198
+ });
199
+ }
200
+ //# sourceMappingURL=status-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-server.js","sourceRoot":"","sources":["../../../src/fleet/http/status-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Public surface of the `device-agent fleet` module.
3
+ *
4
+ * Fleet is opt-in: import nothing here unless you actually want the
5
+ * multi-device supervisor. The CLI (`device-agent fleet …` subcommands) lives
6
+ * in `inbound/cli/fleet-command.ts` and is the canonical consumer.
7
+ */
8
+ export type { DeviceBinding, DeviceRecord, DeviceSnapshot, FleetState, } from "./domain/device.js";
9
+ export { newDeviceRecord, stateExpectsDaemon, stateExpectsMcp, } from "./domain/device.js";
10
+ export type { AdbEvent, BindingEvent, FleetEvent, ProcessEvent, TimerEvent, } from "./domain/events.js";
11
+ export type { FleetEffect, StepContext, StepResult, } from "./domain/fsm.js";
12
+ export { backoffMs, markHealthy, step } from "./domain/fsm.js";
13
+ export type { IDeviceSource } from "./ports/device-source.js";
14
+ export type { IProcessManager, SpawnOptions } from "./ports/process-manager.js";
15
+ export type { IPortAllocator, IStateRegistry } from "./ports/state-registry.js";
16
+ export type { CancelFn, IClock } from "./ports/clock.js";
17
+ export { SystemClock } from "./ports/clock.js";
18
+ export { BeeosCliStore, defaultDevicesPath, readBindings, } from "./adapters/state/beeos-cli-store.js";
19
+ export { StickyPortAllocator, defaultFleetStatePath, } from "./adapters/state/port-allocator.js";
20
+ export { LocalAdbSource, diffSnapshots, parseSnapshotBody, parseTrackDevicesLine, tryParseFrames, } from "./adapters/sources/local-adb.js";
21
+ export type { LocalAdbSourceOptions, AdbLogger } from "./adapters/sources/local-adb.js";
22
+ export { NodeProcessManager } from "./adapters/process/node-process-manager.js";
23
+ export type { HttpProbeFn, ManagedChild, NodeProcessManagerOptions, ProcessManagerLogger, SpawnFn, } from "./adapters/process/node-process-manager.js";
24
+ export { FleetSupervisor } from "./supervisor.js";
25
+ export type { FleetSupervisorOptions, SupervisorLogger, } from "./supervisor.js";
26
+ export { buildFleetServiceSpec, FLEET_LABEL, fleetPlistPath, installFleetLaunchd, LEGACY_DEVICE_AGENT_PREFIX, LEGACY_SCRCPY_BRIDGE_PREFIX, migrateFromAttach, renderFleetPlist, uninstallFleetLaunchd, } from "./installer/index.js";
27
+ export type { BuildFleetSpecInput, FleetRestartPolicy, FleetServiceLabel, FleetServiceSpec, InstallResult, MigrateResult, UninstallResult, } from "./installer/index.js";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Public surface of the `device-agent fleet` module.
3
+ *
4
+ * Fleet is opt-in: import nothing here unless you actually want the
5
+ * multi-device supervisor. The CLI (`device-agent fleet …` subcommands) lives
6
+ * in `inbound/cli/fleet-command.ts` and is the canonical consumer.
7
+ */
8
+ export { newDeviceRecord, stateExpectsDaemon, stateExpectsMcp, } from "./domain/device.js";
9
+ export { backoffMs, markHealthy, step } from "./domain/fsm.js";
10
+ export { SystemClock } from "./ports/clock.js";
11
+ export { BeeosCliStore, defaultDevicesPath, readBindings, } from "./adapters/state/beeos-cli-store.js";
12
+ export { StickyPortAllocator, defaultFleetStatePath, } from "./adapters/state/port-allocator.js";
13
+ export { LocalAdbSource, diffSnapshots, parseSnapshotBody, parseTrackDevicesLine, tryParseFrames, } from "./adapters/sources/local-adb.js";
14
+ export { NodeProcessManager } from "./adapters/process/node-process-manager.js";
15
+ export { FleetSupervisor } from "./supervisor.js";
16
+ export { buildFleetServiceSpec, FLEET_LABEL, fleetPlistPath, installFleetLaunchd, LEGACY_DEVICE_AGENT_PREFIX, LEGACY_SCRCPY_BRIDGE_PREFIX, migrateFromAttach, renderFleetPlist, uninstallFleetLaunchd, } from "./installer/index.js";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fleet/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAe5B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAM/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,GACb,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAShF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAMlD,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Fleet OS-service installer — public surface.
3
+ *
4
+ * Currently macOS-only (launchd). Linux (`systemd --user`) and Windows
5
+ * (Task Scheduler) are deliberately deferred to a follow-up milestone;
6
+ * `installFleet` throws an actionable error on those platforms so users
7
+ * see "fleet enable not yet supported on linux" rather than a silently
8
+ * broken install.
9
+ */
10
+ export { buildFleetServiceSpec, FLEET_LABEL, type BuildFleetSpecInput, type FleetRestartPolicy, type FleetServiceLabel, type FleetServiceSpec, } from "./service-spec.js";
11
+ export { installFleetLaunchd, uninstallFleetLaunchd, migrateFromAttach, renderFleetPlist, fleetPlistPath, LEGACY_DEVICE_AGENT_PREFIX, LEGACY_SCRCPY_BRIDGE_PREFIX, type InstallResult, type UninstallResult, type MigrateResult, } from "./launchd-mac.js";
12
+ export { deriveFleetSpawnEnv, parseConfigToml, defaultReadConfigToml, type ConfigToml, type DeriveSpawnEnvOptions, } from "./spawn-env.js";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Fleet OS-service installer — public surface.
3
+ *
4
+ * Currently macOS-only (launchd). Linux (`systemd --user`) and Windows
5
+ * (Task Scheduler) are deliberately deferred to a follow-up milestone;
6
+ * `installFleet` throws an actionable error on those platforms so users
7
+ * see "fleet enable not yet supported on linux" rather than a silently
8
+ * broken install.
9
+ */
10
+ export { buildFleetServiceSpec, FLEET_LABEL, } from "./service-spec.js";
11
+ export { installFleetLaunchd, uninstallFleetLaunchd, migrateFromAttach, renderFleetPlist, fleetPlistPath, LEGACY_DEVICE_AGENT_PREFIX, LEGACY_SCRCPY_BRIDGE_PREFIX, } from "./launchd-mac.js";
12
+ export { deriveFleetSpawnEnv, parseConfigToml, defaultReadConfigToml, } from "./spawn-env.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fleet/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,qBAAqB,EACrB,WAAW,GAKZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,0BAA0B,EAC1B,2BAA2B,GAI5B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,qBAAqB,GAGtB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * macOS-only launchd integration for `device-agent fleet enable / disable`.
3
+ *
4
+ * The fleet package intentionally does NOT depend on `@beeos/core` — that
5
+ * would pull the entire web monorepo into the runtime. Instead, this file
6
+ * mirrors the renderer + bootstrap sequence in `web/packages/core/src/services/launchd.ts`
7
+ * for the single label `ai.beeos.device-fleet` plus the migration sweep over
8
+ * legacy per-device labels.
9
+ *
10
+ * Restart policy: the rendered plist always sets `KeepAlive: true` —
11
+ * if the fleet process exits, every connected device goes silent, so
12
+ * we want unconditional restarts capped by `ThrottleInterval` (10s).
13
+ *
14
+ * Bootstrap sequence: same pattern as `web/packages/core` — `bootout`
15
+ * any prior copy, then `bootstrap gui/<uid>` and `kickstart -k`. We
16
+ * fall back to legacy `launchctl load -w` on macOS versions that
17
+ * lack `bootstrap`.
18
+ *
19
+ * `migrate-from-attach` removes EVERY plist that matches one of the
20
+ * legacy per-device prefixes (`ai.beeos.device-agent-` /
21
+ * `ai.beeos.scrcpy-bridge-`). Those were how `beeos device attach`
22
+ * used to register supervision before the fleet existed; once the
23
+ * user opts into fleet mode they MUST be removed or we'd double-spawn
24
+ * device-agent for every adb device.
25
+ */
26
+ import type { FleetServiceSpec } from "./service-spec.js";
27
+ /** Legacy per-device labels written by `beeos device attach` v0.3.x. */
28
+ export declare const LEGACY_DEVICE_AGENT_PREFIX = "ai.beeos.device-agent-";
29
+ export declare const LEGACY_SCRCPY_BRIDGE_PREFIX = "ai.beeos.scrcpy-bridge-";
30
+ export interface InstallResult {
31
+ plistPath: string;
32
+ bootstrapped: boolean;
33
+ warnings: string[];
34
+ }
35
+ export interface UninstallResult {
36
+ removed: boolean;
37
+ plistPath: string;
38
+ warnings: string[];
39
+ }
40
+ export interface MigrateResult {
41
+ removedDeviceAgents: string[];
42
+ removedScrcpyBridges: string[];
43
+ warnings: string[];
44
+ }
45
+ /**
46
+ * Render the plist file for a `FleetServiceSpec` and bootstrap it into
47
+ * the user's GUI session. Idempotent — calling twice in a row leaves
48
+ * the same loaded service running with the latest plist.
49
+ */
50
+ export declare function installFleetLaunchd(spec: FleetServiceSpec): Promise<InstallResult>;
51
+ /**
52
+ * Stop and remove the `ai.beeos.device-fleet` plist. Returns
53
+ * `removed: false` when nothing was installed (idempotent).
54
+ */
55
+ export declare function uninstallFleetLaunchd(label: string): Promise<UninstallResult>;
56
+ /**
57
+ * Sweep `~/Library/LaunchAgents/` for legacy per-device plists left
58
+ * behind by older `beeos device attach`, unload them via launchctl,
59
+ * and delete the files. The fleet supersedes them all.
60
+ *
61
+ * No-op when the directory doesn't exist (fresh install) or no
62
+ * matching files are found.
63
+ */
64
+ export declare function migrateFromAttach(): Promise<MigrateResult>;
65
+ /**
66
+ * Render a launchd plist for a `FleetServiceSpec`.
67
+ *
68
+ * Exported for unit tests — the full byte-for-byte XML is the contract
69
+ * we ship to launchd, so any change MUST surface as a test diff.
70
+ */
71
+ export declare function renderFleetPlist(spec: FleetServiceSpec): string;
72
+ /** Path that `installFleetLaunchd` writes to. Exported for tests / `fleet logs`. */
73
+ export declare function fleetPlistPath(label: string): string;