deepline 0.1.206 → 0.1.208

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 (30) hide show
  1. package/dist/bundling-sources/apps/play-runner-workers/src/entry.ts +25 -16
  2. package/dist/bundling-sources/sdk/src/http.ts +10 -1
  3. package/dist/bundling-sources/sdk/src/release.ts +2 -2
  4. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +96 -12
  5. package/dist/bundling-sources/shared_libs/play-runtime/child-execution-strategy.ts +51 -0
  6. package/dist/bundling-sources/shared_libs/play-runtime/child-run-id.ts +16 -0
  7. package/dist/bundling-sources/shared_libs/play-runtime/child-run-lifecycle.ts +70 -0
  8. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +321 -175
  9. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +13 -1
  10. package/dist/bundling-sources/shared_libs/play-runtime/governor/adaptive-admission.ts +16 -4
  11. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +161 -81
  12. package/dist/bundling-sources/shared_libs/play-runtime/governor/coordinator-rate-state-backend.ts +26 -9
  13. package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +109 -1
  14. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +1 -0
  15. package/dist/bundling-sources/shared_libs/play-runtime/receipt-completion-sink.ts +7 -0
  16. package/dist/bundling-sources/shared_libs/play-runtime/run-execution-scope.ts +256 -0
  17. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +17 -5
  18. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +103 -18
  19. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/types.ts +8 -0
  20. package/dist/bundling-sources/shared_libs/play-runtime/runtime-actions.ts +1 -1
  21. package/dist/bundling-sources/shared_libs/play-runtime/runtime-pg-driver-pg.ts +5 -0
  22. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-compute-usage.ts +74 -0
  23. package/dist/bundling-sources/shared_libs/play-runtime/test-runtime-seams.ts +5 -12
  24. package/dist/bundling-sources/shared_libs/play-runtime/worker-api-types.ts +2 -1
  25. package/dist/bundling-sources/shared_libs/runtime-env.ts +55 -0
  26. package/dist/cli/index.js +33 -7
  27. package/dist/cli/index.mjs +33 -7
  28. package/dist/index.js +8 -3
  29. package/dist/index.mjs +8 -3
  30. package/package.json +1 -1
@@ -34,7 +34,8 @@ export type ComputeBillingItem = {
34
34
  metadata?: unknown;
35
35
  };
36
36
 
37
- const DAYTONA_COMPUTE_PRICING_USD = {
37
+ /** Daytona pay-as-you-go rates, per second (https://www.daytona.io/pricing). */
38
+ export const DAYTONA_COMPUTE_PRICING_USD = {
38
39
  vcpuSecond: 0.000014,
39
40
  memoryGiBSecond: 0.0000045,
40
41
  storageGiBSecond: 0.00000003,
@@ -0,0 +1,55 @@
1
+ export type DeeplineRuntimeEnv = 'prod' | 'dev';
2
+
3
+ function normalizeEnvToken(value: string): DeeplineRuntimeEnv | null {
4
+ const token = value.trim().toLowerCase();
5
+ if (!token) return null;
6
+
7
+ if (
8
+ token === 'prod' ||
9
+ token === 'production' ||
10
+ token === 'live' ||
11
+ token.startsWith('prod-')
12
+ ) {
13
+ return 'prod';
14
+ }
15
+
16
+ if (
17
+ token === 'dev' ||
18
+ token === 'development' ||
19
+ token === 'local' ||
20
+ token === 'preview' ||
21
+ token === 'staging' ||
22
+ token === 'stage' ||
23
+ token === 'test' ||
24
+ token.startsWith('dev-')
25
+ ) {
26
+ return 'dev';
27
+ }
28
+
29
+ return null;
30
+ }
31
+
32
+ export function getRuntimeEnv(): DeeplineRuntimeEnv {
33
+ const explicit = normalizeEnvToken(process.env.DEEPLINE_ENV ?? '');
34
+ if (explicit) return explicit;
35
+
36
+ const convexDeployment = String(process.env.CONVEX_DEPLOYMENT ?? '')
37
+ .trim()
38
+ .toLowerCase();
39
+ if (convexDeployment.startsWith('prod:')) return 'prod';
40
+ if (convexDeployment.startsWith('dev:')) return 'dev';
41
+
42
+ const vercelEnv = normalizeEnvToken(process.env.VERCEL_ENV ?? '');
43
+ if (vercelEnv) return vercelEnv;
44
+
45
+ return process.env.NODE_ENV === 'production' ? 'prod' : 'dev';
46
+ }
47
+
48
+ export function getRuntimeEnvInfo() {
49
+ return {
50
+ env: getRuntimeEnv(),
51
+ deepline_env: process.env.DEEPLINE_ENV ?? null,
52
+ convex_deployment: process.env.CONVEX_DEPLOYMENT ?? null,
53
+ node_env: process.env.NODE_ENV ?? null,
54
+ };
55
+ }
package/dist/cli/index.js CHANGED
@@ -623,10 +623,10 @@ var SDK_RELEASE = {
623
623
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
624
624
  // fields shipped in 0.1.153.
625
625
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
626
- version: "0.1.206",
626
+ version: "0.1.208",
627
627
  apiContract: "2026-06-dataset-handle-results-hard-cutover",
628
628
  supportPolicy: {
629
- latest: "0.1.206",
629
+ latest: "0.1.208",
630
630
  minimumSupported: "0.1.53",
631
631
  deprecatedBelow: "0.1.53",
632
632
  commandMinimumSupported: [
@@ -782,6 +782,7 @@ var COORDINATOR_INTERNAL_TOKEN_HEADER = "x-deepline-internal-token";
782
782
  var COORDINATOR_URL_OVERRIDE_HEADER = "x-deepline-coordinator-url";
783
783
  var WORKER_CALLBACK_URL_OVERRIDE_HEADER = "x-deepline-worker-callback-url";
784
784
  var RUNTIME_SCHEDULER_SCHEMA_OVERRIDE_HEADER = "x-deepline-runtime-scheduler-schema";
785
+ var ABSURD_RELEASE_OVERRIDE_HEADER = "x-deepline-absurd-release";
785
786
  var SYNTHETIC_RUN_HEADER = "x-deepline-synthetic-run";
786
787
 
787
788
  // ../shared_libs/play-runtime/test-runtime-seams.ts
@@ -903,6 +904,7 @@ var HttpClient = class {
903
904
  }
904
905
  const coordinatorUrl = typeof process !== "undefined" ? process.env?.DEEPLINE_COORDINATOR_URL : void 0;
905
906
  const coordinatorInternalToken = typeof process !== "undefined" ? process.env?.DEEPLINE_INTERNAL_TOKEN : void 0;
907
+ const absurdReleaseOverride = typeof process !== "undefined" ? process.env?.DEEPLINE_ABSURD_RELEASE : void 0;
906
908
  if (coordinatorUrl?.trim()) {
907
909
  headers[COORDINATOR_URL_OVERRIDE_HEADER] = coordinatorUrl.trim();
908
910
  }
@@ -922,7 +924,10 @@ var HttpClient = class {
922
924
  if (runtimeTestFault?.trim()) {
923
925
  headers[PLAY_RUNTIME_TEST_FAULT_HEADER] = runtimeTestFault.trim();
924
926
  }
925
- if (coordinatorInternalToken?.trim() && (coordinatorUrl?.trim() || workerCallbackUrl?.trim() || runtimeTestFault?.trim())) {
927
+ if (absurdReleaseOverride?.trim() && coordinatorInternalToken?.trim()) {
928
+ headers[ABSURD_RELEASE_OVERRIDE_HEADER] = absurdReleaseOverride.trim();
929
+ }
930
+ if (coordinatorInternalToken?.trim() && (coordinatorUrl?.trim() || workerCallbackUrl?.trim() || runtimeTestFault?.trim() || absurdReleaseOverride?.trim())) {
926
931
  headers[COORDINATOR_INTERNAL_TOKEN_HEADER] = coordinatorInternalToken.trim();
927
932
  }
928
933
  return headers;
@@ -11032,7 +11037,9 @@ async function isMissingRunPlayReferenceError(input2) {
11032
11037
  return false;
11033
11038
  }
11034
11039
  try {
11035
- await input2.client.getPlay(parseReferencedPlayTarget2(input2.playName).playName);
11040
+ await input2.client.getPlay(
11041
+ parseReferencedPlayTarget2(input2.playName).playName
11042
+ );
11036
11043
  return false;
11037
11044
  } catch (lookupError) {
11038
11045
  return isPlayNotFoundError(lookupError);
@@ -12492,17 +12499,33 @@ async function startAndWaitForPlayCompletionByStreamOnce(input2) {
12492
12499
  }
12493
12500
  const finalStatus = getFinalStatusFromLiveEvent(event);
12494
12501
  if (finalStatus) {
12502
+ lastKnownWorkflowId ||= finalStatus.runId ?? "";
12503
+ const canonicalTerminal = input2.request.profile === "absurd" ? await fetchKnownTerminalStatus() : { ...finalStatus, dashboardUrl };
12504
+ if (!canonicalTerminal) {
12505
+ recordCliTrace({
12506
+ phase: "cli.play_start_stream_stale_terminal_ignored",
12507
+ ms: Date.now() - startedAt,
12508
+ ok: true,
12509
+ playName: input2.playName,
12510
+ workflowId: lastKnownWorkflowId || null,
12511
+ eventCount,
12512
+ firstRunIdMs,
12513
+ lastPhase,
12514
+ streamedStatus: finalStatus.status
12515
+ });
12516
+ continue;
12517
+ }
12495
12518
  recordCliTrace({
12496
12519
  phase: "cli.play_start_stream_terminal",
12497
12520
  ms: Date.now() - startedAt,
12498
12521
  ok: true,
12499
12522
  playName: input2.playName,
12500
- workflowId: finalStatus.runId || lastKnownWorkflowId || null,
12523
+ workflowId: canonicalTerminal.runId || lastKnownWorkflowId || null,
12501
12524
  eventCount,
12502
12525
  firstRunIdMs,
12503
12526
  lastPhase
12504
12527
  });
12505
- return { ...finalStatus, dashboardUrl };
12528
+ return canonicalTerminal;
12506
12529
  }
12507
12530
  }
12508
12531
  } catch (error) {
@@ -13789,7 +13812,10 @@ async function exportPlayStatusRows(client2, status, outPath, options = {}) {
13789
13812
  availableRows,
13790
13813
  datasetPath: options.datasetPath
13791
13814
  });
13792
- return { path: writeCanonicalRowsCsv(guarded2, outPath), rowsInfo: guarded2 };
13815
+ return {
13816
+ path: writeCanonicalRowsCsv(guarded2, outPath),
13817
+ rowsInfo: guarded2
13818
+ };
13793
13819
  }
13794
13820
  if (rowsInfo.complete) {
13795
13821
  const guarded2 = assertDatasetHasExportableRows({
@@ -608,10 +608,10 @@ var SDK_RELEASE = {
608
608
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
609
609
  // fields shipped in 0.1.153.
610
610
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
611
- version: "0.1.206",
611
+ version: "0.1.208",
612
612
  apiContract: "2026-06-dataset-handle-results-hard-cutover",
613
613
  supportPolicy: {
614
- latest: "0.1.206",
614
+ latest: "0.1.208",
615
615
  minimumSupported: "0.1.53",
616
616
  deprecatedBelow: "0.1.53",
617
617
  commandMinimumSupported: [
@@ -767,6 +767,7 @@ var COORDINATOR_INTERNAL_TOKEN_HEADER = "x-deepline-internal-token";
767
767
  var COORDINATOR_URL_OVERRIDE_HEADER = "x-deepline-coordinator-url";
768
768
  var WORKER_CALLBACK_URL_OVERRIDE_HEADER = "x-deepline-worker-callback-url";
769
769
  var RUNTIME_SCHEDULER_SCHEMA_OVERRIDE_HEADER = "x-deepline-runtime-scheduler-schema";
770
+ var ABSURD_RELEASE_OVERRIDE_HEADER = "x-deepline-absurd-release";
770
771
  var SYNTHETIC_RUN_HEADER = "x-deepline-synthetic-run";
771
772
 
772
773
  // ../shared_libs/play-runtime/test-runtime-seams.ts
@@ -888,6 +889,7 @@ var HttpClient = class {
888
889
  }
889
890
  const coordinatorUrl = typeof process !== "undefined" ? process.env?.DEEPLINE_COORDINATOR_URL : void 0;
890
891
  const coordinatorInternalToken = typeof process !== "undefined" ? process.env?.DEEPLINE_INTERNAL_TOKEN : void 0;
892
+ const absurdReleaseOverride = typeof process !== "undefined" ? process.env?.DEEPLINE_ABSURD_RELEASE : void 0;
891
893
  if (coordinatorUrl?.trim()) {
892
894
  headers[COORDINATOR_URL_OVERRIDE_HEADER] = coordinatorUrl.trim();
893
895
  }
@@ -907,7 +909,10 @@ var HttpClient = class {
907
909
  if (runtimeTestFault?.trim()) {
908
910
  headers[PLAY_RUNTIME_TEST_FAULT_HEADER] = runtimeTestFault.trim();
909
911
  }
910
- if (coordinatorInternalToken?.trim() && (coordinatorUrl?.trim() || workerCallbackUrl?.trim() || runtimeTestFault?.trim())) {
912
+ if (absurdReleaseOverride?.trim() && coordinatorInternalToken?.trim()) {
913
+ headers[ABSURD_RELEASE_OVERRIDE_HEADER] = absurdReleaseOverride.trim();
914
+ }
915
+ if (coordinatorInternalToken?.trim() && (coordinatorUrl?.trim() || workerCallbackUrl?.trim() || runtimeTestFault?.trim() || absurdReleaseOverride?.trim())) {
911
916
  headers[COORDINATOR_INTERNAL_TOKEN_HEADER] = coordinatorInternalToken.trim();
912
917
  }
913
918
  return headers;
@@ -11061,7 +11066,9 @@ async function isMissingRunPlayReferenceError(input2) {
11061
11066
  return false;
11062
11067
  }
11063
11068
  try {
11064
- await input2.client.getPlay(parseReferencedPlayTarget2(input2.playName).playName);
11069
+ await input2.client.getPlay(
11070
+ parseReferencedPlayTarget2(input2.playName).playName
11071
+ );
11065
11072
  return false;
11066
11073
  } catch (lookupError) {
11067
11074
  return isPlayNotFoundError(lookupError);
@@ -12521,17 +12528,33 @@ async function startAndWaitForPlayCompletionByStreamOnce(input2) {
12521
12528
  }
12522
12529
  const finalStatus = getFinalStatusFromLiveEvent(event);
12523
12530
  if (finalStatus) {
12531
+ lastKnownWorkflowId ||= finalStatus.runId ?? "";
12532
+ const canonicalTerminal = input2.request.profile === "absurd" ? await fetchKnownTerminalStatus() : { ...finalStatus, dashboardUrl };
12533
+ if (!canonicalTerminal) {
12534
+ recordCliTrace({
12535
+ phase: "cli.play_start_stream_stale_terminal_ignored",
12536
+ ms: Date.now() - startedAt,
12537
+ ok: true,
12538
+ playName: input2.playName,
12539
+ workflowId: lastKnownWorkflowId || null,
12540
+ eventCount,
12541
+ firstRunIdMs,
12542
+ lastPhase,
12543
+ streamedStatus: finalStatus.status
12544
+ });
12545
+ continue;
12546
+ }
12524
12547
  recordCliTrace({
12525
12548
  phase: "cli.play_start_stream_terminal",
12526
12549
  ms: Date.now() - startedAt,
12527
12550
  ok: true,
12528
12551
  playName: input2.playName,
12529
- workflowId: finalStatus.runId || lastKnownWorkflowId || null,
12552
+ workflowId: canonicalTerminal.runId || lastKnownWorkflowId || null,
12530
12553
  eventCount,
12531
12554
  firstRunIdMs,
12532
12555
  lastPhase
12533
12556
  });
12534
- return { ...finalStatus, dashboardUrl };
12557
+ return canonicalTerminal;
12535
12558
  }
12536
12559
  }
12537
12560
  } catch (error) {
@@ -13818,7 +13841,10 @@ async function exportPlayStatusRows(client2, status, outPath, options = {}) {
13818
13841
  availableRows,
13819
13842
  datasetPath: options.datasetPath
13820
13843
  });
13821
- return { path: writeCanonicalRowsCsv(guarded2, outPath), rowsInfo: guarded2 };
13844
+ return {
13845
+ path: writeCanonicalRowsCsv(guarded2, outPath),
13846
+ rowsInfo: guarded2
13847
+ };
13822
13848
  }
13823
13849
  if (rowsInfo.complete) {
13824
13850
  const guarded2 = assertDatasetHasExportableRows({
package/dist/index.js CHANGED
@@ -422,10 +422,10 @@ var SDK_RELEASE = {
422
422
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
423
423
  // fields shipped in 0.1.153.
424
424
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
425
- version: "0.1.206",
425
+ version: "0.1.208",
426
426
  apiContract: "2026-06-dataset-handle-results-hard-cutover",
427
427
  supportPolicy: {
428
- latest: "0.1.206",
428
+ latest: "0.1.208",
429
429
  minimumSupported: "0.1.53",
430
430
  deprecatedBelow: "0.1.53",
431
431
  commandMinimumSupported: [
@@ -581,6 +581,7 @@ var COORDINATOR_INTERNAL_TOKEN_HEADER = "x-deepline-internal-token";
581
581
  var COORDINATOR_URL_OVERRIDE_HEADER = "x-deepline-coordinator-url";
582
582
  var WORKER_CALLBACK_URL_OVERRIDE_HEADER = "x-deepline-worker-callback-url";
583
583
  var RUNTIME_SCHEDULER_SCHEMA_OVERRIDE_HEADER = "x-deepline-runtime-scheduler-schema";
584
+ var ABSURD_RELEASE_OVERRIDE_HEADER = "x-deepline-absurd-release";
584
585
  var SYNTHETIC_RUN_HEADER = "x-deepline-synthetic-run";
585
586
 
586
587
  // ../shared_libs/play-runtime/test-runtime-seams.ts
@@ -702,6 +703,7 @@ var HttpClient = class {
702
703
  }
703
704
  const coordinatorUrl = typeof process !== "undefined" ? process.env?.DEEPLINE_COORDINATOR_URL : void 0;
704
705
  const coordinatorInternalToken = typeof process !== "undefined" ? process.env?.DEEPLINE_INTERNAL_TOKEN : void 0;
706
+ const absurdReleaseOverride = typeof process !== "undefined" ? process.env?.DEEPLINE_ABSURD_RELEASE : void 0;
705
707
  if (coordinatorUrl?.trim()) {
706
708
  headers[COORDINATOR_URL_OVERRIDE_HEADER] = coordinatorUrl.trim();
707
709
  }
@@ -721,7 +723,10 @@ var HttpClient = class {
721
723
  if (runtimeTestFault?.trim()) {
722
724
  headers[PLAY_RUNTIME_TEST_FAULT_HEADER] = runtimeTestFault.trim();
723
725
  }
724
- if (coordinatorInternalToken?.trim() && (coordinatorUrl?.trim() || workerCallbackUrl?.trim() || runtimeTestFault?.trim())) {
726
+ if (absurdReleaseOverride?.trim() && coordinatorInternalToken?.trim()) {
727
+ headers[ABSURD_RELEASE_OVERRIDE_HEADER] = absurdReleaseOverride.trim();
728
+ }
729
+ if (coordinatorInternalToken?.trim() && (coordinatorUrl?.trim() || workerCallbackUrl?.trim() || runtimeTestFault?.trim() || absurdReleaseOverride?.trim())) {
725
730
  headers[COORDINATOR_INTERNAL_TOKEN_HEADER] = coordinatorInternalToken.trim();
726
731
  }
727
732
  return headers;
package/dist/index.mjs CHANGED
@@ -352,10 +352,10 @@ var SDK_RELEASE = {
352
352
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
353
353
  // fields shipped in 0.1.153.
354
354
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
355
- version: "0.1.206",
355
+ version: "0.1.208",
356
356
  apiContract: "2026-06-dataset-handle-results-hard-cutover",
357
357
  supportPolicy: {
358
- latest: "0.1.206",
358
+ latest: "0.1.208",
359
359
  minimumSupported: "0.1.53",
360
360
  deprecatedBelow: "0.1.53",
361
361
  commandMinimumSupported: [
@@ -511,6 +511,7 @@ var COORDINATOR_INTERNAL_TOKEN_HEADER = "x-deepline-internal-token";
511
511
  var COORDINATOR_URL_OVERRIDE_HEADER = "x-deepline-coordinator-url";
512
512
  var WORKER_CALLBACK_URL_OVERRIDE_HEADER = "x-deepline-worker-callback-url";
513
513
  var RUNTIME_SCHEDULER_SCHEMA_OVERRIDE_HEADER = "x-deepline-runtime-scheduler-schema";
514
+ var ABSURD_RELEASE_OVERRIDE_HEADER = "x-deepline-absurd-release";
514
515
  var SYNTHETIC_RUN_HEADER = "x-deepline-synthetic-run";
515
516
 
516
517
  // ../shared_libs/play-runtime/test-runtime-seams.ts
@@ -632,6 +633,7 @@ var HttpClient = class {
632
633
  }
633
634
  const coordinatorUrl = typeof process !== "undefined" ? process.env?.DEEPLINE_COORDINATOR_URL : void 0;
634
635
  const coordinatorInternalToken = typeof process !== "undefined" ? process.env?.DEEPLINE_INTERNAL_TOKEN : void 0;
636
+ const absurdReleaseOverride = typeof process !== "undefined" ? process.env?.DEEPLINE_ABSURD_RELEASE : void 0;
635
637
  if (coordinatorUrl?.trim()) {
636
638
  headers[COORDINATOR_URL_OVERRIDE_HEADER] = coordinatorUrl.trim();
637
639
  }
@@ -651,7 +653,10 @@ var HttpClient = class {
651
653
  if (runtimeTestFault?.trim()) {
652
654
  headers[PLAY_RUNTIME_TEST_FAULT_HEADER] = runtimeTestFault.trim();
653
655
  }
654
- if (coordinatorInternalToken?.trim() && (coordinatorUrl?.trim() || workerCallbackUrl?.trim() || runtimeTestFault?.trim())) {
656
+ if (absurdReleaseOverride?.trim() && coordinatorInternalToken?.trim()) {
657
+ headers[ABSURD_RELEASE_OVERRIDE_HEADER] = absurdReleaseOverride.trim();
658
+ }
659
+ if (coordinatorInternalToken?.trim() && (coordinatorUrl?.trim() || workerCallbackUrl?.trim() || runtimeTestFault?.trim() || absurdReleaseOverride?.trim())) {
655
660
  headers[COORDINATOR_INTERNAL_TOKEN_HEADER] = coordinatorInternalToken.trim();
656
661
  }
657
662
  return headers;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.1.206",
3
+ "version": "0.1.208",
4
4
  "description": "Deepline SDK + CLI — B2B data enrichment powered by durable cloud execution",
5
5
  "license": "MIT",
6
6
  "repository": {