deepline 0.3.461 → 0.3.462

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 (296) hide show
  1. package/dist/bundling-sources/sdk/src/client-core.ts +7593 -0
  2. package/dist/bundling-sources/sdk/src/client.ts +8 -7366
  3. package/dist/bundling-sources/sdk/src/http-core.ts +1239 -0
  4. package/dist/bundling-sources/sdk/src/http.ts +6 -1231
  5. package/dist/bundling-sources/sdk/src/index.ts +4 -1
  6. package/dist/bundling-sources/sdk/src/play.ts +5 -5
  7. package/dist/bundling-sources/sdk/src/plays/client-core.ts +437 -0
  8. package/dist/bundling-sources/sdk/src/plays/client.ts +4 -421
  9. package/dist/bundling-sources/sdk/src/plays/input-example.ts +3 -4
  10. package/dist/bundling-sources/sdk/src/plays/play-description.ts +1 -1
  11. package/dist/bundling-sources/sdk/src/plays/run-request.ts +1 -1
  12. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  13. package/dist/bundling-sources/sdk/src/server.ts +43 -0
  14. package/dist/bundling-sources/sdk/src/types.ts +15 -5
  15. package/dist/bundling-sources/shared_libs/integration-contracts/billing-entitlements.ts +15 -0
  16. package/dist/bundling-sources/shared_libs/monitors/callback-security.ts +0 -307
  17. package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +3 -0
  18. package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +3 -2
  19. package/dist/bundling-sources/shared_libs/monitors/package.json +2 -0
  20. package/dist/bundling-sources/shared_libs/monitors/provider-callback-verification.ts +34 -0
  21. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +59 -0
  22. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-upstream-identity.ts +94 -1
  23. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-dead-letter.ts +11 -1
  24. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-failure-codes.ts +24 -0
  25. package/dist/bundling-sources/shared_libs/observability/dlq.ts +32 -0
  26. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +57 -3
  27. package/dist/bundling-sources/shared_libs/observability/scheduled-work.ts +1 -0
  28. package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +66 -1
  29. package/dist/bundling-sources/shared_libs/play-data-plane/sheet-column-storage.ts +36 -7
  30. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +250 -11
  31. package/dist/bundling-sources/shared_libs/play-runtime/array-input-store.ts +319 -0
  32. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +991 -359
  33. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +17 -0
  34. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +13 -0
  35. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +110 -0
  36. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-machines.ts +155 -6
  37. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-registry.ts +110 -6
  38. package/dist/bundling-sources/shared_libs/play-runtime/durable-receipt-execution.ts +127 -13
  39. package/dist/bundling-sources/shared_libs/play-runtime/execution-capabilities.ts +14 -1
  40. package/dist/bundling-sources/shared_libs/play-runtime/fixture-behavior.ts +57 -1
  41. package/dist/bundling-sources/shared_libs/play-runtime/free-company-lookup-batching.ts +218 -0
  42. package/dist/bundling-sources/shared_libs/play-runtime/gateway-postgres-admission.ts +42 -5
  43. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-budget-state-backend.ts +6 -1
  44. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +92 -31
  45. package/dist/bundling-sources/shared_libs/play-runtime/governor/block-reserving-budget-state-backend.ts +69 -14
  46. package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +93 -23
  47. package/dist/bundling-sources/shared_libs/play-runtime/governor/in-memory-rate-state-backend.ts +15 -4
  48. package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +22 -18
  49. package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +5 -0
  50. package/dist/bundling-sources/shared_libs/play-runtime/launch-identity.ts +2 -0
  51. package/dist/bundling-sources/shared_libs/play-runtime/map-memory-limits.ts +190 -14
  52. package/dist/bundling-sources/shared_libs/play-runtime/memory-ledger.ts +131 -0
  53. package/dist/bundling-sources/shared_libs/play-runtime/modal-runtime-config.ts +77 -2
  54. package/dist/bundling-sources/shared_libs/play-runtime/output-size-limits.ts +271 -2
  55. package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +51 -0
  56. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/contracts.ts +2 -0
  57. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/job.ts +27 -1
  58. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +2 -0
  59. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +3 -0
  60. package/dist/bundling-sources/shared_libs/play-runtime/provider-text-for-log.ts +63 -0
  61. package/dist/bundling-sources/shared_libs/play-runtime/resource-governor.ts +19 -0
  62. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger-event-transport.ts +112 -16
  63. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger.ts +104 -2
  64. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +265 -151
  65. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-gateway-transport.ts +17 -0
  66. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-progress-push.ts +35 -14
  67. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-sheet-persistence-retry.ts +12 -1
  68. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-control-transport.ts +4 -0
  69. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-labels.ts +36 -0
  70. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-launch-transport.ts +136 -70
  71. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +237 -36
  72. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-runtime-watchdog.ts +148 -4
  73. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-session-execution.ts +6 -0
  74. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +285 -32
  75. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/modal.ts +251 -56
  76. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +29 -4
  77. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/sandbox-create-outcome.ts +27 -0
  78. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/types.ts +22 -1
  79. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +1397 -382
  80. package/dist/bundling-sources/shared_libs/play-runtime/runtime-array-input-receipts.ts +920 -0
  81. package/dist/bundling-sources/shared_libs/play-runtime/runtime-constants.ts +16 -0
  82. package/dist/bundling-sources/shared_libs/play-runtime/runtime-environment.ts +38 -0
  83. package/dist/bundling-sources/shared_libs/play-runtime/runtime-flow.ts +6 -0
  84. package/dist/bundling-sources/shared_libs/play-runtime/runtime-incident-drills.ts +26 -1
  85. package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +30 -0
  86. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-store-adapter.ts +14 -3
  87. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-writer.ts +31 -4
  88. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sheet-row-transition.ts +47 -0
  89. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-compute-usage.ts +20 -7
  90. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +12 -0
  91. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/index.ts +9 -0
  92. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +10 -0
  93. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +4 -0
  94. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +1496 -320
  95. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +31 -1
  96. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +1389 -129
  97. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +36 -0
  98. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-dispatch-authority.ts +4 -0
  99. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +162 -23
  100. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts +499 -115
  101. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-capacity.ts +377 -9
  102. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-ledger-reconciliation.ts +117 -8
  103. package/dist/bundling-sources/shared_libs/play-runtime/secret-resolution-retry-policy.ts +25 -0
  104. package/dist/bundling-sources/shared_libs/play-runtime/terminal-runtime-performance.ts +391 -0
  105. package/dist/bundling-sources/shared_libs/play-runtime/test-runtime-seams.ts +40 -0
  106. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/index.ts +6 -0
  107. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/mapped-calls.ts +171 -0
  108. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/receipt-cohort.ts +16 -1
  109. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +26 -3
  110. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +16 -2
  111. package/dist/bundling-sources/shared_libs/play-runtime/transport-error-diagnostics.ts +28 -0
  112. package/dist/bundling-sources/shared_libs/play-runtime/work-receipt-storage-contract.ts +55 -5
  113. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +41 -1
  114. package/dist/bundling-sources/shared_libs/plays/contracts.ts +4 -0
  115. package/dist/bundling-sources/shared_libs/plays/dataset.ts +9 -3
  116. package/dist/bundling-sources/shared_libs/plays/deploy/manifest-contract.ts +2 -0
  117. package/dist/bundling-sources/shared_libs/plays/deploy/manifest.ts +3 -2
  118. package/dist/bundling-sources/shared_libs/plays/deploy/project-serializer.ts +2 -2
  119. package/dist/bundling-sources/shared_libs/plays/run-output-summary.ts +66 -0
  120. package/dist/bundling-sources/shared_libs/plays/script-entry.ts +1 -1
  121. package/dist/bundling-sources/shared_libs/product-notifications/catalog.ts +43 -1
  122. package/dist/bundling-sources/shared_libs/product-notifications/content.ts +9 -0
  123. package/dist/bundling-sources/shared_libs/product-notifications/email.ts +91 -13
  124. package/dist/bundling-sources/shared_libs/product-notifications/events.ts +3 -0
  125. package/dist/bundling-sources/shared_libs/product-notifications/slack-delivery.ts +41 -24
  126. package/dist/bundling-sources/shared_libs/security/attested-client-ip.ts +91 -0
  127. package/dist/bundling-sources/shared_libs/security/internal-actor.ts +0 -11
  128. package/dist/cli/{auth-6HJXNWUG.mjs → auth-JDLEY7VU.mjs} +5 -4
  129. package/dist/cli/auth-UXKY6TCC.js +41 -0
  130. package/dist/cli/{billing-6P5HO6QG.js → billing-HXAXB3XZ.js} +152 -78
  131. package/dist/cli/{billing-MJ42N7YF.mjs → billing-SDHLBLMV.mjs} +84 -10
  132. package/dist/cli/{chunk-5MDIZX7M.js → chunk-3ACMRZRV.js} +8 -6
  133. package/dist/cli/{chunk-FGLKOWSC.mjs → chunk-3KZCFOZ6.mjs} +1 -1
  134. package/dist/cli/chunk-4KQ6SIBC.mjs +1038 -0
  135. package/dist/cli/{chunk-Z2GUFYT6.js → chunk-5LEAXRHV.js} +11 -11
  136. package/dist/cli/{chunk-MEAIOXJL.mjs → chunk-6NNVJDVR.mjs} +7 -5
  137. package/dist/cli/{chunk-NMJ4D2WO.js → chunk-6PMCRYDA.js} +216 -91
  138. package/dist/cli/{chunk-RY4IVOU3.mjs → chunk-6RNQGWFD.mjs} +16 -806
  139. package/dist/cli/{chunk-EBU7LQ64.js → chunk-6V7KVRR5.js} +3 -3
  140. package/dist/cli/{chunk-OZBWRICM.js → chunk-7LFIMWMW.js} +2 -2
  141. package/dist/cli/chunk-7MJ6VI2T.mjs +19 -0
  142. package/dist/cli/chunk-7SWNPNML.js +1039 -0
  143. package/dist/cli/{chunk-IHHLTHE7.mjs → chunk-7U3XNPOA.mjs} +267 -38
  144. package/dist/cli/{chunk-5FDKJQZE.js → chunk-7VZHXVOQ.js} +1 -1
  145. package/dist/cli/{chunk-R64BGGRQ.mjs → chunk-AT636LLU.mjs} +2 -2
  146. package/dist/cli/{chunk-MDJPEGVN.js → chunk-BGTPIMSM.js} +392 -261
  147. package/dist/cli/{chunk-KVJ5VHW5.mjs → chunk-CKSOY47X.mjs} +2 -2
  148. package/dist/cli/{chunk-7DH2FD7Y.mjs → chunk-D464JW3N.mjs} +5 -85
  149. package/dist/cli/chunk-D6DXOUTO.mjs +827 -0
  150. package/dist/cli/{describe-2WQY7ZCY.js → chunk-EM4TXCCI.js} +27 -44
  151. package/dist/cli/chunk-F6QV42MC.mjs +91 -0
  152. package/dist/cli/chunk-FKVYR3QA.mjs +1039 -0
  153. package/dist/cli/{chunk-FGMX4HUZ.js → chunk-GEGW5HPZ.js} +29 -27
  154. package/dist/cli/{chunk-TNMBPMMC.js → chunk-HUB3CCM2.js} +13 -4
  155. package/dist/cli/{chunk-ACCR7POB.js → chunk-I6VHOU5O.js} +27 -27
  156. package/dist/cli/{chunk-Z2XUZC34.js → chunk-IAYSWZDJ.js} +188 -76
  157. package/dist/cli/chunk-JF3TLIMQ.js +19 -0
  158. package/dist/cli/{chunk-HDFRJ4IT.mjs → chunk-JVHOS3K3.mjs} +177 -65
  159. package/dist/cli/{chunk-V7REJRDZ.mjs → chunk-LFXLQEZN.mjs} +1 -1
  160. package/dist/cli/{chunk-CRYOUPEB.js → chunk-LROWFPGN.js} +16 -16
  161. package/dist/cli/{chunk-SLEUWLJE.mjs → chunk-MSY22NQW.mjs} +5 -5
  162. package/dist/cli/{chunk-BGY2PLP7.mjs → chunk-MUUQZIOF.mjs} +23 -49
  163. package/dist/cli/{chunk-FCAZQ7WV.js → chunk-NBLSCHKK.js} +52 -50
  164. package/dist/cli/{chunk-QAJAJPKK.mjs → chunk-NHRWZPWZ.mjs} +4 -2
  165. package/dist/cli/{chunk-KXMNM4AQ.js → chunk-NMU3VR5U.js} +4 -5
  166. package/dist/cli/{chunk-QIW7TVV6.mjs → chunk-O2RX5A66.mjs} +14 -12
  167. package/dist/cli/{chunk-SAZFZQRI.js → chunk-OMQ23IXL.js} +2 -2
  168. package/dist/cli/{chunk-5IYOUBFZ.js → chunk-OPJAJBD4.js} +28 -54
  169. package/dist/cli/{chunk-FJZILBL7.mjs → chunk-PHSEINNH.mjs} +5 -5
  170. package/dist/cli/{chunk-3DNKFH2G.mjs → chunk-PKHVSIJG.mjs} +19 -1
  171. package/dist/cli/{chunk-WIYWSYDS.mjs → chunk-Q2EIZKVX.mjs} +3 -3
  172. package/dist/cli/{chunk-5FY72YOV.js → chunk-QJZ6WNWD.js} +8 -8
  173. package/dist/cli/{chunk-EIMG75BT.mjs → chunk-S3A4IXBQ.mjs} +4 -5
  174. package/dist/cli/{chunk-3BMLICF7.mjs → chunk-S42YIQNE.mjs} +13 -8
  175. package/dist/cli/{chunk-RFONC4WJ.mjs → chunk-S6UAJR6V.mjs} +3 -3
  176. package/dist/cli/{chunk-G7L27KZB.mjs → chunk-TKAQR3IB.mjs} +31 -21
  177. package/dist/cli/{chunk-QWRHGGUH.js → chunk-UAJFWWZE.js} +20 -2
  178. package/dist/cli/{chunk-VZBCEA5S.mjs → chunk-UDRPEZ5F.mjs} +223 -92
  179. package/dist/cli/{chunk-KCCOQ5G5.js → chunk-ULK7JGGI.js} +511 -282
  180. package/dist/cli/chunk-V335HGX5.js +1038 -0
  181. package/dist/cli/{chunk-MGXEUZHL.mjs → chunk-V3MEA7NB.mjs} +7 -5
  182. package/dist/cli/{chunk-O6QOMHCH.js → chunk-VFGVXXZP.js} +37 -35
  183. package/dist/cli/chunk-VLEVVDWG.js +91 -0
  184. package/dist/cli/{chunk-R2GLGLDR.mjs → chunk-VPHN2HAL.mjs} +216 -91
  185. package/dist/cli/{chunk-CFUTOWE4.js → chunk-WG3KGAII.js} +8 -88
  186. package/dist/cli/{describe-FRAVCY5F.mjs → chunk-WIY6U6GD.mjs} +19 -36
  187. package/dist/cli/{chunk-PNATXKLP.js → chunk-XANRM3QA.js} +6 -6
  188. package/dist/cli/{chunk-KGQNIA37.js → chunk-XQCTG5OO.js} +44 -34
  189. package/dist/cli/{chunk-T3MVIPHG.mjs → chunk-XZAFIOUQ.mjs} +1 -1
  190. package/dist/cli/chunk-Y4DPU4OM.js +827 -0
  191. package/dist/cli/chunk-YT5EODJO.js +920 -0
  192. package/dist/cli/{chunk-SCIR5JXW.js → chunk-ZGQSFYD2.js} +56 -51
  193. package/dist/cli/{chunk-QEYHTIV4.mjs → chunk-ZUK6LIJB.mjs} +10 -1
  194. package/dist/cli/command-docs.d.mts +5 -0
  195. package/dist/cli/command-docs.d.ts +5 -0
  196. package/dist/cli/command-docs.js +2 -2
  197. package/dist/cli/command-docs.mjs +1 -1
  198. package/dist/cli/{csv-NX7NO3O6.js → csv-C56GSCEU.js} +13 -12
  199. package/dist/cli/{csv-DQ6GW5B5.mjs → csv-L54JS7TF.mjs} +4 -3
  200. package/dist/cli/{db-R72DFMP6.js → db-MOGRMZTA.js} +30 -27
  201. package/dist/cli/{db-2YP33M4K.mjs → db-YVBUW2DX.mjs} +10 -7
  202. package/dist/cli/describe-KYEULWPG.js +48 -0
  203. package/dist/cli/describe-NLZKKT7C.mjs +48 -0
  204. package/dist/cli/describe-core.d.mts +153 -5
  205. package/dist/cli/describe-core.d.ts +153 -5
  206. package/dist/cli/describe-core.js +9 -5
  207. package/dist/cli/describe-core.mjs +10 -6
  208. package/dist/cli/{executions-ZLHD4QIT.js → executions-A7L4ULPP.js} +9 -7
  209. package/dist/cli/{executions-WFBU7L2Q.mjs → executions-ZBGSTT37.mjs} +7 -5
  210. package/dist/cli/{feedback-CN3HJFVF.mjs → feedback-G6GU37FD.mjs} +6 -5
  211. package/dist/cli/{feedback-NDV6TPHG.js → feedback-OHLY7RYD.js} +10 -9
  212. package/dist/cli/getting-started.d.mts +6 -6
  213. package/dist/cli/getting-started.d.ts +6 -6
  214. package/dist/cli/getting-started.js +2 -2
  215. package/dist/cli/getting-started.mjs +1 -1
  216. package/dist/cli/git-P76N4NDQ.js +25 -0
  217. package/dist/cli/{git-QAD6E3HW.mjs → git-PKZW3QD5.mjs} +5 -4
  218. package/dist/cli/index.js +152 -142
  219. package/dist/cli/index.mjs +56 -46
  220. package/dist/cli/{legacy-noops-KVC5QJ74.js → legacy-noops-5LM3D724.js} +8 -7
  221. package/dist/cli/{legacy-noops-TPTKNBI2.mjs → legacy-noops-LJJYG6YA.mjs} +5 -4
  222. package/dist/cli/{monitors-SV57JFLO.mjs → monitors-72QV4ALO.mjs} +19 -6
  223. package/dist/cli/{monitors-KCROV6PJ.js → monitors-UX3H5DC2.js} +103 -90
  224. package/dist/cli/{org-KX6QIR7A.mjs → org-6RRRKOCP.mjs} +9 -6
  225. package/dist/cli/{org-NJYX5743.js → org-IF7ISUVB.js} +70 -67
  226. package/dist/cli/pages-3SU3HKL7.js +252 -0
  227. package/dist/cli/pages-DXDYYKEK.mjs +252 -0
  228. package/dist/cli/{play-IQQ57L7Z.mjs → play-AHASKRLA.mjs} +512 -1508
  229. package/dist/cli/{play-32L7EQN4.js → play-EUIUVLUH.js} +1090 -2086
  230. package/dist/cli/{providers-4WEC2EQN.mjs → providers-GWGE3WY3.mjs} +7 -5
  231. package/dist/cli/{providers-ZQV6QLVQ.js → providers-V5WU4VXJ.js} +10 -8
  232. package/dist/cli/{quickstart-RQ76RIUE.mjs → quickstart-OXKQ5ZST.mjs} +5 -4
  233. package/dist/cli/{quickstart-HKUSFADF.js → quickstart-QP65I5PF.js} +13 -12
  234. package/dist/cli/run-6MM72IGL.mjs +443 -0
  235. package/dist/cli/run-F3FTYS56.js +443 -0
  236. package/dist/cli/search-OYKOOI7A.js +32 -0
  237. package/dist/cli/{search-ZRAVFBZC.mjs → search-ZMEBVJZB.mjs} +8 -6
  238. package/dist/cli/{secrets-J3G5Y43U.js → secrets-ACND5N6A.js} +16 -14
  239. package/dist/cli/{secrets-CMJOVNVH.mjs → secrets-XRCJFF3L.mjs} +7 -5
  240. package/dist/cli/{sessions-MDQYY5CB.mjs → sessions-RTK3CEW6.mjs} +5 -4
  241. package/dist/cli/{sessions-WY7VN4AE.js → sessions-ZGRJPCFF.js} +6 -5
  242. package/dist/cli/{settings-HTNTFKCE.js → settings-PD5KWQQZ.js} +80 -77
  243. package/dist/cli/{settings-4RWZPCT5.mjs → settings-XDRBPRDE.mjs} +14 -11
  244. package/dist/cli/{setup-P3GYYZWG.mjs → setup-3HPYAOCC.mjs} +12 -10
  245. package/dist/cli/{setup-QGCAP62X.js → setup-E2Q6PXHC.js} +53 -51
  246. package/dist/cli/{skills-7NAE4ICL.mjs → skills-OOQFMPOV.mjs} +7 -6
  247. package/dist/cli/skills-XYWV52KB.js +31 -0
  248. package/dist/cli/tools-ASCDZJCK.js +55 -0
  249. package/dist/cli/tools-C5ZT3UIC.mjs +55 -0
  250. package/dist/cli/update-5RQSEIFM.js +33 -0
  251. package/dist/cli/{update-GODLRKNB.mjs → update-ZWJTADIW.mjs} +9 -8
  252. package/dist/cli/{workflow-4BXOUVEO.mjs → workflow-23NMPAJ7.mjs} +10 -8
  253. package/dist/cli/{workflow-AO3A6LXN.js → workflow-TCXU5YJV.js} +20 -18
  254. package/dist/client-DS2IWYZF.d.ts +10 -0
  255. package/dist/client-DTwnz_AW.d.mts +10 -0
  256. package/dist/{client-CYqG23K1.d.ts → client-core-B_6HAIBy.d.ts} +385 -12
  257. package/dist/{client-BbU5_j7n.d.mts → client-core-DzBSlY1U.d.mts} +385 -12
  258. package/dist/{compiler-manifest-CWz_sNOQ.d.ts → compiler-manifest-Dcyd3-Zd.d.mts} +43 -1
  259. package/dist/{compiler-manifest-CWz_sNOQ.d.mts → compiler-manifest-Dcyd3-Zd.d.ts} +43 -1
  260. package/dist/errors-d-sTrZhe.d.mts +142 -0
  261. package/dist/errors-yQwfgrcX.d.ts +142 -0
  262. package/dist/{index-BF2JB_Ug.d.mts → index-C6oXchjN.d.mts} +1 -1
  263. package/dist/{index-4NPXDzlD.d.ts → index-P56zy_z5.d.ts} +1 -1
  264. package/dist/index.d.mts +11 -147
  265. package/dist/index.d.ts +11 -147
  266. package/dist/index.js +15 -11
  267. package/dist/index.mjs +14 -10
  268. package/dist/install-integrity.json +141 -104
  269. package/dist/plays/bundle-play-file.d.mts +3 -3
  270. package/dist/plays/bundle-play-file.d.ts +3 -3
  271. package/dist/plays/bundle-play-file.mjs +2 -1
  272. package/dist/plays/play-description.d.mts +2 -2
  273. package/dist/plays/play-description.d.ts +2 -2
  274. package/dist/plays/play-description.js +2 -2
  275. package/dist/plays/play-description.mjs +1 -1
  276. package/dist/plays/run-request.d.mts +2 -2
  277. package/dist/plays/run-request.d.ts +2 -2
  278. package/dist/release.d.mts +1 -1
  279. package/dist/release.d.ts +1 -1
  280. package/dist/release.js +2 -2
  281. package/dist/release.mjs +1 -1
  282. package/dist/server.d.mts +17 -0
  283. package/dist/server.d.ts +17 -0
  284. package/dist/server.js +76 -0
  285. package/dist/server.mjs +76 -0
  286. package/package.json +6 -1
  287. package/dist/cli/auth-IACERYQH.js +0 -40
  288. package/dist/cli/chunk-PQUUWFXY.js +0 -95
  289. package/dist/cli/chunk-YBWAG72P.mjs +0 -95
  290. package/dist/cli/chunk-YQDUODZW.js +0 -1710
  291. package/dist/cli/git-JVI36ZFV.js +0 -24
  292. package/dist/cli/search-75X5LTDE.js +0 -30
  293. package/dist/cli/skills-BKJ53JOQ.js +0 -30
  294. package/dist/cli/tools-COWMIEJ6.mjs +0 -45
  295. package/dist/cli/tools-TASOCE7I.js +0 -45
  296. package/dist/cli/update-SJIKVME6.js +0 -32
@@ -1,4 +1,5 @@
1
1
  import { hydrateRetainedPlayPipelines } from '../../plays/execution-pipeline';
2
+ import { isInternalWorkReceiptKey } from '../work-receipt-storage-contract';
2
3
  /**
3
4
  * Runtime receipt gateway dispatch.
4
5
  *
@@ -962,6 +963,41 @@ export function createReceiptGatewayDispatcher(input: {
962
963
  );
963
964
  const scopeError = requireReceiptScope(scope, body);
964
965
  if (scopeError) return scopeError;
966
+ if (
967
+ body.action !== 'get_runtime_step_receipt' &&
968
+ body.action !== 'get_runtime_step_receipts'
969
+ ) {
970
+ // Raw callers may carry extra fields. No key-bearing field can shadow another.
971
+ const keys: string[] = [];
972
+ if ('key' in body && typeof body.key === 'string') keys.push(body.key);
973
+ if ('keys' in body && Array.isArray(body.keys)) {
974
+ keys.push(
975
+ ...body.keys.filter((key): key is string => typeof key === 'string'),
976
+ );
977
+ }
978
+ if ('receipts' in body && Array.isArray(body.receipts)) {
979
+ keys.push(
980
+ ...body.receipts.flatMap((receipt) =>
981
+ receipt &&
982
+ typeof receipt === 'object' &&
983
+ 'key' in receipt &&
984
+ typeof receipt.key === 'string'
985
+ ? [receipt.key]
986
+ : [],
987
+ ),
988
+ );
989
+ }
990
+ // Reject before value persistence or an injected/coalesced commit path.
991
+ if (keys.some((key) => isInternalWorkReceiptKey(key.trim()))) {
992
+ return receiptGatewayJsonResponse(
993
+ {
994
+ error:
995
+ 'Internal runtime facts cannot be mutated through generic work receipt operations.',
996
+ },
997
+ { status: 400 },
998
+ );
999
+ }
1000
+ }
965
1001
  const runId = String(body.runId || scope.runId);
966
1002
  // Additive read presentation. Older callers omit this and receive the
967
1003
  // exact hydrated body they did before; only a Foundation cache probe asks
@@ -15,6 +15,8 @@ export type RunLedgerDispatchLaunch = Pick<
15
15
  | 'runLedgerExecutorToken'
16
16
  | 'baseUrl'
17
17
  | 'runtimeApiBaseUrl'
18
+ | 'arrayInputTerminalRetirementSupported'
19
+ | 'arrayInputTerminalProjectionOrigin'
18
20
  | 'runtimeTokenOrigin'
19
21
  | 'orgId'
20
22
  | 'runtimeAuthority'
@@ -33,6 +35,8 @@ export function runLedgerDispatchLaunchSql(alias: string): string {
33
35
  'runLedgerExecutorToken',
34
36
  'baseUrl',
35
37
  'runtimeApiBaseUrl',
38
+ 'arrayInputTerminalRetirementSupported',
39
+ 'arrayInputTerminalProjectionOrigin',
36
40
  'runtimeTokenOrigin',
37
41
  'orgId',
38
42
  'runtimeAuthority',
@@ -12,6 +12,7 @@ import { isIsolatedRuntimeSchedulerSchema } from '../runtime-scheduler-topology'
12
12
  import {
13
13
  dispatchRunLedgerOutboxToLedgerBatchOnceWithClientScope,
14
14
  postgresSchedulerNotifyChannel,
15
+ readPostgresSchedulerOutboxAdmissionHints,
15
16
  readPostgresSchedulerOutboxNextDueAt,
16
17
  type PostgresSchedulerOptions,
17
18
  type PostgresSchedulerOutboxProjectionResult,
@@ -19,6 +20,7 @@ import {
19
20
  type RunLedgerOutboxHeadPriority,
20
21
  type RunLedgerOutboxTokenAuthority,
21
22
  type RunLedgerOutboxWithClient,
23
+ type RunLedgerOutboxAdmissionHint,
22
24
  } from './postgres';
23
25
  import {
24
26
  acquirePgNotifyHub,
@@ -74,7 +76,11 @@ export const RUN_LEDGER_OUTBOX_RECOVERY_MAX_IN_FLIGHT = 32;
74
76
  // The higher exported ceiling remains available to isolated recovery callers,
75
77
  // but it is not the steady-state production setting.
76
78
  const RUN_LEDGER_OUTBOX_RECOVERY_PRODUCTION_IN_FLIGHT = 8;
77
- const RUN_LEDGER_OUTBOX_RECOVERY_INDEX_IN_FLIGHT = 4;
79
+ // Production runs two projector replicas, so four index deliveries per
80
+ // replica provide eight shared slots. Preview has one projector replica; give
81
+ // it the same total bounded search-index capacity.
82
+ const RUN_LEDGER_OUTBOX_RECOVERY_PRODUCTION_INDEX_IN_FLIGHT = 4;
83
+ const RUN_LEDGER_OUTBOX_RECOVERY_PREVIEW_INDEX_IN_FLIGHT = 8;
78
84
  // Admissions retain three of four claim opportunities. The fourth selects
79
85
  // the oldest eligible causal head across all runs, preventing terminal work
80
86
  // from starving behind continuous new admissions. An empty class never costs
@@ -94,6 +100,11 @@ export type RunLedgerOutboxRecoveryDeps = {
94
100
  headPriority: RunLedgerOutboxHeadPriority,
95
101
  runId?: string,
96
102
  ) => Promise<PostgresSchedulerOutboxProjectionResult>;
103
+ /** Discardable admission candidates after a productive global delivery. */
104
+ discoverAdmissionHints?: (input: {
105
+ limit: number;
106
+ excludeRunIds: readonly string[];
107
+ }) => Promise<RunLedgerOutboxAdmissionHint[]>;
97
108
  /** Independent index deliveries share this controller and notification source. */
98
109
  dispatchObservabilityOnce?: (
99
110
  runId?: string,
@@ -134,6 +145,14 @@ export function runLedgerOutboxRecoveryParallelism(
134
145
  : RUN_LEDGER_OUTBOX_RECOVERY_PRODUCTION_IN_FLIGHT;
135
146
  }
136
147
 
148
+ export function runLedgerOutboxObservabilityParallelism(
149
+ environment: 'preview' | 'production',
150
+ ): number {
151
+ return environment === 'preview'
152
+ ? RUN_LEDGER_OUTBOX_RECOVERY_PREVIEW_INDEX_IN_FLIGHT
153
+ : RUN_LEDGER_OUTBOX_RECOVERY_PRODUCTION_INDEX_IN_FLIGHT;
154
+ }
155
+
137
156
  export type RunLedgerOutboxRecoveryController = {
138
157
  /**
139
158
  * Ask the singleton projector to re-read durable outbox work. This is
@@ -264,15 +283,21 @@ export function startRunLedgerOutboxRecovery(
264
283
  let nextDispatchId = 0;
265
284
  let lastDispatchSettledAt: number | null = null;
266
285
  let admissionTurns = 0;
286
+ type LifecycleOrigin = 'global' | 'producer_hint' | 'admission_snapshot';
267
287
  const dispatchOnce = async (
268
288
  observability = false,
269
289
  runId?: string,
290
+ origin: LifecycleOrigin = runId === undefined ? 'global' : 'producer_hint',
270
291
  ): Promise<PostgresSchedulerOutboxProjectionResult> => {
271
292
  const oldestReady =
272
293
  admissionTurns === ADMISSION_TURNS_PER_OLDEST_READY_TURN;
273
- // Scoped claims cannot change which run wins, so they must not consume
274
- // the global drain's starvation-prevention turns.
275
- if (!observability && runId === undefined)
294
+ // Producer hints do not choose a global winner. Admission snapshots do,
295
+ // even though their final claim is scoped and can lose to another owner.
296
+ if (!observability && origin === 'admission_snapshot' && oldestReady)
297
+ throw new Error(
298
+ 'The oldest-ready opportunity requires a fresh global claim.',
299
+ );
300
+ if (!observability && origin !== 'producer_hint')
276
301
  admissionTurns = oldestReady ? 0 : admissionTurns + 1;
277
302
  const id = nextDispatchId++;
278
303
  inFlightStartedAt.set(id, now());
@@ -373,7 +398,7 @@ export function startRunLedgerOutboxRecovery(
373
398
  };
374
399
 
375
400
  const scheduleFailureRetry = (
376
- stage: 'dispatch' | 'next_due',
401
+ stage: 'dispatch' | 'next_due' | 'admission_discovery',
377
402
  error: unknown,
378
403
  ) => {
379
404
  failureCount += 1;
@@ -549,13 +574,24 @@ export function startRunLedgerOutboxRecovery(
549
574
  id: symbol;
550
575
  observability: boolean;
551
576
  runId?: string;
577
+ origin: LifecycleOrigin;
552
578
  result:
553
579
  | PromiseSettledResult<PostgresSchedulerOutboxProjectionResult>
554
580
  | { status: 'skipped' };
555
581
  };
556
582
  const pending = new Set<symbol>();
557
583
  const pendingObservability = new Set<symbol>();
584
+ const pendingRunIds = new Map<symbol, string>();
558
585
  const deliveries: Delivery[] = [];
586
+ let admissionHints: RunLedgerOutboxAdmissionHint[] = [];
587
+ let discoveryPending: Promise<void> | null = null;
588
+ let admissionWindowGeneration = 0;
589
+ // Reserve scheduling order without consuming fairness turns before the
590
+ // actual handoff. launch() defers dispatch by one microtask.
591
+ let scheduledGlobalTurns = 0;
592
+ const nextGlobalTurn = () =>
593
+ (admissionTurns + scheduledGlobalTurns) %
594
+ (ADMISSION_TURNS_PER_OLDEST_READY_TURN + 1);
559
595
  let refill = false;
560
596
  let observabilityRefill = false;
561
597
  let dispatchFailed = false;
@@ -583,21 +619,41 @@ export function startRunLedgerOutboxRecovery(
583
619
  completed = attempted = projected = retrying = blocked = 0;
584
620
  };
585
621
 
586
- const launch = (observability = false, runId?: string) => {
622
+ const launch = (
623
+ observability = false,
624
+ runId?: string,
625
+ origin: LifecycleOrigin = runId === undefined
626
+ ? 'global'
627
+ : 'producer_hint',
628
+ ) => {
587
629
  const id = Symbol();
630
+ if (
631
+ !observability &&
632
+ origin === 'global' &&
633
+ nextGlobalTurn() === ADMISSION_TURNS_PER_OLDEST_READY_TURN
634
+ ) {
635
+ // A newly eligible oldest run must win from a fresh global snapshot.
636
+ // Nothing read for the preceding admission window survives this turn.
637
+ admissionHints = [];
638
+ admissionWindowGeneration++;
639
+ }
588
640
  pending.add(id);
589
641
  if (observability) pendingObservability.add(id);
642
+ if (!observability && runId !== undefined) pendingRunIds.set(id, runId);
643
+ if (!observability && origin !== 'producer_hint') scheduledGlobalTurns++;
590
644
  const settle = (result: Delivery['result']) => {
591
645
  if (result.status === 'rejected' && !dispatchFailed) {
592
646
  dispatchFailed = true;
593
647
  scheduleFailureRetry('dispatch', result.reason);
594
648
  }
595
- deliveries.push({ id, observability, runId, result });
649
+ deliveries.push({ id, observability, runId, origin, result });
596
650
  wakeActiveDrain?.();
597
651
  };
598
652
  // Subscribe once per delivery. Repeated Promise.race calls would retain
599
653
  // a new reaction on a slow callback every time a faster slot completes.
600
654
  void Promise.resolve().then(async () => {
655
+ if (!observability && origin !== 'producer_hint')
656
+ scheduledGlobalTurns--;
601
657
  if (closed || dispatchFailed || cooldownUntilMs !== null) {
602
658
  settle({ status: 'skipped' });
603
659
  return;
@@ -605,7 +661,7 @@ export function startRunLedgerOutboxRecovery(
605
661
  try {
606
662
  settle({
607
663
  status: 'fulfilled',
608
- value: await dispatchOnce(observability, runId),
664
+ value: await dispatchOnce(observability, runId, origin),
609
665
  });
610
666
  } catch (reason) {
611
667
  settle({ status: 'rejected', reason });
@@ -613,6 +669,51 @@ export function startRunLedgerOutboxRecovery(
613
669
  });
614
670
  };
615
671
 
672
+ const discover = (limit: number) => {
673
+ const generation = admissionWindowGeneration;
674
+ discoveryPending = Promise.resolve()
675
+ .then(() =>
676
+ deps.discoverAdmissionHints!({
677
+ limit,
678
+ excludeRunIds: [...new Set(pendingRunIds.values())],
679
+ }),
680
+ )
681
+ .then((hints) => {
682
+ if (
683
+ closed ||
684
+ dispatchFailed ||
685
+ cooldownUntilMs !== null ||
686
+ generation !== admissionWindowGeneration
687
+ )
688
+ return;
689
+ if (
690
+ hints.length > limit ||
691
+ hints.some(
692
+ (hint) => hint.origin !== 'admission_snapshot' || !hint.runId,
693
+ ) ||
694
+ new Set(hints.map((hint) => hint.runId)).size !== hints.length
695
+ )
696
+ throw new Error(
697
+ 'Outbox admission discovery returned an invalid bounded window.',
698
+ );
699
+ admissionHints = hints;
700
+ if (hints.length === 0) {
701
+ refill = false;
702
+ void scheduleNextDue();
703
+ }
704
+ })
705
+ .catch((error) => {
706
+ if (!dispatchFailed) {
707
+ dispatchFailed = true;
708
+ scheduleFailureRetry('admission_discovery', error);
709
+ }
710
+ })
711
+ .finally(() => {
712
+ discoveryPending = null;
713
+ wakeActiveDrain?.();
714
+ });
715
+ };
716
+
616
717
  const canProbeLifecycle = () =>
617
718
  !closed &&
618
719
  !dispatchFailed &&
@@ -659,12 +760,33 @@ export function startRunLedgerOutboxRecovery(
659
760
  while (
660
761
  pending.size < parallelism &&
661
762
  pending.size - pendingObservability.size < lifecycleParallelism
662
- )
663
- launch();
664
- refill = false;
763
+ ) {
764
+ if (!deps.discoverAdmissionHints) {
765
+ launch();
766
+ continue;
767
+ }
768
+ const turn = nextGlobalTurn();
769
+ if (turn === ADMISSION_TURNS_PER_OLDEST_READY_TURN) {
770
+ launch();
771
+ continue;
772
+ }
773
+ const hint = admissionHints.shift();
774
+ if (hint) {
775
+ launch(false, hint.runId, hint.origin);
776
+ continue;
777
+ }
778
+ if (!discoveryPending)
779
+ discover(ADMISSION_TURNS_PER_OLDEST_READY_TURN - turn);
780
+ break;
781
+ }
782
+ if (!discoveryPending)
783
+ refill =
784
+ admissionHints.length > 0 ||
785
+ (deps.discoverAdmissionHints !== undefined &&
786
+ nextGlobalTurn() === ADMISSION_TURNS_PER_OLDEST_READY_TURN);
665
787
  }
666
788
  }
667
- if (pending.size === 0) {
789
+ if (pending.size === 0 && discoveryPending === null) {
668
790
  reportDeliveries();
669
791
  // Metadata discovery is single-flight, but never owns a claim slot.
670
792
  // A slow snapshot must not delay a producer's next scoped claim.
@@ -678,7 +800,14 @@ export function startRunLedgerOutboxRecovery(
678
800
  if (
679
801
  deliveries.length > 0 ||
680
802
  canProbeLifecycle() ||
681
- canProbeObservability()
803
+ canProbeObservability() ||
804
+ (!closed &&
805
+ !dispatchFailed &&
806
+ cooldownUntilMs === null &&
807
+ refill &&
808
+ discoveryPending === null &&
809
+ pending.size < parallelism &&
810
+ pending.size - pendingObservability.size < lifecycleParallelism)
682
811
  )
683
812
  resolve();
684
813
  });
@@ -687,6 +816,7 @@ export function startRunLedgerOutboxRecovery(
687
816
  if (!delivery) continue;
688
817
  pending.delete(delivery.id);
689
818
  pendingObservability.delete(delivery.id);
819
+ pendingRunIds.delete(delivery.id);
690
820
  if (delivery.result.status !== 'fulfilled') {
691
821
  // Stop new claims but settle every already-started delivery before
692
822
  // cooldown or close can hand ownership to another drain.
@@ -706,7 +836,7 @@ export function startRunLedgerOutboxRecovery(
706
836
  }
707
837
  if (
708
838
  result.retrying > 0 ||
709
- (delivery.runId === undefined && result.attempted > 0)
839
+ (delivery.origin !== 'producer_hint' && result.attempted > 0)
710
840
  )
711
841
  dueClockKnownLane = null;
712
842
  if (result.retrying > 0) dueClockGeneration += 1;
@@ -731,7 +861,7 @@ export function startRunLedgerOutboxRecovery(
731
861
  void scheduleNextDue(result.retrying > 0);
732
862
  // Retryable rows own durable retry clocks. The SQL claim keeps their
733
863
  // run ordered while successful slots keep unrelated runs moving.
734
- if (delivery.runId !== undefined) {
864
+ if (delivery.runId !== undefined && delivery.origin === 'producer_hint') {
735
865
  // Continue only the notified run. Refilling with global claims here
736
866
  // would turn one productive scoped claim back into whole-outbox scans.
737
867
  if (result.attempted > 0) {
@@ -749,7 +879,7 @@ export function startRunLedgerOutboxRecovery(
749
879
  }
750
880
  } else if (delivery.observability) {
751
881
  observabilityRefill = result.attempted > 0;
752
- } else refill = result.attempted > 0;
882
+ } else if (result.attempted > 0) refill = true;
753
883
  }
754
884
  };
755
885
 
@@ -1037,11 +1167,14 @@ export function startRunLedgerOutboxRecoveryController(input: {
1037
1167
  onDelivered?: (deliveries: readonly RunLedgerOutboxDeliveredRow[]) => void;
1038
1168
  }): RunLedgerOutboxRecoveryController {
1039
1169
  const schedulerOptions = input.schedulerOptions ?? {};
1170
+ const environment = input.environment ?? 'production';
1171
+ const observabilityParallelism =
1172
+ runLedgerOutboxObservabilityParallelism(environment);
1040
1173
  const observabilityPoolOptions: RuntimeSchedulerPoolOptions = {
1041
1174
  ...input.poolOptions,
1042
1175
  purpose: 'observability',
1043
1176
  applicationName: 'deepline-runtime-observability',
1044
- maxClients: RUN_LEDGER_OUTBOX_RECOVERY_INDEX_IN_FLIGHT,
1177
+ maxClients: observabilityParallelism,
1045
1178
  };
1046
1179
  const dispatch = (
1047
1180
  headPriority: RunLedgerOutboxHeadPriority,
@@ -1088,15 +1221,21 @@ export function startRunLedgerOutboxRecoveryController(input: {
1088
1221
  }),
1089
1222
  ),
1090
1223
  dispatchOnce: (headPriority, runId) => dispatch(headPriority, false, runId),
1224
+ discoverAdmissionHints: (discovery) =>
1225
+ withRuntimeSchedulerClient(input.poolOptions, (client) =>
1226
+ readPostgresSchedulerOutboxAdmissionHints(
1227
+ client,
1228
+ discovery,
1229
+ schedulerOptions,
1230
+ ),
1231
+ ),
1091
1232
  dispatchObservabilityOnce: (runId) => dispatch('oldest_ready', true, runId),
1092
- observabilityParallelism: RUN_LEDGER_OUTBOX_RECOVERY_INDEX_IN_FLIGHT,
1233
+ observabilityParallelism,
1093
1234
  // `dispatchRunLedgerOutboxToLedgerBatchOnceWithClientScope` releases each
1094
1235
  // short scheduler checkout before it calls the Vercel gateway. Production
1095
- // retains two replicas at eight slots each; one isolated Preview replica
1096
- // uses the same controller's existing hard ceiling of 32.
1097
- parallelism: runLedgerOutboxRecoveryParallelism(
1098
- input.environment ?? 'production',
1099
- ),
1236
+ // retains two replicas at eight lifecycle and four search slots each; one
1237
+ // Preview replica uses 32 lifecycle and eight search slots.
1238
+ parallelism: runLedgerOutboxRecoveryParallelism(environment),
1100
1239
  notifyUnavailableSafetyWakeMs: runLedgerOutboxNotifySafetyWakeMs(
1101
1240
  schedulerOptions.schema,
1102
1241
  ),