deepline 0.3.88 → 0.3.90

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 (280) hide show
  1. package/contracts/install-commands.json +29 -0
  2. package/dist/bundling-sources/sdk/src/client.ts +652 -39
  3. package/dist/bundling-sources/sdk/src/config.ts +77 -0
  4. package/dist/bundling-sources/sdk/src/http.ts +76 -30
  5. package/dist/bundling-sources/sdk/src/index.ts +10 -0
  6. package/dist/bundling-sources/sdk/src/monitor-fleet-contract.ts +1 -1
  7. package/dist/bundling-sources/sdk/src/pagination.ts +25 -0
  8. package/dist/bundling-sources/sdk/src/play.ts +15 -1
  9. package/dist/bundling-sources/sdk/src/plays/bundle-play-file.ts +3 -3
  10. package/dist/bundling-sources/sdk/src/release.ts +16 -9
  11. package/dist/bundling-sources/sdk/src/types.ts +106 -4
  12. package/dist/bundling-sources/shared_libs/integration-contracts/AGENTS.md +9 -0
  13. package/dist/bundling-sources/shared_libs/integration-contracts/README.md +3 -0
  14. package/dist/bundling-sources/shared_libs/integration-contracts/index.ts +2 -0
  15. package/dist/bundling-sources/shared_libs/monitors/analytics-install-guides.ts +77 -0
  16. package/dist/bundling-sources/shared_libs/monitors/analytics-public.ts +10 -0
  17. package/dist/bundling-sources/shared_libs/monitors/billing/charges.ts +125 -0
  18. package/dist/bundling-sources/shared_libs/monitors/billing/policy-builders.ts +686 -0
  19. package/dist/bundling-sources/shared_libs/monitors/billing/pricing.ts +54 -0
  20. package/dist/bundling-sources/shared_libs/monitors/billing/public-pricing.ts +72 -0
  21. package/dist/bundling-sources/shared_libs/monitors/billing/session.ts +45 -0
  22. package/dist/bundling-sources/shared_libs/monitors/billing/state.ts +454 -0
  23. package/dist/bundling-sources/shared_libs/monitors/billing/tamradar.ts +260 -0
  24. package/dist/bundling-sources/shared_libs/monitors/billing/types.ts +215 -0
  25. package/dist/bundling-sources/shared_libs/monitors/callback-security.ts +333 -0
  26. package/dist/bundling-sources/shared_libs/monitors/cursor-page.ts +42 -0
  27. package/dist/bundling-sources/shared_libs/monitors/deactivation-reasons.ts +16 -0
  28. package/dist/bundling-sources/shared_libs/monitors/framework-managed-payload-fields.ts +71 -0
  29. package/dist/bundling-sources/shared_libs/monitors/generated/provider-monitor-callback-admission-targets.ts +16 -0
  30. package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +270 -0
  31. package/dist/bundling-sources/shared_libs/monitors/inbound-publish-key.ts +39 -0
  32. package/dist/bundling-sources/shared_libs/monitors/inbound-queue.ts +82 -0
  33. package/dist/bundling-sources/shared_libs/monitors/inventory-reconciliation.ts +59 -0
  34. package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +471 -0
  35. package/dist/bundling-sources/shared_libs/monitors/org-monitor-limits.ts +1 -1
  36. package/dist/bundling-sources/shared_libs/monitors/package.json +36 -0
  37. package/dist/bundling-sources/shared_libs/monitors/provider-callback-verification.ts +1125 -0
  38. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +305 -0
  39. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-capability.ts +964 -0
  40. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-consumer-health.ts +56 -0
  41. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-errors.ts +131 -0
  42. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-identity-claims.ts +535 -0
  43. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-legacy-aliases.ts +16 -0
  44. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-priority-execution.ts +56 -0
  45. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-public-aliases.ts +28 -0
  46. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-runtime-read-eligibility.ts +38 -0
  47. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-state.ts +122 -0
  48. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-status.ts +10 -0
  49. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-upstream-identity.ts +112 -0
  50. package/dist/bundling-sources/shared_libs/monitors/provider-webhook-monitor-runtime.ts +300 -0
  51. package/dist/bundling-sources/shared_libs/monitors/quickstart-prompts.ts +22 -0
  52. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-dead-letter.ts +245 -0
  53. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-message.ts +38 -0
  54. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue-ack-probe.ts +94 -0
  55. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue-delivery.ts +60 -0
  56. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue.ts +60 -0
  57. package/dist/bundling-sources/shared_libs/monitors/snitcher-install-validation.ts +93 -0
  58. package/dist/bundling-sources/shared_libs/monitors/snitcher-ip2company.ts +332 -0
  59. package/dist/bundling-sources/shared_libs/monitors/snitcher-radar.ts +221 -0
  60. package/dist/bundling-sources/shared_libs/monitors/starter-templates.ts +105 -0
  61. package/dist/bundling-sources/shared_libs/monitors/tracking-provider-guidance.ts +73 -0
  62. package/dist/bundling-sources/shared_libs/monitors/tracking-provider-integrations.ts +81 -0
  63. package/dist/bundling-sources/shared_libs/monitors/tsconfig.json +10 -0
  64. package/dist/bundling-sources/shared_libs/observability/build-context.ts +13 -0
  65. package/dist/bundling-sources/shared_libs/observability/log-metadata.ts +160 -0
  66. package/dist/bundling-sources/shared_libs/observability/request-context.ts +68 -0
  67. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +654 -0
  68. package/dist/bundling-sources/shared_libs/observability/scheduled-work-manual.ts +35 -0
  69. package/dist/bundling-sources/shared_libs/observability/scheduled-work.ts +5 -0
  70. package/dist/bundling-sources/shared_libs/play-data-plane/neon-constants.ts +9 -0
  71. package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +272 -0
  72. package/dist/bundling-sources/shared_libs/play-runtime/activity-observation.ts +6 -11
  73. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +135 -12
  74. package/dist/bundling-sources/shared_libs/play-runtime/async-operation.ts +66 -1
  75. package/dist/bundling-sources/shared_libs/play-runtime/async-play-invocation.ts +77 -0
  76. package/dist/bundling-sources/shared_libs/play-runtime/bounceban-batching.ts +137 -0
  77. package/dist/bundling-sources/shared_libs/play-runtime/checkpoint-boundaries.ts +70 -0
  78. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +1159 -166
  79. package/dist/bundling-sources/shared_libs/play-runtime/coordinator-headers.ts +1 -32
  80. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +103 -0
  81. package/dist/bundling-sources/shared_libs/play-runtime/daytona-payload-contract.ts +68 -0
  82. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +103 -0
  83. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +725 -0
  84. package/dist/bundling-sources/shared_libs/play-runtime/default-batch-strategies.ts +20 -1
  85. package/dist/bundling-sources/shared_libs/play-runtime/durable-call-cache.ts +29 -0
  86. package/dist/bundling-sources/shared_libs/play-runtime/execution-capabilities.ts +29 -0
  87. package/dist/bundling-sources/shared_libs/play-runtime/execution-gateway-invocation-fence.ts +442 -0
  88. package/dist/bundling-sources/shared_libs/play-runtime/execution-protocol.ts +7 -1
  89. package/dist/bundling-sources/shared_libs/play-runtime/fixture-behavior.ts +18 -0
  90. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +9 -0
  91. package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +1 -1
  92. package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +1 -1
  93. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/contracts.ts +66 -0
  94. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/job.ts +145 -0
  95. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/ports.ts +21 -0
  96. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/postgres-store.ts +170 -0
  97. package/dist/bundling-sources/shared_libs/play-runtime/internal-bootstrap-token.ts +1322 -0
  98. package/dist/bundling-sources/shared_libs/play-runtime/internal-step-ids.ts +2 -2
  99. package/dist/bundling-sources/shared_libs/play-runtime/lane-retirement-gate.ts +189 -0
  100. package/dist/bundling-sources/shared_libs/play-runtime/launch-source-policy.ts +112 -0
  101. package/dist/bundling-sources/shared_libs/play-runtime/map-execution-frame.ts +8 -0
  102. package/dist/bundling-sources/shared_libs/play-runtime/perf-trace.ts +127 -0
  103. package/dist/bundling-sources/shared_libs/play-runtime/play-artifact-runtime-contract.ts +5 -0
  104. package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +24 -1
  105. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/contracts.ts +56 -0
  106. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/index.ts +13 -0
  107. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/job.ts +41 -0
  108. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/ports.ts +17 -0
  109. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/postgres-adapter.ts +54 -0
  110. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/contracts.ts +114 -0
  111. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/engine-suspension.ts +108 -0
  112. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/index.ts +36 -0
  113. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/job.ts +97 -0
  114. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/ports.ts +104 -0
  115. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/postgres-fence-adapter.ts +263 -0
  116. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/worker-terminal-projection.ts +64 -0
  117. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/contracts.ts +29 -0
  118. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/gateway-adapter.ts +56 -0
  119. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/index.ts +15 -0
  120. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/job.ts +65 -0
  121. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/ports.ts +17 -0
  122. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/contracts.ts +42 -0
  123. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/index.ts +17 -0
  124. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/job.ts +142 -0
  125. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/ports.ts +42 -0
  126. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/postgres-adapter.ts +102 -0
  127. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/contracts.ts +60 -0
  128. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/index.ts +16 -0
  129. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/job.ts +78 -0
  130. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/ports.ts +54 -0
  131. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/postgres-adapter.ts +71 -0
  132. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +4 -0
  133. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-semantics.ts +28 -0
  134. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +4 -0
  135. package/dist/bundling-sources/shared_libs/play-runtime/receipt-status.ts +5 -8
  136. package/dist/bundling-sources/shared_libs/play-runtime/run-failure.ts +23 -2
  137. package/dist/bundling-sources/shared_libs/play-runtime/run-identity.ts +168 -0
  138. package/dist/bundling-sources/shared_libs/play-runtime/run-snapshot-stream.ts +1 -1
  139. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +90 -13
  140. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts +6 -12
  141. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-start-admission.ts +68 -0
  142. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +21 -0
  143. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/bundle.ts +0 -1
  144. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +14 -43
  145. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +67 -213
  146. package/dist/bundling-sources/shared_libs/play-runtime/runtime-authority.ts +201 -0
  147. package/dist/bundling-sources/shared_libs/play-runtime/runtime-capacity-policy.ts +20 -0
  148. package/dist/bundling-sources/shared_libs/play-runtime/runtime-contract.ts +6 -0
  149. package/dist/bundling-sources/shared_libs/play-runtime/runtime-env.ts +12 -0
  150. package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +67 -0
  151. package/dist/bundling-sources/shared_libs/play-runtime/runtime-release-environment.ts +2 -0
  152. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sandbox-contract.ts +68 -0
  153. package/dist/bundling-sources/shared_libs/play-runtime/runtime-scheduler-topology.ts +38 -2
  154. package/dist/bundling-sources/shared_libs/play-runtime/runtime-telemetry.ts +108 -0
  155. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +4 -0
  156. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +3 -0
  157. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +37 -1
  158. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-deadline-reconciliation.ts +88 -0
  159. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-deploy-task.ts +124 -0
  160. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-run-task.ts +68 -0
  161. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-pool.ts +193 -0
  162. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-queue-lifecycle.ts +269 -0
  163. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-queue-suffix.ts +73 -0
  164. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +6642 -0
  165. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-shared.ts +897 -0
  166. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-metrics.ts +120 -0
  167. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +76 -0
  168. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd.ts +476 -0
  169. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-heavy-request-admission.ts +47 -0
  170. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-progress-registry.ts +147 -0
  171. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/index.ts +27 -0
  172. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/lazy.ts +50 -0
  173. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/play-run-recovery.ts +98 -0
  174. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-budget-state.ts +260 -0
  175. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-pool.ts +1416 -0
  176. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +1255 -0
  177. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-state.ts +942 -0
  178. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +14636 -0
  179. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +888 -0
  180. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +355 -0
  181. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-terminal-transition.ts +46 -0
  182. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runner-push.ts +60 -0
  183. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-api-origin.ts +33 -0
  184. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-gateway-health.ts +64 -0
  185. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-capacity.ts +835 -0
  186. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-ledger-reconciliation.ts +1218 -0
  187. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-operation.ts +207 -0
  188. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-scheduler-schema.ts +10 -0
  189. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/scheduler-capacity.ts +123 -0
  190. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/scheduler-launch-read-observability.ts +78 -0
  191. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/submit-admission.ts +169 -0
  192. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/terminal-contract.ts +20 -0
  193. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-queue-metrics.ts +34 -0
  194. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-resource-metrics.ts +249 -0
  195. package/dist/bundling-sources/shared_libs/play-runtime/sheet-attempt-sql.ts +7 -0
  196. package/dist/bundling-sources/shared_libs/play-runtime/step-progress.ts +296 -0
  197. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/native-batch.ts +3 -3
  198. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/runtime-step-receipts-adapter.ts +20 -1
  199. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +60 -15
  200. package/dist/bundling-sources/shared_libs/play-runtime/tool-execution-outcome.ts +20 -0
  201. package/dist/bundling-sources/shared_libs/play-runtime/tool-http-errors.ts +1 -1
  202. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +1 -1
  203. package/dist/bundling-sources/shared_libs/play-runtime/transient-service-error.ts +12 -0
  204. package/dist/bundling-sources/shared_libs/play-runtime/vercel-protection.ts +14 -1
  205. package/dist/bundling-sources/shared_libs/play-runtime/work-receipt-storage-contract.ts +165 -0
  206. package/dist/bundling-sources/shared_libs/play-runtime/work-receipts.ts +15 -23
  207. package/dist/bundling-sources/shared_libs/play-runtime/workflow-executor-auth.ts +169 -0
  208. package/dist/bundling-sources/shared_libs/play-runtime/zerobounce-batching.ts +122 -0
  209. package/dist/bundling-sources/shared_libs/plays/artifact-types.ts +8 -3
  210. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +454 -17
  211. package/dist/bundling-sources/shared_libs/plays/bundling/index.ts +19 -4
  212. package/dist/bundling-sources/shared_libs/plays/contracts.ts +8 -14
  213. package/dist/bundling-sources/shared_libs/plays/core.ts +11 -6
  214. package/dist/bundling-sources/shared_libs/plays/deployment-status.ts +1 -1
  215. package/dist/bundling-sources/shared_libs/plays/docflow-binding-owner.ts +16 -11
  216. package/dist/bundling-sources/shared_libs/plays/docflow.ts +1 -1
  217. package/dist/bundling-sources/shared_libs/plays/email-status.ts +1 -1
  218. package/dist/bundling-sources/shared_libs/plays/play-grep-search.ts +39 -0
  219. package/dist/bundling-sources/shared_libs/plays/resolve-static-pipeline.ts +1 -1
  220. package/dist/bundling-sources/shared_libs/plays/share/copy.ts +271 -0
  221. package/dist/bundling-sources/shared_libs/plays/share/metrics.ts +140 -0
  222. package/dist/bundling-sources/shared_libs/plays/share/public-read-model.ts +86 -0
  223. package/dist/bundling-sources/shared_libs/plays/share/seo-quality.ts +181 -0
  224. package/dist/bundling-sources/shared_libs/plays/share/static-pipeline-summary.ts +658 -0
  225. package/dist/bundling-sources/shared_libs/plays/share/types.ts +197 -0
  226. package/dist/bundling-sources/shared_libs/plays/slack-hitl-timeout-error.ts +37 -0
  227. package/dist/bundling-sources/shared_libs/plays/slug.ts +115 -0
  228. package/dist/bundling-sources/shared_libs/plays/static-pipeline.ts +50 -15
  229. package/dist/bundling-sources/shared_libs/plays/tool-category-descriptions.ts +2 -2
  230. package/dist/bundling-sources/shared_libs/plays/tool-result-types.ts +1 -1
  231. package/dist/bundling-sources/shared_libs/product-notifications/catalog.ts +877 -0
  232. package/dist/bundling-sources/shared_libs/product-notifications/configuration-draft.ts +456 -0
  233. package/dist/bundling-sources/shared_libs/product-notifications/configuration.ts +566 -0
  234. package/dist/bundling-sources/shared_libs/product-notifications/content.ts +28 -0
  235. package/dist/bundling-sources/shared_libs/product-notifications/default-policy.ts +60 -0
  236. package/dist/bundling-sources/shared_libs/product-notifications/email.ts +246 -0
  237. package/dist/bundling-sources/shared_libs/product-notifications/evaluation.ts +280 -0
  238. package/dist/bundling-sources/shared_libs/product-notifications/events.ts +433 -0
  239. package/dist/bundling-sources/shared_libs/product-notifications/legacy-slack.ts +80 -0
  240. package/dist/bundling-sources/shared_libs/product-notifications/overflow.ts +18 -0
  241. package/dist/bundling-sources/shared_libs/product-notifications/rolling-limit.ts +24 -0
  242. package/dist/bundling-sources/shared_libs/product-notifications/slack-delivery.ts +624 -0
  243. package/dist/bundling-sources/shared_libs/product-notifications/slack-payload.ts +140 -0
  244. package/dist/bundling-sources/shared_libs/product-notifications/slack-transport.ts +75 -0
  245. package/dist/bundling-sources/shared_libs/product-notifications/workspace.ts +38 -0
  246. package/dist/bundling-sources/shared_libs/runtime-env.ts +12 -0
  247. package/dist/bundling-sources/shared_libs/security/email-blacklist.ts +42 -0
  248. package/dist/bundling-sources/shared_libs/security/header-safe-env.ts +35 -0
  249. package/dist/bundling-sources/shared_libs/security/internal-actor.ts +50 -0
  250. package/dist/bundling-sources/shared_libs/security/secret-redaction.ts +267 -0
  251. package/dist/bundling-sources/shared_libs/security/slack-sanitize.ts +133 -0
  252. package/dist/cli/getting-started.d.mts +52 -0
  253. package/dist/cli/getting-started.d.ts +52 -0
  254. package/dist/cli/getting-started.js +65 -0
  255. package/dist/cli/getting-started.mjs +36 -0
  256. package/dist/cli/index.d.mts +9 -0
  257. package/dist/cli/index.d.ts +9 -0
  258. package/dist/cli/index.js +1611 -453
  259. package/dist/cli/index.mjs +1596 -447
  260. package/dist/{compiler-manifest-Dbov16F7.d.mts → compiler-manifest-BaJfE-5H.d.mts} +136 -10
  261. package/dist/{compiler-manifest-Dbov16F7.d.ts → compiler-manifest-BaJfE-5H.d.ts} +136 -10
  262. package/dist/index.d.mts +910 -155
  263. package/dist/index.d.ts +910 -155
  264. package/dist/index.js +550 -64
  265. package/dist/index.mjs +550 -64
  266. package/dist/install-integrity.json +193 -4
  267. package/dist/monitor-fleet-contract.d.mts +138 -0
  268. package/dist/monitor-fleet-contract.d.ts +138 -0
  269. package/dist/monitor-fleet-contract.js +404 -0
  270. package/dist/monitor-fleet-contract.mjs +367 -0
  271. package/dist/plays/bundle-play-file.d.mts +8 -3
  272. package/dist/plays/bundle-play-file.d.ts +8 -3
  273. package/dist/plays/bundle-play-file.mjs +100 -20
  274. package/dist/release.d.mts +255 -0
  275. package/dist/release.d.ts +255 -0
  276. package/dist/release.js +215 -0
  277. package/dist/release.mjs +188 -0
  278. package/package.json +23 -4
  279. /package/dist/bundling-sources/shared_libs/{integrations/bettercontact-execution-policy.ts → integration-contracts/bettercontact/execution-policy.ts} +0 -0
  280. /package/dist/bundling-sources/shared_libs/{integrations/theirstack-execution-policy.ts → integration-contracts/theirstack/execution-policy.ts} +0 -0
@@ -0,0 +1,201 @@
1
+ import { mintWorkflowExecutorToken } from './/workflow-executor-auth';
2
+ import {
3
+ DEFAULT_RUNTIME_EXECUTION_CAPABILITIES,
4
+ normalizeRuntimeExecutionCapabilities,
5
+ type RuntimeAuthorityDescriptor,
6
+ type RuntimeExecutionCapability,
7
+ } from './/execution-capabilities';
8
+ import type { FixtureBehavior } from './/fixture-behavior';
9
+ import type { PlaySchedulerSubmitInput } from './/scheduler-backend';
10
+ import type { DirectCompletedTerminalContract } from './/scheduler-backends/terminal-contract';
11
+
12
+ export type RuntimeAuthority = {
13
+ executorToken: string;
14
+ descriptor: RuntimeAuthorityDescriptor;
15
+ };
16
+
17
+ /**
18
+ * Derive a child Run's durable authority from its admitted parent. The child
19
+ * owns its authored secret names and play identity; organization, actor,
20
+ * billing, scheduler placement, and capability policy remain parent-owned
21
+ * durable facts. This deliberately does not intersect secret names: a child
22
+ * Play resolves its own scoped declaration, where an equal name can identify
23
+ * a different Play-specific secret.
24
+ */
25
+ export function deriveAsyncChildRuntimeAuthority(input: {
26
+ parent: RuntimeAuthorityDescriptor;
27
+ workflowId: string;
28
+ runId: string;
29
+ playName: string;
30
+ billingRunId: string;
31
+ allowedSecrets: readonly string[];
32
+ }): RuntimeAuthorityDescriptor {
33
+ return {
34
+ orgId: input.parent.orgId,
35
+ workflowId: input.workflowId,
36
+ runId: input.runId,
37
+ // The scheduler-owned parent launch resolves the billing owner to the
38
+ // root before child admission. Keep the descriptor's token claim aligned
39
+ // with that durable run-state fact even for a legacy intermediate parent
40
+ // that predates `billingRunId` on its authority descriptor.
41
+ billingRunId: input.billingRunId,
42
+ playName: input.playName,
43
+ allowedSecrets: [...new Set(input.allowedSecrets)],
44
+ maxCreditsPerRun: input.parent.maxCreditsPerRun ?? null,
45
+ integrationMode: input.parent.integrationMode ?? null,
46
+ fixtureBehavior: input.parent.fixtureBehavior ?? null,
47
+ synthetic: input.parent.synthetic === true,
48
+ actorUserId: input.parent.actorUserId ?? null,
49
+ actorEmail: input.parent.actorEmail ?? null,
50
+ schedulerSchema: input.parent.schedulerSchema ?? null,
51
+ docflowEnabled: input.parent.docflowEnabled === true,
52
+ asyncChildAdmissionAttemptRequired:
53
+ input.parent.asyncChildAdmissionAttemptRequired === true,
54
+ capabilities: normalizeRuntimeExecutionCapabilities(
55
+ input.parent.capabilities,
56
+ ),
57
+ };
58
+ }
59
+
60
+ export async function mintPlayRunRuntimeAuthorityDescriptor(input: {
61
+ descriptor: RuntimeAuthorityDescriptor;
62
+ runtimeOrigin?: string | null;
63
+ }): Promise<RuntimeAuthority> {
64
+ return {
65
+ descriptor: input.descriptor,
66
+ executorToken: await mintWorkflowExecutorToken({
67
+ ...runtimeAuthorityMintInput(input.descriptor),
68
+ runtimeOrigin: input.runtimeOrigin,
69
+ }),
70
+ };
71
+ }
72
+
73
+ export async function mintPlayRunRuntimeAuthority(input: {
74
+ orgId: string;
75
+ workflowId: string;
76
+ runId: string;
77
+ billingRunId?: string | null;
78
+ playName: string;
79
+ allowedSecrets?: readonly string[] | null;
80
+ maxCreditsPerRun?: number | null;
81
+ integrationMode?: 'live' | 'eval_stub' | 'fixture' | null;
82
+ fixtureBehavior?: FixtureBehavior | null;
83
+ synthetic?: boolean | null;
84
+ actorUserId?: string | null;
85
+ actorEmail?: string | null;
86
+ schedulerSchema?: string | null;
87
+ /** Docflow rollout answer for the launching actor, resolved by the caller. */
88
+ docflowEnabled?: boolean | null;
89
+ runtimeOrigin?: string | null;
90
+ }): Promise<RuntimeAuthority> {
91
+ const descriptor: RuntimeAuthorityDescriptor = {
92
+ orgId: input.orgId,
93
+ workflowId: input.workflowId,
94
+ runId: input.runId,
95
+ billingRunId: input.billingRunId ?? null,
96
+ playName: input.playName,
97
+ allowedSecrets: [...new Set(input.allowedSecrets ?? [])],
98
+ maxCreditsPerRun: input.maxCreditsPerRun ?? null,
99
+ integrationMode: input.integrationMode ?? null,
100
+ fixtureBehavior: input.fixtureBehavior ?? null,
101
+ synthetic: input.synthetic === true,
102
+ actorUserId: input.actorUserId ?? null,
103
+ actorEmail: input.actorEmail ?? null,
104
+ schedulerSchema: input.schedulerSchema ?? null,
105
+ docflowEnabled: input.docflowEnabled === true,
106
+ capabilities: normalizeRuntimeExecutionCapabilities(
107
+ DEFAULT_RUNTIME_EXECUTION_CAPABILITIES,
108
+ ),
109
+ };
110
+ return await mintPlayRunRuntimeAuthorityDescriptor({
111
+ descriptor,
112
+ runtimeOrigin: input.runtimeOrigin,
113
+ });
114
+ }
115
+
116
+ export function runtimeAuthorityMintInput(
117
+ descriptor: RuntimeAuthorityDescriptor,
118
+ input: {
119
+ runAttempt?: number | null;
120
+ runLeaseToken?: string | null;
121
+ terminalContract?: DirectCompletedTerminalContract | null;
122
+ capabilities?: readonly RuntimeExecutionCapability[];
123
+ runtimeOrigin?: string | null;
124
+ } = {},
125
+ ) {
126
+ return {
127
+ orgId: descriptor.orgId,
128
+ workflowId: descriptor.workflowId,
129
+ runId: descriptor.runId,
130
+ billingRunId: descriptor.billingRunId,
131
+ playName: descriptor.playName,
132
+ allowedSecrets: descriptor.allowedSecrets,
133
+ maxCreditsPerRun: descriptor.maxCreditsPerRun,
134
+ integrationMode: descriptor.integrationMode,
135
+ fixtureBehavior: descriptor.fixtureBehavior,
136
+ synthetic: descriptor.synthetic,
137
+ actorUserId: descriptor.actorUserId,
138
+ actorEmail: descriptor.actorEmail,
139
+ schedulerSchema: descriptor.schedulerSchema,
140
+ runAttempt: input.runAttempt,
141
+ runLeaseToken: input.runLeaseToken,
142
+ terminalContract: input.terminalContract,
143
+ capabilities: input.capabilities ?? descriptor.capabilities,
144
+ runtimeOrigin: input.runtimeOrigin,
145
+ };
146
+ }
147
+
148
+ export async function mintPlayRunAttemptRuntimeToken(input: {
149
+ descriptor: RuntimeAuthorityDescriptor;
150
+ runAttempt?: number | null;
151
+ runLeaseToken?: string | null;
152
+ terminalContract?: DirectCompletedTerminalContract | null;
153
+ capabilities?: readonly RuntimeExecutionCapability[];
154
+ runtimeOrigin?: string | null;
155
+ }): Promise<string> {
156
+ return await mintWorkflowExecutorToken(
157
+ runtimeAuthorityMintInput(input.descriptor, input),
158
+ );
159
+ }
160
+
161
+ /**
162
+ * Reconstruct the smallest authority needed to settle compute billing for a
163
+ * terminal launch row written before runtimeAuthority became durable state.
164
+ *
165
+ * This is deliberately not a general legacy-token fallback. The caller may
166
+ * mint only billing.write, and every fact comes from the leased launch row
167
+ * selected by the scheduler rather than the worker's request body.
168
+ */
169
+ export function requireComputeBillingDispatchRuntimeAuthority(
170
+ launch: Pick<
171
+ PlaySchedulerSubmitInput,
172
+ 'orgId' | 'runId' | 'playName' | 'userId' | 'userEmail'
173
+ >,
174
+ ): RuntimeAuthorityDescriptor {
175
+ const orgId = launch.orgId?.trim();
176
+ const runId = launch.runId?.trim();
177
+ const playName = launch.playName?.trim();
178
+ if (!orgId || !runId || !playName) {
179
+ throw new Error(
180
+ 'Legacy compute-billing launch is missing orgId, runId, or playName.',
181
+ );
182
+ }
183
+
184
+ return {
185
+ orgId,
186
+ // Scheduler envelopes use the workflow id as the durable run id.
187
+ workflowId: runId,
188
+ runId,
189
+ billingRunId: runId,
190
+ playName,
191
+ allowedSecrets: [],
192
+ maxCreditsPerRun: null,
193
+ integrationMode: null,
194
+ fixtureBehavior: null,
195
+ synthetic: false,
196
+ actorUserId: launch.userId?.trim() || null,
197
+ actorEmail: launch.userEmail?.trim() || null,
198
+ docflowEnabled: false,
199
+ capabilities: ['billing.write'],
200
+ };
201
+ }
@@ -26,6 +26,14 @@ export const RUNTIME_CAPACITY_POLICY = {
26
26
  claimOperationTimeoutMs: 20_000,
27
27
  requestTimeoutMs: 30_000,
28
28
  },
29
+ sandboxAcquisition: {
30
+ /**
31
+ * Starting a Daytona sandbox is a provider control-plane transition, not
32
+ * an Absurd execution slot. Serialize starts within each worker process;
33
+ * once started, all eight execution slots may run concurrently.
34
+ */
35
+ daytonaConcurrentStartsPerProcess: 1,
36
+ },
29
37
  } as const;
30
38
 
31
39
  export const ABSURD_GLOBAL_RUN_CONCURRENCY =
@@ -96,6 +104,18 @@ function nonNegativeNumber(value: number): number {
96
104
  }
97
105
 
98
106
  export function assertRuntimeCapacityPolicy(): void {
107
+ if (
108
+ !Number.isInteger(
109
+ RUNTIME_CAPACITY_POLICY.sandboxAcquisition
110
+ .daytonaConcurrentStartsPerProcess,
111
+ ) ||
112
+ RUNTIME_CAPACITY_POLICY.sandboxAcquisition
113
+ .daytonaConcurrentStartsPerProcess <= 0
114
+ ) {
115
+ throw new Error(
116
+ 'Daytona sandbox-start concurrency must be a positive integer.',
117
+ );
118
+ }
99
119
  if (
100
120
  RUNTIME_CAPACITY_POLICY.receiptGateway.requestTimeoutMs <=
101
121
  RUNTIME_CAPACITY_POLICY.receiptGateway.admissionTimeoutMs
@@ -3,11 +3,17 @@
3
3
  * receipt presentations. New operations must not use this as a version gate.
4
4
  */
5
5
  export const LEGACY_RUNTIME_RECEIPT_WIRE_HEADER = 'x-deepline-runtime-contract';
6
+ // Frozen: production lane main-9281ae259f still sends wire format 2. Delete
7
+ // this and `resolveLegacyRuntimeReceiptWireFormat` after that lane retires.
6
8
  export const LEGACY_RUNTIME_RECEIPT_WIRE_FORMAT = 3 as const;
7
9
  /**
8
10
  * Historical workers validate this readiness range before they claim work.
9
11
  * It is an output-only compatibility presentation; current callers use named
10
12
  * operation capabilities and do not treat it as a global admission contract.
13
+ *
14
+ * Frozen: a lane built before the global compatibility gate was removed calls
15
+ * /readyz at boot and throws when this range is absent. Delete after every such
16
+ * lane has retired.
11
17
  */
12
18
  export const LEGACY_RUNTIME_READINESS_MIN_SUPPORTED = 1 as const;
13
19
  export const LEGACY_RUNTIME_READINESS_CURRENT = 6 as const;
@@ -53,3 +53,15 @@ export function getRuntimeEnvInfo() {
53
53
  node_env: process.env.NODE_ENV ?? null,
54
54
  };
55
55
  }
56
+
57
+ /** Test seams must never be reachable from a Vercel production deployment. */
58
+ export function isTestOnlyRuntime(): boolean {
59
+ if (process.env.VERCEL_ENV === 'production') return false;
60
+ return process.env.VERCEL_ENV === 'preview' || getRuntimeEnv() !== 'prod';
61
+ }
62
+
63
+ export function shouldEnableMarketingIntegrations(): boolean {
64
+ return getRuntimeEnv() === 'prod';
65
+ }
66
+
67
+ export { isBuildContext } from '../observability/build-context';
@@ -0,0 +1,67 @@
1
+ import {
2
+ deployed,
3
+ type DeployedOperationContract,
4
+ } from '@deepline/deployed-contracts';
5
+ import type { RuntimeExecutionCapability } from './execution-capabilities';
6
+
7
+ /**
8
+ * One declarative owner for the runtime action → authority relationship. The
9
+ * route still owns authentication and execution; callers can add an action in
10
+ * one obvious place and CI will prevent removing/changing an existing one.
11
+ */
12
+ export const RUNTIME_OPERATION_CAPABILITIES = {
13
+ create_signed_artifact_url: 'artifact.read',
14
+ resolve_play: 'artifact.read',
15
+ create_signed_staged_file_url: 'file.read',
16
+ get_runtime_step_receipt: 'receipt.read',
17
+ get_runtime_step_receipts: 'receipt.read',
18
+ acquire_runtime_receipt_execution_lock: 'receipt.write',
19
+ release_runtime_receipt_execution_lock: 'receipt.write',
20
+ claim_runtime_step_receipt: 'receipt.write',
21
+ claim_runtime_step_receipts: 'receipt.write',
22
+ mark_runtime_step_receipt_running: 'receipt.write',
23
+ mark_runtime_step_receipts_running: 'receipt.write',
24
+ mark_runtime_step_receipts_queued: 'receipt.write',
25
+ complete_runtime_step_receipt: 'receipt.write',
26
+ complete_runtime_step_receipts: 'receipt.write',
27
+ release_runtime_step_receipt: 'receipt.write',
28
+ fail_runtime_step_receipt: 'receipt.write',
29
+ fail_runtime_step_receipts: 'receipt.write',
30
+ heartbeat_runtime_step_receipts: 'receipt.write',
31
+ skip_runtime_step_receipt: 'receipt.write',
32
+ ensure_sheet: 'sheet.write',
33
+ apply_row_updates: 'sheet.write',
34
+ create_db_session: 'db.session',
35
+ repair_runtime_storage_grants: 'sheet.write',
36
+ append_run_events: 'run.progress',
37
+ save_results: 'run.progress',
38
+ start_run: 'run.progress',
39
+ record_first_claim_latency: 'run.progress',
40
+ project_run_created: 'run.progress',
41
+ launch_play_async: 'run.child',
42
+ compute_billing_upsert: 'billing.write',
43
+ compute_billing_record_item: 'billing.write',
44
+ compute_billing_finalize: 'billing.write',
45
+ rate_state_acquire: 'rate.acquire',
46
+ rate_state_release: 'rate.acquire',
47
+ rate_state_penalize: 'rate.acquire',
48
+ get_runtime_traffic_policy: 'rate.acquire',
49
+ governor_budget_charge: 'budget.charge',
50
+ resolve_secret: 'secret.resolve',
51
+ } as const satisfies Readonly<Record<string, RuntimeExecutionCapability>>;
52
+
53
+ export const RUNTIME_OPERATION_CONTRACT: DeployedOperationContract =
54
+ deployed.operation({
55
+ id: 'runtime-api-actions',
56
+ actions: RUNTIME_OPERATION_CAPABILITIES,
57
+ });
58
+
59
+ export function runtimeOperationCapability(
60
+ action: string,
61
+ ): RuntimeExecutionCapability | null {
62
+ return (
63
+ RUNTIME_OPERATION_CAPABILITIES[
64
+ action as keyof typeof RUNTIME_OPERATION_CAPABILITIES
65
+ ] ?? null
66
+ );
67
+ }
@@ -0,0 +1,2 @@
1
+ /** Runtime estate owning one attested Runtime Release Bundle. */
2
+ export type RuntimeReleaseEnvironment = 'preview' | 'production';
@@ -0,0 +1,68 @@
1
+ import { deployed, readDeployedObject } from '@deepline/deployed-contracts';
2
+
3
+ export type RuntimeSandboxProviderId = 'daytona' | 'modal';
4
+
5
+ export type RuntimeSandboxRef = {
6
+ /** Internal normalized form; persisted writer markers are diagnostic only. */
7
+ schemaVersion: 1;
8
+ provider: RuntimeSandboxProviderId;
9
+ resourceId: string;
10
+ routingDomain: string | null;
11
+ };
12
+
13
+ /**
14
+ * This ref lives in a durable suspension. Its provider and resource identity
15
+ * fence cleanup; its writer marker never decides whether a known sandbox can
16
+ * be reconciled by a different deployment.
17
+ */
18
+ export const RUNTIME_SANDBOX_REF_CONTRACT = deployed.object({
19
+ id: 'runtime-sandbox-ref',
20
+ unknown: 'preserve',
21
+ fields: {
22
+ provider: deployed.openEnum(),
23
+ resourceId: deployed.string(),
24
+ routingDomain: deployed.json(),
25
+ schemaVersion: deployed.optional(deployed.diagnostic.number(), {
26
+ whenAbsent: 'diagnostic unavailable',
27
+ }),
28
+ },
29
+ });
30
+
31
+ export function readPersistedRuntimeSandboxRef(input: {
32
+ raw: unknown;
33
+ expectedSandboxId: string;
34
+ expectedProvider?: unknown;
35
+ }): RuntimeSandboxRef {
36
+ const invalid = () =>
37
+ new Error(
38
+ `Persisted Runtime Sandbox Ref is invalid or inconsistent for sandbox ${input.expectedSandboxId}.`,
39
+ );
40
+ let value: Record<string, unknown>;
41
+ try {
42
+ value = readDeployedObject(RUNTIME_SANDBOX_REF_CONTRACT, input.raw).value;
43
+ } catch {
44
+ throw invalid();
45
+ }
46
+ const provider = value.provider;
47
+ const resourceId =
48
+ typeof value.resourceId === 'string' ? value.resourceId.trim() : '';
49
+ const routingDomain = value.routingDomain;
50
+ if (
51
+ (provider !== 'daytona' && provider !== 'modal') ||
52
+ !resourceId ||
53
+ resourceId !== input.expectedSandboxId.trim() ||
54
+ (routingDomain !== null && typeof routingDomain !== 'string') ||
55
+ (typeof routingDomain === 'string' && !routingDomain.trim()) ||
56
+ (input.expectedProvider !== undefined &&
57
+ input.expectedProvider !== provider)
58
+ ) {
59
+ throw invalid();
60
+ }
61
+ return {
62
+ schemaVersion: 1,
63
+ provider,
64
+ resourceId,
65
+ routingDomain:
66
+ typeof routingDomain === 'string' ? routingDomain.trim() : null,
67
+ };
68
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Runtime-scheduler topology predicate shared by the app-side lane helpers
3
- * (`src/lib/plays/scheduler-backends/absurd-shared.ts`) and the runner
3
+ * (`packages/play-runtime/scheduler-backends/absurd-shared.ts`) and the runner
4
4
  * backends (`runner-backends/backends/daytona-lifecycle.ts`).
5
5
  *
6
6
  * ONE distinction drives several guards: a run whose scheduler schema is the
@@ -8,10 +8,34 @@
8
8
  * production egress policy), while any other schema is an ISOLATED topology —
9
9
  * a per-PR preview fleet or a per-worktree dev fleet running synthetic
10
10
  * internal test plays. Keeping the predicate here (dependency-free) lets
11
- * shared_libs code use it without importing the app-side scheduler stack.
11
+ * package code uses it without importing the app-side scheduler stack.
12
12
  */
13
13
  export const PROD_DEFAULT_RUNTIME_SCHEDULER_SCHEMA = 'runtime_scheduler';
14
14
 
15
+ /** A wire-safe Postgres schema name that identifies one runtime topology. */
16
+ export const RUNTIME_SCHEDULER_SCHEMA_RE = /^[a-z_][a-z0-9_]{0,62}$/;
17
+
18
+ export function normalizeRuntimeSchedulerSchema(value: unknown): string | null {
19
+ if (typeof value !== 'string') return null;
20
+ const schema = value.trim();
21
+ return RUNTIME_SCHEDULER_SCHEMA_RE.test(schema) ? schema : null;
22
+ }
23
+
24
+ /**
25
+ * The one release-id shape. A release id is minted by the release controller
26
+ * and doubles as the lane's queue suffix (`runs_<releaseId>`) and the
27
+ * `DEEPLINE_RUNTIME_DEPLOY_VERSION` on every Machine in the lane, so it must be
28
+ * a stable lowercase engine-safe slug: no uppercase, no underscore, no repeated
29
+ * or trailing hyphen, 6 to 64 characters.
30
+ *
31
+ * It lives here, dependency-free, because the Fly lane operator, the release
32
+ * controller, the internal registry route, and the admin routes must all agree
33
+ * on it — a second copy is how one surface silently starts accepting an id the
34
+ * queue cannot name.
35
+ */
36
+ export const ABSURD_RELEASE_ID_RE =
37
+ /^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){5,63}$/;
38
+
15
39
  /**
16
40
  * True when the scheduler schema names an isolated (preview CI / worktree)
17
41
  * topology. Null/empty/prod-default => false (production topology). Callers
@@ -24,3 +48,15 @@ export function isIsolatedRuntimeSchedulerSchema(
24
48
  const schema = schedulerSchema?.trim();
25
49
  return Boolean(schema) && schema !== PROD_DEFAULT_RUNTIME_SCHEDULER_SCHEMA;
26
50
  }
51
+
52
+ /**
53
+ * PostgreSQL LISTEN only improves wake-up latency; durable polling owns
54
+ * correctness. Isolated schemas deliberately share a small direct-connection
55
+ * budget across preview workers, so they use that polling path and leave
56
+ * direct sessions to the production topology.
57
+ */
58
+ export function shouldUseRuntimeSchedulerDirectNotify(
59
+ schedulerSchema: string | null | undefined,
60
+ ): boolean {
61
+ return !isIsolatedRuntimeSchedulerSchema(schedulerSchema);
62
+ }
@@ -0,0 +1,108 @@
1
+ import { createTelemetry } from '../observability/telemetry';
2
+
3
+ type PlayRuntimeTelemetryInput = {
4
+ phase: string;
5
+ status: string;
6
+ orgId?: string | null;
7
+ runId?: string | null;
8
+ playName?: string | null;
9
+ graphHash?: string | null;
10
+ triggerSource?: string | null;
11
+ ms?: number;
12
+ errorCode?: string;
13
+ };
14
+
15
+ const playRuntimeTelemetry = createTelemetry({
16
+ service: 'deepline-api',
17
+ component: 'play-runtime',
18
+ });
19
+
20
+ type PlayTelemetryLevel = 'debug' | 'info' | 'warn' | 'error';
21
+
22
+ function stringField(
23
+ fields: Record<string, unknown>,
24
+ ...keys: readonly string[]
25
+ ): string | null {
26
+ for (const key of keys) {
27
+ const value = fields[key];
28
+ if (typeof value === 'string' && value.trim()) return value.trim();
29
+ }
30
+ return null;
31
+ }
32
+
33
+ export function emitPlayTelemetry(input: {
34
+ level: PlayTelemetryLevel;
35
+ event: string;
36
+ tag: string;
37
+ fields?: Record<string, unknown>;
38
+ error?: unknown;
39
+ }): void {
40
+ const fields = input.fields ?? {};
41
+ const telemetry = playRuntimeTelemetry.child({
42
+ context: {
43
+ orgId: stringField(fields, 'orgId', 'org_id'),
44
+ orgName: stringField(fields, 'orgName', 'org_name'),
45
+ requestId: stringField(fields, 'requestId', 'request_id'),
46
+ runId: stringField(fields, 'runId', 'run_id'),
47
+ workflowId: stringField(fields, 'workflowId', 'workflow_id', 'runId'),
48
+ playName: stringField(fields, 'playName', 'play_name'),
49
+ },
50
+ });
51
+ const options = { tag: input.tag };
52
+ if (input.level === 'error') {
53
+ void telemetry.error(input.event, input.error, fields, options);
54
+ } else {
55
+ void telemetry[input.level](input.event, fields, options);
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Emit the stable play.runtime.span event consumed by Axiom dashboards.
61
+ * Domain fields stay unchanged while the shared telemetry envelope supplies
62
+ * consistent service, context, severity, and schema metadata.
63
+ */
64
+ export function emitPlayRuntimeSpan(input: PlayRuntimeTelemetryInput): void {
65
+ emitPlayTelemetry({
66
+ level: 'info',
67
+ event: 'play.runtime.span',
68
+ tag: '[play.runtime.span]',
69
+ fields: {
70
+ orgId: input.orgId,
71
+ runId: input.runId,
72
+ workflowId: input.runId,
73
+ playName: input.playName,
74
+ phase: input.phase,
75
+ status: input.status,
76
+ graphHash: input.graphHash,
77
+ triggerSource: input.triggerSource,
78
+ ms: input.ms,
79
+ errorCode: input.errorCode,
80
+ },
81
+ });
82
+ }
83
+
84
+ export function emitRecoveredSecretResolutionRetry(input: {
85
+ orgId: string;
86
+ runId?: string | null;
87
+ playName?: string | null;
88
+ requestId: string;
89
+ operationId: string;
90
+ attempt: number;
91
+ httpStatus: number;
92
+ }): void {
93
+ emitPlayTelemetry({
94
+ level: 'warn',
95
+ event: 'play.runtime.secret_resolution_retry_recovered',
96
+ tag: '[play.runtime.secret_resolution_retry_recovered]',
97
+ fields: {
98
+ orgId: input.orgId,
99
+ runId: input.runId,
100
+ workflowId: input.runId,
101
+ playName: input.playName,
102
+ requestId: input.requestId,
103
+ operationId: input.operationId,
104
+ attempt: input.attempt,
105
+ httpStatus: input.httpStatus,
106
+ },
107
+ });
108
+ }
@@ -230,6 +230,8 @@ export type SandboxExecutionAdmission = {
230
230
  leaseId: string;
231
231
  /** Stable provider correlation for operation-first managed creates. */
232
232
  providerOperationToken?: string | null;
233
+ /** Resume the existing durable provider operation before any new create. */
234
+ resumeExistingProviderOperation?: boolean;
233
235
  }
234
236
  | { kind: 'pre_code_deferred'; reason: SandboxPreCodeDeferralReason }
235
237
  >;
@@ -293,6 +295,8 @@ export type SandboxExecutionLifecycle = {
293
295
  leaseId: string;
294
296
  /** Stable provider correlation for operation-first managed creates. */
295
297
  providerOperationToken?: string | null;
298
+ /** Resume the existing durable provider operation before any new create. */
299
+ resumeExistingProviderOperation?: boolean;
296
300
  }
297
301
  | { kind: 'pre_code_deferred'; reason: SandboxPreCodeDeferralReason }
298
302
  >;
@@ -180,6 +180,9 @@ function createRunnerCallbacks(input: {
180
180
  return {
181
181
  leaseId: outcome.leaseId,
182
182
  providerOperationToken: outcome.providerOperationToken ?? null,
183
+ ...(outcome.resumeExistingProviderOperation === true
184
+ ? { resumeExistingProviderOperation: true }
185
+ : {}),
183
186
  };
184
187
  },
185
188
  releaseSandboxCapacity: async (leaseId) => {
@@ -41,10 +41,43 @@ export type { PlayRunInputPayload };
41
41
 
42
42
  export type PlaySchedulerSubmitInput = {
43
43
  runId: string;
44
+ /** First-class async-child lineage. Absent for root launches. */
45
+ parentRunId?: string | null;
46
+ rootRunId?: string | null;
47
+ asyncLaunchKey?: string | null;
48
+ asyncInvocationKey?: string | null;
49
+ asyncRequestFingerprint?: string | null;
50
+ /**
51
+ * Ephemeral proof carried only into atomic async-child admission. It is never
52
+ * persisted on the child launch; the child receives its own authority.
53
+ */
54
+ asyncParentRunAttempt?: number | null;
55
+ asyncParentRunLeaseToken?: string | null;
56
+ asyncParentAttemptRequired?: boolean | null;
57
+ /** Full play ancestry for a scheduled child, including this play. */
58
+ asyncAncestryPlayIds?: string[] | null;
44
59
  playId: string;
45
60
  playName: string;
61
+ playReference?: string | null;
62
+ /**
63
+ * Immutable scheduler namespace for this admission. The durable
64
+ * `run.created` projector persists it onto the Play Run so replay/control
65
+ * paths stay on the original runtime lane instead of falling back to a host
66
+ * default.
67
+ */
68
+ schedulerSchema?: string | null;
69
+ definitionScope?: 'org' | 'system' | null;
70
+ revisionId?: string | null;
46
71
  workflowFamilyKey?: string | null;
47
72
  artifactStorageKey: string;
73
+ /**
74
+ * The runtime PostgreSQL admission path committed this launch before its
75
+ * Convex `run.created` projection exists. The worker must deliver that
76
+ * causal fact before it can claim an execution attempt.
77
+ *
78
+ * Omitted for legacy launches whose Play Run row was persisted synchronously.
79
+ */
80
+ requiresRunCreatedProjection?: boolean;
48
81
  /** Optional inline artifact for the Node scheduler. */
49
82
  runtimeArtifact?: unknown;
50
83
  artifactHash: string;
@@ -52,6 +85,9 @@ export type PlaySchedulerSubmitInput = {
52
85
  /** Immutable scheduler/worker/runner ABI snapshot (not a Git SHA). */
53
86
  runtimeProtocolVersion?: PlayRuntimeProtocolVersion | null;
54
87
  input: PlayRunInputPayload;
88
+ /** Bounded launch metadata used only by the asynchronous ledger projector. */
89
+ staticPipeline?: unknown;
90
+ inputSummary?: Record<string, unknown>;
55
91
  /** Convex metadata for the exact input saved before scheduler submission. */
56
92
  inputFileId?: string;
57
93
  inputBytes?: number;
@@ -127,7 +163,7 @@ export type PlaySchedulerSubmitInput = {
127
163
  userId?: string | null;
128
164
  source?: 'published' | 'ad_hoc' | 'draft';
129
165
  /** Invocation origin, distinct from the artifact source above. */
130
- triggerSource?: 'api' | 'webhook' | 'cron' | 'sql_listener';
166
+ triggerSource?: 'api' | 'webhook' | 'cron' | 'sql_listener' | 'async_child';
131
167
  /** Null lets a durable trigger wait for capacity; a number bounds queue delay. */
132
168
  queueMaxDelaySeconds?: number | null;
133
169
  /**