@cydm/happy-elves 0.1.0-beta.50 → 0.1.0-beta.500

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 (502) hide show
  1. package/README.md +11 -8
  2. package/apps/cli/dist/commands/account.js +1 -0
  3. package/apps/cli/dist/commands/app.js +20 -5
  4. package/apps/cli/dist/commands/artifact.d.ts +2 -0
  5. package/apps/cli/dist/commands/artifact.js +97 -0
  6. package/apps/cli/dist/commands/collect.js +1 -0
  7. package/apps/cli/dist/commands/command.js +1 -0
  8. package/apps/cli/dist/commands/config.js +3 -2
  9. package/apps/cli/dist/commands/daemon.js +101 -13
  10. package/apps/cli/dist/commands/dispatch.d.ts +2 -0
  11. package/apps/cli/dist/commands/dispatch.js +130 -0
  12. package/apps/cli/dist/commands/gateway.d.ts +2 -0
  13. package/apps/cli/dist/commands/gateway.js +429 -0
  14. package/apps/cli/dist/commands/lib/args.js +86 -8
  15. package/apps/cli/dist/commands/lib/audit.js +1 -0
  16. package/apps/cli/dist/commands/lib/bootstrap-config.js +1 -0
  17. package/apps/cli/dist/commands/lib/bootstrap-daemon.js +12 -4
  18. package/apps/cli/dist/commands/lib/bootstrap-output.js +1 -0
  19. package/apps/cli/dist/commands/lib/bootstrap.js +1 -0
  20. package/apps/cli/dist/commands/lib/config.d.ts +0 -1
  21. package/apps/cli/dist/commands/lib/config.js +55 -15
  22. package/apps/cli/dist/commands/lib/doctor.d.ts +11 -0
  23. package/apps/cli/dist/commands/lib/doctor.js +279 -13
  24. package/apps/cli/dist/commands/lib/exit.js +2 -2
  25. package/apps/cli/dist/commands/lib/gateway-store.d.ts +38 -0
  26. package/apps/cli/dist/commands/lib/gateway-store.js +33 -0
  27. package/apps/cli/dist/commands/lib/index.d.ts +3 -1
  28. package/apps/cli/dist/commands/lib/index.js +4 -1
  29. package/apps/cli/dist/commands/lib/json.d.ts +2 -2
  30. package/apps/cli/dist/commands/lib/json.js +8 -4
  31. package/apps/cli/dist/commands/lib/local-daemon.d.ts +1 -0
  32. package/apps/cli/dist/commands/lib/local-daemon.js +40 -9
  33. package/apps/cli/dist/commands/lib/loop-store.js +8 -16
  34. package/apps/cli/dist/commands/lib/paths.d.ts +2 -0
  35. package/apps/cli/dist/commands/lib/paths.js +3 -0
  36. package/apps/cli/dist/commands/lib/relay-db-audit.d.ts +37 -0
  37. package/apps/cli/dist/commands/lib/relay-db-audit.js +287 -0
  38. package/apps/cli/dist/commands/lib/relay-debug.d.ts +84 -0
  39. package/apps/cli/dist/commands/lib/relay-debug.js +190 -0
  40. package/apps/cli/dist/commands/lib/relay-http.js +5 -15
  41. package/apps/cli/dist/commands/lib/scope.d.ts +4 -3
  42. package/apps/cli/dist/commands/lib/scope.js +10 -13
  43. package/apps/cli/dist/commands/lib/session-output.d.ts +12 -1
  44. package/apps/cli/dist/commands/lib/session-output.js +291 -57
  45. package/apps/cli/dist/commands/lib/session-view.js +1 -0
  46. package/apps/cli/dist/commands/lib/status.js +24 -7
  47. package/apps/cli/dist/commands/lib/types.d.ts +14 -6
  48. package/apps/cli/dist/commands/lib/types.js +1 -0
  49. package/apps/cli/dist/commands/lib/usage.js +186 -109
  50. package/apps/cli/dist/commands/lib/workspace.d.ts +6 -1
  51. package/apps/cli/dist/commands/lib/workspace.js +41 -2
  52. package/apps/cli/dist/commands/loop.js +17 -64
  53. package/apps/cli/dist/commands/machine.js +175 -9
  54. package/apps/cli/dist/commands/memory.d.ts +2 -0
  55. package/apps/cli/dist/commands/memory.js +179 -0
  56. package/apps/cli/dist/commands/queue.d.ts +2 -0
  57. package/apps/cli/dist/commands/queue.js +95 -0
  58. package/apps/cli/dist/commands/relay.d.ts +1 -1
  59. package/apps/cli/dist/commands/relay.js +335 -26
  60. package/apps/cli/dist/commands/release.d.ts +2 -0
  61. package/apps/cli/dist/commands/release.js +224 -0
  62. package/apps/cli/dist/commands/remote.js +13 -4
  63. package/apps/cli/dist/commands/schedule.d.ts +2 -0
  64. package/apps/cli/dist/commands/schedule.js +273 -0
  65. package/apps/cli/dist/commands/session.js +135 -210
  66. package/apps/cli/dist/commands/sidechat.d.ts +2 -0
  67. package/apps/cli/dist/commands/sidechat.js +72 -0
  68. package/apps/cli/dist/commands/token.js +27 -10
  69. package/apps/cli/dist/commands/turn.js +314 -22
  70. package/apps/cli/dist/commands/workspace.d.ts +2 -0
  71. package/apps/cli/dist/commands/workspace.js +68 -0
  72. package/apps/cli/dist/errors.js +1 -0
  73. package/apps/cli/dist/index.js +1 -0
  74. package/apps/cli/package.json +6 -0
  75. package/apps/daemon/dist/app.js +1 -0
  76. package/apps/daemon/dist/args.js +1 -0
  77. package/apps/daemon/dist/artifact/handler.d.ts +17 -0
  78. package/apps/daemon/dist/artifact/handler.js +858 -0
  79. package/apps/daemon/dist/artifact/pitch-review-sdk.d.ts +1 -0
  80. package/apps/daemon/dist/artifact/pitch-review-sdk.js +63 -0
  81. package/apps/daemon/dist/artifact/store.d.ts +141 -0
  82. package/apps/daemon/dist/artifact/store.js +652 -0
  83. package/apps/daemon/dist/artifact/vendor/lavish-axi/LICENSE +21 -0
  84. package/apps/daemon/dist/artifact/vendor/lavish-axi/artifact-sdk.js +2729 -0
  85. package/apps/daemon/dist/artifact/vendor/lavish-axi/mermaid-node.js +83 -0
  86. package/apps/daemon/dist/artifact/vendor/lavish-axi/table-cell.js +168 -0
  87. package/apps/daemon/dist/audit.js +1 -0
  88. package/apps/daemon/dist/cli.js +1 -0
  89. package/apps/daemon/dist/config.js +35 -0
  90. package/apps/daemon/dist/direct/server.d.ts +8 -0
  91. package/apps/daemon/dist/direct/server.js +1138 -0
  92. package/apps/daemon/dist/direct/state.d.ts +10 -0
  93. package/apps/daemon/dist/direct/state.js +8 -0
  94. package/apps/daemon/dist/direct/tickets.d.ts +65 -0
  95. package/apps/daemon/dist/direct/tickets.js +242 -0
  96. package/apps/daemon/dist/errors.js +1 -0
  97. package/apps/daemon/dist/gateway/adapters.d.ts +38 -0
  98. package/apps/daemon/dist/gateway/adapters.js +2 -0
  99. package/apps/daemon/dist/gateway/feishu.d.ts +65 -0
  100. package/apps/daemon/dist/gateway/feishu.js +493 -0
  101. package/apps/daemon/dist/gateway/format.d.ts +2 -0
  102. package/apps/daemon/dist/gateway/format.js +19 -0
  103. package/apps/daemon/dist/gateway/handler.d.ts +7 -0
  104. package/apps/daemon/dist/gateway/handler.js +162 -0
  105. package/apps/daemon/dist/gateway/runtime.d.ts +33 -0
  106. package/apps/daemon/dist/gateway/runtime.js +850 -0
  107. package/apps/daemon/dist/gateway/store.d.ts +92 -0
  108. package/apps/daemon/dist/gateway/store.js +268 -0
  109. package/apps/daemon/dist/local-control.d.ts +4 -0
  110. package/apps/daemon/dist/local-control.js +111 -0
  111. package/apps/daemon/dist/loop/runner.js +95 -101
  112. package/apps/daemon/dist/loop/store.js +8 -16
  113. package/apps/daemon/dist/memory/handler.d.ts +7 -0
  114. package/apps/daemon/dist/memory/handler.js +127 -0
  115. package/apps/daemon/dist/memory/manager.d.ts +44 -0
  116. package/apps/daemon/dist/memory/manager.js +359 -0
  117. package/apps/daemon/dist/memory/settings.d.ts +11 -0
  118. package/apps/daemon/dist/memory/settings.js +56 -0
  119. package/apps/daemon/dist/orchestration/crew-queue.d.ts +28 -0
  120. package/apps/daemon/dist/orchestration/crew-queue.js +865 -0
  121. package/apps/daemon/dist/orchestration/handler.d.ts +35 -0
  122. package/apps/daemon/dist/orchestration/handler.js +1517 -0
  123. package/apps/daemon/dist/orchestration/queue-state.d.ts +49 -0
  124. package/apps/daemon/dist/orchestration/queue-state.js +172 -0
  125. package/apps/daemon/dist/orchestration/remote-work-budget.d.ts +1 -0
  126. package/apps/daemon/dist/orchestration/remote-work-budget.js +51 -0
  127. package/apps/daemon/dist/orchestration/runner.d.ts +2 -0
  128. package/apps/daemon/dist/orchestration/runner.js +533 -0
  129. package/apps/daemon/dist/orchestration/store-file.d.ts +3 -0
  130. package/apps/daemon/dist/orchestration/store-file.js +20 -0
  131. package/apps/daemon/dist/orchestration/store.d.ts +295 -0
  132. package/apps/daemon/dist/orchestration/store.js +1564 -0
  133. package/apps/daemon/dist/orchestration/wake-identity.d.ts +13 -0
  134. package/apps/daemon/dist/orchestration/wake-identity.js +20 -0
  135. package/apps/daemon/dist/orchestration/watcher.d.ts +29 -0
  136. package/apps/daemon/dist/orchestration/watcher.js +435 -0
  137. package/apps/daemon/dist/pair.js +2 -1
  138. package/apps/daemon/dist/paths.d.ts +10 -1
  139. package/apps/daemon/dist/paths.js +11 -1
  140. package/apps/daemon/dist/process.d.ts +18 -2
  141. package/apps/daemon/dist/process.js +179 -15
  142. package/apps/daemon/dist/relay/admission.d.ts +44 -0
  143. package/apps/daemon/dist/relay/admission.js +238 -0
  144. package/apps/daemon/dist/relay/connection.d.ts +2 -0
  145. package/apps/daemon/dist/relay/connection.js +647 -18
  146. package/apps/daemon/dist/relay/devtools.js +84 -12
  147. package/apps/daemon/dist/relay/inbound-prompt.d.ts +14 -0
  148. package/apps/daemon/dist/relay/inbound-prompt.js +151 -0
  149. package/apps/daemon/dist/relay/prompt-admission-store.d.ts +49 -0
  150. package/apps/daemon/dist/relay/prompt-admission-store.js +352 -0
  151. package/apps/daemon/dist/relay/register.js +69 -27
  152. package/apps/daemon/dist/relay/remote-command.d.ts +22 -0
  153. package/apps/daemon/dist/relay/remote-command.js +164 -0
  154. package/apps/daemon/dist/relay/send.d.ts +11 -2
  155. package/apps/daemon/dist/relay/send.js +787 -28
  156. package/apps/daemon/dist/relay-http.js +1 -0
  157. package/apps/daemon/dist/runtime/headless-binding.d.ts +13 -0
  158. package/apps/daemon/dist/runtime/headless-binding.js +32 -0
  159. package/apps/daemon/dist/runtime/headless-event-projector.d.ts +55 -0
  160. package/apps/daemon/dist/runtime/headless-event-projector.js +1157 -0
  161. package/apps/daemon/dist/runtime/headless-history-reader.d.ts +14 -0
  162. package/apps/daemon/dist/runtime/headless-history-reader.js +125 -0
  163. package/apps/daemon/dist/runtime/headless-manager.d.ts +60 -0
  164. package/apps/daemon/dist/runtime/headless-manager.js +305 -0
  165. package/apps/daemon/dist/runtime/headless-official-tool-bridge.d.ts +4 -0
  166. package/apps/daemon/dist/runtime/headless-official-tool-bridge.js +95 -0
  167. package/apps/daemon/dist/runtime/headless-server-request.d.ts +17 -0
  168. package/apps/daemon/dist/runtime/headless-server-request.js +32 -0
  169. package/apps/daemon/dist/runtime/headless-session-context.d.ts +11 -0
  170. package/apps/daemon/dist/runtime/headless-session-context.js +41 -0
  171. package/apps/daemon/dist/runtime/headless-session-history.d.ts +13 -0
  172. package/apps/daemon/dist/runtime/headless-session-history.js +526 -0
  173. package/apps/daemon/dist/runtime/headless-session-primitives.d.ts +33 -0
  174. package/apps/daemon/dist/runtime/headless-session-primitives.js +64 -0
  175. package/apps/daemon/dist/runtime/headless-turn-inspector.d.ts +8 -0
  176. package/apps/daemon/dist/runtime/headless-turn-inspector.js +116 -0
  177. package/apps/daemon/dist/runtime/headless-turn-runner.d.ts +29 -0
  178. package/apps/daemon/dist/runtime/headless-turn-runner.js +388 -0
  179. package/apps/daemon/dist/runtime.d.ts +10 -5
  180. package/apps/daemon/dist/runtime.js +85 -61
  181. package/apps/daemon/dist/schedule/handler.d.ts +9 -0
  182. package/apps/daemon/dist/schedule/handler.js +159 -0
  183. package/apps/daemon/dist/schedule/runner.d.ts +21 -0
  184. package/apps/daemon/dist/schedule/runner.js +547 -0
  185. package/apps/daemon/dist/schedule/store.d.ts +9 -0
  186. package/apps/daemon/dist/schedule/store.js +143 -0
  187. package/apps/daemon/dist/session/create-session.js +8 -1
  188. package/apps/daemon/dist/session/directory.d.ts +1 -6
  189. package/apps/daemon/dist/session/directory.js +48 -106
  190. package/apps/daemon/dist/session/events.d.ts +8 -2
  191. package/apps/daemon/dist/session/events.js +145 -39
  192. package/apps/daemon/dist/session/file-preview.js +7 -3
  193. package/apps/daemon/dist/session/he-official/approval.d.ts +12 -0
  194. package/apps/daemon/dist/session/he-official/approval.js +52 -0
  195. package/apps/daemon/dist/session/he-official/artifact-commands.d.ts +6 -0
  196. package/apps/daemon/dist/session/he-official/artifact-commands.js +295 -0
  197. package/apps/daemon/dist/session/he-official/common.d.ts +432 -0
  198. package/apps/daemon/dist/session/he-official/common.js +326 -0
  199. package/apps/daemon/dist/session/he-official/delegate-commands.d.ts +5 -0
  200. package/apps/daemon/dist/session/he-official/delegate-commands.js +424 -0
  201. package/apps/daemon/dist/session/he-official/options.d.ts +4 -0
  202. package/apps/daemon/dist/session/he-official/options.js +72 -0
  203. package/apps/daemon/dist/session/he-official/orchestration-commands.d.ts +75 -0
  204. package/apps/daemon/dist/session/he-official/orchestration-commands.js +428 -0
  205. package/apps/daemon/dist/session/he-official/result.d.ts +34 -0
  206. package/apps/daemon/dist/session/he-official/result.js +292 -0
  207. package/apps/daemon/dist/session/he-official/session-commands.d.ts +20 -0
  208. package/apps/daemon/dist/session/he-official/session-commands.js +323 -0
  209. package/apps/daemon/dist/session/he-official/trace.d.ts +65 -0
  210. package/apps/daemon/dist/session/he-official/trace.js +210 -0
  211. package/apps/daemon/dist/session/he-official/turn-commands.d.ts +40 -0
  212. package/apps/daemon/dist/session/he-official/turn-commands.js +390 -0
  213. package/apps/daemon/dist/session/he-official-tools.d.ts +6 -0
  214. package/apps/daemon/dist/session/he-official-tools.js +102 -0
  215. package/apps/daemon/dist/session/history-backfill.d.ts +45 -0
  216. package/apps/daemon/dist/session/history-backfill.js +139 -0
  217. package/apps/daemon/dist/session/lifecycle.d.ts +9 -16
  218. package/apps/daemon/dist/session/lifecycle.js +770 -479
  219. package/apps/daemon/dist/session/metadata.d.ts +3 -2
  220. package/apps/daemon/dist/session/metadata.js +120 -14
  221. package/apps/daemon/dist/session/native-history-refresh.d.ts +25 -0
  222. package/apps/daemon/dist/session/native-history-refresh.js +282 -0
  223. package/apps/daemon/dist/session/native-identity.d.ts +21 -0
  224. package/apps/daemon/dist/session/native-identity.js +48 -0
  225. package/apps/daemon/dist/session/primitives.js +83 -68
  226. package/apps/daemon/dist/session/prompt.d.ts +43 -2
  227. package/apps/daemon/dist/session/prompt.js +1181 -162
  228. package/apps/daemon/dist/session/reconcile.d.ts +3 -0
  229. package/apps/daemon/dist/session/reconcile.js +236 -0
  230. package/apps/daemon/dist/session/runtime-read.d.ts +7 -0
  231. package/apps/daemon/dist/session/runtime-read.js +23 -0
  232. package/apps/daemon/dist/session/runtime-truth.d.ts +27 -0
  233. package/apps/daemon/dist/session/runtime-truth.js +471 -0
  234. package/apps/daemon/dist/session/sidechat.d.ts +11 -0
  235. package/apps/daemon/dist/session/sidechat.js +236 -0
  236. package/apps/daemon/dist/session/store.d.ts +21 -0
  237. package/apps/daemon/dist/session/store.js +245 -0
  238. package/apps/daemon/dist/start.js +47 -31
  239. package/apps/daemon/dist/state.d.ts +25 -6
  240. package/apps/daemon/dist/state.js +64 -0
  241. package/apps/daemon/dist/turn-coordinator.d.ts +3 -0
  242. package/apps/daemon/dist/turn-coordinator.js +11 -0
  243. package/apps/daemon/dist/types.d.ts +111 -28
  244. package/apps/daemon/dist/types.js +1 -0
  245. package/apps/daemon/dist/update-barrier.d.ts +26 -0
  246. package/apps/daemon/dist/update-barrier.js +89 -0
  247. package/apps/daemon/dist/utils.js +1 -0
  248. package/apps/daemon/package.json +1 -1
  249. package/apps/relay/dist/auth.js +7 -5
  250. package/apps/relay/dist/control-plane-store.d.ts +229 -0
  251. package/apps/relay/dist/control-plane-store.js +263 -0
  252. package/apps/relay/dist/db.d.ts +1 -2
  253. package/apps/relay/dist/db.js +57 -317
  254. package/apps/relay/dist/direct-ticket-grants.d.ts +1 -0
  255. package/apps/relay/dist/direct-ticket-grants.js +16 -0
  256. package/apps/relay/dist/errors.d.ts +2 -1
  257. package/apps/relay/dist/errors.js +4 -1
  258. package/apps/relay/dist/http-routes.js +215 -505
  259. package/apps/relay/dist/http-schemas.d.ts +58 -56
  260. package/apps/relay/dist/http-schemas.js +50 -47
  261. package/apps/relay/dist/index.js +89 -25
  262. package/apps/relay/dist/packet-store.d.ts +73 -0
  263. package/apps/relay/dist/packet-store.js +350 -0
  264. package/apps/relay/dist/relay-context.d.ts +268 -143
  265. package/apps/relay/dist/relay-context.js +525 -737
  266. package/apps/relay/dist/relay-migration.d.ts +49 -0
  267. package/apps/relay/dist/relay-migration.js +230 -0
  268. package/apps/relay/dist/retention.d.ts +10 -0
  269. package/apps/relay/dist/retention.js +22 -2
  270. package/apps/relay/dist/security.js +1 -0
  271. package/apps/relay/dist/storage-worker.d.ts +137 -0
  272. package/apps/relay/dist/storage-worker.js +493 -0
  273. package/apps/relay/dist/types.d.ts +37 -91
  274. package/apps/relay/dist/types.js +1 -0
  275. package/apps/relay/dist/websocket.d.ts +29 -0
  276. package/apps/relay/dist/websocket.js +968 -130
  277. package/apps/updater/dist/autostart.d.ts +14 -0
  278. package/apps/updater/dist/autostart.js +62 -0
  279. package/apps/updater/dist/cli.d.ts +2 -0
  280. package/apps/updater/dist/cli.js +111 -0
  281. package/apps/updater/dist/control.d.ts +5 -0
  282. package/apps/updater/dist/control.js +49 -0
  283. package/apps/updater/dist/daemon-config.d.ts +20 -0
  284. package/apps/updater/dist/daemon-config.js +29 -0
  285. package/apps/updater/dist/daemon.d.ts +29 -0
  286. package/apps/updater/dist/daemon.js +190 -0
  287. package/apps/updater/dist/host-jobs.d.ts +26 -0
  288. package/apps/updater/dist/host-jobs.js +544 -0
  289. package/apps/updater/dist/launcher.d.ts +9 -0
  290. package/apps/updater/dist/launcher.js +64 -0
  291. package/apps/updater/dist/node-runtime.d.ts +5 -0
  292. package/apps/updater/dist/node-runtime.js +40 -0
  293. package/apps/updater/dist/ownership.d.ts +37 -0
  294. package/apps/updater/dist/ownership.js +246 -0
  295. package/apps/updater/dist/paths.d.ts +33 -0
  296. package/apps/updater/dist/paths.js +53 -0
  297. package/apps/updater/dist/relay.d.ts +17 -0
  298. package/apps/updater/dist/relay.js +433 -0
  299. package/apps/updater/dist/release.d.ts +30 -0
  300. package/apps/updater/dist/release.js +166 -0
  301. package/apps/updater/dist/run.d.ts +5 -0
  302. package/apps/updater/dist/run.js +439 -0
  303. package/apps/updater/dist/slots.d.ts +15 -0
  304. package/apps/updater/dist/slots.js +48 -0
  305. package/apps/updater/dist/state.d.ts +37 -0
  306. package/apps/updater/dist/state.js +155 -0
  307. package/apps/updater/dist/supervisor.d.ts +46 -0
  308. package/apps/updater/dist/supervisor.js +406 -0
  309. package/package.json +19 -28
  310. package/packages/agent-sdk/dist/index.d.ts +8 -124
  311. package/packages/agent-sdk/dist/index.js +13 -198
  312. package/packages/client/dist/account.d.ts +20 -2
  313. package/packages/client/dist/account.js +169 -3
  314. package/packages/client/dist/client.d.ts +108 -12
  315. package/packages/client/dist/client.js +980 -146
  316. package/packages/client/dist/command-contracts.d.ts +6 -0
  317. package/packages/client/dist/command-contracts.js +22 -0
  318. package/packages/client/dist/direct.d.ts +12 -0
  319. package/packages/client/dist/direct.js +427 -0
  320. package/packages/client/dist/errors.d.ts +1 -0
  321. package/packages/client/dist/errors.js +1 -0
  322. package/packages/client/dist/http.d.ts +1 -1
  323. package/packages/client/dist/http.js +4 -15
  324. package/packages/client/dist/index.d.ts +3 -4
  325. package/packages/client/dist/index.js +1 -2
  326. package/packages/client/dist/parsers.d.ts +28 -1
  327. package/packages/client/dist/parsers.js +179 -19
  328. package/packages/client/dist/product-materializer.d.ts +39 -0
  329. package/packages/client/dist/product-materializer.js +492 -0
  330. package/packages/client/dist/transport.d.ts +57 -4
  331. package/packages/client/dist/transport.js +458 -185
  332. package/packages/client/dist/types.d.ts +390 -21
  333. package/packages/client/dist/types.js +1 -0
  334. package/packages/client/dist/update.d.ts +6 -0
  335. package/packages/client/dist/update.js +126 -0
  336. package/packages/client/dist/validation.d.ts +1 -2
  337. package/packages/client/dist/validation.js +1 -20
  338. package/packages/client/dist/workspace-shared-config.d.ts +23 -0
  339. package/packages/client/dist/workspace-shared-config.js +492 -0
  340. package/packages/headless-runtime/dist/claude-provider.d.ts +20 -0
  341. package/packages/headless-runtime/dist/claude-provider.js +1313 -0
  342. package/packages/{runtime-cli → headless-runtime}/dist/claude-session-store.d.ts +2 -1
  343. package/packages/{runtime-cli → headless-runtime}/dist/claude-session-store.js +34 -12
  344. package/packages/headless-runtime/dist/cli.d.ts +3 -0
  345. package/packages/headless-runtime/dist/cli.js +1243 -0
  346. package/packages/headless-runtime/dist/client.d.ts +78 -0
  347. package/packages/headless-runtime/dist/client.js +493 -0
  348. package/packages/headless-runtime/dist/codex-provider.d.ts +9 -0
  349. package/packages/headless-runtime/dist/codex-provider.js +1825 -0
  350. package/packages/headless-runtime/dist/core.d.ts +373 -0
  351. package/packages/headless-runtime/dist/core.js +3653 -0
  352. package/packages/headless-runtime/dist/event-log.d.ts +11 -0
  353. package/packages/headless-runtime/dist/event-log.js +257 -0
  354. package/packages/headless-runtime/dist/history-index.d.ts +28 -0
  355. package/packages/headless-runtime/dist/history-index.js +72 -0
  356. package/packages/headless-runtime/dist/host-tools.d.ts +21 -0
  357. package/packages/headless-runtime/dist/host-tools.js +252 -0
  358. package/packages/headless-runtime/dist/host.d.ts +63 -0
  359. package/packages/headless-runtime/dist/host.js +451 -0
  360. package/packages/headless-runtime/dist/index.d.ts +45 -0
  361. package/packages/headless-runtime/dist/index.js +528 -0
  362. package/packages/headless-runtime/dist/ipc.d.ts +4 -0
  363. package/packages/headless-runtime/dist/ipc.js +28 -0
  364. package/packages/headless-runtime/dist/mock-scenario.d.ts +7 -0
  365. package/packages/headless-runtime/dist/mock-scenario.js +65 -0
  366. package/packages/headless-runtime/dist/model-catalog.d.ts +21 -0
  367. package/packages/headless-runtime/dist/model-catalog.js +271 -0
  368. package/packages/headless-runtime/dist/provider-command.d.ts +10 -0
  369. package/packages/headless-runtime/dist/provider-command.js +432 -0
  370. package/packages/headless-runtime/dist/provider-turn-metadata.d.ts +9 -0
  371. package/packages/headless-runtime/dist/provider-turn-metadata.js +76 -0
  372. package/packages/headless-runtime/dist/public-response.d.ts +9 -0
  373. package/packages/headless-runtime/dist/public-response.js +112 -0
  374. package/packages/headless-runtime/dist/runtime-projection-store.d.ts +50 -0
  375. package/packages/headless-runtime/dist/runtime-projection-store.js +349 -0
  376. package/packages/headless-runtime/dist/trace-log.d.ts +31 -0
  377. package/packages/headless-runtime/dist/trace-log.js +106 -0
  378. package/packages/pie-provider/dist/index.d.ts +1 -0
  379. package/packages/pie-provider/dist/index.js +927 -740
  380. package/packages/runtime/dist/headless.d.ts +648 -0
  381. package/packages/runtime/dist/headless.js +3 -0
  382. package/packages/runtime/dist/index.d.ts +250 -110
  383. package/packages/runtime/dist/index.js +1 -0
  384. package/packages/shared/dist/args.d.ts +2 -0
  385. package/packages/shared/dist/args.js +9 -2
  386. package/packages/shared/dist/crypto.d.ts +2 -0
  387. package/packages/shared/dist/crypto.js +6 -0
  388. package/packages/shared/dist/diagnostics.d.ts +31 -0
  389. package/packages/shared/dist/diagnostics.js +81 -0
  390. package/packages/shared/dist/file-lock.d.ts +29 -0
  391. package/packages/shared/dist/file-lock.js +301 -0
  392. package/packages/shared/dist/he-official-tools.d.ts +78 -0
  393. package/packages/shared/dist/he-official-tools.js +737 -0
  394. package/packages/shared/dist/ids.d.ts +1 -0
  395. package/packages/shared/dist/ids.js +1 -0
  396. package/packages/shared/dist/index.d.ts +8 -0
  397. package/packages/shared/dist/index.js +8 -0
  398. package/packages/shared/dist/orchestration-routing.d.ts +10 -0
  399. package/packages/shared/dist/orchestration-routing.js +113 -0
  400. package/packages/shared/dist/packet-relay.d.ts +230 -0
  401. package/packages/shared/dist/packet-relay.js +124 -0
  402. package/packages/shared/dist/protocol-schemas.d.ts +2943 -40
  403. package/packages/shared/dist/protocol-schemas.js +889 -1
  404. package/packages/shared/dist/protocol-types.d.ts +904 -3
  405. package/packages/shared/dist/protocol-types.js +1 -0
  406. package/packages/shared/dist/protocol.d.ts +749 -23
  407. package/packages/shared/dist/protocol.js +836 -26
  408. package/packages/shared/dist/relay-scope.d.ts +32 -0
  409. package/packages/shared/dist/relay-scope.js +23 -0
  410. package/packages/shared/dist/session-name.d.ts +1 -0
  411. package/packages/shared/dist/session-name.js +1 -0
  412. package/packages/shared/dist/session-state.d.ts +2 -1
  413. package/packages/shared/dist/session-state.js +1 -0
  414. package/packages/shared/dist/session-tags.d.ts +12 -0
  415. package/packages/shared/dist/session-tags.js +50 -0
  416. package/packages/update-protocol/dist/index.d.ts +317 -0
  417. package/packages/update-protocol/dist/index.js +126 -0
  418. package/apps/cli/dist/commands/lib/orchestrator.d.ts +0 -30
  419. package/apps/cli/dist/commands/lib/orchestrator.js +0 -146
  420. package/apps/cli/dist/commands/orchestrator.d.ts +0 -2
  421. package/apps/cli/dist/commands/orchestrator.js +0 -411
  422. package/apps/cli/dist/commands/skill.d.ts +0 -2
  423. package/apps/cli/dist/commands/skill.js +0 -214
  424. package/apps/daemon/dist/runtime/external-provider.d.ts +0 -20
  425. package/apps/daemon/dist/runtime/external-provider.js +0 -931
  426. package/apps/daemon/dist/session/runtime-handle.d.ts +0 -7
  427. package/apps/daemon/dist/session/runtime-handle.js +0 -47
  428. package/apps/daemon/dist/session/workspace-paths.d.ts +0 -3
  429. package/apps/daemon/dist/session/workspace-paths.js +0 -30
  430. package/apps/relay/dist/connections.d.ts +0 -29
  431. package/apps/relay/dist/connections.js +0 -10
  432. package/apps/relay/dist/controller-handlers.d.ts +0 -54
  433. package/apps/relay/dist/controller-handlers.js +0 -921
  434. package/apps/relay/dist/event-visibility.d.ts +0 -7
  435. package/apps/relay/dist/event-visibility.js +0 -46
  436. package/apps/relay/dist/machine-command-result-handlers.d.ts +0 -4
  437. package/apps/relay/dist/machine-command-result-handlers.js +0 -532
  438. package/apps/relay/dist/machine-handler-context.d.ts +0 -79
  439. package/apps/relay/dist/machine-handler-context.js +0 -1
  440. package/apps/relay/dist/machine-handlers.d.ts +0 -4
  441. package/apps/relay/dist/machine-handlers.js +0 -20
  442. package/apps/relay/dist/machine-reliability.d.ts +0 -7
  443. package/apps/relay/dist/machine-reliability.js +0 -12
  444. package/apps/relay/dist/projection-repository.d.ts +0 -87
  445. package/apps/relay/dist/projection-repository.js +0 -220
  446. package/apps/relay/dist/projections.d.ts +0 -7
  447. package/apps/relay/dist/projections.js +0 -124
  448. package/apps/relay/dist/repositories.d.ts +0 -13
  449. package/apps/relay/dist/repositories.js +0 -71
  450. package/apps/relay/dist/scope.d.ts +0 -33
  451. package/apps/relay/dist/scope.js +0 -187
  452. package/apps/relay/dist/session-projection-reducer.d.ts +0 -4
  453. package/apps/relay/dist/session-projection-reducer.js +0 -448
  454. package/npm-shrinkwrap.json +0 -1615
  455. package/packages/client/dist/live-session-state.d.ts +0 -15
  456. package/packages/client/dist/live-session-state.js +0 -60
  457. package/packages/client/dist/live-state.d.ts +0 -8
  458. package/packages/client/dist/live-state.js +0 -33
  459. package/packages/client/dist/live-types.d.ts +0 -113
  460. package/packages/client/dist/live-types.js +0 -1
  461. package/packages/client/dist/live.d.ts +0 -85
  462. package/packages/client/dist/live.js +0 -1056
  463. package/packages/client/dist/session-event-order.d.ts +0 -16
  464. package/packages/client/dist/session-event-order.js +0 -83
  465. package/packages/client/dist/session-event-window.d.ts +0 -5
  466. package/packages/client/dist/session-event-window.js +0 -54
  467. package/packages/provider-protocol/dist/index.d.ts +0 -843
  468. package/packages/provider-protocol/dist/index.js +0 -332
  469. package/packages/runtime-acpx/dist/index.d.ts +0 -10
  470. package/packages/runtime-acpx/dist/index.js +0 -111
  471. package/packages/runtime-cli/dist/async-queue.d.ts +0 -9
  472. package/packages/runtime-cli/dist/async-queue.js +0 -31
  473. package/packages/runtime-cli/dist/claude-history.d.ts +0 -6
  474. package/packages/runtime-cli/dist/claude-history.js +0 -343
  475. package/packages/runtime-cli/dist/claude-json.d.ts +0 -28
  476. package/packages/runtime-cli/dist/claude-json.js +0 -28
  477. package/packages/runtime-cli/dist/claude-rename.d.ts +0 -5
  478. package/packages/runtime-cli/dist/claude-rename.js +0 -14
  479. package/packages/runtime-cli/dist/claude-turn.d.ts +0 -12
  480. package/packages/runtime-cli/dist/claude-turn.js +0 -131
  481. package/packages/runtime-cli/dist/codex-app-server.d.ts +0 -69
  482. package/packages/runtime-cli/dist/codex-app-server.js +0 -462
  483. package/packages/runtime-cli/dist/codex-approvals.d.ts +0 -7
  484. package/packages/runtime-cli/dist/codex-approvals.js +0 -32
  485. package/packages/runtime-cli/dist/codex-history.d.ts +0 -16
  486. package/packages/runtime-cli/dist/codex-history.js +0 -748
  487. package/packages/runtime-cli/dist/codex-json-rpc.d.ts +0 -29
  488. package/packages/runtime-cli/dist/codex-json-rpc.js +0 -198
  489. package/packages/runtime-cli/dist/codex-lifecycle.d.ts +0 -24
  490. package/packages/runtime-cli/dist/codex-lifecycle.js +0 -71
  491. package/packages/runtime-cli/dist/codex-protocol.d.ts +0 -5
  492. package/packages/runtime-cli/dist/codex-protocol.js +0 -52
  493. package/packages/runtime-cli/dist/command-resolver.d.ts +0 -23
  494. package/packages/runtime-cli/dist/command-resolver.js +0 -100
  495. package/packages/runtime-cli/dist/history-merge.d.ts +0 -17
  496. package/packages/runtime-cli/dist/history-merge.js +0 -286
  497. package/packages/runtime-cli/dist/index.d.ts +0 -10
  498. package/packages/runtime-cli/dist/index.js +0 -265
  499. package/packages/runtime-cli/dist/permissions.d.ts +0 -5
  500. package/packages/runtime-cli/dist/permissions.js +0 -21
  501. package/packages/runtime-cli/dist/session-store.d.ts +0 -33
  502. package/packages/runtime-cli/dist/session-store.js +0 -98
package/README.md CHANGED
@@ -2,16 +2,19 @@
2
2
 
3
3
  Public beta CLI for Happy Elves.
4
4
 
5
+ ## First-time hosted machine attach (Windows)
6
+
7
+ Run once in the existing user account; it detects %USERPROFILE%\.happy-elves\hosted, keeps the current daemon and sessions running, installs the independent updater, and registers per-user startup.
8
+
9
+ npm.cmd install --prefix $HOME\.happy-elves\management-entry --ignore-scripts --no-audit --no-fund --package-lock=false @cydm/happy-elves@0.1.0-beta.500
10
+ npm.cmd exec --yes --package @cydm/happy-elves@0.1.0-beta.500 -- happy-elves-updater install --state-root $HOME\.happy-elves\hosted --autostart
11
+
12
+ The same updater entrypoint works on macOS after selecting a permanent user prefix.
13
+
5
14
  ## Hosted relay
6
15
 
7
- ```bash
8
- happy-elves account create --relay https://relay.happyelves.ai --device-name "CLI" --json
9
- ```
16
+ happy-elves account create --relay https://relay.happyelves.ai --device-name CLI --json
10
17
 
11
18
  ## Self-host relay
12
19
 
13
- ```bash
14
- HAPPY_ELVES_ENV=production \
15
- HAPPY_ELVES_ALLOWED_ORIGINS=https://your-controller.example \
16
- happy-elves relay serve --host 0.0.0.0 --port 8787 --json
17
- ```
20
+ happy-elves relay serve --host 0.0.0.0 --port 8787 --json
@@ -49,3 +49,4 @@ export async function handleAccount({ domain, action, flags }) {
49
49
  }
50
50
  return false;
51
51
  }
52
+ //# sourceMappingURL=account.js.map
@@ -4,15 +4,22 @@ import { handleAccount } from "./account.js";
4
4
  import { handleCollect } from "./collect.js";
5
5
  import { handleConfig } from "./config.js";
6
6
  import { handleDaemon } from "./daemon.js";
7
+ import { handleDispatch } from "./dispatch.js";
8
+ import { handleArtifact } from "./artifact.js";
9
+ import { handleGateway } from "./gateway.js";
7
10
  import { handleLoop } from "./loop.js";
8
11
  import { handleMachine } from "./machine.js";
9
- import { handleOrchestrator } from "./orchestrator.js";
12
+ import { handleMemory } from "./memory.js";
13
+ import { handleQueue } from "./queue.js";
10
14
  import { handleRelay } from "./relay.js";
15
+ import { handleRelease } from "./release.js";
16
+ import { handleSchedule } from "./schedule.js";
11
17
  import { handleRemote } from "./remote.js";
12
18
  import { handleSession } from "./session.js";
13
- import { handleSkill } from "./skill.js";
19
+ import { handleSidechat } from "./sidechat.js";
14
20
  import { handleToken } from "./token.js";
15
21
  import { handleTurn } from "./turn.js";
22
+ import { handleWorkspace } from "./workspace.js";
16
23
  import { commandUsage, commandUsageText, handleCliError, parseCliFlags, skillText, startBootstrap, topLevelDoctor, topLevelStatus, usage, usageText } from "./lib/index.js";
17
24
  export { handleCliError };
18
25
  const domainHandlers = [
@@ -20,14 +27,21 @@ const domainHandlers = [
20
27
  handleConfig,
21
28
  handleRemote,
22
29
  handleToken,
30
+ handleGateway,
23
31
  handleLoop,
32
+ handleDispatch,
33
+ handleQueue,
34
+ handleArtifact,
35
+ handleSidechat,
24
36
  handleDaemon,
25
37
  handleRelay,
38
+ handleRelease,
26
39
  handleMachine,
27
- handleOrchestrator,
40
+ handleMemory,
41
+ handleSchedule,
28
42
  handleSession,
29
- handleSkill,
30
43
  handleTurn,
44
+ handleWorkspace,
31
45
  handleCollect,
32
46
  ];
33
47
  export async function main() {
@@ -35,7 +49,7 @@ export async function main() {
35
49
  const [domain] = argv;
36
50
  if (!domain)
37
51
  usage();
38
- if (domain === "--skill") {
52
+ if (domain === "--skill" || domain === "skill") {
39
53
  console.log(skillText());
40
54
  return;
41
55
  }
@@ -101,3 +115,4 @@ function cliVersion() {
101
115
  }
102
116
  return "0.1.0";
103
117
  }
118
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1,2 @@
1
+ import type { CommandInput } from "./command.js";
2
+ export declare function handleArtifact({ domain, action, positional, flags }: CommandInput): Promise<boolean>;
@@ -0,0 +1,97 @@
1
+ import { CliError, ControllerClient, ok, readConfig, requirePositional, requireString, wantsJson, } from "./lib/index.js";
2
+ export async function handleArtifact({ domain, action, positional, flags }) {
3
+ if (domain !== "artifact")
4
+ return false;
5
+ const config = await readConfig(flags);
6
+ const client = new ControllerClient(config);
7
+ if (action === "register") {
8
+ const machineId = requireString(flags, "machine");
9
+ const consumerSessionId = requireString(flags, "consumer-session");
10
+ const file = requireString(flags, "file");
11
+ const publish = typeof flags.publish === "string" ? flags.publish : undefined;
12
+ if (publish !== undefined && publish !== "relay") {
13
+ throw new CliError(`Unsupported --publish value: ${publish}`, "INVALID_ARGUMENT");
14
+ }
15
+ const result = await client.artifactRegister({
16
+ machineId,
17
+ consumerSessionId,
18
+ file,
19
+ ...(typeof flags["artifact-id"] === "string" ? { artifactId: flags["artifact-id"] } : {}),
20
+ ...(typeof flags["task-id"] === "string" ? { taskId: flags["task-id"] } : {}),
21
+ ...(typeof flags["crew-session"] === "string" ? { crewSessionId: flags["crew-session"] } : {}),
22
+ ...(typeof flags["turn-id"] === "string" ? { turnId: flags["turn-id"] } : {}),
23
+ ...(typeof flags.title === "string" ? { title: flags.title } : {}),
24
+ ...(typeof flags["request-id"] === "string" ? { requestId: flags["request-id"] } : {}),
25
+ ...(publish === "relay" ? { publish: "relay" } : {}),
26
+ });
27
+ if (!wantsJson(flags)) {
28
+ console.log(`${result.artifactId} rev:${result.revision} ${result.admission}/${result.publishState} ${result.url}`);
29
+ if (result.publishState === "failed")
30
+ process.exitCode = 1;
31
+ return true;
32
+ }
33
+ ok("artifact.register", result, { requestId: result.requestId, machineId }, result.publishState !== "failed");
34
+ if (result.publishState === "failed")
35
+ process.exitCode = 1;
36
+ return true;
37
+ }
38
+ if (action === "list") {
39
+ const machineId = requireString(flags, "machine");
40
+ const result = await client.artifactList({
41
+ machineId,
42
+ ...(typeof flags["consumer-session"] === "string" ? { consumerSessionId: flags["consumer-session"] } : {}),
43
+ ...(typeof flags["task-id"] === "string" ? { taskId: flags["task-id"] } : {}),
44
+ ...(typeof flags["request-id"] === "string" ? { requestId: flags["request-id"] } : {}),
45
+ });
46
+ if (!wantsJson(flags)) {
47
+ if (result.records.length === 0)
48
+ console.log("No artifacts.");
49
+ else
50
+ for (const record of result.records) {
51
+ console.log(`${record.artifactId} rev:${record.revision} ${record.publishState} consumer:${record.consumerSessionId} task:${record.taskId ?? "-"}`);
52
+ }
53
+ return true;
54
+ }
55
+ ok("artifact.list", result, { requestId: result.requestId, machineId });
56
+ return true;
57
+ }
58
+ if (action === "status") {
59
+ const machineId = requireString(flags, "machine");
60
+ const artifactId = requirePositional(positional[0], "artifactId");
61
+ const result = await client.artifactStatus({
62
+ machineId,
63
+ artifactId,
64
+ ...(typeof flags["request-id"] === "string" ? { requestId: flags["request-id"] } : {}),
65
+ });
66
+ if (!wantsJson(flags)) {
67
+ const artifact = result.artifact;
68
+ console.log(artifact ? `${artifact.artifactId} rev:${artifact.revision} ${artifact.publishState} feedback:${artifact.feedbackCursor ?? "-"}` : "Artifact not found.");
69
+ return true;
70
+ }
71
+ ok("artifact.status", result, { requestId: result.requestId, machineId });
72
+ return true;
73
+ }
74
+ if (action === "feedback" && positional[0] === "list") {
75
+ const machineId = requireString(flags, "machine");
76
+ const artifactId = requirePositional(positional[1], "artifactId");
77
+ const result = await client.artifactFeedbackList({
78
+ machineId,
79
+ artifactId,
80
+ ...(typeof flags.after === "string" ? { after: flags.after } : {}),
81
+ ...(typeof flags["request-id"] === "string" ? { requestId: flags["request-id"] } : {}),
82
+ });
83
+ if (!wantsJson(flags)) {
84
+ if (result.records.length === 0)
85
+ console.log("No feedback.");
86
+ else
87
+ for (const record of result.records) {
88
+ console.log(`${record.feedbackCursor} ${record.kind} rev:${record.revision} ${record.prompt}`);
89
+ }
90
+ return true;
91
+ }
92
+ ok("artifact.feedback.list", result, { requestId: result.requestId, machineId });
93
+ return true;
94
+ }
95
+ return false;
96
+ }
97
+ //# sourceMappingURL=artifact.js.map
@@ -28,3 +28,4 @@ export async function handleCollect({ domain, action, flags }) {
28
28
  }
29
29
  return true;
30
30
  }
31
+ //# sourceMappingURL=collect.js.map
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=command.js.map
@@ -1,4 +1,4 @@
1
- import { configPath, ok, readConfig, redactedControllerConfig, redactedRelayUrl, requireRelayUrl, requireString, wantsJson, writeConfig } from "./lib/index.js";
1
+ import { configPath, ok, readConfig, redactedControllerConfig, requireRelayUrl, requireString, wantsJson, writeConfig } from "./lib/index.js";
2
2
  export async function handleConfig({ domain, action, flags }) {
3
3
  if (domain === "config" && action === "init") {
4
4
  const config = {
@@ -7,7 +7,7 @@ export async function handleConfig({ domain, action, flags }) {
7
7
  accountSecret: requireString(flags, "secret"),
8
8
  };
9
9
  await writeConfig(config);
10
- ok("config.init", { path: configPath, relayUrl: redactedRelayUrl(config.relayUrl) });
10
+ ok("config.init", { path: configPath, relayUrl: config.relayUrl });
11
11
  return true;
12
12
  }
13
13
  if (domain === "config" && action === "show") {
@@ -28,3 +28,4 @@ export async function handleConfig({ domain, action, flags }) {
28
28
  }
29
29
  return false;
30
30
  }
31
+ //# sourceMappingURL=config.js.map
@@ -1,6 +1,6 @@
1
1
  import os from "node:os";
2
2
  import path from "node:path";
3
- import { CliError, compactText, ControllerClient, configDir, configPath, daemonPidPath, deriveOrchestration, idleSessionStatuses, localDaemonStatus, ok, parsePairingClaimResponse, randomId, readConfig, readDaemonConfig, readLocalAuditLog, readRelayJson, redactedDaemonConfig, requirePositional, requireRelayUrl, requireString, showMachine, spawnDaemonStart, stopLocalDaemon, throwRelayHttpError, wantsJson, writeDaemonConfig } from "./lib/index.js";
3
+ import { CliError, compactText, ControllerClient, configDir, configPath, deriveOrchestration, ensureDaemonRunning, idleSessionStatuses, localDaemonStatus, ok, parsePairingClaimResponse, randomId, readConfig, readDaemonConfig, readLocalAuditLog, readRelayJson, redactedDaemonConfig, requirePositional, requireRelayUrl, requireString, restartDaemonForNewConfig, showMachine, stopLocalDaemon, throwRelayHttpError, waitForMachineProjection, wantsJson, writeDaemonConfig } from "./lib/index.js";
4
4
  export async function handleDaemon({ domain, action, flags }) {
5
5
  if (domain === "daemon" && action === "pair") {
6
6
  const relayUrl = requireRelayUrl(flags);
@@ -25,11 +25,87 @@ export async function handleDaemon({ domain, action, flags }) {
25
25
  machineToken: claimed.machineToken,
26
26
  accountSecret,
27
27
  };
28
+ const localBefore = await localDaemonStatus();
28
29
  const daemonConfigPath = await writeDaemonConfig(daemonConfig);
29
- ok("daemon.pair", {
30
+ let daemonStart = { skipped: true, reason: "not requested" };
31
+ let projection = { checked: false, reason: "not checked" };
32
+ let startError;
33
+ if (flags["no-start"] === true) {
34
+ daemonStart = { skipped: true, reason: "--no-start" };
35
+ projection = { checked: false, reason: "--no-start" };
36
+ }
37
+ else {
38
+ try {
39
+ const startResult = localBefore.running
40
+ ? await restartDaemonForNewConfig(relayUrl)
41
+ : await ensureDaemonRunning(relayUrl);
42
+ daemonStart = {
43
+ skipped: false,
44
+ restarted: localBefore.running,
45
+ local: startResult.local,
46
+ started: startResult.started,
47
+ ...(startResult.startedPid ? { startedPid: startResult.startedPid } : {}),
48
+ ...("stopped" in startResult ? { stop: startResult.stopped } : {}),
49
+ };
50
+ try {
51
+ const controllerConfig = await readConfig({ relay: relayUrl });
52
+ const machine = await waitForMachineProjection(new ControllerClient(controllerConfig), claimed.machineId, 10_000);
53
+ projection = {
54
+ checked: true,
55
+ online: machine?.online === true,
56
+ machineId: claimed.machineId,
57
+ ...(machine?.lastSeen ? { lastSeen: machine.lastSeen } : {}),
58
+ };
59
+ }
60
+ catch (error) {
61
+ projection = {
62
+ checked: false,
63
+ reason: error instanceof Error ? error.message : String(error),
64
+ };
65
+ }
66
+ }
67
+ catch (error) {
68
+ const code = error instanceof CliError ? error.code : "DAEMON_START_FAILED";
69
+ startError = { code, message: error instanceof Error ? error.message : String(error) };
70
+ process.exitCode = 1;
71
+ daemonStart = { skipped: true, reason: "start failed" };
72
+ projection = { checked: false, reason: "daemon did not start" };
73
+ }
74
+ }
75
+ const data = {
30
76
  path: daemonConfigPath,
31
77
  config: redactedDaemonConfig(daemonConfig),
32
- });
78
+ daemon: daemonStart,
79
+ projection,
80
+ ...(startError ? { error: startError } : {}),
81
+ };
82
+ const commandOk = !startError && !(projection.checked && !projection.online);
83
+ if (!commandOk)
84
+ process.exitCode = 1;
85
+ if (!wantsJson(flags)) {
86
+ console.log(`Paired ${machineName} with ${relayUrl}`);
87
+ console.log(`Config: ${daemonConfigPath}`);
88
+ if (startError) {
89
+ console.error(`Daemon start failed: ${startError.message}`);
90
+ }
91
+ else if (daemonStart.skipped) {
92
+ console.log(`Daemon start: skipped (${daemonStart.reason})`);
93
+ }
94
+ else {
95
+ console.log(`${daemonStart.restarted ? "Restarted" : "Started"} daemon${daemonStart.startedPid ? ` pid ${daemonStart.startedPid}` : ""}`);
96
+ }
97
+ if (projection.checked) {
98
+ console.log(`Relay projection: ${projection.online ? "online" : "offline"} (${projection.machineId})`);
99
+ if (!projection.online) {
100
+ console.log("If this stays offline, run happy-elves daemon logs --tail 100 and happy-elves daemon status --local.");
101
+ }
102
+ }
103
+ else {
104
+ console.log(`Relay projection: not checked (${projection.reason})`);
105
+ }
106
+ return true;
107
+ }
108
+ ok("daemon.pair", data, { machineId: claimed.machineId }, commandOk);
33
109
  return true;
34
110
  }
35
111
  if (domain === "daemon" && action === "doctor") {
@@ -57,9 +133,13 @@ export async function handleDaemon({ domain, action, flags }) {
57
133
  for (const check of checks) {
58
134
  console.log(`${check.ok ? "ok" : "fail"} ${check.name}: ${check.message}`);
59
135
  }
136
+ if (!data.ok)
137
+ process.exitCode = 1;
60
138
  return true;
61
139
  }
62
- ok("daemon.doctor", data);
140
+ if (!data.ok)
141
+ process.exitCode = 1;
142
+ ok("daemon.doctor", data, {}, data.ok);
63
143
  return true;
64
144
  }
65
145
  if (domain === "daemon" && action === "config") {
@@ -114,13 +194,21 @@ export async function handleDaemon({ domain, action, flags }) {
114
194
  if (domain === "daemon" && action === "start") {
115
195
  const status = await localDaemonStatus();
116
196
  if (status.running) {
197
+ const existingConfig = await readDaemonConfig();
198
+ if (typeof flags.relay === "string")
199
+ existingConfig.relayUrl = requireRelayUrl(flags);
200
+ const restarted = await ensureDaemonRunning(existingConfig.relayUrl);
201
+ if (restarted.started) {
202
+ ok("daemon.start", { ...restarted.local, started: true, startedPid: restarted.startedPid, restartedForChangedConfig: true });
203
+ return true;
204
+ }
117
205
  ok("daemon.start", { ...status, started: false });
118
206
  return true;
119
207
  }
120
- await readDaemonConfig();
121
- const startArgs = typeof flags.relay === "string" ? ["--relay", flags.relay] : [];
122
- const pid = spawnDaemonStart(startArgs);
123
- ok("daemon.start", { pid, pidPath: daemonPidPath, started: true });
208
+ const daemonConfig = await readDaemonConfig();
209
+ const relayUrl = typeof flags.relay === "string" ? requireRelayUrl(flags) : daemonConfig.relayUrl;
210
+ const started = await ensureDaemonRunning(relayUrl);
211
+ ok("daemon.start", { ...started.local, started: started.started, startedPid: started.startedPid, startupLogPath: path.join(configDir, "daemon.startup.log") });
124
212
  return true;
125
213
  }
126
214
  if (domain === "daemon" && action === "stop") {
@@ -128,11 +216,10 @@ export async function handleDaemon({ domain, action, flags }) {
128
216
  return true;
129
217
  }
130
218
  if (domain === "daemon" && action === "restart") {
131
- await readDaemonConfig();
132
- const stop = await stopLocalDaemon();
133
- const startArgs = typeof flags.relay === "string" ? ["--relay", flags.relay] : [];
134
- const pid = spawnDaemonStart(startArgs);
135
- ok("daemon.restart", { stop, startedPid: pid, pidPath: daemonPidPath });
219
+ const daemonConfig = await readDaemonConfig();
220
+ const relayUrl = typeof flags.relay === "string" ? requireRelayUrl(flags) : daemonConfig.relayUrl;
221
+ const restarted = await restartDaemonForNewConfig(relayUrl);
222
+ ok("daemon.restart", { stop: restarted.stopped, ...restarted.local, startedPid: restarted.startedPid, startupLogPath: path.join(configDir, "daemon.startup.log") });
136
223
  return true;
137
224
  }
138
225
  if (domain === "daemon" && action === "status" && flags.local === true) {
@@ -216,3 +303,4 @@ export async function handleDaemon({ domain, action, flags }) {
216
303
  }
217
304
  return false;
218
305
  }
306
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1,2 @@
1
+ import type { CommandInput } from "./command.js";
2
+ export declare function handleDispatch({ domain, action, positional, flags }: CommandInput): Promise<boolean>;
@@ -0,0 +1,130 @@
1
+ import { CliError, ControllerClient, ok, parsePermissionMode, readConfig, readPromptTextFile, requirePositional, requireString, wantsJson, } from "./lib/index.js";
2
+ export async function handleDispatch({ domain, action, positional, flags }) {
3
+ if (domain !== "dispatch")
4
+ return false;
5
+ const config = await readConfig(flags);
6
+ const client = new ControllerClient(config);
7
+ if (action === "run") {
8
+ const machineId = requireString(flags, "machine");
9
+ const consumerSessionId = requireString(flags, "consumer-session");
10
+ const agent = requireString(flags, "agent");
11
+ const cwd = requireString(flags, "cwd");
12
+ const briefFile = requireString(flags, "brief-file");
13
+ const brief = await readPromptTextFile(briefFile);
14
+ if (!brief.trim())
15
+ throw new CliError("--brief-file is empty", "MISSING_ARGUMENT");
16
+ if (typeof flags["crew-session"] === "string" && typeof flags["fork-from-crew"] === "string") {
17
+ throw new CliError("--crew-session and --fork-from-crew are mutually exclusive", "INVALID_ARGUMENT");
18
+ }
19
+ const routeDecision = routeDecisionFromFlags(flags);
20
+ const permissionMode = parsePermissionMode(flags["permission-mode"] ?? flags.permission);
21
+ const result = await client.dispatchRun({
22
+ machineId,
23
+ consumerSessionId,
24
+ agent,
25
+ cwd,
26
+ brief,
27
+ ...(typeof flags["task-id"] === "string" ? { taskId: flags["task-id"] } : {}),
28
+ ...(typeof flags["request-id"] === "string" ? { requestId: flags["request-id"] } : {}),
29
+ ...(typeof flags["crew-session"] === "string" ? { crewSessionId: flags["crew-session"] } : {}),
30
+ ...(typeof flags["fork-from-crew"] === "string" ? { forkFromCrewSessionId: flags["fork-from-crew"] } : {}),
31
+ ...(typeof flags["fork-checkpoint"] === "string" ? { forkCheckpointId: flags["fork-checkpoint"] } : {}),
32
+ ...(routeDecision ? { routeDecision } : {}),
33
+ ...(permissionMode ? { permissionMode } : {}),
34
+ ...(typeof flags.model === "string" ? { model: flags.model } : {}),
35
+ ...(typeof flags["thinking-level"] === "string" ? { thinkingLevel: flags["thinking-level"] } : {}),
36
+ subscribe: flags.subscribe !== false,
37
+ });
38
+ if (!wantsJson(flags)) {
39
+ console.log(`${result.taskId} ${result.admission}/${result.dispatch} owner:${result.consumerMachineId ?? "-"} crewMachine:${result.crewMachineId ?? machineId} crew:${result.crewSessionId ?? "-"} turn:${result.turnId ?? "-"}`);
40
+ return true;
41
+ }
42
+ ok("dispatch.run", result, {
43
+ requestId: result.requestId,
44
+ machineId: result.consumerMachineId ?? machineId,
45
+ consumerMachineId: result.consumerMachineId ?? machineId,
46
+ crewMachineId: result.crewMachineId ?? machineId,
47
+ sessionId: result.crewSessionId,
48
+ turnId: result.turnId,
49
+ }, result.dispatch !== "failed");
50
+ return true;
51
+ }
52
+ if (action === "status") {
53
+ const machineId = requireString(flags, "machine");
54
+ const taskId = requirePositional(positional[0], "taskId");
55
+ const result = await client.dispatchStatus({
56
+ machineId,
57
+ taskId,
58
+ ...(typeof flags["request-id"] === "string" ? { requestId: flags["request-id"] } : {}),
59
+ });
60
+ if (!wantsJson(flags)) {
61
+ const admission = result.admission;
62
+ const attention = result.attention;
63
+ console.log(`${result.taskId} admission:${admission?.admission ?? "-"} dispatch:${admission?.dispatch ?? "-"} attention:${attention?.status ?? "-"}`);
64
+ return true;
65
+ }
66
+ ok("dispatch.status", result, { requestId: result.requestId, machineId });
67
+ return true;
68
+ }
69
+ if (action === "list") {
70
+ const machineId = requireString(flags, "machine");
71
+ const result = await client.dispatchList({
72
+ machineId,
73
+ ...(typeof flags["consumer-session"] === "string" ? { consumerSessionId: flags["consumer-session"] } : {}),
74
+ ...(typeof flags["request-id"] === "string" ? { requestId: flags["request-id"] } : {}),
75
+ });
76
+ if (!wantsJson(flags)) {
77
+ for (const record of result.records) {
78
+ const attention = record.attention;
79
+ const reason = attention?.reasons.at(-1) ?? record.error ?? record.briefPreview ?? "";
80
+ console.log([
81
+ record.taskId,
82
+ `dispatch:${record.dispatch}`,
83
+ `attention:${attention?.status ?? "-"}`,
84
+ `crew:${record.crewSessionId ?? "-"}`,
85
+ reason ? `reason:${reason}` : "",
86
+ ].filter(Boolean).join(" "));
87
+ }
88
+ return true;
89
+ }
90
+ ok("dispatch.list", result, { requestId: result.requestId, machineId });
91
+ return true;
92
+ }
93
+ return false;
94
+ }
95
+ function routeDecisionFromFlags(flags) {
96
+ const raw = flags["route-decision"];
97
+ const ifBusy = flags["if-busy"];
98
+ if (ifBusy !== undefined && ifBusy !== "queue") {
99
+ throw new CliError("--if-busy must be queue", "INVALID_ARGUMENT");
100
+ }
101
+ if (typeof raw !== "string") {
102
+ if (ifBusy === "queue" && typeof flags["crew-session"] === "string" && typeof flags["fork-from-crew"] !== "string") {
103
+ return { kind: "reuse", crewSessionId: flags["crew-session"], ifBusy };
104
+ }
105
+ if (ifBusy === "queue")
106
+ throw new CliError("--if-busy queue requires --crew-session or --route-decision reuse", "INVALID_ARGUMENT");
107
+ return undefined;
108
+ }
109
+ if (raw === "new") {
110
+ if (ifBusy === "queue")
111
+ throw new CliError("--if-busy queue is only valid with --route-decision reuse", "INVALID_ARGUMENT");
112
+ return { kind: "new" };
113
+ }
114
+ if (raw === "reuse") {
115
+ const crewSessionId = requireString(flags, "crew-session");
116
+ return { kind: "reuse", crewSessionId, ...(ifBusy === "queue" ? { ifBusy } : {}) };
117
+ }
118
+ if (ifBusy === "queue")
119
+ throw new CliError("--if-busy queue is only valid with --route-decision reuse", "INVALID_ARGUMENT");
120
+ if (raw === "fork") {
121
+ const crewSessionId = requireString(flags, "fork-from-crew");
122
+ return {
123
+ kind: "fork",
124
+ crewSessionId,
125
+ ...(typeof flags["fork-checkpoint"] === "string" ? { forkCheckpointId: flags["fork-checkpoint"] } : {}),
126
+ };
127
+ }
128
+ throw new CliError("--route-decision must be one of new, reuse, or fork", "INVALID_ARGUMENT");
129
+ }
130
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1,2 @@
1
+ import type { CommandInput } from "./command.js";
2
+ export declare function handleGateway({ domain, action, positional, flags }: CommandInput): Promise<boolean>;