@cydm/happy-elves 0.1.0-beta.49 → 0.1.0-beta.490

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 (460) hide show
  1. package/README.md +0 -2
  2. package/apps/cli/dist/commands/account.js +1 -0
  3. package/apps/cli/dist/commands/app.js +20 -5
  4. package/apps/cli/dist/commands/artifact.d.ts +2 -0
  5. package/apps/cli/dist/commands/artifact.js +97 -0
  6. package/apps/cli/dist/commands/collect.js +1 -0
  7. package/apps/cli/dist/commands/command.js +1 -0
  8. package/apps/cli/dist/commands/config.js +3 -2
  9. package/apps/cli/dist/commands/daemon.js +101 -13
  10. package/apps/cli/dist/commands/dispatch.d.ts +2 -0
  11. package/apps/cli/dist/commands/dispatch.js +130 -0
  12. package/apps/cli/dist/commands/gateway.d.ts +2 -0
  13. package/apps/cli/dist/commands/gateway.js +429 -0
  14. package/apps/cli/dist/commands/lib/args.js +81 -8
  15. package/apps/cli/dist/commands/lib/audit.js +1 -0
  16. package/apps/cli/dist/commands/lib/bootstrap-config.js +1 -0
  17. package/apps/cli/dist/commands/lib/bootstrap-daemon.js +12 -4
  18. package/apps/cli/dist/commands/lib/bootstrap-output.js +1 -0
  19. package/apps/cli/dist/commands/lib/bootstrap.js +1 -0
  20. package/apps/cli/dist/commands/lib/config.d.ts +0 -1
  21. package/apps/cli/dist/commands/lib/config.js +55 -15
  22. package/apps/cli/dist/commands/lib/doctor.d.ts +11 -0
  23. package/apps/cli/dist/commands/lib/doctor.js +279 -13
  24. package/apps/cli/dist/commands/lib/exit.js +2 -2
  25. package/apps/cli/dist/commands/lib/gateway-store.d.ts +38 -0
  26. package/apps/cli/dist/commands/lib/gateway-store.js +33 -0
  27. package/apps/cli/dist/commands/lib/index.d.ts +3 -1
  28. package/apps/cli/dist/commands/lib/index.js +4 -1
  29. package/apps/cli/dist/commands/lib/json.d.ts +2 -2
  30. package/apps/cli/dist/commands/lib/json.js +8 -4
  31. package/apps/cli/dist/commands/lib/local-daemon.d.ts +1 -0
  32. package/apps/cli/dist/commands/lib/local-daemon.js +40 -9
  33. package/apps/cli/dist/commands/lib/loop-store.js +8 -16
  34. package/apps/cli/dist/commands/lib/paths.d.ts +2 -0
  35. package/apps/cli/dist/commands/lib/paths.js +3 -0
  36. package/apps/cli/dist/commands/lib/relay-db-audit.d.ts +37 -0
  37. package/apps/cli/dist/commands/lib/relay-db-audit.js +287 -0
  38. package/apps/cli/dist/commands/lib/relay-debug.d.ts +84 -0
  39. package/apps/cli/dist/commands/lib/relay-debug.js +190 -0
  40. package/apps/cli/dist/commands/lib/relay-http.js +5 -15
  41. package/apps/cli/dist/commands/lib/scope.d.ts +4 -3
  42. package/apps/cli/dist/commands/lib/scope.js +10 -13
  43. package/apps/cli/dist/commands/lib/session-output.d.ts +12 -1
  44. package/apps/cli/dist/commands/lib/session-output.js +291 -57
  45. package/apps/cli/dist/commands/lib/session-view.js +1 -0
  46. package/apps/cli/dist/commands/lib/status.js +24 -7
  47. package/apps/cli/dist/commands/lib/types.d.ts +14 -6
  48. package/apps/cli/dist/commands/lib/types.js +1 -0
  49. package/apps/cli/dist/commands/lib/usage.js +174 -108
  50. package/apps/cli/dist/commands/lib/workspace.d.ts +6 -1
  51. package/apps/cli/dist/commands/lib/workspace.js +41 -2
  52. package/apps/cli/dist/commands/loop.js +17 -64
  53. package/apps/cli/dist/commands/machine.js +51 -9
  54. package/apps/cli/dist/commands/memory.d.ts +2 -0
  55. package/apps/cli/dist/commands/memory.js +179 -0
  56. package/apps/cli/dist/commands/queue.d.ts +2 -0
  57. package/apps/cli/dist/commands/queue.js +95 -0
  58. package/apps/cli/dist/commands/relay.d.ts +1 -1
  59. package/apps/cli/dist/commands/relay.js +335 -26
  60. package/apps/cli/dist/commands/release.d.ts +2 -0
  61. package/apps/cli/dist/commands/release.js +224 -0
  62. package/apps/cli/dist/commands/remote.js +13 -4
  63. package/apps/cli/dist/commands/schedule.d.ts +2 -0
  64. package/apps/cli/dist/commands/schedule.js +273 -0
  65. package/apps/cli/dist/commands/session.js +135 -208
  66. package/apps/cli/dist/commands/sidechat.d.ts +2 -0
  67. package/apps/cli/dist/commands/sidechat.js +72 -0
  68. package/apps/cli/dist/commands/token.js +27 -10
  69. package/apps/cli/dist/commands/turn.js +314 -22
  70. package/apps/cli/dist/commands/workspace.d.ts +2 -0
  71. package/apps/cli/dist/commands/workspace.js +68 -0
  72. package/apps/cli/dist/errors.js +1 -0
  73. package/apps/cli/dist/index.js +1 -0
  74. package/apps/cli/package.json +6 -0
  75. package/apps/daemon/dist/app.js +1 -0
  76. package/apps/daemon/dist/args.js +1 -0
  77. package/apps/daemon/dist/artifact/handler.d.ts +17 -0
  78. package/apps/daemon/dist/artifact/handler.js +858 -0
  79. package/apps/daemon/dist/artifact/pitch-review-sdk.d.ts +1 -0
  80. package/apps/daemon/dist/artifact/pitch-review-sdk.js +63 -0
  81. package/apps/daemon/dist/artifact/store.d.ts +141 -0
  82. package/apps/daemon/dist/artifact/store.js +652 -0
  83. package/apps/daemon/dist/artifact/vendor/lavish-axi/LICENSE +21 -0
  84. package/apps/daemon/dist/artifact/vendor/lavish-axi/artifact-sdk.js +2729 -0
  85. package/apps/daemon/dist/artifact/vendor/lavish-axi/mermaid-node.js +83 -0
  86. package/apps/daemon/dist/artifact/vendor/lavish-axi/table-cell.js +168 -0
  87. package/apps/daemon/dist/audit.js +1 -0
  88. package/apps/daemon/dist/cli.js +1 -0
  89. package/apps/daemon/dist/config.js +35 -0
  90. package/apps/daemon/dist/direct/server.d.ts +8 -0
  91. package/apps/daemon/dist/direct/server.js +1120 -0
  92. package/apps/daemon/dist/direct/state.d.ts +10 -0
  93. package/apps/daemon/dist/direct/state.js +8 -0
  94. package/apps/daemon/dist/direct/tickets.d.ts +65 -0
  95. package/apps/daemon/dist/direct/tickets.js +242 -0
  96. package/apps/daemon/dist/errors.js +1 -0
  97. package/apps/daemon/dist/gateway/adapters.d.ts +38 -0
  98. package/apps/daemon/dist/gateway/adapters.js +2 -0
  99. package/apps/daemon/dist/gateway/feishu.d.ts +65 -0
  100. package/apps/daemon/dist/gateway/feishu.js +493 -0
  101. package/apps/daemon/dist/gateway/format.d.ts +2 -0
  102. package/apps/daemon/dist/gateway/format.js +19 -0
  103. package/apps/daemon/dist/gateway/handler.d.ts +7 -0
  104. package/apps/daemon/dist/gateway/handler.js +162 -0
  105. package/apps/daemon/dist/gateway/runtime.d.ts +33 -0
  106. package/apps/daemon/dist/gateway/runtime.js +850 -0
  107. package/apps/daemon/dist/gateway/store.d.ts +92 -0
  108. package/apps/daemon/dist/gateway/store.js +268 -0
  109. package/apps/daemon/dist/loop/runner.js +95 -101
  110. package/apps/daemon/dist/loop/store.js +8 -16
  111. package/apps/daemon/dist/memory/handler.d.ts +7 -0
  112. package/apps/daemon/dist/memory/handler.js +127 -0
  113. package/apps/daemon/dist/memory/manager.d.ts +44 -0
  114. package/apps/daemon/dist/memory/manager.js +359 -0
  115. package/apps/daemon/dist/memory/settings.d.ts +11 -0
  116. package/apps/daemon/dist/memory/settings.js +56 -0
  117. package/apps/daemon/dist/orchestration/crew-queue.d.ts +28 -0
  118. package/apps/daemon/dist/orchestration/crew-queue.js +865 -0
  119. package/apps/daemon/dist/orchestration/handler.d.ts +35 -0
  120. package/apps/daemon/dist/orchestration/handler.js +1517 -0
  121. package/apps/daemon/dist/orchestration/queue-state.d.ts +49 -0
  122. package/apps/daemon/dist/orchestration/queue-state.js +172 -0
  123. package/apps/daemon/dist/orchestration/runner.d.ts +2 -0
  124. package/apps/daemon/dist/orchestration/runner.js +449 -0
  125. package/apps/daemon/dist/orchestration/store-file.d.ts +3 -0
  126. package/apps/daemon/dist/orchestration/store-file.js +20 -0
  127. package/apps/daemon/dist/orchestration/store.d.ts +286 -0
  128. package/apps/daemon/dist/orchestration/store.js +1541 -0
  129. package/apps/daemon/dist/orchestration/wake-identity.d.ts +13 -0
  130. package/apps/daemon/dist/orchestration/wake-identity.js +20 -0
  131. package/apps/daemon/dist/orchestration/watcher.d.ts +22 -0
  132. package/apps/daemon/dist/orchestration/watcher.js +302 -0
  133. package/apps/daemon/dist/pair.js +2 -1
  134. package/apps/daemon/dist/paths.d.ts +8 -1
  135. package/apps/daemon/dist/paths.js +9 -1
  136. package/apps/daemon/dist/process.d.ts +1 -0
  137. package/apps/daemon/dist/process.js +12 -4
  138. package/apps/daemon/dist/relay/admission.d.ts +44 -0
  139. package/apps/daemon/dist/relay/admission.js +238 -0
  140. package/apps/daemon/dist/relay/connection.d.ts +2 -0
  141. package/apps/daemon/dist/relay/connection.js +569 -18
  142. package/apps/daemon/dist/relay/devtools.js +84 -12
  143. package/apps/daemon/dist/relay/inbound-prompt.d.ts +14 -0
  144. package/apps/daemon/dist/relay/inbound-prompt.js +151 -0
  145. package/apps/daemon/dist/relay/prompt-admission-store.d.ts +49 -0
  146. package/apps/daemon/dist/relay/prompt-admission-store.js +352 -0
  147. package/apps/daemon/dist/relay/register.js +68 -27
  148. package/apps/daemon/dist/relay/remote-command.d.ts +22 -0
  149. package/apps/daemon/dist/relay/remote-command.js +155 -0
  150. package/apps/daemon/dist/relay/send.d.ts +11 -2
  151. package/apps/daemon/dist/relay/send.js +787 -28
  152. package/apps/daemon/dist/relay-http.js +1 -0
  153. package/apps/daemon/dist/runtime/headless-binding.d.ts +13 -0
  154. package/apps/daemon/dist/runtime/headless-binding.js +32 -0
  155. package/apps/daemon/dist/runtime/headless-event-projector.d.ts +44 -0
  156. package/apps/daemon/dist/runtime/headless-event-projector.js +1062 -0
  157. package/apps/daemon/dist/runtime/headless-history-reader.d.ts +13 -0
  158. package/apps/daemon/dist/runtime/headless-history-reader.js +111 -0
  159. package/apps/daemon/dist/runtime/headless-manager.d.ts +60 -0
  160. package/apps/daemon/dist/runtime/headless-manager.js +305 -0
  161. package/apps/daemon/dist/runtime/headless-official-tool-bridge.d.ts +4 -0
  162. package/apps/daemon/dist/runtime/headless-official-tool-bridge.js +95 -0
  163. package/apps/daemon/dist/runtime/headless-server-request.d.ts +17 -0
  164. package/apps/daemon/dist/runtime/headless-server-request.js +32 -0
  165. package/apps/daemon/dist/runtime/headless-session-context.d.ts +11 -0
  166. package/apps/daemon/dist/runtime/headless-session-context.js +41 -0
  167. package/apps/daemon/dist/runtime/headless-session-history.d.ts +13 -0
  168. package/apps/daemon/dist/runtime/headless-session-history.js +526 -0
  169. package/apps/daemon/dist/runtime/headless-session-primitives.d.ts +33 -0
  170. package/apps/daemon/dist/runtime/headless-session-primitives.js +64 -0
  171. package/apps/daemon/dist/runtime/headless-turn-inspector.d.ts +8 -0
  172. package/apps/daemon/dist/runtime/headless-turn-inspector.js +116 -0
  173. package/apps/daemon/dist/runtime/headless-turn-runner.d.ts +29 -0
  174. package/apps/daemon/dist/runtime/headless-turn-runner.js +388 -0
  175. package/apps/daemon/dist/runtime.d.ts +10 -5
  176. package/apps/daemon/dist/runtime.js +85 -61
  177. package/apps/daemon/dist/schedule/handler.d.ts +9 -0
  178. package/apps/daemon/dist/schedule/handler.js +159 -0
  179. package/apps/daemon/dist/schedule/runner.d.ts +21 -0
  180. package/apps/daemon/dist/schedule/runner.js +547 -0
  181. package/apps/daemon/dist/schedule/store.d.ts +9 -0
  182. package/apps/daemon/dist/schedule/store.js +143 -0
  183. package/apps/daemon/dist/session/create-session.js +8 -1
  184. package/apps/daemon/dist/session/directory.d.ts +1 -6
  185. package/apps/daemon/dist/session/directory.js +48 -106
  186. package/apps/daemon/dist/session/events.d.ts +8 -2
  187. package/apps/daemon/dist/session/events.js +145 -39
  188. package/apps/daemon/dist/session/file-preview.js +7 -3
  189. package/apps/daemon/dist/session/he-official/approval.d.ts +12 -0
  190. package/apps/daemon/dist/session/he-official/approval.js +52 -0
  191. package/apps/daemon/dist/session/he-official/artifact-commands.d.ts +6 -0
  192. package/apps/daemon/dist/session/he-official/artifact-commands.js +295 -0
  193. package/apps/daemon/dist/session/he-official/common.d.ts +429 -0
  194. package/apps/daemon/dist/session/he-official/common.js +326 -0
  195. package/apps/daemon/dist/session/he-official/delegate-commands.d.ts +5 -0
  196. package/apps/daemon/dist/session/he-official/delegate-commands.js +424 -0
  197. package/apps/daemon/dist/session/he-official/options.d.ts +4 -0
  198. package/apps/daemon/dist/session/he-official/options.js +72 -0
  199. package/apps/daemon/dist/session/he-official/orchestration-commands.d.ts +75 -0
  200. package/apps/daemon/dist/session/he-official/orchestration-commands.js +428 -0
  201. package/apps/daemon/dist/session/he-official/result.d.ts +34 -0
  202. package/apps/daemon/dist/session/he-official/result.js +292 -0
  203. package/apps/daemon/dist/session/he-official/session-commands.d.ts +20 -0
  204. package/apps/daemon/dist/session/he-official/session-commands.js +323 -0
  205. package/apps/daemon/dist/session/he-official/trace.d.ts +65 -0
  206. package/apps/daemon/dist/session/he-official/trace.js +210 -0
  207. package/apps/daemon/dist/session/he-official/turn-commands.d.ts +40 -0
  208. package/apps/daemon/dist/session/he-official/turn-commands.js +390 -0
  209. package/apps/daemon/dist/session/he-official-tools.d.ts +6 -0
  210. package/apps/daemon/dist/session/he-official-tools.js +102 -0
  211. package/apps/daemon/dist/session/history-backfill.d.ts +45 -0
  212. package/apps/daemon/dist/session/history-backfill.js +139 -0
  213. package/apps/daemon/dist/session/lifecycle.d.ts +9 -16
  214. package/apps/daemon/dist/session/lifecycle.js +777 -390
  215. package/apps/daemon/dist/session/metadata.d.ts +3 -2
  216. package/apps/daemon/dist/session/metadata.js +120 -11
  217. package/apps/daemon/dist/session/native-history-refresh.d.ts +12 -0
  218. package/apps/daemon/dist/session/native-history-refresh.js +186 -0
  219. package/apps/daemon/dist/session/native-identity.d.ts +21 -0
  220. package/apps/daemon/dist/session/native-identity.js +48 -0
  221. package/apps/daemon/dist/session/primitives.js +83 -68
  222. package/apps/daemon/dist/session/prompt.d.ts +43 -2
  223. package/apps/daemon/dist/session/prompt.js +1106 -164
  224. package/apps/daemon/dist/session/reconcile.d.ts +3 -0
  225. package/apps/daemon/dist/session/reconcile.js +236 -0
  226. package/apps/daemon/dist/session/runtime-read.d.ts +7 -0
  227. package/apps/daemon/dist/session/runtime-read.js +23 -0
  228. package/apps/daemon/dist/session/runtime-truth.d.ts +26 -0
  229. package/apps/daemon/dist/session/runtime-truth.js +459 -0
  230. package/apps/daemon/dist/session/sidechat.d.ts +11 -0
  231. package/apps/daemon/dist/session/sidechat.js +236 -0
  232. package/apps/daemon/dist/session/store.d.ts +21 -0
  233. package/apps/daemon/dist/session/store.js +245 -0
  234. package/apps/daemon/dist/start.js +46 -41
  235. package/apps/daemon/dist/state.d.ts +25 -6
  236. package/apps/daemon/dist/state.js +64 -0
  237. package/apps/daemon/dist/turn-coordinator.d.ts +1 -0
  238. package/apps/daemon/dist/turn-coordinator.js +5 -0
  239. package/apps/daemon/dist/types.d.ts +111 -23
  240. package/apps/daemon/dist/types.js +1 -0
  241. package/apps/daemon/dist/utils.js +1 -0
  242. package/apps/daemon/package.json +1 -1
  243. package/apps/relay/dist/auth.js +7 -5
  244. package/apps/relay/dist/control-plane-store.d.ts +229 -0
  245. package/apps/relay/dist/control-plane-store.js +263 -0
  246. package/apps/relay/dist/db.d.ts +1 -2
  247. package/apps/relay/dist/db.js +57 -317
  248. package/apps/relay/dist/direct-ticket-grants.d.ts +1 -0
  249. package/apps/relay/dist/direct-ticket-grants.js +16 -0
  250. package/apps/relay/dist/errors.d.ts +2 -1
  251. package/apps/relay/dist/errors.js +4 -1
  252. package/apps/relay/dist/http-routes.js +196 -506
  253. package/apps/relay/dist/http-schemas.d.ts +58 -56
  254. package/apps/relay/dist/http-schemas.js +50 -47
  255. package/apps/relay/dist/index.js +89 -25
  256. package/apps/relay/dist/packet-store.d.ts +73 -0
  257. package/apps/relay/dist/packet-store.js +272 -0
  258. package/apps/relay/dist/relay-context.d.ts +268 -143
  259. package/apps/relay/dist/relay-context.js +513 -737
  260. package/apps/relay/dist/relay-migration.d.ts +49 -0
  261. package/apps/relay/dist/relay-migration.js +230 -0
  262. package/apps/relay/dist/retention.d.ts +10 -0
  263. package/apps/relay/dist/retention.js +22 -2
  264. package/apps/relay/dist/security.js +1 -0
  265. package/apps/relay/dist/storage-worker.d.ts +137 -0
  266. package/apps/relay/dist/storage-worker.js +490 -0
  267. package/apps/relay/dist/types.d.ts +36 -91
  268. package/apps/relay/dist/types.js +1 -0
  269. package/apps/relay/dist/websocket.d.ts +28 -0
  270. package/apps/relay/dist/websocket.js +855 -130
  271. package/package.json +15 -28
  272. package/packages/agent-sdk/dist/index.d.ts +8 -124
  273. package/packages/agent-sdk/dist/index.js +13 -198
  274. package/packages/client/dist/account.d.ts +20 -2
  275. package/packages/client/dist/account.js +169 -3
  276. package/packages/client/dist/client.d.ts +83 -12
  277. package/packages/client/dist/client.js +880 -146
  278. package/packages/client/dist/command-contracts.d.ts +6 -0
  279. package/packages/client/dist/command-contracts.js +20 -0
  280. package/packages/client/dist/direct.d.ts +12 -0
  281. package/packages/client/dist/direct.js +427 -0
  282. package/packages/client/dist/errors.d.ts +1 -0
  283. package/packages/client/dist/errors.js +1 -0
  284. package/packages/client/dist/http.d.ts +1 -1
  285. package/packages/client/dist/http.js +4 -15
  286. package/packages/client/dist/index.d.ts +2 -4
  287. package/packages/client/dist/index.js +1 -2
  288. package/packages/client/dist/parsers.d.ts +28 -1
  289. package/packages/client/dist/parsers.js +179 -19
  290. package/packages/client/dist/product-materializer.d.ts +27 -0
  291. package/packages/client/dist/product-materializer.js +469 -0
  292. package/packages/client/dist/transport.d.ts +57 -4
  293. package/packages/client/dist/transport.js +441 -180
  294. package/packages/client/dist/types.d.ts +387 -21
  295. package/packages/client/dist/types.js +1 -0
  296. package/packages/client/dist/validation.d.ts +1 -2
  297. package/packages/client/dist/validation.js +1 -20
  298. package/packages/client/dist/workspace-shared-config.d.ts +23 -0
  299. package/packages/client/dist/workspace-shared-config.js +492 -0
  300. package/packages/headless-runtime/dist/claude-provider.d.ts +20 -0
  301. package/packages/headless-runtime/dist/claude-provider.js +1295 -0
  302. package/packages/{runtime-cli → headless-runtime}/dist/claude-session-store.d.ts +2 -1
  303. package/packages/{runtime-cli → headless-runtime}/dist/claude-session-store.js +34 -12
  304. package/packages/headless-runtime/dist/cli.d.ts +3 -0
  305. package/packages/headless-runtime/dist/cli.js +1243 -0
  306. package/packages/headless-runtime/dist/client.d.ts +78 -0
  307. package/packages/headless-runtime/dist/client.js +493 -0
  308. package/packages/headless-runtime/dist/codex-provider.d.ts +9 -0
  309. package/packages/headless-runtime/dist/codex-provider.js +1825 -0
  310. package/packages/headless-runtime/dist/core.d.ts +367 -0
  311. package/packages/headless-runtime/dist/core.js +3592 -0
  312. package/packages/headless-runtime/dist/event-log.d.ts +11 -0
  313. package/packages/headless-runtime/dist/event-log.js +257 -0
  314. package/packages/headless-runtime/dist/history-index.d.ts +28 -0
  315. package/packages/headless-runtime/dist/history-index.js +72 -0
  316. package/packages/headless-runtime/dist/host-tools.d.ts +21 -0
  317. package/packages/headless-runtime/dist/host-tools.js +252 -0
  318. package/packages/headless-runtime/dist/host.d.ts +63 -0
  319. package/packages/headless-runtime/dist/host.js +451 -0
  320. package/packages/headless-runtime/dist/index.d.ts +45 -0
  321. package/packages/headless-runtime/dist/index.js +528 -0
  322. package/packages/headless-runtime/dist/ipc.d.ts +4 -0
  323. package/packages/headless-runtime/dist/ipc.js +28 -0
  324. package/packages/headless-runtime/dist/mock-scenario.d.ts +7 -0
  325. package/packages/headless-runtime/dist/mock-scenario.js +65 -0
  326. package/packages/headless-runtime/dist/model-catalog.d.ts +21 -0
  327. package/packages/headless-runtime/dist/model-catalog.js +271 -0
  328. package/packages/headless-runtime/dist/provider-command.d.ts +10 -0
  329. package/packages/headless-runtime/dist/provider-command.js +432 -0
  330. package/packages/headless-runtime/dist/provider-turn-metadata.d.ts +9 -0
  331. package/packages/headless-runtime/dist/provider-turn-metadata.js +76 -0
  332. package/packages/headless-runtime/dist/public-response.d.ts +9 -0
  333. package/packages/headless-runtime/dist/public-response.js +112 -0
  334. package/packages/headless-runtime/dist/runtime-projection-store.d.ts +50 -0
  335. package/packages/headless-runtime/dist/runtime-projection-store.js +349 -0
  336. package/packages/headless-runtime/dist/trace-log.d.ts +31 -0
  337. package/packages/headless-runtime/dist/trace-log.js +106 -0
  338. package/packages/pie-provider/dist/index.d.ts +1 -0
  339. package/packages/pie-provider/dist/index.js +927 -740
  340. package/packages/runtime/dist/headless.d.ts +648 -0
  341. package/packages/runtime/dist/headless.js +3 -0
  342. package/packages/runtime/dist/index.d.ts +246 -104
  343. package/packages/runtime/dist/index.js +1 -0
  344. package/packages/shared/dist/args.d.ts +2 -0
  345. package/packages/shared/dist/args.js +9 -2
  346. package/packages/shared/dist/crypto.d.ts +2 -0
  347. package/packages/shared/dist/crypto.js +6 -0
  348. package/packages/shared/dist/diagnostics.d.ts +31 -0
  349. package/packages/shared/dist/diagnostics.js +81 -0
  350. package/packages/shared/dist/file-lock.d.ts +29 -0
  351. package/packages/shared/dist/file-lock.js +301 -0
  352. package/packages/shared/dist/he-official-tools.d.ts +78 -0
  353. package/packages/shared/dist/he-official-tools.js +737 -0
  354. package/packages/shared/dist/ids.d.ts +1 -0
  355. package/packages/shared/dist/ids.js +1 -0
  356. package/packages/shared/dist/index.d.ts +8 -0
  357. package/packages/shared/dist/index.js +8 -0
  358. package/packages/shared/dist/orchestration-routing.d.ts +10 -0
  359. package/packages/shared/dist/orchestration-routing.js +113 -0
  360. package/packages/shared/dist/packet-relay.d.ts +222 -0
  361. package/packages/shared/dist/packet-relay.js +121 -0
  362. package/packages/shared/dist/protocol-schemas.d.ts +2935 -40
  363. package/packages/shared/dist/protocol-schemas.js +884 -1
  364. package/packages/shared/dist/protocol-types.d.ts +899 -3
  365. package/packages/shared/dist/protocol-types.js +1 -0
  366. package/packages/shared/dist/protocol.d.ts +742 -23
  367. package/packages/shared/dist/protocol.js +833 -26
  368. package/packages/shared/dist/relay-scope.d.ts +32 -0
  369. package/packages/shared/dist/relay-scope.js +23 -0
  370. package/packages/shared/dist/session-name.d.ts +1 -0
  371. package/packages/shared/dist/session-name.js +1 -0
  372. package/packages/shared/dist/session-state.d.ts +2 -1
  373. package/packages/shared/dist/session-state.js +1 -0
  374. package/packages/shared/dist/session-tags.d.ts +12 -0
  375. package/packages/shared/dist/session-tags.js +50 -0
  376. package/apps/cli/dist/commands/lib/orchestrator.d.ts +0 -30
  377. package/apps/cli/dist/commands/lib/orchestrator.js +0 -146
  378. package/apps/cli/dist/commands/orchestrator.d.ts +0 -2
  379. package/apps/cli/dist/commands/orchestrator.js +0 -411
  380. package/apps/cli/dist/commands/skill.d.ts +0 -2
  381. package/apps/cli/dist/commands/skill.js +0 -214
  382. package/apps/daemon/dist/runtime/external-provider.d.ts +0 -20
  383. package/apps/daemon/dist/runtime/external-provider.js +0 -910
  384. package/apps/daemon/dist/session/runtime-handle.d.ts +0 -7
  385. package/apps/daemon/dist/session/runtime-handle.js +0 -47
  386. package/apps/daemon/dist/session/workspace-paths.d.ts +0 -3
  387. package/apps/daemon/dist/session/workspace-paths.js +0 -30
  388. package/apps/relay/dist/connections.d.ts +0 -29
  389. package/apps/relay/dist/connections.js +0 -10
  390. package/apps/relay/dist/controller-handlers.d.ts +0 -54
  391. package/apps/relay/dist/controller-handlers.js +0 -921
  392. package/apps/relay/dist/event-visibility.d.ts +0 -7
  393. package/apps/relay/dist/event-visibility.js +0 -46
  394. package/apps/relay/dist/machine-command-result-handlers.d.ts +0 -4
  395. package/apps/relay/dist/machine-command-result-handlers.js +0 -532
  396. package/apps/relay/dist/machine-handler-context.d.ts +0 -79
  397. package/apps/relay/dist/machine-handler-context.js +0 -1
  398. package/apps/relay/dist/machine-handlers.d.ts +0 -4
  399. package/apps/relay/dist/machine-handlers.js +0 -20
  400. package/apps/relay/dist/machine-reliability.d.ts +0 -7
  401. package/apps/relay/dist/machine-reliability.js +0 -12
  402. package/apps/relay/dist/projection-repository.d.ts +0 -87
  403. package/apps/relay/dist/projection-repository.js +0 -220
  404. package/apps/relay/dist/projections.d.ts +0 -7
  405. package/apps/relay/dist/projections.js +0 -124
  406. package/apps/relay/dist/repositories.d.ts +0 -13
  407. package/apps/relay/dist/repositories.js +0 -71
  408. package/apps/relay/dist/scope.d.ts +0 -33
  409. package/apps/relay/dist/scope.js +0 -187
  410. package/apps/relay/dist/session-projection-reducer.d.ts +0 -4
  411. package/apps/relay/dist/session-projection-reducer.js +0 -448
  412. package/npm-shrinkwrap.json +0 -1615
  413. package/packages/client/dist/live-session-state.d.ts +0 -15
  414. package/packages/client/dist/live-session-state.js +0 -60
  415. package/packages/client/dist/live-state.d.ts +0 -8
  416. package/packages/client/dist/live-state.js +0 -33
  417. package/packages/client/dist/live-types.d.ts +0 -113
  418. package/packages/client/dist/live-types.js +0 -1
  419. package/packages/client/dist/live.d.ts +0 -85
  420. package/packages/client/dist/live.js +0 -1056
  421. package/packages/client/dist/session-event-order.d.ts +0 -16
  422. package/packages/client/dist/session-event-order.js +0 -83
  423. package/packages/client/dist/session-event-window.d.ts +0 -5
  424. package/packages/client/dist/session-event-window.js +0 -54
  425. package/packages/provider-protocol/dist/index.d.ts +0 -843
  426. package/packages/provider-protocol/dist/index.js +0 -332
  427. package/packages/runtime-acpx/dist/index.d.ts +0 -10
  428. package/packages/runtime-acpx/dist/index.js +0 -111
  429. package/packages/runtime-cli/dist/async-queue.d.ts +0 -9
  430. package/packages/runtime-cli/dist/async-queue.js +0 -31
  431. package/packages/runtime-cli/dist/claude-history.d.ts +0 -6
  432. package/packages/runtime-cli/dist/claude-history.js +0 -343
  433. package/packages/runtime-cli/dist/claude-json.d.ts +0 -28
  434. package/packages/runtime-cli/dist/claude-json.js +0 -28
  435. package/packages/runtime-cli/dist/claude-rename.d.ts +0 -5
  436. package/packages/runtime-cli/dist/claude-rename.js +0 -14
  437. package/packages/runtime-cli/dist/claude-turn.d.ts +0 -12
  438. package/packages/runtime-cli/dist/claude-turn.js +0 -131
  439. package/packages/runtime-cli/dist/codex-app-server.d.ts +0 -69
  440. package/packages/runtime-cli/dist/codex-app-server.js +0 -462
  441. package/packages/runtime-cli/dist/codex-approvals.d.ts +0 -7
  442. package/packages/runtime-cli/dist/codex-approvals.js +0 -32
  443. package/packages/runtime-cli/dist/codex-history.d.ts +0 -16
  444. package/packages/runtime-cli/dist/codex-history.js +0 -710
  445. package/packages/runtime-cli/dist/codex-json-rpc.d.ts +0 -29
  446. package/packages/runtime-cli/dist/codex-json-rpc.js +0 -198
  447. package/packages/runtime-cli/dist/codex-lifecycle.d.ts +0 -24
  448. package/packages/runtime-cli/dist/codex-lifecycle.js +0 -71
  449. package/packages/runtime-cli/dist/codex-protocol.d.ts +0 -5
  450. package/packages/runtime-cli/dist/codex-protocol.js +0 -52
  451. package/packages/runtime-cli/dist/command-resolver.d.ts +0 -23
  452. package/packages/runtime-cli/dist/command-resolver.js +0 -100
  453. package/packages/runtime-cli/dist/history-merge.d.ts +0 -17
  454. package/packages/runtime-cli/dist/history-merge.js +0 -286
  455. package/packages/runtime-cli/dist/index.d.ts +0 -10
  456. package/packages/runtime-cli/dist/index.js +0 -257
  457. package/packages/runtime-cli/dist/permissions.d.ts +0 -5
  458. package/packages/runtime-cli/dist/permissions.js +0 -21
  459. package/packages/runtime-cli/dist/session-store.d.ts +0 -32
  460. package/packages/runtime-cli/dist/session-store.js +0 -91
@@ -0,0 +1,429 @@
1
+ import { createHash } from "node:crypto";
2
+ import { createServer } from "node:http";
3
+ import { encryptJson } from "../../../../packages/shared/dist/index.js";
4
+ import { CliError, ControllerClient, ok, readConfig, readGatewayStore, requireString, updateGatewayStore, wantsJson, } from "./lib/index.js";
5
+ export async function handleGateway({ domain, action, positional, flags }) {
6
+ if (domain !== "gateway")
7
+ return false;
8
+ if (action === "enable") {
9
+ const config = await readConfig(flags);
10
+ const client = new ControllerClient(config);
11
+ const type = gatewayChannelType(typeof flags.channel === "string" ? flags.channel : "fake");
12
+ const id = gatewayChannelId(flags, positional[0], type);
13
+ const targetMachineId = requireString(flags, "machine");
14
+ const targetCwd = typeof flags.cwd === "string" ? flags.cwd : undefined;
15
+ const targetSessionId = typeof flags.session === "string" ? flags.session : undefined;
16
+ if (!targetCwd && !targetSessionId)
17
+ throw new CliError("Gateway enable requires --cwd or --session", "MISSING_ARGUMENT");
18
+ const defaultAgent = typeof flags.agent === "string" ? flags.agent : "codex";
19
+ const defaultModel = typeof flags.model === "string" ? flags.model : undefined;
20
+ const appId = typeof flags["app-id"] === "string" ? flags["app-id"] : undefined;
21
+ const appSecret = flags["app-secret-stdin"] === true ? await readSecretFromStdin() : undefined;
22
+ const domainValue = typeof flags.domain === "string" ? flags.domain : "feishu";
23
+ if (domainValue !== "feishu" && domainValue !== "lark")
24
+ throw new CliError("Gateway --domain must be feishu or lark", "INVALID_ARGUMENT");
25
+ const inboundMode = typeof flags.inbound === "string" ? flags.inbound : "mention";
26
+ if (inboundMode !== "mention" && inboundMode !== "all")
27
+ throw new CliError("Gateway --inbound must be mention or all", "INVALID_ARGUMENT");
28
+ const reactionEmoji = typeof flags["reaction-emoji"] === "string" ? flags["reaction-emoji"] : "Typing";
29
+ const allowedChatIds = csvFlag(flags["allow-chat"]);
30
+ const allowedSenderIds = csvFlag(flags["allow-sender"]);
31
+ const allowAnySender = flags["allow-any-sender"] === true;
32
+ if (type === "lark" && (!appId || !appSecret)) {
33
+ throw new CliError("Lark gateway requires --app-id and --app-secret-stdin; appSecret is stored only in the target daemon config.", "MISSING_ARGUMENT");
34
+ }
35
+ if (type === "lark" && !allowAnySender && allowedChatIds.length === 0 && allowedSenderIds.length === 0) {
36
+ throw new CliError("Lark gateway requires --allow-any-sender or at least one --allow-chat/--allow-sender policy.", "MISSING_ARGUMENT");
37
+ }
38
+ if (type === "lark" && (typeof flags.token === "string" || typeof flags.secret === "string")) {
39
+ throw new CliError("Lark gateway no longer accepts --token/--secret; use --app-id and --app-secret-stdin.", "INVALID_ARGUMENT");
40
+ }
41
+ const result = await client.gateway({
42
+ machineId: targetMachineId,
43
+ action: "upsert",
44
+ channel: {
45
+ id,
46
+ type,
47
+ enabled: true,
48
+ targetMachineId,
49
+ targetSessionId,
50
+ targetCwd,
51
+ defaultAgent,
52
+ ...(defaultModel ? { defaultModel } : {}),
53
+ ...(type === "lark" ? {
54
+ domain: domainValue,
55
+ appId,
56
+ appSecret,
57
+ inboundMode,
58
+ allowAnySender,
59
+ ...(allowedChatIds.length > 0 ? { allowedChatIds } : {}),
60
+ ...(allowedSenderIds.length > 0 ? { allowedSenderIds } : {}),
61
+ processingReaction: {
62
+ enabled: flags["disable-reaction"] !== true,
63
+ emojiType: reactionEmoji,
64
+ },
65
+ } : {}),
66
+ },
67
+ });
68
+ ok("gateway.enable", { channel: result.channel });
69
+ return true;
70
+ }
71
+ if (action === "disable") {
72
+ const config = await readConfig(flags);
73
+ const client = new ControllerClient(config);
74
+ const machineId = await resolveGatewayMachineId(client, flags);
75
+ const id = gatewayChannelId(flags, positional[0], "fake");
76
+ const result = await client.gateway({ machineId, action: "disable", channelId: id });
77
+ ok("gateway.disable", { channel: result.channel });
78
+ return true;
79
+ }
80
+ if (action === "status") {
81
+ const config = await readConfig(flags);
82
+ const client = new ControllerClient(config);
83
+ const machineId = await resolveGatewayMachineId(client, flags);
84
+ const result = await client.gateway({ machineId, action: "list" });
85
+ const includeDebug = flags["include-debug"] === true;
86
+ const channels = (result.channels ?? []).filter((channel) => includeDebug || channel.type === "lark");
87
+ const data = { machineId, channels };
88
+ if (!wantsJson(flags)) {
89
+ if (data.channels.length === 0) {
90
+ console.log(includeDebug ? "No gateways configured." : "No product gateways configured.");
91
+ return true;
92
+ }
93
+ for (const channel of data.channels) {
94
+ const target = channel.targetSessionId ? `session:${channel.targetSessionId}` : channel.targetCwd ?? "";
95
+ console.log(`${channel.id} ${channel.type} ${channel.enabled ? "enabled" : "disabled"} ${target} ${channel.listening ? "listening" : "stopped"}`);
96
+ }
97
+ return true;
98
+ }
99
+ ok("gateway.status", data);
100
+ return true;
101
+ }
102
+ if (action === "test") {
103
+ const config = await readConfig(flags);
104
+ const client = new ControllerClient(config);
105
+ const machineId = await resolveGatewayMachineId(client, flags);
106
+ const channelId = gatewayChannelId(flags, positional[0], "fake");
107
+ const externalConversationId = requireString(flags, "conversation");
108
+ const externalMessageId = requireString(flags, "message-id");
109
+ const text = requireString(flags, "text");
110
+ const result = await client.gateway({
111
+ machineId,
112
+ action: "test",
113
+ channelId,
114
+ externalConversationId,
115
+ externalMessageId,
116
+ text,
117
+ });
118
+ ok("gateway.test", result);
119
+ return true;
120
+ }
121
+ if (action === "notify") {
122
+ const config = await readConfig(flags);
123
+ const client = new ControllerClient(config);
124
+ const machineId = await resolveGatewayMachineId(client, flags);
125
+ const channelId = gatewayChannelId(flags, positional[0], "lark");
126
+ const externalConversationId = requireString(flags, "conversation");
127
+ const externalMessageId = typeof flags["message-id"] === "string" ? flags["message-id"] : `notify_${Date.now()}`;
128
+ const text = requireString(flags, "text");
129
+ const result = await client.gateway({
130
+ machineId,
131
+ action: "notify",
132
+ channelId,
133
+ externalConversationId,
134
+ externalMessageId,
135
+ text,
136
+ });
137
+ ok("gateway.notify", result);
138
+ return true;
139
+ }
140
+ if (action === "serve") {
141
+ const config = await readConfig(flags);
142
+ const port = Number(typeof flags.port === "string" ? flags.port : "8789");
143
+ if (!Number.isInteger(port) || port < 1 || port > 65_535)
144
+ throw new CliError("Invalid --port", "INVALID_ARGUMENT");
145
+ const host = typeof flags.host === "string" ? flags.host : "127.0.0.1";
146
+ const server = createServer((request, response) => {
147
+ void handleGatewayHttpRequest({ request, response, config, host, port }).catch((error) => {
148
+ writeGatewayHttpJson(response, error instanceof CliError ? 400 : 500, {
149
+ ok: false,
150
+ error: {
151
+ code: error instanceof CliError ? error.code : "GATEWAY_REQUEST_FAILED",
152
+ message: error instanceof Error ? error.message : String(error),
153
+ },
154
+ });
155
+ });
156
+ });
157
+ await new Promise((resolve) => server.listen(port, host, resolve));
158
+ if (wantsJson(flags)) {
159
+ console.log(JSON.stringify({ ok: true, type: "gateway.serve", data: { host, port } }, null, 2));
160
+ }
161
+ else {
162
+ console.log(`Gateway listening on http://${host}:${port}`);
163
+ }
164
+ await new Promise((resolve) => {
165
+ const stop = () => server.close(() => resolve());
166
+ process.once("SIGTERM", stop);
167
+ process.once("SIGINT", stop);
168
+ });
169
+ return true;
170
+ }
171
+ return false;
172
+ }
173
+ async function handleGatewayHttpRequest(input) {
174
+ const { request, response, config } = input;
175
+ if (request.method === "GET" && request.url === "/health") {
176
+ writeGatewayHttpJson(response, 200, { ok: true, service: "happy-elves-gateway" });
177
+ return;
178
+ }
179
+ const url = new URL(request.url ?? "/", `http://${input.host}:${input.port}`);
180
+ const match = /^\/gateway\/([^/]+)$/.exec(url.pathname);
181
+ if (request.method !== "POST" || !match) {
182
+ writeGatewayHttpJson(response, 404, { ok: false, error: { code: "NOT_FOUND", message: "Gateway route not found" } });
183
+ return;
184
+ }
185
+ const channelId = decodeURIComponent(match[1]);
186
+ const store = await readGatewayStore();
187
+ const channel = mustFindEnabledChannel(store, channelId);
188
+ const body = await readJsonRequestBody(request);
189
+ if (channel.type === "lark" && isLarkChallenge(body)) {
190
+ writeGatewayHttpJson(response, 200, { challenge: body.challenge });
191
+ return;
192
+ }
193
+ assertGatewayToken(channel, request, body);
194
+ const message = channel.type === "lark" ? larkMessageFromBody(body) : fakeGatewayMessageFromBody(body);
195
+ const result = await deliverGatewayMessage({
196
+ store,
197
+ channel,
198
+ client: new ControllerClient(config),
199
+ accountSecret: config.accountSecret,
200
+ externalConversationId: message.externalConversationId,
201
+ externalMessageId: message.externalMessageId,
202
+ text: message.text,
203
+ });
204
+ writeGatewayHttpJson(response, 200, { ok: true, type: "gateway.deliver", data: result });
205
+ }
206
+ async function deliverGatewayMessage(input) {
207
+ const { channel, client, accountSecret, externalConversationId, externalMessageId, text } = input;
208
+ let store = input.store;
209
+ let mapping = store.mappings.find((item) => item.channelId === channel.id && item.externalConversationId === externalConversationId);
210
+ const createRequestId = stableGatewayId("gw_create", channel.id, externalConversationId);
211
+ if (!mapping) {
212
+ const create = await client.sendCommand({
213
+ type: "controller:createSession",
214
+ requestId: createRequestId,
215
+ machineId: channel.targetMachineId,
216
+ agent: channel.defaultAgent,
217
+ cwd: channel.targetCwd,
218
+ name: `Gateway ${channel.type}: ${externalConversationId}`,
219
+ encryptedMetadata: await encryptJson(accountSecret, `gateway:create:${createRequestId}`, {
220
+ createdFrom: "gateway",
221
+ gateway: {
222
+ channelId: channel.id,
223
+ channelType: channel.type,
224
+ externalConversationId,
225
+ },
226
+ agent: channel.defaultAgent,
227
+ cwd: channel.targetCwd,
228
+ name: `Gateway ${channel.type}: ${externalConversationId}`,
229
+ }),
230
+ }, false, 15_000);
231
+ if (!create.sessionId)
232
+ throw new CliError("Gateway session admission did not return a sessionId", "GATEWAY_CREATE_FAILED");
233
+ const now = new Date().toISOString();
234
+ mapping = {
235
+ channelId: channel.id,
236
+ externalConversationId,
237
+ sessionId: create.sessionId,
238
+ createRequestId,
239
+ createdAt: now,
240
+ updatedAt: now,
241
+ };
242
+ store = await updateGatewayStore((current) => ({
243
+ ...current,
244
+ mappings: [mapping, ...current.mappings.filter((item) => !(item.channelId === channel.id && item.externalConversationId === externalConversationId))],
245
+ }));
246
+ }
247
+ const requestId = stableGatewayId("gw_msg", channel.id, externalConversationId, externalMessageId);
248
+ const turnId = stableGatewayId("turn_gw", channel.id, externalConversationId, externalMessageId);
249
+ const sent = await client.sendCommand({
250
+ type: "controller:prompt",
251
+ requestId,
252
+ sessionId: mapping.sessionId,
253
+ turnId,
254
+ encryptedPrompt: await encryptJson(accountSecret, `gateway:prompt:${mapping.sessionId}:${turnId}`, {
255
+ type: "user_prompt",
256
+ text,
257
+ }),
258
+ permissionMode: "approve-reads",
259
+ }, false, 15_000);
260
+ const deliveredAt = new Date().toISOString();
261
+ const lastDeliveredMessage = {
262
+ externalConversationId,
263
+ externalMessageId,
264
+ requestId,
265
+ sessionId: mapping.sessionId,
266
+ turnId: sent.turnId ?? turnId,
267
+ deliveredAt,
268
+ };
269
+ await updateGatewayStore((current) => ({
270
+ ...current,
271
+ channels: current.channels.map((item) => item.id === channel.id ? {
272
+ ...item,
273
+ lastError: undefined,
274
+ lastDeliveredMessage,
275
+ updatedAt: deliveredAt,
276
+ } : item),
277
+ mappings: current.mappings.map((item) => item.channelId === channel.id && item.externalConversationId === externalConversationId
278
+ ? { ...item, sessionId: mapping.sessionId, createRequestId, updatedAt: deliveredAt }
279
+ : item),
280
+ }));
281
+ return {
282
+ channelId: channel.id,
283
+ externalConversationId,
284
+ externalMessageId,
285
+ sessionId: mapping.sessionId,
286
+ requestId,
287
+ turnId: sent.turnId ?? turnId,
288
+ admission: sent.admission,
289
+ dispatch: sent.dispatch,
290
+ };
291
+ }
292
+ function stableGatewayId(prefix, ...parts) {
293
+ const hash = createHash("sha256").update(parts.join("\0")).digest("base64url").slice(0, 32);
294
+ return `${prefix}_${hash}`;
295
+ }
296
+ async function readJsonRequestBody(request) {
297
+ const chunks = [];
298
+ let size = 0;
299
+ for await (const chunk of request) {
300
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
301
+ size += buffer.length;
302
+ if (size > 1024 * 1024)
303
+ throw new CliError("Gateway request body is too large", "REQUEST_TOO_LARGE");
304
+ chunks.push(buffer);
305
+ }
306
+ try {
307
+ return JSON.parse(Buffer.concat(chunks).toString("utf8") || "{}");
308
+ }
309
+ catch {
310
+ throw new CliError("Gateway request body must be JSON", "INVALID_JSON");
311
+ }
312
+ }
313
+ function writeGatewayHttpJson(response, statusCode, body) {
314
+ response.writeHead(statusCode, { "content-type": "application/json; charset=utf-8" });
315
+ response.end(`${JSON.stringify(body)}\n`);
316
+ }
317
+ function isRecord(value) {
318
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
319
+ }
320
+ function isLarkChallenge(value) {
321
+ return isRecord(value) && typeof value.challenge === "string";
322
+ }
323
+ function assertGatewayToken(channel, request, body) {
324
+ if (!channel.localToken)
325
+ return;
326
+ const auth = request.headers.authorization;
327
+ const bearer = typeof auth === "string" && auth.startsWith("Bearer ") ? auth.slice("Bearer ".length) : undefined;
328
+ const record = isRecord(body) ? body : {};
329
+ const header = isRecord(record.header) ? record.header : {};
330
+ const token = bearer ?? stringField(record, "token") ?? stringField(header, "token") ?? headerValue(request, "x-happy-elves-token");
331
+ if (token !== channel.localToken)
332
+ throw new CliError("Gateway token is invalid", "GATEWAY_TOKEN_INVALID");
333
+ }
334
+ function headerValue(request, key) {
335
+ const value = request.headers[key.toLowerCase()];
336
+ return typeof value === "string" ? value : undefined;
337
+ }
338
+ function fakeGatewayMessageFromBody(body) {
339
+ const record = isRecord(body) ? body : {};
340
+ const externalConversationId = stringField(record, "externalConversationId") ?? stringField(record, "conversationId");
341
+ const externalMessageId = stringField(record, "externalMessageId") ?? stringField(record, "messageId");
342
+ const text = stringField(record, "text");
343
+ if (!externalConversationId || !externalMessageId || !text) {
344
+ throw new CliError("Fake gateway body requires conversationId, messageId, and text", "GATEWAY_MESSAGE_INVALID");
345
+ }
346
+ return { externalConversationId, externalMessageId, text };
347
+ }
348
+ function larkMessageFromBody(body) {
349
+ const record = isRecord(body) ? body : {};
350
+ const event = isRecord(record.event) ? record.event : record;
351
+ const message = isRecord(event.message) ? event.message : event;
352
+ const sender = isRecord(event.sender) ? event.sender : {};
353
+ const senderId = isRecord(sender.sender_id) ? sender.sender_id : {};
354
+ const externalMessageId = stringField(message, "message_id") ?? stringField(event, "message_id") ?? stringField(record, "uuid");
355
+ const externalConversationId = stringField(message, "chat_id") ??
356
+ stringField(event, "chat_id") ??
357
+ stringField(event, "open_chat_id") ??
358
+ stringField(senderId, "open_id");
359
+ const text = larkTextFromContent(message.content) ?? stringField(message, "text");
360
+ if (!externalConversationId || !externalMessageId || !text) {
361
+ throw new CliError("Lark gateway event is not a supported text message", "GATEWAY_MESSAGE_INVALID");
362
+ }
363
+ return { externalConversationId, externalMessageId, text };
364
+ }
365
+ function larkTextFromContent(content) {
366
+ if (typeof content === "string") {
367
+ try {
368
+ const parsed = JSON.parse(content);
369
+ if (isRecord(parsed))
370
+ return stringField(parsed, "text");
371
+ }
372
+ catch {
373
+ return content;
374
+ }
375
+ }
376
+ if (isRecord(content))
377
+ return stringField(content, "text");
378
+ return undefined;
379
+ }
380
+ function stringField(record, key) {
381
+ const value = record[key];
382
+ return typeof value === "string" && value.length > 0 ? value : undefined;
383
+ }
384
+ function gatewayChannelType(value) {
385
+ if (value === "fake" || value === "lark")
386
+ return value;
387
+ throw new CliError("Gateway channel must be fake or lark", "INVALID_ARGUMENT");
388
+ }
389
+ function gatewayChannelId(flags, positional, fallbackType) {
390
+ return positional || (typeof flags.name === "string" ? flags.name : undefined) || (typeof flags.channel === "string" ? flags.channel : fallbackType);
391
+ }
392
+ function csvFlag(value) {
393
+ if (typeof value !== "string")
394
+ return [];
395
+ return value.split(",").map((item) => item.trim()).filter(Boolean);
396
+ }
397
+ async function readSecretFromStdin() {
398
+ let value = "";
399
+ process.stdin.setEncoding("utf8");
400
+ for await (const chunk of process.stdin) {
401
+ value += chunk;
402
+ }
403
+ const secret = value.trim();
404
+ if (!secret)
405
+ throw new CliError("--app-secret-stdin was set but stdin was empty", "MISSING_ARGUMENT");
406
+ return secret;
407
+ }
408
+ async function resolveGatewayMachineId(client, flags) {
409
+ if (typeof flags.machine === "string" && flags.machine.length > 0)
410
+ return flags.machine;
411
+ const snapshot = await client.snapshot();
412
+ const machine = snapshot.machines.find((item) => item.online) ?? snapshot.machines[0];
413
+ if (!machine)
414
+ throw new CliError("No daemon machine is available; pass --machine <machineId>", "MACHINE_NOT_FOUND");
415
+ return machine.id;
416
+ }
417
+ function mustFindChannel(store, id) {
418
+ const channel = store.channels.find((item) => item.id === id);
419
+ if (!channel)
420
+ throw new CliError("Gateway channel not found", "GATEWAY_NOT_FOUND");
421
+ return channel;
422
+ }
423
+ function mustFindEnabledChannel(store, id) {
424
+ const channel = mustFindChannel(store, id);
425
+ if (!channel.enabled)
426
+ throw new CliError("Gateway channel is disabled", "GATEWAY_DISABLED");
427
+ return channel;
428
+ }
429
+ //# sourceMappingURL=gateway.js.map
@@ -2,87 +2,160 @@ import { parseFlags as parseSharedFlags } from "../../../../../packages/shared/d
2
2
  import { CliError } from "../../errors.js";
3
3
  const valueFlags = new Set([
4
4
  "agent",
5
+ "account",
6
+ "app-id",
7
+ "artifact-id",
8
+ "at",
9
+ "channel",
5
10
  "code",
11
+ "conversation",
12
+ "consumer-session",
13
+ "cron",
6
14
  "controller",
15
+ "crew-session",
7
16
  "cwd",
17
+ "date",
8
18
  "device-id",
9
19
  "device-name",
20
+ "brief-file",
21
+ "every-ms",
22
+ "execution",
23
+ "file",
10
24
  "from",
11
25
  "host",
26
+ "if-busy",
27
+ "domain",
12
28
  "invite-secret",
29
+ "inbound",
13
30
  "join-url-base",
31
+ "label",
32
+ "layer",
14
33
  "limit",
15
34
  "machine",
16
35
  "machine-id",
36
+ "native-identity",
37
+ "memory",
38
+ "memory-mode",
39
+ "message-id",
40
+ "memory-project",
41
+ "memory-top-n",
17
42
  "name",
43
+ "observed-at",
44
+ "model",
45
+ "thinking-level",
18
46
  "mode",
19
47
  "output",
20
48
  "path",
21
49
  "port",
22
50
  "permission",
23
51
  "permission-mode",
52
+ "profile",
53
+ "prefix",
54
+ "project",
55
+ "publish",
56
+ "query",
24
57
  "prompt",
25
58
  "prompt-file",
26
- "query",
27
- "request-id",
28
59
  "every",
29
60
  "reason",
61
+ "request-id",
62
+ "release-tag",
63
+ "reaction-emoji",
30
64
  "relay",
65
+ "route-decision",
31
66
  "root",
32
- "runtime-limit",
33
- "runtime-session",
34
67
  "shell",
35
68
  "actions",
69
+ "ack-timeout",
70
+ "allow-chat",
71
+ "allow-sender",
36
72
  "expires-in",
37
73
  "format",
74
+ "history-version",
38
75
  "loops",
39
76
  "machines",
40
- "messages",
41
77
  "sessions",
78
+ "session",
42
79
  "secret",
43
80
  "since",
81
+ "slot",
82
+ "slot-secret",
83
+ "source",
84
+ "status",
85
+ "stream",
44
86
  "stop-on",
87
+ "strategy",
45
88
  "tail",
46
89
  "tag",
47
90
  "tags",
91
+ "task-id",
48
92
  "text",
49
93
  "text-file",
50
94
  "timeout",
51
95
  "timeout-ms",
96
+ "timezone",
97
+ "through",
52
98
  "wait-timeout-ms",
99
+ "inactivity-timeout",
53
100
  "runtime-timeout",
54
101
  "to",
55
102
  "token",
56
103
  "ttl",
104
+ "title",
57
105
  "url",
58
106
  "turn",
107
+ "turn-id",
59
108
  "until",
109
+ "import-token",
110
+ "reviewer-tag",
111
+ "dogfood-tag",
60
112
  ]);
61
113
  const booleanFlags = new Set([
62
114
  "all",
115
+ "allow-any-sender",
116
+ "app-secret-stdin",
117
+ "confirm-risk",
118
+ "confirm-native-handoff",
119
+ "copy-tags",
63
120
  "detach",
64
- "force",
121
+ "disable-reaction",
65
122
  "help",
123
+ "hidden",
66
124
  "h",
67
- "include-output",
68
125
  "include-archived",
126
+ "include-debug",
69
127
  "json",
70
128
  "keep-source",
71
129
  "local",
72
130
  "no-open",
131
+ "no-start",
73
132
  "no-wait",
133
+ "preserve-secret",
74
134
  "repair-head",
135
+ "skip-local-daemon",
136
+ "strict",
75
137
  "summary",
138
+ "subscribe",
76
139
  "verbose",
77
140
  "wait",
141
+ "decode",
142
+ "manual",
78
143
  ]);
79
144
  const knownFlags = new Set([...valueFlags, ...booleanFlags]);
80
145
  const dashPrefixedValueFlags = new Set(["secret"]);
146
+ const repeatableValueFlags = new Set([
147
+ "tag",
148
+ "tags",
149
+ "release-tag",
150
+ "reviewer-tag",
151
+ "dogfood-tag",
152
+ ]);
81
153
  export function parseCliFlags(argv) {
82
- const parsed = parseSharedFlags(argv, { valueFlags, dashPrefixedValueFlags });
154
+ const parsed = parseSharedFlags(argv, { valueFlags, dashPrefixedValueFlags, repeatableValueFlags });
83
155
  const unknown = Object.keys(parsed.flags).filter((flag) => !knownFlags.has(flag));
84
156
  if (unknown.length > 0) {
85
157
  throw new CliError(`Unknown flag: --${unknown[0]}`, "UNKNOWN_FLAG");
86
158
  }
87
159
  return parsed;
88
160
  }
161
+ //# sourceMappingURL=args.js.map
@@ -23,3 +23,4 @@ export async function readLocalAuditLog(tail = 100) {
23
23
  throw error;
24
24
  }
25
25
  }
26
+ //# sourceMappingURL=audit.js.map
@@ -147,3 +147,4 @@ export function startRelayUrl(flags, existing) {
147
147
  const relayUrl = normalizeRelayUrl(defaultHostedRelayUrl);
148
148
  return { relayUrl, explicit: false };
149
149
  }
150
+ //# sourceMappingURL=bootstrap-config.js.map
@@ -1,11 +1,12 @@
1
+ import path from "node:path";
1
2
  import { CliError } from "../../errors.js";
2
- import { startDaemonTimeoutMs } from "./paths.js";
3
+ import { configDir, startDaemonTimeoutMs } from "./paths.js";
3
4
  import { readDaemonConfig } from "./config.js";
4
- import { daemonBinaryUpdatedAfterStart, localDaemonStatus, spawnDaemonStart, stopLocalDaemon } from "./local-daemon.js";
5
+ import { daemonBinaryUpdatedAfterStart, daemonConfigUpdatedAfterStart, localDaemonStatus, spawnDaemonStart, stopLocalDaemon } from "./local-daemon.js";
5
6
  export async function ensureDaemonRunning(relayUrl, cwd = process.cwd()) {
6
7
  const current = await localDaemonStatus();
7
8
  if (current.running) {
8
- if (await daemonBinaryUpdatedAfterStart(current)) {
9
+ if ((await daemonBinaryUpdatedAfterStart(current)) || (await daemonConfigUpdatedAfterStart(current))) {
9
10
  return await restartDaemonForNewConfig(relayUrl, cwd);
10
11
  }
11
12
  return { local: current, started: false };
@@ -19,9 +20,15 @@ export async function ensureDaemonRunning(relayUrl, cwd = process.cwd()) {
19
20
  const local = await localDaemonStatus();
20
21
  if (local.running)
21
22
  return { local, started: true, startedPid };
23
+ try {
24
+ process.kill(startedPid, 0);
25
+ }
26
+ catch {
27
+ throw new CliError(`Daemon exited before becoming locally ready. Startup output: ${path.join(configDir, "daemon.startup.log")}`, "DAEMON_START_FAILED");
28
+ }
22
29
  await new Promise((resolve) => setTimeout(resolve, 250));
23
30
  }
24
- throw new CliError("Daemon did not become ready in time. Run happy-elves daemon doctor and happy-elves daemon logs.", "DAEMON_START_FAILED");
31
+ throw new CliError(`Daemon did not become locally ready in time. Startup output: ${path.join(configDir, "daemon.startup.log")}`, "DAEMON_START_FAILED");
25
32
  }
26
33
  export async function restartDaemonForNewConfig(relayUrl, cwd = process.cwd()) {
27
34
  const stopped = await stopLocalDaemon();
@@ -43,3 +50,4 @@ export async function waitForMachineProjection(client, machineId, timeoutMs = 50
43
50
  }
44
51
  return lastSeen;
45
52
  }
53
+ //# sourceMappingURL=bootstrap-daemon.js.map
@@ -37,3 +37,4 @@ export function openUrl(url) {
37
37
  return { opened: false, error: error instanceof Error ? error.message : String(error) };
38
38
  }
39
39
  }
40
+ //# sourceMappingURL=bootstrap-output.js.map
@@ -93,3 +93,4 @@ export async function startBootstrap(flags) {
93
93
  daemon: data.daemon,
94
94
  });
95
95
  }
96
+ //# sourceMappingURL=bootstrap.js.map
@@ -2,7 +2,6 @@ import type { CliConfig, DaemonConfig } from "./types.js";
2
2
  export declare function requireString(flags: Record<string, string | boolean>, key: string): string;
3
3
  export declare function requirePositional(value: string | undefined, name: string): string;
4
4
  export declare function normalizeRelayUrl(value: string): string;
5
- export declare function redactedRelayUrl(value: string): string;
6
5
  export declare function requireRelayUrl(flags: Record<string, string | boolean>, key?: string): string;
7
6
  export declare function readConfig(flags: Record<string, string | boolean>): Promise<CliConfig>;
8
7
  export declare function readDaemonConfig(): Promise<DaemonConfig>;