deepline 0.3.127 → 0.3.129

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 (128) hide show
  1. package/dist/bundling-sources/sdk/src/client.ts +34 -9
  2. package/dist/bundling-sources/sdk/src/http.ts +22 -0
  3. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  4. package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +22 -0
  5. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +265 -2
  6. package/dist/bundling-sources/shared_libs/play-runtime/bounded-batch-function.ts +682 -0
  7. package/dist/bundling-sources/shared_libs/play-runtime/child-execution-strategy.ts +21 -5
  8. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +5390 -1732
  9. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +107 -1
  10. package/dist/bundling-sources/shared_libs/play-runtime/deployment/commands/roll-execution-relay.ts +7 -0
  11. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-machines.ts +229 -7
  12. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-registry.ts +25 -4
  13. package/dist/bundling-sources/shared_libs/play-runtime/deployment/runtime-gateway-capacity.ts +71 -0
  14. package/dist/bundling-sources/shared_libs/play-runtime/deployment/runtime-gateway-drain.ts +1 -1
  15. package/dist/bundling-sources/shared_libs/play-runtime/deployment/runtime-topology.ts +4 -1
  16. package/dist/bundling-sources/shared_libs/play-runtime/durable-receipt-execution.ts +694 -28
  17. package/dist/bundling-sources/shared_libs/play-runtime/egress-bandwidth-probe.ts +167 -0
  18. package/dist/bundling-sources/shared_libs/play-runtime/execute-server-timing.ts +103 -0
  19. package/dist/bundling-sources/shared_libs/play-runtime/execution-gateway-receipt-output-reference.ts +34 -0
  20. package/dist/bundling-sources/shared_libs/play-runtime/execution-gateway-response-size.ts +27 -0
  21. package/dist/bundling-sources/shared_libs/play-runtime/gateway-postgres-admission.ts +66 -1
  22. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +425 -71
  23. package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +210 -32
  24. package/dist/bundling-sources/shared_libs/play-runtime/governor/in-memory-rate-state-backend.ts +27 -13
  25. package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +19 -6
  26. package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +61 -2
  27. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/contracts.ts +33 -1
  28. package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/job.ts +42 -1
  29. package/dist/bundling-sources/shared_libs/play-runtime/launch-source-policy.ts +11 -11
  30. package/dist/bundling-sources/shared_libs/play-runtime/ledger-safe-payload.ts +49 -16
  31. package/dist/bundling-sources/shared_libs/play-runtime/map-memory-limits.ts +1653 -98
  32. package/dist/bundling-sources/shared_libs/play-runtime/memory-ledger.ts +807 -0
  33. package/dist/bundling-sources/shared_libs/play-runtime/memory-pressure-signal.ts +138 -0
  34. package/dist/bundling-sources/shared_libs/play-runtime/output-size-limits.ts +85 -3
  35. package/dist/bundling-sources/shared_libs/play-runtime/persistence-latch.ts +60 -2
  36. package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +46 -1
  37. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/contracts.ts +2 -0
  38. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/job.ts +1 -0
  39. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/ports.ts +1 -0
  40. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/postgres-adapter.ts +1 -0
  41. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-semantics.ts +70 -27
  42. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +56 -0
  43. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/adaptive-provider-capacity-controller.ts +192 -0
  44. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/epoch-aimd-rate-controller.ts +194 -0
  45. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/fixture-capacity-simulator.ts +220 -0
  46. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/gradient2-concurrency-controller.ts +214 -0
  47. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-capacity-policy.ts +43 -0
  48. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-concurrency-policy.ts +30 -0
  49. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-rate-policy.ts +95 -0
  50. package/dist/bundling-sources/shared_libs/play-runtime/provider-capacity/provider-throttle-classifier.ts +40 -0
  51. package/dist/bundling-sources/shared_libs/play-runtime/resource-governor.ts +1535 -11
  52. package/dist/bundling-sources/shared_libs/play-runtime/run-failure.ts +49 -2
  53. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger.ts +6 -1
  54. package/dist/bundling-sources/shared_libs/play-runtime/run-log-buffer.ts +55 -0
  55. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/egress-probe.ts +221 -0
  56. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +339 -29
  57. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-deadline.ts +28 -1
  58. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-progress-push.ts +192 -165
  59. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +6 -0
  60. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts +90 -5
  61. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-runtime-watchdog.ts +281 -6
  62. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +27 -1
  63. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/local-process.ts +19 -0
  64. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/modal.ts +108 -0
  65. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +40 -0
  66. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/types.ts +11 -5
  67. package/dist/bundling-sources/shared_libs/play-runtime/runtime-actions.ts +30 -0
  68. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api-compression.ts +276 -0
  69. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +723 -115
  70. package/dist/bundling-sources/shared_libs/play-runtime/runtime-capacity-policy.ts +98 -2
  71. package/dist/bundling-sources/shared_libs/play-runtime/runtime-contract.ts +3 -2
  72. package/dist/bundling-sources/shared_libs/play-runtime/runtime-environment.ts +41 -4
  73. package/dist/bundling-sources/shared_libs/play-runtime/runtime-flow.ts +448 -0
  74. package/dist/bundling-sources/shared_libs/play-runtime/runtime-map-row-feed.ts +215 -0
  75. package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +11 -0
  76. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-store-adapter.ts +161 -14
  77. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-value.ts +184 -0
  78. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-writer.ts +607 -121
  79. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sandbox-placement-policy.ts +4 -0
  80. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sheet-row-writer.ts +21 -0
  81. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +15 -2
  82. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +71 -14
  83. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-deploy-task.ts +2 -2
  84. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +288 -119
  85. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-shared.ts +8 -6
  86. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +28 -3
  87. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/canonical-integration-operation-store.ts +179 -0
  88. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-heavy-request-admission.ts +80 -2
  89. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-progress-registry.ts +31 -2
  90. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/integration-operation-store-contract.ts +104 -0
  91. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/integration-operation-value-reference.ts +47 -0
  92. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/integration-operation-value-retirement.ts +193 -0
  93. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/integration-operation-value-storage.ts +420 -0
  94. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-pool.ts +41 -0
  95. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +134 -3
  96. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-state.ts +1657 -95
  97. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +885 -73
  98. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-completion-coalescer.ts +452 -0
  99. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +601 -42
  100. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-terminal-transition.ts +1 -0
  101. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-value-storage.ts +371 -0
  102. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-resource-metrics.ts +86 -7
  103. package/dist/bundling-sources/shared_libs/play-runtime/secret-redaction.ts +153 -22
  104. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/index.ts +1 -0
  105. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/receipt-cohort.ts +188 -38
  106. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/runtime-step-receipts-adapter.ts +28 -13
  107. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +44 -1
  108. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +56 -4
  109. package/dist/bundling-sources/shared_libs/play-runtime/work-receipts.ts +2 -0
  110. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +16 -10
  111. package/dist/bundling-sources/shared_libs/plays/dataset.ts +4 -1
  112. package/dist/cli/index.js +254 -38
  113. package/dist/cli/index.mjs +254 -38
  114. package/dist/{compiler-manifest-DfSnbCTW.d.mts → compiler-manifest-BIqRyj5m.d.mts} +1 -1
  115. package/dist/{compiler-manifest-DfSnbCTW.d.ts → compiler-manifest-BIqRyj5m.d.ts} +1 -1
  116. package/dist/index.d.mts +4 -2
  117. package/dist/index.d.ts +4 -2
  118. package/dist/index.js +231 -35
  119. package/dist/index.mjs +231 -35
  120. package/dist/install-integrity.json +31 -2
  121. package/dist/plays/bundle-play-file.d.mts +2 -2
  122. package/dist/plays/bundle-play-file.d.ts +2 -2
  123. package/dist/plays/bundle-play-file.mjs +65 -1
  124. package/dist/release.d.mts +1 -1
  125. package/dist/release.d.ts +1 -1
  126. package/dist/release.js +1 -1
  127. package/dist/release.mjs +1 -1
  128. package/package.json +1 -1
@@ -3063,7 +3063,7 @@ var SDK_RELEASE = {
3063
3063
  // getters keep their established compatibility behavior.
3064
3064
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
3065
3065
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
3066
- version: "0.3.127",
3066
+ version: "0.3.129",
3067
3067
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
3068
3068
  packageCapabilities: {
3069
3069
  updatePreferences: 1
@@ -3901,6 +3901,20 @@ var HttpClient = class {
3901
3901
  }
3902
3902
  throw lastError;
3903
3903
  }
3904
+ if (typeof parsed === "string") {
3905
+ const interstitial = detectHtmlErrorBody(
3906
+ body,
3907
+ response.headers.get("content-type")
3908
+ );
3909
+ if (interstitial) {
3910
+ throw new DeeplineError(
3911
+ `${this.config.baseUrl} returned a deployment-protection page instead of JSON. Set VERCEL_PROTECTION_BYPASS_TOKEN, or run \`vercel login\` if the CLI session expired.`,
3912
+ response.status,
3913
+ "DEPLOYMENT_PROTECTED",
3914
+ { htmlErrorPage: true }
3915
+ );
3916
+ }
3917
+ }
3904
3918
  return parsed;
3905
3919
  } catch (error) {
3906
3920
  clearTimeout(timeoutId);
@@ -4397,6 +4411,11 @@ function normalizePlayRunLedgerTerminalSource(value) {
4397
4411
  ) ? value : null;
4398
4412
  }
4399
4413
 
4414
+ // ../play-runtime/run-log-buffer.ts
4415
+ var RUNNER_LOG_MAX_BYTES = 5 * 1024 * 1024;
4416
+ var TERMINAL_RESERVE_BYTES = 64 * 1024;
4417
+ var encoder = new TextEncoder();
4418
+
4400
4419
  // ../play-runtime/secret-redaction.ts
4401
4420
  var SECRET_REDACTION_PLACEHOLDER = "[REDACTED_SECRET]";
4402
4421
  var BEARER_TOKEN_RE = /\bBearer\s+[A-Za-z0-9._~+/=-]{12,}\b/g;
@@ -4414,6 +4433,18 @@ var SENSITIVE_FIELD_NAME_RE = new RegExp(
4414
4433
  `(^|[._-])(?:${SENSITIVE_FIELD_NAME})$`,
4415
4434
  "i"
4416
4435
  );
4436
+ var SENSITIVE_FIELD_NAME_CACHE_MAX_ENTRIES = 4096;
4437
+ var sensitiveFieldNameCache = /* @__PURE__ */ new Map();
4438
+ function isSensitiveFieldName(key) {
4439
+ const cached = sensitiveFieldNameCache.get(key);
4440
+ if (cached !== void 0) return cached;
4441
+ const sensitive = SENSITIVE_FIELD_NAME_RE.test(key);
4442
+ if (sensitiveFieldNameCache.size >= SENSITIVE_FIELD_NAME_CACHE_MAX_ENTRIES) {
4443
+ sensitiveFieldNameCache.clear();
4444
+ }
4445
+ sensitiveFieldNameCache.set(key, sensitive);
4446
+ return sensitive;
4447
+ }
4417
4448
  var SERIALIZED_SECRET_FIELD_RE = new RegExp(
4418
4449
  `"(${SENSITIVE_FIELD_NAME})"\\s*:\\s*(?:"[^"\\\\]*"|\\{[^{}]*\\})`,
4419
4450
  "gi"
@@ -4421,7 +4452,45 @@ var SERIALIZED_SECRET_FIELD_RE = new RegExp(
4421
4452
  function escapeRegExp(value) {
4422
4453
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4423
4454
  }
4455
+ var REDACTION_TRIGGER_RE = new RegExp(
4456
+ [
4457
+ // Sensitive field names, in object keys and in `name=`/`"name":` text.
4458
+ "token",
4459
+ "secret",
4460
+ "password",
4461
+ "authorization",
4462
+ "cookie",
4463
+ "credential",
4464
+ // One `key` branch instead of `api[_-]?key`, `private[_-]?key` and `key_`.
4465
+ // A regex alternation costs roughly one substring scan per branch, and a
4466
+ // broader branch can only send more payloads down the exact path.
4467
+ "key",
4468
+ // Self-identifying credential prefixes.
4469
+ "bearer",
4470
+ "basic",
4471
+ "-----BEGIN",
4472
+ "xox[baprs]-",
4473
+ "[prs]k_",
4474
+ "pat_",
4475
+ "ghp_",
4476
+ // URL credentials: `//user:pass@host` userinfo and sensitive query params.
4477
+ // The userinfo class excludes `/` exactly as the rule it guards does.
4478
+ "//[^\\s/]{0,256}@",
4479
+ "[?#&]sig",
4480
+ // JWTs carry no keyword at all, so the shape itself is the marker. Anchor
4481
+ // on the separating dot and drop JWT_RE's leading `{8,}` segment: a dot is
4482
+ // rare enough for the engine to skip between candidates, which makes this
4483
+ // gate roughly ten times cheaper than re-running JWT_RE itself, and
4484
+ // dropping a required segment can only widen what it accepts.
4485
+ "\\.[A-Za-z0-9_-]{1,16384}\\.[A-Za-z0-9_-]{8}"
4486
+ ].join("|"),
4487
+ "i"
4488
+ );
4489
+ function mightContainRedactableSecret(value) {
4490
+ return REDACTION_TRIGGER_RE.test(value);
4491
+ }
4424
4492
  function redactSecretLikeString(value) {
4493
+ if (!mightContainRedactableSecret(value)) return value;
4425
4494
  const serializedRedacted = value.replace(
4426
4495
  SERIALIZED_SECRET_FIELD_RE,
4427
4496
  `"$1":"${SECRET_REDACTION_PLACEHOLDER}"`
@@ -4443,9 +4512,26 @@ function redactSecretLikeString(value) {
4443
4512
  }
4444
4513
  function createSecretRedactionContext(initialValues = []) {
4445
4514
  const exactSecrets = /* @__PURE__ */ new Set();
4515
+ const exactSecretMatchers = /* @__PURE__ */ new Map();
4446
4516
  function register(value) {
4447
4517
  if (value.length > 0) exactSecrets.add(value);
4448
4518
  }
4519
+ function matchersForSecret(secret) {
4520
+ const cached = exactSecretMatchers.get(secret);
4521
+ if (cached) return cached;
4522
+ const literals = [secret];
4523
+ try {
4524
+ const encoded = encodeURIComponent(secret);
4525
+ if (encoded !== secret) literals.push(encoded);
4526
+ } catch {
4527
+ }
4528
+ const built = literals.map((literal) => ({
4529
+ literal,
4530
+ matcher: new RegExp(escapeRegExp(literal), "g")
4531
+ }));
4532
+ exactSecretMatchers.set(secret, built);
4533
+ return built;
4534
+ }
4449
4535
  for (const value of initialValues) register(value);
4450
4536
  function containsRegisteredSecret(value, {
4451
4537
  includeEncoded = false,
@@ -4468,21 +4554,13 @@ function createSecretRedactionContext(initialValues = []) {
4468
4554
  return exactSecrets.has(value);
4469
4555
  }
4470
4556
  function redactRegisteredSecrets(value) {
4557
+ if (exactSecrets.size === 0) return value;
4471
4558
  let output2 = value;
4472
4559
  for (const secret of exactSecrets) {
4473
- output2 = output2.replace(
4474
- new RegExp(escapeRegExp(secret), "g"),
4475
- SECRET_REDACTION_PLACEHOLDER
4476
- );
4477
- try {
4478
- const encoded = encodeURIComponent(secret);
4479
- if (encoded !== secret) {
4480
- output2 = output2.replace(
4481
- new RegExp(escapeRegExp(encoded), "g"),
4482
- SECRET_REDACTION_PLACEHOLDER
4483
- );
4484
- }
4485
- } catch {
4560
+ for (const { literal, matcher } of matchersForSecret(secret)) {
4561
+ if (!output2.includes(literal)) continue;
4562
+ matcher.lastIndex = 0;
4563
+ output2 = output2.replace(matcher, SECRET_REDACTION_PLACEHOLDER);
4486
4564
  }
4487
4565
  }
4488
4566
  return output2;
@@ -4493,13 +4571,33 @@ function createSecretRedactionContext(initialValues = []) {
4493
4571
  }
4494
4572
  function redact(value) {
4495
4573
  if (typeof value === "string") return redactString2(value);
4496
- if (Array.isArray(value)) return value.map((entry) => redact(entry));
4574
+ if (Array.isArray(value)) {
4575
+ let changed = false;
4576
+ const next = new Array(value.length);
4577
+ for (let index = 0; index < value.length; index += 1) {
4578
+ const entry = value[index];
4579
+ const redacted = redact(entry);
4580
+ next[index] = redacted;
4581
+ if (redacted !== entry) changed = true;
4582
+ }
4583
+ return changed ? next : value;
4584
+ }
4497
4585
  if (value && typeof value === "object") {
4586
+ const prototype = Object.getPrototypeOf(value);
4587
+ let changed = prototype !== Object.prototype && prototype !== null;
4588
+ const source = value;
4589
+ const keys = Object.keys(source);
4590
+ const redactedValues = new Array(keys.length);
4591
+ for (let index = 0; index < keys.length; index += 1) {
4592
+ const key = keys[index];
4593
+ const entry = source[key];
4594
+ const redacted = isSensitiveFieldName(key) ? SECRET_REDACTION_PLACEHOLDER : redact(entry);
4595
+ redactedValues[index] = redacted;
4596
+ if (redacted !== entry) changed = true;
4597
+ }
4598
+ if (!changed) return value;
4498
4599
  return Object.fromEntries(
4499
- Object.entries(value).map(([key, entry]) => [
4500
- key,
4501
- SENSITIVE_FIELD_NAME_RE.test(key) ? SECRET_REDACTION_PLACEHOLDER : redact(entry)
4502
- ])
4600
+ keys.map((key, index) => [key, redactedValues[index]])
4503
4601
  );
4504
4602
  }
4505
4603
  return value;
@@ -4537,9 +4635,10 @@ var CUSTOMER_OUTPUT_VALUE_MAX_BYTES = 5 * 1024 * 1024;
4537
4635
  var CUSTOMER_OUTPUT_TOTAL_MAX_BYTES = 5 * 1024 * 1024;
4538
4636
  var RUNTIME_RECEIPT_OUTPUT_MAX_BYTES = 10 * 1024 * 1024;
4539
4637
  var RUNTIME_RECEIPT_COMPLETION_BUFFER_MAX_BYTES = 32 * 1024 * 1024;
4638
+ var RUNTIME_RECEIPT_CONTROL_BUFFER_MAX_BYTES = 2 * 1024 * 1024;
4540
4639
  var RUNNER_TERMINAL_PUSH_MAX_BODY_BYTES = 16 * 1024 * 1024;
4541
4640
  var RUNTIME_RECEIPT_GATEWAY_BATCH_MAX_BYTES = 12 * 1024 * 1024;
4542
- var RUNTIME_RECEIPT_WRITER_TARGET_BATCH_BYTES = 4 * 1024 * 1024;
4641
+ var RUNTIME_RECEIPT_WRITER_TARGET_BATCH_BYTES = 8 * 1024 * 1024;
4543
4642
  var RUNNER_POST_TERMINAL_DIAGNOSTIC_MAX_BYTES = 64 * 1024;
4544
4643
  var JSON_SIZE_LIMIT_REACHED = Symbol("JSON_SIZE_LIMIT_REACHED");
4545
4644
 
@@ -5347,7 +5446,11 @@ function normalizePlayRunLedgerSnapshot(value, fallback) {
5347
5446
  finiteNumber(value.totalLogCount) ?? logTail.length,
5348
5447
  logTail.length
5349
5448
  ),
5350
- logsTruncated: value.logsTruncated === true,
5449
+ // A persisted snapshot carrying more lines than the tail keeps is
5450
+ // truncated here, whatever the stored flag says. Reporting `false` while
5451
+ // dropping lines is silent loss: a reader would take the tail for the
5452
+ // whole log.
5453
+ logsTruncated: value.logsTruncated === true || logTail.length > LOG_TAIL_LIMIT,
5351
5454
  activeStepId: optionalNullableString(value.activeStepId),
5352
5455
  activeActivityId: optionalNullableString(value.activeActivityId),
5353
5456
  activeArtifactTableNamespace: optionalNullableString(
@@ -6338,28 +6441,42 @@ var PLAY_BACKEND_DESCRIPTORS = {
6338
6441
  // ../play-runtime/runtime-environment.ts
6339
6442
  var PLAY_RUNTIME_ENVIRONMENTS = ["preview"];
6340
6443
  var PLAY_RUNTIME_NAMESPACE_PATTERN = /^[a-z][a-z0-9-]{0,30}$/;
6444
+ var PLAY_RUNTIME_SANDBOX_PLACEMENT_POLICY_PATTERN = /^[a-z][a-z0-9_]*@[1-9][0-9]*$/;
6341
6445
  function normalizePlayRuntimeNamespace(value) {
6342
6446
  if (typeof value !== "string") return null;
6343
6447
  const normalized = value.trim();
6344
6448
  return PLAY_RUNTIME_NAMESPACE_PATTERN.test(normalized) ? normalized : null;
6345
6449
  }
6450
+ function normalizePlayRuntimeSandboxPlacementPolicy(value) {
6451
+ if (typeof value !== "string") return null;
6452
+ const normalized = value.trim();
6453
+ return PLAY_RUNTIME_SANDBOX_PLACEMENT_POLICY_PATTERN.test(normalized) ? normalized : null;
6454
+ }
6346
6455
  function normalizePlayRuntimeSelection(value) {
6347
6456
  if (!value || typeof value !== "object" || Array.isArray(value)) return null;
6348
6457
  const record3 = value;
6349
6458
  if (Object.keys(record3).some(
6350
- (key) => key !== "environment" && key !== "namespace" && key !== "backend"
6459
+ (key) => key !== "environment" && key !== "namespace" && key !== "backend" && key !== "sandboxPlacementPolicy"
6351
6460
  ) || record3.environment !== "preview") {
6352
6461
  return null;
6353
6462
  }
6354
6463
  const namespace = normalizePlayRuntimeNamespace(record3.namespace);
6355
6464
  if (!namespace) return null;
6356
- if (record3.backend === void 0) {
6357
- return { environment: "preview", namespace };
6465
+ const sandboxPlacementPolicy = record3.sandboxPlacementPolicy === void 0 ? void 0 : normalizePlayRuntimeSandboxPlacementPolicy(
6466
+ record3.sandboxPlacementPolicy
6467
+ );
6468
+ if (record3.sandboxPlacementPolicy !== void 0 && sandboxPlacementPolicy === null) {
6469
+ return null;
6358
6470
  }
6359
- if (record3.backend !== PLAY_RUNTIME_BACKENDS.daytona && record3.backend !== PLAY_RUNTIME_BACKENDS.modal) {
6471
+ if (record3.backend !== void 0 && record3.backend !== PLAY_RUNTIME_BACKENDS.daytona && record3.backend !== PLAY_RUNTIME_BACKENDS.modal) {
6360
6472
  return null;
6361
6473
  }
6362
- return { environment: "preview", namespace, backend: record3.backend };
6474
+ return {
6475
+ environment: "preview",
6476
+ namespace,
6477
+ ...record3.backend === void 0 ? {} : { backend: record3.backend },
6478
+ ...sandboxPlacementPolicy ? { sandboxPlacementPolicy } : {}
6479
+ };
6363
6480
  }
6364
6481
  function normalizePlayRuntimeEnvironment(value) {
6365
6482
  return typeof value === "string" && PLAY_RUNTIME_ENVIRONMENTS.includes(value) ? value : null;
@@ -6453,7 +6570,7 @@ function resolvePlayRunRuntimeSelection(request) {
6453
6570
  const runtime = normalizePlayRuntimeSelection(request.runtime);
6454
6571
  if (!runtime) {
6455
6572
  throw new DeeplineError(
6456
- 'runtime must be { environment: "preview", namespace, backend?: "daytona" | "modal" } with namespace matching ^[a-z][a-z0-9-]{0,30}$.',
6573
+ 'runtime must be { environment: "preview", namespace, backend?: "daytona" | "modal", sandboxPlacementPolicy?: "policy_name@1" } with namespace matching ^[a-z][a-z0-9-]{0,30}$.',
6457
6574
  void 0,
6458
6575
  "INVALID_RUNTIME_SELECTION"
6459
6576
  );
@@ -6463,11 +6580,15 @@ function resolvePlayRunRuntimeSelection(request) {
6463
6580
  const configured = process.env.DEEPLINE_RUNTIME_ENVIRONMENT?.trim();
6464
6581
  const configuredNamespace = process.env.DEEPLINE_RUNTIME_NAMESPACE?.trim();
6465
6582
  const configuredToken = process.env.DEEPLINE_RUNTIME_ENVIRONMENT_TOKEN?.trim();
6583
+ const configuredPlacementPolicy = process.env.DEEPLINE_RUNTIME_SANDBOX_PLACEMENT_POLICY?.trim();
6466
6584
  if (!configured) {
6467
- if (configuredNamespace || configuredToken) {
6585
+ if (configuredNamespace || configuredToken || configuredPlacementPolicy) {
6468
6586
  const present = [];
6469
6587
  if (configuredNamespace) present.push("DEEPLINE_RUNTIME_NAMESPACE");
6470
6588
  if (configuredToken) present.push("DEEPLINE_RUNTIME_ENVIRONMENT_TOKEN");
6589
+ if (configuredPlacementPolicy) {
6590
+ present.push("DEEPLINE_RUNTIME_SANDBOX_PLACEMENT_POLICY");
6591
+ }
6471
6592
  const isPlural = present.length > 1;
6472
6593
  throw new DeeplineError(
6473
6594
  [
@@ -6498,18 +6619,28 @@ function resolvePlayRunRuntimeSelection(request) {
6498
6619
  "INVALID_RUNTIME_NAMESPACE"
6499
6620
  );
6500
6621
  }
6501
- const configuredBackend = process.env.DEEPLINE_PLAY_RUNNER_BACKEND?.trim();
6502
- if (!configuredBackend) {
6503
- return { environment, namespace };
6504
- }
6505
- if (configuredBackend !== "daytona" && configuredBackend !== "modal") {
6622
+ const configuredBackendValue = process.env.DEEPLINE_PLAY_RUNNER_BACKEND?.trim();
6623
+ const configuredBackend = configuredBackendValue === "daytona" || configuredBackendValue === "modal" ? configuredBackendValue : void 0;
6624
+ if (configuredBackendValue && !configuredBackend) {
6506
6625
  throw new DeeplineError(
6507
- `DEEPLINE_PLAY_RUNNER_BACKEND must be daytona or modal for preview runtime selection. Received "${configuredBackend}".`,
6626
+ `DEEPLINE_PLAY_RUNNER_BACKEND must be daytona or modal for preview runtime selection. Received "${configuredBackendValue}".`,
6508
6627
  void 0,
6509
6628
  "INVALID_RUNTIME_BACKEND"
6510
6629
  );
6511
6630
  }
6512
- return { environment, namespace, backend: configuredBackend };
6631
+ if (configuredPlacementPolicy && !normalizePlayRuntimeSandboxPlacementPolicy(configuredPlacementPolicy)) {
6632
+ throw new DeeplineError(
6633
+ `DEEPLINE_RUNTIME_SANDBOX_PLACEMENT_POLICY must be a versioned placement policy id such as daytona_only@1. Received "${configuredPlacementPolicy}".`,
6634
+ void 0,
6635
+ "INVALID_RUNTIME_SANDBOX_PLACEMENT_POLICY"
6636
+ );
6637
+ }
6638
+ return {
6639
+ environment,
6640
+ namespace,
6641
+ ...configuredBackend ? { backend: configuredBackend } : {},
6642
+ ...configuredPlacementPolicy ? { sandboxPlacementPolicy: configuredPlacementPolicy } : {}
6643
+ };
6513
6644
  }
6514
6645
  function runtimeSelectionHeaders(runtime) {
6515
6646
  if (!runtime) return void 0;
@@ -16880,6 +17011,70 @@ import {
16880
17011
  // ../plays/authoring-contract.ts
16881
17012
  import { Type } from "@sinclair/typebox";
16882
17013
  import { Value } from "@sinclair/typebox/value";
17014
+ var SUPPORTED_PLAY_AUTHORING_CONTRACT_EDITIONS = [
17015
+ 1,
17016
+ 2,
17017
+ 3,
17018
+ 4,
17019
+ 5,
17020
+ 6,
17021
+ 7,
17022
+ 8
17023
+ ];
17024
+ var PLAY_AUTHORING_CONTRACT_CHANGELOG_DETAILS = [
17025
+ {
17026
+ changed: "Historical extraction semantics. Invalid or unresolved optional authoring fields may normalize to absence.",
17027
+ compatibilityOwner: "Plays Runtime",
17028
+ newWritesEnd: "2026-11-03",
17029
+ readerRemoval: "After every retained edition 1 artifact has a materialized admitted snapshot."
17030
+ },
17031
+ {
17032
+ changed: "Pins admitted authoring snapshots and rejects ambiguous billing, secret, webhook, fetch, timeout, receipt-wait, and freshness contracts.",
17033
+ compatibilityOwner: "Plays Runtime",
17034
+ newWritesEnd: "2026-08-03",
17035
+ readerRemoval: "After every retained edition 2 artifact has an admitted input schema or has been republished."
17036
+ },
17037
+ {
17038
+ changed: "Materializes the declared input schema in the admitted snapshot so launch never reparses current source.",
17039
+ compatibilityOwner: "Plays Runtime",
17040
+ newWritesEnd: "2026-08-19",
17041
+ readerRemoval: null
17042
+ },
17043
+ {
17044
+ changed: "ctx.secrets.get(name) resolves an allowed secret to a plaintext string for ordinary Play code. Editions 1\u20133 retain opaque secret handles.",
17045
+ compatibilityOwner: "Plays Runtime",
17046
+ newWritesEnd: null,
17047
+ readerRemoval: null
17048
+ },
17049
+ {
17050
+ changed: "ctx.fetch throws a typed, redacted CtxFetchHttpError for non-2xx responses. Editions 1\u20134 continue to return the response record for every HTTP status.",
17051
+ compatibilityOwner: "Plays Runtime",
17052
+ newWritesEnd: null,
17053
+ readerRemoval: null
17054
+ },
17055
+ {
17056
+ changed: "Adds static cron input and rejects unknown definePlay and binding fields during new admission. Editions 1\u20135 retain their admitted binding semantics.",
17057
+ compatibilityOwner: "Plays Runtime",
17058
+ newWritesEnd: null,
17059
+ readerRemoval: null
17060
+ },
17061
+ {
17062
+ changed: "Slack HITL calls that omit timeout wait one week. Editions 1\u20136 retain the historical 24-hour default.",
17063
+ compatibilityOwner: "Plays Runtime",
17064
+ newWritesEnd: null,
17065
+ readerRemoval: null
17066
+ },
17067
+ {
17068
+ changed: "Lets an inline scalar child execute without a stored static pipeline. Dataset creation and suspension remain rejected by the authoritative runtime capability boundary; editions 1\u20137 retain static-contract preflight rejection.",
17069
+ compatibilityOwner: "Plays Runtime",
17070
+ newWritesEnd: null,
17071
+ readerRemoval: null
17072
+ }
17073
+ ];
17074
+ var PLAY_AUTHORING_CONTRACT_CHANGELOG = SUPPORTED_PLAY_AUTHORING_CONTRACT_EDITIONS.map((edition, index) => ({
17075
+ edition,
17076
+ ...PLAY_AUTHORING_CONTRACT_CHANGELOG_DETAILS[index]
17077
+ }));
16883
17078
  var PLAY_SQL_LISTENER_WHERE_OPERATORS = [
16884
17079
  "eq",
16885
17080
  "neq",
@@ -23532,7 +23727,7 @@ function assertPlayWaitNotTimedOut(input2) {
23532
23727
  if (input2.waitTimeoutMs !== null && Date.now() - input2.startedAt >= input2.waitTimeoutMs) {
23533
23728
  const hasRealRunId = input2.workflowId.length > 0 && input2.workflowId !== "pending";
23534
23729
  const phaseSuffix = input2.lastPhase && input2.lastPhase.trim() ? ` (last observed phase: ${input2.lastPhase.trim()})` : "";
23535
- const tailHint = hasRealRunId ? ` Run 'deepline runs tail ${input2.workflowId} --json' to inspect it, or rerun with a larger --tail-timeout-ms.` : ` The run never reported a workflow id \u2014 the start request likely failed before reaching the scheduler. Check server logs and rerun with a larger --tail-timeout-ms.`;
23730
+ const tailHint = hasRealRunId ? ` The CLI stopped waiting; it did not cancel the run. Check its current state with 'deepline runs get ${input2.workflowId} --json', or reattach with 'deepline runs tail ${input2.workflowId} --json'. Do not start another run just to retrieve results.` : ` No run id was received, so acceptance is unknown. Check recent runs with 'deepline runs list --play <play-name> --json' before submitting again.`;
23536
23731
  throw new DeeplineError(
23537
23732
  `Timed out waiting for play ${hasRealRunId ? input2.workflowId : "<no run id>"} after ${Math.ceil(input2.waitTimeoutMs / 1e3)}s${phaseSuffix}.${tailHint}`,
23538
23733
  void 0,
@@ -25097,6 +25292,18 @@ function buildRunPackageTextLines(packaged) {
25097
25292
  const lines = [
25098
25293
  `${status === "completed" ? "\u2713" : status === "failed" ? "\u2717" : "\u2022"} ${status} ${runId}`
25099
25294
  ];
25295
+ const isRuntimeTimeout = status === "failed" && (readRecordArray(packaged.errors).some(
25296
+ (error) => error.code === "RUNTIME_LIMIT_EXCEEDED"
25297
+ ) || typeof run.error === "string" && /RUNTIME_LIMIT_EXCEEDED/.test(run.error));
25298
+ if (isRuntimeTimeout) {
25299
+ lines.push(" RUNTIME_LIMIT_EXCEEDED: the Play stopped before returning.");
25300
+ lines.push(
25301
+ " Inspect the dataset catalog below and export saved data before rerunning unfinished work."
25302
+ );
25303
+ lines.push(
25304
+ " Adjust runtime.timeout in the Play (maximum 4h), remove the override for the 30-minute default, or use fewer rows."
25305
+ );
25306
+ }
25100
25307
  const runError = typeof run.error === "string" && run.error.trim() ? run.error.trim() : null;
25101
25308
  if (runError && (status === "failed" || status === "cancelled")) {
25102
25309
  lines.push(` error: ${truncateErrorForDisplay(runError, runId)}`);
@@ -25173,14 +25380,19 @@ function buildRunPackageTextLines(packaged) {
25173
25380
  const legacyExportCommand = hasCatalogExportAction ? null : actionToCommand(next.export);
25174
25381
  const runAgainCommand = typeof next.run === "string" && next.run.trim() ? next.run.trim() : null;
25175
25382
  if (inspectCommand) lines.push(` inspect: ${inspectCommand}`);
25176
- if (fullResultCommand) lines.push(` full result: ${fullResultCommand}`);
25383
+ if (fullResultCommand)
25384
+ lines.push(
25385
+ ` ${isRuntimeTimeout ? "full run details" : "full result"}: ${fullResultCommand}`
25386
+ );
25177
25387
  if (logsCommand) lines.push(` logs: ${logsCommand}`);
25178
25388
  if (billingCommand) lines.push(` billing: ${billingCommand}`);
25179
25389
  if (legacyExportCommand) {
25180
25390
  lines.push(` export CSV: ${legacyExportCommand}`);
25181
25391
  }
25182
25392
  if (runAgainCommand) {
25183
- lines.push(" run again (completed work is reused):");
25393
+ lines.push(
25394
+ isRuntimeTimeout ? " run again after adjusting the deadline or batch (compatible completed work may be reused):" : " run again (completed work is reused):"
25395
+ );
25184
25396
  lines.push(` ${runAgainCommand}`);
25185
25397
  }
25186
25398
  return lines;
@@ -41996,8 +42208,12 @@ var DEFAULT_V1_SKILL_NAMES = [
41996
42208
  "deepline-gtm",
41997
42209
  "deepline-plays",
41998
42210
  "deepline-quickstart",
42211
+ "deepline-scoring",
41999
42212
  "find-qualified-titles",
42000
42213
  "linkedin-url-lookup",
42214
+ // Deprecated alias for `deepline-scoring`, kept installable so saved prompts
42215
+ // and scripts using `/niche-signal-discovery` keep routing to the renamed
42216
+ // skill. Move to LEGACY_SKILL_NAMES_TO_REMOVE once the window closes.
42001
42217
  "niche-signal-discovery",
42002
42218
  "portfolio-prospecting"
42003
42219
  ];
@@ -729,7 +729,7 @@ type PlaySandboxRuntimeDeclaration = {
729
729
  size?: PlaySandboxSize;
730
730
  };
731
731
 
732
- declare const SUPPORTED_PLAY_AUTHORING_CONTRACT_EDITIONS: readonly [1, 2, 3, 4, 5, 6, 7];
732
+ declare const SUPPORTED_PLAY_AUTHORING_CONTRACT_EDITIONS: readonly [1, 2, 3, 4, 5, 6, 7, 8];
733
733
  type PlayAuthoringContractEdition = (typeof SUPPORTED_PLAY_AUTHORING_CONTRACT_EDITIONS)[number];
734
734
  type PlaySqlListenerOperation = 'INSERT' | 'UPDATE' | 'DELETE';
735
735
  type PlayStandardWebhookHeaderFamily = 'standard' | 'svix';
@@ -729,7 +729,7 @@ type PlaySandboxRuntimeDeclaration = {
729
729
  size?: PlaySandboxSize;
730
730
  };
731
731
 
732
- declare const SUPPORTED_PLAY_AUTHORING_CONTRACT_EDITIONS: readonly [1, 2, 3, 4, 5, 6, 7];
732
+ declare const SUPPORTED_PLAY_AUTHORING_CONTRACT_EDITIONS: readonly [1, 2, 3, 4, 5, 6, 7, 8];
733
733
  type PlayAuthoringContractEdition = (typeof SUPPORTED_PLAY_AUTHORING_CONTRACT_EDITIONS)[number];
734
734
  type PlaySqlListenerOperation = 'INSERT' | 'UPDATE' | 'DELETE';
735
735
  type PlayStandardWebhookHeaderFamily = 'standard' | 'svix';
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-DfSnbCTW.mjs';
3
- export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-DfSnbCTW.mjs';
2
+ import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-BIqRyj5m.mjs';
3
+ export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-BIqRyj5m.mjs';
4
4
  import { MonitorFleetDefinition } from './monitor-fleet-contract.mjs';
5
5
  export { AdmittedMonitorFleetAuthoringContract, MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG, MONITOR_FLEET_AUTHORING_CONTRACT_EDITION, MONITOR_FLEET_DOCUMENTATION, MONITOR_FLEET_FRONTIER_MAX_ROWS, MONITOR_FLEET_MAX_MEMBERS, MonitorFleetAuthoringContractEdition, MonitorFleetAuthoringContractResult, MonitorFleetColumn, MonitorFleetContractIssue, MonitorFleetExpression, MonitorFleetTemplate, admitMonitorFleetAuthoringContract, defineMonitorFleet, fleetColumn, fleetKey, lintMonitorFleetInput, validateMonitorFleetDefinition } from './monitor-fleet-contract.mjs';
6
6
  export { BatchMonitorInput, MonitorInputIssue, MonitorSpec as MonitorInputSpec, lintMonitorBatchInput, lintMonitorSpecTemplate, renderMonitorSpecTemplate } from './monitor-input-contract.mjs';
@@ -178,6 +178,8 @@ type PlayRuntimeSelection = {
178
178
  namespace: string;
179
179
  /** Explicit managed-sandbox executor. Omission preserves Daytona compatibility. */
180
180
  backend?: Extract<PlayRuntimeBackendId, 'daytona' | 'modal'>;
181
+ /** Durable placement contract for the selected Preview worker lane. */
182
+ sandboxPlacementPolicy?: string;
181
183
  };
182
184
 
183
185
  /**
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-DfSnbCTW.js';
3
- export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-DfSnbCTW.js';
2
+ import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-BIqRyj5m.js';
3
+ export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-BIqRyj5m.js';
4
4
  import { MonitorFleetDefinition } from './monitor-fleet-contract.js';
5
5
  export { AdmittedMonitorFleetAuthoringContract, MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG, MONITOR_FLEET_AUTHORING_CONTRACT_EDITION, MONITOR_FLEET_DOCUMENTATION, MONITOR_FLEET_FRONTIER_MAX_ROWS, MONITOR_FLEET_MAX_MEMBERS, MonitorFleetAuthoringContractEdition, MonitorFleetAuthoringContractResult, MonitorFleetColumn, MonitorFleetContractIssue, MonitorFleetExpression, MonitorFleetTemplate, admitMonitorFleetAuthoringContract, defineMonitorFleet, fleetColumn, fleetKey, lintMonitorFleetInput, validateMonitorFleetDefinition } from './monitor-fleet-contract.js';
6
6
  export { BatchMonitorInput, MonitorInputIssue, MonitorSpec as MonitorInputSpec, lintMonitorBatchInput, lintMonitorSpecTemplate, renderMonitorSpecTemplate } from './monitor-input-contract.js';
@@ -178,6 +178,8 @@ type PlayRuntimeSelection = {
178
178
  namespace: string;
179
179
  /** Explicit managed-sandbox executor. Omission preserves Daytona compatibility. */
180
180
  backend?: Extract<PlayRuntimeBackendId, 'daytona' | 'modal'>;
181
+ /** Durable placement contract for the selected Preview worker lane. */
182
+ sandboxPlacementPolicy?: string;
181
183
  };
182
184
 
183
185
  /**