@cydm/happy-elves 0.1.0-beta.31 → 0.1.0-beta.310

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 (342) hide show
  1. package/apps/cli/dist/commands/app.js +10 -0
  2. package/apps/cli/dist/commands/daemon.js +92 -4
  3. package/apps/cli/dist/commands/gateway.d.ts +2 -0
  4. package/apps/cli/dist/commands/gateway.js +429 -0
  5. package/apps/cli/dist/commands/lib/args.js +49 -0
  6. package/apps/cli/dist/commands/lib/bootstrap-daemon.d.ts +2 -2
  7. package/apps/cli/dist/commands/lib/bootstrap-daemon.js +2 -2
  8. package/apps/cli/dist/commands/lib/doctor.d.ts +11 -0
  9. package/apps/cli/dist/commands/lib/doctor.js +276 -11
  10. package/apps/cli/dist/commands/lib/gateway-store.d.ts +38 -0
  11. package/apps/cli/dist/commands/lib/gateway-store.js +33 -0
  12. package/apps/cli/dist/commands/lib/index.d.ts +4 -2
  13. package/apps/cli/dist/commands/lib/index.js +2 -0
  14. package/apps/cli/dist/commands/lib/json.d.ts +2 -2
  15. package/apps/cli/dist/commands/lib/json.js +5 -2
  16. package/apps/cli/dist/commands/lib/local-daemon.d.ts +1 -0
  17. package/apps/cli/dist/commands/lib/local-daemon.js +14 -0
  18. package/apps/cli/dist/commands/lib/paths.d.ts +2 -0
  19. package/apps/cli/dist/commands/lib/paths.js +2 -0
  20. package/apps/cli/dist/commands/lib/relay-db-audit.d.ts +37 -0
  21. package/apps/cli/dist/commands/lib/relay-db-audit.js +300 -0
  22. package/apps/cli/dist/commands/lib/relay-http.d.ts +1 -1
  23. package/apps/cli/dist/commands/lib/scope.d.ts +1 -1
  24. package/apps/cli/dist/commands/lib/session-output.d.ts +15 -1
  25. package/apps/cli/dist/commands/lib/session-output.js +214 -6
  26. package/apps/cli/dist/commands/lib/session-view.d.ts +2 -2
  27. package/apps/cli/dist/commands/lib/status.js +5 -1
  28. package/apps/cli/dist/commands/lib/types.d.ts +4 -2
  29. package/apps/cli/dist/commands/lib/usage.js +123 -10
  30. package/apps/cli/dist/commands/lib/workspace.d.ts +2 -2
  31. package/apps/cli/dist/commands/lib/workspace.js +63 -10
  32. package/apps/cli/dist/commands/machine.js +50 -9
  33. package/apps/cli/dist/commands/memory.d.ts +2 -0
  34. package/apps/cli/dist/commands/memory.js +179 -0
  35. package/apps/cli/dist/commands/relay.js +29 -2
  36. package/apps/cli/dist/commands/release.d.ts +2 -0
  37. package/apps/cli/dist/commands/release.js +197 -0
  38. package/apps/cli/dist/commands/remote.js +10 -2
  39. package/apps/cli/dist/commands/schedule.d.ts +2 -0
  40. package/apps/cli/dist/commands/schedule.js +273 -0
  41. package/apps/cli/dist/commands/session.js +517 -5
  42. package/apps/cli/dist/commands/turn.js +225 -9
  43. package/apps/cli/dist/commands/workspace.d.ts +2 -0
  44. package/apps/cli/dist/commands/workspace.js +68 -0
  45. package/apps/cli/package.json +6 -0
  46. package/apps/daemon/dist/gateway/adapters.d.ts +38 -0
  47. package/apps/daemon/dist/gateway/adapters.js +2 -0
  48. package/apps/daemon/dist/gateway/feishu.d.ts +65 -0
  49. package/apps/daemon/dist/gateway/feishu.js +493 -0
  50. package/apps/daemon/dist/gateway/format.d.ts +2 -0
  51. package/apps/daemon/dist/gateway/format.js +19 -0
  52. package/apps/daemon/dist/gateway/handler.d.ts +7 -0
  53. package/apps/daemon/dist/gateway/handler.js +151 -0
  54. package/apps/daemon/dist/gateway/runtime.d.ts +33 -0
  55. package/apps/daemon/dist/gateway/runtime.js +850 -0
  56. package/apps/daemon/dist/gateway/store.d.ts +92 -0
  57. package/apps/daemon/dist/gateway/store.js +268 -0
  58. package/apps/daemon/dist/memory/handler.d.ts +7 -0
  59. package/apps/daemon/dist/memory/handler.js +105 -0
  60. package/apps/daemon/dist/memory/manager.d.ts +44 -0
  61. package/apps/daemon/dist/memory/manager.js +359 -0
  62. package/apps/daemon/dist/paths.d.ts +3 -0
  63. package/apps/daemon/dist/paths.js +3 -0
  64. package/apps/daemon/dist/relay/admission.d.ts +30 -0
  65. package/apps/daemon/dist/relay/admission.js +31 -0
  66. package/apps/daemon/dist/relay/connection.js +37 -1
  67. package/apps/daemon/dist/relay/devtools.d.ts +1 -1
  68. package/apps/daemon/dist/relay/register.js +2 -0
  69. package/apps/daemon/dist/relay/send.d.ts +2 -2
  70. package/apps/daemon/dist/relay/send.js +2 -0
  71. package/apps/daemon/dist/relay-http.d.ts +1 -1
  72. package/apps/daemon/dist/runtime/external-provider.d.ts +1 -1
  73. package/apps/daemon/dist/runtime/external-provider.js +187 -17
  74. package/apps/daemon/dist/runtime.d.ts +1 -2
  75. package/apps/daemon/dist/runtime.js +0 -3
  76. package/apps/daemon/dist/schedule/handler.d.ts +9 -0
  77. package/apps/daemon/dist/schedule/handler.js +148 -0
  78. package/apps/daemon/dist/schedule/runner.d.ts +21 -0
  79. package/apps/daemon/dist/schedule/runner.js +547 -0
  80. package/apps/daemon/dist/schedule/store.d.ts +9 -0
  81. package/apps/daemon/dist/schedule/store.js +143 -0
  82. package/apps/daemon/dist/session/create-session.d.ts +1 -1
  83. package/apps/daemon/dist/session/directory.d.ts +1 -1
  84. package/apps/daemon/dist/session/events.d.ts +15 -2
  85. package/apps/daemon/dist/session/events.js +76 -24
  86. package/apps/daemon/dist/session/file-preview.d.ts +1 -1
  87. package/apps/daemon/dist/session/lifecycle.d.ts +26 -3
  88. package/apps/daemon/dist/session/lifecycle.js +161 -22
  89. package/apps/daemon/dist/session/metadata.d.ts +2 -2
  90. package/apps/daemon/dist/session/metadata.js +42 -1
  91. package/apps/daemon/dist/session/primitives.d.ts +1 -1
  92. package/apps/daemon/dist/session/primitives.js +37 -6
  93. package/apps/daemon/dist/session/prompt.d.ts +28 -1
  94. package/apps/daemon/dist/session/prompt.js +340 -5
  95. package/apps/daemon/dist/session/reconcile.d.ts +3 -0
  96. package/apps/daemon/dist/session/reconcile.js +235 -0
  97. package/apps/daemon/dist/session/runtime-handle.d.ts +1 -1
  98. package/apps/daemon/dist/start.js +5 -1
  99. package/apps/daemon/dist/state.d.ts +2 -2
  100. package/apps/daemon/dist/turn-coordinator.d.ts +1 -0
  101. package/apps/daemon/dist/turn-coordinator.js +4 -0
  102. package/apps/daemon/dist/types.d.ts +16 -1
  103. package/apps/daemon/package.json +3 -25
  104. package/apps/relay/dist/connections.d.ts +2 -0
  105. package/apps/relay/dist/controller-handlers.d.ts +42 -2
  106. package/apps/relay/dist/controller-handlers.js +349 -37
  107. package/apps/relay/dist/db.js +296 -2
  108. package/apps/relay/dist/errors.d.ts +2 -1
  109. package/apps/relay/dist/errors.js +3 -1
  110. package/apps/relay/dist/http-routes.js +659 -33
  111. package/apps/relay/dist/http-schemas.d.ts +156 -0
  112. package/apps/relay/dist/http-schemas.js +85 -0
  113. package/apps/relay/dist/index.js +31 -1
  114. package/apps/relay/dist/machine-handlers.d.ts +15 -7
  115. package/apps/relay/dist/machine-handlers.js +567 -27
  116. package/apps/relay/dist/projections.d.ts +1 -1
  117. package/apps/relay/dist/projections.js +13 -0
  118. package/apps/relay/dist/relay-context.d.ts +41 -3
  119. package/apps/relay/dist/relay-context.js +244 -19
  120. package/apps/relay/dist/repositories.d.ts +2 -2
  121. package/apps/relay/dist/repositories.js +28 -1
  122. package/apps/relay/dist/runtime-bindings.d.ts +25 -0
  123. package/apps/relay/dist/runtime-bindings.js +49 -0
  124. package/apps/relay/dist/scope.d.ts +1 -1
  125. package/apps/relay/dist/types.d.ts +71 -1
  126. package/apps/relay/dist/websocket.js +2 -0
  127. package/package.json +5 -11
  128. package/packages/agent-sdk/dist/index.d.ts +80 -0
  129. package/packages/agent-sdk/dist/index.js +16 -0
  130. package/packages/client/dist/account.d.ts +35 -2
  131. package/packages/client/dist/account.js +98 -1
  132. package/packages/client/dist/client.d.ts +59 -6
  133. package/packages/client/dist/client.js +312 -58
  134. package/packages/client/dist/index.d.ts +1 -1
  135. package/packages/client/dist/parsers.d.ts +28 -2
  136. package/packages/client/dist/parsers.js +167 -0
  137. package/packages/client/dist/transport.d.ts +21 -1
  138. package/packages/client/dist/transport.js +69 -6
  139. package/packages/client/dist/types.d.ts +177 -1
  140. package/packages/client/dist/validation.d.ts +1 -1
  141. package/packages/runtime/dist/index.d.ts +66 -0
  142. package/packages/runtime-acpx/dist/index.d.ts +1 -1
  143. package/packages/runtime-acpx/dist/index.js +8 -0
  144. package/packages/runtime-cli/dist/claude-history.d.ts +1 -2
  145. package/packages/runtime-cli/dist/claude-history.js +0 -3
  146. package/packages/runtime-cli/dist/claude-session-store.d.ts +0 -1
  147. package/packages/runtime-cli/dist/claude-session-store.js +1 -1
  148. package/packages/runtime-cli/dist/claude-turn.d.ts +2 -1
  149. package/packages/runtime-cli/dist/claude-turn.js +29 -9
  150. package/packages/runtime-cli/dist/codex-app-server.d.ts +8 -3
  151. package/packages/runtime-cli/dist/codex-app-server.js +122 -25
  152. package/packages/runtime-cli/dist/codex-history.d.ts +1 -2
  153. package/packages/runtime-cli/dist/codex-history.js +11 -5
  154. package/packages/runtime-cli/dist/codex-protocol.d.ts +2 -2
  155. package/packages/runtime-cli/dist/codex-protocol.js +4 -4
  156. package/packages/runtime-cli/dist/history-merge.d.ts +1 -1
  157. package/packages/runtime-cli/dist/index.d.ts +1 -1
  158. package/packages/runtime-cli/dist/index.js +108 -2
  159. package/packages/runtime-cli/dist/permissions.d.ts +1 -1
  160. package/packages/runtime-cli/dist/session-store.d.ts +2 -1
  161. package/packages/runtime-cli/dist/session-store.js +9 -8
  162. package/packages/shared/dist/index.d.ts +2 -0
  163. package/packages/shared/dist/index.js +2 -0
  164. package/packages/shared/dist/protocol-schemas.d.ts +1077 -0
  165. package/packages/shared/dist/protocol-schemas.js +273 -0
  166. package/packages/shared/dist/protocol-types.d.ts +371 -3
  167. package/packages/shared/dist/protocol.d.ts +181 -2
  168. package/packages/shared/dist/protocol.js +197 -1
  169. package/packages/shared/dist/session-tags.d.ts +12 -0
  170. package/packages/shared/dist/session-tags.js +50 -0
  171. package/apps/cli/dist/commands/account.js.map +0 -1
  172. package/apps/cli/dist/commands/app.js.map +0 -1
  173. package/apps/cli/dist/commands/collect.js.map +0 -1
  174. package/apps/cli/dist/commands/command.js.map +0 -1
  175. package/apps/cli/dist/commands/config.js.map +0 -1
  176. package/apps/cli/dist/commands/daemon.js.map +0 -1
  177. package/apps/cli/dist/commands/lib/args.js.map +0 -1
  178. package/apps/cli/dist/commands/lib/audit.js.map +0 -1
  179. package/apps/cli/dist/commands/lib/bootstrap-config.js.map +0 -1
  180. package/apps/cli/dist/commands/lib/bootstrap-daemon.js.map +0 -1
  181. package/apps/cli/dist/commands/lib/bootstrap-output.js.map +0 -1
  182. package/apps/cli/dist/commands/lib/bootstrap.js.map +0 -1
  183. package/apps/cli/dist/commands/lib/config.js.map +0 -1
  184. package/apps/cli/dist/commands/lib/doctor.js.map +0 -1
  185. package/apps/cli/dist/commands/lib/exit.js.map +0 -1
  186. package/apps/cli/dist/commands/lib/index.js.map +0 -1
  187. package/apps/cli/dist/commands/lib/json.js.map +0 -1
  188. package/apps/cli/dist/commands/lib/local-daemon.js.map +0 -1
  189. package/apps/cli/dist/commands/lib/loop-store.js.map +0 -1
  190. package/apps/cli/dist/commands/lib/paths.js.map +0 -1
  191. package/apps/cli/dist/commands/lib/relay-http.js.map +0 -1
  192. package/apps/cli/dist/commands/lib/scope.js.map +0 -1
  193. package/apps/cli/dist/commands/lib/session-output.js.map +0 -1
  194. package/apps/cli/dist/commands/lib/session-view.js.map +0 -1
  195. package/apps/cli/dist/commands/lib/status.js.map +0 -1
  196. package/apps/cli/dist/commands/lib/types.js.map +0 -1
  197. package/apps/cli/dist/commands/lib/usage.js.map +0 -1
  198. package/apps/cli/dist/commands/lib/workspace.js.map +0 -1
  199. package/apps/cli/dist/commands/loop.js.map +0 -1
  200. package/apps/cli/dist/commands/machine.js.map +0 -1
  201. package/apps/cli/dist/commands/relay.js.map +0 -1
  202. package/apps/cli/dist/commands/remote.js.map +0 -1
  203. package/apps/cli/dist/commands/session.js.map +0 -1
  204. package/apps/cli/dist/commands/token.js.map +0 -1
  205. package/apps/cli/dist/commands/turn.js.map +0 -1
  206. package/apps/cli/dist/errors.js.map +0 -1
  207. package/apps/cli/dist/index.js.map +0 -1
  208. package/apps/daemon/dist/app.js.map +0 -1
  209. package/apps/daemon/dist/args.js.map +0 -1
  210. package/apps/daemon/dist/audit.js.map +0 -1
  211. package/apps/daemon/dist/cli.js.map +0 -1
  212. package/apps/daemon/dist/config.js.map +0 -1
  213. package/apps/daemon/dist/errors.js.map +0 -1
  214. package/apps/daemon/dist/loop/runner.js.map +0 -1
  215. package/apps/daemon/dist/loop/store.js.map +0 -1
  216. package/apps/daemon/dist/pair.js.map +0 -1
  217. package/apps/daemon/dist/paths.js.map +0 -1
  218. package/apps/daemon/dist/process.js.map +0 -1
  219. package/apps/daemon/dist/relay/connection.js.map +0 -1
  220. package/apps/daemon/dist/relay/devtools.js.map +0 -1
  221. package/apps/daemon/dist/relay/register.js.map +0 -1
  222. package/apps/daemon/dist/relay/send.js.map +0 -1
  223. package/apps/daemon/dist/relay-http.js.map +0 -1
  224. package/apps/daemon/dist/runtime/external-provider.js.map +0 -1
  225. package/apps/daemon/dist/runtime.js.map +0 -1
  226. package/apps/daemon/dist/session/create-session.js.map +0 -1
  227. package/apps/daemon/dist/session/directory.js.map +0 -1
  228. package/apps/daemon/dist/session/events.js.map +0 -1
  229. package/apps/daemon/dist/session/file-preview.js.map +0 -1
  230. package/apps/daemon/dist/session/lifecycle.js.map +0 -1
  231. package/apps/daemon/dist/session/metadata.js.map +0 -1
  232. package/apps/daemon/dist/session/primitives.js.map +0 -1
  233. package/apps/daemon/dist/session/prompt.js.map +0 -1
  234. package/apps/daemon/dist/session/runtime-handle.js.map +0 -1
  235. package/apps/daemon/dist/start.js.map +0 -1
  236. package/apps/daemon/dist/state.js.map +0 -1
  237. package/apps/daemon/dist/turn-coordinator.js.map +0 -1
  238. package/apps/daemon/dist/types.js.map +0 -1
  239. package/apps/daemon/dist/utils.js.map +0 -1
  240. package/apps/relay/dist/auth.js.map +0 -1
  241. package/apps/relay/dist/connections.js.map +0 -1
  242. package/apps/relay/dist/controller-handlers.js.map +0 -1
  243. package/apps/relay/dist/db.js.map +0 -1
  244. package/apps/relay/dist/errors.js.map +0 -1
  245. package/apps/relay/dist/http-routes.js.map +0 -1
  246. package/apps/relay/dist/http-schemas.js.map +0 -1
  247. package/apps/relay/dist/index.js.map +0 -1
  248. package/apps/relay/dist/machine-handlers.js.map +0 -1
  249. package/apps/relay/dist/projections.js.map +0 -1
  250. package/apps/relay/dist/relay-context.js.map +0 -1
  251. package/apps/relay/dist/repositories.js.map +0 -1
  252. package/apps/relay/dist/retention.js.map +0 -1
  253. package/apps/relay/dist/scope.js.map +0 -1
  254. package/apps/relay/dist/security.js.map +0 -1
  255. package/apps/relay/dist/types.js.map +0 -1
  256. package/apps/relay/dist/websocket.js.map +0 -1
  257. package/apps/relay/package.json +0 -29
  258. package/packages/agent-sdk/dist/index.d.ts.map +0 -1
  259. package/packages/agent-sdk/dist/index.js.map +0 -1
  260. package/packages/agent-sdk/package.json +0 -20
  261. package/packages/client/dist/account.d.ts.map +0 -1
  262. package/packages/client/dist/account.js.map +0 -1
  263. package/packages/client/dist/client.d.ts.map +0 -1
  264. package/packages/client/dist/client.js.map +0 -1
  265. package/packages/client/dist/errors.d.ts.map +0 -1
  266. package/packages/client/dist/errors.js.map +0 -1
  267. package/packages/client/dist/http.d.ts.map +0 -1
  268. package/packages/client/dist/http.js.map +0 -1
  269. package/packages/client/dist/index.d.ts.map +0 -1
  270. package/packages/client/dist/index.js.map +0 -1
  271. package/packages/client/dist/parsers.d.ts.map +0 -1
  272. package/packages/client/dist/parsers.js.map +0 -1
  273. package/packages/client/dist/transport.d.ts.map +0 -1
  274. package/packages/client/dist/transport.js.map +0 -1
  275. package/packages/client/dist/types.d.ts.map +0 -1
  276. package/packages/client/dist/types.js.map +0 -1
  277. package/packages/client/dist/validation.d.ts.map +0 -1
  278. package/packages/client/dist/validation.js.map +0 -1
  279. package/packages/client/package.json +0 -22
  280. package/packages/pie-provider/dist/index.d.ts.map +0 -1
  281. package/packages/pie-provider/dist/index.js.map +0 -1
  282. package/packages/pie-provider/package.json +0 -26
  283. package/packages/runtime/dist/index.d.ts.map +0 -1
  284. package/packages/runtime/dist/index.js.map +0 -1
  285. package/packages/runtime/package.json +0 -19
  286. package/packages/runtime-acpx/dist/index.d.ts.map +0 -1
  287. package/packages/runtime-acpx/dist/index.js.map +0 -1
  288. package/packages/runtime-acpx/package.json +0 -23
  289. package/packages/runtime-cli/dist/async-queue.d.ts.map +0 -1
  290. package/packages/runtime-cli/dist/async-queue.js.map +0 -1
  291. package/packages/runtime-cli/dist/claude-history.d.ts.map +0 -1
  292. package/packages/runtime-cli/dist/claude-history.js.map +0 -1
  293. package/packages/runtime-cli/dist/claude-json.d.ts.map +0 -1
  294. package/packages/runtime-cli/dist/claude-json.js.map +0 -1
  295. package/packages/runtime-cli/dist/claude-rename.d.ts.map +0 -1
  296. package/packages/runtime-cli/dist/claude-rename.js.map +0 -1
  297. package/packages/runtime-cli/dist/claude-session-store.d.ts.map +0 -1
  298. package/packages/runtime-cli/dist/claude-session-store.js.map +0 -1
  299. package/packages/runtime-cli/dist/claude-turn.d.ts.map +0 -1
  300. package/packages/runtime-cli/dist/claude-turn.js.map +0 -1
  301. package/packages/runtime-cli/dist/codex-app-server.d.ts.map +0 -1
  302. package/packages/runtime-cli/dist/codex-app-server.js.map +0 -1
  303. package/packages/runtime-cli/dist/codex-approvals.d.ts.map +0 -1
  304. package/packages/runtime-cli/dist/codex-approvals.js.map +0 -1
  305. package/packages/runtime-cli/dist/codex-history.d.ts.map +0 -1
  306. package/packages/runtime-cli/dist/codex-history.js.map +0 -1
  307. package/packages/runtime-cli/dist/codex-json-rpc.d.ts.map +0 -1
  308. package/packages/runtime-cli/dist/codex-json-rpc.js.map +0 -1
  309. package/packages/runtime-cli/dist/codex-lifecycle.d.ts.map +0 -1
  310. package/packages/runtime-cli/dist/codex-lifecycle.js.map +0 -1
  311. package/packages/runtime-cli/dist/codex-protocol.d.ts.map +0 -1
  312. package/packages/runtime-cli/dist/codex-protocol.js.map +0 -1
  313. package/packages/runtime-cli/dist/command-resolver.d.ts.map +0 -1
  314. package/packages/runtime-cli/dist/command-resolver.js.map +0 -1
  315. package/packages/runtime-cli/dist/history-merge.d.ts.map +0 -1
  316. package/packages/runtime-cli/dist/history-merge.js.map +0 -1
  317. package/packages/runtime-cli/dist/index.d.ts.map +0 -1
  318. package/packages/runtime-cli/dist/index.js.map +0 -1
  319. package/packages/runtime-cli/dist/permissions.d.ts.map +0 -1
  320. package/packages/runtime-cli/dist/permissions.js.map +0 -1
  321. package/packages/runtime-cli/dist/session-store.d.ts.map +0 -1
  322. package/packages/runtime-cli/dist/session-store.js.map +0 -1
  323. package/packages/runtime-cli/package.json +0 -22
  324. package/packages/shared/dist/args.d.ts.map +0 -1
  325. package/packages/shared/dist/args.js.map +0 -1
  326. package/packages/shared/dist/crypto.d.ts.map +0 -1
  327. package/packages/shared/dist/crypto.js.map +0 -1
  328. package/packages/shared/dist/ids.d.ts.map +0 -1
  329. package/packages/shared/dist/ids.js.map +0 -1
  330. package/packages/shared/dist/index.d.ts.map +0 -1
  331. package/packages/shared/dist/index.js.map +0 -1
  332. package/packages/shared/dist/protocol-schemas.d.ts.map +0 -1
  333. package/packages/shared/dist/protocol-schemas.js.map +0 -1
  334. package/packages/shared/dist/protocol-types.d.ts.map +0 -1
  335. package/packages/shared/dist/protocol-types.js.map +0 -1
  336. package/packages/shared/dist/protocol.d.ts.map +0 -1
  337. package/packages/shared/dist/protocol.js.map +0 -1
  338. package/packages/shared/dist/session-name.d.ts.map +0 -1
  339. package/packages/shared/dist/session-name.js.map +0 -1
  340. package/packages/shared/dist/session-state.d.ts.map +0 -1
  341. package/packages/shared/dist/session-state.js.map +0 -1
  342. package/packages/shared/package.json +0 -24
@@ -0,0 +1,143 @@
1
+ import { constants as fsConstants } from "node:fs";
2
+ import fs from "node:fs/promises";
3
+ import { configDir, scheduleStorePath } from "../paths.js";
4
+ function emptyScheduleStore() {
5
+ return { version: 1, schedules: [] };
6
+ }
7
+ export async function readScheduleStore() {
8
+ try {
9
+ const parsed = JSON.parse(await fs.readFile(scheduleStorePath, "utf8"));
10
+ if (parsed.version !== 1 || !Array.isArray(parsed.schedules))
11
+ return emptyScheduleStore();
12
+ return { version: 1, schedules: parsed.schedules.map(normalizeScheduleRecord).filter(Boolean) };
13
+ }
14
+ catch (error) {
15
+ if (error.code === "ENOENT")
16
+ return emptyScheduleStore();
17
+ throw error;
18
+ }
19
+ }
20
+ async function writeScheduleStore(store) {
21
+ await fs.mkdir(configDir, { recursive: true });
22
+ await backupLegacyScheduleStoreOnce();
23
+ const tmpPath = `${scheduleStorePath}.${process.pid}.${Date.now()}.tmp`;
24
+ await fs.writeFile(tmpPath, `${JSON.stringify(store, null, 2)}\n`, { mode: 0o600 });
25
+ await fs.rename(tmpPath, scheduleStorePath);
26
+ await fs.chmod(scheduleStorePath, 0o600);
27
+ }
28
+ async function backupLegacyScheduleStoreOnce() {
29
+ const backupPath = `${scheduleStorePath}.cli-local.bak`;
30
+ try {
31
+ await fs.copyFile(scheduleStorePath, backupPath, fsConstants.COPYFILE_EXCL);
32
+ await fs.chmod(backupPath, 0o600);
33
+ }
34
+ catch (error) {
35
+ const code = error.code;
36
+ if (code === "ENOENT" || code === "EEXIST")
37
+ return;
38
+ throw error;
39
+ }
40
+ }
41
+ export async function updateScheduleStore(update) {
42
+ const run = scheduleStoreUpdateChain.then(async () => {
43
+ const current = await readScheduleStore();
44
+ const next = await update(current);
45
+ await writeScheduleStore(next);
46
+ return next;
47
+ });
48
+ scheduleStoreUpdateChain = run.catch(() => undefined);
49
+ return await run;
50
+ }
51
+ let scheduleStoreUpdateChain = Promise.resolve();
52
+ export function compactSchedules(store) {
53
+ return store.schedules.filter((schedule) => schedule.status !== "deleted");
54
+ }
55
+ export function normalizeScheduleRecord(input) {
56
+ if (!input || typeof input !== "object" || Array.isArray(input))
57
+ return undefined;
58
+ const record = input;
59
+ if (typeof record.id !== "string" || record.id.length === 0)
60
+ return undefined;
61
+ if (typeof record.prompt !== "string")
62
+ return undefined;
63
+ const now = new Date().toISOString();
64
+ const legacySessionId = typeof record.sessionId === "string" && record.sessionId.length > 0 ? record.sessionId : undefined;
65
+ const target = normalizeScheduleTarget(record.target, legacySessionId);
66
+ const schedule = normalizeScheduleSpec(record.schedule, record.dueAt);
67
+ const runs = Array.isArray(record.runs) ? record.runs.filter((run) => Boolean(run && typeof run === "object" && typeof run.occurrenceId === "string")) : [];
68
+ const sourceSessionId = record.sourceSessionId ?? legacySessionId ?? (target?.type === "project" ? target.sourceSessionId : target?.sourceSessionId);
69
+ const sessionId = legacySessionId ?? sourceSessionId;
70
+ return {
71
+ id: record.id,
72
+ ...(typeof record.name === "string" && record.name ? { name: record.name } : {}),
73
+ ...(sessionId ? { sessionId } : {}),
74
+ ...(sourceSessionId ? { sourceSessionId } : {}),
75
+ ...(target ? { target } : {}),
76
+ prompt: record.prompt,
77
+ ...(record.dueAt ? { dueAt: record.dueAt } : {}),
78
+ ...(schedule ? { schedule } : {}),
79
+ execution: record.execution === "isolated" ? "isolated" : "continue",
80
+ memoryMode: normalizeMemoryMode(record.memoryMode),
81
+ stopOn: normalizeStopOn(record.stopOn),
82
+ status: record.status === "paused" || record.status === "completed" || record.status === "deleted" ? record.status : "active",
83
+ ...(record.nextRunAt ? { nextRunAt: record.nextRunAt } : {}),
84
+ ...(record.pendingRunId ? { pendingRunId: record.pendingRunId } : {}),
85
+ runCount: typeof record.runCount === "number" ? record.runCount : countScheduleRuns(runs),
86
+ ...(record.lastRun ? { lastRun: record.lastRun } : runs[0] ? { lastRun: runs[0] } : {}),
87
+ createdAt: record.createdAt ?? now,
88
+ updatedAt: record.updatedAt ?? now,
89
+ runs,
90
+ };
91
+ }
92
+ function countScheduleRuns(runs) {
93
+ return runs.filter((run) => run.status === "admitted" ||
94
+ run.status === "completed" ||
95
+ run.status === "failed" ||
96
+ run.status === "blocked").length;
97
+ }
98
+ function normalizeScheduleSpec(input, legacyDueAt) {
99
+ if (input && typeof input === "object" && !Array.isArray(input)) {
100
+ const spec = input;
101
+ if (spec.type === "manual")
102
+ return { type: "manual" };
103
+ if (spec.type === "oneshot" && typeof spec.runAt === "string" && spec.runAt)
104
+ return { type: "oneshot", runAt: spec.runAt };
105
+ if (spec.type === "interval" && typeof spec.everyMs === "number" && spec.everyMs > 0)
106
+ return { type: "interval", everyMs: spec.everyMs };
107
+ if (spec.type === "cron" && typeof spec.expr === "string" && spec.expr) {
108
+ return { type: "cron", expr: spec.expr, ...(typeof spec.timezone === "string" && spec.timezone ? { timezone: spec.timezone } : {}) };
109
+ }
110
+ }
111
+ if (typeof legacyDueAt === "string" && legacyDueAt)
112
+ return { type: "oneshot", runAt: legacyDueAt };
113
+ return { type: "manual" };
114
+ }
115
+ function normalizeScheduleTarget(input, legacySessionId) {
116
+ if (input && typeof input === "object" && !Array.isArray(input)) {
117
+ const target = input;
118
+ if (target.type === "sourceSession" && typeof target.sourceSessionId === "string" && target.sourceSessionId) {
119
+ return { type: "sourceSession", sourceSessionId: target.sourceSessionId };
120
+ }
121
+ if (target.type === "project" && typeof target.cwd === "string" && target.cwd && typeof target.agent === "string" && target.agent) {
122
+ return {
123
+ type: "project",
124
+ cwd: target.cwd,
125
+ agent: target.agent,
126
+ ...(typeof target.machineId === "string" && target.machineId ? { machineId: target.machineId } : {}),
127
+ ...(typeof target.sourceSessionId === "string" && target.sourceSessionId ? { sourceSessionId: target.sourceSessionId } : {}),
128
+ };
129
+ }
130
+ }
131
+ return legacySessionId ? { type: "sourceSession", sourceSessionId: legacySessionId } : undefined;
132
+ }
133
+ function normalizeMemoryMode(value) {
134
+ return value === "off" || value === "readonly" || value === "readwrite" ? value : "inherit";
135
+ }
136
+ function normalizeStopOn(value) {
137
+ const allowed = new Set(["blocked", "failed", "permission"]);
138
+ if (!Array.isArray(value))
139
+ return ["blocked", "failed", "permission"];
140
+ const filtered = value.filter((item) => allowed.has(item));
141
+ return filtered.length > 0 ? filtered : ["blocked", "failed", "permission"];
142
+ }
143
+ //# sourceMappingURL=store.js.map
@@ -1,4 +1,4 @@
1
- import type { MachineClientMessage, MachineCommand } from "@happy-elves/shared";
1
+ import type { MachineClientMessage, MachineCommand } from "../../../../packages/shared/dist/index.js";
2
2
  type CreateSessionCommand = Extract<MachineCommand, {
3
3
  type: "machine:createSession";
4
4
  }>;
@@ -1,3 +1,3 @@
1
- import type { MachineCommand } from "@happy-elves/shared";
1
+ import type { MachineCommand } from "../../../../packages/shared/dist/index.js";
2
2
  import type { DaemonConfig } from "../types.js";
3
3
  export declare function handleListDirectory(ws: WebSocket, config: DaemonConfig, command: MachineCommand): Promise<void>;
@@ -1,12 +1,15 @@
1
- import { type EncryptedEnvelope, type SessionEventPayload } from "@happy-elves/shared";
2
- import type { RuntimeEvent, RuntimeHistoricalEvent } from "@happy-elves/runtime";
1
+ import { type EncryptedEnvelope, type SessionEventPayload, type SessionHeadAdvanceBasis } from "../../../../packages/shared/dist/index.js";
2
+ import type { RuntimeEvent, RuntimeHistoricalEvent } from "../../../../packages/runtime/dist/index.js";
3
3
  import type { DaemonConfig } from "../types.js";
4
4
  export declare function emitEvent(ws: WebSocket, config: DaemonConfig, sessionId: string, turnId: string, payload: SessionEventPayload): Promise<void>;
5
5
  export declare function emitHistoricalEvents(ws: WebSocket, config: DaemonConfig, sessionId: string, events: RuntimeHistoricalEvent[], startIndex?: number): Promise<void>;
6
6
  export declare function emitRuntimeTailEvents(ws: WebSocket, config: DaemonConfig, sessionId: string, events: RuntimeHistoricalEvent[], startIndex?: number): Promise<void>;
7
+ export declare function emitSessionHeadAdvanced(ws: WebSocket, sessionId: string, head: HistoricalSessionHead, encryptedMetadata?: EncryptedEnvelope, status?: "completed" | "cancelled" | "failed"): Promise<void>;
7
8
  export declare function emitTranscriptReplacement(ws: WebSocket, config: DaemonConfig, sessionId: string, events: RuntimeHistoricalEvent[], input?: {
9
+ requestId?: string;
8
10
  currentHead?: string;
9
11
  lastTurnId?: string;
12
+ replacementKind?: "command" | "sync";
10
13
  status?: "completed" | "cancelled" | "failed";
11
14
  encryptedMetadata?: EncryptedEnvelope;
12
15
  hasMoreBefore?: boolean;
@@ -17,4 +20,14 @@ export declare function emitTranscriptPrepended(ws: WebSocket, config: DaemonCon
17
20
  hasMoreBefore?: boolean;
18
21
  nextBefore?: string;
19
22
  }): Promise<void>;
23
+ export type HistoricalSessionHead = {
24
+ currentHead: string;
25
+ lastTurnId: string;
26
+ basis: SessionHeadAdvanceBasis;
27
+ };
28
+ export declare function latestCompletedHistoricalHead(sessionId: string, events: RuntimeHistoricalEvent[], _input?: {
29
+ preferTailBasisForExistingEvents?: boolean;
30
+ previousTotalEvents?: number;
31
+ tailStartIndex?: number;
32
+ }): HistoricalSessionHead | undefined;
20
33
  export declare function runtimeEventToPayload(event: RuntimeEvent): SessionEventPayload;
@@ -23,7 +23,7 @@ export async function emitHistoricalEvents(ws, config, sessionId, events, startI
23
23
  }
24
24
  }
25
25
  export async function emitRuntimeTailEvents(ws, config, sessionId, events, startIndex = 0) {
26
- const encryptedEvents = await encryptedRuntimeTailEvents(config, sessionId, events, startIndex);
26
+ const encryptedEvents = await encryptedHistoricalEvents(config, sessionId, events, startIndex);
27
27
  for (const event of encryptedEvents) {
28
28
  await sendReliable({
29
29
  type: "machine:event",
@@ -32,12 +32,28 @@ export async function emitRuntimeTailEvents(ws, config, sessionId, events, start
32
32
  }, ws);
33
33
  }
34
34
  }
35
+ export async function emitSessionHeadAdvanced(ws, sessionId, head, encryptedMetadata, status) {
36
+ await sendReliable({
37
+ type: "machine:sessionHeadAdvanced",
38
+ sessionId,
39
+ currentHead: head.currentHead,
40
+ lastTurnId: head.lastTurnId,
41
+ basis: head.basis,
42
+ status,
43
+ encryptedMetadata,
44
+ }, ws);
45
+ }
35
46
  export async function emitTranscriptReplacement(ws, config, sessionId, events, input = {}) {
47
+ const head = latestCompletedHistoricalHead(sessionId, events);
48
+ const fallbackHead = transcriptHead(events);
36
49
  await sendReliable({
37
50
  type: "machine:sessionTranscriptReplaced",
38
51
  sessionId,
39
- currentHead: input.currentHead ?? transcriptHead(events).currentHead,
40
- lastTurnId: input.lastTurnId ?? transcriptHead(events).lastTurnId,
52
+ requestId: input.requestId,
53
+ currentHead: input.currentHead ?? head?.currentHead ?? fallbackHead.currentHead,
54
+ lastTurnId: input.lastTurnId ?? head?.lastTurnId ?? fallbackHead.lastTurnId,
55
+ basis: head?.basis,
56
+ replacementKind: input.replacementKind,
41
57
  status: input.status,
42
58
  hasMoreBefore: input.hasMoreBefore,
43
59
  nextBefore: input.nextBefore,
@@ -70,20 +86,6 @@ async function encryptedHistoricalEvents(config, sessionId, events, startIndex =
70
86
  }
71
87
  return encrypted;
72
88
  }
73
- async function encryptedRuntimeTailEvents(config, sessionId, events, startIndex = 0) {
74
- const encrypted = [];
75
- for (const [index, event] of events.entries()) {
76
- const globalIndex = startIndex + index;
77
- const stableTailSeq = event.seq ?? globalIndex + 1;
78
- encrypted.push({
79
- turnId: event.turnId,
80
- seq: stableTailSeq,
81
- messageId: runtimeTailEventMessageId(sessionId, event, stableTailSeq),
82
- payload: await encryptJson(config.accountSecret, `event:${sessionId}:${event.turnId}:${stableTailSeq}`, event.payload),
83
- });
84
- }
85
- return encrypted;
86
- }
87
89
  function transcriptHead(events) {
88
90
  for (let index = events.length - 1; index >= 0; index -= 1) {
89
91
  const event = events[index];
@@ -98,6 +100,28 @@ function transcriptHead(events) {
98
100
  }
99
101
  return events.at(-1)?.turnId ? { currentHead: events.at(-1)?.turnId, lastTurnId: events.at(-1)?.turnId } : {};
100
102
  }
103
+ export function latestCompletedHistoricalHead(sessionId, events, _input = {}) {
104
+ for (let index = events.length - 1; index >= 0; index -= 1) {
105
+ const event = events[index];
106
+ if (!event || event.payload.type !== "done" || event.payload.status !== "completed")
107
+ continue;
108
+ const seq = event.seq ?? index + 1;
109
+ const eventMessageId = historicalEventMessageId(sessionId, event, seq);
110
+ const currentHead = event.payload.currentHead ?? event.payload.lastTurnId ?? event.turnId;
111
+ const lastTurnId = event.payload.lastTurnId ?? event.payload.currentHead ?? event.turnId;
112
+ return {
113
+ currentHead,
114
+ lastTurnId,
115
+ basis: {
116
+ turnId: event.turnId,
117
+ eventMessageId,
118
+ turnSeq: seq,
119
+ ...(event.occurredAt !== undefined ? { occurredAt: event.occurredAt } : {}),
120
+ },
121
+ };
122
+ }
123
+ return undefined;
124
+ }
101
125
  function historicalEventMessageId(sessionId, event, seq) {
102
126
  const digest = createHash("sha256")
103
127
  .update(JSON.stringify({ occurredAt: event.occurredAt, payload: event.payload, seq }))
@@ -105,13 +129,6 @@ function historicalEventMessageId(sessionId, event, seq) {
105
129
  .slice(0, 18);
106
130
  return `hist_${sessionId}_${event.turnId}_${seq}_${digest}`;
107
131
  }
108
- function runtimeTailEventMessageId(sessionId, event, seq) {
109
- const digest = createHash("sha256")
110
- .update(JSON.stringify({ payload: event.payload, seq }))
111
- .digest("base64url")
112
- .slice(0, 18);
113
- return `tail_${sessionId}_${event.turnId}_${seq}_${digest}`;
114
- }
115
132
  export function runtimeEventToPayload(event) {
116
133
  if (event.type === "text_delta") {
117
134
  return {
@@ -130,9 +147,44 @@ export function runtimeEventToPayload(event) {
130
147
  title: event.title,
131
148
  };
132
149
  }
150
+ if (event.type === "option_request") {
151
+ return {
152
+ type: "option_request",
153
+ optionRequestId: event.optionRequestId,
154
+ ...(event.title ? { title: event.title } : {}),
155
+ message: event.message,
156
+ options: event.options,
157
+ ...(event.allowFreeText ? { allowFreeText: true } : {}),
158
+ };
159
+ }
133
160
  if (event.type === "status") {
161
+ if (typeof event.used === "number" && Number.isFinite(event.used)) {
162
+ return {
163
+ type: "session_usage",
164
+ usage: {
165
+ source: "provider",
166
+ usedTokens: Math.max(0, Math.round(event.used)),
167
+ ...(typeof event.size === "number" && Number.isFinite(event.size) ? { contextWindowTokens: Math.max(0, Math.round(event.size)) } : {}),
168
+ },
169
+ };
170
+ }
134
171
  return { type: "status", text: event.text, tag: event.tag };
135
172
  }
173
+ if (event.type === "session_usage") {
174
+ return {
175
+ type: "session_usage",
176
+ usage: {
177
+ source: event.source,
178
+ usedTokens: Math.max(0, Math.round(event.usedTokens)),
179
+ ...(typeof event.contextWindowTokens === "number" && Number.isFinite(event.contextWindowTokens) ? { contextWindowTokens: Math.max(0, Math.round(event.contextWindowTokens)) } : {}),
180
+ ...(typeof event.inputTokens === "number" && Number.isFinite(event.inputTokens) ? { inputTokens: Math.max(0, Math.round(event.inputTokens)) } : {}),
181
+ ...(typeof event.outputTokens === "number" && Number.isFinite(event.outputTokens) ? { outputTokens: Math.max(0, Math.round(event.outputTokens)) } : {}),
182
+ ...(typeof event.cachedInputTokens === "number" && Number.isFinite(event.cachedInputTokens) ? { cachedInputTokens: Math.max(0, Math.round(event.cachedInputTokens)) } : {}),
183
+ ...(typeof event.reasoningOutputTokens === "number" && Number.isFinite(event.reasoningOutputTokens) ? { reasoningOutputTokens: Math.max(0, Math.round(event.reasoningOutputTokens)) } : {}),
184
+ ...(typeof event.totalTokens === "number" && Number.isFinite(event.totalTokens) ? { totalTokens: Math.max(0, Math.round(event.totalTokens)) } : {}),
185
+ },
186
+ };
187
+ }
136
188
  if (event.type === "error") {
137
189
  return { type: "done", status: "failed", error: event.message };
138
190
  }
@@ -1,4 +1,4 @@
1
- import type { FilePreviewMode, FilePreviewResult, MachineCommand } from "@happy-elves/shared";
1
+ import type { FilePreviewMode, FilePreviewResult, MachineCommand } from "../../../../packages/shared/dist/index.js";
2
2
  import type { DaemonConfig } from "../types.js";
3
3
  export declare function handlePreviewFile(ws: WebSocket, config: DaemonConfig, command: MachineCommand): Promise<void>;
4
4
  export declare function buildFilePreview(config: DaemonConfig, rootPath: string, requestedPath: string, mode?: FilePreviewMode): Promise<FilePreviewResult>;
@@ -1,5 +1,8 @@
1
- import { type MachineCommand } from "@happy-elves/shared";
2
- import type { DaemonConfig, HistoricalBackfillStatus, SessionFallback, SessionState } from "../types.js";
1
+ import { type MachineCommand } from "../../../../packages/shared/dist/index.js";
2
+ import type { DaemonConfig, HistoricalBackfillState, HistoricalBackfillStatus, SessionFallback, SessionState } from "../types.js";
3
+ import { type HistoricalSessionHead } from "./events.js";
4
+ export type HistoricalBackfillDirection = "latest" | "older";
5
+ type HistoricalBackfillMode = HistoricalBackfillDirection | "auto";
3
6
  export type HistoricalBackfillResult = {
4
7
  availableEvents: number;
5
8
  cursor: number;
@@ -10,17 +13,37 @@ export type HistoricalBackfillResult = {
10
13
  tailRepairedEvents: number;
11
14
  totalEvents: number;
12
15
  truncated: boolean;
16
+ head?: HistoricalSessionHead;
13
17
  };
14
18
  export declare function handleCreateSession(ws: WebSocket, config: DaemonConfig, command: MachineCommand): Promise<void>;
15
19
  export declare function handleImportHistoricalSession(ws: WebSocket, config: DaemonConfig, command: MachineCommand): Promise<void>;
16
20
  export declare function handleListHistoricalSessions(ws: WebSocket, config: DaemonConfig, command: MachineCommand): Promise<void>;
17
- export declare function resumeSession(ws: WebSocket, config: DaemonConfig, sessionId: string, requestId: string, fallback?: SessionFallback, announceSuccess?: boolean): Promise<SessionState | null>;
21
+ export declare function resumeSession(ws: WebSocket, config: DaemonConfig, sessionId: string, requestId: string, fallback?: SessionFallback, announceSuccess?: boolean, syncDirection?: HistoricalBackfillMode): Promise<SessionState | null>;
18
22
  export declare function usesAuthoritativeTranscript(session: SessionState): boolean;
19
23
  export declare function replaceAuthoritativeTranscript(ws: WebSocket, config: DaemonConfig, session: SessionState, runtimeSessionId?: string | undefined, input?: {
20
24
  currentHead?: string;
21
25
  lastTurnId?: string;
26
+ replacementKind?: "command" | "sync";
27
+ requestId?: string;
22
28
  status?: "completed" | "cancelled" | "failed";
23
29
  strict?: boolean;
24
30
  }): Promise<HistoricalBackfillResult>;
31
+ export declare function planAppendOnlyHistoricalBackfill<T extends {
32
+ turnId: string;
33
+ }>(historicalEvents: T[], previousBackfill: HistoricalBackfillState | undefined, direction?: HistoricalBackfillMode, maxEvents?: number): {
34
+ cursor: number;
35
+ olderWindow: {
36
+ events: T[];
37
+ nextCursor: number;
38
+ startIndex: number;
39
+ };
40
+ status: HistoricalBackfillStatus;
41
+ tailWindow: {
42
+ events: T[];
43
+ startIndex: number;
44
+ };
45
+ truncated: boolean;
46
+ };
25
47
  export declare function handleResume(ws: WebSocket, config: DaemonConfig, command: MachineCommand): Promise<void>;
26
48
  export declare function handleClose(ws: WebSocket, config: DaemonConfig, command: MachineCommand): Promise<void>;
49
+ export {};