deepline 0.3.461 → 0.3.463

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 (297) 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/billing/tamradar.ts +17 -17
  17. package/dist/bundling-sources/shared_libs/monitors/callback-security.ts +0 -307
  18. package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +3 -0
  19. package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +3 -2
  20. package/dist/bundling-sources/shared_libs/monitors/package.json +2 -0
  21. package/dist/bundling-sources/shared_libs/monitors/provider-callback-verification.ts +34 -0
  22. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +61 -0
  23. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-upstream-identity.ts +122 -2
  24. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-dead-letter.ts +11 -1
  25. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-failure-codes.ts +24 -0
  26. package/dist/bundling-sources/shared_libs/observability/dlq.ts +32 -0
  27. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +57 -3
  28. package/dist/bundling-sources/shared_libs/observability/scheduled-work.ts +1 -0
  29. package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +66 -1
  30. package/dist/bundling-sources/shared_libs/play-data-plane/sheet-column-storage.ts +36 -7
  31. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +250 -11
  32. package/dist/bundling-sources/shared_libs/play-runtime/array-input-store.ts +319 -0
  33. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +991 -359
  34. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +17 -0
  35. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +13 -0
  36. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +110 -0
  37. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-machines.ts +155 -6
  38. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-registry.ts +110 -6
  39. package/dist/bundling-sources/shared_libs/play-runtime/durable-receipt-execution.ts +127 -13
  40. package/dist/bundling-sources/shared_libs/play-runtime/execution-capabilities.ts +14 -1
  41. package/dist/bundling-sources/shared_libs/play-runtime/fixture-behavior.ts +57 -1
  42. package/dist/bundling-sources/shared_libs/play-runtime/free-company-lookup-batching.ts +218 -0
  43. package/dist/bundling-sources/shared_libs/play-runtime/gateway-postgres-admission.ts +42 -5
  44. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-budget-state-backend.ts +6 -1
  45. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +92 -31
  46. package/dist/bundling-sources/shared_libs/play-runtime/governor/block-reserving-budget-state-backend.ts +69 -14
  47. package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +93 -23
  48. package/dist/bundling-sources/shared_libs/play-runtime/governor/in-memory-rate-state-backend.ts +15 -4
  49. package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +22 -18
  50. package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +5 -0
  51. package/dist/bundling-sources/shared_libs/play-runtime/launch-identity.ts +2 -0
  52. package/dist/bundling-sources/shared_libs/play-runtime/map-memory-limits.ts +190 -14
  53. package/dist/bundling-sources/shared_libs/play-runtime/memory-ledger.ts +131 -0
  54. package/dist/bundling-sources/shared_libs/play-runtime/modal-runtime-config.ts +77 -2
  55. package/dist/bundling-sources/shared_libs/play-runtime/output-size-limits.ts +271 -2
  56. package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +51 -0
  57. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/contracts.ts +2 -0
  58. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/job.ts +27 -1
  59. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +2 -0
  60. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +3 -0
  61. package/dist/bundling-sources/shared_libs/play-runtime/provider-text-for-log.ts +63 -0
  62. package/dist/bundling-sources/shared_libs/play-runtime/resource-governor.ts +19 -0
  63. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger-event-transport.ts +112 -16
  64. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger.ts +104 -2
  65. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +265 -151
  66. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-gateway-transport.ts +17 -0
  67. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-progress-push.ts +35 -14
  68. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-sheet-persistence-retry.ts +12 -1
  69. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-control-transport.ts +4 -0
  70. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-labels.ts +36 -0
  71. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-launch-transport.ts +136 -70
  72. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +237 -36
  73. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-runtime-watchdog.ts +148 -4
  74. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-session-execution.ts +6 -0
  75. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +285 -32
  76. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/modal.ts +251 -56
  77. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +29 -4
  78. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/sandbox-create-outcome.ts +27 -0
  79. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/types.ts +22 -1
  80. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +1397 -382
  81. package/dist/bundling-sources/shared_libs/play-runtime/runtime-array-input-receipts.ts +920 -0
  82. package/dist/bundling-sources/shared_libs/play-runtime/runtime-constants.ts +16 -0
  83. package/dist/bundling-sources/shared_libs/play-runtime/runtime-environment.ts +38 -0
  84. package/dist/bundling-sources/shared_libs/play-runtime/runtime-flow.ts +6 -0
  85. package/dist/bundling-sources/shared_libs/play-runtime/runtime-incident-drills.ts +26 -1
  86. package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +30 -0
  87. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-store-adapter.ts +14 -3
  88. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-writer.ts +31 -4
  89. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sheet-row-transition.ts +47 -0
  90. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-compute-usage.ts +20 -7
  91. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +12 -0
  92. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/index.ts +9 -0
  93. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +10 -0
  94. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +4 -0
  95. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +1496 -320
  96. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +31 -1
  97. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +1389 -129
  98. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +36 -0
  99. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-dispatch-authority.ts +4 -0
  100. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +162 -23
  101. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts +499 -115
  102. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-capacity.ts +377 -9
  103. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-ledger-reconciliation.ts +117 -8
  104. package/dist/bundling-sources/shared_libs/play-runtime/secret-resolution-retry-policy.ts +25 -0
  105. package/dist/bundling-sources/shared_libs/play-runtime/terminal-runtime-performance.ts +391 -0
  106. package/dist/bundling-sources/shared_libs/play-runtime/test-runtime-seams.ts +40 -0
  107. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/index.ts +6 -0
  108. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/mapped-calls.ts +171 -0
  109. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/receipt-cohort.ts +16 -1
  110. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +38 -12
  111. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +33 -9
  112. package/dist/bundling-sources/shared_libs/play-runtime/transport-error-diagnostics.ts +28 -0
  113. package/dist/bundling-sources/shared_libs/play-runtime/work-receipt-storage-contract.ts +55 -5
  114. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +41 -1
  115. package/dist/bundling-sources/shared_libs/plays/contracts.ts +4 -0
  116. package/dist/bundling-sources/shared_libs/plays/dataset.ts +9 -3
  117. package/dist/bundling-sources/shared_libs/plays/deploy/manifest-contract.ts +2 -0
  118. package/dist/bundling-sources/shared_libs/plays/deploy/manifest.ts +3 -2
  119. package/dist/bundling-sources/shared_libs/plays/deploy/project-serializer.ts +2 -2
  120. package/dist/bundling-sources/shared_libs/plays/run-output-summary.ts +66 -0
  121. package/dist/bundling-sources/shared_libs/plays/script-entry.ts +1 -1
  122. package/dist/bundling-sources/shared_libs/product-notifications/catalog.ts +43 -1
  123. package/dist/bundling-sources/shared_libs/product-notifications/content.ts +9 -0
  124. package/dist/bundling-sources/shared_libs/product-notifications/email.ts +91 -13
  125. package/dist/bundling-sources/shared_libs/product-notifications/events.ts +3 -0
  126. package/dist/bundling-sources/shared_libs/product-notifications/slack-delivery.ts +41 -24
  127. package/dist/bundling-sources/shared_libs/security/attested-client-ip.ts +91 -0
  128. package/dist/bundling-sources/shared_libs/security/internal-actor.ts +0 -11
  129. package/dist/cli/{auth-6HJXNWUG.mjs → auth-LZLBR4C3.mjs} +5 -4
  130. package/dist/cli/auth-XPGKBJKB.js +41 -0
  131. package/dist/cli/{billing-6P5HO6QG.js → billing-6TJPNJQD.js} +152 -78
  132. package/dist/cli/{billing-MJ42N7YF.mjs → billing-OTOP5RE4.mjs} +84 -10
  133. package/dist/cli/{chunk-FCAZQ7WV.js → chunk-2NISBXMN.js} +52 -50
  134. package/dist/cli/{chunk-PNATXKLP.js → chunk-2ZIRCBYG.js} +6 -6
  135. package/dist/cli/{chunk-5FDKJQZE.js → chunk-3BOIOCNX.js} +1 -1
  136. package/dist/cli/chunk-3BVLLJ3H.mjs +1038 -0
  137. package/dist/cli/{chunk-FJZILBL7.mjs → chunk-3U5EAP6E.mjs} +5 -5
  138. package/dist/cli/{describe-FRAVCY5F.mjs → chunk-4YZKBBLZ.mjs} +19 -36
  139. package/dist/cli/{chunk-QWRHGGUH.js → chunk-5DRNNC72.js} +20 -2
  140. package/dist/cli/{chunk-Z2GUFYT6.js → chunk-5LEAXRHV.js} +11 -11
  141. package/dist/cli/{chunk-5MDIZX7M.js → chunk-5LHXOIPT.js} +8 -6
  142. package/dist/cli/{chunk-NMJ4D2WO.js → chunk-6PMCRYDA.js} +216 -91
  143. package/dist/cli/{chunk-EBU7LQ64.js → chunk-6V7KVRR5.js} +3 -3
  144. package/dist/cli/{chunk-MGXEUZHL.mjs → chunk-7D6X7IXW.mjs} +7 -5
  145. package/dist/cli/{chunk-SAZFZQRI.js → chunk-7FCYPAPP.js} +2 -2
  146. package/dist/cli/{chunk-ACCR7POB.js → chunk-7XYDDCQ2.js} +27 -27
  147. package/dist/cli/{chunk-5IYOUBFZ.js → chunk-ALZBANZI.js} +28 -54
  148. package/dist/cli/{chunk-3DNKFH2G.mjs → chunk-BAPTQDLF.mjs} +19 -1
  149. package/dist/cli/chunk-BGNWI3KH.js +827 -0
  150. package/dist/cli/{chunk-V7REJRDZ.mjs → chunk-C25QE4CH.mjs} +1 -1
  151. package/dist/cli/{chunk-FGMX4HUZ.js → chunk-CBZP6J3V.js} +29 -27
  152. package/dist/cli/{chunk-QEYHTIV4.mjs → chunk-CTQ56DXP.mjs} +10 -1
  153. package/dist/cli/{chunk-IHHLTHE7.mjs → chunk-CVQ7N5CV.mjs} +267 -38
  154. package/dist/cli/{chunk-7DH2FD7Y.mjs → chunk-D464JW3N.mjs} +5 -85
  155. package/dist/cli/{chunk-MEAIOXJL.mjs → chunk-DHXCBITQ.mjs} +7 -5
  156. package/dist/cli/chunk-F2RHUPVH.mjs +827 -0
  157. package/dist/cli/chunk-F6QV42MC.mjs +91 -0
  158. package/dist/cli/{chunk-OZBWRICM.js → chunk-FK2HNDCN.js} +2 -2
  159. package/dist/cli/{chunk-BGY2PLP7.mjs → chunk-GUT7CLOL.mjs} +23 -49
  160. package/dist/cli/{chunk-RY4IVOU3.mjs → chunk-I624J4H5.mjs} +16 -806
  161. package/dist/cli/{chunk-Z2XUZC34.js → chunk-IAYSWZDJ.js} +188 -76
  162. package/dist/cli/{chunk-FGLKOWSC.mjs → chunk-IKWRUNAP.mjs} +1 -1
  163. package/dist/cli/{chunk-KCCOQ5G5.js → chunk-JVDKZJUH.js} +511 -282
  164. package/dist/cli/{chunk-HDFRJ4IT.mjs → chunk-JVHOS3K3.mjs} +177 -65
  165. package/dist/cli/chunk-LYFKBLJI.mjs +1039 -0
  166. package/dist/cli/{chunk-SLEUWLJE.mjs → chunk-MSY22NQW.mjs} +5 -5
  167. package/dist/cli/{chunk-5FY72YOV.js → chunk-NAPTMYTY.js} +8 -8
  168. package/dist/cli/{chunk-O6QOMHCH.js → chunk-NDHJR2WZ.js} +37 -35
  169. package/dist/cli/{chunk-KXMNM4AQ.js → chunk-NMU3VR5U.js} +4 -5
  170. package/dist/cli/chunk-NTLI6P6Y.mjs +19 -0
  171. package/dist/cli/{chunk-RFONC4WJ.mjs → chunk-O3BJYD6D.mjs} +3 -3
  172. package/dist/cli/{describe-2WQY7ZCY.js → chunk-PVY4DPPF.js} +27 -44
  173. package/dist/cli/{chunk-WIYWSYDS.mjs → chunk-Q2EIZKVX.mjs} +3 -3
  174. package/dist/cli/{chunk-VZBCEA5S.mjs → chunk-RD6IQ2JY.mjs} +223 -92
  175. package/dist/cli/chunk-RGOUCIIZ.js +1039 -0
  176. package/dist/cli/{chunk-EIMG75BT.mjs → chunk-S3A4IXBQ.mjs} +4 -5
  177. package/dist/cli/{chunk-QIW7TVV6.mjs → chunk-S4XQCFES.mjs} +14 -12
  178. package/dist/cli/chunk-SKU6ECIY.js +19 -0
  179. package/dist/cli/{chunk-CRYOUPEB.js → chunk-TIRBDQ3W.js} +16 -16
  180. package/dist/cli/{chunk-G7L27KZB.mjs → chunk-TKAQR3IB.mjs} +31 -21
  181. package/dist/cli/{chunk-MDJPEGVN.js → chunk-UC4SFYNU.js} +392 -261
  182. package/dist/cli/{chunk-3BMLICF7.mjs → chunk-UIURR26V.mjs} +13 -8
  183. package/dist/cli/{chunk-TNMBPMMC.js → chunk-UROQDCVW.js} +13 -4
  184. package/dist/cli/{chunk-R64BGGRQ.mjs → chunk-VDGTTH7K.mjs} +2 -2
  185. package/dist/cli/chunk-VLEVVDWG.js +91 -0
  186. package/dist/cli/{chunk-R2GLGLDR.mjs → chunk-VPHN2HAL.mjs} +216 -91
  187. package/dist/cli/chunk-VY2GBNTX.js +1038 -0
  188. package/dist/cli/{chunk-CFUTOWE4.js → chunk-WG3KGAII.js} +8 -88
  189. package/dist/cli/{chunk-QAJAJPKK.mjs → chunk-WUMIYOXQ.mjs} +4 -2
  190. package/dist/cli/{chunk-SCIR5JXW.js → chunk-WUZS2HK6.js} +56 -51
  191. package/dist/cli/{chunk-T3MVIPHG.mjs → chunk-XDWS2JJT.mjs} +1 -1
  192. package/dist/cli/{chunk-KGQNIA37.js → chunk-XQCTG5OO.js} +44 -34
  193. package/dist/cli/{chunk-KVJ5VHW5.mjs → chunk-XW2JIYG7.mjs} +2 -2
  194. package/dist/cli/chunk-YGGIZ3VT.js +920 -0
  195. package/dist/cli/command-docs.d.mts +5 -0
  196. package/dist/cli/command-docs.d.ts +5 -0
  197. package/dist/cli/command-docs.js +2 -2
  198. package/dist/cli/command-docs.mjs +1 -1
  199. package/dist/cli/{csv-NX7NO3O6.js → csv-EH5QWR4O.js} +13 -12
  200. package/dist/cli/{csv-DQ6GW5B5.mjs → csv-OK45Z5XQ.mjs} +4 -3
  201. package/dist/cli/{db-R72DFMP6.js → db-3ESJKETS.js} +30 -27
  202. package/dist/cli/{db-2YP33M4K.mjs → db-6Z5E4HKN.mjs} +10 -7
  203. package/dist/cli/describe-PNDQB7YS.mjs +48 -0
  204. package/dist/cli/describe-QUF7VTTR.js +48 -0
  205. package/dist/cli/describe-core.d.mts +153 -5
  206. package/dist/cli/describe-core.d.ts +153 -5
  207. package/dist/cli/describe-core.js +9 -5
  208. package/dist/cli/describe-core.mjs +10 -6
  209. package/dist/cli/{executions-WFBU7L2Q.mjs → executions-2NTWQFEG.mjs} +7 -5
  210. package/dist/cli/{executions-ZLHD4QIT.js → executions-KUOBRX5V.js} +9 -7
  211. package/dist/cli/{feedback-CN3HJFVF.mjs → feedback-7RPRMSGY.mjs} +6 -5
  212. package/dist/cli/{feedback-NDV6TPHG.js → feedback-UPHAZJ4C.js} +10 -9
  213. package/dist/cli/getting-started.d.mts +6 -6
  214. package/dist/cli/getting-started.d.ts +6 -6
  215. package/dist/cli/getting-started.js +2 -2
  216. package/dist/cli/getting-started.mjs +1 -1
  217. package/dist/cli/{git-QAD6E3HW.mjs → git-SCYP6WSZ.mjs} +5 -4
  218. package/dist/cli/git-UH653WHV.js +25 -0
  219. package/dist/cli/index.js +152 -142
  220. package/dist/cli/index.mjs +56 -46
  221. package/dist/cli/{legacy-noops-KVC5QJ74.js → legacy-noops-7XMFCVRG.js} +8 -7
  222. package/dist/cli/{legacy-noops-TPTKNBI2.mjs → legacy-noops-A4KYAGI6.mjs} +5 -4
  223. package/dist/cli/{monitors-SV57JFLO.mjs → monitors-FLC5J7RI.mjs} +19 -6
  224. package/dist/cli/{monitors-KCROV6PJ.js → monitors-NZV6IX5H.js} +103 -90
  225. package/dist/cli/{org-NJYX5743.js → org-IZ7UP3XF.js} +70 -67
  226. package/dist/cli/{org-KX6QIR7A.mjs → org-LUETJ7Z5.mjs} +9 -6
  227. package/dist/cli/pages-22ML3O7O.js +252 -0
  228. package/dist/cli/pages-EUX5EAGF.mjs +252 -0
  229. package/dist/cli/{play-IQQ57L7Z.mjs → play-CDHPAKKM.mjs} +512 -1508
  230. package/dist/cli/{play-32L7EQN4.js → play-USJBQADG.js} +1090 -2086
  231. package/dist/cli/{providers-4WEC2EQN.mjs → providers-CCXZ3SQF.mjs} +7 -5
  232. package/dist/cli/{providers-ZQV6QLVQ.js → providers-WFEUNPGC.js} +10 -8
  233. package/dist/cli/{quickstart-HKUSFADF.js → quickstart-O4JSUORZ.js} +13 -12
  234. package/dist/cli/{quickstart-RQ76RIUE.mjs → quickstart-ZUULI635.mjs} +5 -4
  235. package/dist/cli/run-ISDJYJMU.js +443 -0
  236. package/dist/cli/run-QJ4NX5F5.mjs +443 -0
  237. package/dist/cli/{search-ZRAVFBZC.mjs → search-IX3XKZJ3.mjs} +8 -6
  238. package/dist/cli/search-TIFNLRPM.js +32 -0
  239. package/dist/cli/{secrets-CMJOVNVH.mjs → secrets-7VUDXTUZ.mjs} +7 -5
  240. package/dist/cli/{secrets-J3G5Y43U.js → secrets-ELQSNCTR.js} +16 -14
  241. package/dist/cli/{sessions-WY7VN4AE.js → sessions-A3FG3AZX.js} +6 -5
  242. package/dist/cli/{sessions-MDQYY5CB.mjs → sessions-VOIQ62GB.mjs} +5 -4
  243. package/dist/cli/{settings-4RWZPCT5.mjs → settings-S6N6EFBG.mjs} +14 -11
  244. package/dist/cli/{settings-HTNTFKCE.js → settings-ZTXQEMZI.js} +80 -77
  245. package/dist/cli/{setup-P3GYYZWG.mjs → setup-AYPIK4JE.mjs} +12 -10
  246. package/dist/cli/{setup-QGCAP62X.js → setup-Y3WOIFLS.js} +53 -51
  247. package/dist/cli/{skills-7NAE4ICL.mjs → skills-5SF5QWNI.mjs} +7 -6
  248. package/dist/cli/skills-MWFRMG3H.js +31 -0
  249. package/dist/cli/tools-3XNZ4J64.mjs +55 -0
  250. package/dist/cli/tools-XEC4OD3R.js +55 -0
  251. package/dist/cli/{update-GODLRKNB.mjs → update-3U4OVX5R.mjs} +9 -8
  252. package/dist/cli/update-DWYEYTZE.js +33 -0
  253. package/dist/cli/{workflow-4BXOUVEO.mjs → workflow-2M5JP7SA.mjs} +10 -8
  254. package/dist/cli/{workflow-AO3A6LXN.js → workflow-RM7H7555.js} +20 -18
  255. package/dist/client-DS2IWYZF.d.ts +10 -0
  256. package/dist/client-DTwnz_AW.d.mts +10 -0
  257. package/dist/{client-CYqG23K1.d.ts → client-core-B_6HAIBy.d.ts} +385 -12
  258. package/dist/{client-BbU5_j7n.d.mts → client-core-DzBSlY1U.d.mts} +385 -12
  259. package/dist/{compiler-manifest-CWz_sNOQ.d.ts → compiler-manifest-Dcyd3-Zd.d.mts} +43 -1
  260. package/dist/{compiler-manifest-CWz_sNOQ.d.mts → compiler-manifest-Dcyd3-Zd.d.ts} +43 -1
  261. package/dist/errors-d-sTrZhe.d.mts +142 -0
  262. package/dist/errors-yQwfgrcX.d.ts +142 -0
  263. package/dist/{index-BF2JB_Ug.d.mts → index-C6oXchjN.d.mts} +1 -1
  264. package/dist/{index-4NPXDzlD.d.ts → index-P56zy_z5.d.ts} +1 -1
  265. package/dist/index.d.mts +11 -147
  266. package/dist/index.d.ts +11 -147
  267. package/dist/index.js +16 -12
  268. package/dist/index.mjs +15 -11
  269. package/dist/install-integrity.json +141 -104
  270. package/dist/plays/bundle-play-file.d.mts +3 -3
  271. package/dist/plays/bundle-play-file.d.ts +3 -3
  272. package/dist/plays/bundle-play-file.mjs +2 -1
  273. package/dist/plays/play-description.d.mts +2 -2
  274. package/dist/plays/play-description.d.ts +2 -2
  275. package/dist/plays/play-description.js +2 -2
  276. package/dist/plays/play-description.mjs +1 -1
  277. package/dist/plays/run-request.d.mts +2 -2
  278. package/dist/plays/run-request.d.ts +2 -2
  279. package/dist/release.d.mts +1 -1
  280. package/dist/release.d.ts +1 -1
  281. package/dist/release.js +2 -2
  282. package/dist/release.mjs +1 -1
  283. package/dist/server.d.mts +17 -0
  284. package/dist/server.d.ts +17 -0
  285. package/dist/server.js +76 -0
  286. package/dist/server.mjs +76 -0
  287. package/package.json +6 -1
  288. package/dist/cli/auth-IACERYQH.js +0 -40
  289. package/dist/cli/chunk-PQUUWFXY.js +0 -95
  290. package/dist/cli/chunk-YBWAG72P.mjs +0 -95
  291. package/dist/cli/chunk-YQDUODZW.js +0 -1710
  292. package/dist/cli/git-JVI36ZFV.js +0 -24
  293. package/dist/cli/search-75X5LTDE.js +0 -30
  294. package/dist/cli/skills-BKJ53JOQ.js +0 -30
  295. package/dist/cli/tools-COWMIEJ6.mjs +0 -45
  296. package/dist/cli/tools-TASOCE7I.js +0 -45
  297. package/dist/cli/update-SJIKVME6.js +0 -32
@@ -52,7 +52,7 @@ export type {
52
52
  * });
53
53
  * ```
54
54
  *
55
- * Then run with the CLI: `deepline plays run --file my-play.play.ts`
55
+ * Then run with the CLI: `deepline run my-play.play.ts`
56
56
  * Installed npm CLIs can also run saved or prebuilt plays by name.
57
57
  *
58
58
  * ## Architecture
@@ -125,6 +125,9 @@ export type {
125
125
  BillingTopUpResult,
126
126
  BillingTopUpReceipt,
127
127
  BillingUsageEvent,
128
+ BillingUsageEventListEntry,
129
+ BillingUsageEventsOptions,
130
+ BillingUsageEventsResult,
128
131
  BillingUsageOptions,
129
132
  BillingUsageResult,
130
133
  WorkspaceCreateResult,
@@ -37,7 +37,7 @@
37
37
  * }
38
38
  * ```
39
39
  *
40
- * Run it with `deepline plays run lookup.play.ts --input '{"domain":"stripe.com"}'`.
40
+ * Run it with `deepline run lookup.play.ts --input '{"domain":"stripe.com"}'`.
41
41
  *
42
42
  * ### Programmatic usage
43
43
  *
@@ -468,8 +468,8 @@ export type DeeplinePlayRuntimeContext = PlayAuthoringRuntimeContext<'array'>;
468
468
  * ```
469
469
  *
470
470
  * ```bash
471
- * deepline plays run lookup.play.ts --input '{"domain":"stripe.com"}'
472
- * deepline plays run -e 'deepline.log("hello"); return { ok: true };'
471
+ * deepline run lookup.play.ts --input '{"domain":"stripe.com"}'
472
+ * deepline run -e 'deepline.log("hello"); return { ok: true };'
473
473
  * ```
474
474
  *
475
475
  * Compose with `import child from './child.play'` and
@@ -575,7 +575,7 @@ export const deepline: ScriptPlayContext = new Proxy({} as ScriptPlayContext, {
575
575
  if (!run) {
576
576
  if (!latestScriptRun) {
577
577
  throw new Error(
578
- `deepline.${property} is only available while a play runs. Run the file with: deepline plays run <file>.play.ts`,
578
+ `deepline.${property} is only available while a play runs. Run the file with: deepline run <file>.play.ts`,
579
579
  );
580
580
  }
581
581
  if (Object.hasOwn(scriptCalls, property)) {
@@ -609,7 +609,7 @@ function contextMember(
609
609
 
610
610
  /**
611
611
  * Handle to a Play execution: inspect status, stream logs, await output, or cancel.
612
- * Like `deepline plays run` and `POST /api/v2/plays/run`, it returns a run id first.
612
+ * Like `deepline run` and `POST /api/v2/plays/run`, it returns a run id first.
613
613
  * Read completed output through `PlayJob.get()` or the status endpoint's `result` field;
614
614
  * runtime logs in `status().progress.logs` are separate from that output.
615
615
  *
@@ -0,0 +1,437 @@
1
+ /**
2
+ * Remote Play operations shared by the full SDK client and imported Play handles.
3
+ * Handles resolve configuration lazily; a submitted job keeps its original client.
4
+ */
5
+ import { DeeplineError } from '../errors';
6
+ import type { HttpClient } from '../http-core';
7
+ import { SDK_API_MAJOR } from '../version';
8
+ import type {
9
+ ClearPlayHistoryRequest,
10
+ ClearPlayHistoryResult,
11
+ PlayDetail,
12
+ PlayRevisionSummary,
13
+ PlayRunListItem,
14
+ PlayRunStart,
15
+ PlayStatus,
16
+ PublishPlayVersionRequest,
17
+ PublishPlayVersionResult,
18
+ StartPlayRunRequest,
19
+ StopPlayRunResult,
20
+ } from '../types';
21
+ import {
22
+ isPlayRunPackage,
23
+ startPlayRun,
24
+ type ResolvedStartPlayRunRequest,
25
+ type PlayRunStartOptions,
26
+ } from './run-request';
27
+ import {
28
+ RUNTIME_ENVIRONMENT_TOKEN_HEADER,
29
+ RETAINED_PIPELINE_RECEIVERS_HEADER,
30
+ } from '../../../shared_libs/play-runtime/coordinator-headers.js';
31
+ import {
32
+ normalizePlayRuntimeEnvironment,
33
+ normalizePlayRuntimeNamespace,
34
+ normalizePlayRuntimeSandboxPlacementPolicy,
35
+ normalizePlayRunRuntimeSelection,
36
+ type PlayRunRuntimeSelection,
37
+ } from '../../../shared_libs/play-runtime/runtime-environment.js';
38
+ import { decodePlayRunPublicStatus } from '../../../shared_libs/play-runtime/run-lifecycle-policy.js';
39
+
40
+ export function normalizePlayRunIntegrationMode(
41
+ value: unknown,
42
+ ): 'live' | 'eval_stub' | 'fixture' | undefined {
43
+ if (value === 'live' || value === 'eval_stub' || value === 'fixture') {
44
+ return value;
45
+ }
46
+ return undefined;
47
+ }
48
+
49
+ export type ClientEnvironment = Readonly<Record<string, string | undefined>>;
50
+
51
+ function resolvePlayRunIntegrationMode(
52
+ request: StartPlayRunRequest,
53
+ env: ClientEnvironment,
54
+ ): 'live' | 'eval_stub' | 'fixture' | undefined {
55
+ return normalizePlayRunIntegrationMode(
56
+ request.integrationMode ?? env.DEEPLINE_EVAL_INTEGRATION_MODE,
57
+ );
58
+ }
59
+
60
+ function resolvePlayRunRuntimeSelection(
61
+ request: StartPlayRunRequest,
62
+ env: ClientEnvironment,
63
+ ): PlayRunRuntimeSelection | undefined {
64
+ if (request.runtime !== undefined) {
65
+ const runtime = normalizePlayRunRuntimeSelection(request.runtime);
66
+ if (!runtime) {
67
+ throw new DeeplineError(
68
+ 'runtime must be { environment: "preview", namespace, backend?: "daytona" | "modal", sandboxPlacementPolicy?: "policy_name@1" } with namespace matching ^[a-z][a-z0-9-]{0,30}$, or { environment: "native", sandboxPlacementPolicy: "policy_name@1" }.',
69
+ undefined,
70
+ 'INVALID_RUNTIME_SELECTION',
71
+ );
72
+ }
73
+ return runtime;
74
+ }
75
+ // These variables select where the app executes a run, not which app the
76
+ // SDK calls. DEEPLINE_API_BASE_URL still chooses the app host. Environment
77
+ // opts into remote preview routing, namespace names the isolated lane, and
78
+ // the token only authorizes that selection. Omitting all three leaves the
79
+ // app free to use its native runtime (local for a local app, prod for prod).
80
+ const configured = env.DEEPLINE_RUNTIME_ENVIRONMENT?.trim();
81
+ const configuredNamespace = env.DEEPLINE_RUNTIME_NAMESPACE?.trim();
82
+ const configuredToken = env.DEEPLINE_RUNTIME_ENVIRONMENT_TOKEN?.trim();
83
+ const configuredPlacementPolicy =
84
+ env.DEEPLINE_RUNTIME_SANDBOX_PLACEMENT_POLICY?.trim();
85
+ if (!configured) {
86
+ if (configuredNamespace || configuredToken || configuredPlacementPolicy) {
87
+ // Name the variables that are actually set. This branch is almost always
88
+ // hit by a stale value auto-loaded from a .env/.env.local rather than by
89
+ // a deliberate export, so the message has to say where to look and how
90
+ // to run the command anyway.
91
+ const present: string[] = [];
92
+ if (configuredNamespace) present.push('DEEPLINE_RUNTIME_NAMESPACE');
93
+ if (configuredToken) present.push('DEEPLINE_RUNTIME_ENVIRONMENT_TOKEN');
94
+ if (configuredPlacementPolicy) {
95
+ present.push('DEEPLINE_RUNTIME_SANDBOX_PLACEMENT_POLICY');
96
+ }
97
+ const isPlural = present.length > 1;
98
+ throw new DeeplineError(
99
+ [
100
+ `Incomplete play runtime selection: ${present.join(' and ')} ${isPlural ? 'are' : 'is'} set but DEEPLINE_RUNTIME_ENVIRONMENT is not.`,
101
+ 'Preview routing requires DEEPLINE_RUNTIME_ENVIRONMENT=preview together with DEEPLINE_RUNTIME_NAMESPACE; the token alone authorizes nothing.',
102
+ `If you did not export ${isPlural ? 'these' : 'this'} yourself, ${isPlural ? 'they were' : 'it was'} most likely auto-loaded from a .env or .env.local in the current directory (bun loads those automatically, and in a git worktree .env.local is usually a symlink to the main checkout).`,
103
+ `To run against the app-native runtime, clear ${isPlural ? 'them' : 'it'} for this command: ${present.map((name) => `${name}=`).join(' ')} <your deepline command>`,
104
+ ].join('\n'),
105
+ undefined,
106
+ 'INVALID_RUNTIME_ENVIRONMENT',
107
+ );
108
+ }
109
+ return undefined;
110
+ }
111
+ if (configured === 'native') {
112
+ // The app's own runtime on a named placement policy. The server decides
113
+ // from the API key's account whether this caller may ask for it.
114
+ const sandboxPlacementPolicy = normalizePlayRuntimeSandboxPlacementPolicy(
115
+ configuredPlacementPolicy,
116
+ );
117
+ if (configuredNamespace || !sandboxPlacementPolicy) {
118
+ throw new DeeplineError(
119
+ 'DEEPLINE_RUNTIME_ENVIRONMENT=native requires DEEPLINE_RUNTIME_SANDBOX_PLACEMENT_POLICY (such as modal_only@1) and no DEEPLINE_RUNTIME_NAMESPACE.',
120
+ undefined,
121
+ 'INVALID_RUNTIME_ENVIRONMENT',
122
+ );
123
+ }
124
+ return { environment: 'native', sandboxPlacementPolicy };
125
+ }
126
+ const environment = normalizePlayRuntimeEnvironment(configured);
127
+ if (!environment) {
128
+ throw new DeeplineError(
129
+ `DEEPLINE_RUNTIME_ENVIRONMENT must be preview or native. Received "${configured}". Omit it to use the app-native runtime.`,
130
+ undefined,
131
+ 'INVALID_RUNTIME_ENVIRONMENT',
132
+ );
133
+ }
134
+ const namespace = normalizePlayRuntimeNamespace(configuredNamespace);
135
+ if (!namespace) {
136
+ throw new DeeplineError(
137
+ 'DEEPLINE_RUNTIME_NAMESPACE is required for preview and must match ^[a-z][a-z0-9-]{0,30}$.',
138
+ undefined,
139
+ 'INVALID_RUNTIME_NAMESPACE',
140
+ );
141
+ }
142
+ const configuredBackendValue = env.DEEPLINE_PLAY_RUNNER_BACKEND?.trim();
143
+ const configuredBackend =
144
+ configuredBackendValue === 'daytona' || configuredBackendValue === 'modal'
145
+ ? configuredBackendValue
146
+ : undefined;
147
+ if (configuredBackendValue && !configuredBackend) {
148
+ throw new DeeplineError(
149
+ `DEEPLINE_PLAY_RUNNER_BACKEND must be daytona or modal for preview runtime selection. Received "${configuredBackendValue}".`,
150
+ undefined,
151
+ 'INVALID_RUNTIME_BACKEND',
152
+ );
153
+ }
154
+ if (
155
+ configuredPlacementPolicy &&
156
+ !normalizePlayRuntimeSandboxPlacementPolicy(configuredPlacementPolicy)
157
+ ) {
158
+ throw new DeeplineError(
159
+ `DEEPLINE_RUNTIME_SANDBOX_PLACEMENT_POLICY must be a versioned placement policy id such as daytona_only@1. Received "${configuredPlacementPolicy}".`,
160
+ undefined,
161
+ 'INVALID_RUNTIME_SANDBOX_PLACEMENT_POLICY',
162
+ );
163
+ }
164
+ return {
165
+ environment,
166
+ namespace,
167
+ ...(configuredBackend ? { backend: configuredBackend } : {}),
168
+ ...(configuredPlacementPolicy
169
+ ? { sandboxPlacementPolicy: configuredPlacementPolicy }
170
+ : {}),
171
+ };
172
+ }
173
+
174
+ /**
175
+ * Resolve the environment-derived run-start fields (eval integration mode,
176
+ * test policy overrides, preview runtime) into explicit request fields, in the
177
+ * order the SDK has always validated them. The shared body builder in
178
+ * `plays/run-request` never reads the environment.
179
+ */
180
+ export function resolveStartPlayRunRequest(
181
+ request: StartPlayRunRequest,
182
+ env: ClientEnvironment,
183
+ ): {
184
+ request: ResolvedStartPlayRunRequest;
185
+ runtime: PlayRunRuntimeSelection | undefined;
186
+ } {
187
+ const integrationMode = resolvePlayRunIntegrationMode(request, env);
188
+ const testPolicyOverrides =
189
+ request.testPolicyOverrides ?? parseEnvTestPolicyOverrides(env);
190
+ const runtime = resolvePlayRunRuntimeSelection(request, env);
191
+ const resolved: ResolvedStartPlayRunRequest = { ...request };
192
+ delete resolved.integrationMode;
193
+ delete resolved.runtime;
194
+ delete resolved.testPolicyOverrides;
195
+ if (integrationMode) resolved.integrationMode = integrationMode;
196
+ if (runtime) resolved.runtime = runtime;
197
+ if (testPolicyOverrides) resolved.testPolicyOverrides = testPolicyOverrides;
198
+ return { request: resolved, runtime };
199
+ }
200
+
201
+ export function runtimeSelectionHeaders(
202
+ runtime: PlayRunRuntimeSelection | undefined,
203
+ env: ClientEnvironment,
204
+ ): Record<string, string> | undefined {
205
+ // A native selection carries no credential: the server checks the account.
206
+ if (!runtime || runtime.environment === 'native') return undefined;
207
+ // Keep the credential out of the typed runtime payload. The app consumes it
208
+ // at the HTTP boundary and never forwards it to Fly, Absurd, or Daytona.
209
+ const token = env.DEEPLINE_RUNTIME_ENVIRONMENT_TOKEN?.trim();
210
+ if (!token) {
211
+ throw new DeeplineError(
212
+ 'DEEPLINE_RUNTIME_ENVIRONMENT_TOKEN is required for explicit preview runtime selection.',
213
+ undefined,
214
+ 'RUNTIME_ENVIRONMENT_TOKEN_REQUIRED',
215
+ );
216
+ }
217
+ const receivers = env.DEEPLINE_RUNTIME_RETAINED_PIPELINE_RECEIVERS?.trim();
218
+ return {
219
+ [RUNTIME_ENVIRONMENT_TOKEN_HEADER]: token,
220
+ ...(receivers ? { [RETAINED_PIPELINE_RECEIVERS_HEADER]: receivers } : {}),
221
+ };
222
+ }
223
+
224
+ function normalizeTestPolicyOverrides(
225
+ value: unknown,
226
+ source: string,
227
+ ): Record<string, unknown> {
228
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
229
+ return value as Record<string, unknown>;
230
+ }
231
+ throw new DeeplineError(
232
+ `${source} must be a JSON object.`,
233
+ undefined,
234
+ 'INVALID_TEST_POLICY_OVERRIDES',
235
+ );
236
+ }
237
+
238
+ function parseEnvTestPolicyOverrides(
239
+ env: ClientEnvironment,
240
+ ): Record<string, unknown> | undefined {
241
+ const raw = env.DEEPLINE_TEST_POLICY_OVERRIDES;
242
+ const trimmed = raw?.trim();
243
+ if (!trimmed) return undefined;
244
+ let parsed: unknown;
245
+ try {
246
+ parsed = JSON.parse(trimmed);
247
+ } catch (error) {
248
+ const detail = error instanceof Error ? ` ${error.message}` : '';
249
+ throw new DeeplineError(
250
+ `DEEPLINE_TEST_POLICY_OVERRIDES must be valid JSON.${detail}`,
251
+ undefined,
252
+ 'INVALID_TEST_POLICY_OVERRIDES',
253
+ );
254
+ }
255
+ return normalizeTestPolicyOverrides(parsed, 'DEEPLINE_TEST_POLICY_OVERRIDES');
256
+ }
257
+
258
+ function isRecord(value: unknown): value is Record<string, unknown> {
259
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value));
260
+ }
261
+
262
+ export function normalizePlayStatus(raw: Record<string, unknown>): PlayStatus {
263
+ const runPackage = isPlayRunPackage(raw)
264
+ ? raw
265
+ : isPlayRunPackage(raw.package)
266
+ ? raw.package
267
+ : null;
268
+ const packageRun = runPackage?.run;
269
+ const rawStatus =
270
+ typeof raw.status === 'string'
271
+ ? raw.status
272
+ : typeof packageRun?.status === 'string'
273
+ ? packageRun.status
274
+ : null;
275
+ const status = decodePlayRunPublicStatus(rawStatus);
276
+ if (!status) {
277
+ throw new Error(
278
+ `Invalid play run lifecycle status in API response: ${JSON.stringify(rawStatus)}.`,
279
+ );
280
+ }
281
+ const runId =
282
+ typeof raw.runId === 'string'
283
+ ? raw.runId
284
+ : typeof raw.workflowId === 'string'
285
+ ? raw.workflowId
286
+ : (packageRun?.id ?? '');
287
+ const legacyOverview = runPackage?.overview ?? raw.overview;
288
+ const runStatus = runPackage?.runStatus ?? raw.runStatus;
289
+ return {
290
+ ...(raw as unknown as Omit<PlayStatus, 'runId' | 'status'>),
291
+ runId,
292
+ ...(isRecord(legacyOverview)
293
+ ? {
294
+ overview: legacyOverview as unknown as PlayStatus['overview'],
295
+ }
296
+ : {}),
297
+ ...(isRecord(runStatus)
298
+ ? { runStatus: runStatus as unknown as PlayStatus['runStatus'] }
299
+ : {}),
300
+ ...(runPackage
301
+ ? {
302
+ package: runPackage,
303
+ outputs: runPackage.outputs,
304
+ }
305
+ : {}),
306
+ status,
307
+ };
308
+ }
309
+
310
+ export class PlayClient {
311
+ constructor(
312
+ private readonly http: HttpClient,
313
+ private readonly environment: ClientEnvironment = process.env,
314
+ ) {}
315
+
316
+ async startPlayRun(
317
+ request: StartPlayRunRequest,
318
+ options?: PlayRunStartOptions,
319
+ ): Promise<PlayRunStart> {
320
+ const resolved = resolveStartPlayRunRequest(request, this.environment);
321
+ const headers = runtimeSelectionHeaders(resolved.runtime, this.environment);
322
+ return startPlayRun(
323
+ this.http,
324
+ resolved.request,
325
+ options?.cliAdmission
326
+ ? { ...headers, 'X-Deepline-API-Major': String(SDK_API_MAJOR) }
327
+ : headers,
328
+ options,
329
+ );
330
+ }
331
+
332
+ async getPlayStatus(
333
+ workflowId: string,
334
+ options?: { billing?: boolean; full?: boolean },
335
+ ): Promise<PlayStatus> {
336
+ const params = new URLSearchParams();
337
+ if (options?.billing === false) {
338
+ params.set('billing', 'false');
339
+ }
340
+ if (options?.full === true) {
341
+ params.set('full', 'true');
342
+ }
343
+ const query = params.size > 0 ? `?${params.toString()}` : '';
344
+ const response = await this.http.get<Record<string, unknown>>(
345
+ `/api/v2/runs/${encodeURIComponent(workflowId)}${query}`,
346
+ );
347
+ return normalizePlayStatus(response);
348
+ }
349
+
350
+ async cancelPlay(workflowId: string): Promise<void> {
351
+ await this.http.request(
352
+ `/api/v2/runs/${encodeURIComponent(workflowId)}/stop`,
353
+ { method: 'POST' },
354
+ );
355
+ }
356
+
357
+ async stopPlay(
358
+ workflowId: string,
359
+ options?: { reason?: string },
360
+ ): Promise<StopPlayRunResult> {
361
+ return this.http.post<StopPlayRunResult>(
362
+ `/api/v2/runs/${encodeURIComponent(workflowId)}/stop`,
363
+ options?.reason ? { reason: options.reason } : {},
364
+ );
365
+ }
366
+
367
+ async listPlayRuns(playName: string): Promise<PlayRunListItem[]> {
368
+ const encodedName = encodeURIComponent(playName);
369
+ const response = await this.http.get<{ runs: PlayRunListItem[] }>(
370
+ `/api/v2/plays/${encodedName}/runs`,
371
+ );
372
+ return response.runs ?? [];
373
+ }
374
+
375
+ async getPlay(
376
+ name: string,
377
+ options?: {
378
+ source?: 'working' | 'live' | `version:${number}`;
379
+ guidance?: boolean;
380
+ },
381
+ ): Promise<PlayDetail> {
382
+ const encodedName = encodeURIComponent(name);
383
+ const query = options?.source
384
+ ? `?include=source&revision=${encodeURIComponent(options.source)}`
385
+ : options?.guidance
386
+ ? '?include=guidance'
387
+ : '';
388
+ return this.http.get<PlayDetail>(`/api/v2/plays/${encodedName}${query}`);
389
+ }
390
+
391
+ async clearPlayHistory(
392
+ name: string,
393
+ request: ClearPlayHistoryRequest = {},
394
+ ): Promise<ClearPlayHistoryResult> {
395
+ const encodedName = encodeURIComponent(name);
396
+ return this.http.post<ClearPlayHistoryResult>(
397
+ `/api/v2/plays/${encodedName}/history/clear`,
398
+ request,
399
+ );
400
+ }
401
+
402
+ async listPlayVersions(
403
+ name: string,
404
+ options?: { full?: boolean },
405
+ ): Promise<PlayRevisionSummary[]> {
406
+ const encodedName = encodeURIComponent(name);
407
+ const suffix = options?.full ? '?full=true' : '';
408
+ const response = await this.http.get<{ versions: PlayRevisionSummary[] }>(
409
+ `/api/v2/plays/${encodedName}/versions${suffix}`,
410
+ );
411
+ return response.versions ?? [];
412
+ }
413
+
414
+ async publishPlayVersion(
415
+ name: string,
416
+ request: PublishPlayVersionRequest = {},
417
+ ): Promise<PublishPlayVersionResult> {
418
+ const encodedName = encodeURIComponent(name);
419
+ return this.http.post<PublishPlayVersionResult>(
420
+ `/api/v2/plays/${encodedName}/live`,
421
+ request,
422
+ );
423
+ }
424
+ }
425
+
426
+ export type PlayClientOperations = Pick<
427
+ PlayClient,
428
+ | 'getPlay'
429
+ | 'listPlayRuns'
430
+ | 'listPlayVersions'
431
+ | 'publishPlayVersion'
432
+ | 'clearPlayHistory'
433
+ | 'startPlayRun'
434
+ | 'getPlayStatus'
435
+ | 'cancelPlay'
436
+ | 'stopPlay'
437
+ >;