@swirls/looms 0.0.2 → 0.2.0

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 (375) hide show
  1. package/CHANGELOG.md +24 -2
  2. package/dist/actor/cell.d.ts +9 -4
  3. package/dist/actor/cell.js +7 -11
  4. package/dist/actor/host.d.ts +7 -3
  5. package/dist/actor/host.js +57 -33
  6. package/dist/actor/index.d.ts +1 -1
  7. package/dist/actor/index.js +1 -1
  8. package/dist/actor/routing.d.ts +12 -1
  9. package/dist/actor/routing.js +57 -51
  10. package/dist/agent/agent-session.d.ts +5 -0
  11. package/dist/agent/agent-session.js +270 -0
  12. package/dist/agent/debugger/agent-chat.d.ts +2 -0
  13. package/dist/agent/debugger/agent-chat.js +176 -0
  14. package/dist/agent/debugger/index.d.ts +5 -0
  15. package/dist/agent/debugger/index.js +19 -0
  16. package/dist/agent/debugger/summarize.d.ts +2 -0
  17. package/dist/agent/debugger/summarize.js +51 -0
  18. package/dist/agent/debugger/token-usage.d.ts +3 -0
  19. package/dist/agent/debugger/token-usage.js +11 -0
  20. package/dist/agent/definitions-store.d.ts +2 -3
  21. package/dist/agent/definitions-store.js +2 -4
  22. package/dist/agent/definitions.d.ts +47 -29
  23. package/dist/agent/definitions.js +39 -12
  24. package/dist/agent/effects.d.ts +359 -2
  25. package/dist/agent/effects.js +60 -34
  26. package/dist/agent/events.d.ts +175 -19
  27. package/dist/agent/events.js +45 -10
  28. package/dist/agent/index.d.ts +1 -0
  29. package/dist/agent/index.js +1 -0
  30. package/dist/agent/llm.d.ts +11 -2
  31. package/dist/agent/llm.js +13 -3
  32. package/dist/agent/module.d.ts +812 -78
  33. package/dist/agent/module.js +16 -4
  34. package/dist/agent/scope.d.ts +174 -18
  35. package/dist/agent/signals.d.ts +26 -1
  36. package/dist/agent/signals.js +79 -0
  37. package/dist/agent/threads.d.ts +3 -33
  38. package/dist/agent/threads.js +20 -25
  39. package/dist/agent/tool-schema.d.ts +1 -17
  40. package/dist/agent/tool-schema.js +3 -43
  41. package/dist/agent/types.d.ts +49 -4
  42. package/dist/agent/types.js +5 -5
  43. package/dist/ai-vercel/index.d.ts +1 -0
  44. package/dist/ai-vercel/index.js +1 -0
  45. package/dist/ai-vercel/messages.js +22 -7
  46. package/dist/ai-vercel/vercel-evaluator.d.ts +36 -0
  47. package/dist/ai-vercel/vercel-evaluator.js +73 -0
  48. package/dist/ai-vercel/vercel-llm.js +64 -44
  49. package/dist/approval/debugger/approvals-view.d.ts +3 -0
  50. package/dist/approval/debugger/approvals-view.js +16 -0
  51. package/dist/approval/debugger/index.d.ts +4 -0
  52. package/dist/approval/debugger/index.js +11 -0
  53. package/dist/approval/debugger/summarize.d.ts +2 -0
  54. package/dist/approval/debugger/summarize.js +17 -0
  55. package/dist/approval/effects.d.ts +89 -0
  56. package/dist/approval/module.d.ts +179 -29
  57. package/dist/approval/projections.d.ts +0 -14
  58. package/dist/approval/projections.js +20 -3
  59. package/dist/approval/signals.d.ts +2 -0
  60. package/dist/approval/signals.js +18 -2
  61. package/dist/cli/cli.js +2 -0
  62. package/dist/cli/commands.js +12 -16
  63. package/dist/client/client.d.ts +1213 -18
  64. package/dist/client/client.js +120 -120
  65. package/dist/client/index.d.ts +1 -1
  66. package/dist/client/index.js +1 -1
  67. package/dist/client/sse.d.ts +13 -0
  68. package/dist/client/sse.js +38 -44
  69. package/dist/cloudflare/alarm-scheduler.d.ts +12 -2
  70. package/dist/cloudflare/alarm-scheduler.js +34 -7
  71. package/dist/cloudflare/durable-object.d.ts +10 -2
  72. package/dist/cloudflare/durable-object.js +59 -28
  73. package/dist/cloudflare/event-store.d.ts +7 -2
  74. package/dist/cloudflare/event-store.js +8 -7
  75. package/dist/cloudflare/index.d.ts +2 -2
  76. package/dist/cloudflare/index.js +2 -2
  77. package/dist/cloudflare/router.d.ts +1 -1
  78. package/dist/cloudflare/router.js +15 -16
  79. package/dist/core/catalog.d.ts +3 -3
  80. package/dist/core/catalog.js +2 -5
  81. package/dist/core/coalesce.js +5 -3
  82. package/dist/core/compose.d.ts +2 -1
  83. package/dist/core/compose.js +19 -2
  84. package/dist/core/debugger-host.d.ts +16 -0
  85. package/dist/core/debugger-host.js +1 -0
  86. package/dist/core/definition-store.d.ts +11 -0
  87. package/dist/core/definition-store.js +6 -0
  88. package/dist/core/effects.d.ts +127 -15
  89. package/dist/core/effects.js +89 -17
  90. package/dist/core/envelope.d.ts +27 -7
  91. package/dist/core/envelope.js +20 -6
  92. package/dist/core/event-codec.d.ts +4 -2
  93. package/dist/core/event-codec.js +10 -5
  94. package/dist/core/event-index.js +1 -3
  95. package/dist/core/fold.d.ts +3 -0
  96. package/dist/core/fold.js +171 -24
  97. package/dist/core/ids.d.ts +5 -0
  98. package/dist/core/ids.js +35 -2
  99. package/dist/core/index.d.ts +7 -1
  100. package/dist/core/index.js +6 -1
  101. package/dist/core/kind.d.ts +22 -0
  102. package/dist/core/kind.js +17 -0
  103. package/dist/core/limits.d.ts +34 -0
  104. package/dist/core/limits.js +46 -0
  105. package/dist/core/match.d.ts +1 -0
  106. package/dist/core/match.js +10 -1
  107. package/dist/core/module-scope.d.ts +22 -20
  108. package/dist/core/module-scope.js +38 -28
  109. package/dist/core/module.d.ts +18 -5
  110. package/dist/core/module.js +4 -0
  111. package/dist/core/projection.d.ts +13 -13
  112. package/dist/core/projection.js +9 -5
  113. package/dist/core/protocol.d.ts +68 -11
  114. package/dist/core/protocol.js +82 -11
  115. package/dist/core/published.d.ts +43 -0
  116. package/dist/core/published.js +44 -0
  117. package/dist/core/replay.d.ts +312 -3
  118. package/dist/core/replay.js +11 -1
  119. package/dist/core/schema.d.ts +11 -20
  120. package/dist/core/schema.js +63 -80
  121. package/dist/core/serialize.js +2 -4
  122. package/dist/core/snapshot-store.d.ts +6 -1
  123. package/dist/core/snapshot-store.js +15 -2
  124. package/dist/core/snapshots.d.ts +5 -1
  125. package/dist/core/snapshots.js +10 -15
  126. package/dist/core/sqlite-store.js +95 -11
  127. package/dist/core/state.d.ts +142 -4
  128. package/dist/core/state.js +78 -0
  129. package/dist/core/store.d.ts +38 -3
  130. package/dist/core/store.js +77 -22
  131. package/dist/core/thread.d.ts +10 -9
  132. package/dist/core/types.d.ts +5 -8
  133. package/dist/core/types.js +28 -24
  134. package/dist/core/validate-event.js +14 -4
  135. package/dist/core/worker-callback.d.ts +17 -0
  136. package/dist/core/worker-callback.js +1 -0
  137. package/dist/debugger/app/assets/index-B3Ah8WAE.css +2 -0
  138. package/dist/debugger/app/assets/index-Qb371t_O.js +22 -0
  139. package/dist/debugger/app/assets/rolldown-runtime-CbXtAM7H.js +1 -0
  140. package/dist/debugger/app/assets/routes-CjtEHgPQ.js +47 -0
  141. package/dist/debugger/app/index.html +14 -0
  142. package/dist/debugger/components/composer.d.ts +17 -0
  143. package/dist/debugger/components/composer.js +25 -0
  144. package/dist/debugger/components/debugger-split.d.ts +2 -1
  145. package/dist/debugger/components/debugger-split.js +2 -2
  146. package/dist/debugger/components/event-inspector.d.ts +2 -1
  147. package/dist/debugger/components/event-inspector.js +25 -16
  148. package/dist/debugger/components/event-stream.d.ts +2 -1
  149. package/dist/debugger/components/event-stream.js +14 -74
  150. package/dist/debugger/components/follow-list.d.ts +19 -0
  151. package/dist/debugger/components/follow-list.js +96 -0
  152. package/dist/debugger/components/json-tree.d.ts +11 -0
  153. package/dist/debugger/components/json-tree.js +120 -0
  154. package/dist/debugger/components/json-view.js +2 -2
  155. package/dist/debugger/components/run-tree.js +53 -20
  156. package/dist/debugger/components/status-dot.d.ts +4 -0
  157. package/dist/debugger/components/status-dot.js +6 -2
  158. package/dist/debugger/context.d.ts +14 -0
  159. package/dist/debugger/context.js +17 -0
  160. package/dist/debugger/contracts.d.ts +7 -4
  161. package/dist/debugger/events/builtin-families.d.ts +3 -0
  162. package/dist/debugger/events/builtin-families.js +9 -0
  163. package/dist/debugger/events/catalog.d.ts +3 -4
  164. package/dist/debugger/events/catalog.js +27 -17
  165. package/dist/debugger/events/protocol-summarize.d.ts +1 -2
  166. package/dist/debugger/events/protocol-summarize.js +42 -24
  167. package/dist/debugger/index.d.ts +20 -6
  168. package/dist/debugger/index.js +19 -5
  169. package/dist/debugger/lib/cn.d.ts +1 -0
  170. package/dist/debugger/lib/cn.js +3 -0
  171. package/dist/debugger/lib/event-meta.d.ts +2 -3
  172. package/dist/debugger/lib/event-meta.js +6 -12
  173. package/dist/debugger/lib/json.d.ts +25 -0
  174. package/dist/debugger/lib/json.js +87 -0
  175. package/dist/debugger/lib/payload.d.ts +7 -0
  176. package/dist/debugger/lib/payload.js +11 -0
  177. package/dist/debugger/lib/time.d.ts +3 -0
  178. package/dist/debugger/lib/time.js +24 -0
  179. package/dist/debugger/plugin.d.ts +36 -0
  180. package/dist/debugger/plugin.js +14 -0
  181. package/dist/debugger/server/index.d.ts +14 -0
  182. package/dist/debugger/server/index.js +114 -0
  183. package/dist/debugger/shell/debugger-shell.d.ts +15 -0
  184. package/dist/debugger/shell/debugger-shell.js +43 -0
  185. package/dist/debugger/shell/definition-key.d.ts +3 -0
  186. package/dist/debugger/shell/definition-key.js +4 -0
  187. package/dist/debugger/shell/events-pane.d.ts +12 -0
  188. package/dist/debugger/shell/events-pane.js +25 -0
  189. package/dist/debugger/shell/projections-panel.d.ts +4 -0
  190. package/dist/debugger/shell/projections-panel.js +59 -0
  191. package/dist/debugger/shell/run-controls.d.ts +4 -0
  192. package/dist/debugger/shell/run-controls.js +72 -0
  193. package/dist/debugger/shell/run-search.d.ts +6 -0
  194. package/dist/debugger/shell/run-search.js +102 -0
  195. package/dist/debugger/shell/run-type-menu.d.ts +6 -0
  196. package/dist/debugger/shell/run-type-menu.js +11 -0
  197. package/dist/debugger/shell/schema-form.d.ts +31 -0
  198. package/dist/debugger/shell/schema-form.js +117 -0
  199. package/dist/debugger/shell/start-form.d.ts +3 -0
  200. package/dist/debugger/shell/start-form.js +75 -0
  201. package/dist/debugger/shell/use-start-run.d.ts +14 -0
  202. package/dist/debugger/shell/use-start-run.js +32 -0
  203. package/dist/debugger/shell/workspace.d.ts +6 -0
  204. package/dist/debugger/shell/workspace.js +15 -0
  205. package/dist/debugger/styles.css +111 -27
  206. package/dist/debugger/ui/button.d.ts +24 -0
  207. package/dist/debugger/ui/button.js +24 -0
  208. package/dist/debugger/ui/command.d.ts +9 -0
  209. package/dist/debugger/ui/command.js +24 -0
  210. package/dist/debugger/ui/dropdown-menu.d.ts +13 -0
  211. package/dist/debugger/ui/dropdown-menu.js +37 -0
  212. package/dist/debugger/ui/panel.d.ts +14 -0
  213. package/dist/debugger/ui/panel.js +16 -0
  214. package/dist/debugger/ui/popover.d.ts +7 -0
  215. package/dist/debugger/ui/popover.js +17 -0
  216. package/dist/debugger/ui/resizable.d.ts +7 -0
  217. package/dist/debugger/ui/resizable.js +14 -0
  218. package/dist/debugger/ui/scroll-area.d.ts +2 -1
  219. package/dist/debugger/ui/scroll-area.js +5 -3
  220. package/dist/debugger/ui/select.d.ts +10 -0
  221. package/dist/debugger/ui/select.js +21 -0
  222. package/dist/debugger/ui/tabs.js +2 -2
  223. package/dist/debugger/ui/textarea.d.ts +3 -0
  224. package/dist/debugger/ui/textarea.js +7 -0
  225. package/dist/evaluator/definitions-store.d.ts +11 -0
  226. package/dist/evaluator/definitions-store.js +8 -0
  227. package/dist/evaluator/definitions.d.ts +18 -0
  228. package/dist/evaluator/definitions.js +4 -0
  229. package/dist/evaluator/effects.d.ts +226 -0
  230. package/dist/evaluator/effects.js +132 -0
  231. package/dist/evaluator/evaluator.d.ts +24 -0
  232. package/dist/evaluator/evaluator.js +67 -0
  233. package/dist/evaluator/events.d.ts +59 -0
  234. package/dist/evaluator/events.js +21 -0
  235. package/dist/evaluator/index.d.ts +11 -0
  236. package/dist/evaluator/index.js +11 -0
  237. package/dist/evaluator/module.d.ts +606 -0
  238. package/dist/evaluator/module.js +25 -0
  239. package/dist/evaluator/projections.d.ts +50 -0
  240. package/dist/evaluator/projections.js +20 -0
  241. package/dist/evaluator/scope.d.ts +59 -0
  242. package/dist/evaluator/scope.js +7 -0
  243. package/dist/evaluator/signals.d.ts +3 -0
  244. package/dist/evaluator/signals.js +17 -0
  245. package/dist/evaluator/threads.d.ts +62 -0
  246. package/dist/evaluator/threads.js +117 -0
  247. package/dist/evaluator/types.d.ts +125 -0
  248. package/dist/evaluator/types.js +51 -0
  249. package/dist/projectors/delivery.d.ts +83 -0
  250. package/dist/projectors/delivery.js +182 -0
  251. package/dist/projectors/index-model.d.ts +1 -1
  252. package/dist/projectors/index-model.js +4 -6
  253. package/dist/projectors/index.d.ts +2 -0
  254. package/dist/projectors/index.js +2 -0
  255. package/dist/projectors/memory.d.ts +1 -1
  256. package/dist/projectors/memory.js +10 -8
  257. package/dist/projectors/postgres.js +44 -58
  258. package/dist/projectors/projector.d.ts +17 -0
  259. package/dist/projectors/projector.js +26 -1
  260. package/dist/projectors/sqlite-delivery.d.ts +4 -0
  261. package/dist/projectors/sqlite-delivery.js +147 -0
  262. package/dist/projectors/sqlite.js +23 -23
  263. package/dist/projectors/with-projectors.d.ts +7 -2
  264. package/dist/projectors/with-projectors.js +27 -28
  265. package/dist/react/notify.js +11 -8
  266. package/dist/react/react.d.ts +2 -3
  267. package/dist/react/react.js +14 -30
  268. package/dist/react/sse.d.ts +1 -1
  269. package/dist/react/sse.js +1 -1
  270. package/dist/react/store.d.ts +3 -3
  271. package/dist/react/store.js +109 -119
  272. package/dist/runtime/cancellation.d.ts +16 -0
  273. package/dist/runtime/cancellation.js +129 -0
  274. package/dist/runtime/deadline-transition-planner.d.ts +31 -0
  275. package/dist/runtime/deadline-transition-planner.js +139 -0
  276. package/dist/runtime/dispatch-effect.d.ts +3 -2
  277. package/dist/runtime/dispatch-effect.js +7 -13
  278. package/dist/runtime/errors.d.ts +51 -0
  279. package/dist/runtime/errors.js +39 -0
  280. package/dist/runtime/{runtime-helpers.d.ts → helpers.d.ts} +24 -4
  281. package/dist/runtime/{runtime-helpers.js → helpers.js} +56 -19
  282. package/dist/runtime/index.d.ts +3 -3
  283. package/dist/runtime/index.js +3 -3
  284. package/dist/runtime/ingress.d.ts +15 -0
  285. package/dist/runtime/ingress.js +42 -0
  286. package/dist/runtime/local-effect-executor.d.ts +21 -0
  287. package/dist/runtime/local-effect-executor.js +137 -0
  288. package/dist/runtime/looms.d.ts +30 -4
  289. package/dist/runtime/looms.js +57 -37
  290. package/dist/runtime/observer.d.ts +45 -0
  291. package/dist/runtime/observer.js +11 -0
  292. package/dist/runtime/repository.d.ts +55 -0
  293. package/dist/runtime/repository.js +293 -0
  294. package/dist/runtime/retry-policy.d.ts +16 -0
  295. package/dist/runtime/retry-policy.js +29 -0
  296. package/dist/runtime/run-execution-context.d.ts +30 -0
  297. package/dist/runtime/run-execution-context.js +56 -0
  298. package/dist/runtime/run-start.d.ts +4 -0
  299. package/dist/runtime/run-start.js +44 -0
  300. package/dist/runtime/runtime.d.ts +6 -87
  301. package/dist/runtime/runtime.js +248 -470
  302. package/dist/runtime/server/auth.d.ts +41 -0
  303. package/dist/runtime/server/auth.js +45 -0
  304. package/dist/runtime/server/debugger-host.d.ts +11 -0
  305. package/dist/runtime/server/debugger-host.js +32 -0
  306. package/dist/runtime/server/fetch-handler.d.ts +18 -0
  307. package/dist/runtime/server/fetch-handler.js +62 -0
  308. package/dist/runtime/server/http.d.ts +38 -0
  309. package/dist/runtime/server/http.js +66 -0
  310. package/dist/runtime/server/route-table.d.ts +55 -0
  311. package/dist/runtime/server/route-table.js +74 -0
  312. package/dist/runtime/server/routes/definitions.d.ts +3 -0
  313. package/dist/runtime/server/routes/definitions.js +20 -0
  314. package/dist/runtime/server/routes/effects.d.ts +3 -0
  315. package/dist/runtime/server/routes/effects.js +59 -0
  316. package/dist/runtime/server/routes/operations.d.ts +3 -0
  317. package/dist/runtime/server/routes/operations.js +14 -0
  318. package/dist/runtime/server/routes/runs.d.ts +3 -0
  319. package/dist/runtime/server/routes/runs.js +199 -0
  320. package/dist/runtime/server.d.ts +4 -8
  321. package/dist/runtime/server.js +6 -211
  322. package/dist/runtime/sse.d.ts +2 -1
  323. package/dist/runtime/sse.js +24 -17
  324. package/dist/runtime/types.d.ts +117 -0
  325. package/dist/runtime/types.js +1 -0
  326. package/dist/runtime/wake-engine.d.ts +20 -0
  327. package/dist/runtime/wake-engine.js +311 -0
  328. package/dist/runtime/wake-scheduler.d.ts +3 -4
  329. package/dist/runtime/wake-scheduler.js +25 -31
  330. package/dist/runtime/worker-callbacks.d.ts +16 -0
  331. package/dist/runtime/worker-callbacks.js +167 -0
  332. package/dist/runtime/worker-effect-dispatch.d.ts +36 -0
  333. package/dist/runtime/worker-effect-dispatch.js +126 -0
  334. package/dist/s2/config.d.ts +1 -1
  335. package/dist/s2/config.js +1 -1
  336. package/dist/s2/lite.js +70 -82
  337. package/dist/s2/pagination.d.ts +15 -0
  338. package/dist/s2/pagination.js +36 -0
  339. package/dist/s2/projector.js +6 -5
  340. package/dist/s2/snapshot-store.js +188 -161
  341. package/dist/s2/store.d.ts +3 -21
  342. package/dist/s2/store.js +71 -165
  343. package/dist/testing/index.d.ts +15 -0
  344. package/dist/testing/index.js +53 -16
  345. package/dist/workflow/debugger/index.d.ts +4 -0
  346. package/dist/workflow/debugger/index.js +11 -0
  347. package/dist/workflow/debugger/nodes-view.d.ts +3 -0
  348. package/dist/workflow/debugger/nodes-view.js +13 -0
  349. package/dist/workflow/debugger/summarize.d.ts +2 -0
  350. package/dist/workflow/debugger/summarize.js +30 -0
  351. package/dist/workflow/definitions-store.d.ts +2 -3
  352. package/dist/workflow/definitions-store.js +2 -2
  353. package/dist/workflow/definitions.d.ts +78 -22
  354. package/dist/workflow/definitions.js +80 -14
  355. package/dist/workflow/effects.d.ts +453 -107
  356. package/dist/workflow/effects.js +214 -115
  357. package/dist/workflow/events.d.ts +149 -5
  358. package/dist/workflow/events.js +27 -5
  359. package/dist/workflow/graph.d.ts +56 -0
  360. package/dist/workflow/graph.js +207 -0
  361. package/dist/workflow/index.d.ts +1 -0
  362. package/dist/workflow/index.js +1 -0
  363. package/dist/workflow/module.d.ts +1047 -266
  364. package/dist/workflow/projections.d.ts +14 -12
  365. package/dist/workflow/projections.js +30 -8
  366. package/dist/workflow/scope.d.ts +146 -4
  367. package/dist/workflow/threads.d.ts +383 -155
  368. package/dist/workflow/threads.js +308 -110
  369. package/package.json +26 -2
  370. package/dist/debugger/events/domain-summarize.d.ts +0 -3
  371. package/dist/debugger/events/domain-summarize.js +0 -107
  372. package/dist/debugger/events/family.d.ts +0 -8
  373. package/dist/debugger/events/family.js +0 -44
  374. package/dist/runtime/events-api.d.ts +0 -4
  375. package/dist/runtime/events-api.js +0 -84
@@ -1,10 +1,15 @@
1
+ import type { Effect } from 'effect';
1
2
  import type { EventStore } from '@swirls/looms/core';
2
- import { type Projector } from '@swirls/looms/projectors';
3
+ import { type Projector, type ProjectorDelivery } from '@swirls/looms/projectors';
3
4
  export interface DurableObjectStoreOptions {
4
5
  readonly projectors?: readonly Projector[];
6
+ readonly scheduleProjectorRetry?: (at: number) => Effect.Effect<void>;
7
+ }
8
+ export interface DurableObjectEventStore extends EventStore {
9
+ readonly projectorDelivery?: ProjectorDelivery;
5
10
  }
6
11
  /**
7
12
  * Creates an EventStore backed by a Durable Object's embedded SQLite database (`ctx.storage.sql`).
8
13
  * Optionally attaches asynchronous projectors (such as S2).
9
14
  */
10
- export declare function durableObjectEventStore(ctx: DurableObjectState, options?: DurableObjectStoreOptions): EventStore;
15
+ export declare function durableObjectEventStore(ctx: DurableObjectState, options?: DurableObjectStoreOptions): DurableObjectEventStore;
@@ -1,18 +1,19 @@
1
1
  import { sqliteEventStore, sqlStorageExec } from '@swirls/looms/core/sqlite-store';
2
- import { withProjectors } from '@swirls/looms/projectors';
2
+ import { createProjectorDelivery, sqliteProjectorCursorStore, withProjectors, } from '@swirls/looms/projectors';
3
3
  /**
4
4
  * Creates an EventStore backed by a Durable Object's embedded SQLite database (`ctx.storage.sql`).
5
5
  * Optionally attaches asynchronous projectors (such as S2).
6
6
  */
7
7
  export function durableObjectEventStore(ctx, options = {}) {
8
- const store = sqliteEventStore({
9
- exec: sqlStorageExec(ctx.storage.sql, {
10
- // DO SQLite rejects BEGIN/COMMIT/ROLLBACK; use the storage transaction API.
11
- transaction: (fn) => ctx.storage.transactionSync(fn),
12
- }),
8
+ const exec = sqlStorageExec(ctx.storage.sql, {
9
+ // DO SQLite rejects BEGIN/COMMIT/ROLLBACK; use the storage transaction API.
10
+ transaction: (fn) => ctx.storage.transactionSync(fn),
13
11
  });
12
+ const store = sqliteEventStore({ exec });
14
13
  if (options.projectors && options.projectors.length > 0) {
15
- return withProjectors(store, options.projectors);
14
+ const delivery = createProjectorDelivery(store, options.projectors, sqliteProjectorCursorStore(exec), { scheduleRetry: options.scheduleProjectorRetry });
15
+ const wrapped = withProjectors(store, options.projectors, { delivery });
16
+ return Object.assign(wrapped, { projectorDelivery: delivery });
16
17
  }
17
18
  return store;
18
19
  }
@@ -1,4 +1,4 @@
1
- export { alarmScheduler, type AlarmStorage } from './alarm-scheduler';
2
- export { durableObjectEventStore, type DurableObjectStoreOptions } from './event-store';
1
+ export { durableObjectAlarms, type AlarmStorage, type DurableObjectAlarms } from './alarm-scheduler';
2
+ export { durableObjectEventStore, type DurableObjectEventStore, type DurableObjectStoreOptions, } from './event-store';
3
3
  export { LoomsDurableObject, type LoomsDurableObjectConfig } from './durable-object';
4
4
  export { routeToDurableObject, type DurableObjectNamespaceLike, type DurableObjectStubLike, } from './router';
@@ -1,4 +1,4 @@
1
- export { alarmScheduler } from './alarm-scheduler.js';
2
- export { durableObjectEventStore } from './event-store.js';
1
+ export { durableObjectAlarms } from './alarm-scheduler.js';
2
+ export { durableObjectEventStore, } from './event-store.js';
3
3
  export { LoomsDurableObject } from './durable-object.js';
4
4
  export { routeToDurableObject, } from './router.js';
@@ -6,7 +6,7 @@ export interface DurableObjectNamespaceLike<T extends DurableObjectStubLike = Du
6
6
  }
7
7
  /**
8
8
  * Routes incoming HTTP requests to the appropriate Durable Object actor cell.
9
- * Handles `/health` locally, returns 501 for global `GET /runs`, and forwards
9
+ * Handles `/health` locally, returns 501 for global run lists, and forwards
10
10
  * all other run and event-stream requests to `namespace.getByName(runId)`.
11
11
  */
12
12
  export declare function routeToDurableObject(namespace: DurableObjectNamespaceLike, req: Request): Promise<Response | null>;
@@ -1,26 +1,25 @@
1
- import { resolveRunTarget } from '@swirls/looms/actor';
1
+ import { resolveRunTarget, RunTargetError } from '@swirls/looms/actor';
2
2
  /**
3
3
  * Routes incoming HTTP requests to the appropriate Durable Object actor cell.
4
- * Handles `/health` locally, returns 501 for global `GET /runs`, and forwards
4
+ * Handles `/health` locally, returns 501 for global run lists, and forwards
5
5
  * all other run and event-stream requests to `namespace.getByName(runId)`.
6
6
  */
7
- export async function routeToDurableObject(namespace, req) {
7
+ export function routeToDurableObject(namespace, req) {
8
8
  const url = new URL(req.url);
9
9
  if (url.pathname === '/health') {
10
- return Response.json({ ok: true });
10
+ return Promise.resolve(Response.json({ ok: true }));
11
11
  }
12
- if (req.method === 'GET' && url.pathname === '/runs') {
13
- return Response.json({
12
+ if (req.method === 'GET' && (url.pathname === '/runs' || url.pathname === '/runs/summaries')) {
13
+ return Promise.resolve(Response.json({
14
14
  error: 'Global run listing is not supported in the Durable Object backend without a global index',
15
- }, { status: 501 });
16
- }
17
- try {
18
- const { runId, request } = await resolveRunTarget(req);
19
- const stub = namespace.getByName(runId);
20
- return stub.fetch(request);
21
- }
22
- catch {
23
- // Paths without a resolvable runId (e.g. GET /) are not handled by this router.
24
- return null;
15
+ }, { status: 501 }));
25
16
  }
17
+ return resolveRunTarget(req)
18
+ .then(({ runId, request }) => namespace.getByName(runId).fetch(request))
19
+ .catch((error) => {
20
+ if (error instanceof RunTargetError) {
21
+ return null;
22
+ }
23
+ return Promise.reject(error);
24
+ });
26
25
  }
@@ -1,7 +1,7 @@
1
1
  import type { StandardSchemaV1 } from '@standard-schema/spec';
2
2
  import type { Schema } from 'effect';
3
3
  import { type EventEnvelope, type EventInput, type TypedEvent } from './envelope';
4
- import { type JsonValue } from './types';
4
+ import type { JsonValue } from './types';
5
5
  declare const catalogPayloadBrand: unique symbol;
6
6
  /** Type-only catalog entry. Carries a payload type without a runtime schema. */
7
7
  export type CatalogEventSpec<TPayload = object> = {
@@ -13,11 +13,11 @@ export type CatalogEventSpec<TPayload = object> = {
13
13
  * `payload<{ amount: number }>()` is a compile-time marker — not a cast of `{}`.
14
14
  */
15
15
  export declare function payload<TPayload>(): CatalogEventSpec<TPayload>;
16
- export type CatalogEntry = CatalogEventSpec | Schema.Top | StandardSchemaV1;
16
+ export type CatalogEntry = CatalogEventSpec | Schema.ConstraintDecoder<unknown> | StandardSchemaV1;
17
17
  export type CatalogEntries = {
18
18
  readonly [key: string]: CatalogEntry;
19
19
  };
20
- export type InferPayload<T> = T extends CatalogEventSpec<infer P> ? P : T extends Schema.Top ? Schema.Schema.Type<T> : T extends StandardSchemaV1<infer _In, infer Out> ? Out : JsonValue;
20
+ export type InferPayload<T> = T extends CatalogEventSpec<infer P> ? P : T extends Schema.ConstraintDecoder<unknown> ? Schema.Schema.Type<T> : T extends StandardSchemaV1<infer _In, infer Out> ? Out : JsonValue;
21
21
  export interface EventCatalog<TNamespace extends string = string, TEntries extends CatalogEntries = CatalogEntries> {
22
22
  readonly namespace: TNamespace;
23
23
  readonly entries: TEntries;
@@ -1,5 +1,4 @@
1
1
  import { createEvent } from './envelope.js';
2
- import { asJson } from './types.js';
3
2
  /**
4
3
  * Declare a catalog event's payload type when you do not have a Zod / Standard Schema.
5
4
  *
@@ -17,19 +16,17 @@ export function defineEventCatalog(namespace, entries) {
17
16
  entries,
18
17
  event(key, eventPayload, meta) {
19
18
  const { runId, ...rest } = meta;
20
- // SAFETY: createEvent returns EventEnvelope with inferred payload type.
21
19
  return createEvent(runId, {
22
20
  ...rest,
23
21
  type: eventType(namespace, key),
24
- payload: asJson(eventPayload),
22
+ payload: eventPayload,
25
23
  });
26
24
  },
27
25
  input(key, eventPayload, meta) {
28
26
  return {
29
27
  ...meta,
30
28
  type: eventType(namespace, key),
31
- // SAFETY: asJson returns typed payload for catalog event.
32
- payload: asJson(eventPayload),
29
+ payload: eventPayload,
33
30
  };
34
31
  },
35
32
  };
@@ -90,7 +90,8 @@ export function createCoalescingAppender(flush, options) {
90
90
  }
91
91
  default: {
92
92
  const exhaustiveCheck = taken;
93
- return exhaustiveCheck;
93
+ void exhaustiveCheck;
94
+ return;
94
95
  }
95
96
  }
96
97
  }
@@ -135,11 +136,12 @@ export function createCoalescingAppender(flush, options) {
135
136
  if (result.pending > maxPending) {
136
137
  yield* Deferred.await(result.deferred);
137
138
  }
138
- return;
139
+ return undefined;
139
140
  }
140
141
  default: {
141
142
  const exhaustiveCheck = result;
142
- return exhaustiveCheck;
143
+ void exhaustiveCheck;
144
+ return undefined;
143
145
  }
144
146
  }
145
147
  });
@@ -3,7 +3,7 @@ import type { CatalogEvent, EventCatalog } from './catalog';
3
3
  import type { EffectDefinition } from './effects';
4
4
  import type { EventEnvelope } from './envelope';
5
5
  import type { FoldRegistry } from './fold';
6
- import type { AnyRuntimeModule, EffectMiddleware, RuntimeModule, RegisteredDefinition } from './module';
6
+ import type { AnyRuntimeModule, EffectMiddleware, RuntimeModule, RegisteredDefinition, SignalInterruptRule } from './module';
7
7
  import type { ProjectionDefinition } from './projection';
8
8
  import { protocolCatalog } from './protocol';
9
9
  import type { ThreadDefinition } from './thread';
@@ -22,6 +22,7 @@ export interface ComposedRegistry extends FoldRegistry {
22
22
  readonly projections: ReadonlyMap<string, ProjectionDefinition>;
23
23
  readonly catalogs: readonly EventCatalog[];
24
24
  readonly middleware: readonly EffectMiddleware[];
25
+ readonly interruptRules: readonly SignalInterruptRule[];
25
26
  }
26
27
  export declare function composeModules(modules: readonly AnyRuntimeModule[]): ComposedRegistry;
27
28
  export declare function composeModulesEffect(modules: readonly AnyRuntimeModule[]): Effect.Effect<ComposedRegistry, ModuleCompositionError>;
@@ -1,4 +1,5 @@
1
1
  import { Data, Effect } from 'effect';
2
+ import { DEFAULT_DEFINITION_VERSION, definitionKey } from './module.js';
2
3
  import { protocolCatalog } from './protocol.js';
3
4
  export class ModuleCompositionError extends Data.TaggedError('ModuleCompositionError') {
4
5
  constructor(text) {
@@ -14,6 +15,7 @@ export function composeModules(modules) {
14
15
  const effects = new Map();
15
16
  const projections = new Map();
16
17
  const middleware = [];
18
+ const interruptRules = [];
17
19
  const catalogs = [protocolCatalog];
18
20
  for (const module of modules) {
19
21
  if (namespaces.has(module.namespace)) {
@@ -41,7 +43,8 @@ export function composeModules(modules) {
41
43
  }
42
44
  }
43
45
  for (const definition of module.definitions ?? []) {
44
- const key = `${definition.kind}:${definition.name}`;
46
+ const version = definition.version ?? DEFAULT_DEFINITION_VERSION;
47
+ const key = definitionKey(definition.kind, definition.name, version);
45
48
  if (definitionKeys.has(key)) {
46
49
  throw new ModuleCompositionError(`Duplicate definition: ${key}`);
47
50
  }
@@ -52,7 +55,9 @@ export function composeModules(modules) {
52
55
  definitions.push({
53
56
  kind: definition.kind,
54
57
  name: definition.name,
58
+ version,
55
59
  input: definition.input,
60
+ description: definition.description,
56
61
  value: definition,
57
62
  });
58
63
  }
@@ -76,6 +81,9 @@ export function composeModules(modules) {
76
81
  if (module.middleware) {
77
82
  middleware.push(...module.middleware);
78
83
  }
84
+ if (module.interruptsOnSignal) {
85
+ interruptRules.push(module.interruptsOnSignal);
86
+ }
79
87
  if (module.projections) {
80
88
  for (const definition of Object.values(module.projections)) {
81
89
  if (projections.has(definition.name)) {
@@ -85,7 +93,16 @@ export function composeModules(modules) {
85
93
  }
86
94
  }
87
95
  }
88
- return { definitions, modules, threads, effects, projections, catalogs, middleware };
96
+ return {
97
+ definitions,
98
+ modules,
99
+ threads,
100
+ effects,
101
+ projections,
102
+ catalogs,
103
+ middleware,
104
+ interruptRules,
105
+ };
89
106
  }
90
107
  export function composeModulesEffect(modules) {
91
108
  return Effect.try({
@@ -0,0 +1,16 @@
1
+ /** A request the runtime has matched and authorized under the debugger mount. */
2
+ export interface DebuggerRequest {
3
+ /** Mount path without a trailing slash, such as `/debugger`. */
4
+ readonly basePath: string;
5
+ /** Path below the mount: empty for the mount itself, otherwise it starts with `/`. */
6
+ readonly path: string;
7
+ }
8
+ /**
9
+ * Serves a debugger UI under `basePath`. The runtime matches, authorizes, and strips the mount
10
+ * path; the host only serves files.
11
+ */
12
+ export interface DebuggerHost {
13
+ /** Absolute mount path, such as `/debugger`. Must not overlap the HTTP API. */
14
+ readonly basePath: string;
15
+ fetch(req: Request, mount: DebuggerRequest): Promise<Response | null>;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ export interface VersionedDefinition {
2
+ readonly kind: string;
3
+ readonly name: string;
4
+ readonly version: string;
5
+ }
6
+ /** Lookup of one definition kind by name and version. */
7
+ export interface DefinitionStore<TDefinition> {
8
+ get(name: string, version: string): TDefinition | undefined;
9
+ }
10
+ /** Indexes definitions of one kind by `definitionKey`. */
11
+ export declare function makeDefinitionStore<TDefinition extends VersionedDefinition>(kind: TDefinition['kind'], definitions: ReadonlyArray<TDefinition>): DefinitionStore<TDefinition>;
@@ -0,0 +1,6 @@
1
+ import { definitionKey } from './module.js';
2
+ /** Indexes definitions of one kind by `definitionKey`. */
3
+ export function makeDefinitionStore(kind, definitions) {
4
+ const byKey = new Map(definitions.map((definition) => [definitionKey(definition.kind, definition.name, definition.version), definition]));
5
+ return { get: (name, version) => byKey.get(definitionKey(kind, name, version)) };
6
+ }
@@ -1,6 +1,6 @@
1
- import { Effect } from 'effect';
2
- import type { EventInput } from './envelope';
3
- import { type InferDefinedSchema, type SchemaInput } from './schema';
1
+ import { Effect, Schema, type Context } from 'effect';
2
+ import { type EventInput } from './envelope';
3
+ import { type InferDefinedSchema, type InvalidInputError, type SchemaInput } from './schema';
4
4
  import { type JsonValue } from './types';
5
5
  export type WaitOnEvent = {
6
6
  type: string | readonly string[];
@@ -15,6 +15,7 @@ export type SpawnEffect = {
15
15
  childThreadId: string;
16
16
  kind: string;
17
17
  definitionName: string;
18
+ definitionVersion: string;
18
19
  input: JsonValue;
19
20
  };
20
21
  export type WaitEffect = {
@@ -26,6 +27,8 @@ export type WaitEffect = {
26
27
  export type EmitEffect<E extends EventInput = EventInput> = {
27
28
  type: 'runtime.emit';
28
29
  event: E;
30
+ /** Stable identity, so the emit survives reordering of the thread's effects. */
31
+ tag?: string;
29
32
  };
30
33
  export type CompleteEffect = {
31
34
  type: 'runtime.complete';
@@ -38,11 +41,17 @@ export type FailEffect = {
38
41
  export type CancelEffect = {
39
42
  type: 'runtime.cancel';
40
43
  threadId: string;
44
+ tag?: string;
41
45
  };
42
46
  export interface RetryPolicy {
43
47
  readonly maxAttempts: number;
44
48
  readonly backoffMs?: number;
45
49
  readonly maxBackoffMs?: number;
50
+ readonly backoffMultiplier?: number;
51
+ readonly scheduleToStartTimeoutMs?: number;
52
+ readonly startToCloseTimeoutMs?: number;
53
+ readonly heartbeatTimeoutMs?: number;
54
+ readonly cancellationTimeoutMs?: number;
46
55
  }
47
56
  export type InvokeEffect = {
48
57
  type: string;
@@ -51,6 +60,69 @@ export type InvokeEffect = {
51
60
  };
52
61
  export type PrimitiveEffect = SpawnEffect | WaitEffect | EmitEffect | CompleteEffect | FailEffect | CancelEffect;
53
62
  export type RuntimeEffect = PrimitiveEffect | InvokeEffect;
63
+ export declare const WaitConditionSchema: Schema.Union<readonly [Schema.Struct<{
64
+ readonly type: Schema.Union<readonly [Schema.String, Schema.$Array<Schema.String>]>;
65
+ readonly match: Schema.optional<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
66
+ }>, Schema.Struct<{
67
+ readonly timerAt: Schema.Finite;
68
+ }>]>;
69
+ export declare const RuntimeEffectSchema: Schema.Union<readonly [Schema.Struct<{
70
+ readonly type: Schema.Literal<"runtime.spawn">;
71
+ readonly childThreadId: Schema.String;
72
+ readonly kind: Schema.String;
73
+ readonly definitionName: Schema.String;
74
+ readonly definitionVersion: Schema.withDecodingDefaultKey<Schema.String, never>;
75
+ readonly input: Schema.Codec<Schema.Json, Schema.Json, never, never>;
76
+ }>, Schema.Struct<{
77
+ readonly type: Schema.Literal<"runtime.wait">;
78
+ readonly waitId: Schema.String;
79
+ readonly on: Schema.Union<readonly [Schema.Struct<{
80
+ readonly type: Schema.Union<readonly [Schema.String, Schema.$Array<Schema.String>]>;
81
+ readonly match: Schema.optional<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
82
+ }>, Schema.Struct<{
83
+ readonly timerAt: Schema.Finite;
84
+ }>]>;
85
+ readonly tag: Schema.optional<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
86
+ }>, Schema.Struct<{
87
+ readonly type: Schema.Literal<"runtime.emit">;
88
+ readonly event: Schema.Struct<{
89
+ readonly type: Schema.String;
90
+ readonly payload: Schema.Codec<Schema.Json, Schema.Json, never, never>;
91
+ readonly threadId: Schema.optional<Schema.NullOr<Schema.String>>;
92
+ readonly parentThreadId: Schema.optional<Schema.NullOr<Schema.String>>;
93
+ readonly causationId: Schema.optional<Schema.NullOr<Schema.String>>;
94
+ readonly correlationId: Schema.optional<Schema.NullOr<Schema.String>>;
95
+ readonly effectId: Schema.optional<Schema.NullOr<Schema.String>>;
96
+ readonly origin: Schema.optional<Schema.Union<readonly [Schema.Struct<{
97
+ readonly type: Schema.Literal<"thread">;
98
+ readonly threadId: Schema.String;
99
+ }>, Schema.Struct<{
100
+ readonly type: Schema.Literal<"external">;
101
+ readonly actorId: Schema.optional<Schema.String>;
102
+ }>, Schema.Struct<{
103
+ readonly type: Schema.Literal<"system">;
104
+ }>]>>;
105
+ readonly ephemeral: Schema.optional<Schema.Boolean>;
106
+ readonly id: Schema.optional<Schema.String>;
107
+ readonly ts: Schema.optional<Schema.Finite>;
108
+ readonly idempotencyKey: Schema.optional<Schema.NullOr<Schema.String>>;
109
+ }>;
110
+ readonly tag: Schema.optional<Schema.String>;
111
+ }>, Schema.Struct<{
112
+ readonly type: Schema.Literal<"runtime.complete">;
113
+ readonly output: Schema.Codec<Schema.Json, Schema.Json, never, never>;
114
+ }>, Schema.Struct<{
115
+ readonly type: Schema.Literal<"runtime.fail">;
116
+ readonly error: Schema.String;
117
+ }>, Schema.Struct<{
118
+ readonly type: Schema.Literal<"runtime.cancel">;
119
+ readonly threadId: Schema.String;
120
+ readonly tag: Schema.optional<Schema.String>;
121
+ }>, Schema.Struct<{
122
+ readonly type: Schema.String;
123
+ readonly input: Schema.Codec<Schema.Json, Schema.Json, never, never>;
124
+ readonly tag: Schema.optional<Schema.String>;
125
+ }>]>;
54
126
  export declare function isPrimitiveEffect(effect: RuntimeEffect): effect is PrimitiveEffect;
55
127
  export declare function isWaitOnTimer(on: WaitCondition): on is WaitOnTimer;
56
128
  export declare function isWaitOnEvent(on: WaitCondition): on is WaitOnEvent;
@@ -62,6 +134,7 @@ export interface EffectContext {
62
134
  readonly runId: string;
63
135
  readonly threadId: string;
64
136
  readonly causingEventId: string;
137
+ readonly signal: AbortSignal;
65
138
  emit(event: EventInput): Promise<void>;
66
139
  }
67
140
  export interface ScopedEffectContext<E extends EventInput = EventInput> {
@@ -69,32 +142,60 @@ export interface ScopedEffectContext<E extends EventInput = EventInput> {
69
142
  readonly runId: string;
70
143
  readonly threadId: string;
71
144
  readonly causingEventId: string;
145
+ readonly signal: AbortSignal;
72
146
  emit(event: E): Promise<void>;
73
147
  }
74
148
  export type EffectInputSchema = SchemaInput;
75
- export type EffectHandlerResult<R = never, E extends EventInput = EventInput> = ReadonlyArray<E> | Promise<ReadonlyArray<E>> | Effect.Effect<ReadonlyArray<E>, Error, R>;
76
- export interface EffectDefinition<TInput = JsonValue, R = any, E extends EventInput = EventInput> {
149
+ declare const EffectHandlerError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
150
+ readonly _tag: "EffectHandlerError";
151
+ } & Readonly<A>;
152
+ export declare class EffectHandlerError extends EffectHandlerError_base<{
153
+ readonly cause: unknown;
154
+ readonly message: string;
155
+ }> {
156
+ constructor(cause: unknown);
157
+ }
158
+ export type EffectHandlerResult<R = never, E extends EventInput = EventInput, HandlerError = never> = ReadonlyArray<E> | Promise<ReadonlyArray<E>> | Effect.Effect<ReadonlyArray<E>, HandlerError, R>;
159
+ declare const effectInputType: unique symbol;
160
+ export type EffectExecution = 'local' | 'worker';
161
+ export interface EffectDefinition<TInput = JsonValue, R = Context.Service.Any, E extends EventInput = EventInput> {
77
162
  readonly type: string;
78
163
  readonly input?: SchemaInput;
79
164
  readonly retry?: RetryPolicy;
80
- execute(input: TInput, ctx: EffectContext): Effect.Effect<ReadonlyArray<E>, Error, R>;
165
+ /** Forces where the effect runs. When omitted, the runtime decides from `hasHandler` and the configured worker. */
166
+ readonly execution?: EffectExecution;
167
+ /** Whether `execute` runs a user handler. Without one, the effect can only complete through a worker. */
168
+ readonly hasHandler: boolean;
169
+ readonly [effectInputType]?: (input: TInput) => TInput;
170
+ execute(input: JsonValue, ctx: EffectContext): Effect.Effect<ReadonlyArray<E>, InvalidInputError | EffectHandlerError, R>;
81
171
  }
82
172
  /**
83
- * Define an effect handler. A run's actor cell executes each effect at most
84
- * once while it is alive. If the cell dies mid-execution, the replacement
85
- * actor may re-run the handler (at-least-once across failover). Keep handlers
173
+ * Define an effect. With `execute`, a run's actor cell runs the handler at
174
+ * most once while it is alive; if the cell dies mid-execution, the replacement
175
+ * actor may re-run it (at-least-once across failover). Keep handlers
86
176
  * idempotent when they have external side effects.
177
+ *
178
+ * Omit `execute` to declare an effect that only an `EffectWorker` completes.
87
179
  */
88
- export declare function defineEffect<TSchema = undefined, TInput = InferDefinedSchema<TSchema>, R = never, E extends EventInput = EventInput>(def: {
180
+ export declare function defineEffect<TSchema extends SchemaInput, R = never, E extends EventInput = EventInput, HandlerError = never>(def: {
181
+ type: string;
182
+ input: TSchema;
183
+ retry?: RetryPolicy;
184
+ execution?: EffectExecution;
185
+ execute?: (input: InferDefinedSchema<TSchema>, ctx: EffectContext) => EffectHandlerResult<R, E, HandlerError>;
186
+ }): EffectDefinition<InferDefinedSchema<TSchema>, R, E>;
187
+ export declare function defineEffect<R = never, E extends EventInput = EventInput, HandlerError = never>(def: {
89
188
  type: string;
90
- input?: TSchema;
189
+ input?: undefined;
91
190
  retry?: RetryPolicy;
92
- execute: (input: TInput, ctx: EffectContext) => EffectHandlerResult<R, E>;
93
- }): EffectDefinition<TInput, R, E>;
191
+ execution?: EffectExecution;
192
+ execute?: (input: JsonValue, ctx: EffectContext) => EffectHandlerResult<R, E, HandlerError>;
193
+ }): EffectDefinition<JsonValue, R, E>;
94
194
  export declare function spawn(args: {
95
195
  childThreadId?: string;
96
196
  kind: string;
97
197
  definitionName: string;
198
+ definitionVersion?: string;
98
199
  input: JsonValue;
99
200
  }): SpawnEffect;
100
201
  export declare function wait(args: {
@@ -102,9 +203,20 @@ export declare function wait(args: {
102
203
  on: WaitCondition;
103
204
  tag?: JsonValue;
104
205
  }): WaitEffect;
105
- export declare function emit<E extends EventInput = EventInput>(event: E): EmitEffect<E>;
206
+ export interface WaitOutcome {
207
+ readonly result: JsonValue | null;
208
+ readonly error: string | null;
209
+ }
210
+ /**
211
+ * Reads the outcome of a satisfied wait. The wait fails when the satisfying event's payload has an
212
+ * `error`, or when the waiter put an `error` on the wait's tag (such as a timeout that loses a
213
+ * race). Otherwise the result is the payload's `output`, else the whole payload.
214
+ */
215
+ export declare function waitOutcome(satisfied: JsonValue | undefined, tag: JsonValue | undefined, fallback?: JsonValue | null): WaitOutcome;
216
+ export declare function emit<E extends EventInput = EventInput>(event: E, tag?: string): EmitEffect<E>;
106
217
  export declare function complete(output: JsonValue): CompleteEffect;
107
218
  export declare function fail(error: string): FailEffect;
108
- export declare function cancel(threadId: string): CancelEffect;
219
+ export declare function cancel(threadId: string, tag?: string): CancelEffect;
109
220
  export declare function invoke<TInput>(definition: EffectDefinition<TInput, any, any>, input: TInput, tag?: string): InvokeEffect;
110
221
  export declare function invoke(type: string, input: JsonValue, tag?: string): InvokeEffect;
222
+ export {};