@cydm/happy-elves 0.1.0-beta.81 → 0.1.0-beta.83

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 (489) hide show
  1. package/README.md +1 -9
  2. package/apps/cli/dist/commands/account.d.ts +0 -4
  3. package/apps/cli/dist/commands/account.js +36 -403
  4. package/apps/cli/dist/commands/app.js +29 -20
  5. package/apps/cli/dist/commands/collect.js +1 -0
  6. package/apps/cli/dist/commands/command.js +1 -0
  7. package/apps/cli/dist/commands/config.js +5 -16
  8. package/apps/cli/dist/commands/daemon.js +95 -412
  9. package/apps/cli/dist/commands/gateway.js +355 -1216
  10. package/apps/cli/dist/commands/lib/args.js +29 -75
  11. package/apps/cli/dist/commands/lib/audit.js +2 -2
  12. package/apps/cli/dist/commands/lib/bootstrap-config.d.ts +13 -31
  13. package/apps/cli/dist/commands/lib/bootstrap-config.js +98 -147
  14. package/apps/cli/dist/commands/lib/bootstrap-daemon.d.ts +9 -82
  15. package/apps/cli/dist/commands/lib/bootstrap-daemon.js +30 -481
  16. package/apps/cli/dist/commands/lib/bootstrap-output.d.ts +7 -14
  17. package/apps/cli/dist/commands/lib/bootstrap-output.js +24 -35
  18. package/apps/cli/dist/commands/lib/bootstrap.d.ts +0 -2
  19. package/apps/cli/dist/commands/lib/bootstrap.js +52 -450
  20. package/apps/cli/dist/commands/lib/config.d.ts +2 -62
  21. package/apps/cli/dist/commands/lib/config.js +27 -1144
  22. package/apps/cli/dist/commands/lib/doctor.d.ts +0 -14
  23. package/apps/cli/dist/commands/lib/doctor.js +148 -339
  24. package/apps/cli/dist/commands/lib/exit.d.ts +0 -1
  25. package/apps/cli/dist/commands/lib/exit.js +31 -80
  26. package/apps/cli/dist/commands/lib/gateway-store.d.ts +42 -0
  27. package/apps/cli/dist/commands/lib/gateway-store.js +41 -0
  28. package/apps/cli/dist/commands/lib/index.d.ts +6 -11
  29. package/apps/cli/dist/commands/lib/index.js +7 -11
  30. package/apps/cli/dist/commands/lib/json.d.ts +2 -2
  31. package/apps/cli/dist/commands/lib/json.js +8 -10
  32. package/apps/cli/dist/commands/lib/local-daemon.d.ts +8 -70
  33. package/apps/cli/dist/commands/lib/local-daemon.js +96 -330
  34. package/apps/cli/dist/commands/lib/loop-store.d.ts +5 -0
  35. package/apps/cli/dist/commands/lib/loop-store.js +78 -0
  36. package/apps/cli/dist/commands/lib/paths.d.ts +5 -5
  37. package/apps/cli/dist/commands/lib/paths.js +6 -10
  38. package/apps/cli/dist/commands/lib/relay-db-audit.d.ts +37 -0
  39. package/apps/cli/dist/commands/lib/relay-db-audit.js +300 -0
  40. package/apps/cli/dist/commands/lib/relay-http.d.ts +5 -4
  41. package/apps/cli/dist/commands/lib/relay-http.js +31 -22
  42. package/apps/cli/dist/commands/lib/schedule-store.d.ts +28 -0
  43. package/apps/cli/dist/commands/lib/schedule-store.js +32 -0
  44. package/apps/cli/dist/commands/lib/scope.d.ts +5 -16
  45. package/apps/cli/dist/commands/lib/scope.js +12 -67
  46. package/apps/cli/dist/commands/lib/session-output.d.ts +2 -12
  47. package/apps/cli/dist/commands/lib/session-output.js +19 -95
  48. package/apps/cli/dist/commands/lib/session-view.d.ts +2 -9
  49. package/apps/cli/dist/commands/lib/session-view.js +40 -71
  50. package/apps/cli/dist/commands/lib/status.js +15 -42
  51. package/apps/cli/dist/commands/lib/types.d.ts +5 -49
  52. package/apps/cli/dist/commands/lib/types.js +2 -1
  53. package/apps/cli/dist/commands/lib/usage.js +124 -242
  54. package/apps/cli/dist/commands/lib/workspace.d.ts +1 -2
  55. package/apps/cli/dist/commands/lib/workspace.js +7 -30
  56. package/apps/cli/dist/commands/loop.js +117 -267
  57. package/apps/cli/dist/commands/machine.js +12 -48
  58. package/apps/cli/dist/commands/memory.d.ts +0 -1
  59. package/apps/cli/dist/commands/memory.js +112 -231
  60. package/apps/cli/dist/commands/relay.js +38 -37
  61. package/apps/cli/dist/commands/remote.js +37 -210
  62. package/apps/cli/dist/commands/schedule.d.ts +2 -0
  63. package/apps/cli/dist/commands/schedule.js +225 -0
  64. package/apps/cli/dist/commands/session.d.ts +0 -26
  65. package/apps/cli/dist/commands/session.js +83 -360
  66. package/apps/cli/dist/commands/token.js +2 -9
  67. package/apps/cli/dist/commands/turn.js +65 -133
  68. package/apps/cli/dist/commands/workspace.d.ts +2 -0
  69. package/apps/cli/dist/commands/workspace.js +57 -0
  70. package/apps/cli/dist/errors.js +1 -0
  71. package/apps/cli/dist/index.js +3 -20
  72. package/apps/cli/package.json +6 -0
  73. package/apps/daemon/dist/app.js +1 -0
  74. package/apps/daemon/dist/args.js +2 -8
  75. package/apps/daemon/dist/audit.d.ts +1 -1
  76. package/apps/daemon/dist/audit.js +3 -4
  77. package/apps/daemon/dist/cli.js +3 -9
  78. package/apps/daemon/dist/config.d.ts +1 -6
  79. package/apps/daemon/dist/config.js +11 -200
  80. package/apps/daemon/dist/errors.js +1 -0
  81. package/apps/daemon/dist/gateway/adapters.d.ts +5 -13
  82. package/apps/daemon/dist/gateway/adapters.js +1 -0
  83. package/apps/daemon/dist/gateway/feishu.d.ts +6 -18
  84. package/apps/daemon/dist/gateway/feishu.js +76 -129
  85. package/apps/daemon/dist/gateway/format.d.ts +0 -7
  86. package/apps/daemon/dist/gateway/format.js +2 -16
  87. package/apps/daemon/dist/gateway/{commands.d.ts → handler.d.ts} +5 -1
  88. package/apps/daemon/dist/gateway/handler.js +125 -0
  89. package/apps/daemon/dist/gateway/runtime.d.ts +27 -27
  90. package/apps/daemon/dist/gateway/runtime.js +643 -2310
  91. package/apps/daemon/dist/gateway/store.d.ts +91 -29
  92. package/apps/daemon/dist/gateway/store.js +117 -56
  93. package/apps/daemon/dist/loop/runner.js +69 -957
  94. package/apps/daemon/dist/loop/store.d.ts +2 -11
  95. package/apps/daemon/dist/loop/store.js +35 -119
  96. package/apps/daemon/dist/memory/{commands.d.ts → handler.d.ts} +5 -1
  97. package/apps/daemon/dist/memory/handler.js +95 -0
  98. package/apps/daemon/dist/memory/manager.d.ts +41 -0
  99. package/apps/daemon/dist/memory/manager.js +319 -0
  100. package/apps/daemon/dist/pair.js +24 -151
  101. package/apps/daemon/dist/paths.d.ts +6 -14
  102. package/apps/daemon/dist/paths.js +7 -30
  103. package/apps/daemon/dist/process.d.ts +8 -44
  104. package/apps/daemon/dist/process.js +57 -521
  105. package/apps/daemon/dist/relay/admission.d.ts +28 -0
  106. package/apps/daemon/dist/relay/admission.js +31 -0
  107. package/apps/daemon/dist/relay/connection.d.ts +1 -1
  108. package/apps/daemon/dist/relay/connection.js +42 -221
  109. package/apps/daemon/dist/relay/devtools.d.ts +1 -1
  110. package/apps/daemon/dist/relay/devtools.js +23 -27
  111. package/apps/daemon/dist/relay/register.d.ts +0 -3
  112. package/apps/daemon/dist/relay/register.js +3 -62
  113. package/apps/daemon/dist/relay/send.d.ts +4 -36
  114. package/apps/daemon/dist/relay/send.js +23 -286
  115. package/apps/daemon/dist/relay-http.js +13 -4
  116. package/apps/daemon/dist/runtime/external-provider.d.ts +1 -1
  117. package/apps/daemon/dist/runtime/external-provider.js +117 -390
  118. package/apps/daemon/dist/runtime.d.ts +2 -2
  119. package/apps/daemon/dist/runtime.js +8 -14
  120. package/apps/daemon/dist/schedule/handler.d.ts +7 -0
  121. package/apps/daemon/dist/schedule/handler.js +127 -0
  122. package/apps/daemon/dist/schedule/runner.d.ts +12 -0
  123. package/apps/daemon/dist/schedule/runner.js +447 -0
  124. package/apps/daemon/dist/schedule/store.d.ts +10 -0
  125. package/apps/daemon/dist/schedule/store.js +137 -0
  126. package/apps/daemon/dist/session/create-session.d.ts +1 -1
  127. package/apps/daemon/dist/session/create-session.js +3 -13
  128. package/apps/daemon/dist/session/directory.d.ts +1 -6
  129. package/apps/daemon/dist/session/directory.js +48 -106
  130. package/apps/daemon/dist/session/events.d.ts +0 -3
  131. package/apps/daemon/dist/session/events.js +31 -106
  132. package/apps/daemon/dist/session/file-preview.js +7 -3
  133. package/apps/daemon/dist/session/lifecycle.d.ts +2 -6
  134. package/apps/daemon/dist/session/lifecycle.js +83 -430
  135. package/apps/daemon/dist/session/metadata.d.ts +2 -7
  136. package/apps/daemon/dist/session/metadata.js +13 -90
  137. package/apps/daemon/dist/session/primitives.js +17 -66
  138. package/apps/daemon/dist/session/prompt.d.ts +0 -5
  139. package/apps/daemon/dist/session/prompt.js +192 -787
  140. package/apps/daemon/dist/session/runtime-handle.js +1 -0
  141. package/apps/daemon/dist/start.js +24 -305
  142. package/apps/daemon/dist/state.d.ts +0 -30
  143. package/apps/daemon/dist/state.js +1 -0
  144. package/apps/daemon/dist/turn-coordinator.d.ts +2 -53
  145. package/apps/daemon/dist/turn-coordinator.js +4 -202
  146. package/apps/daemon/dist/types.d.ts +11 -105
  147. package/apps/daemon/dist/types.js +1 -0
  148. package/apps/daemon/dist/utils.js +1 -0
  149. package/apps/daemon/package.json +1 -1
  150. package/apps/relay/dist/auth.js +3 -13
  151. package/apps/relay/dist/connections.d.ts +7 -60
  152. package/apps/relay/dist/connections.js +1 -2
  153. package/apps/relay/dist/controller-handlers.d.ts +38 -92
  154. package/apps/relay/dist/controller-handlers.js +229 -2487
  155. package/apps/relay/dist/db.d.ts +0 -6
  156. package/apps/relay/dist/db.js +150 -1038
  157. package/apps/relay/dist/errors.d.ts +2 -1
  158. package/apps/relay/dist/errors.js +4 -1
  159. package/apps/relay/dist/http-routes.d.ts +1 -1
  160. package/apps/relay/dist/http-routes.js +614 -875
  161. package/apps/relay/dist/http-schemas.d.ts +92 -52
  162. package/apps/relay/dist/http-schemas.js +76 -36
  163. package/apps/relay/dist/index.js +11 -51
  164. package/apps/relay/dist/machine-handlers.d.ts +56 -3
  165. package/apps/relay/dist/machine-handlers.js +796 -9
  166. package/apps/relay/dist/projections.d.ts +1 -1
  167. package/apps/relay/dist/projections.js +3 -122
  168. package/apps/relay/dist/relay-context.d.ts +54 -93
  169. package/apps/relay/dist/relay-context.js +263 -806
  170. package/apps/relay/dist/repositories.d.ts +1 -3
  171. package/apps/relay/dist/repositories.js +10 -79
  172. package/apps/relay/dist/retention.d.ts +0 -6
  173. package/apps/relay/dist/retention.js +3 -28
  174. package/apps/relay/dist/scope.d.ts +1 -14
  175. package/apps/relay/dist/scope.js +18 -202
  176. package/apps/relay/dist/security.js +1 -0
  177. package/apps/relay/dist/types.d.ts +49 -107
  178. package/apps/relay/dist/types.js +1 -0
  179. package/apps/relay/dist/websocket.js +37 -273
  180. package/package.json +9 -31
  181. package/packages/agent-sdk/dist/index.d.ts +243 -47
  182. package/packages/agent-sdk/dist/index.js +14 -118
  183. package/packages/client/dist/account.d.ts +39 -40
  184. package/packages/client/dist/account.js +129 -134
  185. package/packages/client/dist/client.d.ts +44 -135
  186. package/packages/client/dist/client.js +170 -1453
  187. package/packages/client/dist/errors.d.ts +2 -16
  188. package/packages/client/dist/errors.js +2 -16
  189. package/packages/client/dist/http.d.ts +2 -2
  190. package/packages/client/dist/http.js +21 -29
  191. package/packages/client/dist/index.d.ts +2 -14
  192. package/packages/client/dist/index.js +1 -7
  193. package/packages/client/dist/parsers.d.ts +30 -3
  194. package/packages/client/dist/parsers.js +181 -16
  195. package/packages/client/dist/transport.d.ts +23 -42
  196. package/packages/client/dist/transport.js +118 -475
  197. package/packages/client/dist/types.d.ts +136 -294
  198. package/packages/client/dist/types.js +1 -0
  199. package/packages/client/dist/validation.d.ts +1 -1
  200. package/packages/client/dist/validation.js +13 -41
  201. package/packages/pie-provider/dist/index.d.ts +1 -0
  202. package/packages/pie-provider/dist/index.js +96 -556
  203. package/packages/runtime/dist/index.d.ts +122 -89
  204. package/packages/runtime/dist/index.js +2 -66
  205. package/packages/runtime-acpx/dist/index.d.ts +3 -2
  206. package/packages/runtime-acpx/dist/index.js +3 -137
  207. package/packages/runtime-cli/dist/async-queue.d.ts +1 -0
  208. package/packages/runtime-cli/dist/async-queue.js +1 -0
  209. package/packages/runtime-cli/dist/claude-history.d.ts +2 -1
  210. package/packages/runtime-cli/dist/claude-history.js +23 -23
  211. package/packages/runtime-cli/dist/claude-json.d.ts +1 -6
  212. package/packages/runtime-cli/dist/claude-json.js +1 -6
  213. package/packages/runtime-cli/dist/claude-rename.d.ts +1 -0
  214. package/packages/runtime-cli/dist/claude-rename.js +1 -0
  215. package/packages/runtime-cli/dist/claude-session-store.d.ts +2 -0
  216. package/packages/runtime-cli/dist/claude-session-store.js +8 -1
  217. package/packages/runtime-cli/dist/claude-turn.d.ts +5 -17
  218. package/packages/runtime-cli/dist/claude-turn.js +40 -319
  219. package/packages/runtime-cli/dist/codex-app-server.d.ts +10 -90
  220. package/packages/runtime-cli/dist/codex-app-server.js +163 -1294
  221. package/packages/runtime-cli/dist/codex-approvals.d.ts +1 -0
  222. package/packages/runtime-cli/dist/codex-approvals.js +1 -0
  223. package/packages/runtime-cli/dist/codex-history.d.ts +1 -0
  224. package/packages/runtime-cli/dist/codex-history.js +18 -55
  225. package/packages/runtime-cli/dist/codex-json-rpc.d.ts +1 -29
  226. package/packages/runtime-cli/dist/codex-json-rpc.js +17 -304
  227. package/packages/runtime-cli/dist/codex-lifecycle.d.ts +1 -0
  228. package/packages/runtime-cli/dist/codex-lifecycle.js +4 -16
  229. package/packages/runtime-cli/dist/codex-protocol.d.ts +4 -4
  230. package/packages/runtime-cli/dist/codex-protocol.js +7 -32
  231. package/packages/runtime-cli/dist/command-resolver.d.ts +1 -10
  232. package/packages/runtime-cli/dist/command-resolver.js +1 -58
  233. package/packages/runtime-cli/dist/history-merge.d.ts +1 -0
  234. package/packages/runtime-cli/dist/history-merge.js +3 -15
  235. package/packages/runtime-cli/dist/index.d.ts +3 -13
  236. package/packages/runtime-cli/dist/index.js +56 -527
  237. package/packages/runtime-cli/dist/permissions.d.ts +1 -0
  238. package/packages/runtime-cli/dist/permissions.js +4 -3
  239. package/packages/runtime-cli/dist/session-store.d.ts +2 -46
  240. package/packages/runtime-cli/dist/session-store.js +23 -281
  241. package/packages/shared/dist/args.d.ts +1 -0
  242. package/packages/shared/dist/args.js +1 -0
  243. package/packages/shared/dist/crypto.d.ts +1 -261
  244. package/packages/shared/dist/crypto.js +1 -635
  245. package/packages/shared/dist/ids.d.ts +1 -0
  246. package/packages/shared/dist/ids.js +1 -0
  247. package/packages/shared/dist/index.d.ts +1 -7
  248. package/packages/shared/dist/index.js +1 -7
  249. package/packages/shared/dist/protocol-schemas.d.ts +985 -462
  250. package/packages/shared/dist/protocol-schemas.js +225 -240
  251. package/packages/shared/dist/protocol-types.d.ts +292 -440
  252. package/packages/shared/dist/protocol-types.js +1 -0
  253. package/packages/shared/dist/protocol.d.ts +106 -524
  254. package/packages/shared/dist/protocol.js +113 -683
  255. package/packages/shared/dist/session-name.d.ts +1 -0
  256. package/packages/shared/dist/session-name.js +1 -0
  257. package/packages/shared/dist/session-state.d.ts +2 -1
  258. package/packages/shared/dist/session-state.js +7 -2
  259. package/apps/cli/dist/commands/diagnostics.d.ts +0 -2
  260. package/apps/cli/dist/commands/diagnostics.js +0 -71
  261. package/apps/cli/dist/commands/lib/account-snapshot.d.ts +0 -13
  262. package/apps/cli/dist/commands/lib/account-snapshot.js +0 -368
  263. package/apps/cli/dist/commands/lib/bootstrap-device-recovery.d.ts +0 -41
  264. package/apps/cli/dist/commands/lib/bootstrap-device-recovery.js +0 -782
  265. package/apps/cli/dist/commands/lib/bootstrap-join.d.ts +0 -6
  266. package/apps/cli/dist/commands/lib/bootstrap-join.js +0 -304
  267. package/apps/cli/dist/commands/lib/cli-exit.d.ts +0 -6
  268. package/apps/cli/dist/commands/lib/cli-exit.js +0 -15
  269. package/apps/cli/dist/commands/lib/controller-enrollment-intent.d.ts +0 -53
  270. package/apps/cli/dist/commands/lib/controller-enrollment-intent.js +0 -308
  271. package/apps/cli/dist/commands/lib/daemon-enrollment-intent.d.ts +0 -55
  272. package/apps/cli/dist/commands/lib/daemon-enrollment-intent.js +0 -275
  273. package/apps/cli/dist/commands/lib/enrollment-claim-settlement.d.ts +0 -1
  274. package/apps/cli/dist/commands/lib/enrollment-claim-settlement.js +0 -20
  275. package/apps/cli/dist/commands/lib/fresh-start-intent.d.ts +0 -26
  276. package/apps/cli/dist/commands/lib/fresh-start-intent.js +0 -169
  277. package/apps/cli/dist/commands/lib/machine-state.d.ts +0 -3
  278. package/apps/cli/dist/commands/lib/machine-state.js +0 -14
  279. package/apps/cli/dist/commands/lib/orchestrator.d.ts +0 -41
  280. package/apps/cli/dist/commands/lib/orchestrator.js +0 -208
  281. package/apps/cli/dist/commands/lib/pending-enrollment.d.ts +0 -1
  282. package/apps/cli/dist/commands/lib/pending-enrollment.js +0 -23
  283. package/apps/cli/dist/commands/lib/version.d.ts +0 -8
  284. package/apps/cli/dist/commands/lib/version.js +0 -69
  285. package/apps/cli/dist/commands/orchestrator.d.ts +0 -22
  286. package/apps/cli/dist/commands/orchestrator.js +0 -1448
  287. package/apps/cli/dist/commands/skill.d.ts +0 -12
  288. package/apps/cli/dist/commands/skill.js +0 -394
  289. package/apps/cli/dist/skills/auto-align.d.ts +0 -21
  290. package/apps/cli/dist/skills/auto-align.js +0 -134
  291. package/apps/cli/dist/skills/registry.d.ts +0 -21
  292. package/apps/cli/dist/skills/registry.js +0 -326
  293. package/apps/daemon/dist/account-config-lock.d.ts +0 -14
  294. package/apps/daemon/dist/account-config-lock.js +0 -361
  295. package/apps/daemon/dist/gateway/commands.js +0 -542
  296. package/apps/daemon/dist/gateway/fake.d.ts +0 -2
  297. package/apps/daemon/dist/gateway/fake.js +0 -24
  298. package/apps/daemon/dist/gateway/telegram.d.ts +0 -9
  299. package/apps/daemon/dist/gateway/telegram.js +0 -387
  300. package/apps/daemon/dist/lifecycle/artifacts.d.ts +0 -44
  301. package/apps/daemon/dist/lifecycle/artifacts.js +0 -588
  302. package/apps/daemon/dist/lifecycle/capability.d.ts +0 -25
  303. package/apps/daemon/dist/lifecycle/capability.js +0 -290
  304. package/apps/daemon/dist/lifecycle/detached-helper-bundle.mjs +0 -19268
  305. package/apps/daemon/dist/lifecycle/detached-helper-cli.d.ts +0 -1
  306. package/apps/daemon/dist/lifecycle/detached-helper-cli.js +0 -11
  307. package/apps/daemon/dist/lifecycle/errors.d.ts +0 -3
  308. package/apps/daemon/dist/lifecycle/errors.js +0 -10
  309. package/apps/daemon/dist/lifecycle/helper.d.ts +0 -39
  310. package/apps/daemon/dist/lifecycle/helper.js +0 -405
  311. package/apps/daemon/dist/lifecycle/journal.d.ts +0 -21
  312. package/apps/daemon/dist/lifecycle/journal.js +0 -389
  313. package/apps/daemon/dist/lifecycle/npm.d.ts +0 -37
  314. package/apps/daemon/dist/lifecycle/npm.js +0 -164
  315. package/apps/daemon/dist/lifecycle/operation.d.ts +0 -19
  316. package/apps/daemon/dist/lifecycle/operation.js +0 -202
  317. package/apps/daemon/dist/lifecycle/relay.d.ts +0 -5
  318. package/apps/daemon/dist/lifecycle/relay.js +0 -72
  319. package/apps/daemon/dist/lifecycle/reporter.d.ts +0 -29
  320. package/apps/daemon/dist/lifecycle/reporter.js +0 -402
  321. package/apps/daemon/dist/lifecycle/restart.d.ts +0 -127
  322. package/apps/daemon/dist/lifecycle/restart.js +0 -654
  323. package/apps/daemon/dist/lifecycle/runtime.d.ts +0 -36
  324. package/apps/daemon/dist/lifecycle/runtime.js +0 -210
  325. package/apps/daemon/dist/lifecycle/service.d.ts +0 -16
  326. package/apps/daemon/dist/lifecycle/service.js +0 -12
  327. package/apps/daemon/dist/lifecycle/types.d.ts +0 -110
  328. package/apps/daemon/dist/lifecycle/types.js +0 -3
  329. package/apps/daemon/dist/loop/handlers.d.ts +0 -5
  330. package/apps/daemon/dist/loop/handlers.js +0 -406
  331. package/apps/daemon/dist/loop/schedule.d.ts +0 -34
  332. package/apps/daemon/dist/loop/schedule.js +0 -161
  333. package/apps/daemon/dist/memory/access-lifecycle.d.ts +0 -15
  334. package/apps/daemon/dist/memory/access-lifecycle.js +0 -85
  335. package/apps/daemon/dist/memory/commands.js +0 -186
  336. package/apps/daemon/dist/memory/config.d.ts +0 -14
  337. package/apps/daemon/dist/memory/config.js +0 -34
  338. package/apps/daemon/dist/memory/flush.d.ts +0 -14
  339. package/apps/daemon/dist/memory/flush.js +0 -21
  340. package/apps/daemon/dist/memory/inject.d.ts +0 -24
  341. package/apps/daemon/dist/memory/inject.js +0 -59
  342. package/apps/daemon/dist/memory/instructions.d.ts +0 -9
  343. package/apps/daemon/dist/memory/instructions.js +0 -47
  344. package/apps/daemon/dist/memory/managers.d.ts +0 -10
  345. package/apps/daemon/dist/memory/managers.js +0 -144
  346. package/apps/daemon/dist/memory/project-commands.d.ts +0 -3
  347. package/apps/daemon/dist/memory/project-commands.js +0 -394
  348. package/apps/daemon/dist/relay/connection-diagnostics.d.ts +0 -30
  349. package/apps/daemon/dist/relay/connection-diagnostics.js +0 -60
  350. package/apps/daemon/dist/runtime/cancel-settlement.d.ts +0 -19
  351. package/apps/daemon/dist/runtime/cancel-settlement.js +0 -195
  352. package/apps/daemon/dist/runtime/catalog.d.ts +0 -40
  353. package/apps/daemon/dist/runtime/catalog.js +0 -228
  354. package/apps/daemon/dist/runtime/errors.d.ts +0 -3
  355. package/apps/daemon/dist/runtime/errors.js +0 -37
  356. package/apps/daemon/dist/runtime/event-pump.d.ts +0 -14
  357. package/apps/daemon/dist/runtime/event-pump.js +0 -38
  358. package/apps/daemon/dist/runtime/provider-start-journal.d.ts +0 -64
  359. package/apps/daemon/dist/runtime/provider-start-journal.js +0 -208
  360. package/apps/daemon/dist/runtime/recovery-context.d.ts +0 -4
  361. package/apps/daemon/dist/runtime/recovery-context.js +0 -28
  362. package/apps/daemon/dist/runtime/selection.d.ts +0 -11
  363. package/apps/daemon/dist/runtime/selection.js +0 -41
  364. package/apps/daemon/dist/runtime/session-recovery.d.ts +0 -8
  365. package/apps/daemon/dist/runtime/session-recovery.js +0 -125
  366. package/apps/daemon/dist/runtime/turn-projection.d.ts +0 -40
  367. package/apps/daemon/dist/runtime/turn-projection.js +0 -138
  368. package/apps/daemon/dist/runtime/turn-supervision.d.ts +0 -45
  369. package/apps/daemon/dist/runtime/turn-supervision.js +0 -390
  370. package/apps/daemon/dist/session/reconcile.d.ts +0 -4
  371. package/apps/daemon/dist/session/reconcile.js +0 -233
  372. package/apps/daemon/dist/session/retry-recovery.d.ts +0 -3
  373. package/apps/daemon/dist/session/retry-recovery.js +0 -169
  374. package/apps/daemon/dist/session/workspace-paths.d.ts +0 -3
  375. package/apps/daemon/dist/session/workspace-paths.js +0 -30
  376. package/apps/relay/dist/account-access-revocation.d.ts +0 -40
  377. package/apps/relay/dist/account-access-revocation.js +0 -85
  378. package/apps/relay/dist/account-http-routes.d.ts +0 -3
  379. package/apps/relay/dist/account-http-routes.js +0 -1146
  380. package/apps/relay/dist/account-projections.d.ts +0 -41
  381. package/apps/relay/dist/account-projections.js +0 -99
  382. package/apps/relay/dist/device-recovery-repository.d.ts +0 -38
  383. package/apps/relay/dist/device-recovery-repository.js +0 -85
  384. package/apps/relay/dist/dispatch-outbox.d.ts +0 -66
  385. package/apps/relay/dist/dispatch-outbox.js +0 -74
  386. package/apps/relay/dist/enrollment-repository.d.ts +0 -72
  387. package/apps/relay/dist/enrollment-repository.js +0 -131
  388. package/apps/relay/dist/event-visibility.d.ts +0 -15
  389. package/apps/relay/dist/event-visibility.js +0 -74
  390. package/apps/relay/dist/legacy-recovery.d.ts +0 -94
  391. package/apps/relay/dist/legacy-recovery.js +0 -380
  392. package/apps/relay/dist/machine-command-result-handlers.d.ts +0 -24
  393. package/apps/relay/dist/machine-command-result-handlers.js +0 -1257
  394. package/apps/relay/dist/machine-handler-context.d.ts +0 -90
  395. package/apps/relay/dist/machine-handler-context.js +0 -1
  396. package/apps/relay/dist/machine-reliability.d.ts +0 -7
  397. package/apps/relay/dist/machine-reliability.js +0 -12
  398. package/apps/relay/dist/machine-state.d.ts +0 -27
  399. package/apps/relay/dist/machine-state.js +0 -39
  400. package/apps/relay/dist/metadata-source.d.ts +0 -3
  401. package/apps/relay/dist/metadata-source.js +0 -16
  402. package/apps/relay/dist/projection-repository.d.ts +0 -99
  403. package/apps/relay/dist/projection-repository.js +0 -370
  404. package/apps/relay/dist/session-creation-failure.d.ts +0 -4
  405. package/apps/relay/dist/session-creation-failure.js +0 -54
  406. package/apps/relay/dist/session-projection-reducer.d.ts +0 -4
  407. package/apps/relay/dist/session-projection-reducer.js +0 -1108
  408. package/apps/relay/dist/turn-repository.d.ts +0 -175
  409. package/apps/relay/dist/turn-repository.js +0 -722
  410. package/apps/relay/dist/ui-probe-router.d.ts +0 -35
  411. package/apps/relay/dist/ui-probe-router.js +0 -414
  412. package/build-identity.json +0 -6
  413. package/npm-shrinkwrap.json +0 -2226
  414. package/packages/client/dist/account-management.d.ts +0 -158
  415. package/packages/client/dist/account-management.js +0 -892
  416. package/packages/client/dist/live-session-state.d.ts +0 -15
  417. package/packages/client/dist/live-session-state.js +0 -69
  418. package/packages/client/dist/live-state.d.ts +0 -8
  419. package/packages/client/dist/live-state.js +0 -44
  420. package/packages/client/dist/live-types.d.ts +0 -161
  421. package/packages/client/dist/live-types.js +0 -1
  422. package/packages/client/dist/live.d.ts +0 -122
  423. package/packages/client/dist/live.js +0 -1712
  424. package/packages/client/dist/recovery-context.d.ts +0 -37
  425. package/packages/client/dist/recovery-context.js +0 -97
  426. package/packages/client/dist/schedule-presets.d.ts +0 -17
  427. package/packages/client/dist/schedule-presets.js +0 -33
  428. package/packages/client/dist/session-event-order.d.ts +0 -16
  429. package/packages/client/dist/session-event-order.js +0 -83
  430. package/packages/client/dist/session-event-window.d.ts +0 -5
  431. package/packages/client/dist/session-event-window.js +0 -54
  432. package/packages/client/dist/turns.d.ts +0 -9
  433. package/packages/client/dist/turns.js +0 -34
  434. package/packages/client/dist/ui-probe.d.ts +0 -116
  435. package/packages/client/dist/ui-probe.js +0 -826
  436. package/packages/daemon-service/dist/index.d.ts +0 -186
  437. package/packages/daemon-service/dist/index.js +0 -2390
  438. package/packages/memory/dist/access.d.ts +0 -44
  439. package/packages/memory/dist/access.js +0 -357
  440. package/packages/memory/dist/chunk.d.ts +0 -16
  441. package/packages/memory/dist/chunk.js +0 -51
  442. package/packages/memory/dist/embeddings.d.ts +0 -10
  443. package/packages/memory/dist/embeddings.js +0 -77
  444. package/packages/memory/dist/index.d.ts +0 -7
  445. package/packages/memory/dist/index.js +0 -7
  446. package/packages/memory/dist/manager.d.ts +0 -71
  447. package/packages/memory/dist/manager.js +0 -789
  448. package/packages/memory/dist/paths.d.ts +0 -11
  449. package/packages/memory/dist/paths.js +0 -42
  450. package/packages/memory/dist/projects.d.ts +0 -13
  451. package/packages/memory/dist/projects.js +0 -211
  452. package/packages/memory/dist/store.d.ts +0 -19
  453. package/packages/memory/dist/store.js +0 -210
  454. package/packages/memory/dist/types.d.ts +0 -70
  455. package/packages/memory/dist/types.js +0 -8
  456. package/packages/pie-provider/dist/turn-observation-store.d.ts +0 -44
  457. package/packages/pie-provider/dist/turn-observation-store.js +0 -306
  458. package/packages/provider-protocol/dist/index.d.ts +0 -1439
  459. package/packages/provider-protocol/dist/index.js +0 -476
  460. package/packages/runtime-acpx/dist/turn-observation-store.d.ts +0 -40
  461. package/packages/runtime-acpx/dist/turn-observation-store.js +0 -213
  462. package/packages/runtime-cli/dist/backend-session-lease.d.ts +0 -40
  463. package/packages/runtime-cli/dist/backend-session-lease.js +0 -561
  464. package/packages/runtime-cli/dist/persistent-turn-observation-store.d.ts +0 -50
  465. package/packages/runtime-cli/dist/persistent-turn-observation-store.js +0 -252
  466. package/packages/runtime-cli/dist/process-identity.d.ts +0 -15
  467. package/packages/runtime-cli/dist/process-identity.js +0 -102
  468. package/packages/runtime-cli/dist/runtime-status.d.ts +0 -20
  469. package/packages/runtime-cli/dist/runtime-status.js +0 -133
  470. package/packages/runtime-cli/dist/turn-observation.d.ts +0 -33
  471. package/packages/runtime-cli/dist/turn-observation.js +0 -114
  472. package/packages/shared/dist/account.d.ts +0 -302
  473. package/packages/shared/dist/account.js +0 -348
  474. package/packages/shared/dist/daemon-lifecycle.d.ts +0 -85
  475. package/packages/shared/dist/daemon-lifecycle.js +0 -66
  476. package/packages/shared/dist/diagnostics.d.ts +0 -21
  477. package/packages/shared/dist/diagnostics.js +0 -156
  478. package/packages/shared/dist/node/daemon-process.d.ts +0 -91
  479. package/packages/shared/dist/node/daemon-process.js +0 -485
  480. package/packages/shared/dist/node/gateway-store.d.ts +0 -279
  481. package/packages/shared/dist/node/gateway-store.js +0 -2451
  482. package/packages/shared/dist/process-command.d.ts +0 -6
  483. package/packages/shared/dist/process-command.js +0 -113
  484. package/packages/shared/dist/relay-url.d.ts +0 -8
  485. package/packages/shared/dist/relay-url.js +0 -37
  486. package/packages/shared/dist/turn-state.d.ts +0 -86
  487. package/packages/shared/dist/turn-state.js +0 -34
  488. package/packages/shared/dist/ui-probe.d.ts +0 -459
  489. package/packages/shared/dist/ui-probe.js +0 -257
package/README.md CHANGED
@@ -5,19 +5,11 @@ Public beta CLI for Happy Elves.
5
5
  ## Hosted relay
6
6
 
7
7
  ```bash
8
- happy-elves start
9
- ```
10
-
11
- Reconnect this Device to an existing Account with a one-time invite from Settings → Devices → Add Device (the CLI command name is retained for compatibility):
12
-
13
- ```bash
14
- happy-elves remote join-controller --url "<invite-url>" --recover-controller --json
8
+ happy-elves account create --relay https://relay.happyelves.ai --device-name "CLI" --json
15
9
  ```
16
10
 
17
11
  ## Self-host relay
18
12
 
19
13
  ```bash
20
- HAPPY_ELVES_ENV=production \
21
- HAPPY_ELVES_ALLOWED_ORIGINS=https://your-controller.example \
22
14
  happy-elves relay serve --host 0.0.0.0 --port 8787 --json
23
15
  ```
@@ -1,6 +1,2 @@
1
1
  import type { CommandInput } from "./command.js";
2
- export declare function confirmReset(flags: Record<string, string | boolean>, testIo?: {
3
- interactive: boolean;
4
- question?: () => Promise<string>;
5
- }): Promise<void>;
6
2
  export declare function handleAccount({ domain, action, flags }: CommandInput): Promise<boolean>;
@@ -1,419 +1,52 @@
1
1
  import fs from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- import { createInterface } from "node:readline/promises";
5
- import { accountBindingPath, assertNoPendingEnrollmentAuthority, CliError, configDir, configPath, generateAccountSecret, ok, parseControllerConfig, parseDaemonConfig, parseLocalAccountBinding, parsePairingStartResponse, randomId, readLocalAccountBinding, readRelayJson, requireRelayUrl, stopLocalDaemon, throwRelayHttpError, withAccountConfigTransaction, } from "./lib/index.js";
6
- import { createLocalAccountBindingV1, localAccountBindingMatchesV1, } from "../../../../packages/shared/dist/index.js";
7
- import { commitAccountSnapshotMutation, } from "./lib/account-snapshot.js";
8
- const daemonConfigPath = path.join(configDir, "daemon.json");
9
- const accountConfigFiles = ["config.json", "daemon.json", "account.json"];
10
- const accountCreateRelayTimeoutMs = 15_000;
11
- function accountConfigTarget(file) {
12
- if (file === "config.json")
13
- return configPath;
14
- return file === "daemon.json" ? daemonConfigPath : accountBindingPath;
15
- }
16
- export async function confirmReset(flags, testIo) {
17
- if (flags.json === true) {
18
- if (flags.yes === true)
19
- return;
20
- throw new CliError("account reset --json requires --yes", "CONFIRMATION_REQUIRED");
21
- }
22
- const interactive = testIo?.interactive ?? Boolean(process.stdin.isTTY && process.stdout.isTTY);
23
- if (!interactive) {
24
- if (flags.yes === true)
25
- return;
26
- throw new CliError("account reset requires --yes in non-interactive mode", "CONFIRMATION_REQUIRED");
27
- }
28
- if (testIo?.question) {
29
- const answer = await testIo.question();
30
- if (answer.trim() !== "RESET")
31
- throw new CliError("Account reset cancelled", "CONFIRMATION_REQUIRED");
32
- return;
33
- }
34
- const prompt = createInterface({ input: process.stdin, output: process.stdout });
35
- try {
36
- const answer = await prompt.question("Type RESET to remove this controller and daemon configuration: ");
37
- if (answer.trim() !== "RESET")
38
- throw new CliError("Account reset cancelled", "CONFIRMATION_REQUIRED");
39
- }
40
- finally {
41
- prompt.close();
42
- }
43
- }
44
- async function confirmRestore(flags, requiresConfirmation, testIo) {
45
- if (!requiresConfirmation)
46
- return;
47
- if (flags.json === true) {
48
- if (flags.yes === true)
49
- return;
50
- throw new CliError("account restore --json requires --yes when replacing or removing configuration", "CONFIRMATION_REQUIRED");
51
- }
52
- const interactive = testIo?.interactive ?? Boolean(process.stdin.isTTY && process.stdout.isTTY);
53
- if (!interactive) {
54
- if (flags.yes === true)
55
- return;
56
- throw new CliError("account restore requires --yes in non-interactive mode when replacing or removing configuration", "CONFIRMATION_REQUIRED");
57
- }
58
- if (testIo?.question) {
59
- const answer = await testIo.question();
60
- if (answer.trim() !== "RESTORE")
61
- throw new CliError("Account restore cancelled", "CONFIRMATION_REQUIRED");
62
- return;
63
- }
64
- const prompt = createInterface({ input: process.stdin, output: process.stdout });
65
- try {
66
- const answer = await prompt.question("Type RESTORE to replace the current controller and daemon configuration: ");
67
- if (answer.trim() !== "RESTORE")
68
- throw new CliError("Account restore cancelled", "CONFIRMATION_REQUIRED");
69
- }
70
- finally {
71
- prompt.close();
72
- }
73
- }
74
- async function copyConfigIfPresent(source, target) {
75
- try {
76
- const stat = await fs.lstat(source);
77
- if (!stat.isFile() || stat.isSymbolicLink())
78
- throw new CliError(`Refusing to copy non-regular config file: ${source}`, "CONFIG_BACKUP_UNSAFE");
79
- const contents = await fs.readFile(source);
80
- let handle;
81
- try {
82
- handle = await fs.open(target, "wx", 0o600);
83
- await handle.writeFile(contents);
84
- await handle.chmod(0o600);
85
- await handle.sync();
86
- }
87
- finally {
88
- await handle?.close().catch(() => undefined);
89
- }
90
- return true;
91
- }
92
- catch (error) {
93
- if (error.code === "ENOENT")
94
- return false;
95
- throw error;
96
- }
97
- }
98
- const unsupportedWindowsDirectorySyncCodes = new Set(["EINVAL", "ENOTSUP", "EISDIR", "EPERM"]);
99
- async function syncDirectory(directory) {
100
- let handle;
101
- try {
102
- handle = await fs.open(directory, "r");
103
- await handle.sync();
104
- }
105
- catch (error) {
106
- if (process.platform !== "win32"
107
- || !unsupportedWindowsDirectorySyncCodes.has(error.code ?? ""))
108
- throw error;
109
- }
110
- finally {
111
- await handle?.close().catch(() => undefined);
112
- }
113
- }
114
- async function writeSyncedBackupManifest(filePath, contents) {
115
- let handle;
116
- try {
117
- handle = await fs.open(filePath, "wx", 0o600);
118
- await handle.writeFile(contents, "utf8");
119
- await handle.chmod(0o600);
120
- await handle.sync();
121
- }
122
- finally {
123
- await handle?.close().catch(() => undefined);
124
- }
125
- }
126
- async function backupAccountConfig(prefix = "account-reset") {
127
- const stamp = new Date().toISOString().replace(/[:.]/gu, "-");
128
- const backupsRoot = path.join(configDir, "backups");
129
- let rootCreated = false;
130
- try {
131
- await fs.mkdir(backupsRoot, { mode: 0o700 });
132
- rootCreated = true;
133
- }
134
- catch (error) {
135
- if (error.code !== "EEXIST")
136
- throw error;
137
- }
138
- const backupsStat = await fs.lstat(backupsRoot);
139
- if (!backupsStat.isDirectory() || backupsStat.isSymbolicLink()) {
140
- throw new CliError("Refusing to write an account backup through an unsafe backups path.", "CONFIG_BACKUP_UNSAFE");
141
- }
142
- await fs.chmod(backupsRoot, 0o700);
143
- if (rootCreated)
144
- await syncDirectory(configDir);
145
- const backupPath = path.join(backupsRoot, `${prefix}-${stamp}-${randomId("backup")}`);
146
- const stagingPath = path.join(backupsRoot, `.account-backup-staging-${randomId("backup")}`);
147
- await fs.mkdir(stagingPath, { mode: 0o700 });
148
- await fs.chmod(stagingPath, 0o700);
149
- await syncDirectory(backupsRoot);
150
- const files = [];
151
- if (await copyConfigIfPresent(configPath, path.join(stagingPath, "config.json")))
152
- files.push("config.json");
153
- if (await copyConfigIfPresent(daemonConfigPath, path.join(stagingPath, "daemon.json")))
154
- files.push("daemon.json");
155
- if (await copyConfigIfPresent(accountBindingPath, path.join(stagingPath, "account.json")))
156
- files.push("account.json");
157
- await writeSyncedBackupManifest(path.join(stagingPath, "manifest.json"), JSON.stringify({ version: 1, createdAt: new Date().toISOString(), files }, null, 2) + "\n");
158
- await syncDirectory(stagingPath);
159
- await fs.rename(stagingPath, backupPath);
160
- await syncDirectory(backupsRoot);
161
- return { path: backupPath, files };
162
- }
163
- async function requireDaemonStopped() {
164
- let stop;
165
- try {
166
- stop = await stopLocalDaemon();
167
- }
168
- catch (error) {
169
- if (error instanceof CliError && ["DAEMON_PID_UNVERIFIED", "DAEMON_PID_VERSION_UNSUPPORTED", "DAEMON_PID_INVALID"].includes(error.code))
170
- throw error;
171
- throw new CliError(`Could not stop the local daemon: ${error instanceof Error ? error.message : String(error)}`, "DAEMON_STOP_FAILED");
172
- }
173
- if (stop.running) {
174
- throw new CliError(`The local daemon${stop.pid ? ` (pid ${stop.pid})` : ""} did not stop. Configuration was not changed; stop it and retry.`, "DAEMON_STOP_FAILED");
175
- }
176
- return stop;
177
- }
178
- async function requireRegularBackupFile(filePath) {
179
- let stat;
180
- try {
181
- stat = await fs.lstat(filePath);
182
- }
183
- catch (error) {
184
- if (error.code === "ENOENT") {
185
- throw new CliError(`Account backup is missing ${path.basename(filePath)}.`, "ACCOUNT_BACKUP_INVALID");
186
- }
187
- throw error;
188
- }
189
- if (!stat.isFile() || stat.isSymbolicLink()) {
190
- throw new CliError(`Account backup contains an unsafe ${path.basename(filePath)}.`, "ACCOUNT_BACKUP_INVALID");
191
- }
192
- }
193
- async function stageAccountRestore(backupPath, requestedFiles) {
194
- await fs.mkdir(configDir, { recursive: true, mode: 0o700 });
195
- await fs.chmod(configDir, 0o700);
196
- const stagingPath = await fs.mkdtemp(path.join(configDir, ".account-restore-"));
197
- await fs.chmod(stagingPath, 0o700);
198
- let files = [...requestedFiles];
199
- let controller;
200
- let daemon;
201
- let binding;
202
- try {
203
- for (const file of files) {
204
- const source = path.join(backupPath, file);
205
- await requireRegularBackupFile(source);
206
- const contents = await fs.readFile(source, "utf8");
207
- try {
208
- const parsed = JSON.parse(contents);
209
- if (file === "config.json")
210
- controller = parseControllerConfig(parsed);
211
- else if (file === "daemon.json")
212
- daemon = parseDaemonConfig(parsed);
213
- else if (file === "account.json")
214
- binding = parseLocalAccountBinding(parsed);
215
- }
216
- catch {
217
- throw new CliError(`Account backup ${file} is not valid JSON.`, "ACCOUNT_BACKUP_INVALID");
218
- }
219
- const staged = path.join(stagingPath, file);
220
- await fs.writeFile(staged, contents, { mode: 0o600, flag: "wx" });
221
- await fs.chmod(staged, 0o600);
222
- }
223
- if (controller && daemon &&
224
- (controller.relayUrl !== daemon.relayUrl ||
225
- controller.accountSecret !== daemon.accountSecret)) {
226
- throw new CliError("Account backup Device and Daemon credentials identify different Accounts.", "ACCOUNT_BACKUP_INVALID");
227
- }
228
- if (binding) {
229
- if (controller && !localAccountBindingMatchesV1(binding, {
230
- relayUrl: controller.relayUrl,
231
- accountSecret: controller.accountSecret,
232
- }) ||
233
- daemon && !localAccountBindingMatchesV1(binding, {
234
- relayUrl: daemon.relayUrl,
235
- accountId: daemon.accountId,
236
- accountSecret: daemon.accountSecret,
237
- })) {
238
- throw new CliError("Account backup binding does not match its Device or Daemon credential.", "ACCOUNT_BACKUP_INVALID");
239
- }
240
- }
241
- else if (controller || daemon) {
242
- const credential = controller ?? daemon;
243
- if (!credential)
244
- throw new CliError("Account backup credential is missing.", "ACCOUNT_BACKUP_INVALID");
245
- binding = createLocalAccountBindingV1({
246
- relayUrl: credential.relayUrl,
247
- accountId: daemon?.accountId ?? null,
248
- accountSecret: credential.accountSecret,
249
- });
250
- const stagedBinding = path.join(stagingPath, "account.json");
251
- await fs.writeFile(stagedBinding, `${JSON.stringify(binding, null, 2)}\n`, { mode: 0o600, flag: "wx" });
252
- await fs.chmod(stagedBinding, 0o600);
253
- files = [...files, "account.json"];
254
- }
255
- return { path: stagingPath, files };
256
- }
257
- catch (error) {
258
- await fs.rm(stagingPath, { recursive: true, force: true });
259
- throw error;
260
- }
261
- }
262
- async function currentAccountConfigFiles() {
263
- const existing = [];
264
- for (const file of accountConfigFiles) {
265
- const target = accountConfigTarget(file);
266
- try {
267
- const stat = await fs.lstat(target);
268
- if (!stat.isFile() || stat.isSymbolicLink()) {
269
- throw new CliError(`Refusing to replace unsafe account config: ${target}`, "ACCOUNT_RESTORE_UNSAFE");
270
- }
271
- existing.push(file);
272
- }
273
- catch (error) {
274
- if (error.code === "ENOENT")
275
- continue;
276
- throw error;
277
- }
278
- }
279
- return existing;
280
- }
4
+ import { configDir, configPath, generateAccountSecret, ok, parsePairingStartResponse, randomId, readRelayJson, requireRelayUrl, stopLocalDaemon, throwRelayHttpError, writeConfig } from "./lib/index.js";
281
5
  export async function handleAccount({ domain, action, flags }) {
282
6
  if (domain === "account" && action === "create") {
283
- const created = await withAccountConfigTransaction(async (transaction) => {
284
- await assertNoPendingEnrollmentAuthority();
285
- // This check intentionally precedes every relay request. Holding the
286
- // account-wide lease through pairing prevents concurrent creators from
287
- // producing an orphan remote account and racing the local credential.
288
- if (await transaction.accountExists() ||
289
- await transaction.controllerExists() ||
290
- await transaction.daemonExists()) {
291
- throw new CliError("Happy Elves account configuration already exists. Use an invite to recover the existing account; account create never replaces credentials.", "CONFIG_EXISTS");
292
- }
293
- const relayUrl = requireRelayUrl(flags);
294
- const deviceId = typeof flags["device-id"] === "string" ? flags["device-id"] : randomId("dev");
295
- const deviceName = typeof flags["device-name"] === "string" ? flags["device-name"] : os.hostname();
296
- const accountSecret = generateAccountSecret();
297
- let response;
298
- try {
299
- response = await fetch(`${relayUrl}/api/pairing/start`, {
300
- method: "POST",
301
- headers: { "content-type": "application/json" },
302
- body: JSON.stringify({ deviceId, deviceName, surface: "cli" }),
303
- signal: AbortSignal.timeout(accountCreateRelayTimeoutMs),
304
- });
305
- }
306
- catch (error) {
307
- if (error.name === "TimeoutError") {
308
- throw new CliError("Timed out creating the account at the relay. No local configuration was written.", "RELAY_TIMEOUT");
309
- }
310
- throw error;
311
- }
312
- if (!response.ok) {
313
- await throwRelayHttpError(response, "Account creation failed");
314
- }
315
- const paired = parsePairingStartResponse(await readRelayJson(response, "Account creation response is not valid JSON"));
316
- const config = {
317
- relayUrl,
318
- controllerToken: paired.controllerToken,
319
- accountSecret,
320
- };
321
- await transaction.writeController(config, "create", paired.accountId);
322
- return {
323
- accountId: paired.accountId,
324
- configPath,
325
- relayUrl,
326
- deviceId,
327
- controllerToken: paired.controllerToken,
328
- accountSecret,
329
- pairingCode: paired.pairingCode,
330
- expiresAt: paired.expiresAt,
331
- };
7
+ const relayUrl = requireRelayUrl(flags);
8
+ const deviceId = typeof flags["device-id"] === "string" ? flags["device-id"] : randomId("dev");
9
+ const deviceName = typeof flags["device-name"] === "string" ? flags["device-name"] : os.hostname();
10
+ const accountSecret = generateAccountSecret();
11
+ const response = await fetch(`${relayUrl}/api/pairing/start`, {
12
+ method: "POST",
13
+ headers: { "content-type": "application/json" },
14
+ body: JSON.stringify({ deviceId, deviceName }),
15
+ });
16
+ if (!response.ok) {
17
+ await throwRelayHttpError(response, "Account creation failed");
18
+ }
19
+ const paired = parsePairingStartResponse(await readRelayJson(response, "Account creation response is not valid JSON"));
20
+ const config = {
21
+ relayUrl,
22
+ controllerToken: paired.controllerToken,
23
+ accountSecret,
24
+ };
25
+ await writeConfig(config);
26
+ ok("account.create", {
27
+ accountId: paired.accountId,
28
+ configPath,
29
+ relayUrl,
30
+ deviceId,
31
+ controllerToken: paired.controllerToken,
32
+ accountSecret,
33
+ pairingCode: paired.pairingCode,
34
+ expiresAt: paired.expiresAt,
332
35
  });
333
- if (flags["reveal-secrets"] === true) {
334
- ok("account.create", created);
335
- }
336
- else {
337
- const { controllerToken: _controllerToken, accountSecret: _accountSecret, ...safeCreated } = created;
338
- ok("account.create", safeCreated);
339
- }
340
36
  return true;
341
37
  }
342
38
  if (domain === "account" && action === "reset") {
343
- await confirmReset(flags);
344
- // Reject an unknown or malformed ownership boundary before stopping a
345
- // healthy Daemon. The locked read below repeats this check at commit.
346
- await readLocalAccountBinding();
347
- await assertNoPendingEnrollmentAuthority();
348
- const { backup, stop } = await withAccountConfigTransaction(async (transaction) => {
349
- await transaction.readAccountBinding();
350
- await assertNoPendingEnrollmentAuthority();
351
- // Lock order is Account config -> verified Daemon lifetime. Local
352
- // start/restart use the same order, so no process can reload the old
353
- // credential between this stop and the snapshot commit.
354
- const stop = await requireDaemonStopped();
355
- const result = await backupAccountConfig();
356
- await commitAccountSnapshotMutation({}, "reset");
357
- return { backup: result, stop };
358
- });
39
+ const stop = await stopLocalDaemon().catch((error) => ({
40
+ error: error instanceof Error ? error.message : String(error),
41
+ }));
42
+ await fs.rm(configPath, { force: true });
43
+ await fs.rm(path.join(configDir, "daemon.json"), { force: true });
359
44
  ok("account.reset", {
360
- removed: [configPath, daemonConfigPath, accountBindingPath],
361
- backup,
362
- restoreCommand: `happy-elves account restore --from ${JSON.stringify(backup.path)} --yes --json`,
45
+ removed: [configPath, path.join(configDir, "daemon.json")],
363
46
  stop,
364
47
  });
365
48
  return true;
366
49
  }
367
- if (domain === "account" && action === "restore") {
368
- const backupPath = typeof flags.from === "string" && flags.from.trim() ? path.resolve(flags.from) : undefined;
369
- if (!backupPath)
370
- throw new CliError("Missing --from", "MISSING_ARGUMENT");
371
- const manifestPath = path.join(backupPath, "manifest.json");
372
- let manifest;
373
- try {
374
- await requireRegularBackupFile(manifestPath);
375
- manifest = JSON.parse(await fs.readFile(manifestPath, "utf8"));
376
- }
377
- catch (error) {
378
- throw new CliError(`Invalid account backup: ${error instanceof Error ? error.message : String(error)}`, "ACCOUNT_BACKUP_INVALID");
379
- }
380
- if (manifest.version !== 1 ||
381
- !Array.isArray(manifest.files) ||
382
- !manifest.files.every((file) => accountConfigFiles.includes(file)) ||
383
- new Set(manifest.files).size !== manifest.files.length) {
384
- throw new CliError("Account backup manifest is invalid", "ACCOUNT_BACKUP_INVALID");
385
- }
386
- const files = manifest.files;
387
- const staged = await stageAccountRestore(backupPath, files);
388
- try {
389
- const existing = await currentAccountConfigFiles();
390
- await confirmRestore(flags, files.length === 0 || existing.length > 0);
391
- await readLocalAccountBinding();
392
- await assertNoPendingEnrollmentAuthority();
393
- const { preRestoreBackup, restored, stop } = await withAccountConfigTransaction(async (transaction) => {
394
- await transaction.readAccountBinding();
395
- await assertNoPendingEnrollmentAuthority();
396
- const stop = await requireDaemonStopped();
397
- const preRestoreBackup = await backupAccountConfig("account-pre-restore");
398
- const desired = {};
399
- for (const file of staged.files) {
400
- desired[file] = await fs.readFile(path.join(staged.path, file), "utf8");
401
- }
402
- const restored = await commitAccountSnapshotMutation(desired, "restore");
403
- return { preRestoreBackup, restored, stop };
404
- });
405
- ok("account.restore", {
406
- backupPath,
407
- ...restored,
408
- preRestoreBackup,
409
- restorePreviousCommand: `happy-elves account restore --from ${JSON.stringify(preRestoreBackup.path)} --yes --json`,
410
- stop,
411
- });
412
- }
413
- finally {
414
- await fs.rm(staged.path, { recursive: true, force: true });
415
- }
416
- return true;
417
- }
418
50
  return false;
419
51
  }
52
+ //# sourceMappingURL=account.js.map
@@ -1,46 +1,45 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
1
3
  import { handleAccount } from "./account.js";
2
4
  import { handleCollect } from "./collect.js";
3
5
  import { handleConfig } from "./config.js";
4
6
  import { handleDaemon } from "./daemon.js";
5
- import { handleDiagnostics } from "./diagnostics.js";
6
7
  import { handleGateway } from "./gateway.js";
7
8
  import { handleLoop } from "./loop.js";
8
9
  import { handleMachine } from "./machine.js";
9
10
  import { handleMemory } from "./memory.js";
10
- import { handleOrchestrator } from "./orchestrator.js";
11
11
  import { handleRelay } from "./relay.js";
12
+ import { handleSchedule } from "./schedule.js";
12
13
  import { handleRemote } from "./remote.js";
13
14
  import { handleSession } from "./session.js";
14
- import { handleSkill } from "./skill.js";
15
15
  import { handleToken } from "./token.js";
16
16
  import { handleTurn } from "./turn.js";
17
- import { buildIdentity, cliVersion, commandUsage, commandUsageText, handleCliError, ok, parseCliFlags, skillText, startBootstrap, topLevelDoctor, topLevelStatus, usage, usageText } from "./lib/index.js";
17
+ import { handleWorkspace } from "./workspace.js";
18
+ import { commandUsage, commandUsageText, handleCliError, parseCliFlags, skillText, startBootstrap, topLevelDoctor, topLevelStatus, usage, usageText } from "./lib/index.js";
18
19
  export { handleCliError };
19
20
  const domainHandlers = [
20
21
  handleAccount,
21
22
  handleConfig,
22
23
  handleRemote,
23
24
  handleToken,
25
+ handleGateway,
24
26
  handleLoop,
25
27
  handleDaemon,
26
- handleDiagnostics,
27
28
  handleRelay,
28
29
  handleMachine,
29
30
  handleMemory,
30
- handleGateway,
31
- handleOrchestrator,
31
+ handleSchedule,
32
32
  handleSession,
33
- handleSkill,
34
33
  handleTurn,
34
+ handleWorkspace,
35
35
  handleCollect,
36
36
  ];
37
37
  export async function main() {
38
- const rawArgv = process.argv.slice(2);
39
- const argv = rawArgv[0] === "--" ? rawArgv.slice(1) : rawArgv;
38
+ const argv = process.argv.slice(2);
40
39
  const [domain] = argv;
41
40
  if (!domain)
42
41
  usage();
43
- if (domain === "--skill") {
42
+ if (domain === "--skill" || domain === "skill") {
44
43
  console.log(skillText());
45
44
  return;
46
45
  }
@@ -48,18 +47,10 @@ export async function main() {
48
47
  console.log(usageText());
49
48
  return;
50
49
  }
51
- if (domain === "--version" || domain === "-v") {
50
+ if (domain === "--version" || domain === "-v" || domain === "version") {
52
51
  console.log(cliVersion());
53
52
  return;
54
53
  }
55
- if (domain === "version") {
56
- const { flags } = parseCliFlags(argv.slice(1));
57
- if (flags.json === true)
58
- ok("version", buildIdentity());
59
- else
60
- console.log(cliVersion());
61
- return;
62
- }
63
54
  const topLevelHelpRequested = argv[1] === "help" || argv.slice(1).some((arg) => arg === "--help" || arg === "-h");
64
55
  if (topLevelHelpRequested && commandUsageText(domain)) {
65
56
  console.log(commandUsageText(domain));
@@ -97,3 +88,21 @@ export async function main() {
97
88
  }
98
89
  usage();
99
90
  }
91
+ function cliVersion() {
92
+ for (const candidate of [
93
+ path.resolve(import.meta.dirname, "..", "..", "..", "..", "package.json"),
94
+ path.resolve(import.meta.dirname, "..", "..", "..", "package.json"),
95
+ path.resolve(import.meta.dirname, "..", "..", "package.json"),
96
+ ]) {
97
+ try {
98
+ const parsed = JSON.parse(fs.readFileSync(candidate, "utf8"));
99
+ if (typeof parsed.version === "string" && parsed.version.trim())
100
+ return parsed.version.trim();
101
+ }
102
+ catch {
103
+ // Try the next packaged/source layout.
104
+ }
105
+ }
106
+ return "0.1.0";
107
+ }
108
+ //# sourceMappingURL=app.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 { assertNoPendingEnrollmentAuthority, CliError, configPath, ok, readConfig, redactedControllerConfig, redactedRelayUrl, requireRelayUrl, requireString, wantsJson, withAccountConfigTransaction } 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 = {
@@ -6,20 +6,8 @@ export async function handleConfig({ domain, action, flags }) {
6
6
  controllerToken: requireString(flags, "token"),
7
7
  accountSecret: requireString(flags, "secret"),
8
8
  };
9
- await withAccountConfigTransaction(async (transaction) => {
10
- await assertNoPendingEnrollmentAuthority();
11
- if (await transaction.accountExists()) {
12
- throw new CliError("Account binding already exists. config init never replaces Account ownership.", "CONFIG_EXISTS");
13
- }
14
- if (await transaction.controllerExists()) {
15
- throw new CliError("Controller configuration already exists. config init never replaces credentials.", "CONFIG_EXISTS");
16
- }
17
- if (await transaction.daemonExists()) {
18
- throw new CliError("A daemon configuration already exists. Recover a controller with a same-account invite instead of creating an unverifiable split configuration.", "CONFIG_SPLIT_BRAIN");
19
- }
20
- await transaction.writeController(config, "create");
21
- });
22
- ok("config.init", { path: configPath, relayUrl: redactedRelayUrl(config.relayUrl) });
9
+ await writeConfig(config);
10
+ ok("config.init", { path: configPath, relayUrl: config.relayUrl });
23
11
  return true;
24
12
  }
25
13
  if (domain === "config" && action === "show") {
@@ -28,7 +16,7 @@ export async function handleConfig({ domain, action, flags }) {
28
16
  const redacted = redactedControllerConfig(config);
29
17
  console.log(`Config: ${configPath}`);
30
18
  console.log(`Relay: ${redacted.relayUrl}`);
31
- console.log(`Device credential: ${redacted.hasControllerToken ? "configured" : "missing"}`);
19
+ console.log(`Controller token: ${redacted.hasControllerToken ? "configured" : "missing"}`);
32
20
  console.log(`Account secret: ${redacted.hasAccountSecret ? "configured" : "missing"}`);
33
21
  return true;
34
22
  }
@@ -40,3 +28,4 @@ export async function handleConfig({ domain, action, flags }) {
40
28
  }
41
29
  return false;
42
30
  }
31
+ //# sourceMappingURL=config.js.map