@cydm/happy-elves 0.1.0-beta.80 → 0.1.0-beta.82

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 (469) 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 +91 -412
  9. package/apps/cli/dist/commands/gateway.js +290 -1209
  10. package/apps/cli/dist/commands/lib/args.js +15 -78
  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 -447
  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 +34 -347
  24. package/apps/cli/dist/commands/lib/exit.d.ts +0 -1
  25. package/apps/cli/dist/commands/lib/exit.js +31 -69
  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 +1 -1
  31. package/apps/cli/dist/commands/lib/json.js +3 -8
  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 +1 -9
  47. package/apps/cli/dist/commands/lib/session-output.js +16 -88
  48. package/apps/cli/dist/commands/lib/session-view.d.ts +2 -3
  49. package/apps/cli/dist/commands/lib/session-view.js +41 -64
  50. package/apps/cli/dist/commands/lib/status.js +10 -41
  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 +125 -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 +73 -225
  60. package/apps/cli/dist/commands/relay.js +34 -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 +212 -0
  64. package/apps/cli/dist/commands/session.d.ts +0 -26
  65. package/apps/cli/dist/commands/session.js +82 -352
  66. package/apps/cli/dist/commands/token.js +2 -9
  67. package/apps/cli/dist/commands/turn.js +28 -122
  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 -13
  72. package/apps/daemon/dist/app.js +1 -0
  73. package/apps/daemon/dist/args.js +2 -8
  74. package/apps/daemon/dist/audit.d.ts +1 -1
  75. package/apps/daemon/dist/audit.js +3 -4
  76. package/apps/daemon/dist/cli.js +3 -9
  77. package/apps/daemon/dist/config.d.ts +1 -6
  78. package/apps/daemon/dist/config.js +11 -200
  79. package/apps/daemon/dist/errors.js +1 -0
  80. package/apps/daemon/dist/loop/runner.js +69 -950
  81. package/apps/daemon/dist/loop/store.d.ts +2 -11
  82. package/apps/daemon/dist/loop/store.js +35 -119
  83. package/apps/daemon/dist/pair.js +24 -151
  84. package/apps/daemon/dist/paths.d.ts +3 -14
  85. package/apps/daemon/dist/paths.js +4 -30
  86. package/apps/daemon/dist/process.d.ts +8 -44
  87. package/apps/daemon/dist/process.js +57 -521
  88. package/apps/daemon/dist/relay/connection.d.ts +1 -1
  89. package/apps/daemon/dist/relay/connection.js +19 -225
  90. package/apps/daemon/dist/relay/devtools.d.ts +1 -1
  91. package/apps/daemon/dist/relay/devtools.js +23 -27
  92. package/apps/daemon/dist/relay/register.d.ts +0 -3
  93. package/apps/daemon/dist/relay/register.js +3 -61
  94. package/apps/daemon/dist/relay/send.d.ts +4 -36
  95. package/apps/daemon/dist/relay/send.js +23 -286
  96. package/apps/daemon/dist/relay-http.js +13 -4
  97. package/apps/daemon/dist/runtime/external-provider.d.ts +1 -1
  98. package/apps/daemon/dist/runtime/external-provider.js +117 -389
  99. package/apps/daemon/dist/runtime.d.ts +1 -1
  100. package/apps/daemon/dist/runtime.js +7 -13
  101. package/apps/daemon/dist/session/create-session.d.ts +1 -1
  102. package/apps/daemon/dist/session/create-session.js +3 -9
  103. package/apps/daemon/dist/session/directory.d.ts +1 -6
  104. package/apps/daemon/dist/session/directory.js +48 -106
  105. package/apps/daemon/dist/session/events.d.ts +0 -3
  106. package/apps/daemon/dist/session/events.js +8 -81
  107. package/apps/daemon/dist/session/file-preview.js +7 -3
  108. package/apps/daemon/dist/session/lifecycle.d.ts +2 -6
  109. package/apps/daemon/dist/session/lifecycle.js +83 -429
  110. package/apps/daemon/dist/session/metadata.d.ts +2 -7
  111. package/apps/daemon/dist/session/metadata.js +13 -90
  112. package/apps/daemon/dist/session/primitives.js +17 -66
  113. package/apps/daemon/dist/session/prompt.d.ts +0 -5
  114. package/apps/daemon/dist/session/prompt.js +102 -798
  115. package/apps/daemon/dist/session/runtime-handle.js +1 -0
  116. package/apps/daemon/dist/start.js +20 -305
  117. package/apps/daemon/dist/state.d.ts +0 -30
  118. package/apps/daemon/dist/state.js +1 -0
  119. package/apps/daemon/dist/turn-coordinator.d.ts +2 -53
  120. package/apps/daemon/dist/turn-coordinator.js +4 -202
  121. package/apps/daemon/dist/types.d.ts +11 -105
  122. package/apps/daemon/dist/types.js +1 -0
  123. package/apps/daemon/dist/utils.js +1 -0
  124. package/apps/daemon/package.json +1 -1
  125. package/apps/relay/dist/auth.js +3 -13
  126. package/apps/relay/dist/connections.d.ts +7 -60
  127. package/apps/relay/dist/connections.js +1 -2
  128. package/apps/relay/dist/controller-handlers.d.ts +17 -91
  129. package/apps/relay/dist/controller-handlers.js +134 -2091
  130. package/apps/relay/dist/db.d.ts +0 -6
  131. package/apps/relay/dist/db.js +94 -808
  132. package/apps/relay/dist/errors.js +1 -0
  133. package/apps/relay/dist/http-routes.d.ts +1 -1
  134. package/apps/relay/dist/http-routes.js +418 -894
  135. package/apps/relay/dist/http-schemas.d.ts +50 -87
  136. package/apps/relay/dist/http-schemas.js +52 -38
  137. package/apps/relay/dist/index.js +10 -50
  138. package/apps/relay/dist/machine-handlers.d.ts +44 -3
  139. package/apps/relay/dist/machine-handlers.js +741 -9
  140. package/apps/relay/dist/projections.d.ts +1 -1
  141. package/apps/relay/dist/projections.js +2 -111
  142. package/apps/relay/dist/relay-context.d.ts +26 -96
  143. package/apps/relay/dist/relay-context.js +185 -789
  144. package/apps/relay/dist/repositories.d.ts +1 -3
  145. package/apps/relay/dist/repositories.js +8 -36
  146. package/apps/relay/dist/retention.d.ts +0 -6
  147. package/apps/relay/dist/retention.js +3 -28
  148. package/apps/relay/dist/scope.d.ts +1 -14
  149. package/apps/relay/dist/scope.js +18 -202
  150. package/apps/relay/dist/security.js +1 -0
  151. package/apps/relay/dist/types.d.ts +34 -105
  152. package/apps/relay/dist/types.js +1 -0
  153. package/apps/relay/dist/websocket.js +37 -273
  154. package/package.json +8 -31
  155. package/packages/agent-sdk/dist/index.d.ts +233 -47
  156. package/packages/agent-sdk/dist/index.js +14 -118
  157. package/packages/client/dist/account.d.ts +39 -40
  158. package/packages/client/dist/account.js +129 -134
  159. package/packages/client/dist/client.d.ts +41 -135
  160. package/packages/client/dist/client.js +108 -1436
  161. package/packages/client/dist/errors.d.ts +2 -16
  162. package/packages/client/dist/errors.js +2 -16
  163. package/packages/client/dist/http.d.ts +2 -2
  164. package/packages/client/dist/http.js +21 -29
  165. package/packages/client/dist/index.d.ts +2 -14
  166. package/packages/client/dist/index.js +1 -7
  167. package/packages/client/dist/parsers.d.ts +30 -3
  168. package/packages/client/dist/parsers.js +181 -14
  169. package/packages/client/dist/transport.d.ts +8 -42
  170. package/packages/client/dist/transport.js +105 -465
  171. package/packages/client/dist/types.d.ts +98 -288
  172. package/packages/client/dist/types.js +1 -0
  173. package/packages/client/dist/validation.d.ts +1 -1
  174. package/packages/client/dist/validation.js +13 -41
  175. package/packages/pie-provider/dist/index.d.ts +1 -0
  176. package/packages/pie-provider/dist/index.js +96 -556
  177. package/packages/runtime/dist/index.d.ts +112 -69
  178. package/packages/runtime/dist/index.js +2 -66
  179. package/packages/runtime-acpx/dist/index.d.ts +3 -2
  180. package/packages/runtime-acpx/dist/index.js +3 -137
  181. package/packages/runtime-cli/dist/async-queue.d.ts +1 -0
  182. package/packages/runtime-cli/dist/async-queue.js +1 -0
  183. package/packages/runtime-cli/dist/claude-history.d.ts +2 -1
  184. package/packages/runtime-cli/dist/claude-history.js +23 -23
  185. package/packages/runtime-cli/dist/claude-json.d.ts +1 -6
  186. package/packages/runtime-cli/dist/claude-json.js +1 -6
  187. package/packages/runtime-cli/dist/claude-rename.d.ts +1 -0
  188. package/packages/runtime-cli/dist/claude-rename.js +1 -0
  189. package/packages/runtime-cli/dist/claude-session-store.d.ts +2 -0
  190. package/packages/runtime-cli/dist/claude-session-store.js +8 -1
  191. package/packages/runtime-cli/dist/claude-turn.d.ts +5 -17
  192. package/packages/runtime-cli/dist/claude-turn.js +40 -319
  193. package/packages/runtime-cli/dist/codex-app-server.d.ts +10 -79
  194. package/packages/runtime-cli/dist/codex-app-server.js +107 -1266
  195. package/packages/runtime-cli/dist/codex-approvals.d.ts +1 -0
  196. package/packages/runtime-cli/dist/codex-approvals.js +1 -0
  197. package/packages/runtime-cli/dist/codex-history.d.ts +1 -0
  198. package/packages/runtime-cli/dist/codex-history.js +18 -55
  199. package/packages/runtime-cli/dist/codex-json-rpc.d.ts +1 -26
  200. package/packages/runtime-cli/dist/codex-json-rpc.js +16 -275
  201. package/packages/runtime-cli/dist/codex-lifecycle.d.ts +1 -0
  202. package/packages/runtime-cli/dist/codex-lifecycle.js +4 -16
  203. package/packages/runtime-cli/dist/codex-protocol.d.ts +4 -4
  204. package/packages/runtime-cli/dist/codex-protocol.js +7 -32
  205. package/packages/runtime-cli/dist/command-resolver.d.ts +1 -0
  206. package/packages/runtime-cli/dist/command-resolver.js +1 -0
  207. package/packages/runtime-cli/dist/history-merge.d.ts +1 -0
  208. package/packages/runtime-cli/dist/history-merge.js +3 -15
  209. package/packages/runtime-cli/dist/index.d.ts +2 -12
  210. package/packages/runtime-cli/dist/index.js +54 -450
  211. package/packages/runtime-cli/dist/permissions.d.ts +1 -0
  212. package/packages/runtime-cli/dist/permissions.js +4 -3
  213. package/packages/runtime-cli/dist/session-store.d.ts +1 -41
  214. package/packages/runtime-cli/dist/session-store.js +19 -255
  215. package/packages/shared/dist/args.d.ts +1 -0
  216. package/packages/shared/dist/args.js +1 -0
  217. package/packages/shared/dist/crypto.d.ts +1 -261
  218. package/packages/shared/dist/crypto.js +1 -635
  219. package/packages/shared/dist/ids.d.ts +1 -0
  220. package/packages/shared/dist/ids.js +1 -0
  221. package/packages/shared/dist/index.d.ts +1 -7
  222. package/packages/shared/dist/index.js +1 -7
  223. package/packages/shared/dist/protocol-schemas.d.ts +26 -389
  224. package/packages/shared/dist/protocol-schemas.js +1 -208
  225. package/packages/shared/dist/protocol-types.d.ts +1 -419
  226. package/packages/shared/dist/protocol-types.js +1 -0
  227. package/packages/shared/dist/protocol.d.ts +9 -529
  228. package/packages/shared/dist/protocol.js +18 -691
  229. package/packages/shared/dist/session-name.d.ts +1 -0
  230. package/packages/shared/dist/session-name.js +1 -0
  231. package/packages/shared/dist/session-state.d.ts +2 -1
  232. package/packages/shared/dist/session-state.js +7 -2
  233. package/apps/cli/dist/commands/diagnostics.d.ts +0 -2
  234. package/apps/cli/dist/commands/diagnostics.js +0 -71
  235. package/apps/cli/dist/commands/lib/account-snapshot.d.ts +0 -13
  236. package/apps/cli/dist/commands/lib/account-snapshot.js +0 -368
  237. package/apps/cli/dist/commands/lib/bootstrap-device-recovery.d.ts +0 -41
  238. package/apps/cli/dist/commands/lib/bootstrap-device-recovery.js +0 -782
  239. package/apps/cli/dist/commands/lib/bootstrap-join.d.ts +0 -6
  240. package/apps/cli/dist/commands/lib/bootstrap-join.js +0 -304
  241. package/apps/cli/dist/commands/lib/cli-exit.d.ts +0 -6
  242. package/apps/cli/dist/commands/lib/cli-exit.js +0 -15
  243. package/apps/cli/dist/commands/lib/controller-enrollment-intent.d.ts +0 -53
  244. package/apps/cli/dist/commands/lib/controller-enrollment-intent.js +0 -308
  245. package/apps/cli/dist/commands/lib/daemon-enrollment-intent.d.ts +0 -55
  246. package/apps/cli/dist/commands/lib/daemon-enrollment-intent.js +0 -275
  247. package/apps/cli/dist/commands/lib/enrollment-claim-settlement.d.ts +0 -1
  248. package/apps/cli/dist/commands/lib/enrollment-claim-settlement.js +0 -20
  249. package/apps/cli/dist/commands/lib/fresh-start-intent.d.ts +0 -26
  250. package/apps/cli/dist/commands/lib/fresh-start-intent.js +0 -169
  251. package/apps/cli/dist/commands/lib/machine-state.d.ts +0 -3
  252. package/apps/cli/dist/commands/lib/machine-state.js +0 -14
  253. package/apps/cli/dist/commands/lib/orchestrator.d.ts +0 -41
  254. package/apps/cli/dist/commands/lib/orchestrator.js +0 -208
  255. package/apps/cli/dist/commands/lib/pending-enrollment.d.ts +0 -1
  256. package/apps/cli/dist/commands/lib/pending-enrollment.js +0 -23
  257. package/apps/cli/dist/commands/lib/version.d.ts +0 -8
  258. package/apps/cli/dist/commands/lib/version.js +0 -69
  259. package/apps/cli/dist/commands/orchestrator.d.ts +0 -22
  260. package/apps/cli/dist/commands/orchestrator.js +0 -1344
  261. package/apps/cli/dist/commands/skill.d.ts +0 -12
  262. package/apps/cli/dist/commands/skill.js +0 -380
  263. package/apps/cli/dist/skills/registry.d.ts +0 -21
  264. package/apps/cli/dist/skills/registry.js +0 -323
  265. package/apps/daemon/dist/account-config-lock.d.ts +0 -14
  266. package/apps/daemon/dist/account-config-lock.js +0 -361
  267. package/apps/daemon/dist/gateway/adapters.d.ts +0 -45
  268. package/apps/daemon/dist/gateway/adapters.js +0 -1
  269. package/apps/daemon/dist/gateway/commands.d.ts +0 -3
  270. package/apps/daemon/dist/gateway/commands.js +0 -542
  271. package/apps/daemon/dist/gateway/fake.d.ts +0 -2
  272. package/apps/daemon/dist/gateway/fake.js +0 -24
  273. package/apps/daemon/dist/gateway/feishu.d.ts +0 -81
  274. package/apps/daemon/dist/gateway/feishu.js +0 -546
  275. package/apps/daemon/dist/gateway/format.d.ts +0 -9
  276. package/apps/daemon/dist/gateway/format.js +0 -33
  277. package/apps/daemon/dist/gateway/runtime.d.ts +0 -33
  278. package/apps/daemon/dist/gateway/runtime.js +0 -2405
  279. package/apps/daemon/dist/gateway/store.d.ts +0 -29
  280. package/apps/daemon/dist/gateway/store.js +0 -64
  281. package/apps/daemon/dist/gateway/telegram.d.ts +0 -9
  282. package/apps/daemon/dist/gateway/telegram.js +0 -387
  283. package/apps/daemon/dist/lifecycle/artifacts.d.ts +0 -44
  284. package/apps/daemon/dist/lifecycle/artifacts.js +0 -588
  285. package/apps/daemon/dist/lifecycle/capability.d.ts +0 -25
  286. package/apps/daemon/dist/lifecycle/capability.js +0 -290
  287. package/apps/daemon/dist/lifecycle/detached-helper-bundle.mjs +0 -19224
  288. package/apps/daemon/dist/lifecycle/detached-helper-cli.d.ts +0 -1
  289. package/apps/daemon/dist/lifecycle/detached-helper-cli.js +0 -11
  290. package/apps/daemon/dist/lifecycle/errors.d.ts +0 -3
  291. package/apps/daemon/dist/lifecycle/errors.js +0 -10
  292. package/apps/daemon/dist/lifecycle/helper.d.ts +0 -39
  293. package/apps/daemon/dist/lifecycle/helper.js +0 -405
  294. package/apps/daemon/dist/lifecycle/journal.d.ts +0 -21
  295. package/apps/daemon/dist/lifecycle/journal.js +0 -389
  296. package/apps/daemon/dist/lifecycle/npm.d.ts +0 -37
  297. package/apps/daemon/dist/lifecycle/npm.js +0 -164
  298. package/apps/daemon/dist/lifecycle/operation.d.ts +0 -19
  299. package/apps/daemon/dist/lifecycle/operation.js +0 -202
  300. package/apps/daemon/dist/lifecycle/relay.d.ts +0 -5
  301. package/apps/daemon/dist/lifecycle/relay.js +0 -72
  302. package/apps/daemon/dist/lifecycle/reporter.d.ts +0 -29
  303. package/apps/daemon/dist/lifecycle/reporter.js +0 -402
  304. package/apps/daemon/dist/lifecycle/restart.d.ts +0 -127
  305. package/apps/daemon/dist/lifecycle/restart.js +0 -654
  306. package/apps/daemon/dist/lifecycle/runtime.d.ts +0 -36
  307. package/apps/daemon/dist/lifecycle/runtime.js +0 -210
  308. package/apps/daemon/dist/lifecycle/service.d.ts +0 -16
  309. package/apps/daemon/dist/lifecycle/service.js +0 -12
  310. package/apps/daemon/dist/lifecycle/types.d.ts +0 -110
  311. package/apps/daemon/dist/lifecycle/types.js +0 -3
  312. package/apps/daemon/dist/loop/handlers.d.ts +0 -5
  313. package/apps/daemon/dist/loop/handlers.js +0 -406
  314. package/apps/daemon/dist/loop/schedule.d.ts +0 -34
  315. package/apps/daemon/dist/loop/schedule.js +0 -161
  316. package/apps/daemon/dist/memory/access-lifecycle.d.ts +0 -15
  317. package/apps/daemon/dist/memory/access-lifecycle.js +0 -85
  318. package/apps/daemon/dist/memory/commands.d.ts +0 -3
  319. package/apps/daemon/dist/memory/commands.js +0 -186
  320. package/apps/daemon/dist/memory/config.d.ts +0 -7
  321. package/apps/daemon/dist/memory/config.js +0 -25
  322. package/apps/daemon/dist/memory/flush.d.ts +0 -10
  323. package/apps/daemon/dist/memory/flush.js +0 -475
  324. package/apps/daemon/dist/memory/inject.d.ts +0 -24
  325. package/apps/daemon/dist/memory/inject.js +0 -59
  326. package/apps/daemon/dist/memory/instructions.d.ts +0 -9
  327. package/apps/daemon/dist/memory/instructions.js +0 -47
  328. package/apps/daemon/dist/memory/managers.d.ts +0 -10
  329. package/apps/daemon/dist/memory/managers.js +0 -144
  330. package/apps/daemon/dist/memory/project-commands.d.ts +0 -3
  331. package/apps/daemon/dist/memory/project-commands.js +0 -394
  332. package/apps/daemon/dist/relay/connection-diagnostics.d.ts +0 -30
  333. package/apps/daemon/dist/relay/connection-diagnostics.js +0 -60
  334. package/apps/daemon/dist/runtime/cancel-settlement.d.ts +0 -19
  335. package/apps/daemon/dist/runtime/cancel-settlement.js +0 -195
  336. package/apps/daemon/dist/runtime/catalog.d.ts +0 -18
  337. package/apps/daemon/dist/runtime/catalog.js +0 -119
  338. package/apps/daemon/dist/runtime/errors.d.ts +0 -3
  339. package/apps/daemon/dist/runtime/errors.js +0 -37
  340. package/apps/daemon/dist/runtime/event-pump.d.ts +0 -14
  341. package/apps/daemon/dist/runtime/event-pump.js +0 -38
  342. package/apps/daemon/dist/runtime/provider-start-journal.d.ts +0 -64
  343. package/apps/daemon/dist/runtime/provider-start-journal.js +0 -208
  344. package/apps/daemon/dist/runtime/recovery-context.d.ts +0 -4
  345. package/apps/daemon/dist/runtime/recovery-context.js +0 -28
  346. package/apps/daemon/dist/runtime/selection.d.ts +0 -10
  347. package/apps/daemon/dist/runtime/selection.js +0 -33
  348. package/apps/daemon/dist/runtime/session-recovery.d.ts +0 -8
  349. package/apps/daemon/dist/runtime/session-recovery.js +0 -125
  350. package/apps/daemon/dist/runtime/turn-projection.d.ts +0 -27
  351. package/apps/daemon/dist/runtime/turn-projection.js +0 -117
  352. package/apps/daemon/dist/runtime/turn-supervision.d.ts +0 -45
  353. package/apps/daemon/dist/runtime/turn-supervision.js +0 -390
  354. package/apps/daemon/dist/session/reconcile.d.ts +0 -4
  355. package/apps/daemon/dist/session/reconcile.js +0 -225
  356. package/apps/daemon/dist/session/retry-recovery.d.ts +0 -3
  357. package/apps/daemon/dist/session/retry-recovery.js +0 -169
  358. package/apps/daemon/dist/session/workspace-paths.d.ts +0 -3
  359. package/apps/daemon/dist/session/workspace-paths.js +0 -30
  360. package/apps/relay/dist/account-access-revocation.d.ts +0 -40
  361. package/apps/relay/dist/account-access-revocation.js +0 -85
  362. package/apps/relay/dist/account-http-routes.d.ts +0 -3
  363. package/apps/relay/dist/account-http-routes.js +0 -1146
  364. package/apps/relay/dist/account-projections.d.ts +0 -41
  365. package/apps/relay/dist/account-projections.js +0 -99
  366. package/apps/relay/dist/device-recovery-repository.d.ts +0 -38
  367. package/apps/relay/dist/device-recovery-repository.js +0 -85
  368. package/apps/relay/dist/enrollment-repository.d.ts +0 -72
  369. package/apps/relay/dist/enrollment-repository.js +0 -131
  370. package/apps/relay/dist/event-visibility.d.ts +0 -7
  371. package/apps/relay/dist/event-visibility.js +0 -50
  372. package/apps/relay/dist/machine-command-result-handlers.d.ts +0 -24
  373. package/apps/relay/dist/machine-command-result-handlers.js +0 -1202
  374. package/apps/relay/dist/machine-handler-context.d.ts +0 -96
  375. package/apps/relay/dist/machine-handler-context.js +0 -1
  376. package/apps/relay/dist/machine-reliability.d.ts +0 -7
  377. package/apps/relay/dist/machine-reliability.js +0 -12
  378. package/apps/relay/dist/machine-state.d.ts +0 -27
  379. package/apps/relay/dist/machine-state.js +0 -39
  380. package/apps/relay/dist/metadata-source.d.ts +0 -3
  381. package/apps/relay/dist/metadata-source.js +0 -16
  382. package/apps/relay/dist/projection-repository.d.ts +0 -80
  383. package/apps/relay/dist/projection-repository.js +0 -236
  384. package/apps/relay/dist/session-creation-failure.d.ts +0 -4
  385. package/apps/relay/dist/session-creation-failure.js +0 -54
  386. package/apps/relay/dist/session-projection-reducer.d.ts +0 -4
  387. package/apps/relay/dist/session-projection-reducer.js +0 -873
  388. package/apps/relay/dist/turn-repository.d.ts +0 -175
  389. package/apps/relay/dist/turn-repository.js +0 -695
  390. package/apps/relay/dist/ui-probe-router.d.ts +0 -35
  391. package/apps/relay/dist/ui-probe-router.js +0 -414
  392. package/build-identity.json +0 -6
  393. package/npm-shrinkwrap.json +0 -2226
  394. package/packages/client/dist/account-management.d.ts +0 -158
  395. package/packages/client/dist/account-management.js +0 -892
  396. package/packages/client/dist/live-session-state.d.ts +0 -15
  397. package/packages/client/dist/live-session-state.js +0 -69
  398. package/packages/client/dist/live-state.d.ts +0 -8
  399. package/packages/client/dist/live-state.js +0 -44
  400. package/packages/client/dist/live-types.d.ts +0 -161
  401. package/packages/client/dist/live-types.js +0 -1
  402. package/packages/client/dist/live.d.ts +0 -122
  403. package/packages/client/dist/live.js +0 -1712
  404. package/packages/client/dist/recovery-context.d.ts +0 -37
  405. package/packages/client/dist/recovery-context.js +0 -97
  406. package/packages/client/dist/schedule-presets.d.ts +0 -17
  407. package/packages/client/dist/schedule-presets.js +0 -33
  408. package/packages/client/dist/session-event-order.d.ts +0 -16
  409. package/packages/client/dist/session-event-order.js +0 -83
  410. package/packages/client/dist/session-event-window.d.ts +0 -5
  411. package/packages/client/dist/session-event-window.js +0 -54
  412. package/packages/client/dist/turns.d.ts +0 -9
  413. package/packages/client/dist/turns.js +0 -34
  414. package/packages/client/dist/ui-probe.d.ts +0 -116
  415. package/packages/client/dist/ui-probe.js +0 -826
  416. package/packages/daemon-service/dist/index.d.ts +0 -186
  417. package/packages/daemon-service/dist/index.js +0 -2390
  418. package/packages/memory/dist/access.d.ts +0 -44
  419. package/packages/memory/dist/access.js +0 -357
  420. package/packages/memory/dist/chunk.d.ts +0 -16
  421. package/packages/memory/dist/chunk.js +0 -51
  422. package/packages/memory/dist/embeddings.d.ts +0 -10
  423. package/packages/memory/dist/embeddings.js +0 -77
  424. package/packages/memory/dist/index.d.ts +0 -7
  425. package/packages/memory/dist/index.js +0 -7
  426. package/packages/memory/dist/manager.d.ts +0 -71
  427. package/packages/memory/dist/manager.js +0 -789
  428. package/packages/memory/dist/paths.d.ts +0 -11
  429. package/packages/memory/dist/paths.js +0 -42
  430. package/packages/memory/dist/projects.d.ts +0 -13
  431. package/packages/memory/dist/projects.js +0 -211
  432. package/packages/memory/dist/store.d.ts +0 -19
  433. package/packages/memory/dist/store.js +0 -210
  434. package/packages/memory/dist/types.d.ts +0 -70
  435. package/packages/memory/dist/types.js +0 -8
  436. package/packages/pie-provider/dist/turn-observation-store.d.ts +0 -44
  437. package/packages/pie-provider/dist/turn-observation-store.js +0 -306
  438. package/packages/provider-protocol/dist/index.d.ts +0 -1439
  439. package/packages/provider-protocol/dist/index.js +0 -476
  440. package/packages/runtime-acpx/dist/turn-observation-store.d.ts +0 -40
  441. package/packages/runtime-acpx/dist/turn-observation-store.js +0 -213
  442. package/packages/runtime-cli/dist/backend-session-lease.d.ts +0 -40
  443. package/packages/runtime-cli/dist/backend-session-lease.js +0 -561
  444. package/packages/runtime-cli/dist/persistent-turn-observation-store.d.ts +0 -50
  445. package/packages/runtime-cli/dist/persistent-turn-observation-store.js +0 -252
  446. package/packages/runtime-cli/dist/process-identity.d.ts +0 -15
  447. package/packages/runtime-cli/dist/process-identity.js +0 -102
  448. package/packages/runtime-cli/dist/runtime-status.d.ts +0 -20
  449. package/packages/runtime-cli/dist/runtime-status.js +0 -133
  450. package/packages/runtime-cli/dist/turn-observation.d.ts +0 -33
  451. package/packages/runtime-cli/dist/turn-observation.js +0 -114
  452. package/packages/shared/dist/account.d.ts +0 -302
  453. package/packages/shared/dist/account.js +0 -348
  454. package/packages/shared/dist/daemon-lifecycle.d.ts +0 -85
  455. package/packages/shared/dist/daemon-lifecycle.js +0 -66
  456. package/packages/shared/dist/diagnostics.d.ts +0 -21
  457. package/packages/shared/dist/diagnostics.js +0 -156
  458. package/packages/shared/dist/node/daemon-process.d.ts +0 -91
  459. package/packages/shared/dist/node/daemon-process.js +0 -485
  460. package/packages/shared/dist/node/gateway-store.d.ts +0 -279
  461. package/packages/shared/dist/node/gateway-store.js +0 -2451
  462. package/packages/shared/dist/process-command.d.ts +0 -6
  463. package/packages/shared/dist/process-command.js +0 -113
  464. package/packages/shared/dist/relay-url.d.ts +0 -8
  465. package/packages/shared/dist/relay-url.js +0 -37
  466. package/packages/shared/dist/turn-state.d.ts +0 -72
  467. package/packages/shared/dist/turn-state.js +0 -24
  468. package/packages/shared/dist/ui-probe.d.ts +0 -459
  469. 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