deepline 0.3.145 → 0.3.147

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 (28) hide show
  1. package/dist/bundling-sources/sdk/src/client.ts +1 -1
  2. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  3. package/dist/bundling-sources/shared_libs/play-runtime/async-operation.ts +40 -4
  4. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +259 -7
  5. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +10 -0
  6. package/dist/bundling-sources/shared_libs/play-runtime/fullenrich-batching.ts +2 -2
  7. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +10 -0
  8. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger.ts +58 -19
  9. package/dist/bundling-sources/shared_libs/play-runtime/run-snapshot-stream.ts +17 -11
  10. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +57 -2
  11. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-progress-registry.ts +14 -2
  12. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +73 -16
  13. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-state.ts +22 -1
  14. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +84 -10
  15. package/dist/bundling-sources/shared_libs/play-runtime/step-progress.ts +7 -0
  16. package/dist/bundling-sources/shared_libs/play-runtime/test-runtime-seams.ts +6 -2
  17. package/dist/bundling-sources/shared_libs/play-runtime/worker-api-types.ts +1 -0
  18. package/dist/cli/index.js +57 -17
  19. package/dist/cli/index.mjs +57 -17
  20. package/dist/index.d.mts +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +25 -9
  23. package/dist/index.mjs +25 -9
  24. package/dist/release.d.mts +1 -1
  25. package/dist/release.d.ts +1 -1
  26. package/dist/release.js +1 -1
  27. package/dist/release.mjs +1 -1
  28. 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.145",
3066
+ version: "0.3.147",
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
@@ -5308,19 +5308,32 @@ function summarizeRunRowOutcomes(snapshot) {
5308
5308
  let completedRows = 0;
5309
5309
  let failedRows = 0;
5310
5310
  let totalRows = 0;
5311
+ let supersededRows = 0;
5311
5312
  for (const step of Object.values(snapshot.stepsById)) {
5312
5313
  const progress = step.progress;
5313
5314
  if (!progress) continue;
5314
5315
  completedRows += Math.max(0, finiteNumber(progress.completed) ?? 0);
5315
5316
  failedRows += Math.max(0, finiteNumber(progress.failed) ?? 0);
5317
+ supersededRows += Math.max(0, finiteNumber(progress.supersededRows) ?? 0);
5316
5318
  const stepTotal = finiteNumber(progress.total);
5317
- totalRows += stepTotal !== null && stepTotal >= 0 ? stepTotal : Math.max(0, finiteNumber(progress.completed) ?? 0) + Math.max(0, finiteNumber(progress.failed) ?? 0);
5318
- }
5319
+ totalRows += stepTotal !== null && stepTotal >= 0 ? stepTotal : Math.max(0, finiteNumber(progress.completed) ?? 0) + Math.max(0, finiteNumber(progress.failed) ?? 0) + Math.max(0, finiteNumber(progress.supersededRows) ?? 0);
5320
+ }
5321
+ const resultSummary = isRecord5(snapshot.resultSummary) ? snapshot.resultSummary : null;
5322
+ const resultRowOutcomes = isRecord5(resultSummary?.rowOutcomes) ? resultSummary.rowOutcomes : null;
5323
+ const terminalCompletedRows = finiteNumber(resultRowOutcomes?.completedRows);
5324
+ const terminalFailedRows = finiteNumber(resultRowOutcomes?.failedRows);
5325
+ const terminalTotalRows = finiteNumber(resultRowOutcomes?.totalRows);
5326
+ const terminalSupersededRows = finiteNumber(
5327
+ resultRowOutcomes?.supersededRows
5328
+ );
5329
+ const settledCompletedRows = terminalCompletedRows ?? completedRows;
5330
+ const settledFailedRows = terminalFailedRows ?? failedRows;
5319
5331
  return {
5320
- completedRows,
5321
- failedRows,
5322
- totalRows,
5323
- hasRowFailures: failedRows > 0
5332
+ completedRows: settledCompletedRows,
5333
+ failedRows: settledFailedRows,
5334
+ totalRows: terminalTotalRows ?? totalRows,
5335
+ hasRowFailures: settledFailedRows > 0,
5336
+ ...(terminalSupersededRows ?? supersededRows) > 0 ? { supersededRows: terminalSupersededRows ?? supersededRows } : {}
5324
5337
  };
5325
5338
  }
5326
5339
  function createEmptyPlayRunLedgerSnapshot(input2) {
@@ -5478,6 +5491,7 @@ function normalizeStepProgress(value) {
5478
5491
  ...optionalFiniteNumber(value.activeRows) !== void 0 ? { activeRows: optionalFiniteNumber(value.activeRows) } : {},
5479
5492
  ...optionalFiniteNumber(value.waitingRows) !== void 0 ? { waitingRows: optionalFiniteNumber(value.waitingRows) } : {},
5480
5493
  ...optionalFiniteNumber(value.completedRows) !== void 0 ? { completedRows: optionalFiniteNumber(value.completedRows) } : {},
5494
+ ...optionalFiniteNumber(value.supersededRows) !== void 0 ? { supersededRows: optionalFiniteNumber(value.supersededRows) } : {},
5481
5495
  ...optionalString(value.message) ? { message: optionalString(value.message) } : {},
5482
5496
  ...optionalNullableString(value.artifactTableNamespace) !== void 0 ? {
5483
5497
  artifactTableNamespace: optionalNullableString(
@@ -5729,6 +5743,7 @@ function buildSnapshotFromLedger(snapshot) {
5729
5743
  activeRows: step.progress.activeRows,
5730
5744
  waitingRows: step.progress.waitingRows,
5731
5745
  completedRows: step.progress.completedRows,
5746
+ supersededRows: step.progress.supersededRows,
5732
5747
  message: step.progress.message,
5733
5748
  artifactTableNamespace: step.progress.artifactTableNamespace ?? step.artifactTableNamespace ?? null,
5734
5749
  startedAt: step.startedAt ?? null,
@@ -5742,7 +5757,8 @@ function buildSnapshotFromLedger(snapshot) {
5742
5757
  ...step.progress?.nodeIo ? { nodeIo: step.progress.nodeIo } : {}
5743
5758
  }));
5744
5759
  const liveStatus = normalizePlayRunLiveStatus(snapshot.status);
5745
- const rowOutcomes = isTerminalPlayRunLiveStatus(liveStatus) && Object.keys(snapshot.stepsById).length > 0 ? summarizeRunRowOutcomes(snapshot) : null;
5760
+ const terminalRowOutcomes = isTerminalPlayRunLiveStatus(liveStatus) ? summarizeRunRowOutcomes(snapshot) : null;
5761
+ const rowOutcomes = terminalRowOutcomes && (Object.keys(snapshot.stepsById).length > 0 || terminalRowOutcomes.totalRows > 0 || (terminalRowOutcomes.supersededRows ?? 0) > 0) ? terminalRowOutcomes : null;
5746
5762
  return {
5747
5763
  runId: snapshot.runId,
5748
5764
  status: liveStatus,
@@ -7430,7 +7446,7 @@ var DeeplineClient = class _DeeplineClient {
7430
7446
  * guaranteed support for every model. Runtime AI SDK/Gateway errors remain
7431
7447
  * authoritative for model-gated values.
7432
7448
  *
7433
- * @param model - Gateway model id such as `"openai/gpt-5.5"`
7449
+ * @param model - Exact-case Gateway model id such as `"openai/gpt-5.6-luna"`
7434
7450
  * @returns Model metadata, provider option shapes, and runnable examples
7435
7451
  */
7436
7452
  async describeModel(model) {
@@ -23728,14 +23744,18 @@ function getProgressLinesFromLiveEvent(event) {
23728
23744
  const rowOutcomes = readRowOutcomeSummary({
23729
23745
  rowOutcomes: payload.rowOutcomes
23730
23746
  });
23731
- if (rowOutcomes?.hasRowFailures) {
23747
+ if (rowOutcomes && (rowOutcomes.hasRowFailures || (rowOutcomes.supersededRows ?? 0) > 0)) {
23732
23748
  const counts = formatProgressCounts({
23733
23749
  completed: rowOutcomes.completedRows,
23734
23750
  total: rowOutcomes.totalRows,
23735
23751
  failed: rowOutcomes.failedRows
23736
23752
  });
23737
- if (counts) {
23738
- lines.push(`progress run outcomes: ${counts}`);
23753
+ const outcomeParts = [
23754
+ counts,
23755
+ ...rowOutcomes && (rowOutcomes.supersededRows ?? 0) > 0 ? [formatSupersededRowsNotice(rowOutcomes.supersededRows)] : []
23756
+ ].filter((part) => Boolean(part));
23757
+ if (outcomeParts.length > 0) {
23758
+ lines.push(`progress run outcomes: ${outcomeParts.join(", ")}`);
23739
23759
  }
23740
23760
  }
23741
23761
  return lines;
@@ -24614,9 +24634,13 @@ function buildRunWarnings(status, rowsInfo) {
24614
24634
  const rowOutcomeWarnings = rowOutcomes?.hasRowFailures ? [
24615
24635
  `${status.status === "completed" ? "Run completed" : "Run ended"} with ${formatInteger(rowOutcomes.failedRows)} failed row(s); inspect the persisted failed rows before treating the output as complete.`
24616
24636
  ] : [];
24637
+ const supersededRowNotices = (rowOutcomes?.supersededRows ?? 0) > 0 ? [
24638
+ `Latest-write-wins: ${formatSupersededRowsNotice(rowOutcomes.supersededRows ?? 0)}; the newer write still owns that Runtime Sheet row.`
24639
+ ] : [];
24617
24640
  if (status.status === "completed" && rowsInfo?.totalRows === 0) {
24618
24641
  return [
24619
24642
  ...rowOutcomeWarnings,
24643
+ ...supersededRowNotices,
24620
24644
  "Run completed with 0 output rows.",
24621
24645
  ...outputWarnings
24622
24646
  ];
@@ -24624,11 +24648,12 @@ function buildRunWarnings(status, rowsInfo) {
24624
24648
  if (rowsInfo && !rowsInfo.complete) {
24625
24649
  return [
24626
24650
  ...rowOutcomeWarnings,
24651
+ ...supersededRowNotices,
24627
24652
  `Run output is partial: showing ${rowsInfo.rows.length} preview row(s) of ${rowsInfo.totalRows}.`,
24628
24653
  ...outputWarnings
24629
24654
  ];
24630
24655
  }
24631
- return [...rowOutcomeWarnings, ...outputWarnings];
24656
+ return [...rowOutcomeWarnings, ...supersededRowNotices, ...outputWarnings];
24632
24657
  }
24633
24658
  function buildRunNextCommands(status) {
24634
24659
  const runId = status.runId?.trim();
@@ -24664,6 +24689,9 @@ function getNumericField(value, key) {
24664
24689
  const field = getRecordField(value, key);
24665
24690
  return typeof field === "number" && Number.isFinite(field) ? field : null;
24666
24691
  }
24692
+ function formatSupersededRowsNotice(count) {
24693
+ return `${formatInteger(count)} row${count === 1 ? "" : "s"} skipped because a newer Runtime Sheet write took precedence`;
24694
+ }
24667
24695
  function readRowOutcomeSummary(value) {
24668
24696
  const record3 = getRecordField(value, "rowOutcomes");
24669
24697
  if (!record3) return null;
@@ -24674,11 +24702,13 @@ function readRowOutcomeSummary(value) {
24674
24702
  return null;
24675
24703
  }
24676
24704
  const explicitHasFailures = getRecordField(record3, "hasRowFailures");
24705
+ const supersededRows = getNumericField(record3, "supersededRows");
24677
24706
  return {
24678
24707
  completedRows,
24679
24708
  failedRows,
24680
24709
  totalRows,
24681
- hasRowFailures: typeof explicitHasFailures === "boolean" ? explicitHasFailures : failedRows > 0
24710
+ hasRowFailures: typeof explicitHasFailures === "boolean" ? explicitHasFailures : failedRows > 0,
24711
+ ...supersededRows !== null ? { supersededRows: Math.max(0, supersededRows) } : {}
24682
24712
  };
24683
24713
  }
24684
24714
  function getStringField(value, key) {
@@ -24921,12 +24951,16 @@ function normalizeProgressForEnvelope(status, rowsInfo) {
24921
24951
  const total = rowOutcomes?.totalRows ?? getNumericField(progress, "totalRows") ?? getNumericField(progress, "total") ?? rowsInfo?.totalRows ?? null;
24922
24952
  const failed = rowOutcomes?.failedRows ?? getNumericField(progress, "failed") ?? getNumericField(progress, "failedRows") ?? null;
24923
24953
  const completed = rowOutcomes?.completedRows ?? getNumericField(progress, "completed") ?? getNumericField(progress, "completedRows") ?? (status.status === "completed" ? total : null);
24924
- const pending = getNumericField(progress, "pending") ?? (typeof total === "number" && typeof completed === "number" && typeof failed === "number" ? Math.max(0, total - completed - failed) : null);
24954
+ const supersededRows = rowOutcomes?.supersededRows ?? getNumericField(progress, "supersededRows");
24955
+ const supersededOffset = supersededRows ?? 0;
24956
+ const progressPending = getNumericField(progress, "pending");
24957
+ const pending = (progressPending !== null ? Math.max(0, progressPending - supersededOffset) : null) ?? (typeof total === "number" && typeof completed === "number" && typeof failed === "number" ? Math.max(0, total - completed - failed - supersededOffset) : null);
24925
24958
  return {
24926
24959
  total,
24927
24960
  totalRows: total,
24928
24961
  completed,
24929
24962
  completedRows: completed,
24963
+ ...supersededRows !== null ? { supersededRows: Math.max(0, supersededRows) } : {},
24930
24964
  pending,
24931
24965
  failed,
24932
24966
  executed: getNumericField(progress, "executed"),
@@ -25057,6 +25091,9 @@ function compactPlayStatus(status) {
25057
25091
  ) : [],
25058
25092
  ...rowOutcomes2.hasRowFailures ? [
25059
25093
  `${status.status === "completed" ? "Run completed" : "Run ended"} with ${formatInteger(rowOutcomes2.failedRows)} failed row(s); inspect the persisted failed rows before treating the output as complete.`
25094
+ ] : [],
25095
+ ...(rowOutcomes2.supersededRows ?? 0) > 0 ? [
25096
+ `Latest-write-wins: ${formatSupersededRowsNotice(rowOutcomes2.supersededRows ?? 0)}; the newer write still owns that Runtime Sheet row.`
25060
25097
  ] : []
25061
25098
  ]
25062
25099
  } : packaged;
@@ -48081,7 +48118,7 @@ Examples:
48081
48118
  deepline tools describe hunter_email_verifier --schema-only
48082
48119
  deepline tools describe hunter_email_verifier --examples-only
48083
48120
  deepline tools describe hunter_email_verifier --json
48084
- deepline tools describe deeplineagent --model openai/gpt-5.5 --json
48121
+ deepline tools describe deeplineagent --model openai/gpt-5.6-luna --json
48085
48122
  deepline tools describe ai_inference --estimate-payload @payload.json --json
48086
48123
  deepline tools describe ai_evaluate --estimate-payload @payload.json --json
48087
48124
  deepline tools execute hunter_email_verifier --input '{"email":"a@b.com"}'
@@ -48127,9 +48164,11 @@ Notes:
48127
48164
  waterfalls, row maps, checkpoints, and retries.
48128
48165
  Calling a provider-backed tool can spend Deepline credits. Use --json for the
48129
48166
  stable result payload plus output preview and debugging helpers.
48167
+ --timeout sets this CLI request's HTTP deadline; it does not cancel provider work.
48130
48168
 
48131
48169
  Examples:
48132
48170
  deepline tools execute hunter_email_verifier --input '{"email":"a@b.com"}'
48171
+ deepline tools execute bounceban_verify_bulk --input @batch.json --timeout 10m --json
48133
48172
  deepline tools execute hunter_email_verifier -p email=a@b.com
48134
48173
  deepline tools execute test_rate_limit --input '{"key":"smoke"}' --timeout 90s --json
48135
48174
  deepline tools execute test_rate_limit --input '{"key":"smoke"}' --json | jq '.status'
@@ -48154,7 +48193,7 @@ Examples:
48154
48193
  "Merge a JSON object or @file path into the tool params"
48155
48194
  ).option(
48156
48195
  "--timeout <duration>",
48157
- "Execution HTTP deadline (for example 90s, 5m, or 1h; bare numbers are seconds)"
48196
+ "Client-side HTTP deadline (for example 90s, 5m, or 1h; bare numbers are seconds); it does not cancel provider work"
48158
48197
  ).option(
48159
48198
  "--output-format <format>",
48160
48199
  "Output format: auto, csv, csv_file, json, or json_file"
@@ -49779,6 +49818,7 @@ async function executeTool(args) {
49779
49818
  return 2;
49780
49819
  }
49781
49820
  const rawResponse = await client2.executeTool(parsed.toolId, parsed.params, {
49821
+ ...parsed.timeoutMs !== void 0 ? { timeout: parsed.timeoutMs } : {},
49782
49822
  responseIntent: parsed.outPath || parsed.outputFormat === "csv" || parsed.outputFormat === "csv_file" ? "row_artifact" : "raw",
49783
49823
  ...parsed.timeoutMs !== void 0 ? { timeout: parsed.timeoutMs } : {}
49784
49824
  });
package/dist/index.d.mts CHANGED
@@ -4501,7 +4501,7 @@ declare class DeeplineClient {
4501
4501
  * guaranteed support for every model. Runtime AI SDK/Gateway errors remain
4502
4502
  * authoritative for model-gated values.
4503
4503
  *
4504
- * @param model - Gateway model id such as `"openai/gpt-5.5"`
4504
+ * @param model - Exact-case Gateway model id such as `"openai/gpt-5.6-luna"`
4505
4505
  * @returns Model metadata, provider option shapes, and runnable examples
4506
4506
  */
4507
4507
  describeModel(model: string): Promise<DeeplineAgentModelDescription>;
package/dist/index.d.ts CHANGED
@@ -4501,7 +4501,7 @@ declare class DeeplineClient {
4501
4501
  * guaranteed support for every model. Runtime AI SDK/Gateway errors remain
4502
4502
  * authoritative for model-gated values.
4503
4503
  *
4504
- * @param model - Gateway model id such as `"openai/gpt-5.5"`
4504
+ * @param model - Exact-case Gateway model id such as `"openai/gpt-5.6-luna"`
4505
4505
  * @returns Model metadata, provider option shapes, and runnable examples
4506
4506
  */
4507
4507
  describeModel(model: string): Promise<DeeplineAgentModelDescription>;
package/dist/index.js CHANGED
@@ -864,7 +864,7 @@ var SDK_RELEASE = {
864
864
  // getters keep their established compatibility behavior.
865
865
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
866
866
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
867
- version: "0.3.145",
867
+ version: "0.3.147",
868
868
  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.",
869
869
  packageCapabilities: {
870
870
  updatePreferences: 1
@@ -3066,19 +3066,32 @@ function summarizeRunRowOutcomes(snapshot) {
3066
3066
  let completedRows = 0;
3067
3067
  let failedRows = 0;
3068
3068
  let totalRows = 0;
3069
+ let supersededRows = 0;
3069
3070
  for (const step of Object.values(snapshot.stepsById)) {
3070
3071
  const progress = step.progress;
3071
3072
  if (!progress) continue;
3072
3073
  completedRows += Math.max(0, finiteNumber(progress.completed) ?? 0);
3073
3074
  failedRows += Math.max(0, finiteNumber(progress.failed) ?? 0);
3075
+ supersededRows += Math.max(0, finiteNumber(progress.supersededRows) ?? 0);
3074
3076
  const stepTotal = finiteNumber(progress.total);
3075
- totalRows += stepTotal !== null && stepTotal >= 0 ? stepTotal : Math.max(0, finiteNumber(progress.completed) ?? 0) + Math.max(0, finiteNumber(progress.failed) ?? 0);
3076
- }
3077
+ totalRows += stepTotal !== null && stepTotal >= 0 ? stepTotal : Math.max(0, finiteNumber(progress.completed) ?? 0) + Math.max(0, finiteNumber(progress.failed) ?? 0) + Math.max(0, finiteNumber(progress.supersededRows) ?? 0);
3078
+ }
3079
+ const resultSummary = isRecord5(snapshot.resultSummary) ? snapshot.resultSummary : null;
3080
+ const resultRowOutcomes = isRecord5(resultSummary?.rowOutcomes) ? resultSummary.rowOutcomes : null;
3081
+ const terminalCompletedRows = finiteNumber(resultRowOutcomes?.completedRows);
3082
+ const terminalFailedRows = finiteNumber(resultRowOutcomes?.failedRows);
3083
+ const terminalTotalRows = finiteNumber(resultRowOutcomes?.totalRows);
3084
+ const terminalSupersededRows = finiteNumber(
3085
+ resultRowOutcomes?.supersededRows
3086
+ );
3087
+ const settledCompletedRows = terminalCompletedRows ?? completedRows;
3088
+ const settledFailedRows = terminalFailedRows ?? failedRows;
3077
3089
  return {
3078
- completedRows,
3079
- failedRows,
3080
- totalRows,
3081
- hasRowFailures: failedRows > 0
3090
+ completedRows: settledCompletedRows,
3091
+ failedRows: settledFailedRows,
3092
+ totalRows: terminalTotalRows ?? totalRows,
3093
+ hasRowFailures: settledFailedRows > 0,
3094
+ ...(terminalSupersededRows ?? supersededRows) > 0 ? { supersededRows: terminalSupersededRows ?? supersededRows } : {}
3082
3095
  };
3083
3096
  }
3084
3097
  function createEmptyPlayRunLedgerSnapshot(input) {
@@ -3236,6 +3249,7 @@ function normalizeStepProgress(value) {
3236
3249
  ...optionalFiniteNumber(value.activeRows) !== void 0 ? { activeRows: optionalFiniteNumber(value.activeRows) } : {},
3237
3250
  ...optionalFiniteNumber(value.waitingRows) !== void 0 ? { waitingRows: optionalFiniteNumber(value.waitingRows) } : {},
3238
3251
  ...optionalFiniteNumber(value.completedRows) !== void 0 ? { completedRows: optionalFiniteNumber(value.completedRows) } : {},
3252
+ ...optionalFiniteNumber(value.supersededRows) !== void 0 ? { supersededRows: optionalFiniteNumber(value.supersededRows) } : {},
3239
3253
  ...optionalString(value.message) ? { message: optionalString(value.message) } : {},
3240
3254
  ...optionalNullableString(value.artifactTableNamespace) !== void 0 ? {
3241
3255
  artifactTableNamespace: optionalNullableString(
@@ -3387,6 +3401,7 @@ function buildSnapshotFromLedger(snapshot) {
3387
3401
  activeRows: step.progress.activeRows,
3388
3402
  waitingRows: step.progress.waitingRows,
3389
3403
  completedRows: step.progress.completedRows,
3404
+ supersededRows: step.progress.supersededRows,
3390
3405
  message: step.progress.message,
3391
3406
  artifactTableNamespace: step.progress.artifactTableNamespace ?? step.artifactTableNamespace ?? null,
3392
3407
  startedAt: step.startedAt ?? null,
@@ -3400,7 +3415,8 @@ function buildSnapshotFromLedger(snapshot) {
3400
3415
  ...step.progress?.nodeIo ? { nodeIo: step.progress.nodeIo } : {}
3401
3416
  }));
3402
3417
  const liveStatus = normalizePlayRunLiveStatus(snapshot.status);
3403
- const rowOutcomes = isTerminalPlayRunLiveStatus(liveStatus) && Object.keys(snapshot.stepsById).length > 0 ? summarizeRunRowOutcomes(snapshot) : null;
3418
+ const terminalRowOutcomes = isTerminalPlayRunLiveStatus(liveStatus) ? summarizeRunRowOutcomes(snapshot) : null;
3419
+ const rowOutcomes = terminalRowOutcomes && (Object.keys(snapshot.stepsById).length > 0 || terminalRowOutcomes.totalRows > 0 || (terminalRowOutcomes.supersededRows ?? 0) > 0) ? terminalRowOutcomes : null;
3404
3420
  return {
3405
3421
  runId: snapshot.runId,
3406
3422
  status: liveStatus,
@@ -5109,7 +5125,7 @@ var DeeplineClient = class _DeeplineClient {
5109
5125
  * guaranteed support for every model. Runtime AI SDK/Gateway errors remain
5110
5126
  * authoritative for model-gated values.
5111
5127
  *
5112
- * @param model - Gateway model id such as `"openai/gpt-5.5"`
5128
+ * @param model - Exact-case Gateway model id such as `"openai/gpt-5.6-luna"`
5113
5129
  * @returns Model metadata, provider option shapes, and runnable examples
5114
5130
  */
5115
5131
  async describeModel(model) {
package/dist/index.mjs CHANGED
@@ -768,7 +768,7 @@ var SDK_RELEASE = {
768
768
  // getters keep their established compatibility behavior.
769
769
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
770
770
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
771
- version: "0.3.145",
771
+ version: "0.3.147",
772
772
  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.",
773
773
  packageCapabilities: {
774
774
  updatePreferences: 1
@@ -2970,19 +2970,32 @@ function summarizeRunRowOutcomes(snapshot) {
2970
2970
  let completedRows = 0;
2971
2971
  let failedRows = 0;
2972
2972
  let totalRows = 0;
2973
+ let supersededRows = 0;
2973
2974
  for (const step of Object.values(snapshot.stepsById)) {
2974
2975
  const progress = step.progress;
2975
2976
  if (!progress) continue;
2976
2977
  completedRows += Math.max(0, finiteNumber(progress.completed) ?? 0);
2977
2978
  failedRows += Math.max(0, finiteNumber(progress.failed) ?? 0);
2979
+ supersededRows += Math.max(0, finiteNumber(progress.supersededRows) ?? 0);
2978
2980
  const stepTotal = finiteNumber(progress.total);
2979
- totalRows += stepTotal !== null && stepTotal >= 0 ? stepTotal : Math.max(0, finiteNumber(progress.completed) ?? 0) + Math.max(0, finiteNumber(progress.failed) ?? 0);
2980
- }
2981
+ totalRows += stepTotal !== null && stepTotal >= 0 ? stepTotal : Math.max(0, finiteNumber(progress.completed) ?? 0) + Math.max(0, finiteNumber(progress.failed) ?? 0) + Math.max(0, finiteNumber(progress.supersededRows) ?? 0);
2982
+ }
2983
+ const resultSummary = isRecord5(snapshot.resultSummary) ? snapshot.resultSummary : null;
2984
+ const resultRowOutcomes = isRecord5(resultSummary?.rowOutcomes) ? resultSummary.rowOutcomes : null;
2985
+ const terminalCompletedRows = finiteNumber(resultRowOutcomes?.completedRows);
2986
+ const terminalFailedRows = finiteNumber(resultRowOutcomes?.failedRows);
2987
+ const terminalTotalRows = finiteNumber(resultRowOutcomes?.totalRows);
2988
+ const terminalSupersededRows = finiteNumber(
2989
+ resultRowOutcomes?.supersededRows
2990
+ );
2991
+ const settledCompletedRows = terminalCompletedRows ?? completedRows;
2992
+ const settledFailedRows = terminalFailedRows ?? failedRows;
2981
2993
  return {
2982
- completedRows,
2983
- failedRows,
2984
- totalRows,
2985
- hasRowFailures: failedRows > 0
2994
+ completedRows: settledCompletedRows,
2995
+ failedRows: settledFailedRows,
2996
+ totalRows: terminalTotalRows ?? totalRows,
2997
+ hasRowFailures: settledFailedRows > 0,
2998
+ ...(terminalSupersededRows ?? supersededRows) > 0 ? { supersededRows: terminalSupersededRows ?? supersededRows } : {}
2986
2999
  };
2987
3000
  }
2988
3001
  function createEmptyPlayRunLedgerSnapshot(input) {
@@ -3140,6 +3153,7 @@ function normalizeStepProgress(value) {
3140
3153
  ...optionalFiniteNumber(value.activeRows) !== void 0 ? { activeRows: optionalFiniteNumber(value.activeRows) } : {},
3141
3154
  ...optionalFiniteNumber(value.waitingRows) !== void 0 ? { waitingRows: optionalFiniteNumber(value.waitingRows) } : {},
3142
3155
  ...optionalFiniteNumber(value.completedRows) !== void 0 ? { completedRows: optionalFiniteNumber(value.completedRows) } : {},
3156
+ ...optionalFiniteNumber(value.supersededRows) !== void 0 ? { supersededRows: optionalFiniteNumber(value.supersededRows) } : {},
3143
3157
  ...optionalString(value.message) ? { message: optionalString(value.message) } : {},
3144
3158
  ...optionalNullableString(value.artifactTableNamespace) !== void 0 ? {
3145
3159
  artifactTableNamespace: optionalNullableString(
@@ -3291,6 +3305,7 @@ function buildSnapshotFromLedger(snapshot) {
3291
3305
  activeRows: step.progress.activeRows,
3292
3306
  waitingRows: step.progress.waitingRows,
3293
3307
  completedRows: step.progress.completedRows,
3308
+ supersededRows: step.progress.supersededRows,
3294
3309
  message: step.progress.message,
3295
3310
  artifactTableNamespace: step.progress.artifactTableNamespace ?? step.artifactTableNamespace ?? null,
3296
3311
  startedAt: step.startedAt ?? null,
@@ -3304,7 +3319,8 @@ function buildSnapshotFromLedger(snapshot) {
3304
3319
  ...step.progress?.nodeIo ? { nodeIo: step.progress.nodeIo } : {}
3305
3320
  }));
3306
3321
  const liveStatus = normalizePlayRunLiveStatus(snapshot.status);
3307
- const rowOutcomes = isTerminalPlayRunLiveStatus(liveStatus) && Object.keys(snapshot.stepsById).length > 0 ? summarizeRunRowOutcomes(snapshot) : null;
3322
+ const terminalRowOutcomes = isTerminalPlayRunLiveStatus(liveStatus) ? summarizeRunRowOutcomes(snapshot) : null;
3323
+ const rowOutcomes = terminalRowOutcomes && (Object.keys(snapshot.stepsById).length > 0 || terminalRowOutcomes.totalRows > 0 || (terminalRowOutcomes.supersededRows ?? 0) > 0) ? terminalRowOutcomes : null;
3308
3324
  return {
3309
3325
  runId: snapshot.runId,
3310
3326
  status: liveStatus,
@@ -5013,7 +5029,7 @@ var DeeplineClient = class _DeeplineClient {
5013
5029
  * guaranteed support for every model. Runtime AI SDK/Gateway errors remain
5014
5030
  * authoritative for model-gated values.
5015
5031
  *
5016
- * @param model - Gateway model id such as `"openai/gpt-5.5"`
5032
+ * @param model - Exact-case Gateway model id such as `"openai/gpt-5.6-luna"`
5017
5033
  * @returns Model metadata, provider option shapes, and runnable examples
5018
5034
  */
5019
5035
  async describeModel(model) {
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.145";
152
+ readonly version: "0.3.147";
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.145";
152
+ readonly version: "0.3.147";
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.145",
77
+ version: "0.3.147",
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.145",
51
+ version: "0.3.147",
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.3.145",
3
+ "version": "0.3.147",
4
4
  "description": "GTM data CLI and TypeScript SDK for coding agents",
5
5
  "license": "MIT",
6
6
  "homepage": "https://code.deepline.com",