@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
@@ -44,11 +44,67 @@ function compactTurn(turn) {
44
44
  };
45
45
  }
46
46
  async function readTurnSummary(client, sessionId, turnId) {
47
- return summarizeTurns(await client.history(sessionId, 1000)).find((turn) => turn.turnId === turnId);
47
+ rejectEventPrimitiveId(turnId);
48
+ return findTurnSummaryByAnyId(summarizeTurns(await client.history(sessionId, 1000)), turnId);
48
49
  }
49
50
  async function resolveTurnOrCheckpointId(client, sessionId, turnOrCheckpointId) {
51
+ rejectEventPrimitiveId(turnOrCheckpointId);
50
52
  const turn = await readTurnSummary(client, sessionId, turnOrCheckpointId);
51
- return turn?.checkpointId ?? turn?.runtimeTurnId ?? turnOrCheckpointId;
53
+ if (!turn)
54
+ return turnOrCheckpointId;
55
+ if (turn.checkpointId && !turn.checkpointId.startsWith("event:"))
56
+ return turn.checkpointId;
57
+ if (turn.runtimeTurnId && !turn.runtimeTurnId.startsWith("event:"))
58
+ return turn.runtimeTurnId;
59
+ if (!turn.turnId.startsWith("event:"))
60
+ return turn.turnId;
61
+ throw new CliError("No provider-safe checkpoint or turn id is available for this turn.", "CHECKPOINT_UNAVAILABLE");
62
+ }
63
+ function rejectEventPrimitiveId(value) {
64
+ if (value.startsWith("event:")) {
65
+ throw new CliError("event:* ids are transcript implementation details, not turn/checkpoint/provider ids.", "INVALID_TURN_ID");
66
+ }
67
+ }
68
+ function findTurnSummaryByAnyId(turns, id) {
69
+ return turns.find((turn) => turn.turnId === id ||
70
+ turn.runtimeTurnId === id ||
71
+ turn.checkpointId === id);
72
+ }
73
+ function recoveryPromptWithContext(turns, inputTurnId, continuation) {
74
+ const chronological = [...turns].reverse();
75
+ const selected = [];
76
+ for (const turn of chronological) {
77
+ if (inputTurnId && (turn.turnId === inputTurnId || turn.runtimeTurnId === inputTurnId || turn.checkpointId === inputTurnId))
78
+ break;
79
+ if (turn.status === "running")
80
+ break;
81
+ selected.push(turn);
82
+ }
83
+ const blocks = selected.map((turn) => {
84
+ const lines = [`Turn ${turn.turnId} (${turn.status})`];
85
+ if (turn.prompt.trim())
86
+ lines.push(`User:\n${turn.prompt.trim()}`);
87
+ const output = (turn.output || turn.terminalText).trim();
88
+ if (output)
89
+ lines.push(`Assistant:\n${output}`);
90
+ return lines.join("\n");
91
+ });
92
+ const context = clampEnd(blocks.join("\n\n---\n\n"), 32 * 1024);
93
+ if (!context.trim())
94
+ return continuation;
95
+ return [
96
+ "Recovered context from the original Happy Elves session. The previous turn could not be confirmed, so do not assume it completed and do not replay its original prompt.",
97
+ "",
98
+ context,
99
+ "",
100
+ "User continuation:",
101
+ continuation,
102
+ ].join("\n");
103
+ }
104
+ function clampEnd(value, maxChars) {
105
+ if (value.length <= maxChars)
106
+ return value;
107
+ return value.slice(value.length - maxChars);
52
108
  }
53
109
  async function waitForTurn(client, sessionId, turnId, timeoutMs) {
54
110
  const startedAt = Date.now();
@@ -104,7 +160,125 @@ export async function handleTurn({ domain, action, positional, flags }) {
104
160
  const turn = await readTurnSummary(client, sessionId, turnId);
105
161
  if (!turn)
106
162
  throw new CliError(`Turn not found: ${turnId}`, "TURN_NOT_FOUND");
107
- ok("turn.status", wantsVerbose(flags) ? { sessionId, turn } : { sessionId, ...compactTurn(turn) }, { sessionId, turnId });
163
+ const compact = compactTurn(turn);
164
+ const structured = structuredOutputForTurn(sessionId, turn);
165
+ ok("turn.status", wantsVerbose(flags)
166
+ ? { ...structured, inputTurnId: turnId, ...compact, turn }
167
+ : { ...structured, inputTurnId: turnId, ...compact }, { sessionId, turnId: turn.turnId });
168
+ return true;
169
+ }
170
+ if (action === "reconcile") {
171
+ const sessionId = requirePositional(positional[0], "sessionId");
172
+ const turnId = positional[1] ?? (typeof flags.turn === "string" ? flags.turn : undefined);
173
+ if (turnId)
174
+ rejectEventPrimitiveId(turnId);
175
+ const result = await client.reconcileTurn(sessionId, turnId);
176
+ if (wantsJson(flags)) {
177
+ ok("turn.reconcile", result, { requestId: result.requestId, sessionId, turnId: result.turnId ?? turnId });
178
+ }
179
+ else {
180
+ console.log(`Reconcile: ${result.status}${result.terminalStatus ? ` (${result.terminalStatus})` : ""}`);
181
+ if (result.turnId)
182
+ console.log(`Turn: ${result.turnId}`);
183
+ if (result.providerTurnId)
184
+ console.log(`Provider turn: ${result.providerTurnId}`);
185
+ if (result.reason)
186
+ console.log(`Reason: ${result.reason}`);
187
+ if (result.status !== "terminal" && result.status !== "active") {
188
+ console.log("Unable to confirm whether the previous execution finished. Use turn recover with --confirm-risk before sending a continuation.");
189
+ }
190
+ }
191
+ return true;
192
+ }
193
+ if (action === "recover") {
194
+ const sessionId = requirePositional(positional[0], "sessionId");
195
+ const inputTurnId = positional[1] ?? (typeof flags.turn === "string" ? flags.turn : undefined);
196
+ if (inputTurnId)
197
+ rejectEventPrimitiveId(inputTurnId);
198
+ if (flags["confirm-risk"] !== true) {
199
+ throw new CliError("Recovery can duplicate external side effects if the original turn later completes. Re-run with --confirm-risk to create a Recovery Session.", "RECOVERY_CONFIRMATION_REQUIRED");
200
+ }
201
+ const continuation = typeof flags.text === "string"
202
+ ? flags.text
203
+ : typeof flags["text-file"] === "string"
204
+ ? await readPromptTextFile(flags["text-file"])
205
+ : "";
206
+ if (!continuation.trim())
207
+ throw new CliError("Missing --text or --text-file", "MISSING_ARGUMENT");
208
+ const permissionMode = parsePermissionMode(flags["permission-mode"] ?? flags.permission);
209
+ const model = typeof flags.model === "string" && flags.model.trim() ? flags.model.trim() : undefined;
210
+ const sourceSession = await requireProjectedSession(client, sessionId, "turn.recover");
211
+ const sourceMetadata = await client.decodeSessionMetadata(sourceSession);
212
+ const sourceName = sourceMetadata.name ?? sourceSession.name;
213
+ const recoveryName = `${sourceName} Recovery`;
214
+ const turns = summarizeTurns(await client.history(sessionId, 1000));
215
+ const targetTurn = inputTurnId ? findTurnSummaryByAnyId(turns, inputTurnId) : turns[0];
216
+ let recoverySessionId;
217
+ let recoveryMode = "new-session-context";
218
+ let forkError;
219
+ const checkpoint = targetTurn?.checkpointId && !targetTurn.checkpointId.startsWith("event:") ? targetTurn.checkpointId : undefined;
220
+ if (checkpoint) {
221
+ try {
222
+ const fork = await client.fork(sessionId, { from: checkpoint, name: recoveryName });
223
+ recoverySessionId = fork.sessionId;
224
+ recoveryMode = "checkpoint-fork";
225
+ }
226
+ catch (error) {
227
+ forkError = error instanceof Error ? error.message : String(error);
228
+ }
229
+ }
230
+ let promptText = continuation;
231
+ if (!recoverySessionId) {
232
+ const created = await client.createSession({
233
+ machineId: sourceSession.machineId,
234
+ agent: sourceMetadata.agent ?? sourceSession.agent,
235
+ cwd: sourceMetadata.cwd ?? sourceSession.cwd,
236
+ name: recoveryName,
237
+ createdFrom: "turn.recover",
238
+ permissionMode,
239
+ model,
240
+ });
241
+ if (!created.sessionId)
242
+ throw new CliError("Recovery session create was acknowledged without sessionId", "RELAY_RESPONSE_INVALID");
243
+ recoverySessionId = created.sessionId;
244
+ promptText = recoveryPromptWithContext(turns, inputTurnId, continuation);
245
+ }
246
+ await client.wait(recoverySessionId, { timeoutMs: 120_000 });
247
+ const wait = flags.detach !== true && flags["no-wait"] !== true;
248
+ const memoryMode = parseMemoryModeFlag(flags["memory-mode"] ?? flags.memory) ?? "readonly";
249
+ const recoverySession = await client.getSession(recoverySessionId);
250
+ const memoryProject = typeof flags["memory-project"] === "string"
251
+ ? flags["memory-project"]
252
+ : recoverySession
253
+ ? `${recoverySession.machineId}:${recoverySession.cwd}`
254
+ : undefined;
255
+ const result = await client.run(recoverySessionId, promptText, {
256
+ wait,
257
+ permissionMode,
258
+ memoryMode,
259
+ model,
260
+ ...(memoryProject ? { memoryProjectKey: memoryProject } : {}),
261
+ memoryTopN: 3,
262
+ waitTimeoutMs: parseDurationMs(flags.timeout, DEFAULT_COMMAND_TIMEOUT_MS),
263
+ ackTimeoutMs: 15_000,
264
+ });
265
+ if (wantsJson(flags)) {
266
+ ok("turn.recover", {
267
+ sourceSessionId: sessionId,
268
+ sourceTurnId: targetTurn?.turnId ?? inputTurnId,
269
+ recoverySessionId,
270
+ recoveryTurnId: result.turnId,
271
+ recoveryMode,
272
+ ...(forkError ? { forkError } : {}),
273
+ }, { requestId: result.requestId, sessionId: recoverySessionId, turnId: result.turnId });
274
+ }
275
+ else {
276
+ console.log(`Recovery session: ${recoverySessionId}`);
277
+ console.log(`Recovery mode: ${recoveryMode}`);
278
+ if (forkError)
279
+ console.log(`Checkpoint fork fallback: ${forkError}`);
280
+ console.log(`Turn: ${result.turnId}`);
281
+ }
108
282
  return true;
109
283
  }
110
284
  if (action === "run") {
@@ -120,8 +294,29 @@ export async function handleTurn({ domain, action, positional, flags }) {
120
294
  const wait = flags.detach !== true && flags["no-wait"] !== true;
121
295
  const watchTimeoutMs = parseDurationMs(flags.timeout, DEFAULT_COMMAND_TIMEOUT_MS);
122
296
  const ackTimeoutMs = 15_000;
123
- const runtimeTimeoutMs = parseDurationMs(flags["runtime-timeout"], DEFAULT_COMMAND_TIMEOUT_MS);
124
- const result = await client.run(sessionId, text, { wait, permissionMode, waitTimeoutMs: watchTimeoutMs, ackTimeoutMs, runtimeTimeoutMs });
297
+ const inactivityTimeoutMs = parseDurationMs(flags["inactivity-timeout"] ?? flags["runtime-timeout"], DEFAULT_COMMAND_TIMEOUT_MS);
298
+ const memoryMode = parseMemoryModeFlag(flags["memory-mode"] ?? flags.memory) ?? "readonly";
299
+ const model = typeof flags.model === "string" && flags.model.trim() ? flags.model.trim() : undefined;
300
+ const session = await client.getSession(sessionId);
301
+ const memoryProject = typeof flags["memory-project"] === "string"
302
+ ? flags["memory-project"]
303
+ : session
304
+ ? `${session.machineId}:${session.cwd}`
305
+ : undefined;
306
+ const memoryTopN = typeof flags["memory-top-n"] === "string" ? Number(flags["memory-top-n"]) : 3;
307
+ if (!Number.isInteger(memoryTopN) || memoryTopN <= 0)
308
+ throw new CliError("Invalid --memory-top-n", "INVALID_ARGUMENT");
309
+ const result = await client.run(sessionId, text, {
310
+ wait,
311
+ permissionMode,
312
+ memoryMode,
313
+ model,
314
+ ...(memoryProject ? { memoryProjectKey: memoryProject } : {}),
315
+ memoryTopN,
316
+ waitTimeoutMs: watchTimeoutMs,
317
+ ackTimeoutMs,
318
+ inactivityTimeoutMs,
319
+ });
125
320
  const events = await client.decodeEvents(result.events);
126
321
  const output = wait && result.turnId ? await writeTurnOutput(sessionId, result.turnId, events) : undefined;
127
322
  if (wantsJson(flags)) {
@@ -132,10 +327,14 @@ export async function handleTurn({ domain, action, positional, flags }) {
132
327
  : { state: "accepted", sessionId };
133
328
  ok("turn.run", {
134
329
  ...structured,
330
+ memoryMode,
331
+ ...(memoryProject ? { memoryProjectKey: memoryProject } : {}),
135
332
  ...(wantsVerbose(flags) ? { events, output } : {}),
136
333
  }, { requestId: result.requestId, sessionId, turnId: result.turnId });
137
334
  }
138
335
  else if (wait) {
336
+ if (memoryMode !== "off")
337
+ console.log(`Memory mode: ${memoryMode}${memoryProject ? ` (${memoryProject})` : ""}`);
139
338
  printConciseEvents(events);
140
339
  if (output) {
141
340
  const label = output.status === "completed" ? "Completed" : output.status[0]?.toUpperCase() + output.status.slice(1);
@@ -145,6 +344,8 @@ export async function handleTurn({ domain, action, positional, flags }) {
145
344
  }
146
345
  }
147
346
  else {
347
+ if (memoryMode !== "off")
348
+ console.log(`Memory mode: ${memoryMode}${memoryProject ? ` (${memoryProject})` : ""}`);
148
349
  console.log(`Turn started: ${result.turnId}`);
149
350
  }
150
351
  return true;
@@ -158,7 +359,7 @@ export async function handleTurn({ domain, action, positional, flags }) {
158
359
  ...structuredOutputForTurn(sessionId, turn),
159
360
  until: "turn",
160
361
  ...(wantsVerbose(flags) ? { turn } : {}),
161
- }, { sessionId, turnId });
362
+ }, { sessionId, turnId: turn.turnId });
162
363
  }
163
364
  else {
164
365
  console.log(`Turn ${turn.turnId} ${turn.status}`);
@@ -167,8 +368,11 @@ export async function handleTurn({ domain, action, positional, flags }) {
167
368
  }
168
369
  if (action === "result") {
169
370
  const sessionId = requirePositional(positional[0], "sessionId");
170
- const turnId = positional[1] ?? (typeof flags.turn === "string" ? flags.turn : undefined);
171
- const result = await rebuildTurnOutput(client, sessionId, turnId);
371
+ const inputTurnId = positional[1] ?? (typeof flags.turn === "string" ? flags.turn : undefined);
372
+ const turn = inputTurnId ? await readTurnSummary(client, sessionId, inputTurnId) : undefined;
373
+ if (inputTurnId && !turn)
374
+ throw new CliError(`Turn not found: ${inputTurnId}`, "TURN_NOT_FOUND");
375
+ const result = await rebuildTurnOutput(client, sessionId, turn?.turnId);
172
376
  if (wantsJson(flags)) {
173
377
  ok("turn.result", {
174
378
  ...structuredOutputForStoredTurn(result),
@@ -225,7 +429,10 @@ export async function handleTurn({ domain, action, positional, flags }) {
225
429
  const inputTarget = requirePositional(positional[1], "turnOrCheckpointId");
226
430
  const from = await resolveTurnOrCheckpointId(client, sessionId, inputTarget);
227
431
  const name = requireString(flags, "name");
228
- const result = await client.fork(sessionId, { from, name });
432
+ const sourceTags = flags["copy-tags"] === true
433
+ ? (await client.decodeSessionMetadata(await requireProjectedSession(client, sessionId, "turn.fork"))).tags
434
+ : undefined;
435
+ const result = await client.fork(sessionId, { from, name, tags: sourceTags });
229
436
  if (!result.sessionId) {
230
437
  throw new CliError("turn.fork was acknowledged without a target session id", "RELAY_RESPONSE_INVALID");
231
438
  }
@@ -239,9 +446,18 @@ export async function handleTurn({ domain, action, positional, flags }) {
239
446
  currentHead: forkedSession?.currentHead,
240
447
  sourceCheckpointId: forkedSession?.sourceCheckpointId,
241
448
  name: forkedMetadata.name ?? forkedSession?.name,
449
+ ...(sourceTags && sourceTags.length > 0 ? { copiedTags: sourceTags } : {}),
242
450
  }, { requestId: result.requestId, sessionId: result.sessionId });
243
451
  return true;
244
452
  }
245
453
  return false;
246
454
  }
455
+ function parseMemoryModeFlag(value) {
456
+ if (typeof value !== "string" || !value.trim())
457
+ return undefined;
458
+ const normalized = value.trim().toLowerCase().replace(/-/g, "");
459
+ if (normalized === "off" || normalized === "readonly" || normalized === "readwrite")
460
+ return normalized;
461
+ throw new CliError("Invalid --memory-mode; expected off|readonly|readwrite|read-only|read-write", "INVALID_ARGUMENT");
462
+ }
247
463
  //# sourceMappingURL=turn.js.map
@@ -0,0 +1,2 @@
1
+ import type { CommandInput } from "./command.js";
2
+ export declare function handleWorkspace({ domain, action, positional, flags }: CommandInput): Promise<boolean>;
@@ -0,0 +1,68 @@
1
+ import { CliError, ControllerClient, ok, readConfig, requirePositional, requireString, wantsJson } from "./lib/index.js";
2
+ export async function handleWorkspace({ domain, action, positional, flags }) {
3
+ if (domain !== "workspace")
4
+ return false;
5
+ const config = await readConfig(flags);
6
+ const client = new ControllerClient(config);
7
+ if (action === "state") {
8
+ const state = await client.workspaceSync();
9
+ if (!wantsJson(flags)) {
10
+ console.log(`Stars: ${state.stars.length}`);
11
+ console.log(`Recent sessions: ${state.recentSessions.length}`);
12
+ console.log(`Pinned workspaces: ${state.cwdPins.length}`);
13
+ console.log(`Project preferences: ${state.projectPreferences.length}`);
14
+ return true;
15
+ }
16
+ ok("workspace.state", state);
17
+ return true;
18
+ }
19
+ if (action === "star") {
20
+ const sessionId = requirePositional(positional[0], "sessionId");
21
+ ok("workspace.star", await client.starSession(sessionId));
22
+ return true;
23
+ }
24
+ if (action === "unstar") {
25
+ const sessionId = requirePositional(positional[0], "sessionId");
26
+ ok("workspace.unstar", await client.unstarSession(sessionId));
27
+ return true;
28
+ }
29
+ if (action === "recent") {
30
+ const sessionId = requirePositional(positional[0], "sessionId");
31
+ ok("workspace.recent", await client.markSessionRecent(sessionId));
32
+ return true;
33
+ }
34
+ if (action === "pin-cwd") {
35
+ const machineId = requireString(flags, "machine");
36
+ const cwd = requireString(flags, "cwd");
37
+ const label = typeof flags.label === "string" ? flags.label : undefined;
38
+ ok("workspace.pin-cwd", await client.pinWorkspaceCwd({ machineId, cwd, label }));
39
+ return true;
40
+ }
41
+ if (action === "unpin-cwd") {
42
+ const machineId = requireString(flags, "machine");
43
+ const cwd = requireString(flags, "cwd");
44
+ ok("workspace.unpin-cwd", await client.unpinWorkspaceCwd({ machineId, cwd }));
45
+ return true;
46
+ }
47
+ if (action === "prefer") {
48
+ const projectKey = requireString(flags, "project");
49
+ const machineId = typeof flags.machine === "string" ? flags.machine : undefined;
50
+ const cwd = typeof flags.cwd === "string" ? flags.cwd : undefined;
51
+ const agent = typeof flags.agent === "string" ? flags.agent : undefined;
52
+ const memoryMode = parseMemoryMode(flags["memory-mode"] ?? flags.memory);
53
+ ok("workspace.prefer", await client.setWorkspaceProjectPreference({ projectKey, machineId, cwd, agent, ...(memoryMode ? { memoryMode } : {}) }));
54
+ return true;
55
+ }
56
+ return false;
57
+ }
58
+ function parseMemoryMode(value) {
59
+ if (value === undefined || value === false)
60
+ return undefined;
61
+ if (typeof value !== "string" || !value.trim())
62
+ return undefined;
63
+ const normalized = value.trim().toLowerCase().replace(/-/g, "");
64
+ if (normalized === "off" || normalized === "readonly" || normalized === "readwrite")
65
+ return normalized;
66
+ throw new CliError("Invalid --memory-mode; expected off|readonly|readwrite|read-only|read-write", "INVALID_ARGUMENT");
67
+ }
68
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "@cydm/happy-elves-cli",
3
+ "version": "0.1.0-beta.310",
4
+ "private": true,
5
+ "type": "module"
6
+ }
@@ -0,0 +1,38 @@
1
+ import type { GatewayDestination, GatewayEventPayload } from "../../../../packages/shared/dist/index.js";
2
+ import type { DaemonConfig } from "../types.js";
3
+ import type { GatewayChannelConfig } from "./store.js";
4
+ export type GatewayDeliveryInput = {
5
+ deliveryId: string;
6
+ destination: GatewayDestination;
7
+ payload: GatewayEventPayload;
8
+ };
9
+ export type GatewayDeliveryResult = {
10
+ platformMessageId?: string;
11
+ };
12
+ export type GatewayInboundResult = {
13
+ accepted: boolean;
14
+ duplicate?: boolean;
15
+ queued?: boolean;
16
+ };
17
+ type GatewayInboundSender = (input: {
18
+ gatewayId: string;
19
+ platform: "feishu" | "fake";
20
+ platformEventId: string;
21
+ platformMessageId: string;
22
+ senderPlatformUserId: string;
23
+ senderDisplayName?: string;
24
+ destination: GatewayDestination;
25
+ text: string;
26
+ }) => Promise<GatewayInboundResult>;
27
+ export type GatewayAdapter = {
28
+ start(): Promise<void>;
29
+ stop(): Promise<void>;
30
+ send(input: GatewayDeliveryInput): Promise<GatewayDeliveryResult>;
31
+ };
32
+ export type GatewayAdapterContext = {
33
+ config: DaemonConfig;
34
+ channel: GatewayChannelConfig;
35
+ readChannel: () => Promise<GatewayChannelConfig | undefined>;
36
+ sendInbound: GatewayInboundSender;
37
+ };
38
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1,65 @@
1
+ import type { GatewayDestination } from "../../../../packages/shared/dist/index.js";
2
+ import type { GatewayAdapter, GatewayAdapterContext, GatewayInboundResult } from "./adapters.js";
3
+ type LarkClient = {
4
+ request?: (input: unknown) => Promise<unknown>;
5
+ im?: {
6
+ v1?: {
7
+ message?: {
8
+ create?: (input: unknown) => Promise<unknown>;
9
+ reply?: (input: unknown) => Promise<unknown>;
10
+ };
11
+ messageReaction?: {
12
+ create?: (input: unknown) => Promise<unknown>;
13
+ delete?: (input: unknown) => Promise<unknown>;
14
+ };
15
+ message_reaction?: {
16
+ create?: (input: unknown) => Promise<unknown>;
17
+ delete?: (input: unknown) => Promise<unknown>;
18
+ };
19
+ };
20
+ message?: {
21
+ create?: (input: unknown) => Promise<unknown>;
22
+ reply?: (input: unknown) => Promise<unknown>;
23
+ };
24
+ };
25
+ };
26
+ type FeishuMention = {
27
+ key?: string;
28
+ openId?: string;
29
+ userId?: string;
30
+ unionId?: string;
31
+ appId?: string;
32
+ name?: string;
33
+ isBot?: boolean;
34
+ };
35
+ type FeishuBotIdentity = {
36
+ openId?: string;
37
+ userId?: string;
38
+ unionId?: string;
39
+ appId?: string;
40
+ };
41
+ type NormalizedFeishuInbound = Omit<Parameters<GatewayAdapterContext["sendInbound"]>[0], "gatewayId" | "platform"> & {
42
+ chatType?: string;
43
+ mentions: FeishuMention[];
44
+ };
45
+ export declare function createFeishuGatewayAdapter(context: GatewayAdapterContext): Promise<GatewayAdapter>;
46
+ export declare function shouldCompleteProcessingReaction(result: GatewayInboundResult, input?: {
47
+ startedReaction?: boolean;
48
+ }): boolean;
49
+ export declare function createFeishuProcessingReactionTracker(client: LarkClient, input?: {
50
+ emojiType?: string;
51
+ maxTracked?: number;
52
+ now?: () => number;
53
+ }): {
54
+ start(messageId: string): Promise<boolean>;
55
+ complete(messageId: string): Promise<void>;
56
+ clear(): Promise<void>;
57
+ pendingCount(): number;
58
+ };
59
+ export declare function normalizeFeishuMessage(data: unknown): NormalizedFeishuInbound | undefined;
60
+ export declare function shouldHandleFeishuInbound(profile: {
61
+ inboundMode: "mention" | "all";
62
+ }, inbound: Pick<NormalizedFeishuInbound, "chatType" | "mentions">, botIdentity: string | FeishuBotIdentity | undefined): boolean;
63
+ export declare function sendFeishuText(client: LarkClient, destination: GatewayDestination, text: string, deliveryId?: string): Promise<unknown>;
64
+ export declare function stripFeishuBotMention(text: string, mentions: FeishuMention[], botIdentity: string | FeishuBotIdentity | undefined): string;
65
+ export {};