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

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 (504) 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 +545 -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 +300 -0
  132. package/apps/daemon/dist/orchestration/store.js +1591 -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 +458 -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 +673 -24
  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 +191 -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/managed-environment.d.ts +11 -0
  292. package/apps/updater/dist/managed-environment.js +125 -0
  293. package/apps/updater/dist/node-runtime.d.ts +5 -0
  294. package/apps/updater/dist/node-runtime.js +40 -0
  295. package/apps/updater/dist/ownership.d.ts +37 -0
  296. package/apps/updater/dist/ownership.js +246 -0
  297. package/apps/updater/dist/paths.d.ts +33 -0
  298. package/apps/updater/dist/paths.js +53 -0
  299. package/apps/updater/dist/relay.d.ts +17 -0
  300. package/apps/updater/dist/relay.js +433 -0
  301. package/apps/updater/dist/release.d.ts +30 -0
  302. package/apps/updater/dist/release.js +166 -0
  303. package/apps/updater/dist/run.d.ts +5 -0
  304. package/apps/updater/dist/run.js +439 -0
  305. package/apps/updater/dist/slots.d.ts +15 -0
  306. package/apps/updater/dist/slots.js +48 -0
  307. package/apps/updater/dist/state.d.ts +37 -0
  308. package/apps/updater/dist/state.js +155 -0
  309. package/apps/updater/dist/supervisor.d.ts +46 -0
  310. package/apps/updater/dist/supervisor.js +406 -0
  311. package/package.json +19 -28
  312. package/packages/agent-sdk/dist/index.d.ts +8 -124
  313. package/packages/agent-sdk/dist/index.js +13 -198
  314. package/packages/client/dist/account.d.ts +20 -2
  315. package/packages/client/dist/account.js +169 -3
  316. package/packages/client/dist/client.d.ts +108 -12
  317. package/packages/client/dist/client.js +980 -146
  318. package/packages/client/dist/command-contracts.d.ts +6 -0
  319. package/packages/client/dist/command-contracts.js +22 -0
  320. package/packages/client/dist/direct.d.ts +12 -0
  321. package/packages/client/dist/direct.js +427 -0
  322. package/packages/client/dist/errors.d.ts +1 -0
  323. package/packages/client/dist/errors.js +1 -0
  324. package/packages/client/dist/http.d.ts +1 -1
  325. package/packages/client/dist/http.js +4 -15
  326. package/packages/client/dist/index.d.ts +3 -4
  327. package/packages/client/dist/index.js +1 -2
  328. package/packages/client/dist/parsers.d.ts +28 -1
  329. package/packages/client/dist/parsers.js +179 -19
  330. package/packages/client/dist/product-materializer.d.ts +39 -0
  331. package/packages/client/dist/product-materializer.js +492 -0
  332. package/packages/client/dist/transport.d.ts +57 -4
  333. package/packages/client/dist/transport.js +458 -185
  334. package/packages/client/dist/types.d.ts +390 -21
  335. package/packages/client/dist/types.js +1 -0
  336. package/packages/client/dist/update.d.ts +6 -0
  337. package/packages/client/dist/update.js +126 -0
  338. package/packages/client/dist/validation.d.ts +1 -2
  339. package/packages/client/dist/validation.js +1 -20
  340. package/packages/client/dist/workspace-shared-config.d.ts +23 -0
  341. package/packages/client/dist/workspace-shared-config.js +492 -0
  342. package/packages/headless-runtime/dist/claude-provider.d.ts +20 -0
  343. package/packages/headless-runtime/dist/claude-provider.js +1313 -0
  344. package/packages/{runtime-cli → headless-runtime}/dist/claude-session-store.d.ts +2 -1
  345. package/packages/{runtime-cli → headless-runtime}/dist/claude-session-store.js +34 -12
  346. package/packages/headless-runtime/dist/cli.d.ts +3 -0
  347. package/packages/headless-runtime/dist/cli.js +1243 -0
  348. package/packages/headless-runtime/dist/client.d.ts +78 -0
  349. package/packages/headless-runtime/dist/client.js +493 -0
  350. package/packages/headless-runtime/dist/codex-provider.d.ts +9 -0
  351. package/packages/headless-runtime/dist/codex-provider.js +1825 -0
  352. package/packages/headless-runtime/dist/core.d.ts +373 -0
  353. package/packages/headless-runtime/dist/core.js +3653 -0
  354. package/packages/headless-runtime/dist/event-log.d.ts +11 -0
  355. package/packages/headless-runtime/dist/event-log.js +257 -0
  356. package/packages/headless-runtime/dist/history-index.d.ts +28 -0
  357. package/packages/headless-runtime/dist/history-index.js +72 -0
  358. package/packages/headless-runtime/dist/host-tools.d.ts +21 -0
  359. package/packages/headless-runtime/dist/host-tools.js +252 -0
  360. package/packages/headless-runtime/dist/host.d.ts +63 -0
  361. package/packages/headless-runtime/dist/host.js +451 -0
  362. package/packages/headless-runtime/dist/index.d.ts +45 -0
  363. package/packages/headless-runtime/dist/index.js +528 -0
  364. package/packages/headless-runtime/dist/ipc.d.ts +4 -0
  365. package/packages/headless-runtime/dist/ipc.js +28 -0
  366. package/packages/headless-runtime/dist/mock-scenario.d.ts +7 -0
  367. package/packages/headless-runtime/dist/mock-scenario.js +65 -0
  368. package/packages/headless-runtime/dist/model-catalog.d.ts +21 -0
  369. package/packages/headless-runtime/dist/model-catalog.js +271 -0
  370. package/packages/headless-runtime/dist/provider-command.d.ts +10 -0
  371. package/packages/headless-runtime/dist/provider-command.js +432 -0
  372. package/packages/headless-runtime/dist/provider-turn-metadata.d.ts +9 -0
  373. package/packages/headless-runtime/dist/provider-turn-metadata.js +76 -0
  374. package/packages/headless-runtime/dist/public-response.d.ts +9 -0
  375. package/packages/headless-runtime/dist/public-response.js +112 -0
  376. package/packages/headless-runtime/dist/runtime-projection-store.d.ts +50 -0
  377. package/packages/headless-runtime/dist/runtime-projection-store.js +349 -0
  378. package/packages/headless-runtime/dist/trace-log.d.ts +31 -0
  379. package/packages/headless-runtime/dist/trace-log.js +106 -0
  380. package/packages/pie-provider/dist/index.d.ts +1 -0
  381. package/packages/pie-provider/dist/index.js +927 -740
  382. package/packages/runtime/dist/headless.d.ts +648 -0
  383. package/packages/runtime/dist/headless.js +3 -0
  384. package/packages/runtime/dist/index.d.ts +250 -110
  385. package/packages/runtime/dist/index.js +1 -0
  386. package/packages/shared/dist/args.d.ts +2 -0
  387. package/packages/shared/dist/args.js +9 -2
  388. package/packages/shared/dist/crypto.d.ts +2 -0
  389. package/packages/shared/dist/crypto.js +6 -0
  390. package/packages/shared/dist/diagnostics.d.ts +31 -0
  391. package/packages/shared/dist/diagnostics.js +81 -0
  392. package/packages/shared/dist/file-lock.d.ts +29 -0
  393. package/packages/shared/dist/file-lock.js +301 -0
  394. package/packages/shared/dist/he-official-tools.d.ts +78 -0
  395. package/packages/shared/dist/he-official-tools.js +737 -0
  396. package/packages/shared/dist/ids.d.ts +1 -0
  397. package/packages/shared/dist/ids.js +1 -0
  398. package/packages/shared/dist/index.d.ts +8 -0
  399. package/packages/shared/dist/index.js +8 -0
  400. package/packages/shared/dist/orchestration-routing.d.ts +10 -0
  401. package/packages/shared/dist/orchestration-routing.js +113 -0
  402. package/packages/shared/dist/packet-relay.d.ts +230 -0
  403. package/packages/shared/dist/packet-relay.js +124 -0
  404. package/packages/shared/dist/protocol-schemas.d.ts +2943 -40
  405. package/packages/shared/dist/protocol-schemas.js +889 -1
  406. package/packages/shared/dist/protocol-types.d.ts +904 -3
  407. package/packages/shared/dist/protocol-types.js +1 -0
  408. package/packages/shared/dist/protocol.d.ts +749 -23
  409. package/packages/shared/dist/protocol.js +836 -26
  410. package/packages/shared/dist/relay-scope.d.ts +32 -0
  411. package/packages/shared/dist/relay-scope.js +23 -0
  412. package/packages/shared/dist/session-name.d.ts +1 -0
  413. package/packages/shared/dist/session-name.js +1 -0
  414. package/packages/shared/dist/session-state.d.ts +2 -1
  415. package/packages/shared/dist/session-state.js +1 -0
  416. package/packages/shared/dist/session-tags.d.ts +12 -0
  417. package/packages/shared/dist/session-tags.js +50 -0
  418. package/packages/update-protocol/dist/index.d.ts +317 -0
  419. package/packages/update-protocol/dist/index.js +126 -0
  420. package/apps/cli/dist/commands/lib/orchestrator.d.ts +0 -30
  421. package/apps/cli/dist/commands/lib/orchestrator.js +0 -146
  422. package/apps/cli/dist/commands/orchestrator.d.ts +0 -2
  423. package/apps/cli/dist/commands/orchestrator.js +0 -411
  424. package/apps/cli/dist/commands/skill.d.ts +0 -2
  425. package/apps/cli/dist/commands/skill.js +0 -214
  426. package/apps/daemon/dist/runtime/external-provider.d.ts +0 -20
  427. package/apps/daemon/dist/runtime/external-provider.js +0 -931
  428. package/apps/daemon/dist/session/runtime-handle.d.ts +0 -7
  429. package/apps/daemon/dist/session/runtime-handle.js +0 -47
  430. package/apps/daemon/dist/session/workspace-paths.d.ts +0 -3
  431. package/apps/daemon/dist/session/workspace-paths.js +0 -30
  432. package/apps/relay/dist/connections.d.ts +0 -29
  433. package/apps/relay/dist/connections.js +0 -10
  434. package/apps/relay/dist/controller-handlers.d.ts +0 -54
  435. package/apps/relay/dist/controller-handlers.js +0 -921
  436. package/apps/relay/dist/event-visibility.d.ts +0 -7
  437. package/apps/relay/dist/event-visibility.js +0 -46
  438. package/apps/relay/dist/machine-command-result-handlers.d.ts +0 -4
  439. package/apps/relay/dist/machine-command-result-handlers.js +0 -532
  440. package/apps/relay/dist/machine-handler-context.d.ts +0 -79
  441. package/apps/relay/dist/machine-handler-context.js +0 -1
  442. package/apps/relay/dist/machine-handlers.d.ts +0 -4
  443. package/apps/relay/dist/machine-handlers.js +0 -20
  444. package/apps/relay/dist/machine-reliability.d.ts +0 -7
  445. package/apps/relay/dist/machine-reliability.js +0 -12
  446. package/apps/relay/dist/projection-repository.d.ts +0 -87
  447. package/apps/relay/dist/projection-repository.js +0 -220
  448. package/apps/relay/dist/projections.d.ts +0 -7
  449. package/apps/relay/dist/projections.js +0 -124
  450. package/apps/relay/dist/repositories.d.ts +0 -13
  451. package/apps/relay/dist/repositories.js +0 -71
  452. package/apps/relay/dist/scope.d.ts +0 -33
  453. package/apps/relay/dist/scope.js +0 -187
  454. package/apps/relay/dist/session-projection-reducer.d.ts +0 -4
  455. package/apps/relay/dist/session-projection-reducer.js +0 -448
  456. package/npm-shrinkwrap.json +0 -1615
  457. package/packages/client/dist/live-session-state.d.ts +0 -15
  458. package/packages/client/dist/live-session-state.js +0 -60
  459. package/packages/client/dist/live-state.d.ts +0 -8
  460. package/packages/client/dist/live-state.js +0 -33
  461. package/packages/client/dist/live-types.d.ts +0 -113
  462. package/packages/client/dist/live-types.js +0 -1
  463. package/packages/client/dist/live.d.ts +0 -85
  464. package/packages/client/dist/live.js +0 -1056
  465. package/packages/client/dist/session-event-order.d.ts +0 -16
  466. package/packages/client/dist/session-event-order.js +0 -83
  467. package/packages/client/dist/session-event-window.d.ts +0 -5
  468. package/packages/client/dist/session-event-window.js +0 -54
  469. package/packages/provider-protocol/dist/index.d.ts +0 -843
  470. package/packages/provider-protocol/dist/index.js +0 -332
  471. package/packages/runtime-acpx/dist/index.d.ts +0 -10
  472. package/packages/runtime-acpx/dist/index.js +0 -111
  473. package/packages/runtime-cli/dist/async-queue.d.ts +0 -9
  474. package/packages/runtime-cli/dist/async-queue.js +0 -31
  475. package/packages/runtime-cli/dist/claude-history.d.ts +0 -6
  476. package/packages/runtime-cli/dist/claude-history.js +0 -343
  477. package/packages/runtime-cli/dist/claude-json.d.ts +0 -28
  478. package/packages/runtime-cli/dist/claude-json.js +0 -28
  479. package/packages/runtime-cli/dist/claude-rename.d.ts +0 -5
  480. package/packages/runtime-cli/dist/claude-rename.js +0 -14
  481. package/packages/runtime-cli/dist/claude-turn.d.ts +0 -12
  482. package/packages/runtime-cli/dist/claude-turn.js +0 -131
  483. package/packages/runtime-cli/dist/codex-app-server.d.ts +0 -69
  484. package/packages/runtime-cli/dist/codex-app-server.js +0 -462
  485. package/packages/runtime-cli/dist/codex-approvals.d.ts +0 -7
  486. package/packages/runtime-cli/dist/codex-approvals.js +0 -32
  487. package/packages/runtime-cli/dist/codex-history.d.ts +0 -16
  488. package/packages/runtime-cli/dist/codex-history.js +0 -748
  489. package/packages/runtime-cli/dist/codex-json-rpc.d.ts +0 -29
  490. package/packages/runtime-cli/dist/codex-json-rpc.js +0 -198
  491. package/packages/runtime-cli/dist/codex-lifecycle.d.ts +0 -24
  492. package/packages/runtime-cli/dist/codex-lifecycle.js +0 -71
  493. package/packages/runtime-cli/dist/codex-protocol.d.ts +0 -5
  494. package/packages/runtime-cli/dist/codex-protocol.js +0 -52
  495. package/packages/runtime-cli/dist/command-resolver.d.ts +0 -23
  496. package/packages/runtime-cli/dist/command-resolver.js +0 -100
  497. package/packages/runtime-cli/dist/history-merge.d.ts +0 -17
  498. package/packages/runtime-cli/dist/history-merge.js +0 -286
  499. package/packages/runtime-cli/dist/index.d.ts +0 -10
  500. package/packages/runtime-cli/dist/index.js +0 -265
  501. package/packages/runtime-cli/dist/permissions.d.ts +0 -5
  502. package/packages/runtime-cli/dist/permissions.js +0 -21
  503. package/packages/runtime-cli/dist/session-store.d.ts +0 -33
  504. 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.501
10
+ npm.cmd exec --yes --package @cydm/happy-elves@0.1.0-beta.501 -- 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>;