deepline 0.3.373 → 0.3.375

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 (101) 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/cli/auth-B7CLYD7R.js +35 -0
  6. package/dist/cli/{auth-7BMCDCRH.mjs → auth-U3Y7DTIG.mjs} +6 -4
  7. package/dist/cli/{billing-GKI7B4JF.js → billing-P2DNRAND.js} +73 -73
  8. package/dist/cli/{billing-RZEHHMPU.mjs → billing-TKARGBO3.mjs} +4 -4
  9. package/dist/cli/{chunk-IUYKSTWB.mjs → chunk-4GP56LRE.mjs} +12 -12
  10. package/dist/cli/{chunk-JSK6GUY6.js → chunk-4WINCNNH.js} +13 -9
  11. package/dist/cli/{chunk-CLEB5KUZ.js → chunk-ADSZGPYZ.js} +1 -1
  12. package/dist/cli/{chunk-E6BZWURC.mjs → chunk-B2LFDTXZ.mjs} +15 -6
  13. package/dist/cli/{chunk-JP2YA3AV.mjs → chunk-B3TQIJ6L.mjs} +1 -1
  14. package/dist/cli/{chunk-NVZAZGHA.js → chunk-CUIBDSSS.js} +8 -8
  15. package/dist/cli/{chunk-E7MGPPM5.js → chunk-DAG4ZBTJ.js} +1495 -1495
  16. package/dist/cli/{chunk-YPVTQRUM.js → chunk-DHTG5CCI.js} +15 -6
  17. package/dist/cli/{chunk-EYXSAB7O.js → chunk-F5CU5ALX.js} +26 -26
  18. package/dist/cli/{chunk-46JCJ7FT.mjs → chunk-FWF24ULX.mjs} +13 -9
  19. package/dist/cli/{chunk-JHUMUIU6.js → chunk-GN5QM2BB.js} +6 -6
  20. package/dist/cli/{chunk-BM47AKUZ.js → chunk-HEF6UDGA.js} +235 -235
  21. package/dist/cli/{chunk-ORBVXCTL.js → chunk-HP4BE43N.js} +52 -51
  22. package/dist/cli/{chunk-YHHY2YHK.mjs → chunk-HSIVHAZA.mjs} +3 -3
  23. package/dist/cli/{chunk-P5JPGZNI.mjs → chunk-IG3GOO4T.mjs} +1 -1
  24. package/dist/cli/{chunk-ND4BVWWZ.js → chunk-IQTHRG6E.js} +15 -15
  25. package/dist/cli/{chunk-S5OTS6H5.js → chunk-KK4XPUVA.js} +8 -8
  26. package/dist/cli/{chunk-IHQQNWU4.js → chunk-LZUWGLM4.js} +2 -2
  27. package/dist/cli/{chunk-W3H422KP.js → chunk-M2HVNJ47.js} +60 -60
  28. package/dist/cli/{chunk-HNLXC5BP.mjs → chunk-M5QDOHLG.mjs} +1 -1
  29. package/dist/cli/{chunk-XMME4SCK.mjs → chunk-MKS7C3YR.mjs} +3 -2
  30. package/dist/cli/{chunk-ECA6NQYL.mjs → chunk-MPQSBHMA.mjs} +4 -4
  31. package/dist/cli/{chunk-D2CZ4Y5G.js → chunk-MTBQEND4.js} +15 -15
  32. package/dist/cli/{chunk-XJYUQBHY.js → chunk-NVXMPGM4.js} +65 -84
  33. package/dist/cli/{chunk-6JCVL7CE.mjs → chunk-QEEIEHGV.mjs} +2 -2
  34. package/dist/cli/{chunk-TB73PXE3.mjs → chunk-SJVJZOPT.mjs} +2 -2
  35. package/dist/cli/{chunk-QSV76EMO.mjs → chunk-STYH5U6W.mjs} +7 -7
  36. package/dist/cli/{chunk-R6TPSZLN.mjs → chunk-Z4ARN4X3.mjs} +2 -2
  37. package/dist/cli/{chunk-PZ26EKNC.mjs → chunk-ZFWU5V2A.mjs} +13 -32
  38. package/dist/cli/{chunk-Y32GUTEN.mjs → chunk-ZHXPNJQI.mjs} +1467 -1467
  39. package/dist/cli/command-docs.js +2 -2
  40. package/dist/cli/command-docs.mjs +1 -1
  41. package/dist/cli/{csv-3FNCVMWA.mjs → csv-3FTYTEJ3.mjs} +3 -3
  42. package/dist/cli/{csv-NFQYQWWO.js → csv-WAEVGKHF.js} +12 -12
  43. package/dist/cli/{db-VA7HULGR.mjs → db-HUGGFIVS.mjs} +4 -4
  44. package/dist/cli/{db-CTLGRV3X.js → db-UDMDGNKO.js} +29 -29
  45. package/dist/cli/{describe-GXGRMP2M.mjs → describe-EOBOGTB5.mjs} +130 -20
  46. package/dist/cli/{describe-IUHOEPKY.js → describe-SIAKZYRK.js} +144 -34
  47. package/dist/cli/{executions-DSK3HRPU.js → executions-HYYP27MG.js} +6 -6
  48. package/dist/cli/{executions-OZQDZQIK.mjs → executions-O6Z2HSLK.mjs} +4 -4
  49. package/dist/cli/{feedback-KTMLMWKV.js → feedback-3DWSBHKS.js} +7 -7
  50. package/dist/cli/{feedback-ZOY7R4JD.mjs → feedback-RRAMGMQV.mjs} +3 -3
  51. package/dist/cli/{git-FIOI4IA2.mjs → git-KVAK7VOL.mjs} +4 -4
  52. package/dist/cli/git-M36KWCCG.js +23 -0
  53. package/dist/cli/index.js +106 -91
  54. package/dist/cli/index.mjs +63 -48
  55. package/dist/cli/{legacy-noops-KQZWSABN.mjs → legacy-noops-MQNCDMY7.mjs} +4 -4
  56. package/dist/cli/{legacy-noops-WXAYRQMQ.js → legacy-noops-V5GQXXUR.js} +7 -7
  57. package/dist/cli/{monitors-VHNWIF4V.mjs → monitors-6FB63TDM.mjs} +4 -4
  58. package/dist/cli/{monitors-LPUCHRNJ.js → monitors-RFGQILPW.js} +85 -85
  59. package/dist/cli/{org-GWHWBCMD.js → org-L33EPH2E.js} +64 -64
  60. package/dist/cli/{org-UW7NPGEY.mjs → org-TZPQDDVX.mjs} +4 -4
  61. package/dist/cli/{play-FNM2E66T.mjs → play-PU23OETO.mjs} +8 -8
  62. package/dist/cli/play-YR2XQARF.js +155 -0
  63. package/dist/cli/{providers-6D6R3PWX.js → providers-2RHIKO22.js} +7 -7
  64. package/dist/cli/{providers-XAZMYDWS.mjs → providers-QGQR6ZZF.mjs} +4 -4
  65. package/dist/cli/{quickstart-OK65PGZL.mjs → quickstart-24DQYBW7.mjs} +3 -3
  66. package/dist/cli/{quickstart-HBUWBVH6.js → quickstart-BGQVPI7W.js} +5 -5
  67. package/dist/cli/{search-XY6JOTS2.mjs → search-EUN7YFMX.mjs} +5 -5
  68. package/dist/cli/search-OHELMK6E.js +26 -0
  69. package/dist/cli/{secrets-W2LDLU2W.mjs → secrets-OOHN6LNJ.mjs} +4 -4
  70. package/dist/cli/{secrets-6CYCPK7T.js → secrets-XL7GUTQA.js} +13 -13
  71. package/dist/cli/{sessions-GOYEKNTJ.js → sessions-FD5XB7M2.js} +5 -5
  72. package/dist/cli/{sessions-JAX7PGXU.mjs → sessions-SDN4C3YS.mjs} +4 -4
  73. package/dist/cli/{settings-OACUQOCM.mjs → settings-3MXRXYXI.mjs} +7 -7
  74. package/dist/cli/{settings-QMFYFCT7.js → settings-6ZEKVAYL.js} +74 -74
  75. package/dist/cli/{setup-2KA5TZBZ.mjs → setup-DWTR6HNT.mjs} +6 -6
  76. package/dist/cli/{setup-36VOOGVA.js → setup-VKQ5EJZR.js} +41 -41
  77. package/dist/cli/skills-6GFW4GCW.js +28 -0
  78. package/dist/cli/{skills-QY4BX5ZX.mjs → skills-ISG5UUZW.mjs} +4 -4
  79. package/dist/cli/{tools-UCB2QRVC.mjs → tools-JTC3DR6M.mjs} +7 -7
  80. package/dist/cli/tools-LK4L6VCK.js +40 -0
  81. package/dist/cli/{update-327MHUO4.mjs → update-GMTVIHCG.mjs} +6 -6
  82. package/dist/cli/update-PSJLAW4Q.js +28 -0
  83. package/dist/cli/{workflow-G7BU54KW.js → workflow-2765Y3Y5.js} +15 -15
  84. package/dist/cli/{workflow-HJN4GA5A.mjs → workflow-3POT3VFY.mjs} +5 -5
  85. package/dist/index.js +8 -8
  86. package/dist/index.mjs +7 -7
  87. package/dist/install-integrity.json +76 -78
  88. package/dist/release.d.mts +1 -1
  89. package/dist/release.d.ts +1 -1
  90. package/dist/release.js +2 -2
  91. package/dist/release.mjs +1 -1
  92. package/package.json +1 -1
  93. package/dist/cli/auth-BWCNRUG3.js +0 -33
  94. package/dist/cli/client-FO6LMHT4.mjs +0 -20
  95. package/dist/cli/client-KAWK7FJR.js +0 -20
  96. package/dist/cli/git-5P5FLEUC.js +0 -23
  97. package/dist/cli/play-EVBIC7Z5.js +0 -155
  98. package/dist/cli/search-6ZY2XWP2.js +0 -26
  99. package/dist/cli/skills-6GPIEPTP.js +0 -28
  100. package/dist/cli/tools-RTECP4WT.js +0 -40
  101. package/dist/cli/update-WR65EHBN.js +0 -28
@@ -3,11 +3,11 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkJSK6GUY6js = require('./chunk-JSK6GUY6.js');
6
+ var _chunk4WINCNNHjs = require('./chunk-4WINCNNH.js');
7
7
  require('./chunk-COGTRVWW.js');
8
8
 
9
9
 
10
10
 
11
11
 
12
12
 
13
- exports.COMMAND_DOCS = _chunkJSK6GUY6js.COMMAND_DOCS; exports.commandDocKey = _chunkJSK6GUY6js.commandDocKey; exports.helpDetailFromArgv = _chunkJSK6GUY6js.helpDetailFromArgv; exports.renderCommandExplanation = _chunkJSK6GUY6js.renderCommandExplanation;
13
+ exports.COMMAND_DOCS = _chunk4WINCNNHjs.COMMAND_DOCS; exports.commandDocKey = _chunk4WINCNNHjs.commandDocKey; exports.helpDetailFromArgv = _chunk4WINCNNHjs.helpDetailFromArgv; exports.renderCommandExplanation = _chunk4WINCNNHjs.renderCommandExplanation;
@@ -3,7 +3,7 @@ import {
3
3
  commandDocKey,
4
4
  helpDetailFromArgv,
5
5
  renderCommandExplanation
6
- } from "./chunk-46JCJ7FT.mjs";
6
+ } from "./chunk-FWF24ULX.mjs";
7
7
  import "./chunk-KRD6H754.mjs";
8
8
  export {
9
9
  COMMAND_DOCS,
@@ -4,11 +4,11 @@ import {
4
4
  printCommandEnvelope,
5
5
  printJson,
6
6
  readCsvRows
7
- } from "./chunk-HNLXC5BP.mjs";
8
- import "./chunk-IUYKSTWB.mjs";
7
+ } from "./chunk-M5QDOHLG.mjs";
8
+ import "./chunk-4GP56LRE.mjs";
9
9
  import "./chunk-DLIRSHV6.mjs";
10
10
  import "./chunk-NXGCO4JB.mjs";
11
- import "./chunk-P5JPGZNI.mjs";
11
+ import "./chunk-IG3GOO4T.mjs";
12
12
  import "./chunk-WZYKRD7T.mjs";
13
13
  import "./chunk-KRD6H754.mjs";
14
14
 
@@ -4,11 +4,11 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkJHUMUIU6js = require('./chunk-JHUMUIU6.js');
8
- require('./chunk-ND4BVWWZ.js');
7
+ var _chunkGN5QM2BBjs = require('./chunk-GN5QM2BB.js');
8
+ require('./chunk-IQTHRG6E.js');
9
9
  require('./chunk-XNYIZMNQ.js');
10
10
  require('./chunk-7P5AA3SN.js');
11
- require('./chunk-CLEB5KUZ.js');
11
+ require('./chunk-ADSZGPYZ.js');
12
12
  require('./chunk-OG64RBAC.js');
13
13
  require('./chunk-COGTRVWW.js');
14
14
 
@@ -126,7 +126,7 @@ function renderTable(rows, totalRows, verbose, footer = `showing ${rows.length}
126
126
  column.length,
127
127
  ...rows.map((row) => {
128
128
  const value = _nullishCoalesce(row[column], () => ( ""));
129
- return (verbose ? value : _chunkJHUMUIU6js.clip.call(void 0, value, 42)).length;
129
+ return (verbose ? value : _chunkGN5QM2BBjs.clip.call(void 0, value, 42)).length;
130
130
  })
131
131
  )
132
132
  ])
@@ -136,7 +136,7 @@ function renderTable(rows, totalRows, verbose, footer = `showing ${rows.length}
136
136
  const body = rows.map(
137
137
  (row) => columns.map((column) => {
138
138
  const raw = _nullishCoalesce(row[column], () => ( ""));
139
- const display = verbose ? raw : _chunkJHUMUIU6js.clip.call(void 0, raw, 42);
139
+ const display = verbose ? raw : _chunkGN5QM2BBjs.clip.call(void 0, raw, 42);
140
140
  return display.padEnd(widths[column]);
141
141
  }).join(" | ")
142
142
  );
@@ -156,7 +156,7 @@ async function handleCsvShow(path, options, command) {
156
156
  { exitCode: 2 }
157
157
  );
158
158
  }
159
- const allRows = _chunkJHUMUIU6js.readCsvRows.call(void 0, csvPath);
159
+ const allRows = _chunkGN5QM2BBjs.readCsvRows.call(void 0, csvPath);
160
160
  const [rowStart, rowEnd] = parseRowRange(options.rows);
161
161
  const rows = options.summary && options.rows === void 0 ? allRows : selectRows(allRows, rowStart, rowEnd);
162
162
  const { rows: selected, columns } = selectColumns(
@@ -169,7 +169,7 @@ async function handleCsvShow(path, options, command) {
169
169
  if (options.summary) {
170
170
  const summaries = summarizeColumns(selected, columns);
171
171
  if (format === "json") {
172
- _chunkJHUMUIU6js.printJson.call(void 0, {
172
+ _chunkGN5QM2BBjs.printJson.call(void 0, {
173
173
  rows: summaries,
174
174
  total_rows: selected.length,
175
175
  source_total_rows: allRows.length
@@ -178,7 +178,7 @@ async function handleCsvShow(path, options, command) {
178
178
  }
179
179
  const displayRows = summaryDisplayRows(summaries);
180
180
  if (format === "csv") {
181
- process.stdout.write(_chunkJHUMUIU6js.csvStringFromRows.call(void 0, displayRows));
181
+ process.stdout.write(_chunkGN5QM2BBjs.csvStringFromRows.call(void 0, displayRows));
182
182
  return;
183
183
  }
184
184
  process.stdout.write(
@@ -193,7 +193,7 @@ async function handleCsvShow(path, options, command) {
193
193
  return;
194
194
  }
195
195
  if (format === "json") {
196
- _chunkJHUMUIU6js.printJson.call(void 0, {
196
+ _chunkGN5QM2BBjs.printJson.call(void 0, {
197
197
  rows: selected.map((row, index) => ({ __row: rowStart + index, ...row }))
198
198
  });
199
199
  return;
@@ -436,7 +436,7 @@ async function handleCsvRenderStart(options) {
436
436
  if (log) {
437
437
  detail = `
438
438
  CSV render log:
439
- ${_chunkJHUMUIU6js.clip.call(void 0, log, 2e3)}`;
439
+ ${_chunkGN5QM2BBjs.clip.call(void 0, log, 2e3)}`;
440
440
  }
441
441
  } catch (e7) {
442
442
  }
@@ -487,7 +487,7 @@ async function handleCsvRenderStatus(options) {
487
487
  if (payload.pid) lines.push(`Render PID: ${payload.pid}`);
488
488
  if (payload.url) lines.push(`Render URL: ${payload.url}`);
489
489
  lines.push(`Render Health: ${payload.health_status}`);
490
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0, payload, {
490
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0, payload, {
491
491
  json: options.json,
492
492
  text: `${lines.join("\n")}
493
493
  `
@@ -523,7 +523,7 @@ async function handleCsvRenderStop(options) {
523
523
  };
524
524
  const text = stopped.length > 0 ? `Stopped CSV render process(es): ${stopped.join(" ")}
525
525
  ` : "No running CSV render process found.\n";
526
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0, payload, { json: options.json, text });
526
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0, payload, { json: options.json, text });
527
527
  }
528
528
  async function handleCsvRender(action, options) {
529
529
  const normalized = _nullishCoalesce(action, () => ( "start"));
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  DeeplineClient,
6
6
  planCustomerDbQuery
7
- } from "./chunk-Y32GUTEN.mjs";
7
+ } from "./chunk-ZHXPNJQI.mjs";
8
8
  import "./chunk-6IKARAYD.mjs";
9
9
  import "./chunk-CBVIJSHF.mjs";
10
10
  import {
@@ -16,15 +16,15 @@ import {
16
16
  printCommandEnvelope,
17
17
  recordRows,
18
18
  shouldEmitJson
19
- } from "./chunk-HNLXC5BP.mjs";
19
+ } from "./chunk-M5QDOHLG.mjs";
20
20
  import {
21
21
  CustomerDbQueryOutcomeUnknownError
22
- } from "./chunk-IUYKSTWB.mjs";
22
+ } from "./chunk-4GP56LRE.mjs";
23
23
  import "./chunk-DLIRSHV6.mjs";
24
24
  import {
25
25
  DeeplineError
26
26
  } from "./chunk-NXGCO4JB.mjs";
27
- import "./chunk-P5JPGZNI.mjs";
27
+ import "./chunk-IG3GOO4T.mjs";
28
28
  import "./chunk-WZYKRD7T.mjs";
29
29
  import "./chunk-KRD6H754.mjs";
30
30
 
@@ -4,7 +4,7 @@ var _chunkAID3OYVJjs = require('./chunk-AID3OYVJ.js');
4
4
 
5
5
 
6
6
 
7
- var _chunkE7MGPPM5js = require('./chunk-E7MGPPM5.js');
7
+ var _chunkDAG4ZBTJjs = require('./chunk-DAG4ZBTJ.js');
8
8
  require('./chunk-S6R3OX7B.js');
9
9
  require('./chunk-LA46MMTL.js');
10
10
 
@@ -16,15 +16,15 @@ require('./chunk-LA46MMTL.js');
16
16
 
17
17
 
18
18
 
19
- var _chunkJHUMUIU6js = require('./chunk-JHUMUIU6.js');
19
+ var _chunkGN5QM2BBjs = require('./chunk-GN5QM2BB.js');
20
20
 
21
21
 
22
- var _chunkND4BVWWZjs = require('./chunk-ND4BVWWZ.js');
22
+ var _chunkIQTHRG6Ejs = require('./chunk-IQTHRG6E.js');
23
23
  require('./chunk-XNYIZMNQ.js');
24
24
 
25
25
 
26
26
  var _chunk7P5AA3SNjs = require('./chunk-7P5AA3SN.js');
27
- require('./chunk-CLEB5KUZ.js');
27
+ require('./chunk-ADSZGPYZ.js');
28
28
  require('./chunk-OG64RBAC.js');
29
29
  require('./chunk-COGTRVWW.js');
30
30
 
@@ -47,8 +47,8 @@ function formatCell(value) {
47
47
  return text.length > 80 ? `${text.slice(0, 77)}...` : text;
48
48
  }
49
49
  function tableLines(result) {
50
- const rows = _chunkJHUMUIU6js.dataExportRows.call(void 0, customerDbRows(result));
51
- const responseColumns = _chunkJHUMUIU6js.dataExportColumns.call(void 0,
50
+ const rows = _chunkGN5QM2BBjs.dataExportRows.call(void 0, customerDbRows(result));
51
+ const responseColumns = _chunkGN5QM2BBjs.dataExportColumns.call(void 0,
52
52
  rows,
53
53
  customerDbColumnNames(result)
54
54
  );
@@ -94,7 +94,7 @@ function tableLines(result) {
94
94
  return lines;
95
95
  }
96
96
  function customerDbRows(result) {
97
- return _chunkJHUMUIU6js.recordRows.call(void 0, result.rows);
97
+ return _chunkGN5QM2BBjs.recordRows.call(void 0, result.rows);
98
98
  }
99
99
  function customerDbColumnNames(result) {
100
100
  return result.columns.map((column) => column.name).filter(Boolean);
@@ -116,15 +116,15 @@ function collectErrorText(value) {
116
116
  ].filter(Boolean).join("\n");
117
117
  }
118
118
  function formatDbQueryError(sql, error) {
119
- const text = error instanceof _chunkND4BVWWZjs.CustomerDbQueryOutcomeUnknownError ? collectErrorText(error.cause) : collectErrorText(error);
119
+ const text = error instanceof _chunkIQTHRG6Ejs.CustomerDbQueryOutcomeUnknownError ? collectErrorText(error.cause) : collectErrorText(error);
120
120
  const lower = text.toLowerCase();
121
121
  const referencesStorage = /"storage"\.|storage\./i.test(sql);
122
122
  const runIdColumnMissing = /column\s+"?run_id"?\s+does not exist/i.test(text) || /run_id.*does not exist/i.test(lower);
123
123
  const relationMissing = /relation\s+["']?[^"']*storage[^"']*["']?\s+does not exist/i.test(text) || /42p01/i.test(text);
124
124
  if (referencesStorage && relationMissing) {
125
125
  return [
126
- ...error instanceof _chunkND4BVWWZjs.CustomerDbQueryOutcomeUnknownError ? [error.message] : [],
127
- error instanceof _chunkND4BVWWZjs.CustomerDbQueryOutcomeUnknownError ? "The server reported that the referenced storage table does not exist." : "Customer DB query failed: the referenced storage table does not exist.",
126
+ ...error instanceof _chunkIQTHRG6Ejs.CustomerDbQueryOutcomeUnknownError ? [error.message] : [],
127
+ error instanceof _chunkIQTHRG6Ejs.CustomerDbQueryOutcomeUnknownError ? "The server reported that the referenced storage table does not exist." : "Customer DB query failed: the referenced storage table does not exist.",
128
128
  "Play dataset tables are created only when the corresponding ctx.dataset(...).run(...) call executes. Pilot branches, early returns, and runs that fail before the dataset do not create that table.",
129
129
  "Use `deepline runs get <run-id> --full` to inspect returned dataset handles, then export them with `deepline runs export <run-id> --dataset result.rows --out rows.csv`.",
130
130
  `Original error: ${errorMessage(error)}`
@@ -132,7 +132,7 @@ function formatDbQueryError(sql, error) {
132
132
  }
133
133
  if (referencesStorage && runIdColumnMissing) {
134
134
  return [
135
- ...error instanceof _chunkND4BVWWZjs.CustomerDbQueryOutcomeUnknownError ? [error.message] : [],
135
+ ...error instanceof _chunkIQTHRG6Ejs.CustomerDbQueryOutcomeUnknownError ? [error.message] : [],
136
136
  "Customer DB query failed: storage dataset tables use `_run_id`, not `run_id`.",
137
137
  "Prefer `deepline runs export <run-id> --dataset result.rows --out rows.csv` unless you are doing deep table debugging.",
138
138
  `Original error: ${errorMessage(error)}`
@@ -147,7 +147,7 @@ function writeCustomerDbCsv(result, outPath) {
147
147
  const resolved = _path.resolve.call(void 0, outPath);
148
148
  _fs.writeFileSync.call(void 0,
149
149
  resolved,
150
- _chunkJHUMUIU6js.dataExportCsvString.call(void 0, customerDbRows(result), customerDbColumnNames(result)),
150
+ _chunkGN5QM2BBjs.dataExportCsvString.call(void 0, customerDbRows(result), customerDbColumnNames(result)),
151
151
  "utf-8"
152
152
  );
153
153
  return resolved;
@@ -188,7 +188,7 @@ function dbQueryExportEnvelope(input) {
188
188
  function renderDbQueryResult(result, query, options) {
189
189
  const { sql, maxRows, operationKey } = query;
190
190
  const { format, out: outPath, json: explicitJsonOutput = false } = options;
191
- const jsonOutput = explicitJsonOutput || _chunkJHUMUIU6js.shouldEmitJson.call(void 0, );
191
+ const jsonOutput = explicitJsonOutput || _chunkGN5QM2BBjs.shouldEmitJson.call(void 0, );
192
192
  const toolPayload = JSON.stringify({
193
193
  sql,
194
194
  result_mode: "rows",
@@ -199,7 +199,7 @@ function renderDbQueryResult(result, query, options) {
199
199
  if (format === "csv") {
200
200
  if (outPath) {
201
201
  const exportedPath = writeCustomerDbCsv(result, outPath);
202
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0,
202
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0,
203
203
  dbQueryExportEnvelope({
204
204
  result,
205
205
  format,
@@ -215,7 +215,7 @@ function renderDbQueryResult(result, query, options) {
215
215
  );
216
216
  return;
217
217
  }
218
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0,
218
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0,
219
219
  dbQueryExportEnvelope({
220
220
  result,
221
221
  format,
@@ -225,7 +225,7 @@ function renderDbQueryResult(result, query, options) {
225
225
  }),
226
226
  {
227
227
  json: explicitJsonOutput,
228
- text: _chunkJHUMUIU6js.dataExportCsvString.call(void 0,
228
+ text: _chunkGN5QM2BBjs.dataExportCsvString.call(void 0,
229
229
  customerDbRows(result),
230
230
  customerDbColumnNames(result)
231
231
  )
@@ -234,14 +234,14 @@ function renderDbQueryResult(result, query, options) {
234
234
  return;
235
235
  }
236
236
  if (format === "markdown") {
237
- const content = _chunkJHUMUIU6js.markdownTableFromRows.call(void 0,
237
+ const content = _chunkGN5QM2BBjs.markdownTableFromRows.call(void 0,
238
238
  customerDbRows(result),
239
239
  customerDbColumnNames(result)
240
240
  );
241
241
  if (outPath) {
242
242
  const exportedPath = _path.resolve.call(void 0, outPath);
243
243
  _fs.writeFileSync.call(void 0, exportedPath, content, "utf-8");
244
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0,
244
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0,
245
245
  dbQueryExportEnvelope({
246
246
  result,
247
247
  format,
@@ -257,7 +257,7 @@ function renderDbQueryResult(result, query, options) {
257
257
  );
258
258
  return;
259
259
  }
260
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0,
260
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0,
261
261
  dbQueryExportEnvelope({
262
262
  result,
263
263
  format,
@@ -272,7 +272,7 @@ function renderDbQueryResult(result, query, options) {
272
272
  );
273
273
  return;
274
274
  }
275
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0,
275
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0,
276
276
  {
277
277
  ...result,
278
278
  next: {
@@ -346,9 +346,9 @@ async function runDbQueryCommand(options) {
346
346
  ...maxRows === void 0 ? {} : { maxRows },
347
347
  ...operationKey === void 0 ? {} : { operationKey }
348
348
  };
349
- const plan = _chunkE7MGPPM5js.planCustomerDbQuery.call(void 0, query);
349
+ const plan = _chunkDAG4ZBTJjs.planCustomerDbQuery.call(void 0, query);
350
350
  if (options.dryRun) {
351
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0,
351
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0,
352
352
  {
353
353
  dryRun: true,
354
354
  ...plan,
@@ -361,11 +361,11 @@ async function runDbQueryCommand(options) {
361
361
  ...out === void 0 ? {} : { file: _path.resolve.call(void 0, out) }
362
362
  }
363
363
  },
364
- { json: options.json || _chunkJHUMUIU6js.shouldEmitJson.call(void 0, ) }
364
+ { json: options.json || _chunkGN5QM2BBjs.shouldEmitJson.call(void 0, ) }
365
365
  );
366
366
  return 0;
367
367
  }
368
- const client = new (0, _chunkE7MGPPM5js.DeeplineClient)();
368
+ const client = new (0, _chunkDAG4ZBTJjs.DeeplineClient)();
369
369
  const result = await client.db.query(query);
370
370
  renderDbQueryResult(result, query, {
371
371
  format,
@@ -374,8 +374,8 @@ async function runDbQueryCommand(options) {
374
374
  });
375
375
  return 0;
376
376
  } catch (error) {
377
- if (error instanceof _chunkND4BVWWZjs.CustomerDbQueryOutcomeUnknownError && (options.json || _chunkJHUMUIU6js.shouldEmitJson.call(void 0, ))) {
378
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0,
377
+ if (error instanceof _chunkIQTHRG6Ejs.CustomerDbQueryOutcomeUnknownError && (options.json || _chunkGN5QM2BBjs.shouldEmitJson.call(void 0, ))) {
378
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0,
379
379
  {
380
380
  ok: false,
381
381
  error: {
@@ -423,8 +423,8 @@ function dbRepairPlainText(result) {
423
423
  async function handleDbRepair(args) {
424
424
  const providerIndex = args.indexOf("--provider");
425
425
  const provider = providerIndex >= 0 ? _optionalChain([args, 'access', _9 => _9[providerIndex + 1], 'optionalAccess', _10 => _10.trim, 'call', _11 => _11()]) : void 0;
426
- const jsonOutput = _chunkJHUMUIU6js.argsWantJson.call(void 0, args);
427
- const client = new (0, _chunkE7MGPPM5js.DeeplineClient)();
426
+ const jsonOutput = _chunkGN5QM2BBjs.argsWantJson.call(void 0, args);
427
+ const client = new (0, _chunkDAG4ZBTJjs.DeeplineClient)();
428
428
  let result;
429
429
  try {
430
430
  result = await client.repairIngestionStorage(
@@ -440,7 +440,7 @@ async function handleDbRepair(args) {
440
440
  console.error(errorMessage2(error));
441
441
  return 1;
442
442
  }
443
- _chunkJHUMUIU6js.printCommandEnvelope.call(void 0,
443
+ _chunkGN5QM2BBjs.printCommandEnvelope.call(void 0,
444
444
  {
445
445
  command: "db repair",
446
446
  status: result.status,
@@ -1,52 +1,119 @@
1
- import {
2
- describedPlay
3
- } from "./chunk-QSV76EMO.mjs";
4
1
  import {
5
2
  describedTool,
3
+ formatModelDescription,
6
4
  publicToolSchemas,
7
5
  toolMetadataJsonForDescribe
8
- } from "./chunk-PZ26EKNC.mjs";
6
+ } from "./chunk-ZFWU5V2A.mjs";
7
+ import {
8
+ describedPlay
9
+ } from "./chunk-STYH5U6W.mjs";
9
10
  import {
10
11
  SCHEMA_LINE_LIMIT,
11
12
  addDescribeOptions,
13
+ byokLines,
12
14
  describedJson,
13
15
  describedLines,
14
16
  examples,
15
17
  schemaLines,
16
18
  topLevelField
17
- } from "./chunk-E6BZWURC.mjs";
19
+ } from "./chunk-B2LFDTXZ.mjs";
18
20
  import "./chunk-OVDNJAJN.mjs";
19
21
  import "./chunk-DSWSEHRX.mjs";
20
22
  import "./chunk-H7HIDGZ7.mjs";
21
23
  import "./chunk-EDWJY6T4.mjs";
22
- import "./chunk-YHHY2YHK.mjs";
23
- import "./chunk-TB73PXE3.mjs";
24
- import "./chunk-ERFN2QY4.mjs";
24
+ import "./chunk-HSIVHAZA.mjs";
25
+ import "./chunk-SJVJZOPT.mjs";
25
26
  import "./chunk-Y6VOGHF2.mjs";
27
+ import "./chunk-ERFN2QY4.mjs";
26
28
  import "./chunk-7E66A24V.mjs";
27
29
  import {
28
30
  DeeplineClient
29
- } from "./chunk-Y32GUTEN.mjs";
31
+ } from "./chunk-ZHXPNJQI.mjs";
30
32
  import "./chunk-6IKARAYD.mjs";
31
33
  import "./chunk-CBVIJSHF.mjs";
32
- import "./chunk-UFS752TU.mjs";
33
34
  import "./chunk-WXLOW623.mjs";
35
+ import "./chunk-UFS752TU.mjs";
34
36
  import "./chunk-GAMFK2ZP.mjs";
35
37
  import {
36
38
  printCommandEnvelope
37
- } from "./chunk-HNLXC5BP.mjs";
38
- import "./chunk-IUYKSTWB.mjs";
39
+ } from "./chunk-M5QDOHLG.mjs";
40
+ import "./chunk-4GP56LRE.mjs";
39
41
  import "./chunk-DLIRSHV6.mjs";
40
42
  import {
41
43
  DeeplineError
42
44
  } from "./chunk-NXGCO4JB.mjs";
43
- import "./chunk-P5JPGZNI.mjs";
45
+ import "./chunk-IG3GOO4T.mjs";
44
46
  import "./chunk-WZYKRD7T.mjs";
45
47
  import "./chunk-KRD6H754.mjs";
46
48
 
47
49
  // src/cli/commands/describe.ts
48
50
  import { writeFileSync } from "fs";
49
51
  import { resolve } from "path";
52
+
53
+ // src/cli/tool-features.ts
54
+ var VIEWS = {
55
+ ai_gateway_model: async (value, _tool, { describeModel }) => {
56
+ if (!value)
57
+ throw new Error("Name a model: --feature model=<provider/model>");
58
+ const model = await describeModel(value);
59
+ const unlisted = model.modelMetadata ? [] : [
60
+ `Warning: ${value} is not in the live AI Gateway catalog; check the id at https://ai-gateway.vercel.sh/v1/models.`
61
+ ];
62
+ return {
63
+ details: model,
64
+ lines: [
65
+ ...unlisted,
66
+ ...formatModelDescription(model).trimEnd().split("\n")
67
+ ]
68
+ };
69
+ },
70
+ byok: async (_value, tool) => ({
71
+ details: tool.byok ?? {},
72
+ lines: byokLines(tool.byok ?? {})
73
+ })
74
+ };
75
+ var isFeatureView = (value) => typeof value === "string" && Object.hasOwn(VIEWS, value);
76
+ var asRecord = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : {};
77
+ function inputProperties(tool) {
78
+ const inputSchema = asRecord(tool.inputSchema);
79
+ const jsonSchema = asRecord(inputSchema.jsonSchema ?? inputSchema);
80
+ return asRecord(jsonSchema.properties);
81
+ }
82
+ var firstSentence = (text) => typeof text === "string" ? text.split(/(?<=\.)\s/)[0] ?? text : "";
83
+ function toolFeatures(tool) {
84
+ const inputs = Object.entries(inputProperties(tool)).flatMap(
85
+ ([name, value]) => {
86
+ const schema = asRecord(value);
87
+ if (!isFeatureView(schema.feature)) return [];
88
+ return [
89
+ {
90
+ name,
91
+ summary: firstSentence(schema.description),
92
+ view: schema.feature,
93
+ ...typeof schema.default === "string" ? { defaultValue: schema.default } : {}
94
+ }
95
+ ];
96
+ }
97
+ );
98
+ const byok = tool.byok?.supported === true ? [
99
+ {
100
+ name: "byok",
101
+ summary: "Run it on your own provider credentials.",
102
+ view: "byok"
103
+ }
104
+ ] : [];
105
+ return [...inputs, ...byok];
106
+ }
107
+ function parseFeatureRequest(request) {
108
+ const [name = "", ...rest] = request.split("=");
109
+ const value = rest.join("=");
110
+ return value ? { name, value } : { name };
111
+ }
112
+ async function describeFeature(tool, feature, value, dependencies) {
113
+ return VIEWS[feature.view](value ?? feature.defaultValue, tool, dependencies);
114
+ }
115
+
116
+ // src/cli/commands/describe.ts
50
117
  var FILTER_OF = {
51
118
  tool: "tools",
52
119
  monitor_type: "monitors",
@@ -81,15 +148,23 @@ async function describeAnything(name, options, onMissing) {
81
148
  const tool = async () => {
82
149
  const record2 = options.fetchedTool ?? await client.getTool(name);
83
150
  const { byok } = record2;
151
+ const features = toolFeatures(record2);
84
152
  return {
85
153
  described: {
86
154
  ...describedTool(record2, name),
87
- // Shown when asked for, or when the tool runs only on your own
88
- // credentials; a server that does not report it shows as unknown.
89
- ...options.byok || byok?.required === true ? { byok: byok ?? {} } : {}
155
+ // Shown when the tool runs only on your own credentials; otherwise
156
+ // it is a feature, described with --feature byok.
157
+ ...byok?.required === true ? { byok } : {},
158
+ ...features.length ? { features: features.map(({ view: _view, ...feature }) => feature) } : {}
90
159
  },
91
160
  record: toolMetadataJsonForDescribe(record2, name),
92
- schemas: publicToolSchemas(record2)
161
+ schemas: publicToolSchemas(record2),
162
+ feature: (featureName, value) => {
163
+ const feature = features.find(({ name: name2 }) => name2 === featureName);
164
+ return feature ? describeFeature(record2, feature, value, {
165
+ describeModel: (model) => client.describeModel(model)
166
+ }) : null;
167
+ }
93
168
  };
94
169
  };
95
170
  const sources = name.includes("/") ? [{ kinds: ["prebuilts", "custom"], find: () => play(name) }] : [
@@ -120,6 +195,33 @@ async function describeAnything(name, options, onMissing) {
120
195
  const note = shadows ? `Showing your workspace play "${name}". It has the same name as a Deepline ${shadows.kind.replace("_", " ")}; see that one with: ${shadows.describeCommand}` : null;
121
196
  const verbose = options.verbose === true;
122
197
  const json = options.json === true;
198
+ if (options.feature !== void 0) {
199
+ const { name: featureName, value } = parseFeatureRequest(options.feature);
200
+ const pending = chosen.feature?.(featureName, value) ?? null;
201
+ const features = described.features ?? [];
202
+ if (!pending) {
203
+ console.error(
204
+ features.length ? `${described.id} has no feature "${featureName}". Its features: ${features.map(({ name: name2 }) => name2).join(", ")}.` : `${described.id} has no features to describe.`
205
+ );
206
+ return 2;
207
+ }
208
+ const shownValue = value ?? features.find(({ name: name2 }) => name2 === featureName)?.defaultValue;
209
+ const { details, lines } = await pending;
210
+ return deliver(
211
+ {
212
+ kind: described.kind,
213
+ id: described.id,
214
+ feature: featureName,
215
+ ...shownValue ? { value: shownValue } : {},
216
+ details
217
+ },
218
+ [
219
+ `${described.id} --feature ${featureName}${shownValue ? `=${shownValue}` : ""}`,
220
+ ...lines
221
+ ],
222
+ { json, out: options.out }
223
+ );
224
+ }
123
225
  const fields = (options.fields ?? "").split(",").map((name2) => name2.trim()).filter(Boolean);
124
226
  const named = options.cliExample === true || options.playExample === true;
125
227
  const shown = options.example !== false;
@@ -179,10 +281,13 @@ async function describeAnything(name, options, onMissing) {
179
281
  }),
180
282
  ...shadows ? { shadows, note } : {}
181
283
  };
182
- const text = `${view.lines.join("\n")}
284
+ return deliver(envelope, view.lines, { json, out: options.out });
285
+ }
286
+ function deliver(envelope, lines, { json, out }) {
287
+ const text = `${lines.join("\n")}
183
288
  `;
184
- if (options.out) {
185
- const path = resolve(options.out);
289
+ if (out) {
290
+ const path = resolve(out);
186
291
  const content = json ? `${JSON.stringify(envelope, null, 2)}
187
292
  ` : text;
188
293
  writeFileSync(path, content);
@@ -225,6 +330,11 @@ Examples in the output:
225
330
  --play-example only the in-play example, with how inputs and outputs work
226
331
  --no-example no examples
227
332
 
333
+ Features:
334
+ A tool lists its features: parts with their own description, such as the
335
+ model an AI tool runs. --feature <name> describes one at its default value,
336
+ --feature <name>=<value> at another, e.g. --feature model=openai/gpt-5.6-luna.
337
+
228
338
  Schema size and format:
229
339
  Secondary fields (diagnostics, attempt logs, echoes of input) are left out
230
340
  by default; the output names them, and --verbose shows them.