deepline 0.3.195 → 0.3.196

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 +13 -0
  2. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  3. package/dist/bundling-sources/sdk/src/types.ts +18 -0
  4. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +18 -0
  5. package/dist/bundling-sources/shared_libs/observability/scheduled-work-manual.ts +1 -0
  6. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +10 -2
  7. package/dist/bundling-sources/shared_libs/plays/docflow-binding-owner.ts +138 -14
  8. package/dist/bundling-sources/shared_libs/plays/docflow.ts +57 -3
  9. package/dist/bundling-sources/shared_libs/plays/share/static-pipeline-summary.ts +3 -0
  10. package/dist/bundling-sources/shared_libs/plays/static-pipeline.ts +21 -0
  11. package/dist/bundling-sources/shared_libs/plays/workspace-bundle.ts +651 -0
  12. package/dist/cli/index.js +48 -2
  13. package/dist/cli/index.mjs +48 -2
  14. package/dist/{compiler-manifest-4bYusxBr.d.mts → compiler-manifest-Dpd2hEet.d.mts} +28 -0
  15. package/dist/{compiler-manifest-4bYusxBr.d.ts → compiler-manifest-Dpd2hEet.d.ts} +28 -0
  16. package/dist/index.d.mts +27 -2
  17. package/dist/index.d.ts +27 -2
  18. package/dist/index.js +7 -1
  19. package/dist/index.mjs +7 -1
  20. package/dist/install-integrity.json +3 -2
  21. package/dist/plays/bundle-play-file.d.mts +2 -2
  22. package/dist/plays/bundle-play-file.d.ts +2 -2
  23. package/dist/plays/bundle-play-file.mjs +24 -3
  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
package/dist/cli/index.js CHANGED
@@ -3051,7 +3051,7 @@ var SDK_RELEASE = {
3051
3051
  // getters keep their established compatibility behavior.
3052
3052
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
3053
3053
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
3054
- version: "0.3.195",
3054
+ version: "0.3.196",
3055
3055
  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.",
3056
3056
  packageCapabilities: {
3057
3057
  updatePreferences: 1
@@ -9111,6 +9111,12 @@ var DeeplineClient = class _DeeplineClient {
9111
9111
  if (options?.categories || options?.includeToolCategories) {
9112
9112
  params.set("include_tool_categories", "1");
9113
9113
  }
9114
+ if (options?.tags) {
9115
+ params.set(
9116
+ "tags",
9117
+ Array.isArray(options.tags) ? options.tags.join(",") : options.tags
9118
+ );
9119
+ }
9114
9120
  if (options?.includeArchived) params.set("include_archived", "1");
9115
9121
  if (options?.includeCostEstimates) {
9116
9122
  params.set("include_cost_estimates", "1");
@@ -29385,12 +29391,35 @@ function formatPlayCostEstimate(estimate) {
29385
29391
  const source = estimate.source === "observed" ? `observed from ${estimate.sampleRunCount} ${estimate.sampleRunCount === 1 ? "run" : "runs"}` : "static estimate";
29386
29392
  return `${credits} Deepline credits per ${unit} (${source})`;
29387
29393
  }
29394
+ var PREBUILT_PLAY_TAG_KEYS = [
29395
+ "smb",
29396
+ "find-prospects",
29397
+ "qualify",
29398
+ "contact-info",
29399
+ "signals"
29400
+ ];
29388
29401
  async function handlePlayList(args) {
29389
29402
  const jsonOutput = argsWantJson(args);
29390
29403
  const showCost = args.includes("--show-cost");
29391
29404
  const client2 = new DeeplineClient();
29392
29405
  const categoriesIndex = args.indexOf("--categories");
29393
29406
  const categories = categoriesIndex >= 0 ? args[categoriesIndex + 1]?.trim() : void 0;
29407
+ const tags = args.flatMap((arg, index) => arg === "--tag" ? [args[index + 1]] : []).flatMap((value) => (value ?? "").split(",")).map((value) => value.trim()).filter(Boolean);
29408
+ if (args.includes("--tag") && tags.length === 0) {
29409
+ console.error(
29410
+ `Pass a tag after --tag. Known tags: ${PREBUILT_PLAY_TAG_KEYS.join(", ")}.`
29411
+ );
29412
+ return 2;
29413
+ }
29414
+ const unknownTags = tags.filter(
29415
+ (tag) => !PREBUILT_PLAY_TAG_KEYS.includes(tag)
29416
+ );
29417
+ if (unknownTags.length > 0) {
29418
+ console.error(
29419
+ `Unknown play tag: ${unknownTags.join(", ")}. Known tags: ${PREBUILT_PLAY_TAG_KEYS.join(", ")}.`
29420
+ );
29421
+ return 2;
29422
+ }
29394
29423
  const limitIndex = args.indexOf("--limit");
29395
29424
  const cursorIndex = args.indexOf("--cursor");
29396
29425
  const limit = limitIndex >= 0 ? Number(args[limitIndex + 1]) : void 0;
@@ -29401,13 +29430,20 @@ async function handlePlayList(args) {
29401
29430
  }
29402
29431
  const page = await client2.listPlaysPage({
29403
29432
  categories,
29433
+ ...tags.length > 0 ? { tags } : {},
29404
29434
  includeToolCategories: true,
29405
29435
  ...showCost ? { includeCostEstimates: true } : {},
29406
29436
  limit,
29407
29437
  cursor
29408
29438
  });
29409
29439
  const plays = page.plays;
29410
- const nextPage = page.hasMore && page.cursor ? `deepline plays list${categories ? ` --categories ${shellQuote3(categories)}` : ""}${limit ? ` --limit ${limit}` : ""}${showCost ? " --show-cost" : ""} --cursor ${shellQuote3(page.cursor)} --json` : null;
29440
+ if (tags.length > 0 && plays.length > 0 && plays.every((play) => play.tags === void 0)) {
29441
+ console.error(
29442
+ "This Deepline server does not support --tag and returned unfiltered results. Update the server, or filter with --categories."
29443
+ );
29444
+ return 1;
29445
+ }
29446
+ const nextPage = page.hasMore && page.cursor ? `deepline plays list${categories ? ` --categories ${shellQuote3(categories)}` : ""}${tags.map((tag) => ` --tag ${shellQuote3(tag)}`).join("")}${limit ? ` --limit ${limit}` : ""}${showCost ? " --show-cost" : ""} --cursor ${shellQuote3(page.cursor)} --json` : null;
29411
29447
  if (page.hasMore && !nextPage) {
29412
29448
  throw new Error(
29413
29449
  "Play list reported more results without a continuation cursor"
@@ -29417,6 +29453,7 @@ async function handlePlayList(args) {
29417
29453
  for (const play of plays) {
29418
29454
  const flags = [
29419
29455
  play.pinned ? "pinned" : null,
29456
+ ...(play.tags ?? []).map((tag) => `tag:${tag}`),
29420
29457
  ...(play.toolCategories ?? []).map((category) => `category:${category}`),
29421
29458
  play.origin === "prebuilt" || play.ownerType === "deepline" ? "prebuilt" : "owned",
29422
29459
  play.canEdit ? "editable" : "readonly",
@@ -30536,19 +30573,28 @@ Notes:
30536
30573
  is_truncated, next_cursor, and a next-page command. Use --limit to choose
30537
30574
  the page size and --cursor to continue with the same filters.
30538
30575
 
30576
+ --tag filters by the job a prebuilt play does; --categories filters by the
30577
+ tools it calls. Known tags: smb, find-prospects, qualify, contact-info,
30578
+ signals. Repeat --tag or pass a comma-separated list to widen the result.
30579
+
30539
30580
  Examples:
30540
30581
  deepline plays list
30582
+ deepline plays list --tag smb --json
30541
30583
  deepline plays search email --json
30542
30584
  `
30543
30585
  ).option("--limit <count>", "Page size").option("--cursor <cursor>", "Continue a previous page").option("--show-cost", "Include the per-row or per-run cost estimate").option("--json", "Emit JSON output. Also automatic when stdout is piped").option(
30544
30586
  "--categories <categories>",
30545
30587
  "Filter by comma-separated canonical tool categories"
30588
+ ).option(
30589
+ "--tag <tag...>",
30590
+ "Filter by the job the play does: smb, find-prospects, qualify, contact-info, signals"
30546
30591
  ).action(async (options) => {
30547
30592
  process.exitCode = await handlePlayList([
30548
30593
  ...options.limit ? ["--limit", options.limit] : [],
30549
30594
  ...options.cursor ? ["--cursor", options.cursor] : [],
30550
30595
  ...options.showCost ? ["--show-cost"] : [],
30551
30596
  ...options.categories ? ["--categories", options.categories] : [],
30597
+ ...(options.tag ?? []).flatMap((tag) => ["--tag", tag]),
30552
30598
  ...options.json ? ["--json"] : []
30553
30599
  ]);
30554
30600
  });
@@ -3046,7 +3046,7 @@ var SDK_RELEASE = {
3046
3046
  // getters keep their established compatibility behavior.
3047
3047
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
3048
3048
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
3049
- version: "0.3.195",
3049
+ version: "0.3.196",
3050
3050
  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.",
3051
3051
  packageCapabilities: {
3052
3052
  updatePreferences: 1
@@ -9106,6 +9106,12 @@ var DeeplineClient = class _DeeplineClient {
9106
9106
  if (options?.categories || options?.includeToolCategories) {
9107
9107
  params.set("include_tool_categories", "1");
9108
9108
  }
9109
+ if (options?.tags) {
9110
+ params.set(
9111
+ "tags",
9112
+ Array.isArray(options.tags) ? options.tags.join(",") : options.tags
9113
+ );
9114
+ }
9109
9115
  if (options?.includeArchived) params.set("include_archived", "1");
9110
9116
  if (options?.includeCostEstimates) {
9111
9117
  params.set("include_cost_estimates", "1");
@@ -29457,12 +29463,35 @@ function formatPlayCostEstimate(estimate) {
29457
29463
  const source = estimate.source === "observed" ? `observed from ${estimate.sampleRunCount} ${estimate.sampleRunCount === 1 ? "run" : "runs"}` : "static estimate";
29458
29464
  return `${credits} Deepline credits per ${unit} (${source})`;
29459
29465
  }
29466
+ var PREBUILT_PLAY_TAG_KEYS = [
29467
+ "smb",
29468
+ "find-prospects",
29469
+ "qualify",
29470
+ "contact-info",
29471
+ "signals"
29472
+ ];
29460
29473
  async function handlePlayList(args) {
29461
29474
  const jsonOutput = argsWantJson(args);
29462
29475
  const showCost = args.includes("--show-cost");
29463
29476
  const client2 = new DeeplineClient();
29464
29477
  const categoriesIndex = args.indexOf("--categories");
29465
29478
  const categories = categoriesIndex >= 0 ? args[categoriesIndex + 1]?.trim() : void 0;
29479
+ const tags = args.flatMap((arg, index) => arg === "--tag" ? [args[index + 1]] : []).flatMap((value) => (value ?? "").split(",")).map((value) => value.trim()).filter(Boolean);
29480
+ if (args.includes("--tag") && tags.length === 0) {
29481
+ console.error(
29482
+ `Pass a tag after --tag. Known tags: ${PREBUILT_PLAY_TAG_KEYS.join(", ")}.`
29483
+ );
29484
+ return 2;
29485
+ }
29486
+ const unknownTags = tags.filter(
29487
+ (tag) => !PREBUILT_PLAY_TAG_KEYS.includes(tag)
29488
+ );
29489
+ if (unknownTags.length > 0) {
29490
+ console.error(
29491
+ `Unknown play tag: ${unknownTags.join(", ")}. Known tags: ${PREBUILT_PLAY_TAG_KEYS.join(", ")}.`
29492
+ );
29493
+ return 2;
29494
+ }
29466
29495
  const limitIndex = args.indexOf("--limit");
29467
29496
  const cursorIndex = args.indexOf("--cursor");
29468
29497
  const limit = limitIndex >= 0 ? Number(args[limitIndex + 1]) : void 0;
@@ -29473,13 +29502,20 @@ async function handlePlayList(args) {
29473
29502
  }
29474
29503
  const page = await client2.listPlaysPage({
29475
29504
  categories,
29505
+ ...tags.length > 0 ? { tags } : {},
29476
29506
  includeToolCategories: true,
29477
29507
  ...showCost ? { includeCostEstimates: true } : {},
29478
29508
  limit,
29479
29509
  cursor
29480
29510
  });
29481
29511
  const plays = page.plays;
29482
- const nextPage = page.hasMore && page.cursor ? `deepline plays list${categories ? ` --categories ${shellQuote3(categories)}` : ""}${limit ? ` --limit ${limit}` : ""}${showCost ? " --show-cost" : ""} --cursor ${shellQuote3(page.cursor)} --json` : null;
29512
+ if (tags.length > 0 && plays.length > 0 && plays.every((play) => play.tags === void 0)) {
29513
+ console.error(
29514
+ "This Deepline server does not support --tag and returned unfiltered results. Update the server, or filter with --categories."
29515
+ );
29516
+ return 1;
29517
+ }
29518
+ const nextPage = page.hasMore && page.cursor ? `deepline plays list${categories ? ` --categories ${shellQuote3(categories)}` : ""}${tags.map((tag) => ` --tag ${shellQuote3(tag)}`).join("")}${limit ? ` --limit ${limit}` : ""}${showCost ? " --show-cost" : ""} --cursor ${shellQuote3(page.cursor)} --json` : null;
29483
29519
  if (page.hasMore && !nextPage) {
29484
29520
  throw new Error(
29485
29521
  "Play list reported more results without a continuation cursor"
@@ -29489,6 +29525,7 @@ async function handlePlayList(args) {
29489
29525
  for (const play of plays) {
29490
29526
  const flags = [
29491
29527
  play.pinned ? "pinned" : null,
29528
+ ...(play.tags ?? []).map((tag) => `tag:${tag}`),
29492
29529
  ...(play.toolCategories ?? []).map((category) => `category:${category}`),
29493
29530
  play.origin === "prebuilt" || play.ownerType === "deepline" ? "prebuilt" : "owned",
29494
29531
  play.canEdit ? "editable" : "readonly",
@@ -30608,19 +30645,28 @@ Notes:
30608
30645
  is_truncated, next_cursor, and a next-page command. Use --limit to choose
30609
30646
  the page size and --cursor to continue with the same filters.
30610
30647
 
30648
+ --tag filters by the job a prebuilt play does; --categories filters by the
30649
+ tools it calls. Known tags: smb, find-prospects, qualify, contact-info,
30650
+ signals. Repeat --tag or pass a comma-separated list to widen the result.
30651
+
30611
30652
  Examples:
30612
30653
  deepline plays list
30654
+ deepline plays list --tag smb --json
30613
30655
  deepline plays search email --json
30614
30656
  `
30615
30657
  ).option("--limit <count>", "Page size").option("--cursor <cursor>", "Continue a previous page").option("--show-cost", "Include the per-row or per-run cost estimate").option("--json", "Emit JSON output. Also automatic when stdout is piped").option(
30616
30658
  "--categories <categories>",
30617
30659
  "Filter by comma-separated canonical tool categories"
30660
+ ).option(
30661
+ "--tag <tag...>",
30662
+ "Filter by the job the play does: smb, find-prospects, qualify, contact-info, signals"
30618
30663
  ).action(async (options) => {
30619
30664
  process.exitCode = await handlePlayList([
30620
30665
  ...options.limit ? ["--limit", options.limit] : [],
30621
30666
  ...options.cursor ? ["--cursor", options.cursor] : [],
30622
30667
  ...options.showCost ? ["--show-cost"] : [],
30623
30668
  ...options.categories ? ["--categories", options.categories] : [],
30669
+ ...(options.tag ?? []).flatMap((tag) => ["--tag", tag]),
30624
30670
  ...options.json ? ["--json"] : []
30625
30671
  ]);
30626
30672
  });
@@ -2895,6 +2895,16 @@ type PlayDocflowSubgraph = {
2895
2895
  type PlayDocflowBinding = {
2896
2896
  nodeId: string;
2897
2897
  line: number;
2898
+ /**
2899
+ * The file this annotation was written in, when it did not come from the play
2900
+ * entry file. A play whose step program lives in a `-core` module has no
2901
+ * statement in its `.play.ts` to annotate, so its boxes could only ever be
2902
+ * sketches; annotations are read from the entry's import closure to fix that.
2903
+ *
2904
+ * `line` is only meaningful together with this: two files both have a line
2905
+ * 42, so any positional comparison must agree on the path first.
2906
+ */
2907
+ sourcePath?: string;
2898
2908
  label?: string;
2899
2909
  kind?: PlayDocflowNodeKind;
2900
2910
  /** Symbolic values read by this business node. Never an arbitrary JS expression. */
@@ -3020,6 +3030,24 @@ interface PlayStaticSourceRange {
3020
3030
  type PlayStaticSubstepMetadata = {
3021
3031
  conditional?: boolean;
3022
3032
  disabled?: boolean;
3033
+ /**
3034
+ * Where this substep was REACHED FROM, when the extractor resolved it by
3035
+ * following a call into another function — the range of the call expression
3036
+ * itself, in the file that made the call.
3037
+ *
3038
+ * The extractor hops through `resolveLocalCallable`, which is TypeScript
3039
+ * symbol resolution (`getSymbol()` / `getAliasedSymbol()`), so the callee may
3040
+ * live anywhere in the import closure. Its `sourceRange` then points at the
3041
+ * helper's body, which no annotation in the CALLING file can ever contain.
3042
+ * That is why a binding on `const identity = await resolveCompanyIdentity(…)`
3043
+ * could not reach the `ctx.tools.execute` inside it.
3044
+ *
3045
+ * Recorded as the OUTERMOST hop: unwinding stamps each level, so a tool three
3046
+ * helpers deep ends up carrying the call site in the annotated function
3047
+ * rather than an intermediate one. Absent whenever the substep was found
3048
+ * directly in the function being analyzed.
3049
+ */
3050
+ callSiteRange?: PlayStaticSourceRange;
3023
3051
  };
3024
3052
  /**
3025
3053
  * One arm of a conditional `control_flow` substep — an `if`/`else if`/`else`
@@ -2895,6 +2895,16 @@ type PlayDocflowSubgraph = {
2895
2895
  type PlayDocflowBinding = {
2896
2896
  nodeId: string;
2897
2897
  line: number;
2898
+ /**
2899
+ * The file this annotation was written in, when it did not come from the play
2900
+ * entry file. A play whose step program lives in a `-core` module has no
2901
+ * statement in its `.play.ts` to annotate, so its boxes could only ever be
2902
+ * sketches; annotations are read from the entry's import closure to fix that.
2903
+ *
2904
+ * `line` is only meaningful together with this: two files both have a line
2905
+ * 42, so any positional comparison must agree on the path first.
2906
+ */
2907
+ sourcePath?: string;
2898
2908
  label?: string;
2899
2909
  kind?: PlayDocflowNodeKind;
2900
2910
  /** Symbolic values read by this business node. Never an arbitrary JS expression. */
@@ -3020,6 +3030,24 @@ interface PlayStaticSourceRange {
3020
3030
  type PlayStaticSubstepMetadata = {
3021
3031
  conditional?: boolean;
3022
3032
  disabled?: boolean;
3033
+ /**
3034
+ * Where this substep was REACHED FROM, when the extractor resolved it by
3035
+ * following a call into another function — the range of the call expression
3036
+ * itself, in the file that made the call.
3037
+ *
3038
+ * The extractor hops through `resolveLocalCallable`, which is TypeScript
3039
+ * symbol resolution (`getSymbol()` / `getAliasedSymbol()`), so the callee may
3040
+ * live anywhere in the import closure. Its `sourceRange` then points at the
3041
+ * helper's body, which no annotation in the CALLING file can ever contain.
3042
+ * That is why a binding on `const identity = await resolveCompanyIdentity(…)`
3043
+ * could not reach the `ctx.tools.execute` inside it.
3044
+ *
3045
+ * Recorded as the OUTERMOST hop: unwinding stamps each level, so a tool three
3046
+ * helpers deep ends up carrying the call site in the annotated function
3047
+ * rather than an intermediate one. Absent whenever the substep was found
3048
+ * directly in the function being analyzed.
3049
+ */
3050
+ callSiteRange?: PlayStaticSourceRange;
3023
3051
  };
3024
3052
  /**
3025
3053
  * One arm of a conditional `control_flow` substep — an `if`/`else if`/`else`
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-4bYusxBr.mjs';
3
- export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-4bYusxBr.mjs';
2
+ import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-Dpd2hEet.mjs';
3
+ export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-Dpd2hEet.mjs';
4
4
  import { MonitorFleetDefinition } from './monitor-fleet-contract.mjs';
5
5
  export { AdmittedMonitorFleetAuthoringContract, MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG, MONITOR_FLEET_AUTHORING_CONTRACT_EDITION, MONITOR_FLEET_DOCUMENTATION, MONITOR_FLEET_FRONTIER_MAX_ROWS, MONITOR_FLEET_MAX_MEMBERS, MonitorFleetAuthoringContractEdition, MonitorFleetAuthoringContractResult, MonitorFleetColumn, MonitorFleetContractIssue, MonitorFleetExpression, MonitorFleetTemplate, admitMonitorFleetAuthoringContract, defineMonitorFleet, fleetColumn, fleetKey, lintMonitorFleetInput, validateMonitorFleetDefinition } from './monitor-fleet-contract.mjs';
6
6
  export { BatchMonitorInput, MonitorInputIssue, MonitorSpec as MonitorInputSpec, lintMonitorBatchInput, lintMonitorSpecTemplate, renderMonitorSpecTemplate } from './monitor-input-contract.mjs';
@@ -2246,6 +2246,14 @@ interface PlayListItem {
2246
2246
  description?: string | null;
2247
2247
  pinned?: boolean;
2248
2248
  toolCategories?: string[];
2249
+ /**
2250
+ * The job the play does, from Deepline's closed prebuilt tag vocabulary
2251
+ * (`smb`, `find-prospects`, `qualify`, `contact-info`, `signals`) — a
2252
+ * different question from `toolCategories`, which reports the tools it
2253
+ * calls. Empty for org-owned plays; absent from a server too old to report
2254
+ * it.
2255
+ */
2256
+ tags?: string[];
2249
2257
  origin?: 'prebuilt' | 'owned';
2250
2258
  ownerType?: 'deepline' | 'org';
2251
2259
  ownerSlug?: string;
@@ -2344,6 +2352,16 @@ interface PlayDescription {
2344
2352
  description?: string | null;
2345
2353
  pinned?: boolean;
2346
2354
  toolCategories?: string[];
2355
+ /**
2356
+ * What job this play does, as a closed vocabulary — `smb`,
2357
+ * `find-prospects`, `qualify`, `contact-info`, `signals`.
2358
+ *
2359
+ * Distinct from `toolCategories`, which is derived from the tool ids a play
2360
+ * calls and so describes its MACHINERY. A play that calls an email tool is
2361
+ * not thereby an email play; every SMB play calls one and none of them is.
2362
+ * Empty for org-owned plays, which carry no registry tag.
2363
+ */
2364
+ tags?: string[];
2347
2365
  origin?: 'prebuilt' | 'owned';
2348
2366
  ownerType?: 'deepline' | 'org';
2349
2367
  canEdit?: boolean;
@@ -3190,6 +3208,13 @@ type PlaysListOptions = {
3190
3208
  */
3191
3209
  grepMode?: 'all' | 'any' | 'phrase';
3192
3210
  categories?: string | string[];
3211
+ /**
3212
+ * Keep only plays carrying one of these tags — the job a play does, not the
3213
+ * tools it calls. Deepline's closed vocabulary today: `smb`,
3214
+ * `find-prospects`, `qualify`, `contact-info`, `signals`. Several tags widen
3215
+ * the result rather than narrowing it, because a play carries exactly one.
3216
+ */
3217
+ tags?: string | string[];
3193
3218
  includeToolCategories?: boolean;
3194
3219
  includeArchived?: boolean;
3195
3220
  includeCostEstimates?: boolean;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-4bYusxBr.js';
3
- export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-4bYusxBr.js';
2
+ import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-Dpd2hEet.js';
3
+ export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-Dpd2hEet.js';
4
4
  import { MonitorFleetDefinition } from './monitor-fleet-contract.js';
5
5
  export { AdmittedMonitorFleetAuthoringContract, MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG, MONITOR_FLEET_AUTHORING_CONTRACT_EDITION, MONITOR_FLEET_DOCUMENTATION, MONITOR_FLEET_FRONTIER_MAX_ROWS, MONITOR_FLEET_MAX_MEMBERS, MonitorFleetAuthoringContractEdition, MonitorFleetAuthoringContractResult, MonitorFleetColumn, MonitorFleetContractIssue, MonitorFleetExpression, MonitorFleetTemplate, admitMonitorFleetAuthoringContract, defineMonitorFleet, fleetColumn, fleetKey, lintMonitorFleetInput, validateMonitorFleetDefinition } from './monitor-fleet-contract.js';
6
6
  export { BatchMonitorInput, MonitorInputIssue, MonitorSpec as MonitorInputSpec, lintMonitorBatchInput, lintMonitorSpecTemplate, renderMonitorSpecTemplate } from './monitor-input-contract.js';
@@ -2246,6 +2246,14 @@ interface PlayListItem {
2246
2246
  description?: string | null;
2247
2247
  pinned?: boolean;
2248
2248
  toolCategories?: string[];
2249
+ /**
2250
+ * The job the play does, from Deepline's closed prebuilt tag vocabulary
2251
+ * (`smb`, `find-prospects`, `qualify`, `contact-info`, `signals`) — a
2252
+ * different question from `toolCategories`, which reports the tools it
2253
+ * calls. Empty for org-owned plays; absent from a server too old to report
2254
+ * it.
2255
+ */
2256
+ tags?: string[];
2249
2257
  origin?: 'prebuilt' | 'owned';
2250
2258
  ownerType?: 'deepline' | 'org';
2251
2259
  ownerSlug?: string;
@@ -2344,6 +2352,16 @@ interface PlayDescription {
2344
2352
  description?: string | null;
2345
2353
  pinned?: boolean;
2346
2354
  toolCategories?: string[];
2355
+ /**
2356
+ * What job this play does, as a closed vocabulary — `smb`,
2357
+ * `find-prospects`, `qualify`, `contact-info`, `signals`.
2358
+ *
2359
+ * Distinct from `toolCategories`, which is derived from the tool ids a play
2360
+ * calls and so describes its MACHINERY. A play that calls an email tool is
2361
+ * not thereby an email play; every SMB play calls one and none of them is.
2362
+ * Empty for org-owned plays, which carry no registry tag.
2363
+ */
2364
+ tags?: string[];
2347
2365
  origin?: 'prebuilt' | 'owned';
2348
2366
  ownerType?: 'deepline' | 'org';
2349
2367
  canEdit?: boolean;
@@ -3190,6 +3208,13 @@ type PlaysListOptions = {
3190
3208
  */
3191
3209
  grepMode?: 'all' | 'any' | 'phrase';
3192
3210
  categories?: string | string[];
3211
+ /**
3212
+ * Keep only plays carrying one of these tags — the job a play does, not the
3213
+ * tools it calls. Deepline's closed vocabulary today: `smb`,
3214
+ * `find-prospects`, `qualify`, `contact-info`, `signals`. Several tags widen
3215
+ * the result rather than narrowing it, because a play carries exactly one.
3216
+ */
3217
+ tags?: string | string[];
3193
3218
  includeToolCategories?: boolean;
3194
3219
  includeArchived?: boolean;
3195
3220
  includeCostEstimates?: boolean;
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.195",
867
+ version: "0.3.196",
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
@@ -6793,6 +6793,12 @@ var DeeplineClient = class _DeeplineClient {
6793
6793
  if (options?.categories || options?.includeToolCategories) {
6794
6794
  params.set("include_tool_categories", "1");
6795
6795
  }
6796
+ if (options?.tags) {
6797
+ params.set(
6798
+ "tags",
6799
+ Array.isArray(options.tags) ? options.tags.join(",") : options.tags
6800
+ );
6801
+ }
6796
6802
  if (options?.includeArchived) params.set("include_archived", "1");
6797
6803
  if (options?.includeCostEstimates) {
6798
6804
  params.set("include_cost_estimates", "1");
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.195",
771
+ version: "0.3.196",
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
@@ -6697,6 +6697,12 @@ var DeeplineClient = class _DeeplineClient {
6697
6697
  if (options?.categories || options?.includeToolCategories) {
6698
6698
  params.set("include_tool_categories", "1");
6699
6699
  }
6700
+ if (options?.tags) {
6701
+ params.set(
6702
+ "tags",
6703
+ Array.isArray(options.tags) ? options.tags.join(",") : options.tags
6704
+ );
6705
+ }
6700
6706
  if (options?.includeArchived) params.set("include_archived", "1");
6701
6707
  if (options?.includeCostEstimates) {
6702
6708
  params.set("include_cost_estimates", "1");
@@ -522,6 +522,7 @@
522
522
  "dist/bundling-sources/shared_libs/plays/ts-ast.ts",
523
523
  "dist/bundling-sources/shared_libs/plays/user-code-safety.ts",
524
524
  "dist/bundling-sources/shared_libs/plays/webhook-payload.ts",
525
+ "dist/bundling-sources/shared_libs/plays/workspace-bundle.ts",
525
526
  "dist/bundling-sources/shared_libs/product-notifications/catalog.ts",
526
527
  "dist/bundling-sources/shared_libs/product-notifications/configuration-draft.ts",
527
528
  "dist/bundling-sources/shared_libs/product-notifications/configuration.ts",
@@ -558,8 +559,8 @@
558
559
  "dist/cli/index.js",
559
560
  "dist/cli/index.mjs",
560
561
  "dist/cli/text-imports.d.ts",
561
- "dist/compiler-manifest-4bYusxBr.d.mts",
562
- "dist/compiler-manifest-4bYusxBr.d.ts",
562
+ "dist/compiler-manifest-Dpd2hEet.d.mts",
563
+ "dist/compiler-manifest-Dpd2hEet.d.ts",
563
564
  "dist/helpers.d.mts",
564
565
  "dist/helpers.d.ts",
565
566
  "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-4bYusxBr.mjs';
3
- export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-4bYusxBr.mjs';
2
+ import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-Dpd2hEet.mjs';
3
+ export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-Dpd2hEet.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-4bYusxBr.js';
3
- export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-4bYusxBr.js';
2
+ import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-Dpd2hEet.js';
3
+ export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-Dpd2hEet.js';
4
4
  import '@sinclair/typebox';
5
5
 
6
6
  type ImportedPlayDependency = {
@@ -1818,6 +1818,7 @@ var PLAY_DOCFLOW_ARMS = [
1818
1818
  ];
1819
1819
  var FLOW_START = /^\s*(?:flowchart|graph)\s+(LR|RL|TB|TD|BT)\s*$/i;
1820
1820
  var MERMAID_NODE = /^\s*\/\/\s*@mermaid-node\s+([A-Za-z][\w-]*)(?:\s+(.*))?$/;
1821
+ var MERMAID_NODE_HINT = /@mermaid-node/;
1821
1822
  var ATTRIBUTE = /([A-Za-z][\w-]*)\s*:\s*"([^"\n]*)"/y;
1822
1823
  var MERMAID_NODE_ATTRIBUTES = ["label", "type", "in", "out", "arm"];
1823
1824
  var MERMAID_NODE_ID = /^[A-Za-z][\w-]*/;
@@ -2228,7 +2229,7 @@ function materializeDocflow(block) {
2228
2229
  ...block.ignoredDirectives.length ? { ignoredDirectives: block.ignoredDirectives } : {}
2229
2230
  };
2230
2231
  }
2231
- function parsePlayDocflowFile(sourceCode) {
2232
+ function parsePlayDocflowFile(sourceCode, moduleSources) {
2232
2233
  const errors = [];
2233
2234
  const rawBlocks = [];
2234
2235
  JSDOC_BLOCK.lastIndex = 0;
@@ -2240,7 +2241,16 @@ function parsePlayDocflowFile(sourceCode) {
2240
2241
  }
2241
2242
  if (rawBlocks.length === 0) return { blocks: [], bindings: [], errors };
2242
2243
  const rejectedNodeIds = /* @__PURE__ */ new Set();
2243
- const bindings = parseDocflowBindings(sourceCode, errors, rejectedNodeIds);
2244
+ const annotationSources = [{ sourceCode }];
2245
+ for (const [sourcePath, moduleCode] of moduleSources ?? []) {
2246
+ if (!MERMAID_NODE_HINT.test(moduleCode)) continue;
2247
+ annotationSources.push({ sourceCode: moduleCode, sourcePath });
2248
+ }
2249
+ const bindings = parseDocflowBindings(
2250
+ annotationSources,
2251
+ errors,
2252
+ rejectedNodeIds
2253
+ );
2244
2254
  const parsedBlocks = [];
2245
2255
  for (const raw of rawBlocks) {
2246
2256
  const { exportName, diagram } = splitBlockExportHeader(raw.body);
@@ -2476,7 +2486,17 @@ function sourceLineStartsForDocflow(sourceCode) {
2476
2486
  }
2477
2487
  return starts;
2478
2488
  }
2479
- function parseDocflowBindings(sourceCode, errors, rejectedNodeIds) {
2489
+ function parseDocflowBindings(sources, errors, rejectedNodeIds) {
2490
+ const bindings = [];
2491
+ for (const source of sources) {
2492
+ bindings.push(
2493
+ ...parseDocflowBindingsInSource(source, errors, rejectedNodeIds)
2494
+ );
2495
+ }
2496
+ return bindings;
2497
+ }
2498
+ function parseDocflowBindingsInSource(source, errors, rejectedNodeIds) {
2499
+ const { sourceCode, sourcePath } = source;
2480
2500
  const lines = sourceCode.split(/\r?\n/);
2481
2501
  const bindings = [];
2482
2502
  for (let index = 0; index < lines.length; index += 1) {
@@ -2546,6 +2566,7 @@ function parseDocflowBindings(sourceCode, errors, rejectedNodeIds) {
2546
2566
  bindings.push({
2547
2567
  nodeId: id,
2548
2568
  line: nextLine + 1,
2569
+ ...sourcePath ? { sourcePath } : {},
2549
2570
  ...attributes.label ? { label: attributes.label } : {},
2550
2571
  ...kind ? { kind } : {},
2551
2572
  // Spread, never `arm: arm ?? undefined` — see `PlayDocflowEdge.arm`. An
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.195";
152
+ readonly version: "0.3.196";
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.195";
152
+ readonly version: "0.3.196";
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.195",
77
+ version: "0.3.196",
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.195",
51
+ version: "0.3.196",
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.195",
3
+ "version": "0.3.196",
4
4
  "description": "GTM data CLI and TypeScript SDK for coding agents",
5
5
  "license": "MIT",
6
6
  "homepage": "https://code.deepline.com",