deepline 0.3.407 → 0.3.409

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 (127) hide show
  1. package/dist/bundling-sources/sdk/src/client.ts +8 -1
  2. package/dist/bundling-sources/sdk/src/play.ts +13 -0
  3. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  4. package/dist/bundling-sources/sdk/src/types.ts +23 -0
  5. package/dist/bundling-sources/shared_libs/play-runtime/admission-timings.ts +64 -0
  6. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +11 -1
  7. package/dist/bundling-sources/shared_libs/play-runtime/modal-runtime-config.ts +1 -4
  8. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +2 -0
  9. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/local-process.ts +15 -6
  10. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +188 -45
  11. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +22 -4
  12. package/dist/bundling-sources/shared_libs/play-runtime/tool-http-errors.ts +10 -4
  13. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +72 -0
  14. package/dist/bundling-sources/shared_libs/play-runtime/webhook-receipt-source-commit-retry.ts +90 -0
  15. package/dist/bundling-sources/shared_libs/play-runtime/worker-api-types.ts +5 -0
  16. package/dist/bundling-sources/shared_libs/plays/tool-result-types.ts +6 -0
  17. package/dist/cli/{auth-WURWNNLE.mjs → auth-5HIIACF7.mjs} +4 -4
  18. package/dist/cli/auth-F6BX32XZ.js +40 -0
  19. package/dist/cli/{billing-2QJGXGJX.js → billing-4275N7FL.js} +92 -85
  20. package/dist/cli/{billing-BP3E6WIM.mjs → billing-EVZ3ZWKC.mjs} +23 -16
  21. package/dist/cli/{chunk-WXLOW623.mjs → chunk-264PC2RN.mjs} +14 -7
  22. package/dist/cli/{chunk-RMZAOYDN.js → chunk-2GI3QD3L.js} +53 -53
  23. package/dist/cli/{chunk-ZBCTXQ3P.mjs → chunk-2PRO2JTX.mjs} +1 -1
  24. package/dist/cli/{chunk-GAMFK2ZP.mjs → chunk-44ZTYHMQ.mjs} +10 -3
  25. package/dist/cli/{chunk-G4LJS2RE.js → chunk-53HN7WZN.js} +8 -8
  26. package/dist/cli/{chunk-URWF7NGQ.js → chunk-5MLCBXXU.js} +36 -15
  27. package/dist/cli/{chunk-XT6GG3QO.mjs → chunk-7AALNGTA.mjs} +3 -3
  28. package/dist/cli/{chunk-WJYPBHTE.js → chunk-ALD4COBH.js} +11 -4
  29. package/dist/cli/{chunk-RZLXVHNO.js → chunk-AU4OFDFX.js} +26 -26
  30. package/dist/cli/{chunk-N6OAMAO5.mjs → chunk-BEVLCKXG.mjs} +1 -1
  31. package/dist/cli/{chunk-7LKYHZVB.js → chunk-DEC3JECC.js} +1 -1
  32. package/dist/cli/{chunk-UFFSOV6I.mjs → chunk-FHPCKULR.mjs} +2 -2
  33. package/dist/cli/{chunk-THHM4DPE.js → chunk-FJCIUF34.js} +4 -4
  34. package/dist/cli/{chunk-H6EWQFPQ.js → chunk-GAICVLKL.js} +2 -2
  35. package/dist/cli/{chunk-4TV43THC.mjs → chunk-IT3XBJQR.mjs} +4 -4
  36. package/dist/cli/{chunk-UFS752TU.mjs → chunk-J6DCKJNM.mjs} +5 -1
  37. package/dist/cli/{chunk-AYHLUHE5.js → chunk-JGHG4NBA.js} +6 -2
  38. package/dist/cli/{chunk-BKC6VMYZ.mjs → chunk-JRAVVJ3T.mjs} +73 -4
  39. package/dist/cli/{chunk-ZI2ZNDJK.mjs → chunk-LFSHGNT2.mjs} +36 -15
  40. package/dist/cli/{chunk-L25GBGQU.mjs → chunk-N44JHMKY.mjs} +6 -6
  41. package/dist/cli/{chunk-QJAX7QN7.mjs → chunk-NZSF57UO.mjs} +2 -2
  42. package/dist/cli/{chunk-IY6GKJ4O.js → chunk-O3VSXP2F.js} +50 -50
  43. package/dist/cli/{chunk-J67NU4MQ.mjs → chunk-PBZYY7VZ.mjs} +5 -2
  44. package/dist/cli/{chunk-G6U74WNM.js → chunk-RTCDW2GU.js} +15 -15
  45. package/dist/cli/{chunk-UPEOEYZ3.mjs → chunk-TQNHMWUR.mjs} +1 -1
  46. package/dist/cli/{chunk-KUQAU5MG.js → chunk-V76R6HMV.js} +10 -7
  47. package/dist/cli/{chunk-6JZZNP5G.mjs → chunk-VWBTTJYQ.mjs} +2 -2
  48. package/dist/cli/{chunk-SOQIPKF2.js → chunk-WHG43Z67.js} +8 -8
  49. package/dist/cli/{chunk-Y6CX4QPR.js → chunk-WLOCMJWV.js} +67 -67
  50. package/dist/cli/{chunk-QJBJZVG6.js → chunk-WNUR6VP5.js} +15 -8
  51. package/dist/cli/{chunk-P7HOTKOK.mjs → chunk-WYQO2CBS.mjs} +4 -4
  52. package/dist/cli/{chunk-D2ZRMZKF.js → chunk-YD7B53RW.js} +99 -30
  53. package/dist/cli/command-docs.js +2 -2
  54. package/dist/cli/command-docs.mjs +1 -1
  55. package/dist/cli/{csv-N6KYTG7L.mjs → csv-A2MP6EFV.mjs} +3 -3
  56. package/dist/cli/{csv-7E5BE23B.js → csv-BBOTCGQY.js} +12 -12
  57. package/dist/cli/{db-XMBJNVBD.mjs → db-3W5DMTUX.mjs} +4 -4
  58. package/dist/cli/{db-4VLZP33O.js → db-G4CODDCA.js} +25 -25
  59. package/dist/cli/{describe-4I6EIVXD.js → describe-PQTQ5B6F.js} +11 -11
  60. package/dist/cli/{describe-WERH4TD2.mjs → describe-XYJ2ZT4M.mjs} +7 -7
  61. package/dist/cli/describe-core.d.mts +2 -2
  62. package/dist/cli/describe-core.d.ts +2 -2
  63. package/dist/cli/{executions-W7TWJRBK.js → executions-TLANVR7Y.js} +6 -6
  64. package/dist/cli/{executions-JWQXE7G6.mjs → executions-UR67CA5H.mjs} +4 -4
  65. package/dist/cli/{feedback-FMGRC6KO.js → feedback-6C2YTRJL.js} +7 -7
  66. package/dist/cli/{feedback-OEJFX4F7.mjs → feedback-WHCMGEIL.mjs} +3 -3
  67. package/dist/cli/{git-IVC4KHXX.mjs → git-GWLB6VSA.mjs} +4 -4
  68. package/dist/cli/git-VQFF6D7C.js +24 -0
  69. package/dist/cli/index.js +204 -127
  70. package/dist/cli/index.mjs +124 -47
  71. package/dist/cli/{legacy-noops-LT36CLWZ.mjs → legacy-noops-KF4XIFEF.mjs} +4 -4
  72. package/dist/cli/{legacy-noops-X3BQ7MUK.js → legacy-noops-ZUFA7RWI.js} +7 -7
  73. package/dist/cli/{monitors-MNLCELF7.mjs → monitors-6UOIDIMB.mjs} +4 -4
  74. package/dist/cli/{monitors-DLIIAVLW.js → monitors-TB3K2IVE.js} +84 -84
  75. package/dist/cli/{org-CYHDEW7P.js → org-CKWMBPIR.js} +64 -64
  76. package/dist/cli/{org-QV5LMUPT.mjs → org-WGHHMVDZ.mjs} +4 -4
  77. package/dist/cli/{play-5Z4ROZ3P.mjs → play-LYPAXCLD.mjs} +70 -18
  78. package/dist/cli/{play-MEFXC2QA.js → play-N2B3KAVS.js} +345 -293
  79. package/dist/cli/{providers-FJLYSHB3.mjs → providers-6DI5BVZJ.mjs} +4 -4
  80. package/dist/cli/{providers-2MKUNFBQ.js → providers-UR42MD6Z.js} +7 -7
  81. package/dist/cli/{quickstart-ULWXKAOT.js → quickstart-FCJG4XGB.js} +5 -5
  82. package/dist/cli/{quickstart-PQO3OQRT.mjs → quickstart-MNA2S6PO.mjs} +3 -3
  83. package/dist/cli/search-NCEEONMQ.js +30 -0
  84. package/dist/cli/{search-KGAAXMDG.mjs → search-VPPYUJ2M.mjs} +5 -5
  85. package/dist/cli/{secrets-PD5I3KAF.mjs → secrets-DRI4W7Z5.mjs} +4 -4
  86. package/dist/cli/{secrets-X2VGG2PO.js → secrets-QOSMVO36.js} +13 -13
  87. package/dist/cli/{sessions-R3XAKTBQ.js → sessions-3WYKQABW.js} +5 -5
  88. package/dist/cli/{sessions-3WVEU4PE.mjs → sessions-DQNUKP43.mjs} +4 -4
  89. package/dist/cli/{settings-645RSFQX.mjs → settings-DWDK3Y2R.mjs} +8 -8
  90. package/dist/cli/{settings-ZIDO3IP6.js → settings-JUGGCOPS.js} +75 -75
  91. package/dist/cli/{setup-LH5HOZ3D.js → setup-AWBHNYXK.js} +42 -42
  92. package/dist/cli/{setup-LISKIJKP.mjs → setup-D5DWVNY4.mjs} +7 -7
  93. package/dist/cli/skills-AKPAJVSO.js +29 -0
  94. package/dist/cli/{skills-VVQJHLSF.mjs → skills-YV2XR35J.mjs} +5 -5
  95. package/dist/cli/{tools-FTPJCNAM.js → tools-RBKEK6PM.js} +8 -8
  96. package/dist/cli/{tools-Y3LOMXFT.mjs → tools-VFJYHNV2.mjs} +7 -7
  97. package/dist/cli/{update-DOBNQNJI.mjs → update-IM6VOTGL.mjs} +7 -7
  98. package/dist/cli/update-VFNUBLDA.js +29 -0
  99. package/dist/cli/{workflow-ZMAA5VCN.mjs → workflow-26URBWPV.mjs} +5 -5
  100. package/dist/cli/{workflow-LGENKZBV.js → workflow-3BS6U6SL.js} +15 -15
  101. package/dist/{client-IrPHUE5J.d.ts → client-BMjJFpan.d.ts} +28 -2
  102. package/dist/{client-6rEB46Lv.d.mts → client-BfInrZPB.d.mts} +28 -2
  103. package/dist/{compiler-manifest-BHnXE43X.d.ts → compiler-manifest-Ycx-hoAr.d.mts} +2 -0
  104. package/dist/{compiler-manifest-BHnXE43X.d.mts → compiler-manifest-Ycx-hoAr.d.ts} +2 -0
  105. package/dist/{index-Da_Y8z5e.d.mts → index-CZXgiN3E.d.mts} +1 -1
  106. package/dist/{index-SODb2ROS.d.ts → index-NPG5pqxQ.d.ts} +1 -1
  107. package/dist/index.d.mts +5 -5
  108. package/dist/index.d.ts +5 -5
  109. package/dist/index.js +26 -9
  110. package/dist/index.mjs +23 -6
  111. package/dist/install-integrity.json +86 -84
  112. package/dist/plays/bundle-play-file.d.mts +3 -3
  113. package/dist/plays/bundle-play-file.d.ts +3 -3
  114. package/dist/plays/play-description.d.mts +2 -2
  115. package/dist/plays/play-description.d.ts +2 -2
  116. package/dist/plays/run-request.d.mts +2 -2
  117. package/dist/plays/run-request.d.ts +2 -2
  118. package/dist/release.d.mts +1 -1
  119. package/dist/release.d.ts +1 -1
  120. package/dist/release.js +2 -2
  121. package/dist/release.mjs +1 -1
  122. package/package.json +1 -1
  123. package/dist/cli/auth-4JTX6AGM.js +0 -40
  124. package/dist/cli/git-OFXE7G4X.js +0 -24
  125. package/dist/cli/search-ANKSJ224.js +0 -30
  126. package/dist/cli/skills-WLHYSVQA.js +0 -29
  127. package/dist/cli/update-A622H2DZ.js +0 -29
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkKUQAU5MGjs = require('./chunk-KUQAU5MG.js');
3
+ var _chunkV76R6HMVjs = require('./chunk-V76R6HMV.js');
4
4
  require('./chunk-S6R3OX7B.js');
5
5
  require('./chunk-UHNDVD3P.js');
6
6
  require('./chunk-KXMNM4AQ.js');
7
7
  require('./chunk-XDVT3GOM.js');
8
8
 
9
9
 
10
- var _chunkD2ZRMZKFjs = require('./chunk-D2ZRMZKF.js');
10
+ var _chunkYD7B53RWjs = require('./chunk-YD7B53RW.js');
11
11
 
12
12
 
13
13
 
@@ -28,11 +28,11 @@ var _chunkD2ZRMZKFjs = require('./chunk-D2ZRMZKF.js');
28
28
 
29
29
 
30
30
 
31
- var _chunkTHHM4DPEjs = require('./chunk-THHM4DPE.js');
31
+ var _chunkFJCIUF34js = require('./chunk-FJCIUF34.js');
32
32
  require('./chunk-Q2E4E4FJ.js');
33
33
  require('./chunk-XNYIZMNQ.js');
34
34
  require('./chunk-7P5AA3SN.js');
35
- require('./chunk-7LKYHZVB.js');
35
+ require('./chunk-DEC3JECC.js');
36
36
  require('./chunk-OG64RBAC.js');
37
37
  require('./chunk-COGTRVWW.js');
38
38
 
@@ -48,7 +48,7 @@ var _fs = require('fs');
48
48
  var _path = require('path');
49
49
  function pendingOrgCreatePath(baseUrl, accountId, sourceOrgId, name) {
50
50
  const intent = _crypto.createHash.call(void 0, "sha256").update(accountId).update("\0").update(sourceOrgId).update("\0").update(name).digest("hex");
51
- return _path.join.call(void 0, _chunkTHHM4DPEjs.sdkCliStateDirPath.call(void 0, baseUrl), `pending-org-create-${intent}.json`);
51
+ return _path.join.call(void 0, _chunkFJCIUF34js.sdkCliStateDirPath.call(void 0, baseUrl), `pending-org-create-${intent}.json`);
52
52
  }
53
53
  function readPendingOrgCreate(path, accountId, sourceOrgId, name) {
54
54
  let value;
@@ -67,7 +67,7 @@ function readPendingOrgCreate(path, accountId, sourceOrgId, name) {
67
67
  return value;
68
68
  }
69
69
  function loadOrCreatePendingOrgCreate(input) {
70
- const stateDir = _chunkTHHM4DPEjs.sdkCliStateDirPath.call(void 0, input.baseUrl);
70
+ const stateDir = _chunkFJCIUF34js.sdkCliStateDirPath.call(void 0, input.baseUrl);
71
71
  const path = pendingOrgCreatePath(
72
72
  input.baseUrl,
73
73
  input.accountId,
@@ -152,11 +152,11 @@ function processEnvValue(name) {
152
152
  }
153
153
  function organizationAuthValues(input) {
154
154
  return {
155
- [_chunkTHHM4DPEjs.HOST_URL_ENV]: input.baseUrl,
156
- [_chunkTHHM4DPEjs.API_KEY_ENV]: input.apiKey,
157
- [_chunkTHHM4DPEjs.ACTIVE_ORG_ID_ENV]: input.orgId,
158
- [_chunkTHHM4DPEjs.ACTIVE_ORG_NAME_ENV]: input.orgName,
159
- ..._chunkTHHM4DPEjs.featureEnvValues.call(void 0, input)
155
+ [_chunkFJCIUF34js.HOST_URL_ENV]: input.baseUrl,
156
+ [_chunkFJCIUF34js.API_KEY_ENV]: input.apiKey,
157
+ [_chunkFJCIUF34js.ACTIVE_ORG_ID_ENV]: input.orgId,
158
+ [_chunkFJCIUF34js.ACTIVE_ORG_NAME_ENV]: input.orgName,
159
+ ..._chunkFJCIUF34js.featureEnvValues.call(void 0, input)
160
160
  };
161
161
  }
162
162
  function organizationCommandContext(input) {
@@ -170,14 +170,14 @@ function organizationCommandContext(input) {
170
170
  };
171
171
  }
172
172
  function agentCommandContext(commandContext) {
173
- return _chunkTHHM4DPEjs.detectAgentRuntime.call(void 0, ) !== "unknown" ? { command_context: commandContext } : {};
173
+ return _chunkFJCIUF34js.detectAgentRuntime.call(void 0, ) !== "unknown" ? { command_context: commandContext } : {};
174
174
  }
175
175
  function resolveOrgSwitchAuthTarget(scope, config) {
176
- const activeProject = _chunkTHHM4DPEjs.getResolvedProjectAuthSource.call(void 0,
176
+ const activeProject = _chunkFJCIUF34js.getResolvedProjectAuthSource.call(void 0,
177
177
  config.baseUrl,
178
178
  config.apiKey
179
179
  );
180
- const folderTarget = _chunkTHHM4DPEjs.resolveProjectPinTarget.call(void 0, );
180
+ const folderTarget = _chunkFJCIUF34js.resolveProjectPinTarget.call(void 0, );
181
181
  const globalOverrideWarning = activeProject && scope === "global" ? [
182
182
  `Folder auth in ${activeProject.filePath} overrides global auth for commands run here.`
183
183
  ] : [];
@@ -249,10 +249,10 @@ function resolveOrgSwitchAuthTarget(scope, config) {
249
249
  };
250
250
  }
251
251
  async function handleOrgList(options) {
252
- const config = _chunkTHHM4DPEjs.resolveConfig.call(void 0, );
253
- const http = new (0, _chunkTHHM4DPEjs.HttpClient)(config);
252
+ const config = _chunkFJCIUF34js.resolveConfig.call(void 0, );
253
+ const http = new (0, _chunkFJCIUF34js.HttpClient)(config);
254
254
  const payload = await fetchOrganizations(http, config.apiKey);
255
- _chunkD2ZRMZKFjs.printCommandEnvelope.call(void 0,
255
+ _chunkYD7B53RWjs.printCommandEnvelope.call(void 0,
256
256
  {
257
257
  ...payload,
258
258
  render: {
@@ -268,22 +268,22 @@ async function handleOrgList(options) {
268
268
  );
269
269
  }
270
270
  async function handleOrgStatus(options) {
271
- const config = _chunkTHHM4DPEjs.resolveConfig.call(void 0, );
272
- const http = new (0, _chunkTHHM4DPEjs.HttpClient)(config);
271
+ const config = _chunkFJCIUF34js.resolveConfig.call(void 0, );
272
+ const http = new (0, _chunkFJCIUF34js.HttpClient)(config);
273
273
  const payload = await fetchOrganizations(http, config.apiKey);
274
274
  const current = _nullishCoalesce(_nullishCoalesce(payload.organizations.find((org) => org.is_current), () => ( payload.organizations.find(
275
275
  (org) => org.org_id === payload.current_org_id
276
276
  ))), () => ( null));
277
- const projectCandidate = _chunkTHHM4DPEjs.getActiveProjectAuthSource.call(void 0, );
278
- const activeProject = _chunkTHHM4DPEjs.getResolvedProjectAuthSource.call(void 0,
277
+ const projectCandidate = _chunkFJCIUF34js.getActiveProjectAuthSource.call(void 0, );
278
+ const activeProject = _chunkFJCIUF34js.getResolvedProjectAuthSource.call(void 0,
279
279
  config.baseUrl,
280
280
  config.apiKey
281
281
  );
282
- const folderTarget = _chunkTHHM4DPEjs.resolveProjectPinTarget.call(void 0, );
283
- const provenance = _chunkTHHM4DPEjs.resolveCliAuthProvenance.call(void 0, config);
284
- const hostPath = _chunkTHHM4DPEjs.hostEnvFilePath.call(void 0, config.baseUrl);
285
- const envApiKey = processEnvValue(_chunkTHHM4DPEjs.API_KEY_ENV);
286
- const envHostUrl = processEnvValue(_chunkTHHM4DPEjs.HOST_URL_ENV);
282
+ const folderTarget = _chunkFJCIUF34js.resolveProjectPinTarget.call(void 0, );
283
+ const provenance = _chunkFJCIUF34js.resolveCliAuthProvenance.call(void 0, config);
284
+ const hostPath = _chunkFJCIUF34js.hostEnvFilePath.call(void 0, config.baseUrl);
285
+ const envApiKey = processEnvValue(_chunkFJCIUF34js.API_KEY_ENV);
286
+ const envHostUrl = processEnvValue(_chunkFJCIUF34js.HOST_URL_ENV);
287
287
  const authSource = envApiKey ? {
288
288
  scope: "env",
289
289
  source: "process",
@@ -324,17 +324,17 @@ async function handleOrgStatus(options) {
324
324
  if (authSource.path) {
325
325
  lines.push(`Auth file: ${authSource.path}`);
326
326
  } else {
327
- lines.push(`Auth source: ${_chunkTHHM4DPEjs.API_KEY_ENV} process environment`);
327
+ lines.push(`Auth source: ${_chunkFJCIUF34js.API_KEY_ENV} process environment`);
328
328
  }
329
329
  if (envApiKey) {
330
- lines.push(`${_chunkTHHM4DPEjs.API_KEY_ENV} overrides saved auth for this process.`);
330
+ lines.push(`${_chunkFJCIUF34js.API_KEY_ENV} overrides saved auth for this process.`);
331
331
  } else if (activeProject) {
332
332
  lines.push("Global auth is overridden in this folder.");
333
333
  } else if (provenance.scope === "global" && provenance.project.state === "project") {
334
334
  lines.push("Cloud mutations are blocked until this project is pinned.");
335
335
  lines.push("Pin it: deepline org set --auth-scope folder");
336
336
  }
337
- _chunkD2ZRMZKFjs.printCommandEnvelope.call(void 0,
337
+ _chunkYD7B53RWjs.printCommandEnvelope.call(void 0,
338
338
  {
339
339
  ok: true,
340
340
  host: config.baseUrl,
@@ -368,25 +368,25 @@ async function handleOrgStatus(options) {
368
368
  }
369
369
  async function handleOrgSwitch(selection, options) {
370
370
  const authScope = normalizeAuthScope(options.authScope);
371
- const config = _chunkTHHM4DPEjs.resolveConfig.call(void 0, );
372
- const provenance = _chunkTHHM4DPEjs.resolveCliAuthProvenance.call(void 0, config);
371
+ const config = _chunkFJCIUF34js.resolveConfig.call(void 0, );
372
+ const provenance = _chunkFJCIUF34js.resolveCliAuthProvenance.call(void 0, config);
373
373
  if (!selection && !options.orgId && authScope === "folder" && provenance.scope === "global" && provenance.project.state === "project") {
374
- const commandContext = _chunkTHHM4DPEjs.resolveCliCommandContext.call(void 0, config);
374
+ const commandContext = _chunkFJCIUF34js.resolveCliCommandContext.call(void 0, config);
375
375
  const activeOrganization = commandContext.active_organization;
376
- const pinnedFeatures = _chunkTHHM4DPEjs.storedHostFeatures.call(void 0, config.baseUrl);
377
- const project_env_paths2 = _chunkTHHM4DPEjs.saveProjectDeeplineEnvValues.call(void 0,
376
+ const pinnedFeatures = _chunkFJCIUF34js.storedHostFeatures.call(void 0, config.baseUrl);
377
+ const project_env_paths2 = _chunkFJCIUF34js.saveProjectDeeplineEnvValues.call(void 0,
378
378
  {
379
- [_chunkTHHM4DPEjs.HOST_URL_ENV]: config.baseUrl,
380
- [_chunkTHHM4DPEjs.API_KEY_ENV]: config.apiKey,
379
+ [_chunkFJCIUF34js.HOST_URL_ENV]: config.baseUrl,
380
+ [_chunkFJCIUF34js.API_KEY_ENV]: config.apiKey,
381
381
  ...activeOrganization ? {
382
- [_chunkTHHM4DPEjs.ACTIVE_ORG_ID_ENV]: activeOrganization.org_id,
383
- [_chunkTHHM4DPEjs.ACTIVE_ORG_NAME_ENV]: _nullishCoalesce(activeOrganization.org_name, () => ( ""))
382
+ [_chunkFJCIUF34js.ACTIVE_ORG_ID_ENV]: activeOrganization.org_id,
383
+ [_chunkFJCIUF34js.ACTIVE_ORG_NAME_ENV]: _nullishCoalesce(activeOrganization.org_name, () => ( ""))
384
384
  } : {},
385
- ...pinnedFeatures !== void 0 ? { [_chunkTHHM4DPEjs.FEATURES_ENV]: pinnedFeatures } : {}
385
+ ...pinnedFeatures !== void 0 ? { [_chunkFJCIUF34js.FEATURES_ENV]: pinnedFeatures } : {}
386
386
  },
387
387
  provenance.project.dir
388
388
  );
389
- _chunkD2ZRMZKFjs.printCommandEnvelope.call(void 0,
389
+ _chunkYD7B53RWjs.printCommandEnvelope.call(void 0,
390
390
  {
391
391
  ok: true,
392
392
  unchanged: true,
@@ -398,7 +398,7 @@ async function handleOrgSwitch(selection, options) {
398
398
  orgId: activeOrganization.org_id,
399
399
  orgName: activeOrganization.org_name,
400
400
  authScope: "folder"
401
- }) : _chunkTHHM4DPEjs.resolveCliCommandContext.call(void 0, config, "folder")
401
+ }) : _chunkFJCIUF34js.resolveCliCommandContext.call(void 0, config, "folder")
402
402
  ),
403
403
  project_env_paths: project_env_paths2,
404
404
  next: { status: "deepline org status" },
@@ -419,10 +419,10 @@ async function handleOrgSwitch(selection, options) {
419
419
  );
420
420
  return;
421
421
  }
422
- const http = new (0, _chunkTHHM4DPEjs.HttpClient)(config);
422
+ const http = new (0, _chunkFJCIUF34js.HttpClient)(config);
423
423
  const payload = await fetchOrganizations(http, config.apiKey);
424
424
  if (!selection && !options.orgId) {
425
- _chunkD2ZRMZKFjs.printCommandEnvelope.call(void 0,
425
+ _chunkYD7B53RWjs.printCommandEnvelope.call(void 0,
426
426
  {
427
427
  ...payload,
428
428
  next: { set: "deepline org set <number>" },
@@ -473,9 +473,9 @@ async function handleOrgSwitch(selection, options) {
473
473
  features
474
474
  });
475
475
  if (authTarget.kind === "folder") {
476
- project_env_paths2 = _chunkTHHM4DPEjs.saveProjectDeeplineEnvValues.call(void 0, authValues2);
476
+ project_env_paths2 = _chunkFJCIUF34js.saveProjectDeeplineEnvValues.call(void 0, authValues2);
477
477
  } else {
478
- _chunkTHHM4DPEjs.saveHostEnvValues.call(void 0, config.baseUrl, authValues2);
478
+ _chunkFJCIUF34js.saveHostEnvValues.call(void 0, config.baseUrl, authValues2);
479
479
  }
480
480
  const renderLines2 = [`Already on ${target.name}.`];
481
481
  for (const projectPath of project_env_paths2) {
@@ -483,7 +483,7 @@ async function handleOrgSwitch(selection, options) {
483
483
  }
484
484
  if (authTarget.kind === "global") {
485
485
  renderLines2.push(
486
- `Saved global auth in ${_chunkTHHM4DPEjs.hostEnvFilePath.call(void 0, config.baseUrl)}`
486
+ `Saved global auth in ${_chunkFJCIUF34js.hostEnvFilePath.call(void 0, config.baseUrl)}`
487
487
  );
488
488
  }
489
489
  renderLines2.push(
@@ -499,7 +499,7 @@ async function handleOrgSwitch(selection, options) {
499
499
  ...options.deprecatedSwitch ? ["org switch is deprecated; use org set."] : [],
500
500
  ...authTarget.warnings
501
501
  ];
502
- _chunkD2ZRMZKFjs.printCommandEnvelope.call(void 0,
502
+ _chunkYD7B53RWjs.printCommandEnvelope.call(void 0,
503
503
  {
504
504
  ok: true,
505
505
  unchanged: true,
@@ -515,7 +515,7 @@ async function handleOrgSwitch(selection, options) {
515
515
  authScope: authTarget.effective_scope
516
516
  })
517
517
  ),
518
- host_env_path: authTarget.kind === "global" ? _chunkTHHM4DPEjs.hostEnvFilePath.call(void 0, config.baseUrl) : null,
518
+ host_env_path: authTarget.kind === "global" ? _chunkFJCIUF34js.hostEnvFilePath.call(void 0, config.baseUrl) : null,
519
519
  project_env_paths: project_env_paths2,
520
520
  deprecated_command: options.deprecatedSwitch ? "org switch" : null,
521
521
  replacement_command: options.deprecatedSwitch ? "deepline org set" : null,
@@ -541,9 +541,9 @@ async function handleOrgSwitch(selection, options) {
541
541
  features: switched.features
542
542
  });
543
543
  if (authTarget.kind === "folder") {
544
- project_env_paths = _chunkTHHM4DPEjs.saveProjectDeeplineEnvValues.call(void 0, authValues);
544
+ project_env_paths = _chunkFJCIUF34js.saveProjectDeeplineEnvValues.call(void 0, authValues);
545
545
  } else {
546
- _chunkTHHM4DPEjs.saveHostEnvValues.call(void 0, config.baseUrl, authValues);
546
+ _chunkFJCIUF34js.saveHostEnvValues.call(void 0, config.baseUrl, authValues);
547
547
  }
548
548
  const { api_key: _apiKey, ...publicSwitched } = switched;
549
549
  const renderLines = [`Switched to ${switched.org_name}.`];
@@ -552,7 +552,7 @@ async function handleOrgSwitch(selection, options) {
552
552
  renderLines.push(`Saved folder auth in ${projectPath}`);
553
553
  }
554
554
  } else {
555
- renderLines.push(`Saved global auth in ${_chunkTHHM4DPEjs.hostEnvFilePath.call(void 0, config.baseUrl)}`);
555
+ renderLines.push(`Saved global auth in ${_chunkFJCIUF34js.hostEnvFilePath.call(void 0, config.baseUrl)}`);
556
556
  }
557
557
  renderLines.push(
558
558
  `Scope: ${authTarget.requested_scope} -> ${authTarget.effective_scope} (${authTarget.reason})`
@@ -567,10 +567,10 @@ async function handleOrgSwitch(selection, options) {
567
567
  ...options.deprecatedSwitch ? ["org switch is deprecated; use org set."] : [],
568
568
  ...authTarget.warnings
569
569
  ];
570
- _chunkD2ZRMZKFjs.printCommandEnvelope.call(void 0,
570
+ _chunkYD7B53RWjs.printCommandEnvelope.call(void 0,
571
571
  {
572
572
  ok: true,
573
- host_env_path: authTarget.kind === "global" ? _chunkTHHM4DPEjs.hostEnvFilePath.call(void 0, config.baseUrl) : null,
573
+ host_env_path: authTarget.kind === "global" ? _chunkFJCIUF34js.hostEnvFilePath.call(void 0, config.baseUrl) : null,
574
574
  project_env_paths,
575
575
  ...publicSwitched,
576
576
  api_key_saved: true,
@@ -601,12 +601,12 @@ async function handleOrgSwitch(selection, options) {
601
601
  );
602
602
  }
603
603
  async function handleOrgCreate(name, options) {
604
- const config = _chunkTHHM4DPEjs.resolveConfig.call(void 0, );
604
+ const config = _chunkFJCIUF34js.resolveConfig.call(void 0, );
605
605
  const normalizedName = name.trim();
606
606
  if (!normalizedName) {
607
607
  throw new Error("Workspace name is required.");
608
608
  }
609
- const http = new (0, _chunkTHHM4DPEjs.HttpClient)(config);
609
+ const http = new (0, _chunkFJCIUF34js.HttpClient)(config);
610
610
  const identity = await fetchWorkspaceCreationIdentity(http, config.apiKey);
611
611
  let created;
612
612
  let workspaceApiKey;
@@ -632,7 +632,7 @@ async function handleOrgCreate(name, options) {
632
632
  sourceOrgId: identity.orgId,
633
633
  name: normalizedName
634
634
  });
635
- const workspace = await new (0, _chunkKUQAU5MGjs.DeeplineClient)({
635
+ const workspace = await new (0, _chunkV76R6HMVjs.DeeplineClient)({
636
636
  apiKey: config.apiKey,
637
637
  baseUrl: config.baseUrl
638
638
  }).workspaces.create({
@@ -655,16 +655,16 @@ async function handleOrgCreate(name, options) {
655
655
  orgName: created.org_name,
656
656
  features: workspaceFeatures
657
657
  });
658
- _chunkTHHM4DPEjs.saveHostEnvValues.call(void 0, config.baseUrl, authValues);
658
+ _chunkFJCIUF34js.saveHostEnvValues.call(void 0, config.baseUrl, authValues);
659
659
  if (pendingIntentPath) _fs.unlinkSync.call(void 0, pendingIntentPath);
660
- _chunkD2ZRMZKFjs.printCommandEnvelope.call(void 0,
660
+ _chunkYD7B53RWjs.printCommandEnvelope.call(void 0,
661
661
  {
662
662
  ok: true,
663
663
  ...created,
664
664
  initial_credits: typeof created.initial_credits === "number" ? created.initial_credits : 0,
665
665
  api_key_saved: true,
666
666
  switched: true,
667
- host_env_path: _chunkTHHM4DPEjs.hostEnvFilePath.call(void 0, config.baseUrl),
667
+ host_env_path: _chunkFJCIUF34js.hostEnvFilePath.call(void 0, config.baseUrl),
668
668
  ...agentCommandContext(
669
669
  organizationCommandContext({
670
670
  orgId: created.org_id,
@@ -679,7 +679,7 @@ async function handleOrgCreate(name, options) {
679
679
  lines: [
680
680
  `Created organization: ${created.org_name}.`,
681
681
  `Switched to ${created.org_name}.`,
682
- `Saved host auth in ${_chunkTHHM4DPEjs.hostEnvFilePath.call(void 0, config.baseUrl)}`
682
+ `Saved host auth in ${_chunkFJCIUF34js.hostEnvFilePath.call(void 0, config.baseUrl)}`
683
683
  ]
684
684
  }
685
685
  ]
@@ -731,7 +731,7 @@ Examples:
731
731
  );
732
732
  const sso = org.command("sso").description("Manage Enterprise workspace SSO.");
733
733
  const ssoPath = "/api/v2/auth/workspace/sso";
734
- const printSso = (payload, json) => _chunkD2ZRMZKFjs.printCommandEnvelope.call(void 0,
734
+ const printSso = (payload, json) => _chunkYD7B53RWjs.printCommandEnvelope.call(void 0,
735
735
  {
736
736
  ...payload,
737
737
  render: {
@@ -755,7 +755,7 @@ Examples:
755
755
  },
756
756
  { json }
757
757
  );
758
- const ssoHttp = () => new (0, _chunkTHHM4DPEjs.HttpClient)(_chunkTHHM4DPEjs.resolveConfig.call(void 0, ));
758
+ const ssoHttp = () => new (0, _chunkFJCIUF34js.HttpClient)(_chunkFJCIUF34js.resolveConfig.call(void 0, ));
759
759
  sso.command("status").description("Show this workspace's SSO connection and plan eligibility.").option("--json", "Emit JSON output").action(async (options) => {
760
760
  printSso(await ssoHttp().get(ssoPath), options.json);
761
761
  });
@@ -786,8 +786,8 @@ Examples:
786
786
  "Identity provider metadata XML file"
787
787
  ).option("--json", "Emit JSON output").action(
788
788
  async (options) => {
789
- const config = _chunkTHHM4DPEjs.resolveConfig.call(void 0, );
790
- const http = new (0, _chunkTHHM4DPEjs.HttpClient)(config);
789
+ const config = _chunkFJCIUF34js.resolveConfig.call(void 0, );
790
+ const http = new (0, _chunkFJCIUF34js.HttpClient)(config);
791
791
  const identity = await fetchWorkspaceCreationIdentity(
792
792
  http,
793
793
  config.apiKey
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  DeeplineClient
3
- } from "./chunk-J67NU4MQ.mjs";
3
+ } from "./chunk-PBZYY7VZ.mjs";
4
4
  import "./chunk-6IKARAYD.mjs";
5
5
  import "./chunk-JI2B4RZP.mjs";
6
6
  import "./chunk-EIMG75BT.mjs";
7
7
  import "./chunk-UBKA33KY.mjs";
8
8
  import {
9
9
  printCommandEnvelope
10
- } from "./chunk-BKC6VMYZ.mjs";
10
+ } from "./chunk-JRAVVJ3T.mjs";
11
11
  import {
12
12
  ACTIVE_ORG_ID_ENV,
13
13
  ACTIVE_ORG_NAME_ENV,
@@ -28,11 +28,11 @@ import {
28
28
  saveProjectDeeplineEnvValues,
29
29
  sdkCliStateDirPath,
30
30
  storedHostFeatures
31
- } from "./chunk-ZBCTXQ3P.mjs";
31
+ } from "./chunk-2PRO2JTX.mjs";
32
32
  import "./chunk-YHPYUZZX.mjs";
33
33
  import "./chunk-DLIRSHV6.mjs";
34
34
  import "./chunk-NXGCO4JB.mjs";
35
- import "./chunk-UPEOEYZ3.mjs";
35
+ import "./chunk-TQNHMWUR.mjs";
36
36
  import "./chunk-WZYKRD7T.mjs";
37
37
  import "./chunk-KRD6H754.mjs";
38
38
 
@@ -4,11 +4,11 @@ import {
4
4
  } from "./chunk-OSDXE27V.mjs";
5
5
  import {
6
6
  registerDeprecatedSearchCommand
7
- } from "./chunk-XT6GG3QO.mjs";
7
+ } from "./chunk-7AALNGTA.mjs";
8
8
  import {
9
9
  handleDeploymentGet,
10
10
  handleDeploymentsList
11
- } from "./chunk-QJAX7QN7.mjs";
11
+ } from "./chunk-NZSF57UO.mjs";
12
12
  import {
13
13
  buildPlayDashboardUrl
14
14
  } from "./chunk-IHG7UAHD.mjs";
@@ -45,7 +45,7 @@ import {
45
45
  logProvenanceReaches,
46
46
  normalizeRunEventOperationRequest,
47
47
  parseLogLevel
48
- } from "./chunk-J67NU4MQ.mjs";
48
+ } from "./chunk-PBZYY7VZ.mjs";
49
49
  import "./chunk-6IKARAYD.mjs";
50
50
  import {
51
51
  CSV_DATA_INPUT_KEY,
@@ -65,11 +65,11 @@ import "./chunk-UBKA33KY.mjs";
65
65
  import {
66
66
  recordCliTrace,
67
67
  traceCliSpan
68
- } from "./chunk-UFS752TU.mjs";
68
+ } from "./chunk-J6DCKJNM.mjs";
69
69
  import {
70
70
  createCliProgress,
71
71
  getActiveCliProgress
72
- } from "./chunk-GAMFK2ZP.mjs";
72
+ } from "./chunk-44ZTYHMQ.mjs";
73
73
  import {
74
74
  argsWantJson,
75
75
  csvSafeJsonString,
@@ -84,16 +84,16 @@ import {
84
84
  printJsonError,
85
85
  renderCommandEnvelopeText,
86
86
  shouldEmitJson
87
- } from "./chunk-BKC6VMYZ.mjs";
87
+ } from "./chunk-JRAVVJ3T.mjs";
88
88
  import {
89
89
  fetchWithDeploymentProtection
90
- } from "./chunk-ZBCTXQ3P.mjs";
90
+ } from "./chunk-2PRO2JTX.mjs";
91
91
  import "./chunk-YHPYUZZX.mjs";
92
92
  import "./chunk-DLIRSHV6.mjs";
93
93
  import {
94
94
  DeeplineError
95
95
  } from "./chunk-NXGCO4JB.mjs";
96
- import "./chunk-UPEOEYZ3.mjs";
96
+ import "./chunk-TQNHMWUR.mjs";
97
97
  import "./chunk-WZYKRD7T.mjs";
98
98
  import {
99
99
  __commonJS,
@@ -5543,6 +5543,11 @@ var DAYTONA_COMPUTE_PRICING_USD = {
5543
5543
  storageGiBSecond: 3e-8,
5544
5544
  includedStorageGiB: 5
5545
5545
  };
5546
+ var MODAL_SANDBOX_COMPUTE_PRICING_USD = {
5547
+ physicalCoreSecond: 3942e-8,
5548
+ memoryGiBSecond: 667e-8
5549
+ };
5550
+ var MODAL_SANDBOX_CPU_CORES = 0.5;
5546
5551
  function roundUsd(amount) {
5547
5552
  return Number(Math.max(0, amount).toFixed(12));
5548
5553
  }
@@ -5574,6 +5579,28 @@ function resolveDaytonaSandboxComputeItem(input) {
5574
5579
  }
5575
5580
  };
5576
5581
  }
5582
+ function resolveModalSandboxComputeItem(input) {
5583
+ const billableSeconds = Math.max(1, Math.ceil(input.wallTimeSeconds));
5584
+ const physicalCpuCores = Math.max(0, input.physicalCpuCores);
5585
+ const memoryGiB = Math.max(0, input.memoryGiB);
5586
+ const providerCostUsd = roundUsd(
5587
+ billableSeconds * (physicalCpuCores * MODAL_SANDBOX_COMPUTE_PRICING_USD.physicalCoreSecond + memoryGiB * MODAL_SANDBOX_COMPUTE_PRICING_USD.memoryGiBSecond)
5588
+ );
5589
+ return {
5590
+ itemId: input.itemId,
5591
+ source: "modal",
5592
+ unit: "sandbox_second",
5593
+ units: billableSeconds,
5594
+ providerCostUsd,
5595
+ metadata: {
5596
+ sandboxId: input.sandboxId ?? null,
5597
+ physicalCpuCores,
5598
+ memoryGiB,
5599
+ startedAt: input.startedAt,
5600
+ endedAt: input.endedAt
5601
+ }
5602
+ };
5603
+ }
5577
5604
 
5578
5605
  // ../play-runtime/runtime-constants.ts
5579
5606
  var STANDARD_PLAY_RUNTIME_LIMIT_SECONDS = 30 * 60;
@@ -5605,12 +5632,29 @@ function estimateDaytonaMaximumComputeCredits(limits) {
5605
5632
  item.providerCostUsd * COMPUTE_BILLING_MARKUP_MULTIPLIER * DEFAULT_PROVIDER_MARKUP_MULTIPLIER / DEFAULT_USD_PER_CUSTOMER_CREDIT
5606
5633
  );
5607
5634
  }
5635
+ function estimateModalMaximumComputeCredits(limits) {
5636
+ const item = resolveModalSandboxComputeItem({
5637
+ itemId: "estimate",
5638
+ wallTimeSeconds: maximumPlaySandboxBillingSeconds(limits),
5639
+ physicalCpuCores: MODAL_SANDBOX_CPU_CORES,
5640
+ memoryGiB: limits.memoryGiB
5641
+ });
5642
+ return roundUpCredits(
5643
+ item.providerCostUsd * COMPUTE_BILLING_MARKUP_MULTIPLIER * DEFAULT_PROVIDER_MARKUP_MULTIPLIER / DEFAULT_USD_PER_CUSTOMER_CREDIT
5644
+ );
5645
+ }
5646
+ function estimateMaximumSandboxComputeCredits(limits) {
5647
+ return Math.max(
5648
+ estimateDaytonaMaximumComputeCredits(limits),
5649
+ estimateModalMaximumComputeCredits(limits)
5650
+ );
5651
+ }
5608
5652
  function formatNonStandardSandboxRuntimeWarning(limits) {
5609
5653
  if (limits.timeoutSeconds <= STANDARD_PLAY_SANDBOX_RUNTIME_LIMITS.timeoutSeconds) {
5610
5654
  return null;
5611
5655
  }
5612
- const maximumComputeCredits = estimateDaytonaMaximumComputeCredits(limits);
5613
- return `This Play requests the standard sandbox for up to ${limits.timeoutSeconds}s (${limits.memoryGiB}GiB memory, ${limits.cpu} CPU, ${limits.diskGiB}GiB disk). Maximum compute estimate: ${maximumComputeCredits.toFixed(2)} Deepline credits. Longer runtimes are risky.`;
5656
+ const maximumComputeCredits = estimateMaximumSandboxComputeCredits(limits);
5657
+ return `This Play requests the standard sandbox for up to ${limits.timeoutSeconds}s (${limits.memoryGiB}GiB memory, ${limits.cpu} CPU, ${limits.diskGiB}GiB disk). Maximum compute estimate across Daytona and Modal: ${maximumComputeCredits.toFixed(2)} Deepline credits. Longer runtimes are risky.`;
5614
5658
  }
5615
5659
 
5616
5660
  // ../play-runtime/internal-step-ids.ts
@@ -10535,7 +10579,8 @@ function extractBillingForStatus(status, error) {
10535
10579
  }
10536
10580
  function formatInsufficientCreditsMessage(input) {
10537
10581
  const operation = getStringField(input.billing, "operation_id") ?? getStringField(input.billing, "operation") ?? extractToolIdFromErrorText(input.error) ?? getStringField(input.billing, "provider") ?? "tool call";
10538
- const balance = formatCreditAmount2(input.billing.balance_credits);
10582
+ const spendableBalance = input.billing.spendable_balance_credits !== void 0 ? input.billing.spendable_balance_credits : input.billing.balance_credits;
10583
+ const balance = formatCreditAmount2(spendableBalance);
10539
10584
  const required = formatCreditAmount2(input.billing.required_credits);
10540
10585
  const recommended = formatCreditAmount2(
10541
10586
  input.billing.recommended_add_credits ?? input.billing.needed_credits
@@ -10548,7 +10593,8 @@ function formatInsufficientCreditsMessage(input) {
10548
10593
  const minimum = input.billing.minimum_balance_credits;
10549
10594
  const estimate = input.billing.estimated_credits;
10550
10595
  const estimatedPrice = typeof estimate === "number" ? ` Estimated price: ${formatCreditAmount2(estimate)}.` : "";
10551
- const shortfall = typeof minimum === "number" && input.billing.required_credits === minimum ? `Workspace balance ${balance} is below the ${formatCreditAmount2(minimum)}-credit workspace minimum for starting a billable call (${operation}${workspaceSuffix}); this is a workspace-wide minimum, separate from the tool's own price.${estimatedPrice}` : typeof estimate === "number" && typeof input.billing.required_credits === "number" && input.billing.required_credits > estimate ? `Workspace balance ${balance} is below the ${required}-credit balance required to start ${operation}${workspaceSuffix}; this is a required balance, not the price.${estimatedPrice}` : `Workspace balance ${balance} < required ${required} for ${operation}${workspaceSuffix}.`;
10596
+ const spendableNote = " Spendable credits exclude pending spending and can be lower than the posted balance shown by billing balance.";
10597
+ const shortfall = typeof minimum === "number" && input.billing.required_credits === minimum ? `Spendable workspace balance ${balance} credits is below the ${formatCreditAmount2(minimum)}-credit workspace minimum for starting a billable call (${operation}${workspaceSuffix}); this is a workspace-wide minimum, separate from the tool's own price.${estimatedPrice}${spendableNote}` : typeof estimate === "number" && typeof input.billing.required_credits === "number" && input.billing.required_credits > estimate ? `Spendable workspace balance ${balance} credits is below the ${required}-credit balance required to start ${operation}${workspaceSuffix}; this is a required balance, not the price.${estimatedPrice}${spendableNote}` : `Spendable workspace balance ${balance} credits < required ${required} for ${operation}${workspaceSuffix}.${spendableNote}`;
10552
10598
  return `${shortfall}${addSuffix} Ask the user if they want to add Deepline credits. If they approve, run: ${recovery.topUp}. If checkout is required, run: ${recovery.checkout}.`;
10553
10599
  }
10554
10600
  function buildInsufficientCreditsSummaryLines(input) {
@@ -15343,16 +15389,22 @@ async function handlePlayVersions(args) {
15343
15389
  return 0;
15344
15390
  }
15345
15391
  function formatPlayCostEstimate(estimate) {
15392
+ const computeSummary = estimate?.compute ? `; ${estimate.status === "available" && estimate.source === "observed" ? "observed Deepline total includes usage-based compute; per-session ceiling" : "separate Deepline compute is usage-based; per-session ceiling"} across ${estimate.compute.pricedBackends.map(formatSandboxBackend).join(" and ")}: ${formatCredits(estimate.compute.maximumCredits)} credits (${formatSandboxBackend(estimate.compute.maximumBackend)} is highest; ${formatCredits(estimate.compute.maximumBillingSeconds)}s; total session count unbounded)` : "";
15346
15393
  if (!estimate || estimate.status === "unavailable") {
15347
- return `unavailable${estimate ? `: ${estimate.message}` : ""}`;
15394
+ return `unavailable${estimate ? `: ${estimate.message}${computeSummary}` : ""}`;
15348
15395
  }
15349
- const formatCredits = (value) => value.toLocaleString("en-US", {
15350
- maximumFractionDigits: value < 1 ? 4 : 2
15351
- });
15352
15396
  const credits = estimate.lowCredits === estimate.highCredits ? `${estimate.source === "observed" ? "~" : ""}${formatCredits(estimate.lowCredits)}` : `${formatCredits(estimate.lowCredits)}\u2013${formatCredits(estimate.highCredits)}`;
15353
15397
  const unit = estimate.unit === "row" ? "output row" : "run";
15354
15398
  const source = estimate.source === "observed" ? `observed from ${estimate.sampleRunCount} ${estimate.sampleRunCount === 1 ? "run" : "runs"}` : "static estimate";
15355
- return `${credits} Deepline credits per ${unit} (${source})`;
15399
+ return `${credits} Deepline credits per ${unit} (${source})${computeSummary}`;
15400
+ }
15401
+ function formatCredits(value) {
15402
+ return value.toLocaleString("en-US", {
15403
+ maximumFractionDigits: value < 1 ? 4 : 2
15404
+ });
15405
+ }
15406
+ function formatSandboxBackend(backend) {
15407
+ return backend === "daytona" ? "Daytona" : "Modal";
15356
15408
  }
15357
15409
  var PREBUILT_PLAY_TAG_KEYS = [
15358
15410
  "smb",
@@ -16710,7 +16762,7 @@ Examples:
16710
16762
  process.exitCode = await ownView();
16711
16763
  return;
16712
16764
  }
16713
- const { describeAnything } = await import("./describe-WERH4TD2.mjs");
16765
+ const { describeAnything } = await import("./describe-XYJ2ZT4M.mjs");
16714
16766
  process.exitCode = await describeAnything(
16715
16767
  name,
16716
16768
  {