deepline 0.3.247 → 0.3.249

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 (67) hide show
  1. package/dist/bundling-sources/sdk/src/client.ts +177 -13
  2. package/dist/bundling-sources/sdk/src/index.ts +8 -0
  3. package/dist/bundling-sources/sdk/src/plays/input-example.ts +40 -0
  4. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  5. package/dist/bundling-sources/sdk/src/runs/overview.ts +457 -0
  6. package/dist/bundling-sources/sdk/src/runs/receipts.ts +23 -0
  7. package/dist/bundling-sources/sdk/src/tool-calls.ts +21 -1
  8. package/dist/bundling-sources/sdk/src/types.ts +16 -1
  9. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +19 -1
  10. package/dist/bundling-sources/shared_libs/play-data-plane/column-names.ts +17 -3
  11. package/dist/bundling-sources/shared_libs/play-data-plane/sheet-contract.ts +40 -8
  12. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +26 -1
  13. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +144 -14
  14. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +2 -1
  15. package/dist/bundling-sources/shared_libs/play-runtime/daytona-runtime-config.ts +6 -3
  16. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +26 -21
  17. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +23 -21
  18. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-machines.ts +17 -0
  19. package/dist/bundling-sources/shared_libs/play-runtime/log-context.ts +105 -0
  20. package/dist/bundling-sources/shared_libs/play-runtime/output-size-limits.ts +8 -1
  21. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/job.ts +1 -0
  22. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/ports.ts +1 -0
  23. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +9 -0
  24. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger-event-transport.ts +40 -4
  25. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger.ts +50 -5
  26. package/dist/bundling-sources/shared_libs/play-runtime/run-lifecycle-policy.ts +3 -1
  27. package/dist/bundling-sources/shared_libs/play-runtime/run-log-buffer.ts +28 -1
  28. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +14 -1
  29. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-terminal-push.ts +56 -16
  30. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-control-transport.ts +184 -0
  31. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-launch-transport.ts +327 -0
  32. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +87 -30
  33. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-session-execution.ts +24 -13
  34. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-start-admission.ts +23 -6
  35. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +76 -33
  36. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +90 -35
  37. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-pool.ts +16 -0
  38. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +112 -50
  39. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +447 -77
  40. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +22 -4
  41. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +105 -121
  42. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts +1648 -0
  43. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-queue-health.ts +16 -19
  44. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-value-storage.ts +14 -6
  45. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +16 -0
  46. package/dist/bundling-sources/shared_libs/play-runtime/tool-http-errors.ts +40 -0
  47. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +5 -2
  48. package/dist/bundling-sources/shared_libs/plays/dataset-summary.ts +11 -7
  49. package/dist/bundling-sources/shared_libs/plays/static-pipeline-storage-codec.ts +5 -2
  50. package/dist/bundling-sources/shared_libs/plays/static-pipeline.ts +11 -2
  51. package/dist/cli/index.js +3504 -2368
  52. package/dist/cli/index.mjs +3188 -2052
  53. package/dist/{compiler-manifest-n8ZtPv2h.d.mts → compiler-manifest-DavmLa8y.d.mts} +1 -0
  54. package/dist/{compiler-manifest-n8ZtPv2h.d.ts → compiler-manifest-DavmLa8y.d.ts} +1 -0
  55. package/dist/index.d.mts +97 -5
  56. package/dist/index.d.ts +97 -5
  57. package/dist/index.js +135 -15
  58. package/dist/index.mjs +135 -15
  59. package/dist/install-integrity.json +9 -2
  60. package/dist/plays/bundle-play-file.d.mts +2 -2
  61. package/dist/plays/bundle-play-file.d.ts +2 -2
  62. package/dist/plays/bundle-play-file.mjs +1 -1
  63. package/dist/release.d.mts +1 -1
  64. package/dist/release.d.ts +1 -1
  65. package/dist/release.js +1 -1
  66. package/dist/release.mjs +1 -1
  67. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -122,6 +122,31 @@ async function* iterateCursorPages(fetchPage) {
122
122
  }
123
123
  }
124
124
 
125
+ // src/plays/input-example.ts
126
+ function playInputExampleArgs(schema) {
127
+ if (!schema) return " --input '@<input.json>'";
128
+ if (schema.$ref || schema.allOf) return " --input '@<input.json>'";
129
+ const csv = schema.csvInput;
130
+ const csvField = typeof csv?.inputField === "string" ? csv.inputField : null;
131
+ const required = Array.isArray(schema.required) ? schema.required : [];
132
+ const csvOnlyRequired = required.every((key) => key === csvField);
133
+ const alternatives = schema.oneOf ?? schema.anyOf;
134
+ const hasCsvAlternative = Array.isArray(alternatives) && alternatives.some((branch) => {
135
+ if (!branch || typeof branch !== "object") return false;
136
+ const keys = branch.required;
137
+ return Array.isArray(keys) && keys.includes(csvField) && keys.every((key) => key === csvField);
138
+ });
139
+ if (csvField && csvOnlyRequired && (!alternatives || hasCsvAlternative)) {
140
+ if (csvField === "csv") return " --csv '<contacts.csv>'";
141
+ const value = JSON.stringify({ [csvField]: "<contacts.csv>" });
142
+ return ` --input '${value.replace(/'/g, "'\\''")}'`;
143
+ }
144
+ if (Array.isArray(schema.required) && !required.length && !csv && !alternatives) {
145
+ return "";
146
+ }
147
+ return " --input '@<input.json>'";
148
+ }
149
+
125
150
  // src/config.ts
126
151
  var import_node_fs = require("fs");
127
152
  var import_node_os = require("os");
@@ -979,8 +1004,12 @@ function executionRecoveryError(input) {
979
1004
  var DEEPLINEAGENT_EXECUTE_TIMEOUT_MS = 15 * 60 * 1e3;
980
1005
  var APIFY_SYNC_DEFAULT_TIMEOUT_MS = 3e5;
981
1006
  var APIFY_SYNC_RESPONSE_GRACE_MS = 9e4;
982
- function resolveToolExecuteTimeoutMs(toolId, input) {
1007
+ var JSEARCH_SEARCH_CLIENT_TIMEOUT_MS = 2 * 12e4 + 250 + 15e3;
1008
+ function resolveToolExecuteTimeoutMs(toolId, input, configuredRequestTimeoutMs) {
983
1009
  const normalized = toolId.trim().toLowerCase();
1010
+ if (normalized === "openwebninja_jsearch_search") {
1011
+ return configuredRequestTimeoutMs ?? JSEARCH_SEARCH_CLIENT_TIMEOUT_MS;
1012
+ }
984
1013
  const lookupTimeoutMs = resolveLookupClientTimeoutMs(normalized);
985
1014
  if (lookupTimeoutMs !== void 0) return lookupTimeoutMs;
986
1015
  if (normalized === "apify_run_actor_sync") {
@@ -1049,9 +1078,10 @@ function materializeToolExecutionResponse(response) {
1049
1078
  };
1050
1079
  }
1051
1080
  var ToolCalls = class {
1052
- constructor(http, defaultRequestTimeoutMs) {
1081
+ constructor(http, defaultRequestTimeoutMs, configuredRequestTimeoutMs) {
1053
1082
  this.http = http;
1054
1083
  this.defaultRequestTimeoutMs = defaultRequestTimeoutMs;
1084
+ this.configuredRequestTimeoutMs = configuredRequestTimeoutMs;
1055
1085
  }
1056
1086
  async call(toolId, input, options) {
1057
1087
  const inputSnapshot = JSON.parse(JSON.stringify(input));
@@ -1068,7 +1098,11 @@ var ToolCalls = class {
1068
1098
  }
1069
1099
  await options?.onExecution?.({ idempotencyKey });
1070
1100
  }
1071
- const timeoutMs = options?.timeout ?? resolveToolExecuteTimeoutMs(toolId, inputSnapshot);
1101
+ const timeoutMs = options?.timeout ?? resolveToolExecuteTimeoutMs(
1102
+ toolId,
1103
+ inputSnapshot,
1104
+ this.configuredRequestTimeoutMs
1105
+ );
1072
1106
  if (idempotencyKey !== void 0) {
1073
1107
  await this.lookupExecutionByKey(idempotencyKey, timeoutMs);
1074
1108
  }
@@ -1286,7 +1320,7 @@ var SDK_RELEASE = {
1286
1320
  // getters keep their established compatibility behavior.
1287
1321
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
1288
1322
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
1289
- version: "0.3.247",
1323
+ version: "0.3.249",
1290
1324
  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.",
1291
1325
  packageCapabilities: {
1292
1326
  updatePreferences: 1
@@ -2675,8 +2709,12 @@ function resolveTimingWindow(input) {
2675
2709
  // ../play-runtime/run-failure.ts
2676
2710
  var PUBLIC_FAILURE_TEXT_BYTE_LIMIT = 64 * 1024;
2677
2711
 
2712
+ // ../play-runtime/log-context.ts
2713
+ var utf8 = new TextEncoder();
2714
+
2678
2715
  // ../play-runtime/run-log-buffer.ts
2679
2716
  var RUNNER_LOG_MAX_BYTES = 5 * 1024 * 1024;
2717
+ var RUNNER_LOG_CONTEXT_MAX_BYTES = 128 * 1024;
2680
2718
  var TERMINAL_RESERVE_BYTES = 64 * 1024;
2681
2719
  var encoder = new TextEncoder();
2682
2720
 
@@ -3606,6 +3644,21 @@ function runtimeSelectionHeaders(runtime) {
3606
3644
  ...receivers ? { [RETAINED_PIPELINE_RECEIVERS_HEADER]: receivers } : {}
3607
3645
  };
3608
3646
  }
3647
+ function isolatedCiRuntimeEventReadHeaders() {
3648
+ const schema = process.env.DEEPLINE_RUNTIME_SCHEDULER_SCHEMA?.trim();
3649
+ if (process.env.DEEPLINE_SYNTHETIC_RUN?.trim() !== "1" || !schema || !/^fly_absurd_pr_\d+_\d+(?:_\d+)?$/.test(schema)) {
3650
+ return void 0;
3651
+ }
3652
+ const token = process.env.DEEPLINE_INTERNAL_TOKEN?.trim();
3653
+ if (!token) {
3654
+ throw new DeeplineError(
3655
+ "DEEPLINE_INTERNAL_TOKEN is required for isolated CI runtime event reads.",
3656
+ void 0,
3657
+ "RUNTIME_EVENT_INTERNAL_TOKEN_REQUIRED"
3658
+ );
3659
+ }
3660
+ return { [COORDINATOR_INTERNAL_TOKEN_HEADER]: token };
3661
+ }
3609
3662
  function normalizeTestPolicyOverrides(value, source) {
3610
3663
  if (value && typeof value === "object" && !Array.isArray(value)) {
3611
3664
  return value;
@@ -3978,8 +4031,13 @@ var DeeplineClient = class _DeeplineClient {
3978
4031
  constructor(options) {
3979
4032
  this.config = resolveConfig(options);
3980
4033
  this.http = new HttpClient(this.config);
3981
- this.toolCalls = new ToolCalls(this.http, this.config.timeout);
4034
+ this.toolCalls = new ToolCalls(
4035
+ this.http,
4036
+ this.config.timeout,
4037
+ options?.timeout
4038
+ );
3982
4039
  this.runs = {
4040
+ getReceipts: (runId, options2) => this.getRunReceipts(runId, options2),
3983
4041
  get: (runId, options2) => this.getRunStatus(runId, options2),
3984
4042
  status: (runId) => this.getRunLifecycleStatus(runId),
3985
4043
  list: (options2) => this.listRuns(options2),
@@ -3987,6 +4045,7 @@ var DeeplineClient = class _DeeplineClient {
3987
4045
  watch: (runId, options2) => this.watchRunToTerminal(runId, options2),
3988
4046
  tail: (runId, options2) => this.tailRun(runId, options2),
3989
4047
  logs: (runId, options2) => this.getRunLogs(runId, options2),
4048
+ searchEvents: (options2) => this.searchRunEvents(options2),
3990
4049
  input: (runId) => this.getRunInput(runId),
3991
4050
  rerun: (runId, options2) => this.rerun(runId, options2),
3992
4051
  exportDatasetRows: (input) => this.getPlaySheetRows(input),
@@ -4111,13 +4170,9 @@ var DeeplineClient = class _DeeplineClient {
4111
4170
  const value = schema[key];
4112
4171
  return isRecord4(value) ? value : null;
4113
4172
  }
4114
- playRunCommand(play, options) {
4173
+ playRunCommand(play) {
4115
4174
  const target = play.reference || play.name;
4116
- if (options?.csvInput) {
4117
- const inputField = typeof options.csvInput.inputField === "string" && options.csvInput.inputField.trim() ? options.csvInput.inputField.trim() : "csv";
4118
- return `deepline plays run ${target} --input '${JSON.stringify({ [inputField]: "leads.csv" })}' --watch`;
4119
- }
4120
- return `deepline plays run ${target} --input '{...}' --watch`;
4175
+ return `deepline plays run ${target}${playInputExampleArgs(play.inputSchema)} --watch`;
4121
4176
  }
4122
4177
  starterPlayPath(play) {
4123
4178
  const target = play.reference || play.name;
@@ -4144,7 +4199,7 @@ var DeeplineClient = class _DeeplineClient {
4144
4199
  "rowOutputSchema"
4145
4200
  );
4146
4201
  const description = play.description?.trim() || play.currentRevision?.description?.trim() || play.liveRevision?.description?.trim() || null;
4147
- const runCommand = this.playRunCommand(play, { csvInput });
4202
+ const runCommand = this.playRunCommand(play);
4148
4203
  const cloneEditStarter = this.playCloneEditStarter(play);
4149
4204
  return {
4150
4205
  name: play.name,
@@ -5357,6 +5412,33 @@ var DeeplineClient = class _DeeplineClient {
5357
5412
  );
5358
5413
  return { ...response, runs: response.runs ?? [] };
5359
5414
  }
5415
+ /** Read batches rather than silently truncating a long key list. */
5416
+ async getRunReceipts(runId, options) {
5417
+ if (!options.keys.length || options.keys.some(
5418
+ (key) => typeof key !== "string" || !key.trim() || key.length > 2048 || /[\r\n\0]/.test(key)
5419
+ )) {
5420
+ throw Object.assign(
5421
+ new Error(
5422
+ "Supply nonempty receipt keys, at most 2048 characters each."
5423
+ ),
5424
+ { exitCode: 2 }
5425
+ );
5426
+ }
5427
+ const receipts = [];
5428
+ for (let offset = 0; offset < options.keys.length; offset += 100) {
5429
+ const keys = options.keys.slice(offset, offset + 100);
5430
+ const result = await this.http.post(`/api/v2/runs/${encodeURIComponent(runId)}/receipts/results`, { keys });
5431
+ if (result.runId !== runId || result.receipts.length !== keys.length || result.receipts.some(
5432
+ (receipt, index) => receipt.receiptKey !== keys[index]
5433
+ )) {
5434
+ throw new Error(
5435
+ "Receipt response does not match the requested run and keys."
5436
+ );
5437
+ }
5438
+ receipts.push(...result.receipts);
5439
+ }
5440
+ return { runId, receipts };
5441
+ }
5360
5442
  /** Get the exact original input retained for a run. This is intentionally separate from status. */
5361
5443
  async getRunInput(runId) {
5362
5444
  return this.http.get(`/api/v2/runs/${encodeURIComponent(runId)}/input`);
@@ -5406,7 +5488,8 @@ var DeeplineClient = class _DeeplineClient {
5406
5488
  const requestedLimit = typeof options.limit === "number" && Number.isFinite(options.limit) && options.limit > 0 ? Math.trunc(options.limit) : RUNS_FAILED_LOG_LIMIT;
5407
5489
  const failedLimit = Math.min(RUNS_FAILED_LOG_LIMIT, requestedLimit);
5408
5490
  const page = await this.http.get(
5409
- `/api/v2/runs/${encodeURIComponent(runId)}/logs?view=failed&limit=${failedLimit}`
5491
+ `/api/v2/runs/${encodeURIComponent(runId)}/logs?view=failed&limit=${failedLimit}`,
5492
+ { retryApiErrors: true }
5410
5493
  );
5411
5494
  return {
5412
5495
  runId: page.runId,
@@ -5428,7 +5511,8 @@ var DeeplineClient = class _DeeplineClient {
5428
5511
  }
5429
5512
  const limit = options?.all ? Number.MAX_SAFE_INTEGER : typeof options?.limit === "number" && Number.isFinite(options.limit) && options.limit > 0 ? Math.trunc(options.limit) : 200;
5430
5513
  const fetchPage = (afterSeq2, pageLimit) => this.http.get(
5431
- `/api/v2/runs/${encodeURIComponent(runId)}/logs?afterSeq=${afterSeq2}&limit=${pageLimit}`
5514
+ `/api/v2/runs/${encodeURIComponent(runId)}/logs?afterSeq=${afterSeq2}&limit=${pageLimit}`,
5515
+ { retryApiErrors: true }
5432
5516
  );
5433
5517
  const probe = await fetchPage(0, 1);
5434
5518
  const lastStoredSeq = probe.lastStoredSeq;
@@ -5463,6 +5547,42 @@ var DeeplineClient = class _DeeplineClient {
5463
5547
  ...probe.logsTruncated ? { logsTruncated: true } : {}
5464
5548
  };
5465
5549
  }
5550
+ /** Search bounded, structured runtime history without requiring a run id. */
5551
+ async searchRunEvents(options = {}) {
5552
+ const now = Date.now();
5553
+ const params = new URLSearchParams({
5554
+ since: options.since ?? new Date(now - 60 * 60 * 1e3).toISOString(),
5555
+ until: options.until ?? new Date(now).toISOString()
5556
+ });
5557
+ if (options.runId) params.set("runId", options.runId);
5558
+ if (options.playName) params.set("playName", options.playName);
5559
+ if (options.kind) params.set("kind", options.kind);
5560
+ if (options.jsonpath) params.set("jsonpath", options.jsonpath);
5561
+ if (options.includePayloads) params.set("payloads", "true");
5562
+ if (options.limit !== void 0) params.set("limit", String(options.limit));
5563
+ if (options.cursor) params.set("cursor", options.cursor);
5564
+ let headers;
5565
+ if (options.runtime !== void 0) {
5566
+ const runtime = normalizePlayRuntimeSelection(options.runtime);
5567
+ if (!runtime) {
5568
+ throw new DeeplineError(
5569
+ "runs.searchEvents runtime must be a valid Preview selection.",
5570
+ void 0,
5571
+ "INVALID_RUNTIME_SELECTION"
5572
+ );
5573
+ }
5574
+ params.set("runtime", "preview");
5575
+ params.set("namespace", runtime.namespace);
5576
+ if (runtime.backend) params.set("backend", runtime.backend);
5577
+ headers = runtimeSelectionHeaders(runtime);
5578
+ } else {
5579
+ headers = isolatedCiRuntimeEventReadHeaders();
5580
+ }
5581
+ return this.http.get(
5582
+ `/api/v2/runs/events?${params.toString()}`,
5583
+ { headers, retryApiErrors: true }
5584
+ );
5585
+ }
5466
5586
  /**
5467
5587
  * Export persisted runtime-sheet rows for a play dataset/table namespace.
5468
5588
  *
@@ -10242,7 +10362,7 @@ var PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
10242
10362
  ` runPlay<TOutput = unknown>(key: string, playRef: ${cloudReferenceType("ctx.runPlay.playRef")}, input: ${cloudReferenceType("ctx.runPlay.input")}, options: PlayCallOptions): Promise<TOutput>;`,
10243
10363
  " runPlayAsync<TInput extends Record<string, unknown>>(key: string, playRef: PlayReferenceLike<TInput>, input: NoInfer<TInput>, options: PlayAsyncCallOptions): Promise<AsyncPlayRunRef>;",
10244
10364
  " runPlayAsync(key: string, playRef: string, input: Record<string, unknown>, options: PlayAsyncCallOptions): Promise<AsyncPlayRunRef>;",
10245
- " log(message: string, options?: { level?: 'debug' | 'info' | 'warn' | 'error' }): void;",
10365
+ " log(message: string, options?: { level?: 'debug' | 'info' | 'warn' | 'error'; context?: Readonly<Record<string, string | number | boolean>> }): void;",
10246
10366
  ` sleep(ms: ${cloudReferenceType("ctx.sleep.ms")}): Promise<void>;`,
10247
10367
  "}",
10248
10368
  "export type DefinePlayConfig<TInput, TOutput extends PlayReturnObject> = { id: string; description?: string; input: PlayInputContract<TInput>; run: (ctx: DeeplinePlayRuntimeContext, input: TInput) => Promise<TOutput>; bindings?: PlayBindings<TInput>; billing?: PlayBindings<TInput>['billing']; runtime?: PlayBindings<TInput>['runtime']; compatibility?: PlayBindings<TInput>['compatibility'] };",
package/dist/index.mjs CHANGED
@@ -18,6 +18,31 @@ async function* iterateCursorPages(fetchPage) {
18
18
  }
19
19
  }
20
20
 
21
+ // src/plays/input-example.ts
22
+ function playInputExampleArgs(schema) {
23
+ if (!schema) return " --input '@<input.json>'";
24
+ if (schema.$ref || schema.allOf) return " --input '@<input.json>'";
25
+ const csv = schema.csvInput;
26
+ const csvField = typeof csv?.inputField === "string" ? csv.inputField : null;
27
+ const required = Array.isArray(schema.required) ? schema.required : [];
28
+ const csvOnlyRequired = required.every((key) => key === csvField);
29
+ const alternatives = schema.oneOf ?? schema.anyOf;
30
+ const hasCsvAlternative = Array.isArray(alternatives) && alternatives.some((branch) => {
31
+ if (!branch || typeof branch !== "object") return false;
32
+ const keys = branch.required;
33
+ return Array.isArray(keys) && keys.includes(csvField) && keys.every((key) => key === csvField);
34
+ });
35
+ if (csvField && csvOnlyRequired && (!alternatives || hasCsvAlternative)) {
36
+ if (csvField === "csv") return " --csv '<contacts.csv>'";
37
+ const value = JSON.stringify({ [csvField]: "<contacts.csv>" });
38
+ return ` --input '${value.replace(/'/g, "'\\''")}'`;
39
+ }
40
+ if (Array.isArray(schema.required) && !required.length && !csv && !alternatives) {
41
+ return "";
42
+ }
43
+ return " --input '@<input.json>'";
44
+ }
45
+
21
46
  // src/config.ts
22
47
  import {
23
48
  existsSync,
@@ -883,8 +908,12 @@ function executionRecoveryError(input) {
883
908
  var DEEPLINEAGENT_EXECUTE_TIMEOUT_MS = 15 * 60 * 1e3;
884
909
  var APIFY_SYNC_DEFAULT_TIMEOUT_MS = 3e5;
885
910
  var APIFY_SYNC_RESPONSE_GRACE_MS = 9e4;
886
- function resolveToolExecuteTimeoutMs(toolId, input) {
911
+ var JSEARCH_SEARCH_CLIENT_TIMEOUT_MS = 2 * 12e4 + 250 + 15e3;
912
+ function resolveToolExecuteTimeoutMs(toolId, input, configuredRequestTimeoutMs) {
887
913
  const normalized = toolId.trim().toLowerCase();
914
+ if (normalized === "openwebninja_jsearch_search") {
915
+ return configuredRequestTimeoutMs ?? JSEARCH_SEARCH_CLIENT_TIMEOUT_MS;
916
+ }
888
917
  const lookupTimeoutMs = resolveLookupClientTimeoutMs(normalized);
889
918
  if (lookupTimeoutMs !== void 0) return lookupTimeoutMs;
890
919
  if (normalized === "apify_run_actor_sync") {
@@ -953,9 +982,10 @@ function materializeToolExecutionResponse(response) {
953
982
  };
954
983
  }
955
984
  var ToolCalls = class {
956
- constructor(http, defaultRequestTimeoutMs) {
985
+ constructor(http, defaultRequestTimeoutMs, configuredRequestTimeoutMs) {
957
986
  this.http = http;
958
987
  this.defaultRequestTimeoutMs = defaultRequestTimeoutMs;
988
+ this.configuredRequestTimeoutMs = configuredRequestTimeoutMs;
959
989
  }
960
990
  async call(toolId, input, options) {
961
991
  const inputSnapshot = JSON.parse(JSON.stringify(input));
@@ -972,7 +1002,11 @@ var ToolCalls = class {
972
1002
  }
973
1003
  await options?.onExecution?.({ idempotencyKey });
974
1004
  }
975
- const timeoutMs = options?.timeout ?? resolveToolExecuteTimeoutMs(toolId, inputSnapshot);
1005
+ const timeoutMs = options?.timeout ?? resolveToolExecuteTimeoutMs(
1006
+ toolId,
1007
+ inputSnapshot,
1008
+ this.configuredRequestTimeoutMs
1009
+ );
976
1010
  if (idempotencyKey !== void 0) {
977
1011
  await this.lookupExecutionByKey(idempotencyKey, timeoutMs);
978
1012
  }
@@ -1190,7 +1224,7 @@ var SDK_RELEASE = {
1190
1224
  // getters keep their established compatibility behavior.
1191
1225
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
1192
1226
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
1193
- version: "0.3.247",
1227
+ version: "0.3.249",
1194
1228
  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.",
1195
1229
  packageCapabilities: {
1196
1230
  updatePreferences: 1
@@ -2579,8 +2613,12 @@ function resolveTimingWindow(input) {
2579
2613
  // ../play-runtime/run-failure.ts
2580
2614
  var PUBLIC_FAILURE_TEXT_BYTE_LIMIT = 64 * 1024;
2581
2615
 
2616
+ // ../play-runtime/log-context.ts
2617
+ var utf8 = new TextEncoder();
2618
+
2582
2619
  // ../play-runtime/run-log-buffer.ts
2583
2620
  var RUNNER_LOG_MAX_BYTES = 5 * 1024 * 1024;
2621
+ var RUNNER_LOG_CONTEXT_MAX_BYTES = 128 * 1024;
2584
2622
  var TERMINAL_RESERVE_BYTES = 64 * 1024;
2585
2623
  var encoder = new TextEncoder();
2586
2624
 
@@ -3510,6 +3548,21 @@ function runtimeSelectionHeaders(runtime) {
3510
3548
  ...receivers ? { [RETAINED_PIPELINE_RECEIVERS_HEADER]: receivers } : {}
3511
3549
  };
3512
3550
  }
3551
+ function isolatedCiRuntimeEventReadHeaders() {
3552
+ const schema = process.env.DEEPLINE_RUNTIME_SCHEDULER_SCHEMA?.trim();
3553
+ if (process.env.DEEPLINE_SYNTHETIC_RUN?.trim() !== "1" || !schema || !/^fly_absurd_pr_\d+_\d+(?:_\d+)?$/.test(schema)) {
3554
+ return void 0;
3555
+ }
3556
+ const token = process.env.DEEPLINE_INTERNAL_TOKEN?.trim();
3557
+ if (!token) {
3558
+ throw new DeeplineError(
3559
+ "DEEPLINE_INTERNAL_TOKEN is required for isolated CI runtime event reads.",
3560
+ void 0,
3561
+ "RUNTIME_EVENT_INTERNAL_TOKEN_REQUIRED"
3562
+ );
3563
+ }
3564
+ return { [COORDINATOR_INTERNAL_TOKEN_HEADER]: token };
3565
+ }
3513
3566
  function normalizeTestPolicyOverrides(value, source) {
3514
3567
  if (value && typeof value === "object" && !Array.isArray(value)) {
3515
3568
  return value;
@@ -3882,8 +3935,13 @@ var DeeplineClient = class _DeeplineClient {
3882
3935
  constructor(options) {
3883
3936
  this.config = resolveConfig(options);
3884
3937
  this.http = new HttpClient(this.config);
3885
- this.toolCalls = new ToolCalls(this.http, this.config.timeout);
3938
+ this.toolCalls = new ToolCalls(
3939
+ this.http,
3940
+ this.config.timeout,
3941
+ options?.timeout
3942
+ );
3886
3943
  this.runs = {
3944
+ getReceipts: (runId, options2) => this.getRunReceipts(runId, options2),
3887
3945
  get: (runId, options2) => this.getRunStatus(runId, options2),
3888
3946
  status: (runId) => this.getRunLifecycleStatus(runId),
3889
3947
  list: (options2) => this.listRuns(options2),
@@ -3891,6 +3949,7 @@ var DeeplineClient = class _DeeplineClient {
3891
3949
  watch: (runId, options2) => this.watchRunToTerminal(runId, options2),
3892
3950
  tail: (runId, options2) => this.tailRun(runId, options2),
3893
3951
  logs: (runId, options2) => this.getRunLogs(runId, options2),
3952
+ searchEvents: (options2) => this.searchRunEvents(options2),
3894
3953
  input: (runId) => this.getRunInput(runId),
3895
3954
  rerun: (runId, options2) => this.rerun(runId, options2),
3896
3955
  exportDatasetRows: (input) => this.getPlaySheetRows(input),
@@ -4015,13 +4074,9 @@ var DeeplineClient = class _DeeplineClient {
4015
4074
  const value = schema[key];
4016
4075
  return isRecord4(value) ? value : null;
4017
4076
  }
4018
- playRunCommand(play, options) {
4077
+ playRunCommand(play) {
4019
4078
  const target = play.reference || play.name;
4020
- if (options?.csvInput) {
4021
- const inputField = typeof options.csvInput.inputField === "string" && options.csvInput.inputField.trim() ? options.csvInput.inputField.trim() : "csv";
4022
- return `deepline plays run ${target} --input '${JSON.stringify({ [inputField]: "leads.csv" })}' --watch`;
4023
- }
4024
- return `deepline plays run ${target} --input '{...}' --watch`;
4079
+ return `deepline plays run ${target}${playInputExampleArgs(play.inputSchema)} --watch`;
4025
4080
  }
4026
4081
  starterPlayPath(play) {
4027
4082
  const target = play.reference || play.name;
@@ -4048,7 +4103,7 @@ var DeeplineClient = class _DeeplineClient {
4048
4103
  "rowOutputSchema"
4049
4104
  );
4050
4105
  const description = play.description?.trim() || play.currentRevision?.description?.trim() || play.liveRevision?.description?.trim() || null;
4051
- const runCommand = this.playRunCommand(play, { csvInput });
4106
+ const runCommand = this.playRunCommand(play);
4052
4107
  const cloneEditStarter = this.playCloneEditStarter(play);
4053
4108
  return {
4054
4109
  name: play.name,
@@ -5261,6 +5316,33 @@ var DeeplineClient = class _DeeplineClient {
5261
5316
  );
5262
5317
  return { ...response, runs: response.runs ?? [] };
5263
5318
  }
5319
+ /** Read batches rather than silently truncating a long key list. */
5320
+ async getRunReceipts(runId, options) {
5321
+ if (!options.keys.length || options.keys.some(
5322
+ (key) => typeof key !== "string" || !key.trim() || key.length > 2048 || /[\r\n\0]/.test(key)
5323
+ )) {
5324
+ throw Object.assign(
5325
+ new Error(
5326
+ "Supply nonempty receipt keys, at most 2048 characters each."
5327
+ ),
5328
+ { exitCode: 2 }
5329
+ );
5330
+ }
5331
+ const receipts = [];
5332
+ for (let offset = 0; offset < options.keys.length; offset += 100) {
5333
+ const keys = options.keys.slice(offset, offset + 100);
5334
+ const result = await this.http.post(`/api/v2/runs/${encodeURIComponent(runId)}/receipts/results`, { keys });
5335
+ if (result.runId !== runId || result.receipts.length !== keys.length || result.receipts.some(
5336
+ (receipt, index) => receipt.receiptKey !== keys[index]
5337
+ )) {
5338
+ throw new Error(
5339
+ "Receipt response does not match the requested run and keys."
5340
+ );
5341
+ }
5342
+ receipts.push(...result.receipts);
5343
+ }
5344
+ return { runId, receipts };
5345
+ }
5264
5346
  /** Get the exact original input retained for a run. This is intentionally separate from status. */
5265
5347
  async getRunInput(runId) {
5266
5348
  return this.http.get(`/api/v2/runs/${encodeURIComponent(runId)}/input`);
@@ -5310,7 +5392,8 @@ var DeeplineClient = class _DeeplineClient {
5310
5392
  const requestedLimit = typeof options.limit === "number" && Number.isFinite(options.limit) && options.limit > 0 ? Math.trunc(options.limit) : RUNS_FAILED_LOG_LIMIT;
5311
5393
  const failedLimit = Math.min(RUNS_FAILED_LOG_LIMIT, requestedLimit);
5312
5394
  const page = await this.http.get(
5313
- `/api/v2/runs/${encodeURIComponent(runId)}/logs?view=failed&limit=${failedLimit}`
5395
+ `/api/v2/runs/${encodeURIComponent(runId)}/logs?view=failed&limit=${failedLimit}`,
5396
+ { retryApiErrors: true }
5314
5397
  );
5315
5398
  return {
5316
5399
  runId: page.runId,
@@ -5332,7 +5415,8 @@ var DeeplineClient = class _DeeplineClient {
5332
5415
  }
5333
5416
  const limit = options?.all ? Number.MAX_SAFE_INTEGER : typeof options?.limit === "number" && Number.isFinite(options.limit) && options.limit > 0 ? Math.trunc(options.limit) : 200;
5334
5417
  const fetchPage = (afterSeq2, pageLimit) => this.http.get(
5335
- `/api/v2/runs/${encodeURIComponent(runId)}/logs?afterSeq=${afterSeq2}&limit=${pageLimit}`
5418
+ `/api/v2/runs/${encodeURIComponent(runId)}/logs?afterSeq=${afterSeq2}&limit=${pageLimit}`,
5419
+ { retryApiErrors: true }
5336
5420
  );
5337
5421
  const probe = await fetchPage(0, 1);
5338
5422
  const lastStoredSeq = probe.lastStoredSeq;
@@ -5367,6 +5451,42 @@ var DeeplineClient = class _DeeplineClient {
5367
5451
  ...probe.logsTruncated ? { logsTruncated: true } : {}
5368
5452
  };
5369
5453
  }
5454
+ /** Search bounded, structured runtime history without requiring a run id. */
5455
+ async searchRunEvents(options = {}) {
5456
+ const now = Date.now();
5457
+ const params = new URLSearchParams({
5458
+ since: options.since ?? new Date(now - 60 * 60 * 1e3).toISOString(),
5459
+ until: options.until ?? new Date(now).toISOString()
5460
+ });
5461
+ if (options.runId) params.set("runId", options.runId);
5462
+ if (options.playName) params.set("playName", options.playName);
5463
+ if (options.kind) params.set("kind", options.kind);
5464
+ if (options.jsonpath) params.set("jsonpath", options.jsonpath);
5465
+ if (options.includePayloads) params.set("payloads", "true");
5466
+ if (options.limit !== void 0) params.set("limit", String(options.limit));
5467
+ if (options.cursor) params.set("cursor", options.cursor);
5468
+ let headers;
5469
+ if (options.runtime !== void 0) {
5470
+ const runtime = normalizePlayRuntimeSelection(options.runtime);
5471
+ if (!runtime) {
5472
+ throw new DeeplineError(
5473
+ "runs.searchEvents runtime must be a valid Preview selection.",
5474
+ void 0,
5475
+ "INVALID_RUNTIME_SELECTION"
5476
+ );
5477
+ }
5478
+ params.set("runtime", "preview");
5479
+ params.set("namespace", runtime.namespace);
5480
+ if (runtime.backend) params.set("backend", runtime.backend);
5481
+ headers = runtimeSelectionHeaders(runtime);
5482
+ } else {
5483
+ headers = isolatedCiRuntimeEventReadHeaders();
5484
+ }
5485
+ return this.http.get(
5486
+ `/api/v2/runs/events?${params.toString()}`,
5487
+ { headers, retryApiErrors: true }
5488
+ );
5489
+ }
5370
5490
  /**
5371
5491
  * Export persisted runtime-sheet rows for a play dataset/table namespace.
5372
5492
  *
@@ -10146,7 +10266,7 @@ var PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
10146
10266
  ` runPlay<TOutput = unknown>(key: string, playRef: ${cloudReferenceType("ctx.runPlay.playRef")}, input: ${cloudReferenceType("ctx.runPlay.input")}, options: PlayCallOptions): Promise<TOutput>;`,
10147
10267
  " runPlayAsync<TInput extends Record<string, unknown>>(key: string, playRef: PlayReferenceLike<TInput>, input: NoInfer<TInput>, options: PlayAsyncCallOptions): Promise<AsyncPlayRunRef>;",
10148
10268
  " runPlayAsync(key: string, playRef: string, input: Record<string, unknown>, options: PlayAsyncCallOptions): Promise<AsyncPlayRunRef>;",
10149
- " log(message: string, options?: { level?: 'debug' | 'info' | 'warn' | 'error' }): void;",
10269
+ " log(message: string, options?: { level?: 'debug' | 'info' | 'warn' | 'error'; context?: Readonly<Record<string, string | number | boolean>> }): void;",
10150
10270
  ` sleep(ms: ${cloudReferenceType("ctx.sleep.ms")}): Promise<void>;`,
10151
10271
  "}",
10152
10272
  "export type DefinePlayConfig<TInput, TOutput extends PlayReturnObject> = { id: string; description?: string; input: PlayInputContract<TInput>; run: (ctx: DeeplinePlayRuntimeContext, input: TInput) => Promise<TOutput>; bindings?: PlayBindings<TInput>; billing?: PlayBindings<TInput>['billing']; runtime?: PlayBindings<TInput>['runtime']; compatibility?: PlayBindings<TInput>['compatibility'] };",
@@ -18,10 +18,13 @@
18
18
  "dist/bundling-sources/sdk/src/pagination.ts",
19
19
  "dist/bundling-sources/sdk/src/play.ts",
20
20
  "dist/bundling-sources/sdk/src/plays/bundle-play-file.ts",
21
+ "dist/bundling-sources/sdk/src/plays/input-example.ts",
21
22
  "dist/bundling-sources/sdk/src/plays/local-file-discovery.ts",
22
23
  "dist/bundling-sources/sdk/src/release.ts",
23
24
  "dist/bundling-sources/sdk/src/runs/observe-transport.ts",
25
+ "dist/bundling-sources/sdk/src/runs/overview.ts",
24
26
  "dist/bundling-sources/sdk/src/runs/read-errors.ts",
27
+ "dist/bundling-sources/sdk/src/runs/receipts.ts",
25
28
  "dist/bundling-sources/sdk/src/runs/watch-polling.ts",
26
29
  "dist/bundling-sources/sdk/src/skills-version.ts",
27
30
  "dist/bundling-sources/sdk/src/tool-calls.ts",
@@ -221,6 +224,7 @@
221
224
  "dist/bundling-sources/shared_libs/play-runtime/ledger-safe-payload.ts",
222
225
  "dist/bundling-sources/shared_libs/play-runtime/live-events.ts",
223
226
  "dist/bundling-sources/shared_libs/play-runtime/live-state-contract.ts",
227
+ "dist/bundling-sources/shared_libs/play-runtime/log-context.ts",
224
228
  "dist/bundling-sources/shared_libs/play-runtime/log-provenance.ts",
225
229
  "dist/bundling-sources/shared_libs/play-runtime/map-chunk-limits.ts",
226
230
  "dist/bundling-sources/shared_libs/play-runtime/map-execution-frame.ts",
@@ -317,7 +321,9 @@
317
321
  "dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-progress-push.ts",
318
322
  "dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-sheet-persistence-retry.ts",
319
323
  "dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-terminal-push.ts",
324
+ "dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-control-transport.ts",
320
325
  "dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-labels.ts",
326
+ "dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-launch-transport.ts",
321
327
  "dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts",
322
328
  "dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-modal-fallback.ts",
323
329
  "dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts",
@@ -409,6 +415,7 @@
409
415
  "dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-terminal-transition.ts",
410
416
  "dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runner-push.ts",
411
417
  "dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-api-origin.ts",
418
+ "dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts",
412
419
  "dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-queue-health.ts",
413
420
  "dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-gateway-health.ts",
414
421
  "dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-value-storage.ts",
@@ -575,8 +582,8 @@
575
582
  "dist/cli/index.js",
576
583
  "dist/cli/index.mjs",
577
584
  "dist/cli/text-imports.d.ts",
578
- "dist/compiler-manifest-n8ZtPv2h.d.mts",
579
- "dist/compiler-manifest-n8ZtPv2h.d.ts",
585
+ "dist/compiler-manifest-DavmLa8y.d.mts",
586
+ "dist/compiler-manifest-DavmLa8y.d.ts",
580
587
  "dist/helpers.d.mts",
581
588
  "dist/helpers.d.ts",
582
589
  "dist/helpers.js",
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-n8ZtPv2h.mjs';
3
- export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-n8ZtPv2h.mjs';
2
+ import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-DavmLa8y.mjs';
3
+ export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-DavmLa8y.mjs';
4
4
  import '@sinclair/typebox';
5
5
 
6
6
  type ImportedPlayDependency = {
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-n8ZtPv2h.js';
3
- export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-n8ZtPv2h.js';
2
+ import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-DavmLa8y.js';
3
+ export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-DavmLa8y.js';
4
4
  import '@sinclair/typebox';
5
5
 
6
6
  type ImportedPlayDependency = {
@@ -1609,7 +1609,7 @@ var PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
1609
1609
  ` runPlay<TOutput = unknown>(key: string, playRef: ${cloudReferenceType("ctx.runPlay.playRef")}, input: ${cloudReferenceType("ctx.runPlay.input")}, options: PlayCallOptions): Promise<TOutput>;`,
1610
1610
  " runPlayAsync<TInput extends Record<string, unknown>>(key: string, playRef: PlayReferenceLike<TInput>, input: NoInfer<TInput>, options: PlayAsyncCallOptions): Promise<AsyncPlayRunRef>;",
1611
1611
  " runPlayAsync(key: string, playRef: string, input: Record<string, unknown>, options: PlayAsyncCallOptions): Promise<AsyncPlayRunRef>;",
1612
- " log(message: string, options?: { level?: 'debug' | 'info' | 'warn' | 'error' }): void;",
1612
+ " log(message: string, options?: { level?: 'debug' | 'info' | 'warn' | 'error'; context?: Readonly<Record<string, string | number | boolean>> }): void;",
1613
1613
  ` sleep(ms: ${cloudReferenceType("ctx.sleep.ms")}): Promise<void>;`,
1614
1614
  "}",
1615
1615
  "export type DefinePlayConfig<TInput, TOutput extends PlayReturnObject> = { id: string; description?: string; input: PlayInputContract<TInput>; run: (ctx: DeeplinePlayRuntimeContext, input: TInput) => Promise<TOutput>; bindings?: PlayBindings<TInput>; billing?: PlayBindings<TInput>['billing']; runtime?: PlayBindings<TInput>['runtime']; compatibility?: PlayBindings<TInput>['compatibility'] };",
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.247";
152
+ readonly version: "0.3.249";
153
153
  readonly 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.";
154
154
  readonly packageCapabilities: {
155
155
  readonly updatePreferences: 1;
package/dist/release.d.ts CHANGED
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.247";
152
+ readonly version: "0.3.249";
153
153
  readonly 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.";
154
154
  readonly packageCapabilities: {
155
155
  readonly updatePreferences: 1;
package/dist/release.js CHANGED
@@ -74,7 +74,7 @@ var SDK_RELEASE = {
74
74
  // getters keep their established compatibility behavior.
75
75
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
76
76
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
77
- version: "0.3.247",
77
+ version: "0.3.249",
78
78
  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.",
79
79
  packageCapabilities: {
80
80
  updatePreferences: 1
package/dist/release.mjs CHANGED
@@ -48,7 +48,7 @@ var SDK_RELEASE = {
48
48
  // getters keep their established compatibility behavior.
49
49
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
50
50
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
51
- version: "0.3.247",
51
+ version: "0.3.249",
52
52
  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.",
53
53
  packageCapabilities: {
54
54
  updatePreferences: 1