deepline 0.1.79 → 0.1.80

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 (26) hide show
  1. package/dist/cli/index.js +68 -31
  2. package/dist/cli/index.mjs +68 -31
  3. package/dist/index.d.mts +9 -1
  4. package/dist/index.d.ts +9 -1
  5. package/dist/index.js +7 -4
  6. package/dist/index.mjs +7 -4
  7. package/dist/repo/apps/play-runner-workers/src/child-play-await.ts +192 -0
  8. package/dist/repo/apps/play-runner-workers/src/coordinator-entry.ts +1102 -1616
  9. package/dist/repo/apps/play-runner-workers/src/dedup-do.ts +506 -654
  10. package/dist/repo/apps/play-runner-workers/src/entry.ts +896 -354
  11. package/dist/repo/apps/play-runner-workers/src/workflow-retry-state.ts +8 -2
  12. package/dist/repo/sdk/src/client.ts +9 -2
  13. package/dist/repo/sdk/src/release.ts +2 -2
  14. package/dist/repo/sdk/src/types.ts +5 -0
  15. package/dist/repo/shared_libs/play-runtime/governor/coordinator-rate-state-backend.ts +231 -0
  16. package/dist/repo/shared_libs/play-runtime/governor/governor.ts +376 -0
  17. package/dist/repo/shared_libs/play-runtime/governor/policy.ts +179 -0
  18. package/dist/repo/shared_libs/play-runtime/governor/rate-state-backend.ts +87 -0
  19. package/dist/repo/shared_libs/play-runtime/run-failure.ts +12 -0
  20. package/dist/repo/shared_libs/play-runtime/scheduler-backend.ts +24 -0
  21. package/dist/repo/shared_libs/play-runtime/submit-limits.ts +35 -0
  22. package/dist/repo/shared_libs/plays/bundling/index.ts +4 -12
  23. package/dist/repo/shared_libs/plays/bundling/limits.ts +29 -0
  24. package/dist/repo/shared_libs/plays/static-pipeline.ts +56 -3
  25. package/dist/repo/shared_libs/temporal/constants.ts +38 -0
  26. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -229,10 +229,10 @@ var import_node_path2 = require("path");
229
229
 
230
230
  // src/release.ts
231
231
  var SDK_RELEASE = {
232
- version: "0.1.79",
232
+ version: "0.1.80",
233
233
  apiContract: "2026-06-dataset-column-cell-stale-hard-cutover",
234
234
  supportPolicy: {
235
- latest: "0.1.79",
235
+ latest: "0.1.80",
236
236
  minimumSupported: "0.1.53",
237
237
  deprecatedBelow: "0.1.53"
238
238
  }
@@ -869,6 +869,7 @@ var DeeplineClient = class {
869
869
  params.set("grep", options.grep.trim());
870
870
  params.set("grep_mode", options.grepMode ?? "all");
871
871
  }
872
+ params.set("compact", options?.compact === true ? "true" : "false");
872
873
  const suffix = params.toString() ? `?${params.toString()}` : "";
873
874
  const res = await this.http.get(
874
875
  `/api/v2/tools${suffix}`
@@ -1424,6 +1425,7 @@ var DeeplineClient = class {
1424
1425
  if (status) {
1425
1426
  params.set("status", status);
1426
1427
  }
1428
+ params.set("compact", "true");
1427
1429
  const response = await this.http.get(
1428
1430
  `/api/v2/runs?${params.toString()}`
1429
1431
  );
@@ -1588,10 +1590,11 @@ var DeeplineClient = class {
1588
1590
  * @param name - Play name
1589
1591
  * @returns Version list (newest first)
1590
1592
  */
1591
- async listPlayVersions(name) {
1593
+ async listPlayVersions(name, options) {
1592
1594
  const encodedName = encodeURIComponent(name);
1595
+ const suffix = options?.full ? "?full=true" : "";
1593
1596
  const response = await this.http.get(
1594
- `/api/v2/plays/${encodedName}/versions`
1597
+ `/api/v2/plays/${encodedName}/versions${suffix}`
1595
1598
  );
1596
1599
  return response.versions ?? [];
1597
1600
  }
@@ -2866,9 +2869,9 @@ function recentUsageLines(entries) {
2866
2869
  for (const entry of entries) {
2867
2870
  const op = `${humanize(entry.provider)} ${humanize(entry.operation)}`.trim();
2868
2871
  const charge = entry.billing_mode === "no_bill" ? "free" : `${entry.credits ?? 0} cr`;
2869
- const status = entry.status || "completed";
2872
+ const state = entry.charge_state === "temporary_hold" ? "temporary hold, awaiting actual usage" : entry.status || "completed";
2870
2873
  lines.push(
2871
- `${op} | ${charge} | ${status} | ${entry.created_at || "unknown"}`
2874
+ `${op} | ${charge} | ${state} | ${entry.created_at || "unknown"}`
2872
2875
  );
2873
2876
  }
2874
2877
  return lines;
@@ -2952,9 +2955,12 @@ async function handleUsage(options) {
2952
2955
  const usage = payload.usage ?? {};
2953
2956
  const quota = payload.quota ?? {};
2954
2957
  const recent = payload.recent ?? {};
2958
+ const last30Usage = usage.last_30_days_usage_credits ?? usage.month_spent_credits;
2959
+ const temporaryHolds = Number(usage.temporary_hold_credits ?? 0);
2955
2960
  const lines = [
2956
2961
  `Balance: ${payload.balance ?? "(unknown)"}`,
2957
- `Last 30 days spent: ${usage.month_spent_credits ?? "(unknown)"}`,
2962
+ `Last 30 days usage: ${last30Usage ?? "(unknown)"}`,
2963
+ ...Number.isFinite(temporaryHolds) && temporaryHolds > 0 ? [`Temporary holds: ${temporaryHolds}`] : [],
2958
2964
  `Monthly limit: ${quota.enabled ? quota.monthly_credits_limit ?? "(unknown)" : "off"}`,
2959
2965
  ...recentUsageLines(
2960
2966
  Array.isArray(recent.entries) ? recent.entries : []
@@ -4417,10 +4423,12 @@ function validatePlaySourceFilesHaveNoInlineSecrets(sourceFiles) {
4417
4423
  }
4418
4424
  }
4419
4425
 
4420
- // ../shared_libs/plays/bundling/index.ts
4421
- var PLAY_BUNDLE_CACHE_VERSION = 24;
4426
+ // ../shared_libs/plays/bundling/limits.ts
4422
4427
  var MAX_PLAY_BUNDLE_BYTES = 30 * 1024 * 1024;
4423
4428
  var MAX_ESM_WORKERS_BUNDLE_BYTES = 115e4;
4429
+
4430
+ // ../shared_libs/plays/bundling/index.ts
4431
+ var PLAY_BUNDLE_CACHE_VERSION = 24;
4424
4432
  var PLAY_ARTIFACT_CACHE_DIR = (0, import_node_path8.join)(
4425
4433
  (0, import_node_os5.tmpdir)(),
4426
4434
  `deepline-play-artifacts-v${PLAY_BUNDLE_CACHE_VERSION}`
@@ -8560,13 +8568,20 @@ async function waitForPlayCompletionByStream(input2) {
8560
8568
  progress: input2.progress
8561
8569
  });
8562
8570
  }
8571
+ const finalStatus = getFinalStatusFromLiveEvent(event);
8572
+ if (finalStatus) {
8573
+ return input2.dashboardUrl ? { ...finalStatus, dashboardUrl: input2.dashboardUrl } : finalStatus;
8574
+ }
8563
8575
  const status = getStatusFromLiveEvent(event);
8564
8576
  if (status && TERMINAL_PLAY_STATUSES2.has(status)) {
8565
- const finalStatus = await input2.client.getPlayStatus(input2.workflowId, {
8566
- billing: false
8567
- });
8568
- if (TERMINAL_PLAY_STATUSES2.has(finalStatus.status)) {
8569
- return input2.dashboardUrl ? { ...finalStatus, dashboardUrl: input2.dashboardUrl } : finalStatus;
8577
+ const refreshedStatus = await input2.client.getPlayStatus(
8578
+ input2.workflowId,
8579
+ {
8580
+ billing: false
8581
+ }
8582
+ );
8583
+ if (TERMINAL_PLAY_STATUSES2.has(refreshedStatus.status)) {
8584
+ return input2.dashboardUrl ? { ...refreshedStatus, dashboardUrl: input2.dashboardUrl } : refreshedStatus;
8570
8585
  }
8571
8586
  }
8572
8587
  }
@@ -9607,7 +9622,7 @@ function writePlayResult(status, jsonOutput, options) {
9607
9622
  );
9608
9623
  }
9609
9624
  async function resolvePlayRunOutputStatus(input2) {
9610
- if (!getPlayRunPackage(input2.status)) {
9625
+ if (!input2.fullJson || !getPlayRunPackage(input2.status)) {
9611
9626
  return input2.status;
9612
9627
  }
9613
9628
  const runId = input2.status.runId;
@@ -10824,7 +10839,7 @@ async function handleRunsList(args) {
10824
10839
  for (let index = 0; index < args.length; index += 1) {
10825
10840
  const arg = args[index];
10826
10841
  if ((arg === "--play" || arg === "--name") && args[index + 1]) {
10827
- playName = parseReferencedPlayTarget2(args[++index]).playName;
10842
+ playName = args[++index].trim();
10828
10843
  continue;
10829
10844
  }
10830
10845
  if (arg === "--status" && args[index + 1]) {
@@ -11213,7 +11228,7 @@ async function handlePlayList(args) {
11213
11228
  const reference = formatPlayListReference(play);
11214
11229
  process.stdout.write(` ${reference}${flags ? ` [${flags}]` : ""}
11215
11230
  `);
11216
- if (play.inputSchema) {
11231
+ if (play.inputSchema || play.hasInputSchema) {
11217
11232
  process.stdout.write(" inputSchema: yes\n");
11218
11233
  }
11219
11234
  process.stdout.write(` run: deepline plays run ${reference} --watch
@@ -11566,22 +11581,42 @@ async function handlePlayPublish(args) {
11566
11581
  }
11567
11582
  let graph;
11568
11583
  try {
11569
- graph = await collectBundledPlayGraph((0, import_node_path12.resolve)(playName));
11570
- await compileBundledPlayGraphManifests(client, graph);
11571
- await publishImportedPlayDependencies(client, graph);
11584
+ graph = await traceCliSpan(
11585
+ "cli.play_publish_bundle_graph",
11586
+ { targetKind: "file" },
11587
+ () => collectBundledPlayGraph((0, import_node_path12.resolve)(playName))
11588
+ );
11589
+ await traceCliSpan(
11590
+ "cli.play_publish_compile_manifests",
11591
+ { targetKind: "file", nodeCount: graph.nodes.size },
11592
+ () => compileBundledPlayGraphManifests(client, graph)
11593
+ );
11594
+ await traceCliSpan(
11595
+ "cli.play_publish_imports",
11596
+ { targetKind: "file", nodeCount: graph.nodes.size },
11597
+ () => publishImportedPlayDependencies(client, graph)
11598
+ );
11572
11599
  } catch (error) {
11573
11600
  console.error(error instanceof Error ? error.message : String(error));
11574
11601
  return 1;
11575
11602
  }
11576
11603
  const rootPlayName = graph.root.playName ?? extractPlayName(graph.root.sourceCode, graph.root.filePath);
11577
- const published = await client.registerPlayArtifact({
11578
- name: rootPlayName,
11579
- sourceCode: graph.root.sourceCode,
11580
- sourceFiles: graph.root.sourceFiles,
11581
- artifact: graph.root.artifact,
11582
- compilerManifest: requireCompilerManifest(graph.root),
11583
- publish: true
11584
- });
11604
+ const published = await traceCliSpan(
11605
+ "cli.play_publish_register_root",
11606
+ {
11607
+ targetKind: "file",
11608
+ playName: rootPlayName,
11609
+ artifactHash: graph.root.artifact.artifactHash
11610
+ },
11611
+ () => client.registerPlayArtifact({
11612
+ name: rootPlayName,
11613
+ sourceCode: graph.root.sourceCode,
11614
+ sourceFiles: graph.root.sourceFiles,
11615
+ artifact: graph.root.artifact,
11616
+ compilerManifest: requireCompilerManifest(graph.root),
11617
+ publish: true
11618
+ })
11619
+ );
11585
11620
  process.stdout.write(
11586
11621
  `${JSON.stringify({
11587
11622
  success: true,
@@ -14038,10 +14073,11 @@ async function listTools(args) {
14038
14073
  const client = new DeeplineClient();
14039
14074
  const categoryArgIndex = args.findIndex((arg) => arg === "--categories");
14040
14075
  const categoryFilter = categoryArgIndex >= 0 ? args[categoryArgIndex + 1] : "";
14041
- const compact = args.includes("--compact") || !args.includes("--json");
14076
+ const compact = !args.includes("--full");
14042
14077
  const requestedCategories = categoryFilter ? categoryFilter.split(",").map((item) => item.trim()).filter(Boolean) : [];
14043
14078
  const items = (await client.listTools({
14044
- ...categoryFilter ? { categories: categoryFilter } : {}
14079
+ ...categoryFilter ? { categories: categoryFilter } : {},
14080
+ compact
14045
14081
  })).map(toListedTool).filter(
14046
14082
  (item) => requestedCategories.length === 0 || requestedCategories.some(
14047
14083
  (category) => item.categories.includes(category)
@@ -14116,7 +14152,8 @@ async function grepTools(queryInput, options = {}) {
14116
14152
  const tools = (await client.listTools({
14117
14153
  grep: query,
14118
14154
  grepMode: mode,
14119
- ...options.categories ? { categories: options.categories } : {}
14155
+ ...options.categories ? { categories: options.categories } : {},
14156
+ compact: options.compact ?? true
14120
14157
  })).map(toListedTool).filter(
14121
14158
  (item) => requestedCategories.length === 0 || requestedCategories.some(
14122
14159
  (category) => item.categories.includes(category)
@@ -206,10 +206,10 @@ import { join as join2 } from "path";
206
206
 
207
207
  // src/release.ts
208
208
  var SDK_RELEASE = {
209
- version: "0.1.79",
209
+ version: "0.1.80",
210
210
  apiContract: "2026-06-dataset-column-cell-stale-hard-cutover",
211
211
  supportPolicy: {
212
- latest: "0.1.79",
212
+ latest: "0.1.80",
213
213
  minimumSupported: "0.1.53",
214
214
  deprecatedBelow: "0.1.53"
215
215
  }
@@ -846,6 +846,7 @@ var DeeplineClient = class {
846
846
  params.set("grep", options.grep.trim());
847
847
  params.set("grep_mode", options.grepMode ?? "all");
848
848
  }
849
+ params.set("compact", options?.compact === true ? "true" : "false");
849
850
  const suffix = params.toString() ? `?${params.toString()}` : "";
850
851
  const res = await this.http.get(
851
852
  `/api/v2/tools${suffix}`
@@ -1401,6 +1402,7 @@ var DeeplineClient = class {
1401
1402
  if (status) {
1402
1403
  params.set("status", status);
1403
1404
  }
1405
+ params.set("compact", "true");
1404
1406
  const response = await this.http.get(
1405
1407
  `/api/v2/runs?${params.toString()}`
1406
1408
  );
@@ -1565,10 +1567,11 @@ var DeeplineClient = class {
1565
1567
  * @param name - Play name
1566
1568
  * @returns Version list (newest first)
1567
1569
  */
1568
- async listPlayVersions(name) {
1570
+ async listPlayVersions(name, options) {
1569
1571
  const encodedName = encodeURIComponent(name);
1572
+ const suffix = options?.full ? "?full=true" : "";
1570
1573
  const response = await this.http.get(
1571
- `/api/v2/plays/${encodedName}/versions`
1574
+ `/api/v2/plays/${encodedName}/versions${suffix}`
1572
1575
  );
1573
1576
  return response.versions ?? [];
1574
1577
  }
@@ -2849,9 +2852,9 @@ function recentUsageLines(entries) {
2849
2852
  for (const entry of entries) {
2850
2853
  const op = `${humanize(entry.provider)} ${humanize(entry.operation)}`.trim();
2851
2854
  const charge = entry.billing_mode === "no_bill" ? "free" : `${entry.credits ?? 0} cr`;
2852
- const status = entry.status || "completed";
2855
+ const state = entry.charge_state === "temporary_hold" ? "temporary hold, awaiting actual usage" : entry.status || "completed";
2853
2856
  lines.push(
2854
- `${op} | ${charge} | ${status} | ${entry.created_at || "unknown"}`
2857
+ `${op} | ${charge} | ${state} | ${entry.created_at || "unknown"}`
2855
2858
  );
2856
2859
  }
2857
2860
  return lines;
@@ -2935,9 +2938,12 @@ async function handleUsage(options) {
2935
2938
  const usage = payload.usage ?? {};
2936
2939
  const quota = payload.quota ?? {};
2937
2940
  const recent = payload.recent ?? {};
2941
+ const last30Usage = usage.last_30_days_usage_credits ?? usage.month_spent_credits;
2942
+ const temporaryHolds = Number(usage.temporary_hold_credits ?? 0);
2938
2943
  const lines = [
2939
2944
  `Balance: ${payload.balance ?? "(unknown)"}`,
2940
- `Last 30 days spent: ${usage.month_spent_credits ?? "(unknown)"}`,
2945
+ `Last 30 days usage: ${last30Usage ?? "(unknown)"}`,
2946
+ ...Number.isFinite(temporaryHolds) && temporaryHolds > 0 ? [`Temporary holds: ${temporaryHolds}`] : [],
2941
2947
  `Monthly limit: ${quota.enabled ? quota.monthly_credits_limit ?? "(unknown)" : "off"}`,
2942
2948
  ...recentUsageLines(
2943
2949
  Array.isArray(recent.entries) ? recent.entries : []
@@ -4413,10 +4419,12 @@ function validatePlaySourceFilesHaveNoInlineSecrets(sourceFiles) {
4413
4419
  }
4414
4420
  }
4415
4421
 
4416
- // ../shared_libs/plays/bundling/index.ts
4417
- var PLAY_BUNDLE_CACHE_VERSION = 24;
4422
+ // ../shared_libs/plays/bundling/limits.ts
4418
4423
  var MAX_PLAY_BUNDLE_BYTES = 30 * 1024 * 1024;
4419
4424
  var MAX_ESM_WORKERS_BUNDLE_BYTES = 115e4;
4425
+
4426
+ // ../shared_libs/plays/bundling/index.ts
4427
+ var PLAY_BUNDLE_CACHE_VERSION = 24;
4420
4428
  var PLAY_ARTIFACT_CACHE_DIR = join4(
4421
4429
  tmpdir(),
4422
4430
  `deepline-play-artifacts-v${PLAY_BUNDLE_CACHE_VERSION}`
@@ -8563,13 +8571,20 @@ async function waitForPlayCompletionByStream(input2) {
8563
8571
  progress: input2.progress
8564
8572
  });
8565
8573
  }
8574
+ const finalStatus = getFinalStatusFromLiveEvent(event);
8575
+ if (finalStatus) {
8576
+ return input2.dashboardUrl ? { ...finalStatus, dashboardUrl: input2.dashboardUrl } : finalStatus;
8577
+ }
8566
8578
  const status = getStatusFromLiveEvent(event);
8567
8579
  if (status && TERMINAL_PLAY_STATUSES2.has(status)) {
8568
- const finalStatus = await input2.client.getPlayStatus(input2.workflowId, {
8569
- billing: false
8570
- });
8571
- if (TERMINAL_PLAY_STATUSES2.has(finalStatus.status)) {
8572
- return input2.dashboardUrl ? { ...finalStatus, dashboardUrl: input2.dashboardUrl } : finalStatus;
8580
+ const refreshedStatus = await input2.client.getPlayStatus(
8581
+ input2.workflowId,
8582
+ {
8583
+ billing: false
8584
+ }
8585
+ );
8586
+ if (TERMINAL_PLAY_STATUSES2.has(refreshedStatus.status)) {
8587
+ return input2.dashboardUrl ? { ...refreshedStatus, dashboardUrl: input2.dashboardUrl } : refreshedStatus;
8573
8588
  }
8574
8589
  }
8575
8590
  }
@@ -9610,7 +9625,7 @@ function writePlayResult(status, jsonOutput, options) {
9610
9625
  );
9611
9626
  }
9612
9627
  async function resolvePlayRunOutputStatus(input2) {
9613
- if (!getPlayRunPackage(input2.status)) {
9628
+ if (!input2.fullJson || !getPlayRunPackage(input2.status)) {
9614
9629
  return input2.status;
9615
9630
  }
9616
9631
  const runId = input2.status.runId;
@@ -10827,7 +10842,7 @@ async function handleRunsList(args) {
10827
10842
  for (let index = 0; index < args.length; index += 1) {
10828
10843
  const arg = args[index];
10829
10844
  if ((arg === "--play" || arg === "--name") && args[index + 1]) {
10830
- playName = parseReferencedPlayTarget2(args[++index]).playName;
10845
+ playName = args[++index].trim();
10831
10846
  continue;
10832
10847
  }
10833
10848
  if (arg === "--status" && args[index + 1]) {
@@ -11216,7 +11231,7 @@ async function handlePlayList(args) {
11216
11231
  const reference = formatPlayListReference(play);
11217
11232
  process.stdout.write(` ${reference}${flags ? ` [${flags}]` : ""}
11218
11233
  `);
11219
- if (play.inputSchema) {
11234
+ if (play.inputSchema || play.hasInputSchema) {
11220
11235
  process.stdout.write(" inputSchema: yes\n");
11221
11236
  }
11222
11237
  process.stdout.write(` run: deepline plays run ${reference} --watch
@@ -11569,22 +11584,42 @@ async function handlePlayPublish(args) {
11569
11584
  }
11570
11585
  let graph;
11571
11586
  try {
11572
- graph = await collectBundledPlayGraph(resolve10(playName));
11573
- await compileBundledPlayGraphManifests(client, graph);
11574
- await publishImportedPlayDependencies(client, graph);
11587
+ graph = await traceCliSpan(
11588
+ "cli.play_publish_bundle_graph",
11589
+ { targetKind: "file" },
11590
+ () => collectBundledPlayGraph(resolve10(playName))
11591
+ );
11592
+ await traceCliSpan(
11593
+ "cli.play_publish_compile_manifests",
11594
+ { targetKind: "file", nodeCount: graph.nodes.size },
11595
+ () => compileBundledPlayGraphManifests(client, graph)
11596
+ );
11597
+ await traceCliSpan(
11598
+ "cli.play_publish_imports",
11599
+ { targetKind: "file", nodeCount: graph.nodes.size },
11600
+ () => publishImportedPlayDependencies(client, graph)
11601
+ );
11575
11602
  } catch (error) {
11576
11603
  console.error(error instanceof Error ? error.message : String(error));
11577
11604
  return 1;
11578
11605
  }
11579
11606
  const rootPlayName = graph.root.playName ?? extractPlayName(graph.root.sourceCode, graph.root.filePath);
11580
- const published = await client.registerPlayArtifact({
11581
- name: rootPlayName,
11582
- sourceCode: graph.root.sourceCode,
11583
- sourceFiles: graph.root.sourceFiles,
11584
- artifact: graph.root.artifact,
11585
- compilerManifest: requireCompilerManifest(graph.root),
11586
- publish: true
11587
- });
11607
+ const published = await traceCliSpan(
11608
+ "cli.play_publish_register_root",
11609
+ {
11610
+ targetKind: "file",
11611
+ playName: rootPlayName,
11612
+ artifactHash: graph.root.artifact.artifactHash
11613
+ },
11614
+ () => client.registerPlayArtifact({
11615
+ name: rootPlayName,
11616
+ sourceCode: graph.root.sourceCode,
11617
+ sourceFiles: graph.root.sourceFiles,
11618
+ artifact: graph.root.artifact,
11619
+ compilerManifest: requireCompilerManifest(graph.root),
11620
+ publish: true
11621
+ })
11622
+ );
11588
11623
  process.stdout.write(
11589
11624
  `${JSON.stringify({
11590
11625
  success: true,
@@ -14041,10 +14076,11 @@ async function listTools(args) {
14041
14076
  const client = new DeeplineClient();
14042
14077
  const categoryArgIndex = args.findIndex((arg) => arg === "--categories");
14043
14078
  const categoryFilter = categoryArgIndex >= 0 ? args[categoryArgIndex + 1] : "";
14044
- const compact = args.includes("--compact") || !args.includes("--json");
14079
+ const compact = !args.includes("--full");
14045
14080
  const requestedCategories = categoryFilter ? categoryFilter.split(",").map((item) => item.trim()).filter(Boolean) : [];
14046
14081
  const items = (await client.listTools({
14047
- ...categoryFilter ? { categories: categoryFilter } : {}
14082
+ ...categoryFilter ? { categories: categoryFilter } : {},
14083
+ compact
14048
14084
  })).map(toListedTool).filter(
14049
14085
  (item) => requestedCategories.length === 0 || requestedCategories.some(
14050
14086
  (category) => item.categories.includes(category)
@@ -14119,7 +14155,8 @@ async function grepTools(queryInput, options = {}) {
14119
14155
  const tools = (await client.listTools({
14120
14156
  grep: query,
14121
14157
  grepMode: mode,
14122
- ...options.categories ? { categories: options.categories } : {}
14158
+ ...options.categories ? { categories: options.categories } : {},
14159
+ compact: options.compact ?? true
14123
14160
  })).map(toListedTool).filter(
14124
14161
  (item) => requestedCategories.length === 0 || requestedCategories.some(
14125
14162
  (category) => item.categories.includes(category)
package/dist/index.d.mts CHANGED
@@ -305,6 +305,10 @@ interface ToolDefinition {
305
305
  operationId?: string;
306
306
  /** Alternative names that resolve to this tool. */
307
307
  operationAliases?: string[];
308
+ /** Whether detailed input schema is available from `tools describe`. */
309
+ hasInputSchema?: boolean;
310
+ /** Whether detailed output schema is available from `tools describe`. */
311
+ hasOutputSchema?: boolean;
308
312
  /** JSON Schema describing the tool's input parameters. */
309
313
  inputSchema?: Record<string, unknown>;
310
314
  /** JSON Schema describing the tool's output shape. */
@@ -796,6 +800,7 @@ interface PlayListItem {
796
800
  currentPublishedVersion?: number | null;
797
801
  tableNamespace?: string | null;
798
802
  isDraftDirty?: boolean;
803
+ hasInputSchema?: boolean;
799
804
  inputSchema?: Record<string, unknown> | null;
800
805
  outputSchema?: Record<string, unknown> | null;
801
806
  staticPipeline?: unknown;
@@ -1263,6 +1268,7 @@ declare class DeeplineClient {
1263
1268
  categories?: string;
1264
1269
  grep?: string;
1265
1270
  grepMode?: 'all' | 'any' | 'phrase';
1271
+ compact?: boolean;
1266
1272
  }): Promise<ToolDefinition[]>;
1267
1273
  /**
1268
1274
  * Search available tools using Deepline's ranked backend search.
@@ -1676,7 +1682,9 @@ declare class DeeplineClient {
1676
1682
  * @param name - Play name
1677
1683
  * @returns Version list (newest first)
1678
1684
  */
1679
- listPlayVersions(name: string): Promise<PlayRevisionSummary[]>;
1685
+ listPlayVersions(name: string, options?: {
1686
+ full?: boolean;
1687
+ }): Promise<PlayRevisionSummary[]>;
1680
1688
  /**
1681
1689
  * Make a play revision live.
1682
1690
  *
package/dist/index.d.ts CHANGED
@@ -305,6 +305,10 @@ interface ToolDefinition {
305
305
  operationId?: string;
306
306
  /** Alternative names that resolve to this tool. */
307
307
  operationAliases?: string[];
308
+ /** Whether detailed input schema is available from `tools describe`. */
309
+ hasInputSchema?: boolean;
310
+ /** Whether detailed output schema is available from `tools describe`. */
311
+ hasOutputSchema?: boolean;
308
312
  /** JSON Schema describing the tool's input parameters. */
309
313
  inputSchema?: Record<string, unknown>;
310
314
  /** JSON Schema describing the tool's output shape. */
@@ -796,6 +800,7 @@ interface PlayListItem {
796
800
  currentPublishedVersion?: number | null;
797
801
  tableNamespace?: string | null;
798
802
  isDraftDirty?: boolean;
803
+ hasInputSchema?: boolean;
799
804
  inputSchema?: Record<string, unknown> | null;
800
805
  outputSchema?: Record<string, unknown> | null;
801
806
  staticPipeline?: unknown;
@@ -1263,6 +1268,7 @@ declare class DeeplineClient {
1263
1268
  categories?: string;
1264
1269
  grep?: string;
1265
1270
  grepMode?: 'all' | 'any' | 'phrase';
1271
+ compact?: boolean;
1266
1272
  }): Promise<ToolDefinition[]>;
1267
1273
  /**
1268
1274
  * Search available tools using Deepline's ranked backend search.
@@ -1676,7 +1682,9 @@ declare class DeeplineClient {
1676
1682
  * @param name - Play name
1677
1683
  * @returns Version list (newest first)
1678
1684
  */
1679
- listPlayVersions(name: string): Promise<PlayRevisionSummary[]>;
1685
+ listPlayVersions(name: string, options?: {
1686
+ full?: boolean;
1687
+ }): Promise<PlayRevisionSummary[]>;
1680
1688
  /**
1681
1689
  * Make a play revision live.
1682
1690
  *
package/dist/index.js CHANGED
@@ -241,10 +241,10 @@ var import_node_path2 = require("path");
241
241
 
242
242
  // src/release.ts
243
243
  var SDK_RELEASE = {
244
- version: "0.1.79",
244
+ version: "0.1.80",
245
245
  apiContract: "2026-06-dataset-column-cell-stale-hard-cutover",
246
246
  supportPolicy: {
247
- latest: "0.1.79",
247
+ latest: "0.1.80",
248
248
  minimumSupported: "0.1.53",
249
249
  deprecatedBelow: "0.1.53"
250
250
  }
@@ -881,6 +881,7 @@ var DeeplineClient = class {
881
881
  params.set("grep", options.grep.trim());
882
882
  params.set("grep_mode", options.grepMode ?? "all");
883
883
  }
884
+ params.set("compact", options?.compact === true ? "true" : "false");
884
885
  const suffix = params.toString() ? `?${params.toString()}` : "";
885
886
  const res = await this.http.get(
886
887
  `/api/v2/tools${suffix}`
@@ -1436,6 +1437,7 @@ var DeeplineClient = class {
1436
1437
  if (status) {
1437
1438
  params.set("status", status);
1438
1439
  }
1440
+ params.set("compact", "true");
1439
1441
  const response = await this.http.get(
1440
1442
  `/api/v2/runs?${params.toString()}`
1441
1443
  );
@@ -1600,10 +1602,11 @@ var DeeplineClient = class {
1600
1602
  * @param name - Play name
1601
1603
  * @returns Version list (newest first)
1602
1604
  */
1603
- async listPlayVersions(name) {
1605
+ async listPlayVersions(name, options) {
1604
1606
  const encodedName = encodeURIComponent(name);
1607
+ const suffix = options?.full ? "?full=true" : "";
1605
1608
  const response = await this.http.get(
1606
- `/api/v2/plays/${encodedName}/versions`
1609
+ `/api/v2/plays/${encodedName}/versions${suffix}`
1607
1610
  );
1608
1611
  return response.versions ?? [];
1609
1612
  }
package/dist/index.mjs CHANGED
@@ -179,10 +179,10 @@ import { join as join2 } from "path";
179
179
 
180
180
  // src/release.ts
181
181
  var SDK_RELEASE = {
182
- version: "0.1.79",
182
+ version: "0.1.80",
183
183
  apiContract: "2026-06-dataset-column-cell-stale-hard-cutover",
184
184
  supportPolicy: {
185
- latest: "0.1.79",
185
+ latest: "0.1.80",
186
186
  minimumSupported: "0.1.53",
187
187
  deprecatedBelow: "0.1.53"
188
188
  }
@@ -819,6 +819,7 @@ var DeeplineClient = class {
819
819
  params.set("grep", options.grep.trim());
820
820
  params.set("grep_mode", options.grepMode ?? "all");
821
821
  }
822
+ params.set("compact", options?.compact === true ? "true" : "false");
822
823
  const suffix = params.toString() ? `?${params.toString()}` : "";
823
824
  const res = await this.http.get(
824
825
  `/api/v2/tools${suffix}`
@@ -1374,6 +1375,7 @@ var DeeplineClient = class {
1374
1375
  if (status) {
1375
1376
  params.set("status", status);
1376
1377
  }
1378
+ params.set("compact", "true");
1377
1379
  const response = await this.http.get(
1378
1380
  `/api/v2/runs?${params.toString()}`
1379
1381
  );
@@ -1538,10 +1540,11 @@ var DeeplineClient = class {
1538
1540
  * @param name - Play name
1539
1541
  * @returns Version list (newest first)
1540
1542
  */
1541
- async listPlayVersions(name) {
1543
+ async listPlayVersions(name, options) {
1542
1544
  const encodedName = encodeURIComponent(name);
1545
+ const suffix = options?.full ? "?full=true" : "";
1543
1546
  const response = await this.http.get(
1544
- `/api/v2/plays/${encodedName}/versions`
1547
+ `/api/v2/plays/${encodedName}/versions${suffix}`
1545
1548
  );
1546
1549
  return response.versions ?? [];
1547
1550
  }