deepline 0.3.372 → 0.3.374

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 (116) hide show
  1. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  2. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts +1 -53
  3. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-runtime-watchdog.ts +15 -23
  4. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +65 -3
  5. package/dist/bundling-sources/shared_libs/plays/email-status.ts +95 -0
  6. package/dist/bundling-sources/shared_libs/plays/extractor-targets.ts +14 -0
  7. package/dist/bundling-sources/shared_libs/plays/field-catalog.ts +253 -0
  8. package/dist/bundling-sources/shared_libs/plays/tool-result-types.ts +2 -0
  9. package/dist/cli/auth-IFXXXZP6.js +33 -0
  10. package/dist/cli/{auth-ODSACXLF.mjs → auth-YGCDA4WG.mjs} +4 -4
  11. package/dist/cli/{billing-OPIOZLAN.mjs → billing-3ZLR3CJU.mjs} +4 -4
  12. package/dist/cli/{billing-4ERXY2DZ.js → billing-ZXRKPD5D.js} +73 -73
  13. package/dist/cli/{chunk-XSPAI6MF.mjs → chunk-2DAWTVNN.mjs} +2 -2
  14. package/dist/cli/{chunk-E5UD3JDQ.js → chunk-3VN4FTE3.js} +289 -5
  15. package/dist/cli/{chunk-VVFH745L.js → chunk-3XKAOV74.js} +6 -6
  16. package/dist/cli/{chunk-N5TPMNTT.js → chunk-53PZA4EP.js} +8 -8
  17. package/dist/cli/{chunk-BFLPCGOR.mjs → chunk-62IBVKWB.mjs} +1 -1
  18. package/dist/cli/{chunk-2RC5JQ3C.mjs → chunk-A62HBMHY.mjs} +1 -1
  19. package/dist/cli/{chunk-3GK3SH3G.mjs → chunk-E6BZWURC.mjs} +200 -13
  20. package/dist/cli/{chunk-KC2YOJTU.mjs → chunk-FT6O2ZVJ.mjs} +319 -115
  21. package/dist/cli/{chunk-5HYD3GMS.mjs → chunk-GT6KGIWV.mjs} +3 -3
  22. package/dist/cli/{chunk-RUYZAREB.js → chunk-HC5L6KGE.js} +9 -9
  23. package/dist/cli/{chunk-JAERLCMH.mjs → chunk-IZVGMVNX.mjs} +1 -1
  24. package/dist/cli/{chunk-ML2ZY7YD.js → chunk-JK547IDB.js} +4 -4
  25. package/dist/cli/{chunk-D6O3NJHX.js → chunk-MOBOAZMA.js} +60 -60
  26. package/dist/cli/{chunk-DONL233W.mjs → chunk-MQ5UW5AZ.mjs} +4 -4
  27. package/dist/cli/{chunk-MIMV5LTU.mjs → chunk-NNYQ24O5.mjs} +1 -1
  28. package/dist/cli/{chunk-DM5QUZJR.js → chunk-NOSIMGZV.js} +1 -1
  29. package/dist/cli/{chunk-AQFA7HMN.js → chunk-O7KJYX7R.js} +15 -15
  30. package/dist/cli/{chunk-U3W7E5WT.mjs → chunk-OS7GXARW.mjs} +27 -15
  31. package/dist/cli/{chunk-BVUGPOU3.mjs → chunk-OYTPVM2R.mjs} +2 -2
  32. package/dist/cli/{chunk-EFJL5FCU.js → chunk-PCYCNZLR.js} +8 -8
  33. package/dist/cli/{chunk-6MDAGRZP.js → chunk-RT5ICJ5V.js} +2 -2
  34. package/dist/cli/{chunk-GZQKUFM5.js → chunk-RXR7A2MX.js} +26 -26
  35. package/dist/cli/{chunk-4LIUZ4QR.mjs → chunk-SBB27CIJ.mjs} +2 -2
  36. package/dist/cli/{chunk-RJ7JJMQO.js → chunk-T35LCTC7.js} +266 -254
  37. package/dist/cli/{chunk-IUWPC5K6.js → chunk-TZTGK5JQ.js} +50 -50
  38. package/dist/cli/{chunk-FGHRRJ3D.mjs → chunk-VZSVYNZH.mjs} +1 -1
  39. package/dist/cli/{chunk-WJWO74MM.js → chunk-X5V2QTDR.js} +390 -186
  40. package/dist/cli/{chunk-JB6ERQUV.mjs → chunk-Y6VOGHF2.mjs} +284 -0
  41. package/dist/cli/{chunk-3CTB7V5F.mjs → chunk-YFFH6NDU.mjs} +2 -2
  42. package/dist/cli/{chunk-2JRRXXTA.js → chunk-YPVTQRUM.js} +201 -14
  43. package/dist/cli/client-O6IEMURJ.js +20 -0
  44. package/dist/cli/{client-KF2J754U.mjs → client-TV254HC4.mjs} +3 -3
  45. package/dist/cli/{csv-UL3MCD5D.mjs → csv-VEHHRUG4.mjs} +3 -3
  46. package/dist/cli/{csv-UJ3M7NFP.js → csv-WSRTANXI.js} +12 -12
  47. package/dist/cli/{db-SIOWA63T.mjs → db-BH25DX2G.mjs} +4 -4
  48. package/dist/cli/{db-444XYOTV.js → db-JXZNMFCE.js} +29 -29
  49. package/dist/cli/{describe-RRBESS3S.js → describe-N2OBGVJM.js} +61 -32
  50. package/dist/cli/{describe-GI5GHAKO.mjs → describe-TMBECHTX.mjs} +46 -17
  51. package/dist/cli/{executions-ERXZUOL5.js → executions-TX5CQF66.js} +6 -6
  52. package/dist/cli/{executions-4YDP6BXI.mjs → executions-Y4HQHYSO.mjs} +4 -4
  53. package/dist/cli/{feedback-3M7D7DZQ.js → feedback-ASEJ5A7I.js} +7 -7
  54. package/dist/cli/{feedback-CPWQL5LU.mjs → feedback-W7SRXYSP.mjs} +3 -3
  55. package/dist/cli/{git-XN6C3TJZ.mjs → git-2W7CZZRC.mjs} +4 -4
  56. package/dist/cli/git-SSSOIQ2L.js +23 -0
  57. package/dist/cli/index.js +81 -81
  58. package/dist/cli/index.mjs +32 -32
  59. package/dist/cli/{legacy-noops-5XDGOFWH.js → legacy-noops-NJYAAGBY.js} +7 -7
  60. package/dist/cli/{legacy-noops-KXQ6TFFL.mjs → legacy-noops-TXMPY3P7.mjs} +4 -4
  61. package/dist/cli/{monitors-33IU5JR6.mjs → monitors-G4L65QGQ.mjs} +4 -4
  62. package/dist/cli/{monitors-KH22PDOC.js → monitors-YLKTQ57D.js} +85 -85
  63. package/dist/cli/{org-MHYMWUEP.mjs → org-BCHOWKIA.mjs} +4 -4
  64. package/dist/cli/{org-X4NSLQG5.js → org-ENXO2A33.js} +64 -64
  65. package/dist/cli/{play-LCZKHKW2.mjs → play-JBY7HUYN.mjs} +8 -8
  66. package/dist/cli/play-SSJ3PO4D.js +155 -0
  67. package/dist/cli/{providers-J6LWCF5R.js → providers-GWFX3E7C.js} +7 -7
  68. package/dist/cli/{providers-L5FJTSEA.mjs → providers-JV2DZG43.mjs} +4 -4
  69. package/dist/cli/{quickstart-NE3BTWGL.mjs → quickstart-AIXURXZQ.mjs} +3 -3
  70. package/dist/cli/{quickstart-OOPFA4MX.js → quickstart-CASPK7F4.js} +5 -5
  71. package/dist/cli/{search-DBXOEOIE.mjs → search-DYQB7LHK.mjs} +5 -5
  72. package/dist/cli/search-N7K6A2YV.js +26 -0
  73. package/dist/cli/{secrets-WPMU7UBD.js → secrets-AZQG2E4U.js} +13 -13
  74. package/dist/cli/{secrets-U2MLWZH2.mjs → secrets-RQZPIPO5.mjs} +4 -4
  75. package/dist/cli/{sessions-WYNC4AUE.mjs → sessions-3FJJDMBB.mjs} +4 -4
  76. package/dist/cli/{sessions-YYZ3UJDS.js → sessions-ZY6RBYD4.js} +5 -5
  77. package/dist/cli/{settings-WQDFX3X6.js → settings-GXKWNR5V.js} +74 -74
  78. package/dist/cli/{settings-FQZSHFC6.mjs → settings-UNZDQGSE.mjs} +7 -7
  79. package/dist/cli/{setup-JKYJT35S.mjs → setup-PIRXJ2KJ.mjs} +6 -6
  80. package/dist/cli/{setup-DKYVNDTM.js → setup-UURZD4YO.js} +41 -41
  81. package/dist/cli/skills-4OUZLKTW.js +28 -0
  82. package/dist/cli/{skills-VHVCJJJY.mjs → skills-B4AQEIAF.mjs} +4 -4
  83. package/dist/cli/tools-MIZS5UN6.js +40 -0
  84. package/dist/cli/{tools-E23PU7KM.mjs → tools-UMGQKUSW.mjs} +8 -8
  85. package/dist/cli/update-3CO7LA4M.js +28 -0
  86. package/dist/cli/{update-4A4VU6CW.mjs → update-SFUTMEKL.mjs} +6 -6
  87. package/dist/cli/{workflow-WB2USWAA.js → workflow-CDAJCMT7.js} +15 -15
  88. package/dist/cli/{workflow-2ZR2ECTG.mjs → workflow-ON6XVW36.mjs} +5 -5
  89. package/dist/{client-Cw0e2Uec.d.mts → client-Cn-txrXv.d.mts} +1 -1
  90. package/dist/{client-CwdiawoG.d.ts → client-fPoIN-3V.d.ts} +1 -1
  91. package/dist/{compiler-manifest-DgdW0q0b.d.mts → compiler-manifest-CY2v8ab0.d.mts} +2 -0
  92. package/dist/{compiler-manifest-DgdW0q0b.d.ts → compiler-manifest-CY2v8ab0.d.ts} +2 -0
  93. package/dist/{index-C3nQQTI-.d.mts → index-B9fBZH1g.d.mts} +1 -1
  94. package/dist/{index-CEYQAfS0.d.ts → index-BZ6uzZJl.d.ts} +1 -1
  95. package/dist/index.d.mts +5 -5
  96. package/dist/index.d.ts +5 -5
  97. package/dist/index.js +79 -249
  98. package/dist/index.mjs +10 -180
  99. package/dist/install-integrity.json +85 -84
  100. package/dist/plays/bundle-play-file.d.mts +3 -3
  101. package/dist/plays/bundle-play-file.d.ts +3 -3
  102. package/dist/plays/run-request.d.mts +2 -2
  103. package/dist/plays/run-request.d.ts +2 -2
  104. package/dist/release.d.mts +1 -1
  105. package/dist/release.d.ts +1 -1
  106. package/dist/release.js +2 -2
  107. package/dist/release.mjs +1 -1
  108. package/package.json +1 -1
  109. package/dist/cli/auth-4SXMV3CD.js +0 -33
  110. package/dist/cli/client-UUNLXOHF.js +0 -20
  111. package/dist/cli/git-ITSCNUVB.js +0 -23
  112. package/dist/cli/play-4QRPOBWW.js +0 -155
  113. package/dist/cli/search-UGQDBP76.js +0 -26
  114. package/dist/cli/skills-VBQMXDAX.js +0 -28
  115. package/dist/cli/tools-ACEJZMJD.js +0 -40
  116. package/dist/cli/update-V5KMYHVE.js +0 -28
@@ -4,6 +4,21 @@ import {
4
4
 
5
5
  // src/cli/described.ts
6
6
  var SHAPE = "{}";
7
+ function byokLines(byok) {
8
+ if (typeof byok.supported !== "boolean") {
9
+ return ["BYOK: unknown (this server does not report it)"];
10
+ }
11
+ if (!byok.supported) {
12
+ return [
13
+ "BYOK: not supported. Deepline runs this tool with its own credentials."
14
+ ];
15
+ }
16
+ return [
17
+ byok.required === true ? "BYOK: required. This tool runs only on your own provider credentials." : "BYOK: supported (optional).",
18
+ ...byok.setup ? [`Setup: ${byok.setup}`] : [],
19
+ ...byok.setupUrl ? [`Connect: ${byok.setupUrl}`] : []
20
+ ];
21
+ }
7
22
  var SCHEMA_LINE_LIMIT = 100;
8
23
  function isRecord(value) {
9
24
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -69,7 +84,9 @@ function schemaField(name, node, required) {
69
84
  required,
70
85
  ...example !== void 0 ? { example } : {},
71
86
  ...typeof schema.description === "string" && schema.description ? { description: schema.description } : {},
72
- ...fields ? { fields } : {}
87
+ ...fields ? { fields } : {},
88
+ ...schema.secondary === true ? { secondary: true } : {},
89
+ ...typeof schema.means === "string" ? { means: schema.means } : {}
73
90
  };
74
91
  }
75
92
  function withoutRefs(node, root, depth = 0) {
@@ -167,6 +184,7 @@ function namedShapes(roots) {
167
184
  under: field.name
168
185
  };
169
186
  entry.count += 1;
187
+ entry.shape ??= field.shape;
170
188
  entry.descriptions.add(field.description ?? "");
171
189
  seen.set(key, entry);
172
190
  field.fields.forEach(visit);
@@ -175,12 +193,12 @@ function namedShapes(roots) {
175
193
  const taken = /* @__PURE__ */ new Set();
176
194
  const named = /* @__PURE__ */ new Map();
177
195
  for (const [key, entry] of seen) {
178
- if (entry.count < 2) continue;
196
+ if (entry.count < 2 && !entry.shape) continue;
179
197
  const [description] = entry.descriptions.size === 1 ? [...entry.descriptions] : [""];
180
198
  const title = (description ?? "").split(/[.:]/)[0].trim();
181
- const base = pascalCase(
199
+ const base = entry.shape ?? (pascalCase(
182
200
  title && title.split(/\s+/).length <= 3 ? title : entry.fields.length <= 3 ? entry.fields.map((field) => field.name).join(" ") : entry.under
183
- ) || "Shape";
201
+ ) || "Shape");
184
202
  let name = base;
185
203
  for (let n = 2; taken.has(name); n += 1) name = `${base}${n}`;
186
204
  taken.add(name);
@@ -213,23 +231,27 @@ function schemaBlocks(described, maxDepth, everyField = false) {
213
231
  const example = field.example === void 0 ? void 0 : JSON.stringify(field.example);
214
232
  const start = `${indent}${JSON.stringify(field.name)}${field.required ? "" : "?"}: `;
215
233
  if (!field.fields) {
216
- return [`${start}${field.type},${comment([example, field.description])}`];
234
+ return [
235
+ `${start}${field.type},${comment([field.means, example, field.description])}`
236
+ ];
217
237
  }
218
238
  const [before, after] = field.type.split(SHAPE);
219
239
  const shape = shapes.get(shapeKey(field.fields));
220
240
  if (shape) {
221
241
  if (!used.includes(shape)) used.push(shape);
222
242
  const own = field.description === shape.description ? void 0 : field.description;
223
- return [`${start}${before}${shape.name}${after},${comment([own])}`];
243
+ return [
244
+ `${start}${before}${shape.name}${after},${comment([field.means, own])}`
245
+ ];
224
246
  }
225
247
  if (depth >= maxDepth || field.summarized && !everyField) {
226
248
  const names = field.fields.map((child) => child.name).join(", ");
227
249
  return [
228
- `${start}${before}{ ${names} }${after},${comment([field.description])}`
250
+ `${start}${before}{ ${names} }${after},${comment([field.means, field.description])}`
229
251
  ];
230
252
  }
231
253
  return [
232
- `${start}${before}{${comment([field.description])}`,
254
+ `${start}${before}{${comment([field.means, field.description])}`,
233
255
  ...field.fields.flatMap(
234
256
  (child) => fieldLines(child, `${indent} `, depth + 1)
235
257
  ),
@@ -255,8 +277,70 @@ function schemaBlocks(described, maxDepth, everyField = false) {
255
277
  }
256
278
  return [...lines, ...types.length ? ["", "Types:", ...types] : []];
257
279
  }
258
- function schemaLines(described, options) {
259
- if (options.full) return schemaBlocks(described, Infinity, true);
280
+ function selectFields(described, wanted) {
281
+ const hidden = [];
282
+ const keep = (fields, isInput, path = []) => fields.flatMap((field) => {
283
+ const name = [...path, field.name];
284
+ if (!(isInput && field.required) && !wanted(field, path.length)) {
285
+ hidden.push(name.join("."));
286
+ return [];
287
+ }
288
+ return [
289
+ field.fields ? { ...field, fields: keep(field.fields, isInput, name) } : field
290
+ ];
291
+ });
292
+ const inputs = keep(described.inputs, true);
293
+ const rowInputs = described.rowInputs && keep(described.rowInputs, true);
294
+ const outputs = keep(described.outputs, false);
295
+ const rowOutputs = described.rowOutputs && keep(described.rowOutputs, false);
296
+ return {
297
+ selected: {
298
+ ...described,
299
+ inputs,
300
+ outputs,
301
+ ...rowInputs ? { rowInputs } : {},
302
+ ...rowOutputs ? { rowOutputs } : {}
303
+ },
304
+ hidden
305
+ };
306
+ }
307
+ function schemaLines(described, view) {
308
+ const count = (names) => `${names.length} ${names.length === 1 ? "field" : "fields"}`;
309
+ if (view.fields) {
310
+ const names = view.fields;
311
+ const { selected, hidden } = selectFields(
312
+ described,
313
+ (field, depth) => depth > 0 || names.includes(field.name)
314
+ );
315
+ const known = new Set(
316
+ [
317
+ described.inputs,
318
+ described.outputs,
319
+ described.rowInputs ?? [],
320
+ described.rowOutputs ?? []
321
+ ].flatMap((fields) => fields.map((field) => field.name))
322
+ );
323
+ const unknown = names.filter((name) => !known.has(name));
324
+ return [
325
+ ...schemaLines(selected, { full: true, secondary: true }),
326
+ ...unknown.length ? ["", `No field named: ${unknown.join(", ")}.`] : [],
327
+ ...hidden.length ? ["", `${count(hidden)} not shown: ${hidden.join(", ")}.`] : []
328
+ ];
329
+ }
330
+ if (!view.full && !view.secondary) {
331
+ const { selected, hidden } = selectFields(
332
+ described,
333
+ (field) => !field.secondary
334
+ );
335
+ return [
336
+ ...schemaLines(selected, { ...view, secondary: true }),
337
+ ...hidden.length ? [
338
+ "",
339
+ `${count(hidden).replace(" ", " secondary ")} hidden: ${hidden.join(", ")}. --verbose shows ${hidden.length === 1 ? "it" : "them"}.`
340
+ ] : []
341
+ ];
342
+ }
343
+ if (view.full) return schemaBlocks(described, Infinity, true);
260
344
  const raw = described.rawResponse?.length ? [
261
345
  "",
262
346
  `Other response fields (${described.rawResponse.map((field) => field.name).join(", ")}) are in result.toolResponse.rawV2. --full-schema lists them.`
@@ -284,7 +368,7 @@ function examples(described, options) {
284
368
  const input = JSON.stringify(
285
369
  Object.fromEntries(shown.map((field) => [field.name, exampleValue(field)]))
286
370
  );
287
- const read = options.verbose ? described.outputs : described.outputs.slice(0, 1);
371
+ const read = options.verbose ? described.outputs : described.outputs.filter((field) => !field.secondary).slice(0, 1);
288
372
  const reads = (expression) => read.flatMap((field) => {
289
373
  const source = expression(field);
290
374
  return source ? [`const ${safeIdentifier(field.name)} = ${source};`] : [];
@@ -338,7 +422,17 @@ function describedLines(described, view) {
338
422
  ...described.cost ? [`Cost: ${described.cost}`] : [],
339
423
  ...described.guidance.map((line) => `Guidance: ${line}`),
340
424
  ...described.rateLimit ? [`Rate limit: ${described.rateLimit}`] : [],
341
- ...schemaLines(described, { full: view.fullSchema }),
425
+ ...described.byok ? byokLines(described.byok) : [],
426
+ ...schemaLines(described, {
427
+ full: view.fullSchema,
428
+ secondary: view.verbose,
429
+ ...view.fields ? { fields: view.fields } : {}
430
+ }),
431
+ ...section(
432
+ described.exclusive ? [
433
+ `Give "${described.exclusive.field}" or ${described.exclusive.with.map((name) => `"${name}"`).join(", ")}, not both: per-row values go in the CSV.`
434
+ ] : []
435
+ ),
342
436
  ...section(
343
437
  view.cli ? [
344
438
  "Run from the CLI:",
@@ -361,6 +455,88 @@ function describedLines(described, view) {
361
455
  function topLevelField({ fields: _fields, ...field }) {
362
456
  return { ...field, type: field.type.replace(SHAPE, "object") };
363
457
  }
458
+ function jsonFields(fields, options) {
459
+ return Object.fromEntries(
460
+ fields.filter(
461
+ (field) => options.secondary || !field.secondary || options.input && field.required
462
+ ).map((field) => {
463
+ const shape = field.fields && options.shapes.get(shapeKey(field.fields));
464
+ if (shape) options.used.add(shape);
465
+ return [
466
+ field.name,
467
+ {
468
+ type: field.type.replace(SHAPE, shape?.name ?? "object"),
469
+ ...options.input ? { required: field.required } : {},
470
+ ...field.means ? { means: field.means } : {},
471
+ ...field.example !== void 0 ? { example: field.example } : {},
472
+ ...field.description && field.description !== shape?.description ? { description: field.description } : {},
473
+ ...field.secondary ? { secondary: true } : {},
474
+ ...field.read ? { read: field.read } : {},
475
+ ...field.in ? { in: field.in } : {},
476
+ ...field.paths?.length ? { paths: field.paths } : {},
477
+ ...field.fields && !shape ? { fields: jsonFields(field.fields, options) } : {}
478
+ }
479
+ ];
480
+ })
481
+ );
482
+ }
483
+ function describedJson(described, view) {
484
+ const sections = [
485
+ ["inputs", described.inputs, true],
486
+ ["rowInputs", described.rowInputs, true],
487
+ ["outputs", described.outputs, false],
488
+ ["rowOutputs", described.rowOutputs, false]
489
+ ];
490
+ const hidden = view.secondary ? [] : sections.flatMap(
491
+ ([, fields, input]) => (fields ?? []).filter((field) => field.secondary && !(input && field.required)).map((field) => field.name)
492
+ );
493
+ const shapes = namedShapes(sections.flatMap(([, fields]) => fields ?? []));
494
+ const used = /* @__PURE__ */ new Set();
495
+ const blocks = Object.fromEntries(
496
+ sections.flatMap(
497
+ ([key, fields, input]) => fields?.length ? [
498
+ [
499
+ key,
500
+ jsonFields(fields, {
501
+ input,
502
+ secondary: view.secondary,
503
+ shapes,
504
+ used
505
+ })
506
+ ]
507
+ ] : []
508
+ )
509
+ );
510
+ const types = {};
511
+ for (const shape of used) {
512
+ types[shape.name] = {
513
+ ...shape.description ? { description: shape.description } : {},
514
+ fields: jsonFields(shape.fields, {
515
+ input: false,
516
+ secondary: true,
517
+ shapes,
518
+ used
519
+ })
520
+ };
521
+ }
522
+ const { cli, play } = examples(described, { verbose: view.verbose });
523
+ return {
524
+ kind: described.kind,
525
+ id: described.id,
526
+ ...described.displayName ? { displayName: described.displayName } : {},
527
+ ...described.description ? { description: described.description } : {},
528
+ ...described.cost ? { cost: described.cost } : {},
529
+ ...described.rateLimit ? { rateLimit: described.rateLimit } : {},
530
+ ...described.byok ? { byok: described.byok } : {},
531
+ ...described.guidance.length ? { guidance: described.guidance } : {},
532
+ ...blocks,
533
+ ...used.size ? { types } : {},
534
+ ...described.exclusive ? { exclusive: described.exclusive } : {},
535
+ run: { cli, ...play ? { play } : {} },
536
+ ...described.source ? { source: described.source } : {},
537
+ ...hidden.length ? { hidden } : {}
538
+ };
539
+ }
364
540
 
365
541
  // src/cli/execution-observation.ts
366
542
  import { writeFileSync, renameSync } from "fs";
@@ -406,7 +582,7 @@ function addDescribeOptions(command, options = {}) {
406
582
  "Show the Deepline tool or play, not a play your workspace created under the same name"
407
583
  ).option("--tool", "Same as --prebuilt").option(
408
584
  "--verbose",
409
- "Examples fill in every input and read every output, not only required ones"
585
+ "Show secondary fields, and fill in every input and read every output in the examples"
410
586
  ).option(
411
587
  "--cli-example",
412
588
  "Show only the CLI example, and explain how it takes inputs and returns outputs"
@@ -416,6 +592,9 @@ function addDescribeOptions(command, options = {}) {
416
592
  ).option("--no-example", "Hide the run examples").option(
417
593
  "--full-schema",
418
594
  `Print every field: a long schema unfolded (over ${SCHEMA_LINE_LIMIT} lines), list rows, and a tool's raw response`
595
+ ).option(
596
+ "--fields <names>",
597
+ "Show only these fields, comma-separated, plus every required input"
419
598
  ).option(
420
599
  "-o, --out <path>",
421
600
  "Save the output to this file instead of printing it"
@@ -426,6 +605,12 @@ function addDescribeOptions(command, options = {}) {
426
605
  "Print only the schema, with every field, and nothing else"
427
606
  );
428
607
  }
608
+ if (options.byok !== false) {
609
+ command.option(
610
+ "--byok",
611
+ "For a tool, also show whether it can run on your own provider credentials, and how to connect them (always shown when it must)"
612
+ );
613
+ }
429
614
  if (options.json !== false) {
430
615
  command.option(
431
616
  "--json",
@@ -436,6 +621,7 @@ function addDescribeOptions(command, options = {}) {
436
621
  }
437
622
 
438
623
  export {
624
+ byokLines,
439
625
  SCHEMA_LINE_LIMIT,
440
626
  schemaField,
441
627
  schemaFields,
@@ -444,6 +630,7 @@ export {
444
630
  examples,
445
631
  describedLines,
446
632
  topLevelField,
633
+ describedJson,
447
634
  recordApiResponse,
448
635
  recordPlayTermination,
449
636
  addDescribeOptions