deepline 0.1.94 → 0.1.97

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.
package/dist/cli/index.js CHANGED
@@ -229,10 +229,11 @@ var import_node_path2 = require("path");
229
229
 
230
230
  // src/release.ts
231
231
  var SDK_RELEASE = {
232
- version: "0.1.94",
232
+ // 0.1.94 is claimed by PR #1527 — this watch-render fix ships as 0.1.95.
233
+ version: "0.1.97",
233
234
  apiContract: "2026-06-dataset-column-cell-stale-hard-cutover",
234
235
  supportPolicy: {
235
- latest: "0.1.94",
236
+ latest: "0.1.97",
236
237
  minimumSupported: "0.1.53",
237
238
  deprecatedBelow: "0.1.53"
238
239
  }
@@ -9048,6 +9049,12 @@ ${hint}`;
9048
9049
  });
9049
9050
  }
9050
9051
 
9052
+ // ../shared_libs/play-runtime/internal-step-ids.ts
9053
+ var INTERNAL_GLUE_NODE_ID_PREFIX = "run_javascript:";
9054
+ function isInternalGlueStepId(stepId) {
9055
+ return typeof stepId === "string" && stepId.startsWith(INTERNAL_GLUE_NODE_ID_PREFIX);
9056
+ }
9057
+
9051
9058
  // src/cli/commands/play.ts
9052
9059
  var PLAY_RUN_RESERVED_BOOLEAN_FLAGS = /* @__PURE__ */ new Set([
9053
9060
  "--json",
@@ -9705,7 +9712,10 @@ function describeLiveEventPhase(event) {
9705
9712
  return status ? `${status}${runId}` : null;
9706
9713
  }
9707
9714
  if (event.type === "play.step.status" || event.type === "play.step.progress") {
9708
- const label = typeof payload.label === "string" && payload.label.trim() ? payload.label.trim() : typeof payload.stepId === "string" && payload.stepId.trim() ? payload.stepId.trim() : "step";
9715
+ const label = typeof payload.label === "string" && payload.label.trim() ? payload.label.trim() : formatStepLabelFromNodeId(payload.stepId);
9716
+ if (!label) {
9717
+ return null;
9718
+ }
9709
9719
  const completed = typeof payload.completed === "number" ? payload.completed : null;
9710
9720
  const total = typeof payload.total === "number" ? payload.total : null;
9711
9721
  const progress = completed !== null && total !== null ? ` ${completed}/${total}` : "";
@@ -9721,6 +9731,54 @@ function formatProgressLabel(raw) {
9721
9731
  const value = typeof raw === "string" && raw.trim() ? raw.trim() : "step";
9722
9732
  return value.replace(/^map:/, "").replace(/^tool:/, "");
9723
9733
  }
9734
+ function formatStepLabelFromNodeId(raw) {
9735
+ const value = typeof raw === "string" && raw.trim() ? raw.trim() : "";
9736
+ if (!value) {
9737
+ return null;
9738
+ }
9739
+ if (isInternalGlueStepId(value)) {
9740
+ return null;
9741
+ }
9742
+ const [namespace, ...rest] = value.split(":");
9743
+ switch (namespace) {
9744
+ case "map":
9745
+ case "csv":
9746
+ case "code":
9747
+ case "waterfall":
9748
+ case "step_suite":
9749
+ return rest.join(":") || value;
9750
+ case "tool":
9751
+ case "play_call":
9752
+ return rest[0] || value;
9753
+ case "control_flow":
9754
+ return rest[1] || value;
9755
+ case "node":
9756
+ return null;
9757
+ default:
9758
+ return value;
9759
+ }
9760
+ }
9761
+ function getStepTransitionLineFromLiveEvent(event, state) {
9762
+ if (event.type !== "play.step.status") {
9763
+ return null;
9764
+ }
9765
+ const payload = getEventPayload(event);
9766
+ const stepId = typeof payload.stepId === "string" && payload.stepId.trim() ? payload.stepId.trim() : null;
9767
+ const status = typeof payload.status === "string" && payload.status.trim() ? payload.status.trim() : null;
9768
+ if (!stepId || !status || status === "idle") {
9769
+ return null;
9770
+ }
9771
+ const label = formatStepLabelFromNodeId(stepId);
9772
+ if (!label) {
9773
+ return null;
9774
+ }
9775
+ state.printedStepStatuses ??= /* @__PURE__ */ new Map();
9776
+ if (state.printedStepStatuses.get(stepId) === status) {
9777
+ return null;
9778
+ }
9779
+ state.printedStepStatuses.set(stepId, status);
9780
+ return `step ${label}: ${status}`;
9781
+ }
9724
9782
  function formatProgressCounts(input2) {
9725
9783
  const completed = typeof input2.completed === "number" && Number.isFinite(input2.completed) ? input2.completed : null;
9726
9784
  const total = typeof input2.total === "number" && Number.isFinite(input2.total) ? input2.total : null;
@@ -9936,13 +9994,20 @@ async function waitForPlayCompletionByStream(input2) {
9936
9994
  progress: input2.progress
9937
9995
  });
9938
9996
  if (!input2.jsonOutput) {
9997
+ const stepTransitionLine = getStepTransitionLineFromLiveEvent(
9998
+ event,
9999
+ input2.state
10000
+ );
10001
+ if (stepTransitionLine) {
10002
+ input2.progress.writeLine(stepTransitionLine);
10003
+ }
9939
10004
  const progressLines = getProgressLinesFromLiveEvent(event);
9940
10005
  printPlayProgressLines({
9941
10006
  lines: progressLines,
9942
10007
  state: input2.state,
9943
10008
  progress: input2.progress
9944
10009
  });
9945
- if (progressLines.length === 0) {
10010
+ if (progressLines.length === 0 && !stepTransitionLine) {
9946
10011
  printPlayStatusHeartbeat({
9947
10012
  event,
9948
10013
  playName: input2.playName,
@@ -10227,13 +10292,20 @@ async function startAndWaitForPlayCompletionByStreamOnce(input2) {
10227
10292
  progress: input2.progress
10228
10293
  });
10229
10294
  if (!input2.jsonOutput) {
10295
+ const stepTransitionLine = getStepTransitionLineFromLiveEvent(
10296
+ event,
10297
+ state
10298
+ );
10299
+ if (stepTransitionLine) {
10300
+ input2.progress.writeLine(stepTransitionLine);
10301
+ }
10230
10302
  const progressLines = getProgressLinesFromLiveEvent(event);
10231
10303
  printPlayProgressLines({
10232
10304
  lines: progressLines,
10233
10305
  state,
10234
10306
  progress: input2.progress
10235
10307
  });
10236
- if (progressLines.length === 0) {
10308
+ if (progressLines.length === 0 && !stepTransitionLine) {
10237
10309
  printPlayStatusHeartbeat({
10238
10310
  event,
10239
10311
  playName: input2.playName,
@@ -11069,7 +11141,7 @@ function buildRunPackageTextLines(packaged) {
11069
11141
  const next = packaged.next && typeof packaged.next === "object" && !Array.isArray(packaged.next) ? packaged.next : {};
11070
11142
  const billingCommand = actionToCommand(next.billing);
11071
11143
  if (billingCommand) {
11072
- const costState = status === "completed" || status === "failed" || status === "cancelled" ? "finalizing" : "pending";
11144
+ const costState = status === "completed" || status === "failed" || status === "cancelled" ? "settles asynchronously \u2014 run the billing command below for totals" : "pending";
11073
11145
  lines.push(` cost: ${costState}`);
11074
11146
  }
11075
11147
  for (const step of readRecordArray(packaged.steps).slice(0, 8)) {
@@ -206,10 +206,11 @@ import { join as join2 } from "path";
206
206
 
207
207
  // src/release.ts
208
208
  var SDK_RELEASE = {
209
- version: "0.1.94",
209
+ // 0.1.94 is claimed by PR #1527 — this watch-render fix ships as 0.1.95.
210
+ version: "0.1.97",
210
211
  apiContract: "2026-06-dataset-column-cell-stale-hard-cutover",
211
212
  supportPolicy: {
212
- latest: "0.1.94",
213
+ latest: "0.1.97",
213
214
  minimumSupported: "0.1.53",
214
215
  deprecatedBelow: "0.1.53"
215
216
  }
@@ -9064,6 +9065,12 @@ ${hint}`;
9064
9065
  });
9065
9066
  }
9066
9067
 
9068
+ // ../shared_libs/play-runtime/internal-step-ids.ts
9069
+ var INTERNAL_GLUE_NODE_ID_PREFIX = "run_javascript:";
9070
+ function isInternalGlueStepId(stepId) {
9071
+ return typeof stepId === "string" && stepId.startsWith(INTERNAL_GLUE_NODE_ID_PREFIX);
9072
+ }
9073
+
9067
9074
  // src/cli/commands/play.ts
9068
9075
  var PLAY_RUN_RESERVED_BOOLEAN_FLAGS = /* @__PURE__ */ new Set([
9069
9076
  "--json",
@@ -9721,7 +9728,10 @@ function describeLiveEventPhase(event) {
9721
9728
  return status ? `${status}${runId}` : null;
9722
9729
  }
9723
9730
  if (event.type === "play.step.status" || event.type === "play.step.progress") {
9724
- const label = typeof payload.label === "string" && payload.label.trim() ? payload.label.trim() : typeof payload.stepId === "string" && payload.stepId.trim() ? payload.stepId.trim() : "step";
9731
+ const label = typeof payload.label === "string" && payload.label.trim() ? payload.label.trim() : formatStepLabelFromNodeId(payload.stepId);
9732
+ if (!label) {
9733
+ return null;
9734
+ }
9725
9735
  const completed = typeof payload.completed === "number" ? payload.completed : null;
9726
9736
  const total = typeof payload.total === "number" ? payload.total : null;
9727
9737
  const progress = completed !== null && total !== null ? ` ${completed}/${total}` : "";
@@ -9737,6 +9747,54 @@ function formatProgressLabel(raw) {
9737
9747
  const value = typeof raw === "string" && raw.trim() ? raw.trim() : "step";
9738
9748
  return value.replace(/^map:/, "").replace(/^tool:/, "");
9739
9749
  }
9750
+ function formatStepLabelFromNodeId(raw) {
9751
+ const value = typeof raw === "string" && raw.trim() ? raw.trim() : "";
9752
+ if (!value) {
9753
+ return null;
9754
+ }
9755
+ if (isInternalGlueStepId(value)) {
9756
+ return null;
9757
+ }
9758
+ const [namespace, ...rest] = value.split(":");
9759
+ switch (namespace) {
9760
+ case "map":
9761
+ case "csv":
9762
+ case "code":
9763
+ case "waterfall":
9764
+ case "step_suite":
9765
+ return rest.join(":") || value;
9766
+ case "tool":
9767
+ case "play_call":
9768
+ return rest[0] || value;
9769
+ case "control_flow":
9770
+ return rest[1] || value;
9771
+ case "node":
9772
+ return null;
9773
+ default:
9774
+ return value;
9775
+ }
9776
+ }
9777
+ function getStepTransitionLineFromLiveEvent(event, state) {
9778
+ if (event.type !== "play.step.status") {
9779
+ return null;
9780
+ }
9781
+ const payload = getEventPayload(event);
9782
+ const stepId = typeof payload.stepId === "string" && payload.stepId.trim() ? payload.stepId.trim() : null;
9783
+ const status = typeof payload.status === "string" && payload.status.trim() ? payload.status.trim() : null;
9784
+ if (!stepId || !status || status === "idle") {
9785
+ return null;
9786
+ }
9787
+ const label = formatStepLabelFromNodeId(stepId);
9788
+ if (!label) {
9789
+ return null;
9790
+ }
9791
+ state.printedStepStatuses ??= /* @__PURE__ */ new Map();
9792
+ if (state.printedStepStatuses.get(stepId) === status) {
9793
+ return null;
9794
+ }
9795
+ state.printedStepStatuses.set(stepId, status);
9796
+ return `step ${label}: ${status}`;
9797
+ }
9740
9798
  function formatProgressCounts(input2) {
9741
9799
  const completed = typeof input2.completed === "number" && Number.isFinite(input2.completed) ? input2.completed : null;
9742
9800
  const total = typeof input2.total === "number" && Number.isFinite(input2.total) ? input2.total : null;
@@ -9952,13 +10010,20 @@ async function waitForPlayCompletionByStream(input2) {
9952
10010
  progress: input2.progress
9953
10011
  });
9954
10012
  if (!input2.jsonOutput) {
10013
+ const stepTransitionLine = getStepTransitionLineFromLiveEvent(
10014
+ event,
10015
+ input2.state
10016
+ );
10017
+ if (stepTransitionLine) {
10018
+ input2.progress.writeLine(stepTransitionLine);
10019
+ }
9955
10020
  const progressLines = getProgressLinesFromLiveEvent(event);
9956
10021
  printPlayProgressLines({
9957
10022
  lines: progressLines,
9958
10023
  state: input2.state,
9959
10024
  progress: input2.progress
9960
10025
  });
9961
- if (progressLines.length === 0) {
10026
+ if (progressLines.length === 0 && !stepTransitionLine) {
9962
10027
  printPlayStatusHeartbeat({
9963
10028
  event,
9964
10029
  playName: input2.playName,
@@ -10243,13 +10308,20 @@ async function startAndWaitForPlayCompletionByStreamOnce(input2) {
10243
10308
  progress: input2.progress
10244
10309
  });
10245
10310
  if (!input2.jsonOutput) {
10311
+ const stepTransitionLine = getStepTransitionLineFromLiveEvent(
10312
+ event,
10313
+ state
10314
+ );
10315
+ if (stepTransitionLine) {
10316
+ input2.progress.writeLine(stepTransitionLine);
10317
+ }
10246
10318
  const progressLines = getProgressLinesFromLiveEvent(event);
10247
10319
  printPlayProgressLines({
10248
10320
  lines: progressLines,
10249
10321
  state,
10250
10322
  progress: input2.progress
10251
10323
  });
10252
- if (progressLines.length === 0) {
10324
+ if (progressLines.length === 0 && !stepTransitionLine) {
10253
10325
  printPlayStatusHeartbeat({
10254
10326
  event,
10255
10327
  playName: input2.playName,
@@ -11085,7 +11157,7 @@ function buildRunPackageTextLines(packaged) {
11085
11157
  const next = packaged.next && typeof packaged.next === "object" && !Array.isArray(packaged.next) ? packaged.next : {};
11086
11158
  const billingCommand = actionToCommand(next.billing);
11087
11159
  if (billingCommand) {
11088
- const costState = status === "completed" || status === "failed" || status === "cancelled" ? "finalizing" : "pending";
11160
+ const costState = status === "completed" || status === "failed" || status === "cancelled" ? "settles asynchronously \u2014 run the billing command below for totals" : "pending";
11089
11161
  lines.push(` cost: ${costState}`);
11090
11162
  }
11091
11163
  for (const step of readRecordArray(packaged.steps).slice(0, 8)) {
package/dist/index.js CHANGED
@@ -257,10 +257,11 @@ var import_node_path2 = require("path");
257
257
 
258
258
  // src/release.ts
259
259
  var SDK_RELEASE = {
260
- version: "0.1.94",
260
+ // 0.1.94 is claimed by PR #1527 — this watch-render fix ships as 0.1.95.
261
+ version: "0.1.97",
261
262
  apiContract: "2026-06-dataset-column-cell-stale-hard-cutover",
262
263
  supportPolicy: {
263
- latest: "0.1.94",
264
+ latest: "0.1.97",
264
265
  minimumSupported: "0.1.53",
265
266
  deprecatedBelow: "0.1.53"
266
267
  }
package/dist/index.mjs CHANGED
@@ -179,10 +179,11 @@ import { join as join2 } from "path";
179
179
 
180
180
  // src/release.ts
181
181
  var SDK_RELEASE = {
182
- version: "0.1.94",
182
+ // 0.1.94 is claimed by PR #1527 — this watch-render fix ships as 0.1.95.
183
+ version: "0.1.97",
183
184
  apiContract: "2026-06-dataset-column-cell-stale-hard-cutover",
184
185
  supportPolicy: {
185
- latest: "0.1.94",
186
+ latest: "0.1.97",
186
187
  minimumSupported: "0.1.53",
187
188
  deprecatedBelow: "0.1.53"
188
189
  }
@@ -624,6 +624,14 @@ function getStaticSubstepNodeId(
624
624
  return `tool:${substep.field}:${substep.toolId}`;
625
625
  case 'waterfall':
626
626
  return `waterfall:${substep.id ?? substep.field}`;
627
+ // Keep in lockstep with src/lib/plays/step-progress.ts —
628
+ // getStaticSubstepNodeId there is the observability-side mapping. A
629
+ // missing case here makes the worker report `node:<index>` ids that the
630
+ // app-side package builder can never match back to a play step.
631
+ case 'step_suite':
632
+ return `step_suite:${substep.field}`;
633
+ case 'control_flow':
634
+ return `control_flow:${substep.kind}:${substep.field}`;
627
635
  case 'play_call':
628
636
  return `play_call:${substep.field}:${substep.playId}`;
629
637
  case 'run_javascript':
@@ -50,10 +50,11 @@ export type SdkRelease = {
50
50
  };
51
51
 
52
52
  export const SDK_RELEASE = {
53
- version: '0.1.94',
53
+ // 0.1.94 is claimed by PR #1527 — this watch-render fix ships as 0.1.95.
54
+ version: '0.1.97',
54
55
  apiContract: '2026-06-dataset-column-cell-stale-hard-cutover',
55
56
  supportPolicy: {
56
- latest: '0.1.94',
57
+ latest: '0.1.97',
57
58
  minimumSupported: '0.1.53',
58
59
  deprecatedBelow: '0.1.53',
59
60
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.1.94",
3
+ "version": "0.1.97",
4
4
  "description": "Deepline SDK + CLI — B2B data enrichment powered by durable cloud execution",
5
5
  "license": "MIT",
6
6
  "repository": {