@sixb/core 0.1.2 → 0.1.3

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 (264) hide show
  1. package/dist/actions/index.js +16 -13
  2. package/dist/actions/index.js.map +1 -1
  3. package/dist/agents/adapters.d.ts +11 -1
  4. package/dist/agents/adapters.d.ts.map +1 -1
  5. package/dist/agents/context.js +1 -1
  6. package/dist/agents/errors.d.ts +1 -1
  7. package/dist/agents/errors.d.ts.map +1 -1
  8. package/dist/agents/execution.d.ts +3 -0
  9. package/dist/agents/execution.d.ts.map +1 -1
  10. package/dist/agents/index.d.ts +6 -3
  11. package/dist/agents/index.d.ts.map +1 -1
  12. package/dist/agents/index.js +33 -22
  13. package/dist/agents/index.js.map +1 -1
  14. package/dist/agents/prompt.d.ts +8 -2
  15. package/dist/agents/prompt.d.ts.map +1 -1
  16. package/dist/agents/request.d.ts.map +1 -1
  17. package/dist/agents/streams.js +2 -2
  18. package/dist/agents/thread-context-projection.d.ts +19 -0
  19. package/dist/agents/thread-context-projection.d.ts.map +1 -0
  20. package/dist/agents/tool-definition.d.ts.map +1 -1
  21. package/dist/agents/tool-result.d.ts +6 -0
  22. package/dist/agents/tool-result.d.ts.map +1 -0
  23. package/dist/agents/types.d.ts +37 -1
  24. package/dist/agents/types.d.ts.map +1 -1
  25. package/dist/agents/validation.d.ts +1 -1
  26. package/dist/agents/validation.d.ts.map +1 -1
  27. package/dist/auth/index.js +7 -5
  28. package/dist/auth/index.js.map +1 -1
  29. package/dist/authorization/index.js +1 -1
  30. package/dist/bootstrap/index.js +27 -24
  31. package/dist/bootstrap/index.js.map +1 -1
  32. package/dist/{chunk-0mbx247x.js → chunk-177ed2mp.js} +241 -45
  33. package/dist/chunk-177ed2mp.js.map +46 -0
  34. package/dist/{chunk-sa4340y1.js → chunk-1ywq4hzk.js} +7 -7
  35. package/dist/{chunk-zg9yryhz.js → chunk-261ag4t4.js} +3 -3
  36. package/dist/{chunk-k9pts48t.js → chunk-3rsf30p4.js} +5 -5
  37. package/dist/{chunk-8ryen3p3.js → chunk-4aw0jwk0.js} +1 -1
  38. package/dist/{chunk-bh6k3nc6.js → chunk-4p9rh7jj.js} +1 -1
  39. package/dist/{chunk-34bqh420.js → chunk-4z3n1dzt.js} +59 -21
  40. package/dist/{chunk-34bqh420.js.map → chunk-4z3n1dzt.js.map} +4 -4
  41. package/dist/chunk-96swp2wd.js +47 -0
  42. package/dist/chunk-96swp2wd.js.map +10 -0
  43. package/dist/{chunk-n8herkry.js → chunk-bv41fmjn.js} +11 -11
  44. package/dist/{chunk-7pc8b818.js → chunk-c6cfqydk.js} +1 -1
  45. package/dist/{chunk-0k4avqr2.js → chunk-c8bw2b6c.js} +2 -2
  46. package/dist/{chunk-jaj13078.js → chunk-d2adj15j.js} +3 -33
  47. package/dist/{chunk-jaj13078.js.map → chunk-d2adj15j.js.map} +3 -4
  48. package/dist/{chunk-c6qd89g5.js → chunk-d6y2wsfg.js} +3 -3
  49. package/dist/chunk-dysw7nsm.js.map +1 -1
  50. package/dist/{chunk-st4xgxey.js → chunk-ettb0cy4.js} +150 -23
  51. package/dist/chunk-ettb0cy4.js.map +45 -0
  52. package/dist/{chunk-nnyp53zt.js → chunk-f1cyvnrk.js} +1 -1
  53. package/dist/chunk-fmx1sz2h.js.map +2 -2
  54. package/dist/{chunk-bct7hmfc.js → chunk-km4rkj4t.js} +3 -3
  55. package/dist/chunk-kqxgf6kv.js +898 -0
  56. package/dist/chunk-kqxgf6kv.js.map +15 -0
  57. package/dist/{chunk-qvybnnpe.js → chunk-n5x5y80a.js} +2 -2
  58. package/dist/{chunk-4x43bkbp.js → chunk-pxtrxm3p.js} +1 -1
  59. package/dist/chunk-qer6am8w.js +133 -0
  60. package/dist/chunk-qer6am8w.js.map +11 -0
  61. package/dist/{chunk-85j5ybfj.js → chunk-rdeagz6b.js} +2 -2
  62. package/dist/{chunk-85j5ybfj.js.map → chunk-rdeagz6b.js.map} +3 -3
  63. package/dist/chunk-rhrbz7d4.js +36 -0
  64. package/dist/chunk-rhrbz7d4.js.map +10 -0
  65. package/dist/{chunk-663csy96.js → chunk-t0jjkep3.js} +2 -1
  66. package/dist/chunk-t0jjkep3.js.map +10 -0
  67. package/dist/{chunk-5egfka8j.js → chunk-ttba8x6z.js} +2 -2
  68. package/dist/{chunk-nten49ta.js → chunk-wb4051cx.js} +3 -3
  69. package/dist/{chunk-nten49ta.js.map → chunk-wb4051cx.js.map} +1 -1
  70. package/dist/{chunk-57r1cpxx.js → chunk-xc7hq65b.js} +3 -2
  71. package/dist/{chunk-57r1cpxx.js.map → chunk-xc7hq65b.js.map} +3 -3
  72. package/dist/{chunk-ys1nse2v.js → chunk-xmggaxg4.js} +256 -231
  73. package/dist/{chunk-ys1nse2v.js.map → chunk-xmggaxg4.js.map} +8 -10
  74. package/dist/{chunk-g9t3kdtx.js → chunk-z8j83gzd.js} +1 -1
  75. package/dist/{chunk-57zpb99z.js → chunk-zpw39qhj.js} +1 -1
  76. package/dist/execution/agent.js +23 -20
  77. package/dist/execution/agent.js.map +1 -1
  78. package/dist/execution/primitive.js +23 -20
  79. package/dist/execution/primitive.js.map +2 -2
  80. package/dist/execution/request.js +24 -21
  81. package/dist/execution/request.js.map +2 -2
  82. package/dist/index.d.ts +3 -3
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +32 -29
  85. package/dist/index.js.map +1 -1
  86. package/dist/materialization/model.d.ts +4 -0
  87. package/dist/materialization/model.d.ts.map +1 -1
  88. package/dist/materializer/edits/apply.d.ts +6 -1
  89. package/dist/materializer/edits/apply.d.ts.map +1 -1
  90. package/dist/materializer/edits/working-state.d.ts +2 -0
  91. package/dist/materializer/edits/working-state.d.ts.map +1 -1
  92. package/dist/materializer/effective/resolve.d.ts +3 -1
  93. package/dist/materializer/effective/resolve.d.ts.map +1 -1
  94. package/dist/materializer/execution/work-records.d.ts.map +1 -1
  95. package/dist/materializer/index.js +14 -11
  96. package/dist/materializer/index.js.map +1 -1
  97. package/dist/materializer/projections/replacement-plan.d.ts.map +1 -1
  98. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  99. package/dist/objects/index.js +17 -14
  100. package/dist/objects/index.js.map +1 -1
  101. package/dist/objects/query/index.js +2 -2
  102. package/dist/pipelines/index.js +14 -12
  103. package/dist/pipelines/index.js.map +1 -1
  104. package/dist/projections/builders.d.ts +19 -6
  105. package/dist/projections/builders.d.ts.map +1 -1
  106. package/dist/projections/index.d.ts +2 -1
  107. package/dist/projections/index.d.ts.map +1 -1
  108. package/dist/projections/internal.d.ts +4 -1
  109. package/dist/projections/internal.d.ts.map +1 -1
  110. package/dist/projections/internal.js +17 -11
  111. package/dist/projections/internal.js.map +1 -1
  112. package/dist/projections/timestamp.d.ts +3 -0
  113. package/dist/projections/timestamp.d.ts.map +1 -0
  114. package/dist/projections/types.d.ts +9 -0
  115. package/dist/projections/types.d.ts.map +1 -1
  116. package/dist/projections/validation.d.ts.map +1 -1
  117. package/dist/queues/index.d.ts +1 -1
  118. package/dist/queues/index.d.ts.map +1 -1
  119. package/dist/queues/types.d.ts +7 -0
  120. package/dist/queues/types.d.ts.map +1 -1
  121. package/dist/runtime/ai-cost.d.ts +8 -0
  122. package/dist/runtime/ai-cost.d.ts.map +1 -0
  123. package/dist/storage/agents/in-memory.d.ts +18 -4
  124. package/dist/storage/agents/in-memory.d.ts.map +1 -1
  125. package/dist/storage/agents/index.d.ts +1 -1
  126. package/dist/storage/agents/index.d.ts.map +1 -1
  127. package/dist/storage/agents/provider.d.ts +31 -0
  128. package/dist/storage/agents/provider.d.ts.map +1 -1
  129. package/dist/storage/agents/provider.js +18 -7
  130. package/dist/storage/agents/provider.js.map +1 -1
  131. package/dist/storage/agents/types.d.ts +70 -4
  132. package/dist/storage/agents/types.d.ts.map +1 -1
  133. package/dist/storage/ai-cost/analytics.d.ts +61 -0
  134. package/dist/storage/ai-cost/analytics.d.ts.map +1 -0
  135. package/dist/storage/ai-cost/codec.d.ts +14 -0
  136. package/dist/storage/ai-cost/codec.d.ts.map +1 -0
  137. package/dist/storage/ai-cost/errors.d.ts +7 -0
  138. package/dist/storage/ai-cost/errors.d.ts.map +1 -0
  139. package/dist/storage/ai-cost/in-memory.d.ts +32 -0
  140. package/dist/storage/ai-cost/in-memory.d.ts.map +1 -0
  141. package/dist/storage/ai-cost/index.d.ts +6 -0
  142. package/dist/storage/ai-cost/index.d.ts.map +1 -0
  143. package/dist/storage/ai-cost/provider.d.ts +7 -0
  144. package/dist/storage/ai-cost/provider.d.ts.map +1 -0
  145. package/dist/storage/ai-cost/provider.js +132 -0
  146. package/dist/storage/ai-cost/provider.js.map +10 -0
  147. package/dist/storage/ai-cost/types.d.ts +154 -0
  148. package/dist/storage/ai-cost/types.d.ts.map +1 -0
  149. package/dist/storage/ai-cost/validation.d.ts +7 -0
  150. package/dist/storage/ai-cost/validation.d.ts.map +1 -0
  151. package/dist/storage/in-memory/index.d.ts +5 -0
  152. package/dist/storage/in-memory/index.d.ts.map +1 -1
  153. package/dist/storage/index.d.ts +3 -1
  154. package/dist/storage/index.d.ts.map +1 -1
  155. package/dist/storage/index.js +22 -15
  156. package/dist/storage/index.js.map +1 -1
  157. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  158. package/dist/storage/ontology/materializations.d.ts +3 -0
  159. package/dist/storage/ontology/materializations.d.ts.map +1 -1
  160. package/dist/storage/operation-scope.d.ts.map +1 -1
  161. package/dist/storage/operation-scope.js +1 -1
  162. package/dist/storage/types.d.ts +2 -0
  163. package/dist/storage/types.d.ts.map +1 -1
  164. package/dist/storage/workflow-runs/provider.js +6 -5
  165. package/dist/storage/workflow-runs/provider.js.map +1 -1
  166. package/dist/syncs/index.js +14 -12
  167. package/dist/syncs/index.js.map +1 -1
  168. package/dist/testing/agent-storage-contract.d.ts +3 -2
  169. package/dist/testing/agent-storage-contract.d.ts.map +1 -1
  170. package/dist/testing/ai-cost-storage-contract.d.ts +12 -0
  171. package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -0
  172. package/dist/testing/index.d.ts +1 -0
  173. package/dist/testing/index.d.ts.map +1 -1
  174. package/dist/testing/index.js +2098 -1468
  175. package/dist/testing/index.js.map +6 -5
  176. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  177. package/dist/webhooks/internal.js +12 -10
  178. package/dist/webhooks/internal.js.map +2 -2
  179. package/dist/workers/index.js +12 -2
  180. package/dist/workers/index.js.map +3 -3
  181. package/dist/workers/queue-worker.d.ts +2 -0
  182. package/dist/workers/queue-worker.d.ts.map +1 -1
  183. package/dist/workflows/execution.d.ts +3 -0
  184. package/dist/workflows/execution.d.ts.map +1 -1
  185. package/dist/workflows/index.js +24 -21
  186. package/dist/workflows/index.js.map +1 -1
  187. package/package.json +7 -1
  188. package/src/agents/adapters.ts +64 -23
  189. package/src/agents/errors.ts +2 -2
  190. package/src/agents/execution.ts +14 -2
  191. package/src/agents/index.ts +18 -1
  192. package/src/agents/prompt.ts +33 -5
  193. package/src/agents/request.ts +5 -0
  194. package/src/agents/thread-context-projection.ts +93 -0
  195. package/src/agents/tool-definition.ts +17 -2
  196. package/src/agents/tool-result.ts +61 -0
  197. package/src/agents/types.ts +47 -1
  198. package/src/agents/validation.ts +1 -1
  199. package/src/index.ts +13 -0
  200. package/src/materialization/model.ts +4 -0
  201. package/src/materializer/edits/apply.ts +55 -2
  202. package/src/materializer/edits/operations.ts +8 -1
  203. package/src/materializer/edits/working-state.ts +7 -0
  204. package/src/materializer/effective/resolve.ts +78 -9
  205. package/src/materializer/execution/work-records.ts +3 -1
  206. package/src/materializer/projections/entry-validator.ts +23 -1
  207. package/src/materializer/projections/replacement-plan.ts +2 -0
  208. package/src/materializer/shared/normalize.ts +16 -0
  209. package/src/projections/builders.ts +100 -35
  210. package/src/projections/index.ts +6 -0
  211. package/src/projections/internal.ts +4 -1
  212. package/src/projections/registry.ts +7 -0
  213. package/src/projections/revision.ts +4 -0
  214. package/src/projections/timestamp.ts +66 -0
  215. package/src/projections/types.ts +7 -0
  216. package/src/projections/validation.ts +24 -0
  217. package/src/queues/index.ts +1 -0
  218. package/src/queues/types.ts +8 -0
  219. package/src/runtime/ai-cost.ts +15 -0
  220. package/src/storage/agents/in-memory.ts +171 -4
  221. package/src/storage/agents/index.ts +5 -0
  222. package/src/storage/agents/provider.ts +225 -0
  223. package/src/storage/agents/types.ts +77 -3
  224. package/src/storage/ai-cost/analytics.ts +602 -0
  225. package/src/storage/ai-cost/codec.ts +136 -0
  226. package/src/storage/ai-cost/errors.ts +12 -0
  227. package/src/storage/ai-cost/in-memory.ts +164 -0
  228. package/src/storage/ai-cost/index.ts +35 -0
  229. package/src/storage/ai-cost/provider.ts +20 -0
  230. package/src/storage/ai-cost/types.ts +193 -0
  231. package/src/storage/ai-cost/validation.ts +337 -0
  232. package/src/storage/in-memory/index.ts +50 -0
  233. package/src/storage/index.ts +37 -0
  234. package/src/storage/ontology/in-memory/materializations.ts +1 -0
  235. package/src/storage/ontology/materializations.ts +3 -0
  236. package/src/storage/operation-scope.ts +1 -0
  237. package/src/storage/types.ts +2 -0
  238. package/src/testing/agent-storage-contract.ts +341 -2
  239. package/src/testing/ai-cost-storage-contract.ts +320 -0
  240. package/src/testing/index.ts +5 -0
  241. package/src/testing/materializer-storage-contract.ts +120 -2
  242. package/src/workers/queue-worker.ts +14 -1
  243. package/src/workflows/execution.ts +31 -10
  244. package/dist/chunk-0mbx247x.js.map +0 -43
  245. package/dist/chunk-663csy96.js.map +0 -10
  246. package/dist/chunk-st4xgxey.js.map +0 -45
  247. package/dist/chunk-vp1vc6ee.js +0 -35
  248. package/dist/chunk-vp1vc6ee.js.map +0 -11
  249. /package/dist/{chunk-sa4340y1.js.map → chunk-1ywq4hzk.js.map} +0 -0
  250. /package/dist/{chunk-zg9yryhz.js.map → chunk-261ag4t4.js.map} +0 -0
  251. /package/dist/{chunk-k9pts48t.js.map → chunk-3rsf30p4.js.map} +0 -0
  252. /package/dist/{chunk-8ryen3p3.js.map → chunk-4aw0jwk0.js.map} +0 -0
  253. /package/dist/{chunk-bh6k3nc6.js.map → chunk-4p9rh7jj.js.map} +0 -0
  254. /package/dist/{chunk-n8herkry.js.map → chunk-bv41fmjn.js.map} +0 -0
  255. /package/dist/{chunk-7pc8b818.js.map → chunk-c6cfqydk.js.map} +0 -0
  256. /package/dist/{chunk-0k4avqr2.js.map → chunk-c8bw2b6c.js.map} +0 -0
  257. /package/dist/{chunk-c6qd89g5.js.map → chunk-d6y2wsfg.js.map} +0 -0
  258. /package/dist/{chunk-nnyp53zt.js.map → chunk-f1cyvnrk.js.map} +0 -0
  259. /package/dist/{chunk-bct7hmfc.js.map → chunk-km4rkj4t.js.map} +0 -0
  260. /package/dist/{chunk-qvybnnpe.js.map → chunk-n5x5y80a.js.map} +0 -0
  261. /package/dist/{chunk-4x43bkbp.js.map → chunk-pxtrxm3p.js.map} +0 -0
  262. /package/dist/{chunk-5egfka8j.js.map → chunk-ttba8x6z.js.map} +0 -0
  263. /package/dist/{chunk-g9t3kdtx.js.map → chunk-z8j83gzd.js.map} +0 -0
  264. /package/dist/{chunk-57zpb99z.js.map → chunk-zpw39qhj.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"materializer-storage-contract.d.ts","sourceRoot":"","sources":["../../src/testing/materializer-storage-contract.ts"],"names":[],"mappings":"AACA,OAAO,EASL,KAAK,OAAO,EACb,MAAM,IAAI,CAAA;AAeX,MAAM,WAAW,mCAAmC,CAAC,QAAQ,SAAS,OAAO;IAC3E,QAAQ,CAAC,aAAa,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/D;AAuDD,wBAAgB,mCAAmC,CAAC,QAAQ,SAAS,OAAO,EAC1E,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,mCAAmC,CAAC,QAAQ,CAAC,GACtD,IAAI,CAsWN"}
1
+ {"version":3,"file":"materializer-storage-contract.d.ts","sourceRoot":"","sources":["../../src/testing/materializer-storage-contract.ts"],"names":[],"mappings":"AACA,OAAO,EASL,KAAK,OAAO,EACb,MAAM,IAAI,CAAA;AAeX,MAAM,WAAW,mCAAmC,CAAC,QAAQ,SAAS,OAAO;IAC3E,QAAQ,CAAC,aAAa,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/D;AAgFD,wBAAgB,mCAAmC,CAAC,QAAQ,SAAS,OAAO,EAC1E,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,mCAAmC,CAAC,QAAQ,CAAC,GACtD,IAAI,CAmcN"}
@@ -1,25 +1,26 @@
1
1
  // @bun
2
2
  import {
3
3
  createPrimitiveExecutionRecord
4
- } from "../chunk-8ryen3p3.js";
4
+ } from "../chunk-4aw0jwk0.js";
5
5
  import {
6
6
  canRetryWebhookRun,
7
7
  isStorageSerializationFailure
8
- } from "../chunk-ys1nse2v.js";
8
+ } from "../chunk-xmggaxg4.js";
9
9
  import"../chunk-fmx1sz2h.js";
10
- import"../chunk-57r1cpxx.js";
10
+ import"../chunk-xc7hq65b.js";
11
11
  import"../chunk-cy0n5dms.js";
12
12
  import"../chunk-dysw7nsm.js";
13
13
  import"../chunk-62c7t4jc.js";
14
14
  import {
15
15
  WebhookRunError
16
16
  } from "../chunk-ezake7g1.js";
17
- import"../chunk-4x43bkbp.js";
17
+ import"../chunk-pxtrxm3p.js";
18
18
  import"../chunk-htq0qh7z.js";
19
19
  import"../chunk-xkthy56g.js";
20
- import"../chunk-vp1vc6ee.js";
21
- import"../chunk-qvybnnpe.js";
20
+ import"../chunk-qer6am8w.js";
21
+ import"../chunk-n5x5y80a.js";
22
22
  import"../chunk-t9xghkva.js";
23
+ import"../chunk-kqxgf6kv.js";
23
24
  import"../chunk-5gd7tpv6.js";
24
25
  import {
25
26
  ExecutionStorageError
@@ -35,10 +36,11 @@ import"../chunk-rnshztfq.js";
35
36
  import"../chunk-04b07a9q.js";
36
37
  import"../chunk-dktq02ne.js";
37
38
  import"../chunk-zqysyfjt.js";
38
- import"../chunk-663csy96.js";
39
- import"../chunk-jaj13078.js";
39
+ import"../chunk-t0jjkep3.js";
40
+ import"../chunk-d2adj15j.js";
41
+ import"../chunk-rhrbz7d4.js";
40
42
  import"../chunk-xwnf87e1.js";
41
- import"../chunk-34bqh420.js";
43
+ import"../chunk-4z3n1dzt.js";
42
44
  import"../chunk-0172wgm9.js";
43
45
  import"../chunk-t8t39h7v.js";
44
46
  import"../chunk-y64skrwp.js";
@@ -147,4 +149,4 @@ export {
147
149
  admitWebhookRun
148
150
  };
149
151
 
150
- //# debugId=630799CB6A90821964756E2164756E21
152
+ //# debugId=A21F13420826A31E64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { randomUUID } from \"node:crypto\"\nimport { createPrimitiveExecutionRecord } from \"../execution/durable\"\nimport type { ExecutionRecord, Storage, WebhookRunRecord } from \"../storage\"\nimport {\n canRetryWebhookRun,\n ExecutionStorageError,\n isStorageSerializationFailure,\n WebhookRunError,\n} from \"../storage\"\n\nconst MAX_ADMISSION_ATTEMPTS = 3\n\nexport interface AdmitWebhookRunInput {\n readonly projectId: string\n readonly storage: Storage\n readonly runId: string\n readonly connectorId: string\n readonly webhookId: string\n readonly method: string\n readonly route: string\n readonly requestBodyBytes: number\n readonly requestBodySha256: string\n readonly idempotencyKey?: string\n}\n\nexport type AdmitWebhookRunResult =\n | {\n readonly status: \"admitted\"\n readonly run: WebhookRunRecord\n readonly execution: ExecutionRecord\n readonly retried: boolean\n }\n | {\n readonly status: \"duplicate\" | \"in_progress\"\n readonly run: WebhookRunRecord\n }\n\n/** Persist or reclaim one verified Webhook delivery before its protected handler executes. */\nexport async function admitWebhookRun(input: AdmitWebhookRunInput): Promise<AdmitWebhookRunResult> {\n assertAdmissionInput(input)\n let attempt = 0\n\n // Concurrent deliveries may both observe no run before one transaction commits. Retry only\n // serialization and uniqueness races so the loser can reload the winning run; every other error\n // fails immediately, and repeated contention remains bounded by MAX_ADMISSION_ATTEMPTS.\n while (true) {\n attempt += 1\n try {\n return await input.storage.transaction((tx) => admitWebhookRunTransaction(tx, input), {\n isolation: \"serializable\",\n })\n } catch (error) {\n if (attempt >= MAX_ADMISSION_ATTEMPTS || !isConcurrentAdmissionConflict(error)) {\n throw error\n }\n }\n }\n}\n\nasync function admitWebhookRunTransaction(\n storage: Storage,\n input: AdmitWebhookRunInput\n): Promise<AdmitWebhookRunResult> {\n const runs = requireWebhookRunStorage(storage)\n const existing = input.idempotencyKey\n ? await runs.getByDelivery({\n projectId: input.projectId,\n connectorId: input.connectorId,\n webhookId: input.webhookId,\n idempotencyKey: input.idempotencyKey,\n })\n : null\n\n if (existing) {\n assertSameDelivery(existing, input)\n if (existing.status === \"running\") return { status: \"in_progress\", run: existing }\n if (!canRetryWebhookRun(existing)) return { status: \"duplicate\", run: existing }\n\n const execution = await requireWebhookExecution(storage, existing)\n const run = await runs.restart({\n projectId: input.projectId,\n id: existing.id,\n })\n return { status: \"admitted\", run, execution, retried: true }\n }\n\n const executionInput = createPrimitiveExecutionRecord({\n id: `exec_${randomUUID()}`,\n primitive: { kind: \"webhook\", id: input.route, runId: input.runId },\n origin: {\n type: \"automatic\",\n projectId: input.projectId,\n source: { type: \"webhook\", deliveryId: input.runId },\n correlationId: input.runId,\n },\n })\n const execution = await storage.executions.create(executionInput)\n const run = await runs.start({\n id: input.runId,\n projectId: input.projectId,\n executionId: execution.id,\n connectorId: input.connectorId,\n webhookId: input.webhookId,\n method: input.method,\n route: input.route,\n requestBodyBytes: input.requestBodyBytes,\n requestBodySha256: input.requestBodySha256,\n idempotencyKey: input.idempotencyKey,\n })\n return { status: \"admitted\", run, execution, retried: false }\n}\n\nfunction assertSameDelivery(existing: WebhookRunRecord, input: AdmitWebhookRunInput): void {\n if (\n existing.connectorId !== input.connectorId ||\n existing.webhookId !== input.webhookId ||\n existing.method !== input.method ||\n existing.route !== input.route ||\n existing.requestBodyBytes !== input.requestBodyBytes ||\n existing.requestBodySha256 !== input.requestBodySha256\n ) {\n throw new WebhookRunError(\n `[Sixb] Webhook delivery '${input.idempotencyKey}' conflicts with run '${existing.id}'.`,\n \"delivery_conflict\"\n )\n }\n}\n\nasync function requireWebhookExecution(\n storage: Storage,\n run: WebhookRunRecord\n): Promise<ExecutionRecord> {\n const execution = await storage.executions.getById({\n projectId: run.projectId,\n id: run.executionId,\n })\n if (!execution) {\n throw new WebhookRunError(\n `[Sixb] Execution '${run.executionId}' for Webhook run '${run.id}' was not found.`,\n \"invalid_execution\"\n )\n }\n return execution\n}\n\nfunction requireWebhookRunStorage(storage: Storage): NonNullable<Storage[\"webhookRuns\"]> {\n if (!storage.webhookRuns) {\n throw new WebhookRunError(\"[Sixb] Webhook run storage is not configured.\")\n }\n return storage.webhookRuns\n}\n\nfunction assertAdmissionInput(input: AdmitWebhookRunInput): void {\n if (input.idempotencyKey !== undefined && !input.idempotencyKey.trim()) {\n throw new WebhookRunError(\"[Sixb] Webhook idempotency key must not be empty.\")\n }\n if (!Number.isSafeInteger(input.requestBodyBytes) || input.requestBodyBytes < 0) {\n throw new WebhookRunError(\"[Sixb] Webhook request body bytes must be a non-negative integer.\")\n }\n if (!/^[a-f0-9]{64}$/.test(input.requestBodySha256)) {\n throw new WebhookRunError(\"[Sixb] Webhook request body SHA-256 must be lowercase hexadecimal.\")\n }\n}\n\nfunction isConcurrentAdmissionConflict(error: unknown): boolean {\n return (\n isStorageSerializationFailure(error) ||\n (error instanceof ExecutionStorageError && error.code === \"duplicate_execution\") ||\n (error instanceof WebhookRunError &&\n (error.code === \"duplicate_run\" || error.code === \"invalid_transition\"))\n )\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "630799CB6A90821964756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "A21F13420826A31E64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -341,10 +341,13 @@ class QueueWorker extends Worker {
341
341
  failureCodes: config.failureCodes,
342
342
  workerId: config.workerId,
343
343
  leaseMs: config.leaseMs ?? DEFAULT_LEASE_MS,
344
- claimLimit: config.claimLimit ?? DEFAULT_CLAIM_LIMIT,
344
+ claimLimit: normalizeClaimLimit(config.claimLimit),
345
345
  idlePollMs: config.idlePollMs ?? DEFAULT_IDLE_POLL_MS
346
346
  };
347
347
  }
348
+ get concurrency() {
349
+ return this.config.claimLimit;
350
+ }
348
351
  async run(signal) {
349
352
  const inFlight = new Set;
350
353
  let runError = null;
@@ -463,6 +466,13 @@ class QueueWorker extends Worker {
463
466
  await delivery.fail(failure);
464
467
  }
465
468
  }
469
+ function normalizeClaimLimit(value) {
470
+ const claimLimit = value ?? DEFAULT_CLAIM_LIMIT;
471
+ if (!Number.isSafeInteger(claimLimit) || claimLimit < 1) {
472
+ throw new Error("[SixbQueueWorker] Worker concurrency must be a positive safe integer.");
473
+ }
474
+ return claimLimit;
475
+ }
466
476
  async function settleOrLog(delivery, operation, settle) {
467
477
  try {
468
478
  await settle();
@@ -502,4 +512,4 @@ export {
502
512
  QueueDeliveryLeaseLostError
503
513
  };
504
514
 
505
- //# debugId=FB9E1269A35CC91864756E2164756E21
515
+ //# debugId=3392AF504C53F2C564756E2164756E21
@@ -5,9 +5,9 @@
5
5
  "/**\n * Thrown by worker primitives when an operation is interrupted by `stop()`.\n *\n * `name` is `\"AbortError\"` so it interoperates with the DOM `AbortSignal`\n * convention used across the codebase.\n */\nexport class WorkerAbortError extends Error {\n readonly name = \"AbortError\"\n}\n\n/** Raised after a worker exhausts its bounded restart budget. */\nexport class WorkerUnhealthyError extends Error {\n readonly name = \"WorkerUnhealthyError\"\n\n constructor(\n readonly workerName: string,\n readonly restartCount: number,\n options?: ErrorOptions\n ) {\n super(\n `[SixbWorker] ${workerName} is unhealthy after ${restartCount} restart attempt(s).`,\n options\n )\n }\n}\n",
6
6
  "import type { SixbErrorCode } from \"../errors/types\"\nimport type { ClaimedQueueJob, Queue, QueueJob, QueueJobFailure } from \"../queues\"\nimport { WorkerAbortError } from \"./errors\"\n\nexport type QueueDeliveryState = \"active\" | \"lost\" | \"settled\"\n\n/**\n * Outcome of a settlement call. `\"lost\"` means the queue job was **not** acknowledged because\n * ownership was already gone — the job may be redelivered. Settlement never throws for a lost\n * lease; exceptions are reserved for queue calls that themselves fail (outcome then unknown).\n */\nexport type QueueSettlementResult = \"settled\" | \"lost\"\n\nexport interface QueueDelivery<\n TJob extends QueueJob,\n TFailureCode extends SixbErrorCode = SixbErrorCode,\n> {\n readonly claimed: ClaimedQueueJob<TJob>\n readonly signal: AbortSignal\n readonly state: QueueDeliveryState\n /** Expiration from the latest queue-confirmed claim or renewal. */\n readonly leaseExpiresAt: string\n\n /** Observe successful queue renewals. The listener is not called for failed renewals. */\n onLeaseRenewed(listener: (claimed: ClaimedQueueJob<TJob>) => void): () => void\n complete(): Promise<QueueSettlementResult>\n retry(input?: { readonly availableAt?: string }): Promise<QueueSettlementResult>\n fail(failure: QueueJobFailure<TFailureCode>): Promise<QueueSettlementResult>\n close(): Promise<void>\n}\n\nexport interface CreateQueueDeliveryOptions<\n TJob extends QueueJob,\n TFailureCode extends SixbErrorCode,\n> {\n readonly queue: Queue<TJob, TFailureCode>\n readonly claimed: ClaimedQueueJob<TJob>\n readonly leaseMs: number\n readonly signal: AbortSignal\n readonly onLeaseLost?: () => void\n readonly onRenewalError?: (error: unknown) => void\n}\n\nconst MIN_RENEWAL_INTERVAL_MS = 1\n\nexport class QueueDeliveryLeaseLostError extends WorkerAbortError {}\n\ntype RenewalAttempt<TJob extends QueueJob> =\n | { readonly kind: \"renewed\"; readonly claimed: ClaimedQueueJob<TJob> | null }\n | { readonly kind: \"failed\"; readonly error: unknown }\n | { readonly kind: \"expired\" }\n\n/** Owns lease renewal, loss detection, and settlement for one claimed queue job. */\nexport function createQueueDelivery<TJob extends QueueJob, TFailureCode extends SixbErrorCode>(\n options: CreateQueueDeliveryOptions<TJob, TFailureCode>\n): QueueDelivery<TJob, TFailureCode> {\n return new ManagedQueueDelivery(options)\n}\n\nclass ManagedQueueDelivery<TJob extends QueueJob, TFailureCode extends SixbErrorCode>\n implements QueueDelivery<TJob, TFailureCode>\n{\n readonly claimed: ClaimedQueueJob<TJob>\n readonly signal: AbortSignal\n\n private readonly queue: Queue<TJob, TFailureCode>\n private readonly leaseMs: number\n private readonly renewLease: Queue<TJob, TFailureCode>[\"renewLease\"]\n private readonly onLeaseLost: (() => void) | undefined\n private readonly onRenewalError: ((error: unknown) => void) | undefined\n private readonly lossController = new AbortController()\n private readonly stopController = new AbortController()\n private readonly renewalIntervalMs: number\n private readonly renewalLoop: Promise<void>\n private readonly leaseRenewedListeners = new Set<(claimed: ClaimedQueueJob<TJob>) => void>()\n private currentState: QueueDeliveryState = \"active\"\n private currentLeaseExpiresAt: string\n private leaseExpiresAtTimestamp: number\n private renewalErrorReported = false\n private closing: Promise<void> | null = null\n private settling = false\n\n constructor(options: CreateQueueDeliveryOptions<TJob, TFailureCode>) {\n this.queue = options.queue\n this.claimed = options.claimed\n this.leaseMs = options.leaseMs\n this.renewLease = options.queue.renewLease?.bind(options.queue)\n this.onLeaseLost = options.onLeaseLost\n this.onRenewalError = options.onRenewalError\n this.currentLeaseExpiresAt = options.claimed.leaseExpiresAt\n this.leaseExpiresAtTimestamp = parseLeaseExpiration(options.claimed.leaseExpiresAt)\n this.renewalIntervalMs = Math.max(MIN_RENEWAL_INTERVAL_MS, Math.floor(options.leaseMs / 3))\n this.signal = AbortSignal.any([options.signal, this.lossController.signal])\n this.renewalLoop = this.runRenewalLoop()\n }\n\n get state(): QueueDeliveryState {\n return this.currentState\n }\n\n get leaseExpiresAt(): string {\n return this.currentLeaseExpiresAt\n }\n\n onLeaseRenewed(listener: (claimed: ClaimedQueueJob<TJob>) => void): () => void {\n this.leaseRenewedListeners.add(listener)\n return () => this.leaseRenewedListeners.delete(listener)\n }\n\n complete(): Promise<QueueSettlementResult> {\n return this.settle(() =>\n this.queue.complete({\n projectId: this.claimed.job.projectId,\n jobId: this.claimed.job.id,\n leaseId: this.claimed.leaseId,\n })\n )\n }\n\n retry(input: { readonly availableAt?: string } = {}): Promise<QueueSettlementResult> {\n return this.settle(() =>\n this.queue.retry({\n projectId: this.claimed.job.projectId,\n jobId: this.claimed.job.id,\n leaseId: this.claimed.leaseId,\n availableAt: input.availableAt,\n })\n )\n }\n\n fail(failure: QueueJobFailure<TFailureCode>): Promise<QueueSettlementResult> {\n return this.settle(() =>\n this.queue.fail({\n projectId: this.claimed.job.projectId,\n jobId: this.claimed.job.id,\n leaseId: this.claimed.leaseId,\n failure,\n })\n )\n }\n\n close(): Promise<void> {\n if (this.closing) return this.closing\n this.closing = this.stopRenewal()\n return this.closing\n }\n\n private async settle(operation: () => Promise<void>): Promise<QueueSettlementResult> {\n if (this.currentState !== \"active\") {\n return this.currentState === \"settled\" ? \"settled\" : \"lost\"\n }\n if (this.settling) {\n throw new Error(`[SixbQueueWorker] Queue job '${this.claimed.job.id}' is already settling.`)\n }\n\n this.settling = true\n try {\n await this.stopRenewal()\n if (!(await this.confirmSettlementLease())) return \"lost\"\n await operation()\n this.currentState = \"settled\"\n return \"settled\"\n } finally {\n this.settling = false\n }\n }\n\n private async confirmSettlementLease(): Promise<boolean> {\n if (this.currentState !== \"active\") return false\n if (Date.now() >= this.leaseExpiresAtTimestamp) {\n this.markLost()\n return false\n }\n if (!this.renewLease) return true\n\n const attempt = await this.attemptRenewal()\n if (attempt.kind === \"renewed\") {\n if (!attempt.claimed) {\n this.markLost()\n return false\n }\n this.recordRenewal(attempt.claimed)\n return true\n }\n if (attempt.kind === \"failed\") {\n this.reportRenewalError(attempt.error)\n }\n if (attempt.kind === \"expired\" || Date.now() >= this.leaseExpiresAtTimestamp) {\n this.markLost()\n return false\n }\n return true\n }\n\n private async runRenewalLoop(): Promise<void> {\n while (this.currentState === \"active\" && !this.stopController.signal.aborted) {\n const remainingMs = this.leaseExpiresAtTimestamp - Date.now()\n if (remainingMs <= 0) {\n this.markLost()\n return\n }\n\n const delayMs = this.renewLease ? Math.min(this.renewalIntervalMs, remainingMs) : remainingMs\n await sleep(delayMs, this.stopController.signal).catch(() => {})\n if (this.stopController.signal.aborted || this.currentState !== \"active\") return\n if (Date.now() >= this.leaseExpiresAtTimestamp) {\n this.markLost()\n return\n }\n if (!this.renewLease) continue\n\n const attempt = await this.attemptRenewal()\n if (attempt.kind === \"expired\") {\n this.markLost()\n return\n }\n if (attempt.kind === \"failed\") {\n this.reportRenewalError(attempt.error)\n continue\n }\n if (!attempt.claimed) {\n this.markLost()\n return\n }\n this.recordRenewal(attempt.claimed)\n }\n }\n\n private attemptRenewal(): Promise<RenewalAttempt<TJob>> {\n if (!this.renewLease || Date.now() >= this.leaseExpiresAtTimestamp) {\n return Promise.resolve({ kind: \"expired\" })\n }\n\n const remainingMs = Math.max(1, this.leaseExpiresAtTimestamp - Date.now())\n return new Promise((resolve) => {\n let finished = false\n const finish = (attempt: RenewalAttempt<TJob>): void => {\n if (finished) return\n finished = true\n clearTimeout(timer)\n resolve(attempt)\n }\n const timer = setTimeout(() => finish({ kind: \"expired\" }), remainingMs)\n\n this.renewLease?.({\n projectId: this.claimed.job.projectId,\n jobId: this.claimed.job.id,\n leaseId: this.claimed.leaseId,\n leaseMs: this.leaseMs,\n }).then(\n (claimed) => finish({ kind: \"renewed\", claimed }),\n (error) => finish({ kind: \"failed\", error })\n )\n })\n }\n\n private recordRenewal(claimed: ClaimedQueueJob<TJob>): void {\n this.currentLeaseExpiresAt = claimed.leaseExpiresAt\n this.leaseExpiresAtTimestamp = parseLeaseExpiration(claimed.leaseExpiresAt)\n this.renewalErrorReported = false\n for (const listener of this.leaseRenewedListeners) {\n try {\n listener(claimed)\n } catch (error) {\n this.onRenewalError?.(error)\n }\n }\n }\n\n private reportRenewalError(error: unknown): void {\n if (this.renewalErrorReported) return\n this.renewalErrorReported = true\n this.onRenewalError?.(error)\n }\n\n private markLost(): void {\n if (this.currentState !== \"active\") return\n this.currentState = \"lost\"\n this.lossController.abort(\n new QueueDeliveryLeaseLostError(\n `[SixbQueueWorker] Queue job '${this.claimed.job.id}' lost its lease.`\n )\n )\n this.onLeaseLost?.()\n }\n\n private async stopRenewal(): Promise<void> {\n this.stopController.abort()\n await this.renewalLoop.catch(() => {})\n }\n}\n\nfunction parseLeaseExpiration(value: string): number {\n const timestamp = Date.parse(value)\n if (!Number.isFinite(timestamp)) {\n throw new Error(`[SixbQueueWorker] Invalid queue lease expiration '${value}'.`)\n }\n return timestamp\n}\n\nasync function sleep(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) return\n await new Promise<void>((resolve) => {\n const timer = setTimeout(finish, ms)\n function finish(): void {\n clearTimeout(timer)\n signal.removeEventListener(\"abort\", finish)\n resolve()\n }\n signal.addEventListener(\"abort\", finish, { once: true })\n })\n}\n",
7
7
  "import { WorkerUnhealthyError } from \"./errors\"\n\n// The budget rides out ~80s of continuous failure (0.1s -> 30s backoffs) before the worker is\n// declared unhealthy, so a transient infra outage does not kill an otherwise healthy process.\nconst MAX_RESTARTS = 10\nconst RESTART_BACKOFF_MS = 100\nconst MAX_RESTART_BACKOFF_MS = 30_000\nconst STABLE_RUN_MS = 60_000\n\n/** Base worker lifecycle with bounded restart supervision. */\nexport abstract class Worker {\n /** Base restart backoff. Overridable so budget-exhaustion tests do not wait out real backoffs. */\n protected readonly restartBackoffMs: number = RESTART_BACKOFF_MS\n private controller: AbortController | null = null\n private running: Promise<void> | null = null\n\n async start(): Promise<void> {\n if (this.controller) return\n\n this.controller = new AbortController()\n this.running = this.supervise(this.controller.signal)\n // `wait()` exposes terminal failure. Keep a handler attached for embedded callers that only use\n // start/stop, so an exhausted restart budget does not become an unhandled rejection.\n this.running.catch(() => {})\n }\n\n async stop(): Promise<void> {\n const controller = this.controller\n if (!controller) return\n\n controller.abort()\n await this.running?.catch(() => {})\n if (this.controller === controller) {\n this.controller = null\n this.running = null\n }\n }\n\n /** Resolves after stop and rejects if the bounded restart budget is exhausted. */\n wait(): Promise<void> {\n return this.running ?? Promise.resolve()\n }\n\n protected abstract run(signal: AbortSignal): Promise<void>\n\n private async supervise(signal: AbortSignal): Promise<void> {\n let restartCount = 0\n\n while (!signal.aborted) {\n const startedAt = Date.now()\n let failure: unknown\n\n try {\n await this.run(signal)\n if (signal.aborted) return\n failure = new Error(`[SixbWorker] ${this.constructor.name} stopped unexpectedly.`)\n } catch (error) {\n if (signal.aborted) return\n failure = error\n }\n\n if (Date.now() - startedAt >= STABLE_RUN_MS) {\n restartCount = 0\n }\n if (restartCount >= MAX_RESTARTS) {\n throw new WorkerUnhealthyError(this.constructor.name, restartCount, { cause: failure })\n }\n\n const delayMs = Math.min(this.restartBackoffMs * 2 ** restartCount, MAX_RESTART_BACKOFF_MS)\n restartCount += 1\n await waitForAbort(delayMs, signal)\n }\n }\n}\n\nasync function waitForAbort(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) return\n await new Promise<void>((resolve) => {\n const timer = setTimeout(finish, ms)\n function finish(): void {\n clearTimeout(timer)\n signal.removeEventListener(\"abort\", finish)\n resolve()\n }\n signal.addEventListener(\"abort\", finish, { once: true })\n })\n}\n",
8
- "import { captureSixbFailure } from \"../errors/internal\"\nimport type { SixbErrorCode, SixbFailure } from \"../errors/types\"\nimport type { ClaimedQueueJob, Queue, QueueJob } from \"../queues\"\nimport { WorkerAbortError } from \"./errors\"\nimport {\n createQueueDelivery,\n type QueueDelivery,\n type QueueSettlementResult,\n} from \"./queue-delivery\"\nimport { Worker } from \"./worker\"\n\ntype QueueWorkerFailureCodes = readonly [\n \"internal.unexpected\",\n \"runtime.cancelled\",\n ...SixbErrorCode[],\n]\n\nexport interface QueueWorkerConfig<\n TJob extends QueueJob,\n TFailureCodes extends QueueWorkerFailureCodes,\n> {\n readonly projectId: string\n readonly queue: Queue<TJob, TFailureCodes[number]>\n /** Runtime counterpart of this lane's precise terminal-failure union. */\n readonly failureCodes: TFailureCodes\n readonly workerId: string\n readonly leaseMs?: number\n readonly claimLimit?: number\n readonly idlePollMs?: number\n}\n\n/**\n * Queue settlement selected after execution stops.\n *\n * A worker must name its allowed failure-code union before it can supply an already-persisted\n * failure. Workers that only choose retry vs fail need no generic annotation.\n */\nexport type QueueWorkerFailureDecision<TFailureCode extends SixbErrorCode = never> =\n | {\n readonly kind: \"retry\"\n readonly availableAt?: string\n }\n | {\n readonly kind: \"fail\"\n /** Exact durable run failure, when execution already persisted one. */\n readonly failure?: SixbFailure<TFailureCode>\n }\n\nconst DEFAULT_LEASE_MS = 15 * 60_000\nconst DEFAULT_CLAIM_LIMIT = 1\nconst DEFAULT_IDLE_POLL_MS = 1_000\nconst MAX_CONSECUTIVE_CLAIM_FAILURES = 5\n\nexport abstract class QueueWorker<\n TJob extends QueueJob,\n TFailureCodes extends QueueWorkerFailureCodes,\n> extends Worker {\n protected readonly config: Required<QueueWorkerConfig<TJob, TFailureCodes>>\n private consecutiveClaimFailures = 0\n\n constructor(config: QueueWorkerConfig<TJob, TFailureCodes>) {\n super()\n this.config = {\n projectId: config.projectId,\n queue: config.queue,\n failureCodes: config.failureCodes,\n workerId: config.workerId,\n leaseMs: config.leaseMs ?? DEFAULT_LEASE_MS,\n claimLimit: config.claimLimit ?? DEFAULT_CLAIM_LIMIT,\n idlePollMs: config.idlePollMs ?? DEFAULT_IDLE_POLL_MS,\n }\n }\n\n protected async run(signal: AbortSignal): Promise<void> {\n const inFlight = new Set<Promise<void>>()\n let runError: unknown = null\n\n try {\n while (!signal.aborted && !runError) {\n while (!signal.aborted && !runError && inFlight.size >= this.config.claimLimit) {\n await Promise.race(inFlight)\n }\n if (runError || signal.aborted) {\n continue\n }\n\n const capacity = this.config.claimLimit - inFlight.size\n const claimed = await this.claimOrIdle(signal, capacity)\n for (const claimedJob of claimed) {\n const promise = this.handle(claimedJob, signal)\n .catch((error) => {\n runError ??= error\n })\n .finally(() => {\n inFlight.delete(promise)\n })\n inFlight.add(promise)\n }\n }\n } finally {\n await Promise.allSettled(inFlight)\n }\n\n if (runError) {\n throw runError\n }\n }\n\n protected abstract execute(\n claimed: ClaimedQueueJob<TJob>,\n signal: AbortSignal,\n delivery: QueueDelivery<TJob, TFailureCodes[number]>\n ): Promise<void>\n\n protected onExecutionError(\n _claimed: ClaimedQueueJob<TJob>,\n _error: unknown\n ):\n | Promise<QueueWorkerFailureDecision<TFailureCodes[number]>>\n | QueueWorkerFailureDecision<TFailureCodes[number]> {\n return { kind: \"fail\" }\n }\n\n protected onAbortError(\n _claimed: ClaimedQueueJob<TJob>,\n _error: unknown\n ):\n | Promise<QueueWorkerFailureDecision<TFailureCodes[number]>>\n | QueueWorkerFailureDecision<TFailureCodes[number]> {\n // Shutdown should normally release work for another process. Workers with non-idempotent\n // partial commits can override this and fail the job instead.\n return { kind: \"retry\" }\n }\n\n private async claimOrIdle(\n signal: AbortSignal,\n limit: number\n ): Promise<readonly ClaimedQueueJob<TJob>[]> {\n const { projectId, queue, workerId, leaseMs, idlePollMs } = this.config\n\n try {\n const claimed = await queue.claim({\n projectId,\n workerId,\n limit,\n leaseMs,\n })\n this.consecutiveClaimFailures = 0\n if (claimed.length === 0) {\n await sleep(idlePollMs, signal).catch(() => {})\n }\n return claimed\n } catch (error) {\n if (signal.aborted) return []\n this.consecutiveClaimFailures += 1\n if (this.consecutiveClaimFailures >= MAX_CONSECUTIVE_CLAIM_FAILURES) {\n this.consecutiveClaimFailures = 0\n throw new Error(\n `[SixbQueueWorker] Queue claim failed ${MAX_CONSECUTIVE_CLAIM_FAILURES} consecutive times.`,\n { cause: error }\n )\n }\n await sleep(idlePollMs, signal).catch(() => {})\n return []\n }\n }\n\n private async handle(claimed: ClaimedQueueJob<TJob>, signal: AbortSignal): Promise<void> {\n const delivery = createQueueDelivery({\n queue: this.config.queue,\n claimed,\n leaseMs: this.config.leaseMs,\n signal,\n onLeaseLost: () => {\n console.error(\n `[SixbQueueWorker] Lost lease for queue job '${claimed.job.id}'; leaving it for redelivery.`\n )\n },\n onRenewalError: (error) => {\n console.error(\n `[SixbQueueWorker] Could not renew lease for queue job '${claimed.job.id}'; retrying.`,\n error\n )\n },\n })\n\n try {\n let outcome: { readonly ok: true } | { readonly ok: false; readonly error: unknown }\n try {\n await this.execute(claimed, delivery.signal, delivery)\n outcome = { ok: true }\n } catch (error) {\n outcome = { ok: false, error }\n }\n\n if (delivery.state === \"lost\") return\n\n if (outcome.ok) {\n await settleOrLog(delivery, \"complete\", () => delivery.complete())\n return\n }\n\n const error = outcome.error\n if (signal.aborted || isAbortError(error)) {\n try {\n const decision = await this.onAbortError(claimed, error)\n await this.applyFailureDecision(delivery, decision, error, \"runtime.cancelled\")\n } catch {\n // Shutdown is already in progress. The unacknowledged job becomes visible after its lease.\n }\n return\n }\n\n try {\n const decision = await this.onExecutionError(claimed, error)\n await this.applyFailureDecision(delivery, decision, error, \"internal.unexpected\")\n } catch (settlementError) {\n logQueueOperationError(\"apply failure decision to\", claimed, settlementError)\n }\n } finally {\n await delivery.close()\n }\n }\n\n private async applyFailureDecision(\n delivery: QueueDelivery<TJob, TFailureCodes[number]>,\n decision: QueueWorkerFailureDecision<TFailureCodes[number]>,\n error: unknown,\n defaultCode: \"internal.unexpected\" | \"runtime.cancelled\"\n ): Promise<void> {\n if (decision.kind === \"retry\") {\n await delivery.retry({ availableAt: decision.availableAt })\n return\n }\n\n const failure =\n decision.failure ??\n captureSixbFailure(error, {\n allowedCodes: this.config.failureCodes,\n defaultCode,\n })\n await delivery.fail(failure)\n }\n}\n\nasync function settleOrLog<TJob extends QueueJob, TFailureCode extends SixbErrorCode>(\n delivery: QueueDelivery<TJob, TFailureCode>,\n operation: string,\n settle: () => Promise<QueueSettlementResult>\n): Promise<void> {\n try {\n // A \"lost\" result needs no extra logging here: loss is already reported via onLeaseLost.\n await settle()\n } catch (error) {\n logQueueOperationError(operation, delivery.claimed, error)\n }\n}\n\nfunction logQueueOperationError(operation: string, claimed: ClaimedQueueJob, error: unknown): void {\n console.error(\n `[SixbQueueWorker] Could not ${operation} queue job '${claimed.job.id}'; it may be redelivered.`,\n error\n )\n}\n\n/** True for a standard abort (`AbortController`/`AbortSignal.timeout`) error. */\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\"\n}\n\nasync function sleep(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) {\n throw new WorkerAbortError(\"Worker runtime aborted.\")\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort)\n resolve()\n }, ms)\n\n const onAbort = () => {\n clearTimeout(timer)\n signal.removeEventListener(\"abort\", onAbort)\n reject(new WorkerAbortError(\"Worker runtime aborted.\"))\n }\n\n signal.addEventListener(\"abort\", onAbort, { once: true })\n })\n}\n"
8
+ "import { captureSixbFailure } from \"../errors/internal\"\nimport type { SixbErrorCode, SixbFailure } from \"../errors/types\"\nimport type { ClaimedQueueJob, Queue, QueueJob } from \"../queues\"\nimport { WorkerAbortError } from \"./errors\"\nimport {\n createQueueDelivery,\n type QueueDelivery,\n type QueueSettlementResult,\n} from \"./queue-delivery\"\nimport { Worker } from \"./worker\"\n\ntype QueueWorkerFailureCodes = readonly [\n \"internal.unexpected\",\n \"runtime.cancelled\",\n ...SixbErrorCode[],\n]\n\nexport interface QueueWorkerConfig<\n TJob extends QueueJob,\n TFailureCodes extends QueueWorkerFailureCodes,\n> {\n readonly projectId: string\n readonly queue: Queue<TJob, TFailureCodes[number]>\n /** Runtime counterpart of this lane's precise terminal-failure union. */\n readonly failureCodes: TFailureCodes\n readonly workerId: string\n readonly leaseMs?: number\n readonly claimLimit?: number\n readonly idlePollMs?: number\n}\n\n/**\n * Queue settlement selected after execution stops.\n *\n * A worker must name its allowed failure-code union before it can supply an already-persisted\n * failure. Workers that only choose retry vs fail need no generic annotation.\n */\nexport type QueueWorkerFailureDecision<TFailureCode extends SixbErrorCode = never> =\n | {\n readonly kind: \"retry\"\n readonly availableAt?: string\n }\n | {\n readonly kind: \"fail\"\n /** Exact durable run failure, when execution already persisted one. */\n readonly failure?: SixbFailure<TFailureCode>\n }\n\nconst DEFAULT_LEASE_MS = 15 * 60_000\nconst DEFAULT_CLAIM_LIMIT = 1\nconst DEFAULT_IDLE_POLL_MS = 1_000\nconst MAX_CONSECUTIVE_CLAIM_FAILURES = 5\n\nexport abstract class QueueWorker<\n TJob extends QueueJob,\n TFailureCodes extends QueueWorkerFailureCodes,\n> extends Worker {\n protected readonly config: Required<QueueWorkerConfig<TJob, TFailureCodes>>\n private consecutiveClaimFailures = 0\n\n constructor(config: QueueWorkerConfig<TJob, TFailureCodes>) {\n super()\n this.config = {\n projectId: config.projectId,\n queue: config.queue,\n failureCodes: config.failureCodes,\n workerId: config.workerId,\n leaseMs: config.leaseMs ?? DEFAULT_LEASE_MS,\n claimLimit: normalizeClaimLimit(config.claimLimit),\n idlePollMs: config.idlePollMs ?? DEFAULT_IDLE_POLL_MS,\n }\n }\n\n /** Maximum jobs this worker process claims and executes at once. */\n get concurrency(): number {\n return this.config.claimLimit\n }\n\n protected async run(signal: AbortSignal): Promise<void> {\n const inFlight = new Set<Promise<void>>()\n let runError: unknown = null\n\n try {\n while (!signal.aborted && !runError) {\n while (!signal.aborted && !runError && inFlight.size >= this.config.claimLimit) {\n await Promise.race(inFlight)\n }\n if (runError || signal.aborted) {\n continue\n }\n\n const capacity = this.config.claimLimit - inFlight.size\n const claimed = await this.claimOrIdle(signal, capacity)\n for (const claimedJob of claimed) {\n const promise = this.handle(claimedJob, signal)\n .catch((error) => {\n runError ??= error\n })\n .finally(() => {\n inFlight.delete(promise)\n })\n inFlight.add(promise)\n }\n }\n } finally {\n await Promise.allSettled(inFlight)\n }\n\n if (runError) {\n throw runError\n }\n }\n\n protected abstract execute(\n claimed: ClaimedQueueJob<TJob>,\n signal: AbortSignal,\n delivery: QueueDelivery<TJob, TFailureCodes[number]>\n ): Promise<void>\n\n protected onExecutionError(\n _claimed: ClaimedQueueJob<TJob>,\n _error: unknown\n ):\n | Promise<QueueWorkerFailureDecision<TFailureCodes[number]>>\n | QueueWorkerFailureDecision<TFailureCodes[number]> {\n return { kind: \"fail\" }\n }\n\n protected onAbortError(\n _claimed: ClaimedQueueJob<TJob>,\n _error: unknown\n ):\n | Promise<QueueWorkerFailureDecision<TFailureCodes[number]>>\n | QueueWorkerFailureDecision<TFailureCodes[number]> {\n // Shutdown should normally release work for another process. Workers with non-idempotent\n // partial commits can override this and fail the job instead.\n return { kind: \"retry\" }\n }\n\n private async claimOrIdle(\n signal: AbortSignal,\n limit: number\n ): Promise<readonly ClaimedQueueJob<TJob>[]> {\n const { projectId, queue, workerId, leaseMs, idlePollMs } = this.config\n\n try {\n const claimed = await queue.claim({\n projectId,\n workerId,\n limit,\n leaseMs,\n })\n this.consecutiveClaimFailures = 0\n if (claimed.length === 0) {\n await sleep(idlePollMs, signal).catch(() => {})\n }\n return claimed\n } catch (error) {\n if (signal.aborted) return []\n this.consecutiveClaimFailures += 1\n if (this.consecutiveClaimFailures >= MAX_CONSECUTIVE_CLAIM_FAILURES) {\n this.consecutiveClaimFailures = 0\n throw new Error(\n `[SixbQueueWorker] Queue claim failed ${MAX_CONSECUTIVE_CLAIM_FAILURES} consecutive times.`,\n { cause: error }\n )\n }\n await sleep(idlePollMs, signal).catch(() => {})\n return []\n }\n }\n\n private async handle(claimed: ClaimedQueueJob<TJob>, signal: AbortSignal): Promise<void> {\n const delivery = createQueueDelivery({\n queue: this.config.queue,\n claimed,\n leaseMs: this.config.leaseMs,\n signal,\n onLeaseLost: () => {\n console.error(\n `[SixbQueueWorker] Lost lease for queue job '${claimed.job.id}'; leaving it for redelivery.`\n )\n },\n onRenewalError: (error) => {\n console.error(\n `[SixbQueueWorker] Could not renew lease for queue job '${claimed.job.id}'; retrying.`,\n error\n )\n },\n })\n\n try {\n let outcome: { readonly ok: true } | { readonly ok: false; readonly error: unknown }\n try {\n await this.execute(claimed, delivery.signal, delivery)\n outcome = { ok: true }\n } catch (error) {\n outcome = { ok: false, error }\n }\n\n if (delivery.state === \"lost\") return\n\n if (outcome.ok) {\n await settleOrLog(delivery, \"complete\", () => delivery.complete())\n return\n }\n\n const error = outcome.error\n if (signal.aborted || isAbortError(error)) {\n try {\n const decision = await this.onAbortError(claimed, error)\n await this.applyFailureDecision(delivery, decision, error, \"runtime.cancelled\")\n } catch {\n // Shutdown is already in progress. The unacknowledged job becomes visible after its lease.\n }\n return\n }\n\n try {\n const decision = await this.onExecutionError(claimed, error)\n await this.applyFailureDecision(delivery, decision, error, \"internal.unexpected\")\n } catch (settlementError) {\n logQueueOperationError(\"apply failure decision to\", claimed, settlementError)\n }\n } finally {\n await delivery.close()\n }\n }\n\n private async applyFailureDecision(\n delivery: QueueDelivery<TJob, TFailureCodes[number]>,\n decision: QueueWorkerFailureDecision<TFailureCodes[number]>,\n error: unknown,\n defaultCode: \"internal.unexpected\" | \"runtime.cancelled\"\n ): Promise<void> {\n if (decision.kind === \"retry\") {\n await delivery.retry({ availableAt: decision.availableAt })\n return\n }\n\n const failure =\n decision.failure ??\n captureSixbFailure(error, {\n allowedCodes: this.config.failureCodes,\n defaultCode,\n })\n await delivery.fail(failure)\n }\n}\n\nfunction normalizeClaimLimit(value: number | undefined): number {\n const claimLimit = value ?? DEFAULT_CLAIM_LIMIT\n if (!Number.isSafeInteger(claimLimit) || claimLimit < 1) {\n throw new Error(\"[SixbQueueWorker] Worker concurrency must be a positive safe integer.\")\n }\n return claimLimit\n}\n\nasync function settleOrLog<TJob extends QueueJob, TFailureCode extends SixbErrorCode>(\n delivery: QueueDelivery<TJob, TFailureCode>,\n operation: string,\n settle: () => Promise<QueueSettlementResult>\n): Promise<void> {\n try {\n // A \"lost\" result needs no extra logging here: loss is already reported via onLeaseLost.\n await settle()\n } catch (error) {\n logQueueOperationError(operation, delivery.claimed, error)\n }\n}\n\nfunction logQueueOperationError(operation: string, claimed: ClaimedQueueJob, error: unknown): void {\n console.error(\n `[SixbQueueWorker] Could not ${operation} queue job '${claimed.job.id}'; it may be redelivered.`,\n error\n )\n}\n\n/** True for a standard abort (`AbortController`/`AbortSignal.timeout`) error. */\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\"\n}\n\nasync function sleep(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) {\n throw new WorkerAbortError(\"Worker runtime aborted.\")\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort)\n resolve()\n }, ms)\n\n const onAbort = () => {\n clearTimeout(timer)\n signal.removeEventListener(\"abort\", onAbort)\n reject(new WorkerAbortError(\"Worker runtime aborted.\"))\n }\n\n signal.addEventListener(\"abort\", onAbort, { once: true })\n })\n}\n"
9
9
  ],
10
- "mappings": "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",
11
- "debugId": "FB9E1269A35CC91864756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "3392AF504C53F2C564756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -35,6 +35,8 @@ export declare abstract class QueueWorker<TJob extends QueueJob, TFailureCodes e
35
35
  protected readonly config: Required<QueueWorkerConfig<TJob, TFailureCodes>>;
36
36
  private consecutiveClaimFailures;
37
37
  constructor(config: QueueWorkerConfig<TJob, TFailureCodes>);
38
+ /** Maximum jobs this worker process claims and executes at once. */
39
+ get concurrency(): number;
38
40
  protected run(signal: AbortSignal): Promise<void>;
39
41
  protected abstract execute(claimed: ClaimedQueueJob<TJob>, signal: AbortSignal, delivery: QueueDelivery<TJob, TFailureCodes[number]>): Promise<void>;
40
42
  protected onExecutionError(_claimed: ClaimedQueueJob<TJob>, _error: unknown): Promise<QueueWorkerFailureDecision<TFailureCodes[number]>> | QueueWorkerFailureDecision<TFailureCodes[number]>;
@@ -1 +1 @@
1
- {"version":3,"file":"queue-worker.d.ts","sourceRoot":"","sources":["../../src/workers/queue-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEjE,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,KAAK,uBAAuB,GAAG,SAAS;IACtC,qBAAqB;IACrB,mBAAmB;IACnB,GAAG,aAAa,EAAE;CACnB,CAAA;AAED,MAAM,WAAW,iBAAiB,CAChC,IAAI,SAAS,QAAQ,EACrB,aAAa,SAAS,uBAAuB;IAE7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAClD,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,CAAC,YAAY,SAAS,aAAa,GAAG,KAAK,IAC7E;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;CAC7C,CAAA;AAOL,8BAAsB,WAAW,CAC/B,IAAI,SAAS,QAAQ,EACrB,aAAa,SAAS,uBAAuB,CAC7C,SAAQ,MAAM;IACd,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;IAC3E,OAAO,CAAC,wBAAwB,CAAI;gBAExB,MAAM,EAAE,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC;cAa1C,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCvD,SAAS,CAAC,QAAQ,CAAC,OAAO,CACxB,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,EAC9B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC;IAEhB,SAAS,CAAC,gBAAgB,CACxB,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,EAC/B,MAAM,EAAE,OAAO,GAEb,OAAO,CAAC,0BAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAC1D,0BAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAIrD,SAAS,CAAC,YAAY,CACpB,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,EAC/B,MAAM,EAAE,OAAO,GAEb,OAAO,CAAC,0BAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAC1D,0BAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAMvC,WAAW;YAiCX,MAAM;YAyDN,oBAAoB;CAmBnC;AAsBD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD"}
1
+ {"version":3,"file":"queue-worker.d.ts","sourceRoot":"","sources":["../../src/workers/queue-worker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEjE,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,KAAK,uBAAuB,GAAG,SAAS;IACtC,qBAAqB;IACrB,mBAAmB;IACnB,GAAG,aAAa,EAAE;CACnB,CAAA;AAED,MAAM,WAAW,iBAAiB,CAChC,IAAI,SAAS,QAAQ,EACrB,aAAa,SAAS,uBAAuB;IAE7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAClD,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,CAAC,YAAY,SAAS,aAAa,GAAG,KAAK,IAC7E;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;CAC7C,CAAA;AAOL,8BAAsB,WAAW,CAC/B,IAAI,SAAS,QAAQ,EACrB,aAAa,SAAS,uBAAuB,CAC7C,SAAQ,MAAM;IACd,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;IAC3E,OAAO,CAAC,wBAAwB,CAAI;gBAExB,MAAM,EAAE,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC;IAa1D,oEAAoE;IACpE,IAAI,WAAW,IAAI,MAAM,CAExB;cAEe,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCvD,SAAS,CAAC,QAAQ,CAAC,OAAO,CACxB,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,EAC9B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC;IAEhB,SAAS,CAAC,gBAAgB,CACxB,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,EAC/B,MAAM,EAAE,OAAO,GAEb,OAAO,CAAC,0BAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAC1D,0BAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAIrD,SAAS,CAAC,YAAY,CACpB,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,EAC/B,MAAM,EAAE,OAAO,GAEb,OAAO,CAAC,0BAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAC1D,0BAA0B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAMvC,WAAW;YAiCX,MAAM;YAyDN,oBAAoB;CAmBnC;AA8BD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD"}
@@ -1,5 +1,6 @@
1
1
  import type { AuthorizablePrincipal, ExecutionContext } from "../execution";
2
2
  import type { SixbRuntimeContext } from "../runtime/types";
3
+ import type { AiCostSummary } from "../storage/ai-cost";
3
4
  import type { AiModelCallUsage } from "../storage/ai-usage";
4
5
  import type { ListWorkflowInterventionsInput, ListWorkflowInterventionsResult, WorkflowInterventionRecord } from "../storage/workflow-interventions";
5
6
  import type { ListLatestWorkflowRunsResult, ListWorkflowNodeRunsInput, ListWorkflowNodeRunsResult, ListWorkflowRunsInput, ListWorkflowRunsResult, WorkflowAgentNodeRunRecord, WorkflowNodeRunRecord, WorkflowRunRecord } from "../storage/workflow-runs";
@@ -25,6 +26,8 @@ export type ListWorkflowRunNodesInput = Omit<ListWorkflowNodeRunsInput, "project
25
26
  /** Execution-facing Agent node view derived from its run row and model-call ledger. */
26
27
  export interface WorkflowAgentNodeRunView extends Omit<WorkflowAgentNodeRunRecord, "execution"> {
27
28
  readonly usage?: AiModelCallUsage;
29
+ /** Preferred valuation; omitted when there are no calls or cost storage is unavailable. */
30
+ readonly cost?: AiCostSummary;
28
31
  }
29
32
  /** Execution-facing workflow node view with optional Agent execution details. */
30
33
  export interface WorkflowNodeRunView extends WorkflowNodeRunRecord {
@@ -1 +1 @@
1
- {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/workflows/execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/workflows/execution.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import {
7
7
  defineWorkflowStep,
8
8
  interventionField,
9
9
  unwrapWorkflowNodeFailure
10
- } from "../chunk-0k4avqr2.js";
10
+ } from "../chunk-c8bw2b6c.js";
11
11
  import"../chunk-5sz8ta9r.js";
12
12
  import"../chunk-979ww6b3.js";
13
13
  import"../chunk-74drx9gd.js";
@@ -40,36 +40,38 @@ import {
40
40
  validateWorkflowStepInput,
41
41
  validateWorkflowStepOutput,
42
42
  validateWorkflowsAtStartup
43
- } from "../chunk-0mbx247x.js";
44
- import"../chunk-bct7hmfc.js";
45
- import"../chunk-zg9yryhz.js";
46
- import"../chunk-k9pts48t.js";
43
+ } from "../chunk-177ed2mp.js";
44
+ import"../chunk-km4rkj4t.js";
45
+ import"../chunk-261ag4t4.js";
46
+ import"../chunk-3rsf30p4.js";
47
47
  import"../chunk-gqdd7508.js";
48
48
  import"../chunk-xhy826cz.js";
49
- import"../chunk-nnyp53zt.js";
49
+ import"../chunk-f1cyvnrk.js";
50
50
  import"../chunk-88ppkr54.js";
51
51
  import"../chunk-63te770v.js";
52
52
  import"../chunk-8b55ygje.js";
53
53
  import"../chunk-51fjndv0.js";
54
54
  import"../chunk-8m5ejdpn.js";
55
55
  import"../chunk-nf4r78r4.js";
56
- import"../chunk-5egfka8j.js";
57
- import"../chunk-c6qd89g5.js";
58
- import"../chunk-st4xgxey.js";
59
- import"../chunk-8ryen3p3.js";
60
- import"../chunk-ys1nse2v.js";
56
+ import"../chunk-ttba8x6z.js";
57
+ import"../chunk-d6y2wsfg.js";
58
+ import"../chunk-ettb0cy4.js";
59
+ import"../chunk-96swp2wd.js";
60
+ import"../chunk-4aw0jwk0.js";
61
+ import"../chunk-xmggaxg4.js";
61
62
  import"../chunk-fmx1sz2h.js";
62
- import"../chunk-57r1cpxx.js";
63
+ import"../chunk-xc7hq65b.js";
63
64
  import"../chunk-cy0n5dms.js";
64
65
  import"../chunk-dysw7nsm.js";
65
66
  import"../chunk-62c7t4jc.js";
66
67
  import"../chunk-ezake7g1.js";
67
- import"../chunk-4x43bkbp.js";
68
+ import"../chunk-pxtrxm3p.js";
68
69
  import"../chunk-htq0qh7z.js";
69
70
  import"../chunk-xkthy56g.js";
70
- import"../chunk-vp1vc6ee.js";
71
- import"../chunk-qvybnnpe.js";
71
+ import"../chunk-qer6am8w.js";
72
+ import"../chunk-n5x5y80a.js";
72
73
  import"../chunk-t9xghkva.js";
74
+ import"../chunk-kqxgf6kv.js";
73
75
  import"../chunk-5gd7tpv6.js";
74
76
  import"../chunk-h9kxd41f.js";
75
77
  import"../chunk-9dzba0f2.js";
@@ -87,12 +89,13 @@ import"../chunk-04b07a9q.js";
87
89
  import"../chunk-dktq02ne.js";
88
90
  import"../chunk-zqysyfjt.js";
89
91
  import"../chunk-yt8wphsx.js";
90
- import"../chunk-85j5ybfj.js";
91
- import"../chunk-57zpb99z.js";
92
- import"../chunk-663csy96.js";
93
- import"../chunk-jaj13078.js";
92
+ import"../chunk-rdeagz6b.js";
93
+ import"../chunk-zpw39qhj.js";
94
+ import"../chunk-t0jjkep3.js";
95
+ import"../chunk-d2adj15j.js";
96
+ import"../chunk-rhrbz7d4.js";
94
97
  import"../chunk-xwnf87e1.js";
95
- import"../chunk-34bqh420.js";
98
+ import"../chunk-4z3n1dzt.js";
96
99
  import"../chunk-0172wgm9.js";
97
100
  import"../chunk-t8t39h7v.js";
98
101
  import"../chunk-y64skrwp.js";
@@ -133,4 +136,4 @@ export {
133
136
  WorkflowDefinitionError
134
137
  };
135
138
 
136
- //# debugId=FB1B5E629CFFC26B64756E2164756E21
139
+ //# debugId=28B83A3228FF218964756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "FB1B5E629CFFC26B64756E2164756E21",
7
+ "debugId": "28B83A3228FF218964756E2164756E21",
8
8
  "names": []
9
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sixb/core",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "The ontology-first runtime for Sixb — objects, links, telemetry, actions, and provider contracts",
5
5
  "keywords": [
6
6
  "sixb",
@@ -131,6 +131,12 @@
131
131
  "import": "./dist/storage/agents/provider.js",
132
132
  "default": "./dist/storage/agents/provider.js"
133
133
  },
134
+ "./internal/ai-cost-storage-provider": {
135
+ "types": "./dist/storage/ai-cost/provider.d.ts",
136
+ "bun": "./src/storage/ai-cost/provider.ts",
137
+ "import": "./dist/storage/ai-cost/provider.js",
138
+ "default": "./dist/storage/ai-cost/provider.js"
139
+ },
134
140
  "./internal/auth": {
135
141
  "types": "./dist/auth/index.d.ts",
136
142
  "bun": "./src/auth/index.ts",
@@ -8,7 +8,9 @@ import {
8
8
  } from "./context"
9
9
  import { serializeAgentContextForModel } from "./context-model"
10
10
  import { AgentMessageAdapterError } from "./errors"
11
- import type { AgentMessage, AgentMessagePart, AgentMessageRole } from "./message"
11
+ import type { AgentMessage, AgentMessagePart, AgentMessageRole, AgentToolCallPart } from "./message"
12
+ import { isAgentToolResult } from "./tool-result"
13
+ import type { AgentToolFileContent } from "./types"
12
14
 
13
15
  // ── Inbound (write) — deliberately WIDE ────────────────────────────────────────────────────────
14
16
  //
@@ -159,6 +161,14 @@ export interface AgentFileDataProjection {
159
161
  readonly filename?: string
160
162
  }
161
163
 
164
+ export interface AgentToolResultFileResolverInput<TMessage extends AgentMessage = AgentMessage> {
165
+ readonly message: TMessage
166
+ readonly part: AgentToolCallPart
167
+ readonly partIndex: number
168
+ readonly contentPart: AgentToolFileContent
169
+ readonly contentIndex: number
170
+ }
171
+
162
172
  export interface ToModelMessagesOptions<TMessage extends AgentMessage = AgentMessage> {
163
173
  /**
164
174
  * Convert a stored file reference into model-readable data. When omitted, file parts are skipped
@@ -173,6 +183,10 @@ export interface ToModelMessagesOptions<TMessage extends AgentMessage = AgentMes
173
183
  * models that cannot consume inline files.
174
184
  */
175
185
  readonly fileText?: (input: AgentFileDataResolverInput<TMessage>) => string | undefined
186
+ /** Add current metadata, sandbox paths, and projection notes for a tool-result file. */
187
+ readonly toolResultFileText?: (
188
+ input: AgentToolResultFileResolverInput<TMessage>
189
+ ) => string | undefined
176
190
  }
177
191
 
178
192
  // ── Helpers ─────────────────────────────────────────────────────────────────────────────────────
@@ -337,7 +351,7 @@ function fromUiContextPart(part: AgentInboundUiMessagePart): AgentMessagePart {
337
351
  }
338
352
  }
339
353
 
340
- function fromAiSdkToolPart(part: AgentInboundUiMessagePart): AgentToolCallPartResult {
354
+ function fromAiSdkToolPart(part: AgentInboundUiMessagePart): AgentToolCallPart {
341
355
  const dynamic = part.type === "dynamic-tool"
342
356
  const toolName = toolNameFromInbound(part)
343
357
  assertAdapter(
@@ -373,8 +387,6 @@ function fromAiSdkToolPart(part: AgentInboundUiMessagePart): AgentToolCallPartRe
373
387
  return { ...base, state: "output-error", errorText: part.errorText }
374
388
  }
375
389
 
376
- type AgentToolCallPartResult = Extract<AgentMessagePart, { type: "tool-call" }>
377
-
378
390
  // ── toUiMessage (read) ────────────────────────────────────────────────────────────────────────
379
391
 
380
392
  /** Reconstruct an SDK-shaped UI message from a stored message. Exact inverse of {@link fromAiSdk}. */
@@ -410,7 +422,7 @@ function toUiPart(part: AgentMessagePart): AgentUiMessagePart {
410
422
  }
411
423
  }
412
424
 
413
- function toUiToolPart(part: AgentToolCallPartResult): AgentUiToolPart {
425
+ function toUiToolPart(part: AgentToolCallPart): AgentUiToolPart {
414
426
  const body = {
415
427
  toolCallId: part.toolCallId,
416
428
  ...(part.providerExecuted === undefined ? {} : { providerExecuted: part.providerExecuted }),
@@ -570,17 +582,17 @@ function appendAssistantModelMessages<TMessage extends AgentMessage>(
570
582
  } else if (part.type === "tool-call") {
571
583
  content.push(toolCallModelPart(part))
572
584
  if (part.providerExecuted === true) {
573
- content.push(toolResultModelPart(part, "json"))
585
+ content.push(toolResultModelPart(message, part, partIndex, "json", options))
574
586
  }
575
587
  }
576
588
  }
577
589
  result.push({ role: "assistant", content })
578
590
 
579
- const toolResults = current
580
- .map(({ part }) => part)
581
- .filter(isToolCallPart)
582
- .filter((part) => part.providerExecuted !== true)
583
- .map((part) => toolResultModelPart(part, "text"))
591
+ const toolResults = current.flatMap(({ part, partIndex }) =>
592
+ part.type === "tool-call" && part.providerExecuted !== true
593
+ ? [toolResultModelPart(message, part, partIndex, "text", options)]
594
+ : []
595
+ )
584
596
  if (toolResults.length > 0) {
585
597
  result.push({ role: "tool", content: toolResults })
586
598
  }
@@ -596,7 +608,7 @@ function appendAssistantModelMessages<TMessage extends AgentMessage>(
596
608
  flush()
597
609
  }
598
610
 
599
- function toolCallModelPart(part: AgentToolCallPartResult): AgentModelToolCallPart {
611
+ function toolCallModelPart(part: AgentToolCallPart): AgentModelToolCallPart {
600
612
  return {
601
613
  type: "tool-call",
602
614
  toolCallId: part.toolCallId,
@@ -607,37 +619,66 @@ function toolCallModelPart(part: AgentToolCallPartResult): AgentModelToolCallPar
607
619
  }
608
620
  }
609
621
 
610
- function toolResultModelPart(
611
- part: AgentToolCallPartResult,
612
- errorMode: "text" | "json"
622
+ function toolResultModelPart<TMessage extends AgentMessage>(
623
+ message: TMessage,
624
+ part: AgentToolCallPart,
625
+ partIndex: number,
626
+ errorMode: "text" | "json",
627
+ options: ToModelMessagesOptions<TMessage>
613
628
  ): AgentModelToolResultPart {
614
629
  return {
615
630
  type: "tool-result",
616
631
  toolCallId: part.toolCallId,
617
632
  toolName: part.toolName,
618
- output: toolResultOutput(part, errorMode),
633
+ output: toolResultOutput(message, part, partIndex, errorMode, options),
619
634
  ...(part.providerMetadata === undefined ? {} : { providerOptions: part.providerMetadata }),
620
635
  }
621
636
  }
622
637
 
623
- function toolResultOutput(
624
- part: AgentToolCallPartResult,
625
- errorMode: "text" | "json"
638
+ function toolResultOutput<TMessage extends AgentMessage>(
639
+ message: TMessage,
640
+ part: AgentToolCallPart,
641
+ partIndex: number,
642
+ errorMode: "text" | "json",
643
+ options: ToModelMessagesOptions<TMessage>
626
644
  ): AgentModelToolOutput {
627
645
  if (part.state === "output-error") {
628
646
  return errorMode === "json"
629
647
  ? { type: "error-json", value: part.errorText }
630
648
  : { type: "error-text", value: part.errorText }
631
649
  }
650
+ if (isAgentToolResult(part.output)) {
651
+ const value: string[] = []
652
+ part.output.content.forEach((contentPart, contentIndex) => {
653
+ if (contentPart.type === "text") {
654
+ value.push(contentPart.text)
655
+ return
656
+ }
657
+
658
+ const resolverInput = { message, part, partIndex, contentPart, contentIndex }
659
+ const fileContext = options.toolResultFileText?.(resolverInput)
660
+ if (fileContext) {
661
+ value.push(fileContext)
662
+ } else {
663
+ value.push(toolResultFileFallbackText(contentPart))
664
+ }
665
+ })
666
+ return { type: "text", value: value.join("\n") }
667
+ }
632
668
  return typeof part.output === "string"
633
669
  ? { type: "text", value: part.output }
634
670
  : { type: "json", value: part.output }
635
671
  }
636
672
 
637
- function isTextPart(part: AgentMessagePart): part is Extract<AgentMessagePart, { type: "text" }> {
638
- return part.type === "text"
673
+ function toolResultFileFallbackText(part: AgentToolFileContent): string {
674
+ const attributes = [
675
+ part.fileRef.fileName ? `name=${JSON.stringify(part.fileRef.fileName)}` : undefined,
676
+ part.fileRef.mediaType ? `mediaType=${JSON.stringify(part.fileRef.mediaType)}` : undefined,
677
+ `sizeBytes=${part.fileRef.sizeBytes}`,
678
+ ].filter((value): value is string => value !== undefined)
679
+ return `[Tool-created file: ${attributes.join(" ")}. Contents are not available inline.]`
639
680
  }
640
681
 
641
- function isToolCallPart(part: AgentMessagePart): part is AgentToolCallPartResult {
642
- return part.type === "tool-call"
682
+ function isTextPart(part: AgentMessagePart): part is Extract<AgentMessagePart, { type: "text" }> {
683
+ return part.type === "text"
643
684
  }