@demlik/tea 0.12.0 → 0.14.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 (368) hide show
  1. package/README.md +11 -9
  2. package/dist/agent/index.d.ts +638 -45
  3. package/dist/agent/index.js +9 -19
  4. package/dist/{chunk-25LBDCBC.js → chunk-6IQPODUF.js} +2 -2
  5. package/dist/{chunk-25LBDCBC.js.map → chunk-6IQPODUF.js.map} +1 -1
  6. package/dist/chunk-AQ6ZIMEA.js +421 -0
  7. package/dist/chunk-AQ6ZIMEA.js.map +1 -0
  8. package/dist/{chunk-MUUROGIH.js → chunk-BLJ2JQSH.js} +62 -12
  9. package/dist/chunk-BLJ2JQSH.js.map +1 -0
  10. package/dist/{chunk-7SVIRMC6.js → chunk-F2US5BW6.js} +25 -5
  11. package/dist/chunk-F2US5BW6.js.map +1 -0
  12. package/dist/{batch-window/index.js → chunk-F7FMAWLA.js} +4 -8
  13. package/dist/chunk-F7FMAWLA.js.map +1 -0
  14. package/dist/{chunk-7V4EVLZA.js → chunk-HUKZQX6U.js} +20 -16
  15. package/dist/chunk-HUKZQX6U.js.map +1 -0
  16. package/dist/{chunk-EWJP3YYP.js → chunk-HWVW4AXC.js} +3 -3
  17. package/dist/chunk-HWVW4AXC.js.map +1 -0
  18. package/dist/{chunk-WLGO64WC.js → chunk-HYDWG35Q.js} +23 -6
  19. package/dist/chunk-HYDWG35Q.js.map +1 -0
  20. package/dist/{chunk-I5OV65MS.js → chunk-I5MQMJDW.js} +57 -7
  21. package/dist/chunk-I5MQMJDW.js.map +1 -0
  22. package/dist/{chunk-J6527VRQ.js → chunk-LFZUK6J2.js} +3 -3
  23. package/dist/chunk-LFZUK6J2.js.map +1 -0
  24. package/dist/{chunk-ZVJZ72HY.js → chunk-LYLTKJWM.js} +25 -11
  25. package/dist/chunk-LYLTKJWM.js.map +1 -0
  26. package/dist/{chunk-D736QUGF.js → chunk-MYXFNWAJ.js} +4 -5
  27. package/dist/chunk-MYXFNWAJ.js.map +1 -0
  28. package/dist/{chunk-K575PT4S.js → chunk-PR6TB3BL.js} +15 -4
  29. package/dist/chunk-PR6TB3BL.js.map +1 -0
  30. package/dist/chunk-RQULHGYH.js +1804 -0
  31. package/dist/chunk-RQULHGYH.js.map +1 -0
  32. package/dist/{chunk-FV3Z5MBE.js → chunk-TXN2KFHF.js} +14 -4
  33. package/dist/chunk-TXN2KFHF.js.map +1 -0
  34. package/dist/{chunk-Q2UM7BXU.js → chunk-VBDU4JL6.js} +2 -2
  35. package/dist/chunk-VBDU4JL6.js.map +1 -0
  36. package/dist/chunk-Z2L3LSNV.js +1470 -0
  37. package/dist/chunk-Z2L3LSNV.js.map +1 -0
  38. package/dist/core-CTzMJ82M.d.ts +562 -0
  39. package/dist/devtools/index.d.ts +2 -2
  40. package/dist/devtools/index.js +207 -2
  41. package/dist/devtools/index.js.map +1 -1
  42. package/dist/do/index.d.ts +48 -31
  43. package/dist/do/index.js +36 -25
  44. package/dist/do/index.js.map +1 -1
  45. package/dist/{durable-effects-D8SqU_if.d.ts → durable-effects-B0-qGQDy.d.ts} +2 -2
  46. package/dist/extension/index.d.ts +301 -3
  47. package/dist/extension/index.js +596 -5
  48. package/dist/extension/index.js.map +1 -1
  49. package/dist/flow/index.d.ts +1295 -0
  50. package/dist/flow/index.js +732 -0
  51. package/dist/flow/index.js.map +1 -0
  52. package/dist/idempotency/index.d.ts +90 -116
  53. package/dist/idempotency/index.js +4 -1
  54. package/dist/{batch-window/index.d.ts → index-4vZzljCD.d.ts} +7 -11
  55. package/dist/{fan-out/index.d.ts → index-6A7dB8f6.d.ts} +7 -8
  56. package/dist/index-B5BZ-_cT.d.ts +616 -0
  57. package/dist/index-Bc40JWVl.d.ts +131 -0
  58. package/dist/{debounce/index.d.ts → index-DHSUmQTR.d.ts} +7 -7
  59. package/dist/index-DJWIER_3.d.ts +69 -0
  60. package/dist/{snapshot/index.d.ts → index-DMCeMPMJ.d.ts} +15 -77
  61. package/dist/{monitored-run/index.d.ts → index-NjrT3fL2.d.ts} +37 -12
  62. package/dist/{recorder/index.d.ts → index-TvRb1KVf.d.ts} +4 -6
  63. package/dist/{deadline/index.d.ts → index-q0hXFeZ0.d.ts} +155 -8
  64. package/dist/index.d.ts +719 -6
  65. package/dist/index.js +1 -2
  66. package/dist/jev/index.d.ts +634 -0
  67. package/dist/jev/index.js +433 -0
  68. package/dist/jev/index.js.map +1 -0
  69. package/dist/machine-CdIcN2Xm.d.ts +1773 -0
  70. package/dist/machine-viz/index.d.ts +2 -1
  71. package/dist/machine-viz/index.js +12 -5
  72. package/dist/machine-viz/index.js.map +1 -1
  73. package/dist/mem/index.d.ts +19 -3
  74. package/dist/mem/index.js +22 -2
  75. package/dist/mem/index.js.map +1 -1
  76. package/dist/node/index.d.ts +130 -4
  77. package/dist/node/index.js +222 -10
  78. package/dist/node/index.js.map +1 -1
  79. package/dist/{paginator → paginate}/index.d.ts +151 -6
  80. package/dist/paginate/index.js +7 -0
  81. package/dist/parity/index.d.ts +5 -10
  82. package/dist/parity/index.js +4 -7
  83. package/dist/parity/index.js.map +1 -1
  84. package/dist/pbt/index.d.ts +248 -5
  85. package/dist/pbt/index.js +124 -5
  86. package/dist/pbt/index.js.map +1 -1
  87. package/dist/{trace-replay → persistence}/index.d.ts +7 -4
  88. package/dist/persistence/index.js +6 -0
  89. package/dist/react/index.d.ts +4 -3
  90. package/dist/react/index.js +1 -2
  91. package/dist/react/index.js.map +1 -1
  92. package/dist/resilience/index.d.ts +743 -0
  93. package/dist/resilience/index.js +657 -0
  94. package/dist/resilience/index.js.map +1 -0
  95. package/dist/retry-backoff/index.d.ts +3 -2
  96. package/dist/retry-backoff/index.js +1 -1
  97. package/dist/runtime-types-LWDoi943.d.ts +998 -0
  98. package/dist/testing/index.d.ts +3 -2
  99. package/dist/testing/index.js +1 -2
  100. package/dist/testing/index.js.map +1 -1
  101. package/dist/{throttled-input → timing}/index.d.ts +144 -12
  102. package/dist/{throttled-input → timing}/index.js +57 -12
  103. package/dist/timing/index.js.map +1 -0
  104. package/dist/{types-D7u9DkH7.d.ts → types-DP3f5NIl.d.ts} +1 -1
  105. package/dist/work-queue/index.d.ts +131 -54
  106. package/dist/work-queue/index.js +3 -2
  107. package/dist/work-queue/index.js.map +1 -1
  108. package/package.json +50 -216
  109. package/dist/authed-call/index.d.ts +0 -119
  110. package/dist/authed-call/index.js +0 -134
  111. package/dist/authed-call/index.js.map +0 -1
  112. package/dist/await-terminal/index.d.ts +0 -100
  113. package/dist/await-terminal/index.js +0 -76
  114. package/dist/await-terminal/index.js.map +0 -1
  115. package/dist/batch-window/index.js.map +0 -1
  116. package/dist/cache/index.d.ts +0 -151
  117. package/dist/cache/index.js +0 -8
  118. package/dist/chart/index.d.ts +0 -217
  119. package/dist/chart/index.js +0 -16
  120. package/dist/chart/index.js.map +0 -1
  121. package/dist/chart/inspect/index.d.ts +0 -85
  122. package/dist/chart/inspect/index.js +0 -5
  123. package/dist/chart/inspect/react.d.ts +0 -112
  124. package/dist/chart/inspect/react.js +0 -11
  125. package/dist/chart/inspect/react.js.map +0 -1
  126. package/dist/chart/inspect/styles.css +0 -286
  127. package/dist/chart/lane/index.d.ts +0 -361
  128. package/dist/chart/lane/index.js +0 -9
  129. package/dist/chart/lane/index.js.map +0 -1
  130. package/dist/chart/lane/react.d.ts +0 -83
  131. package/dist/chart/lane/react.js +0 -559
  132. package/dist/chart/lane/react.js.map +0 -1
  133. package/dist/chart/lane/server.d.ts +0 -148
  134. package/dist/chart/lane/server.js +0 -209
  135. package/dist/chart/lane/server.js.map +0 -1
  136. package/dist/chart/lane/styles.css +0 -498
  137. package/dist/chart/lane/viewer/assets/abnfDiagram-N423BO3Z-C729LI31.js +0 -1
  138. package/dist/chart/lane/viewer/assets/architectureDiagram-T3A2C74G-C729LI31.js +0 -1
  139. package/dist/chart/lane/viewer/assets/blockDiagram-VBNYF7ZC-C729LI31.js +0 -1
  140. package/dist/chart/lane/viewer/assets/c4Diagram-5PPSVZJV-C729LI31.js +0 -1
  141. package/dist/chart/lane/viewer/assets/chunk-2GRJ4B5K-HdDf8SI3.js +0 -1
  142. package/dist/chart/lane/viewer/assets/chunk-5RXB4S5H-CcNtpUd7.js +0 -231
  143. package/dist/chart/lane/viewer/assets/chunk-5VM5RSS4-BP4fRS_5.js +0 -15
  144. package/dist/chart/lane/viewer/assets/chunk-KBJHAD2P-DZOw7xU6.js +0 -1
  145. package/dist/chart/lane/viewer/assets/chunk-NSK5VX7P-CBCyTZMs.js +0 -128
  146. package/dist/chart/lane/viewer/assets/classDiagram-JCYQIIEL-C729LI31.js +0 -1
  147. package/dist/chart/lane/viewer/assets/classDiagram-v2-OCEON4UE-D4uAiFr8.js +0 -206
  148. package/dist/chart/lane/viewer/assets/cose-bilkent-JH36ORCC-DOwCrGXH.js +0 -1
  149. package/dist/chart/lane/viewer/assets/cynefinDiagram-MW4NZA55-C729LI31.js +0 -1
  150. package/dist/chart/lane/viewer/assets/dagre-K_PewWfS.js +0 -1
  151. package/dist/chart/lane/viewer/assets/dagre-VZM6K2ZE-831qZcA8.js +0 -4
  152. package/dist/chart/lane/viewer/assets/diagram-7IWD3JNH-C729LI31.js +0 -1
  153. package/dist/chart/lane/viewer/assets/diagram-B4RE2ZJO-C729LI31.js +0 -1
  154. package/dist/chart/lane/viewer/assets/diagram-LBJQPF4R-C729LI31.js +0 -1
  155. package/dist/chart/lane/viewer/assets/diagram-Q27KOJAE-C729LI31.js +0 -1
  156. package/dist/chart/lane/viewer/assets/diagram-UB23O5K3-C729LI31.js +0 -1
  157. package/dist/chart/lane/viewer/assets/ebnfDiagram-BXEA7PRR-C729LI31.js +0 -1
  158. package/dist/chart/lane/viewer/assets/erDiagram-JOGREHBK-C729LI31.js +0 -1
  159. package/dist/chart/lane/viewer/assets/flowDiagram-UKHOOZJN-C729LI31.js +0 -1
  160. package/dist/chart/lane/viewer/assets/ganttDiagram-PKOTCBZU-C729LI31.js +0 -1
  161. package/dist/chart/lane/viewer/assets/gitGraphDiagram-DS77QQ5N-C729LI31.js +0 -1
  162. package/dist/chart/lane/viewer/assets/index-9SkH5NA3.css +0 -1
  163. package/dist/chart/lane/viewer/assets/index-Bgt4sXpW.js +0 -195
  164. package/dist/chart/lane/viewer/assets/infoDiagram-6WML65LV-C729LI31.js +0 -1
  165. package/dist/chart/lane/viewer/assets/ishikawaDiagram-WSZJBQD7-C729LI31.js +0 -1
  166. package/dist/chart/lane/viewer/assets/journeyDiagram-NVQOT4AX-C729LI31.js +0 -1
  167. package/dist/chart/lane/viewer/assets/kanban-definition-27J2QSJJ-G7PaPzy-.js +0 -89
  168. package/dist/chart/lane/viewer/assets/katex-DOwCrGXH.js +0 -1
  169. package/dist/chart/lane/viewer/assets/mindmap-definition-FAOFIHXS-CGj9nrVk.js +0 -96
  170. package/dist/chart/lane/viewer/assets/path-fybaL0A-.js +0 -1
  171. package/dist/chart/lane/viewer/assets/pegDiagram-VL7TDLO6-C729LI31.js +0 -1
  172. package/dist/chart/lane/viewer/assets/pieDiagram-7S7Q4E2Y-C729LI31.js +0 -1
  173. package/dist/chart/lane/viewer/assets/quadrantDiagram-CIZ2JOQS-C729LI31.js +0 -1
  174. package/dist/chart/lane/viewer/assets/railroadDiagram-AXF67PYL-C729LI31.js +0 -1
  175. package/dist/chart/lane/viewer/assets/requirementDiagram-LRYGKXZP-C729LI31.js +0 -1
  176. package/dist/chart/lane/viewer/assets/sankeyDiagram-W5VNT64P-C729LI31.js +0 -1
  177. package/dist/chart/lane/viewer/assets/sequenceDiagram-SI44F4Z6-C729LI31.js +0 -1
  178. package/dist/chart/lane/viewer/assets/stateDiagram-OKZ733FA-B_88AzBS.js +0 -1
  179. package/dist/chart/lane/viewer/assets/stateDiagram-v2-UEYNNEHI-CR5gcgq6.js +0 -1
  180. package/dist/chart/lane/viewer/assets/swimlanes-SLNWSIFB-B4xK-rwg.js +0 -1
  181. package/dist/chart/lane/viewer/assets/swimlanesDiagram-ULZ7WXOC-C729LI31.js +0 -1
  182. package/dist/chart/lane/viewer/assets/timeline-definition-Z64GVDOM-CCv52MfY.js +0 -120
  183. package/dist/chart/lane/viewer/assets/vennDiagram-T6HMQDX7-C729LI31.js +0 -1
  184. package/dist/chart/lane/viewer/assets/wardleyDiagram-T6FBY63Y-C729LI31.js +0 -1
  185. package/dist/chart/lane/viewer/assets/xychartDiagram-ELKLHX3M-C729LI31.js +0 -1
  186. package/dist/chart/lane/viewer/index.html +0 -15
  187. package/dist/chart/report/index.d.ts +0 -116
  188. package/dist/chart/report/index.js +0 -32
  189. package/dist/chart/report/index.js.map +0 -1
  190. package/dist/chunk-2YFLOCWX.js +0 -15
  191. package/dist/chunk-2YFLOCWX.js.map +0 -1
  192. package/dist/chunk-3JU6657S.js +0 -372
  193. package/dist/chunk-3JU6657S.js.map +0 -1
  194. package/dist/chunk-4KTWLPL5.js +0 -33
  195. package/dist/chunk-4KTWLPL5.js.map +0 -1
  196. package/dist/chunk-5EHLEUTL.js +0 -686
  197. package/dist/chunk-5EHLEUTL.js.map +0 -1
  198. package/dist/chunk-5KJKJOFC.js +0 -758
  199. package/dist/chunk-5KJKJOFC.js.map +0 -1
  200. package/dist/chunk-7SVIRMC6.js.map +0 -1
  201. package/dist/chunk-7V4EVLZA.js.map +0 -1
  202. package/dist/chunk-A56OR5RF.js +0 -184
  203. package/dist/chunk-A56OR5RF.js.map +0 -1
  204. package/dist/chunk-AZZLE7XR.js +0 -62
  205. package/dist/chunk-AZZLE7XR.js.map +0 -1
  206. package/dist/chunk-B5VXOFMZ.js +0 -266
  207. package/dist/chunk-B5VXOFMZ.js.map +0 -1
  208. package/dist/chunk-BYQUGDD3.js +0 -16
  209. package/dist/chunk-BYQUGDD3.js.map +0 -1
  210. package/dist/chunk-D736QUGF.js.map +0 -1
  211. package/dist/chunk-E6GEDSF4.js +0 -307
  212. package/dist/chunk-E6GEDSF4.js.map +0 -1
  213. package/dist/chunk-EUF7XOEE.js +0 -223
  214. package/dist/chunk-EUF7XOEE.js.map +0 -1
  215. package/dist/chunk-EWJP3YYP.js.map +0 -1
  216. package/dist/chunk-FV3Z5MBE.js.map +0 -1
  217. package/dist/chunk-HCEVHFJ7.js +0 -54
  218. package/dist/chunk-HCEVHFJ7.js.map +0 -1
  219. package/dist/chunk-I5OV65MS.js.map +0 -1
  220. package/dist/chunk-J6527VRQ.js.map +0 -1
  221. package/dist/chunk-JELSZN25.js +0 -47
  222. package/dist/chunk-JELSZN25.js.map +0 -1
  223. package/dist/chunk-JER5O7PQ.js +0 -416
  224. package/dist/chunk-JER5O7PQ.js.map +0 -1
  225. package/dist/chunk-JGVL3WPL.js +0 -26
  226. package/dist/chunk-JGVL3WPL.js.map +0 -1
  227. package/dist/chunk-JP5D6GSL.js +0 -71
  228. package/dist/chunk-JP5D6GSL.js.map +0 -1
  229. package/dist/chunk-K575PT4S.js.map +0 -1
  230. package/dist/chunk-MU6MCIAC.js +0 -15
  231. package/dist/chunk-MU6MCIAC.js.map +0 -1
  232. package/dist/chunk-MUUROGIH.js.map +0 -1
  233. package/dist/chunk-ND3DH6KM.js +0 -88
  234. package/dist/chunk-ND3DH6KM.js.map +0 -1
  235. package/dist/chunk-Q2UM7BXU.js.map +0 -1
  236. package/dist/chunk-S2EGRPCM.js +0 -47
  237. package/dist/chunk-S2EGRPCM.js.map +0 -1
  238. package/dist/chunk-SINXE47Y.js +0 -55
  239. package/dist/chunk-SINXE47Y.js.map +0 -1
  240. package/dist/chunk-SUST46KO.js +0 -53
  241. package/dist/chunk-SUST46KO.js.map +0 -1
  242. package/dist/chunk-TP5UPGLY.js +0 -61
  243. package/dist/chunk-TP5UPGLY.js.map +0 -1
  244. package/dist/chunk-UF4MZSLT.js +0 -53
  245. package/dist/chunk-UF4MZSLT.js.map +0 -1
  246. package/dist/chunk-UOC2PL46.js +0 -13
  247. package/dist/chunk-UOC2PL46.js.map +0 -1
  248. package/dist/chunk-WLGO64WC.js.map +0 -1
  249. package/dist/chunk-WRAA7GVZ.js +0 -209
  250. package/dist/chunk-WRAA7GVZ.js.map +0 -1
  251. package/dist/chunk-ZCL7SCBK.js +0 -685
  252. package/dist/chunk-ZCL7SCBK.js.map +0 -1
  253. package/dist/chunk-ZD6PNZBK.js +0 -457
  254. package/dist/chunk-ZD6PNZBK.js.map +0 -1
  255. package/dist/chunk-ZF6WDK2D.js +0 -519
  256. package/dist/chunk-ZF6WDK2D.js.map +0 -1
  257. package/dist/chunk-ZJ5AOYBH.js +0 -8
  258. package/dist/chunk-ZJ5AOYBH.js.map +0 -1
  259. package/dist/chunk-ZVJZ72HY.js.map +0 -1
  260. package/dist/circuit-breaker/index.d.ts +0 -197
  261. package/dist/circuit-breaker/index.js +0 -3
  262. package/dist/circuit-breaker/index.js.map +0 -1
  263. package/dist/core-Bjc0bS8j.d.ts +0 -326
  264. package/dist/deadline/index.js +0 -6
  265. package/dist/deadline/index.js.map +0 -1
  266. package/dist/debounce/index.js +0 -3
  267. package/dist/debounce/index.js.map +0 -1
  268. package/dist/extension/react.d.ts +0 -121
  269. package/dist/extension/react.js +0 -75
  270. package/dist/extension/react.js.map +0 -1
  271. package/dist/extension/subs/index.d.ts +0 -44
  272. package/dist/extension/subs/index.js +0 -80
  273. package/dist/extension/subs/index.js.map +0 -1
  274. package/dist/extension/test-utils.d.ts +0 -128
  275. package/dist/extension/test-utils.js +0 -277
  276. package/dist/extension/test-utils.js.map +0 -1
  277. package/dist/fan-out/index.js +0 -5
  278. package/dist/fan-out/index.js.map +0 -1
  279. package/dist/fold-Blbhru48.d.ts +0 -435
  280. package/dist/graph-CcjWZVrd.d.ts +0 -923
  281. package/dist/idempotency/adapter.d.ts +0 -62
  282. package/dist/idempotency/adapter.js +0 -4
  283. package/dist/idempotency/adapter.js.map +0 -1
  284. package/dist/idempotent-intake/index.d.ts +0 -187
  285. package/dist/idempotent-intake/index.js +0 -7
  286. package/dist/idempotent-intake/index.js.map +0 -1
  287. package/dist/llm-call/index.d.ts +0 -310
  288. package/dist/llm-call/index.js +0 -16
  289. package/dist/llm-call/index.js.map +0 -1
  290. package/dist/machine-0OmPvsy_.d.ts +0 -804
  291. package/dist/monitored-run/index.js +0 -10
  292. package/dist/monitored-run/index.js.map +0 -1
  293. package/dist/paginated-walk/index.d.ts +0 -234
  294. package/dist/paginated-walk/index.js +0 -16
  295. package/dist/paginated-walk/index.js.map +0 -1
  296. package/dist/paginator/index.js +0 -3
  297. package/dist/paginator/index.js.map +0 -1
  298. package/dist/pbt/arbitraries/index.d.ts +0 -135
  299. package/dist/pbt/arbitraries/index.js +0 -3
  300. package/dist/pbt/arbitraries/index.js.map +0 -1
  301. package/dist/pbt/runners/index.d.ts +0 -117
  302. package/dist/pbt/runners/index.js +0 -5
  303. package/dist/pbt/runners/index.js.map +0 -1
  304. package/dist/poller/index.d.ts +0 -351
  305. package/dist/poller/index.js +0 -115
  306. package/dist/poller/index.js.map +0 -1
  307. package/dist/prediction/index.d.ts +0 -130
  308. package/dist/prediction/index.js +0 -4
  309. package/dist/prediction/index.js.map +0 -1
  310. package/dist/protocol-B5YmJr0d.d.ts +0 -45
  311. package/dist/pure/index.d.ts +0 -2
  312. package/dist/pure/index.js +0 -4
  313. package/dist/pure/index.js.map +0 -1
  314. package/dist/rate-limit/index.d.ts +0 -115
  315. package/dist/rate-limit/index.js +0 -3
  316. package/dist/rate-limit/index.js.map +0 -1
  317. package/dist/reconciler/index.d.ts +0 -192
  318. package/dist/reconciler/index.js +0 -164
  319. package/dist/reconciler/index.js.map +0 -1
  320. package/dist/recorder/index.js +0 -3
  321. package/dist/recorder/index.js.map +0 -1
  322. package/dist/reducer-BqyoVyBG.d.ts +0 -447
  323. package/dist/resilient-call/index.d.ts +0 -319
  324. package/dist/resilient-call/index.js +0 -14
  325. package/dist/resilient-call/index.js.map +0 -1
  326. package/dist/retry-to-success/index.d.ts +0 -109
  327. package/dist/retry-to-success/index.js +0 -37
  328. package/dist/retry-to-success/index.js.map +0 -1
  329. package/dist/run-BVeqJDBF.d.ts +0 -713
  330. package/dist/runtime-types-Bxc637bp.d.ts +0 -502
  331. package/dist/saga/index.d.ts +0 -240
  332. package/dist/saga/index.js +0 -150
  333. package/dist/saga/index.js.map +0 -1
  334. package/dist/samples-DCt6nF8H.d.ts +0 -59
  335. package/dist/snapshot/index.js +0 -5
  336. package/dist/snapshot/index.js.map +0 -1
  337. package/dist/subs/index.d.ts +0 -471
  338. package/dist/subs/index.js +0 -7
  339. package/dist/subs/index.js.map +0 -1
  340. package/dist/throttle/index.d.ts +0 -134
  341. package/dist/throttle/index.js +0 -3
  342. package/dist/throttle/index.js.map +0 -1
  343. package/dist/throttled-input/index.js.map +0 -1
  344. package/dist/token-refresh/index.d.ts +0 -215
  345. package/dist/token-refresh/index.js +0 -6
  346. package/dist/token-refresh/index.js.map +0 -1
  347. package/dist/trace-replay/index.js +0 -6
  348. package/dist/trace-replay/index.js.map +0 -1
  349. package/dist/with-deadline/index.d.ts +0 -196
  350. package/dist/with-deadline/index.js +0 -111
  351. package/dist/with-deadline/index.js.map +0 -1
  352. package/dist/with-resilience/index.d.ts +0 -224
  353. package/dist/with-resilience/index.js +0 -240
  354. package/dist/with-resilience/index.js.map +0 -1
  355. package/dist/with-telemetry/index.d.ts +0 -149
  356. package/dist/with-telemetry/index.js +0 -70
  357. package/dist/with-telemetry/index.js.map +0 -1
  358. package/dist/work-queue/adapter.d.ts +0 -83
  359. package/dist/work-queue/adapter.js +0 -4
  360. package/dist/work-queue/adapter.js.map +0 -1
  361. package/dist/work-queue/ops.d.ts +0 -70
  362. package/dist/work-queue/ops.js +0 -3
  363. package/dist/work-queue/ops.js.map +0 -1
  364. package/dist/workflow/index.d.ts +0 -484
  365. package/dist/workflow/index.js +0 -244
  366. package/dist/workflow/index.js.map +0 -1
  367. /package/dist/{cache → paginate}/index.js.map +0 -0
  368. /package/dist/{chart/inspect → persistence}/index.js.map +0 -0
@@ -1,164 +0,0 @@
1
- import { createPaginatedWalk, PAGE_KEY } from '../chunk-I5OV65MS.js';
2
- import '../chunk-SINXE47Y.js';
3
- import '../chunk-EUF7XOEE.js';
4
- import '../chunk-JELSZN25.js';
5
- export { deadlineSub, subscribeDeadline } from '../chunk-JGVL3WPL.js';
6
- import '../chunk-Q2UM7BXU.js';
7
- import '../chunk-S2EGRPCM.js';
8
- import '../chunk-UF4MZSLT.js';
9
- import { initCache, get, set } from '../chunk-7SVIRMC6.js';
10
- import '../chunk-3JU6657S.js';
11
- import '../chunk-2YFLOCWX.js';
12
- import '../chunk-ZJ5AOYBH.js';
13
- import '../chunk-5EHLEUTL.js';
14
- import '../chunk-B5VXOFMZ.js';
15
-
16
- // src/reconciler/index.ts
17
- function createReconciler(config, rng = Math.random) {
18
- const walk = createPaginatedWalk(
19
- {
20
- firstPage: config.firstPage,
21
- nextCursor: config.nextCursor,
22
- // The walk's per-page hook emits no Cmds — the reconciler accumulates the
23
- // page's items itself in `pageOk` (where it holds its own slice), so the
24
- // walk's onPage stays empty.
25
- onPage: () => [],
26
- retry: config.retry,
27
- circuit: config.circuit,
28
- rateLimit: config.rateLimit,
29
- deadline: config.deadline
30
- },
31
- rng
32
- );
33
- function changeId(change) {
34
- return config.idOf ? config.idOf(change) : JSON.stringify(change);
35
- }
36
- function withWalk(s, w) {
37
- return { ...s, walk: w };
38
- }
39
- function init() {
40
- return {
41
- phase: "idle",
42
- walk: walk.init(),
43
- actual: [],
44
- plan: [],
45
- appliedCursor: 0,
46
- applied: initCache()
47
- };
48
- }
49
- function scan(s, at) {
50
- if (s.phase !== "idle") return [s, []];
51
- const [w, cmds] = walk.start(s.walk, at);
52
- const next = { ...s, phase: "scanning", walk: w };
53
- return [next, cmds];
54
- }
55
- function pageOk(s, page, at) {
56
- if (s.phase !== "scanning") {
57
- const [w2] = walk.pageOk(s.walk, page, at);
58
- return [withWalk(s, w2), []];
59
- }
60
- const [w, walkCmds] = walk.pageOk(s.walk, page, at);
61
- const actual = [...s.actual, ...config.itemsOf(page)];
62
- const scanned = { ...s, walk: w, actual };
63
- const cmds = walkCmds;
64
- if (walk.isComplete(scanned.walk)) {
65
- const [plannedState, applyCmds] = planned(scanned, at);
66
- return [plannedState, [...cmds, ...applyCmds]];
67
- }
68
- return [scanned, cmds];
69
- }
70
- function pageErr(s, error, at) {
71
- const [w, cmds] = walk.pageErr(s.walk, error, at);
72
- let next = withWalk(s, w);
73
- if (s.phase === "scanning" && w.resilience.calls[PAGE_KEY]?.phase === "failed") {
74
- next = { ...next, phase: "failed" };
75
- }
76
- return [next, cmds];
77
- }
78
- function planned(s, at, changes) {
79
- const plan = changes ?? config.diff(config.desired, s.actual);
80
- const planning = {
81
- ...s,
82
- phase: "applying",
83
- plan,
84
- appliedCursor: 0
85
- };
86
- return applyNext(planning, at);
87
- }
88
- function applyNext(s, at) {
89
- if (s.phase !== "applying") return [s, []];
90
- let cursor = s.appliedCursor;
91
- while (cursor < s.plan.length) {
92
- const change = s.plan[cursor];
93
- if (change === void 0) {
94
- cursor++;
95
- continue;
96
- }
97
- const id = changeId(change);
98
- if (get(s.applied, id, at) === void 0) {
99
- const advanced = { ...s, appliedCursor: cursor };
100
- return [advanced, [config.apply(change)]];
101
- }
102
- cursor++;
103
- }
104
- const done = { ...s, phase: "done", appliedCursor: cursor };
105
- return [done, []];
106
- }
107
- function applied(s, change, at) {
108
- if (s.phase !== "applying") return [s, []];
109
- const id = changeId(change);
110
- const applied2 = set(
111
- s.applied,
112
- id,
113
- change,
114
- at,
115
- Number.MAX_SAFE_INTEGER
116
- );
117
- const advanced = {
118
- ...s,
119
- applied: applied2,
120
- appliedCursor: s.appliedCursor + 1
121
- };
122
- return applyNext(advanced, at);
123
- }
124
- function onTimer(s, msg) {
125
- const [w, cmds] = walk.onTimer(s.walk, msg);
126
- if (w === s.walk) {
127
- return [s, []];
128
- }
129
- let next = withWalk(s, w);
130
- if (s.phase === "scanning" && w.resilience.calls[PAGE_KEY]?.phase === "failed") {
131
- next = { ...next, phase: "failed" };
132
- }
133
- return [next, cmds];
134
- }
135
- function isComplete(s) {
136
- return s.phase === "done";
137
- }
138
- function subs(s) {
139
- return walk.subs(s.walk);
140
- }
141
- function handlers(ports) {
142
- return walk.handlers(ports);
143
- }
144
- return {
145
- init,
146
- scan,
147
- pageOk,
148
- pageErr,
149
- planned,
150
- applyNext,
151
- applied,
152
- onTimer,
153
- isComplete,
154
- subs,
155
- handlers
156
- };
157
- }
158
- function liftReconciler(state, [slice, cmds]) {
159
- return [{ ...state, rec: slice }, cmds];
160
- }
161
-
162
- export { createReconciler, liftReconciler };
163
- //# sourceMappingURL=index.js.map
164
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/reconciler/index.ts"],"names":["w","applied"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @demlik/tea/reconciler — the desired-vs-actual sync loop (the \"fleet-sync /\n * coverage-gap\" shape): walk the ACTUAL world end to end, diff it against the\n * DESIRED spec, then apply each resulting `Change` one at a time until the two\n * agree. The control-plane reconcile pattern (Kubernetes controllers, fleet\n * config rollout, accessibility coverage-gap remediation) lifted to the uniform\n * L2 knob contract.\n *\n * ## The recipe (which bricks it composes)\n *\n * - **`../paginated-walk`** owns the SCAN. The actual world is rarely a single\n * fetch — it is a paginated list (every node in a fleet, every page of an\n * audit, every row of a table). `reconciler` does not re-implement that walk:\n * it embeds a `paginated-walk` slice and lets it sequence the actual-state\n * fetch (gated, retried, rate-limited, resumable across eviction). The walk's\n * own `onPage` hook stays empty (`() => []`) — `reconciler` accumulates each\n * fetched page's items into the running `actual` snapshot inside its OWN\n * `pageOk` verb, where it holds its slice and so can extend the accumulator\n * the walk cannot see; when the walk reports `isComplete`, the full actual\n * snapshot is in hand.\n * - **`../cache`** owns the APPLIED ledger. Every `Change` that settles is\n * written into a TTL cache keyed by the change's id, so a re-`applyNext`\n * after an eviction skips changes already applied (idempotent re-apply — the\n * reconcile is safe to resume from any point). The cache is the durable\n * \"what have I already done?\" memory the apply loop reads before re-issuing.\n *\n * Because the scan IS a `paginated-walk` slice (which itself IS a\n * `resilient-call` slice), this knob **inherits that contract verbatim**: the\n * slice is flat plain data, every verb returns `readonly [State, Cmd[]]`, time\n * is always an `at` parameter, and the jitter RNG is injected once at\n * `createReconciler(config, rng)` — never read inside a verb (the spec:\n * `reconciler` *extends* `paginated-walk`).\n *\n * ## Why the run lifecycle is INLINE (run-tracker not extracted)\n *\n * The reconcile phase union (`idle` / `scanning` / `applying` / `done` /\n * `failed`) and its bookkeeping (`plan`, `appliedCursor`, the `actual`\n * accumulator) live directly on this slice rather than behind a `run-tracker`\n * sub-knob — exactly as `monitored-run` keeps its lifecycle inline. Extraction\n * earns its keep when two independent axes vary; here the lifecycle has one\n * anchoring axis (this reconcile pass). The genuinely independent axes — the\n * paginated SCAN and the applied LEDGER — ARE extracted (`../paginated-walk`,\n * `../cache`). The lifecycle is the glue that sequences scan → plan → apply.\n *\n * ## The two non-negotiables (canon)\n *\n * - **Durable** — the slice is plain data: the paginated-walk slice, the\n * accumulated `actual` items, the planned `Change[]`, the applied cursor, and\n * the applied-ledger cache (all JSON-serializable). A reconcile survives DO\n * eviction mid-scan or mid-apply and resumes from the exact position.\n * - **Replayable** — every transition is a verb returning new state + Cmds.\n * `diff` / `apply` are pure config functions applied at the verb boundary;\n * the Cmds they yield are plain data. `replay` reconstructs the whole pass\n * exactly. Nothing here closes over time or RNG.\n *\n * ## Where the clock / RNG live\n *\n * Inside the verbs: nowhere. `at` arrives on `scan` / `pageOk` / `pageErr` /\n * `applied` / `onTimer` and threads into the underlying paginated-walk gate (so a\n * retried / rate-limited page measures backoff from that `at`) and into the\n * applied-ledger cache writes. The jitter RNG is injected at construction. The\n * only clock read is `Date.now()` inside the inherited paginated-walk `handlers`\n * port (the effect boundary).\n *\n * ## Typical wiring\n *\n * const rec = createReconciler<FleetNode, NodeSpec, Page, SyncChange, ApplyCmd>({\n * desired: targetSpecs, // the spec to converge on\n * firstPage: null, // actual-list page-one sentinel\n * nextCursor: (page) => page.next ?? null,\n * itemsOf: (page) => page.nodes, // page → actual items\n * diff: (desired, actual) => planChanges(desired, actual),\n * apply: (change) => ({ type: \"apply_change\", change }),\n * idOf: (change) => change.nodeId, // applied-ledger key\n * rateLimit: { capacity: 10, refillPerSec: 5 },\n * retry: defaultRetryPolicy,\n * });\n *\n * // in the machine:\n * init: () => [{ rec: rec.init() }, []],\n * update: {\n * reconcile: (s, m) => lift(s, rec.scan(s.rec, m.at)),\n * page_ok: (s, m) => lift(s, rec.pageOk(s.rec, m.result, m.at)),\n * page_err: (s, m) => lift(s, rec.pageErr(s.rec, m.error, m.at)),\n * change_done: (s, m) => lift(s, rec.applied(s.rec, m.change, m.at)),\n * retry_due: (s, m) => lift(s, rec.onTimer(s.rec, m)),\n * },\n * subscriptions: (s) => rec.subs(s.rec),\n * subscribe: { deadline: subscribeDeadline },\n * interpret: rec.handlers({ run: (cursor) => api.listActual(cursor) }),\n */\n\nimport {\n get as cacheGet,\n set as cacheSet,\n initCache,\n type TtlCache,\n} from \"../cache\";\nimport type { Cmd } from \"../index\";\nimport {\n createPaginatedWalk,\n type DeadlineSub,\n deadlineSub,\n type FetchPageCmd,\n PAGE_KEY,\n type PageErrMsg,\n type PageOkMsg,\n type PaginatedWalkState,\n type PaginatedWalkTimerMsg,\n subscribeDeadline,\n} from \"../paginated-walk\";\nimport type {\n CircuitConfig,\n DeadlineConfig,\n RateLimitConfig,\n ResilientPorts,\n} from \"../resilient-call\";\nimport type { RetryPolicy } from \"../retry-backoff\";\n\n// ===========================================================================\n// Config — the knob. `desired` / `diff` / `apply` / `idOf` describe the\n// reconcile; the SCAN knobs (firstPage / nextCursor / itemsOf) describe how the\n// actual world is walked; the resilience bricks are inherited from\n// paginated-walk (every one optional — omit a brick, omit its gate).\n// ===========================================================================\n\n/**\n * The reconciler knob. Generic in:\n * - `Actual` — one item of the ACTUAL world (a fleet node, an audited page, a\n * table row). The scan accumulates these.\n * - `Desired` — the DESIRED spec value the diff converges toward. Opaque to\n * this module; only `diff` reads it.\n * - `Page` — the shape one actual-list page fetch resolves with.\n * - `Change` — one unit of remediation the diff produces and `apply` realizes.\n * - `ApplyCmd`— the Cmd `apply(change)` yields (the effect that mutates the\n * actual world toward desired).\n *\n * `diff` / `apply` / `idOf` / `nextCursor` / `itemsOf` are PURE config functions\n * applied at the verb boundary, never stored in the slice or in a Cmd (Cmds are\n * plain data, not closures). The resilience bricks (`retry` / `circuit` /\n * `rateLimit` / `deadline`) are the SAME optional knobs `paginated-walk` /\n * `resilient-call` expose — reconciler extends them; `rateLimit` keeps the scan\n * from 429-ing the upstream listing API.\n */\nexport interface ReconcilerConfig<\n Actual,\n Desired,\n Page,\n Change,\n ApplyCmd extends Cmd,\n Cursor = number,\n> {\n /**\n * The DESIRED spec to converge on. Held verbatim and handed to `diff` once the\n * scan completes. Any JSON-serializable value — a list of specs, a target map,\n * a single target object — `diff` alone interprets it.\n */\n readonly desired: Desired;\n /**\n * Compute the remediation plan: the ordered `Change[]` that moves `actual` to\n * `desired`. Called once when the scan finishes (the full actual snapshot is in\n * hand). An empty plan means \"already in sync — nothing to apply\". PURE +\n * consumer-specific (only the consumer knows the domain's reconcile rules).\n */\n readonly diff: (\n desired: Desired,\n actual: readonly Actual[],\n ) => readonly Change[];\n /**\n * Realize one `Change` as the Cmd that mutates the actual world. Returns plain\n * data (a `{ type, ... }` Cmd the consumer's interpret handler performs).\n * PURE — the side effect happens when the runtime performs the emitted Cmd,\n * never here.\n */\n readonly apply: (change: Change) => ApplyCmd;\n /**\n * Stable identity for a `Change` — the applied-ledger cache key. A re-`applyNext`\n * after eviction (or after a re-plan) skips a change whose id is already in the\n * ledger (idempotent re-apply). MUST be a property of the change itself, NOT its\n * position in the plan: the ledger has to survive re-planning. When omitted the\n * default keys by the change's serialized CONTENT (`JSON.stringify(change)`) —\n * a stable per-change identity that is unchanged by where the change sits in the\n * plan. Supply a domain id (the target node id, the resource key) when one\n * exists; it is cheaper than serializing and dedupes two changes that differ\n * only in fields irrelevant to identity. PURE.\n *\n * Why NOT positional: keying by index silently drops changes on the documented\n * re-plan path. After applying the index-0 change, its `\"0\"` ledger entry would\n * match WHATEVER different, never-applied change lands at index 0 in the next\n * plan — the apply loop skips it as \"already done\". Identity must be intrinsic\n * to the change so the ledger means \"this change settled\", not \"slot N settled\".\n */\n readonly idOf?: (change: Change) => string;\n\n // --- scan knobs (the actual-world walk), inherited from paginated-walk ---\n /**\n * The cursor the actual-list scan fetches first. For an offset API typically\n * `0`; for a token API whatever sentinel the API treats as page one.\n */\n readonly firstPage: Cursor;\n /**\n * Extract the next scan cursor from a fetched page — a `Cursor` to keep\n * scanning, or `null` when the actual listing is exhausted (scan finishes,\n * plan computed). PURE + consumer-specific.\n */\n readonly nextCursor: (page: Page) => Cursor | null;\n /**\n * Extract the actual items from one fetched page. Each page's items are\n * appended to the running `actual` accumulator. PURE.\n */\n readonly itemsOf: (page: Page) => readonly Actual[];\n\n // --- resilience bricks, inherited from paginated-walk (all optional) ---\n /** Exponential-backoff retry policy for a transient scan-page failure. */\n readonly retry?: RetryPolicy;\n /** Circuit breaker around the scan fetch (one upstream → one breaker). */\n readonly circuit?: CircuitConfig;\n /** Token-bucket rate limit on the scan — the \"don't 429 the listing API\" knob. */\n readonly rateLimit?: RateLimitConfig;\n /** Overall wall-clock deadline per individual scan-page fetch. */\n readonly deadline?: DeadlineConfig;\n}\n\n// ===========================================================================\n// Slice — the Model field this knob owns. The paginated-walk scan slice + the\n// accumulated actual snapshot + the inline reconcile lifecycle (plan, applied\n// cursor, ledger). All flat plain data.\n// ===========================================================================\n\n/**\n * Reconcile lifecycle phase. Discriminated on `phase`:\n *\n * - `idle` — created, never scanned. `scan` starts the actual-world walk.\n * - `scanning` — the paginated-walk is traversing the actual listing; pages\n * fold into `actual` as they arrive. The scan owns the `walk`\n * sub-slice; this phase ends when the walk finishes.\n * - `applying` — the scan finished, `diff` produced the `plan`, and changes are\n * being applied one at a time. `appliedCursor` is the index of\n * the next change to apply.\n * - `done` — every planned change applied (or an empty plan: already in\n * sync). Terminal.\n * - `failed` — the scan failed terminally (the page-fetch retries were\n * exhausted / a deadline fired). `error` carries why. Terminal.\n */\nexport type ReconcilePhase =\n | \"idle\"\n | \"scanning\"\n | \"applying\"\n | \"done\"\n | \"failed\";\n\n/**\n * The slice. Plain data end to end:\n * - `phase` — the lifecycle discriminant.\n * - `walk` — the `../paginated-walk` scan slice (cursor + resilience).\n * Drives the actual-world traversal; POSITION survives\n * eviction.\n * - `actual` — the accumulated actual items, appended page by page during\n * the scan. The full snapshot `diff` is computed against.\n * - `plan` — the `Change[]` `diff` produced. Empty until the scan\n * finishes; the apply loop walks it by `appliedCursor`.\n * - `appliedCursor` — index of the NEXT change to apply (0 ≤ cursor ≤ plan.length).\n * `cursor === plan.length` means every change applied.\n * - `applied` — the applied-ledger cache: `idOf(change) → change`, written\n * as each change settles. The idempotency memory the apply\n * loop reads to skip already-applied changes after eviction.\n */\nexport interface ReconcilerState<Actual, Change, Page, Cursor = number> {\n readonly phase: ReconcilePhase;\n readonly walk: PaginatedWalkState<Cursor, Page>;\n readonly actual: readonly Actual[];\n readonly plan: readonly Change[];\n readonly appliedCursor: number;\n readonly applied: TtlCache<Change>;\n}\n\n// ===========================================================================\n// Cmds + Msgs the knob speaks. The scan emits the inherited page-fetch effect;\n// the apply loop emits the consumer's `apply(change)` Cmds.\n// ===========================================================================\n\n/**\n * The actual-list page-fetch effect: the inherited `resilient_run` Cmd from\n * paginated-walk, whose `input` is the `Cursor` to fetch and whose `key` is the\n * fixed `PAGE_KEY`. The consumer's `handlers(ports)` interprets it.\n */\nexport type ScanPageCmd<Cursor> = FetchPageCmd<Cursor>;\n\n/** Page-settled Msgs the scan `handlers` port dispatches back (inherited verbatim). */\nexport type ScanPageOkMsg<Page> = PageOkMsg<Page>;\nexport type ScanPageErrMsg = PageErrMsg;\n\n/** The scan retry / deadline timer Msg — inherited from paginated-walk. */\nexport type ReconcilerTimerMsg = PaginatedWalkTimerMsg;\n\n/**\n * Ports the consumer supplies to `handlers`. `run(cursor)` fetches ONE page of\n * the ACTUAL listing for the given cursor; throwing routes to `pageErr` (and\n * thus the scan backoff). Same shape as paginated-walk's port.\n */\nexport interface ReconcilerPorts<Cursor, Page>\n extends ResilientPorts<Cursor, Page> {}\n\n// ===========================================================================\n// The knob factory.\n// ===========================================================================\n\n/**\n * Build a reconciler knob from `config`. `rng` is injected for the underlying\n * scan-retry jitter — pass a fixed `() => 0` in tests to pin backoff; defaults\n * to `Math.random` (read at the verb boundary inside resilient-call, never in a\n * reconciler verb). Inherited straight from paginated-walk.\n *\n * Returns the uniform L2 knob contract: `init()`, the verbs `scan` / `pageOk` /\n * `pageErr` / `planned` / `applyNext` / `applied` / `onTimer`, the derived\n * `isComplete`, `subs(state)`, and `handlers(ports)`.\n */\nexport function createReconciler<\n Actual,\n Desired,\n Page,\n Change,\n ApplyCmd extends Cmd = Cmd,\n Cursor = number,\n>(\n config: ReconcilerConfig<Actual, Desired, Page, Change, ApplyCmd, Cursor>,\n rng: () => number = Math.random,\n) {\n type State = ReconcilerState<Actual, Change, Page, Cursor>;\n // The combined Cmd type the verbs can emit: the inherited scan page-fetch\n // effect plus whatever `apply(change)` yields.\n type OutCmd = ScanPageCmd<Cursor> | ApplyCmd;\n\n // The scan is a paginated-walk over the actual listing. We feed it the scan\n // cursor knobs + the resilience bricks; `onPage` is OURS — it is a pure marker\n // (we accumulate items in `pageOk` instead, where we hold the reconciler\n // slice). The walk's `Page` payload is the consumer's `Page`; the reconciler\n // slice stores the walk as `PaginatedWalkState<Cursor, unknown>` so its own\n // type does not have to thread `Page` (the page never lands in the slice — only\n // the extracted `actual` items do).\n const walk = createPaginatedWalk<Cursor, Page, never>(\n {\n firstPage: config.firstPage,\n nextCursor: config.nextCursor,\n // The walk's per-page hook emits no Cmds — the reconciler accumulates the\n // page's items itself in `pageOk` (where it holds its own slice), so the\n // walk's onPage stays empty.\n onPage: () => [],\n retry: config.retry,\n circuit: config.circuit,\n rateLimit: config.rateLimit,\n deadline: config.deadline,\n },\n rng,\n );\n\n /**\n * The applied-ledger key for a change. Custom `idOf` when supplied; otherwise\n * the change's serialized CONTENT — a stable per-change identity. NEVER the\n * positional index: an index-keyed ledger drops a never-applied change that\n * happens to land at a slot a different, already-applied change once occupied\n * (the re-plan defect). Identity is intrinsic to the change, so the ledger\n * means \"this change settled\", surviving a re-plan that reorders the slots.\n */\n function changeId(change: Change): string {\n return config.idOf ? config.idOf(change) : JSON.stringify(change);\n }\n\n /** Replace the walk sub-slice, leaving the rest of the reconciler untouched. */\n function withWalk(s: State, w: State[\"walk\"]): State {\n return { ...s, walk: w };\n }\n\n /** The starting slice: idle, fresh walk + empty accumulator / plan / ledger. */\n function init(): State {\n return {\n phase: \"idle\",\n walk: walk.init(),\n actual: [],\n plan: [],\n appliedCursor: 0,\n applied: initCache<Change>(),\n };\n }\n\n // === Verb: scan ==========================================================\n\n /**\n * Begin the reconcile: start the paginated walk over the ACTUAL world and\n * enter `scanning`. Issues the first scan-page fetch (gated through the\n * inherited resilience). A no-op on any non-`idle` phase — re-scanning a\n * reconcile already in flight would restart the actual walk and double-count,\n * so a stray `scan` is absorbed. PURE — `at` threads into the fetch gate.\n */\n function scan(s: State, at: number): readonly [State, readonly OutCmd[]] {\n if (s.phase !== \"idle\") return [s, []];\n const [w, cmds] = walk.start(s.walk, at);\n const next: State = { ...s, phase: \"scanning\", walk: w };\n return [next, cmds];\n }\n\n // === Verb: pageOk ========================================================\n\n /**\n * Record a successfully fetched actual-list `page`: append its items to the\n * `actual` accumulator and advance the walk. When the walk finishes (the\n * listing is exhausted), the full actual snapshot is in hand → compute the\n * plan (`planned`) and start applying. PURE — `at` is the scan clock.\n *\n * A stray `pageOk` while not `scanning` (a late duplicate after the scan\n * completed) is absorbed by the walk (no cursor advance) and contributes no\n * items — the reconcile never re-accumulates after the plan is computed.\n */\n function pageOk(\n s: State,\n page: Page,\n at: number,\n ): readonly [State, readonly OutCmd[]] {\n // Once we are past scanning, the actual snapshot is frozen — absorb stray pages.\n if (s.phase !== \"scanning\") {\n const [w] = walk.pageOk(s.walk, page, at);\n return [withWalk(s, w), []];\n }\n\n const [w, walkCmds] = walk.pageOk(s.walk, page, at);\n const actual = [...s.actual, ...config.itemsOf(page)];\n const scanned: State = { ...s, walk: w, actual };\n\n // The walk emits the next scan-page fetch while it stays fetching. When it\n // finishes (done / paused with no fetch), `walkCmds` is empty.\n const cmds: readonly OutCmd[] = walkCmds;\n\n // Scan exhausted → plan + begin applying. `walk.isComplete` is the honest\n // \"the API returned a null next cursor\" signal.\n if (walk.isComplete(scanned.walk)) {\n const [plannedState, applyCmds] = planned(scanned, at);\n return [plannedState, [...cmds, ...applyCmds]];\n }\n\n return [scanned, cmds];\n }\n\n // === Verb: pageErr =======================================================\n\n /**\n * Record a failed scan-page fetch and back off via the inherited resilience:\n * schedule a retry (the scan cursor stays parked — no advance) or, once the\n * page-fetch retries are exhausted, the underlying call settles `failed`. When\n * the scan call is terminally failed, the whole reconcile enters `failed`.\n * PURE — `at` stamps the breaker trip + the retry-delay base.\n */\n function pageErr(\n s: State,\n error: unknown,\n at: number,\n ): readonly [State, readonly OutCmd[]] {\n const [w, cmds] = walk.pageErr(s.walk, error, at);\n let next = withWalk(s, w);\n // The page-fetch call settling `failed` (retries exhausted) is a terminal\n // scan failure → the reconcile cannot trust an incomplete actual snapshot.\n if (\n s.phase === \"scanning\" &&\n w.resilience.calls[PAGE_KEY]?.phase === \"failed\"\n ) {\n next = { ...next, phase: \"failed\" };\n }\n return [next, cmds];\n }\n\n // === Verb: planned =======================================================\n\n /**\n * Compute the remediation plan from the accumulated `actual` snapshot and the\n * configured `desired`, store it, and enter `applying`. Normally driven\n * internally by `pageOk` when the scan finishes, but exposed as a\n * verb so a consumer can force planning from an externally-supplied actual\n * snapshot (e.g. a single-shot actual fetch outside the paginated scan), or\n * re-plan after a desired change. An empty plan settles straight to `done`\n * (already in sync). PURE — `at` only stamps the (empty) apply-loop clock.\n *\n * `changes` is optional: omit it to diff the slice's own accumulated `actual`\n * against `config.desired`; pass an explicit plan to install it directly\n * (skipping the diff — the consumer computed it elsewhere).\n */\n function planned(\n s: State,\n at: number,\n changes?: readonly Change[],\n ): readonly [State, readonly OutCmd[]] {\n const plan = changes ?? config.diff(config.desired, s.actual);\n const planning: State = {\n ...s,\n phase: \"applying\",\n plan,\n appliedCursor: 0,\n };\n return applyNext(planning, at);\n }\n\n // === Verb: applyNext =====================================================\n\n /**\n * Emit the apply Cmd for the next not-yet-applied change in the plan, skipping\n * any whose id is already in the applied ledger (idempotent re-apply after\n * eviction). Advances `appliedCursor` past skipped + the emitted change. When\n * the cursor reaches the end of the plan, settles `done`. A no-op unless\n * `applying`. PURE — `at` is read only for the ledger lookup clock; `idOf`\n * keys the skip check.\n *\n * Emits at most ONE apply Cmd per call (the loop is sequential: each `applied`\n * drives the next `applyNext`). This keeps the actual-world mutation\n * one-at-a-time, matching a controller's serial reconcile.\n */\n function applyNext(\n s: State,\n at: number,\n ): readonly [State, readonly OutCmd[]] {\n if (s.phase !== \"applying\") return [s, []];\n\n let cursor = s.appliedCursor;\n // Skip changes already in the ledger (a resumed reconcile re-issues from the\n // cursor but must not re-apply what already settled).\n while (cursor < s.plan.length) {\n const change = s.plan[cursor];\n // `cursor < plan.length` guarantees an element under normal indexing; the\n // explicit `undefined` narrow (vs a non-null assertion) keeps the access\n // typed without a suppression and tolerates a sparse hole by skipping it.\n if (change === undefined) {\n cursor++;\n continue;\n }\n const id = changeId(change);\n if (cacheGet(s.applied, id, at) === undefined) {\n // This change is not yet applied — emit its Cmd and park the cursor here\n // (it advances to cursor+1 only once `applied` confirms the change).\n const advanced: State = { ...s, appliedCursor: cursor };\n return [advanced, [config.apply(change)]];\n }\n cursor++;\n }\n\n // Every change applied → reconcile complete.\n const done: State = { ...s, phase: \"done\", appliedCursor: cursor };\n return [done, []];\n }\n\n // === Verb: applied =======================================================\n\n /**\n * Record that `change` finished applying: write it into the applied ledger,\n * advance the cursor past it, and drive the next `applyNext`. PURE — `at` is\n * the ledger-write clock (the entry never expires in practice; a large TTL\n * keeps the idempotency window open for the reconcile's lifetime).\n *\n * `change` is the SAME change the consumer's apply handler settled (echoed back\n * on the settle Msg) — its id is computed from the change's own identity (NOT a\n * cursor position), so the ledger key matches the skip check in `applyNext`\n * regardless of where the change sits in the plan. A no-op unless `applying` (a\n * late settle after `done` is ignored). PURE.\n */\n function applied(\n s: State,\n change: Change,\n at: number,\n ): readonly [State, readonly OutCmd[]] {\n if (s.phase !== \"applying\") return [s, []];\n const id = changeId(change);\n // A very large TTL: the ledger entry must outlive the whole reconcile pass.\n // `get(..., at)` treats it as fresh for `at < expiresAtMs`, which holds for\n // any realistic reconcile (the cache exists to dedupe within one pass).\n const applied = cacheSet(\n s.applied,\n id,\n change,\n at,\n Number.MAX_SAFE_INTEGER,\n );\n const advanced: State = {\n ...s,\n applied,\n appliedCursor: s.appliedCursor + 1,\n };\n return applyNext(advanced, at);\n }\n\n // === Verb: onTimer =======================================================\n\n /**\n * A scan retry / deadline timer fired. Defers to paginated-walk's `onTimer`: a\n * retry timer re-issues the SAME scan-page fetch (re-fetching the parked\n * cursor); a deadline timer settles the scan call failed. A deadline-driven\n * terminal scan failure escalates the whole reconcile to `failed`. A stale fire\n * is a pure no-op (inherited identity). PURE.\n */\n function onTimer(\n s: State,\n msg: ReconcilerTimerMsg,\n ): readonly [State, readonly OutCmd[]] {\n const [w, cmds] = walk.onTimer(s.walk, msg);\n if (w === s.walk) {\n // Inherited no-op identity → keep our slice identity too.\n return [s, []];\n }\n let next = withWalk(s, w);\n if (\n s.phase === \"scanning\" &&\n w.resilience.calls[PAGE_KEY]?.phase === \"failed\"\n ) {\n next = { ...next, phase: \"failed\" };\n }\n return [next, cmds];\n }\n\n // === Derived predicate ===================================================\n\n /**\n * Whether the reconcile has fully settled — every planned change applied (or an\n * empty plan: already in sync). PURE, read-only. Lets a consumer's reducer fire\n * a \"reconcile complete\" Cmd without re-checking the phase by hand.\n */\n function isComplete(s: State): boolean {\n return s.phase === \"done\";\n }\n\n // === Subs ================================================================\n\n /**\n * Pre-wired subscriptions: exactly the scan's paginated-walk subs — a retry\n * timer while a scan page is `waiting_retry`, and (with the `deadline` brick) a\n * per-page deadline timer while a scan fetch is active. The apply loop emits no\n * timers (each apply settles via the consumer's own Msg), so once the scan\n * finishes the desired sub set empties. Reconciled by id; wire `subscribe: {\n * deadline: subscribeDeadline }` (re-exported below).\n */\n function subs(s: State): readonly DeadlineSub[] {\n return walk.subs(s.walk);\n }\n\n // === Handlers ============================================================\n\n /**\n * Pre-wired interpret handler for the scan page-fetch effect. Inherited from\n * paginated-walk (`resilient_run`): wraps the consumer's `run(cursor)` actual-\n * list port via `tryInterpret` (Railway) — success → `resilient_ok` (handled by\n * `pageOk`), failure → `resilient_err` (handled by `pageErr`), each stamped\n * with `Date.now()` at the effect boundary (the ONE permitted clock read).\n *\n * interpret: rec.handlers({ run: (cursor) => api.listActual(cursor) })\n *\n * The apply-Cmd side is the CONSUMER's interpret handler (it knows how to\n * realize `apply(change)`); the consumer routes its settle Msg back through\n * `applied`. This knob only owns the scan's interpret cell.\n */\n function handlers(ports: ReconcilerPorts<Cursor, Page>) {\n return walk.handlers(ports);\n }\n\n return {\n init,\n scan,\n pageOk,\n pageErr,\n planned,\n applyNext,\n applied,\n onTimer,\n isComplete,\n subs,\n handlers,\n };\n}\n\n/**\n * Lift a knob result `[slice, cmds]` into a host `[State, cmds]` where the slice\n * lives at `state.rec`. Convenience for the common single-slice host; hosts with\n * a differently-named field spread by hand. PURE — a thin record rebuild, no\n * clock / RNG.\n */\nexport function liftReconciler<\n S extends { rec: ReconcilerState<Actual, Change, Page, Cursor> },\n Actual,\n Change,\n Page,\n Cursor,\n C extends Cmd,\n>(\n state: S,\n [slice, cmds]: readonly [\n ReconcilerState<Actual, Change, Page, Cursor>,\n readonly C[],\n ],\n): readonly [S, readonly C[]] {\n return [{ ...state, rec: slice }, cmds];\n}\n\n/**\n * Re-export the deadline Sub primitives (inherited from paginated-walk) so\n * consumers wire one import: `subscribeDeadline` is the `subscribe` cell,\n * `deadlineSub` builds the Sub literal this knob's `subs` emits.\n */\nexport { subscribeDeadline, deadlineSub };\nexport type { DeadlineSub };\n"]}
@@ -1,3 +0,0 @@
1
- export { breadcrumbsFromTrace, parseJSONL, recorder, traceAttachment } from '../chunk-MUUROGIH.js';
2
- //# sourceMappingURL=index.js.map
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}