deepline 0.3.389 → 0.3.391

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 (124) hide show
  1. package/dist/bundling-sources/sdk/src/agent-runtime.ts +21 -16
  2. package/dist/bundling-sources/sdk/src/billing-idempotency.ts +1 -1
  3. package/dist/bundling-sources/sdk/src/cli-invocation-id.ts +1 -1
  4. package/dist/bundling-sources/sdk/src/client.ts +75 -52
  5. package/dist/bundling-sources/sdk/src/config.ts +3 -2
  6. package/dist/bundling-sources/sdk/src/db/query.ts +3 -3
  7. package/dist/bundling-sources/sdk/src/deployment-protection.ts +7 -5
  8. package/dist/bundling-sources/sdk/src/http.ts +31 -41
  9. package/dist/bundling-sources/sdk/src/index.ts +26 -26
  10. package/dist/bundling-sources/sdk/src/play.ts +5 -5
  11. package/dist/bundling-sources/sdk/src/plays/bundle-play-file.ts +1 -1
  12. package/dist/bundling-sources/sdk/src/plays/local-play-execution.ts +2 -2
  13. package/dist/bundling-sources/sdk/src/plays/run-request.ts +2 -2
  14. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  15. package/dist/bundling-sources/sdk/src/runs/read-errors.ts +1 -1
  16. package/dist/bundling-sources/sdk/src/runs/watch-polling.ts +1 -1
  17. package/dist/bundling-sources/sdk/src/skills-version.ts +2 -2
  18. package/dist/bundling-sources/sdk/src/tool-calls.ts +3 -3
  19. package/dist/bundling-sources/sdk/src/types.ts +10 -1
  20. package/dist/bundling-sources/sdk/src/version.ts +1 -1
  21. package/dist/bundling-sources/shared_libs/play-runtime/async-operation.ts +87 -1
  22. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts +19 -11
  23. package/dist/bundling-sources/shared_libs/plays/local-file-discovery.ts +1 -1
  24. package/dist/cli/{auth-DEASEYUJ.mjs → auth-6QET7NFP.mjs} +4 -4
  25. package/dist/cli/auth-6ZUH42ZA.js +39 -0
  26. package/dist/cli/{billing-TUTB4H6F.mjs → billing-HAQ2VDQX.mjs} +4 -4
  27. package/dist/cli/{billing-QIWD5GYZ.js → billing-KJAGTCFR.js} +73 -73
  28. package/dist/cli/{chunk-WRLYF4DS.js → chunk-4S6X74A3.js} +2 -2
  29. package/dist/cli/{chunk-HXENYWVS.js → chunk-4TCT77UF.js} +485 -114
  30. package/dist/cli/{chunk-KWGB3RWA.js → chunk-556BMGEB.js} +235 -220
  31. package/dist/cli/{chunk-CCIEPJSX.mjs → chunk-6L4P7Z6C.mjs} +2 -2
  32. package/dist/cli/{chunk-M6BQYSV3.mjs → chunk-DRZFTRZJ.mjs} +46 -31
  33. package/dist/cli/{chunk-7IPMWJNZ.js → chunk-ED42XCOW.js} +226 -226
  34. package/dist/cli/{chunk-B6BQ6EAR.mjs → chunk-H2ER7QWR.mjs} +6 -6
  35. package/dist/cli/{chunk-HHRQYYHK.mjs → chunk-H3DCZOXR.mjs} +5 -5
  36. package/dist/cli/{chunk-63ZXA57X.mjs → chunk-HFTOOZGN.mjs} +3 -3
  37. package/dist/cli/{chunk-PPKNOVMF.mjs → chunk-I3MKXASV.mjs} +2 -2
  38. package/dist/cli/{chunk-CLOICRTK.js → chunk-I7EVBLTW.js} +6 -6
  39. package/dist/cli/{chunk-7WQGDKNO.mjs → chunk-K3ODOHOI.mjs} +34 -26
  40. package/dist/cli/{chunk-MCWGQIDV.js → chunk-KA7X75HC.js} +48 -48
  41. package/dist/cli/{chunk-NBXJJBBT.mjs → chunk-KWF4HJF7.mjs} +1 -1
  42. package/dist/cli/{chunk-CMWDXAQH.js → chunk-ME2DZAHC.js} +26 -26
  43. package/dist/cli/{chunk-Z43SUQUL.js → chunk-MHLCMJ2E.js} +99 -91
  44. package/dist/cli/{chunk-MP7FWY76.mjs → chunk-PFPP4BKS.mjs} +2 -2
  45. package/dist/cli/{chunk-HVDBGPDP.mjs → chunk-PQSA443V.mjs} +485 -114
  46. package/dist/cli/{chunk-RHAP7ZW5.mjs → chunk-QCWIORKR.mjs} +2 -2
  47. package/dist/cli/{chunk-FZXZLFNC.js → chunk-RA2SDTSX.js} +15 -15
  48. package/dist/cli/{chunk-ABLS54ZL.js → chunk-RTH26NF3.js} +61 -61
  49. package/dist/cli/{chunk-Z4ZB2CDV.mjs → chunk-TLHF54VX.mjs} +1 -1
  50. package/dist/cli/{chunk-FZZC3A7J.js → chunk-UOSKJIXE.js} +8 -8
  51. package/dist/cli/{chunk-GB3KEA34.mjs → chunk-VH4B5OYM.mjs} +1 -1
  52. package/dist/cli/{chunk-RPGSXBS3.js → chunk-WLODHQ7S.js} +1 -1
  53. package/dist/cli/{chunk-OWP6SI5W.js → chunk-XBPLTHGB.js} +8 -8
  54. package/dist/cli/{chunk-5VCRXKAU.js → chunk-XEV5LMS2.js} +50 -50
  55. package/dist/cli/{chunk-2L6BBM7Z.mjs → chunk-YBZY3EZF.mjs} +4 -4
  56. package/dist/cli/command-docs.d.mts +24 -1
  57. package/dist/cli/command-docs.d.ts +24 -1
  58. package/dist/cli/command-docs.js +8 -2
  59. package/dist/cli/command-docs.mjs +9 -3
  60. package/dist/cli/{csv-FYI4XWEA.js → csv-2WSF5TEM.js} +12 -12
  61. package/dist/cli/{csv-GQ5K6MDD.mjs → csv-V7UHOBFE.mjs} +3 -3
  62. package/dist/cli/{db-WYSI3J43.js → db-42RL4FZD.js} +29 -29
  63. package/dist/cli/{db-DYXQOAWZ.mjs → db-TD375E4N.mjs} +4 -4
  64. package/dist/cli/{describe-T25AHZEJ.js → describe-7WFCBZUY.js} +18 -18
  65. package/dist/cli/{describe-YIIUMAZF.mjs → describe-GPUKAWOZ.mjs} +8 -8
  66. package/dist/cli/{executions-3D7KAJ2C.js → executions-LGVG3FPH.js} +6 -6
  67. package/dist/cli/{executions-RYFSOPMQ.mjs → executions-M7O63JNA.mjs} +4 -4
  68. package/dist/cli/{feedback-CIZXMDMJ.mjs → feedback-6PBSKVB2.mjs} +3 -3
  69. package/dist/cli/{feedback-I7FWPC7V.js → feedback-PZZA2M4S.js} +7 -7
  70. package/dist/cli/{git-JCURDXPQ.mjs → git-2VIFM5DI.mjs} +4 -4
  71. package/dist/cli/git-ZSJD3BID.js +23 -0
  72. package/dist/cli/index.js +93 -93
  73. package/dist/cli/index.mjs +33 -33
  74. package/dist/cli/{legacy-noops-4BW4EZJG.mjs → legacy-noops-DPUBZI7N.mjs} +4 -4
  75. package/dist/cli/{legacy-noops-G6F5LNUM.js → legacy-noops-IQ6QTZNZ.js} +7 -7
  76. package/dist/cli/{monitors-43UXU5C3.js → monitors-6GWAZFYV.js} +85 -85
  77. package/dist/cli/{monitors-LTKH5IWE.mjs → monitors-KBZVQG2U.mjs} +4 -4
  78. package/dist/cli/{org-I3WHUV67.mjs → org-CP3VSJBX.mjs} +4 -4
  79. package/dist/cli/{org-7MSUEPXL.js → org-JKGTHXOZ.js} +64 -64
  80. package/dist/cli/{play-HRZXSNXV.mjs → play-DD2ME4L4.mjs} +7 -7
  81. package/dist/cli/play-G5GVMIBN.js +157 -0
  82. package/dist/cli/{providers-BY6JPMKP.mjs → providers-JUNOFKI7.mjs} +4 -4
  83. package/dist/cli/{providers-DWLWK5VX.js → providers-P34QYYG6.js} +7 -7
  84. package/dist/cli/{quickstart-E647CKUQ.mjs → quickstart-N6SWOK7E.mjs} +3 -3
  85. package/dist/cli/{quickstart-QO6GCK4U.js → quickstart-UL3DEFA4.js} +5 -5
  86. package/dist/cli/{search-3WUQBHRV.mjs → search-SC7I56HX.mjs} +5 -5
  87. package/dist/cli/search-W4GXWTOM.js +26 -0
  88. package/dist/cli/{secrets-CPNHE5XI.js → secrets-6ZJE7ZPM.js} +13 -13
  89. package/dist/cli/{secrets-WTGMFFP7.mjs → secrets-RTARNYF5.mjs} +4 -4
  90. package/dist/cli/{sessions-UFGGEDZP.js → sessions-6IZ2XHGW.js} +5 -5
  91. package/dist/cli/{sessions-6Q5E7GSY.mjs → sessions-7RKV2T3O.mjs} +4 -4
  92. package/dist/cli/{settings-QMEIKOUI.mjs → settings-V6PXA6HY.mjs} +7 -7
  93. package/dist/cli/{settings-NF5726RU.js → settings-YX3XJDXE.js} +74 -74
  94. package/dist/cli/{setup-J35MMJ7C.js → setup-CQ5VRNNU.js} +41 -41
  95. package/dist/cli/{setup-ZOQOJMJ7.mjs → setup-V2O4UJNT.mjs} +6 -6
  96. package/dist/cli/skills-LBZPJTPI.js +28 -0
  97. package/dist/cli/{skills-UFDKCSYR.mjs → skills-VHJZWEHA.mjs} +4 -4
  98. package/dist/cli/{tools-3SU3EUQT.mjs → tools-OD5WKEWY.mjs} +6 -6
  99. package/dist/cli/tools-TQNM473H.js +40 -0
  100. package/dist/cli/{update-SXYX4PMC.mjs → update-CRMNOMJ3.mjs} +6 -6
  101. package/dist/cli/update-QY6GAK6B.js +28 -0
  102. package/dist/cli/{workflow-2LINUMOP.mjs → workflow-EVDYNCDD.mjs} +5 -5
  103. package/dist/cli/{workflow-XAIEXDUI.js → workflow-XHORSD5T.js} +15 -15
  104. package/dist/{client-DEKvymBI.d.ts → client-BhK9kix9.d.ts} +19 -0
  105. package/dist/{client-0avPvYBP.d.mts → client-DpzZi4fU.d.mts} +19 -0
  106. package/dist/index.d.mts +2 -2
  107. package/dist/index.d.ts +2 -2
  108. package/dist/index.js +6 -6
  109. package/dist/index.mjs +3 -3
  110. package/dist/install-integrity.json +76 -76
  111. package/dist/plays/run-request.d.mts +1 -1
  112. package/dist/plays/run-request.d.ts +1 -1
  113. package/dist/release.d.mts +1 -1
  114. package/dist/release.d.ts +1 -1
  115. package/dist/release.js +2 -2
  116. package/dist/release.mjs +1 -1
  117. package/package.json +1 -1
  118. package/dist/cli/auth-AOM2LA73.js +0 -39
  119. package/dist/cli/git-MVMIPHQ6.js +0 -23
  120. package/dist/cli/play-R5TYLP5L.js +0 -157
  121. package/dist/cli/search-34AC6FC7.js +0 -26
  122. package/dist/cli/skills-WGYISRE5.js +0 -28
  123. package/dist/cli/tools-Q642ZZ2M.js +0 -40
  124. package/dist/cli/update-T5MNWAQC.js +0 -28
@@ -1,5 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/cli/command-docs.ts
2
2
  var CONVENTIONS = `
3
+ [[cli:
3
4
  Conventions (apply to every command):
4
5
  Output mode: readable text by default. --json prints JSON. tools execute
5
6
  is the exception: it prints JSON; --output-format csv prints a readable
@@ -15,9 +16,14 @@ Conventions (apply to every command):
15
16
  Read render.sections when you want the short human view of a JSON result.
16
17
  File inputs: every --input, --payload, and --sql flag accepts inline text or
17
18
  @path to read the value from a local file, for example --input @input.json.
19
+ ]]
20
+ [[mcp:
21
+ Conventions (apply to every tool):
22
+ ]]
18
23
  Ids: play references look like prebuilt/person-to-phone-batch or
19
24
  <workspace-slug>/my-play; run ids look like
20
- play/<play-ref>/run/<timestamp>-<suffix> and are printed by plays run.
25
+ play/<play-ref>/run/<timestamp>-<suffix> and are printed by [[plays run]].
26
+ [[cli:
21
27
  Large results: prefer the narrower command over post-processing a big
22
28
  payload: runs export for rows, billing usage --run-id for cost,
23
29
  --compact where offered, and runs get without --full.
@@ -28,27 +34,41 @@ Conventions (apply to every command):
28
34
  with field-level output references and edge cases; later ones print the
29
35
  core section. --help --verbose prints the full explanation again;
30
36
  --help --quiet prints commander help only.
37
+ ]]
31
38
  `;
32
39
  var COMMAND_DOCS = {
33
40
  "": {
34
41
  core: `
42
+ [[cli:
35
43
  Make sure to run --help before running a command, you'll often find its
36
44
  behavior has some differences from your expectations!
45
+ ]]
46
+ [[mcp:
47
+ Read deepline_help for a tool before calling it, you'll often find its
48
+ behavior has some differences from your expectations!
49
+ ]]
37
50
 
38
51
  What Deepline is for:
39
52
  Deepline runs GTM data work: find companies and people, resolve emails and
40
53
  phones, research accounts, and keep durable, resumable runs of that work.
41
54
  Three nouns cover almost everything:
42
55
  tools one provider or API operation (search, enrich, verify). Atomic,
43
- priced per call. Discover with search, inspect with tools
44
- describe, call with tools execute.
56
+ priced per call. Discover with [[search]], inspect with [[tools
57
+ describe]], call with [[tools execute]].
45
58
  plays a durable workflow, usually a prebuilt waterfall over a CSV. Discover
46
- with search, read the contract with describe, start with
47
- plays run.
59
+ with [[search]], read the contract with [[cli:describe]][[mcp:deepline_describe_play]], start with
60
+ [[plays run]].
61
+ [[cli:
48
62
  runs one execution of a play: status, rows, logs, cost, and export.
49
63
  Inspect with runs get, download rows with runs export.
64
+ ]]
65
+ [[mcp:
66
+ runs one execution of a play: status, rows, logs, and cost. Inspect
67
+ with deepline_get_run, read rows with deepline_read_play_output.
68
+ ]]
50
69
 
51
70
  The agent path for a typical task:
71
+ [[cli:
52
72
  deepline --help prints the CLI version and the auth state on its first two
53
73
  lines, checked live. Do not run version or auth status as well.
54
74
  1. deepline billing balance only when you need the credit balance
@@ -59,31 +79,56 @@ The agent path for a typical task:
59
79
  4. deepline plays run <ref> --input '{"csv":"file.csv"}' waits, prints run id
60
80
  5. deepline runs export <run-id> --out result.csv rows as CSV
61
81
  6. deepline billing usage --run-id <run-id> what it cost
62
- Use tools execute only when no play covers the job or for one-off lookups.
82
+ ]]
83
+ [[mcp:
84
+ 1. deepline_auth_status the connected workspace
85
+ 2. deepline_search with query "<input you have -> result you need>"
86
+ one search over prebuilt plays, tools, your
87
+ workspace's plays, and monitor types
88
+ 3. deepline_describe_play read required input, CSV columns, output
89
+ 4. deepline_run_play returns the run id; a CSV goes in input_file
90
+ 5. deepline_read_play_output the result rows, a page at a time
91
+ 6. deepline_billing_usage with run_id what it cost
92
+ ]]
93
+ Use [[tools execute]] only when no play covers the job or for one-off lookups.
63
94
  ${CONVENTIONS}`,
64
95
  verbose: `
65
96
  Working rules:
66
- Search with the task as one sentence, not keywords: search "50 seed-stage
67
- company domains -> each company's lead investors".
97
+ Search with the task as one sentence, not keywords: [[search "50 seed-stage
98
+ company domains -> each company's lead investors"]].
68
99
  Results are ranked for what you have and what you need, and each one
69
100
  names its kind: prebuilt play, tool, custom play, or monitor type.
70
101
  A CSV goes through the batch form of a prebuilt play, never one
102
+ [[cli:
71
103
  single-record run per row: plays run prebuilt/<play>-batch --input
72
104
  '{"csv":"leads.csv"}', then runs export <run-id> --out <path>. Work
105
+ ]]
106
+ [[mcp:
107
+ single-record run per row: deepline_run_play with play
108
+ prebuilt/<play>-batch, the CSV rows in input_file, and inputs
109
+ {"csv": "<input_file.path>"}. Read the rows with
110
+ deepline_read_play_output. Work
111
+ ]]
73
112
  emails: person-to-email-batch takes the whole file in one run. Each row
74
113
  tries its LinkedIn profile first and falls through to name and company
75
114
  domain, so do not split the file or run a second pass. Phones: a known
76
115
  person -> person-to-phone-batch.
77
116
  The balance is a ceiling, not a budget to use up. Before each paid call,
117
+ [[cli:
78
118
  estimate its cost: the price from describe <tool> or
79
119
  plays list --show-cost, times the results or rows you will request. Take
120
+ ]]
121
+ [[mcp:
122
+ estimate its cost: the price from deepline_describe_tool or
123
+ deepline_describe_play, times the results or rows you will request. Take
124
+ ]]
80
125
  the cheapest route that can answer and test it with the smallest limit.
81
126
  If one tool call would cost more than about 5 credits, lower its limit or
82
127
  find a cheaper route first. Never top up, buy credits, or change billing
83
128
  unless the user asks. When the balance runs out, stop spending, deliver
84
129
  the rows you have, and name the rows left unresolved.
85
130
  Pilot before scale: run the play on a small slice, read its actual cost
86
- with billing usage --run-id <run-id>, then run the full file under the
131
+ with [[billing usage --run-id <run-id>]], then run the full file under the
87
132
  same play. A stated-scope input of about 25 rows or fewer is its own
88
133
  pilot: run it once.
89
134
 
@@ -99,6 +144,7 @@ Reading results without parsing:
99
144
  Every structured payload carries render.sections, a list of titled line
100
145
  groups that is exactly what a terminal user would see. When a result is
101
146
  large, read render.sections first, then the specific field you need.
147
+ [[cli:
102
148
 
103
149
  Auth in non-interactive shells:
104
150
  When the Auth line of deepline --help says not connected, stop and report
@@ -109,50 +155,69 @@ Skills:
109
155
  The bare skills command reinstalls the Deepline skill files on disk. To see
110
156
  which skills are installed without changing anything, run
111
157
  skills --dry-run and read the plan.
158
+ ]]
112
159
  `
113
160
  },
114
161
  health: {
115
162
  core: `
116
163
  Purpose:
117
164
  Read-only check that the configured Deepline host answers. Needs no API
118
- key; --play-runner does.
165
+ key[[cli:; --play-runner does]].
119
166
  When:
120
- Only when a command cannot reach the server, or with --play-runner to prove
121
- the whole play execution plane works.
167
+ Only when [[cli:a command cannot reach the server]][[mcp:a call fails]][[cli:, or with --play-runner to prove
168
+ the whole play execution plane works]].
169
+ [[cli:
122
170
  Input:
123
171
  No arguments. --play-runner runs a tiny no-provider play end to end.
172
+ ]]
173
+ [[cli:
124
174
  Output:
125
175
  Text: "<host>: <status>", then any service notice. --json: the server
126
176
  health object plus status_banner (null when there is no notice). With
127
177
  --play-runner,
128
178
  {status, playRunner: {status, check}}. An unreachable host exits nonzero
129
179
  with "Cannot reach Deepline API: <reason>".
180
+ ]]
181
+ [[mcp:
182
+ Output:
183
+ The server health object plus status_banner (null when there is no
184
+ notice).
185
+ ]]
130
186
  Cost:
131
- Free. --play-runner uses no providers.
187
+ Free.[[cli: --play-runner uses no providers.]]
132
188
  Avoid:
133
- Do not use health to check auth or balance; use auth status or billing
134
- balance.
189
+ Do not use [[health]] to check auth or balance; use [[auth status]] or [[cli:billing
190
+ balance]][[mcp:deepline_billing_usage]].
135
191
  `
136
192
  },
137
193
  "auth status": {
138
194
  core: `
139
195
  Purpose:
140
- Report which Deepline host, workspace, and user this shell is authenticated
196
+ Report which Deepline host, workspace, and user this [[cli:shell]][[mcp:connector]] is authenticated
141
197
  as, without changing anything.
142
198
  When:
143
- When you need the workspace name or id, or to confirm auth after a 3 exit
144
- code.
199
+ When you need the workspace name or id[[cli:, or to confirm auth after a 3 exit
200
+ code]].
201
+ [[cli:
145
202
  Input:
146
203
  No arguments. --auth-scope folder|global reads one auth store only.
147
204
  --reveal persists the API key into the local auth file; do not use it.
205
+ ]]
206
+ [[cli:
148
207
  Output (JSON):
149
208
  host, hostStatus, status ("claimed" when authenticated), connected
150
209
  (boolean), workspace {id, name, slug}, user {id}, render.sections.
210
+ ]]
211
+ [[mcp:
212
+ Output:
213
+ status ("claimed" when authenticated), org_id, org_name, org_slug, user_id,
214
+ user_email.
215
+ ]]
151
216
  Cost:
152
217
  Free.
153
218
  Avoid:
154
- connected false in an unattended shell is a stop-and-report condition, not
155
- a prompt to run auth register.
219
+ connected false[[cli: in an unattended shell]] is a stop-and-report condition[[cli:, not
220
+ a prompt to run auth register]].
156
221
  `
157
222
  },
158
223
  "auth register": {
@@ -163,28 +228,32 @@ Purpose:
163
228
  When:
164
229
  Only in an interactive session where a person can open the URL. Never in an
165
230
  unattended agent shell: the command has nothing to do until a human acts.
231
+ [[cli:
166
232
  Input:
167
233
  No arguments. It opens the approval page and waits for approval; keep that
168
234
  default. In Cowork it prints the link and returns, and auth wait finishes
169
235
  the login.
236
+ ]]
170
237
  Output:
171
238
  The approval URL and, after approval, the connected workspace.
172
239
  Cost:
173
240
  Free.
174
241
  Avoid:
175
- If auth status says connected false and you cannot open a browser, report
242
+ If [[auth status]] says connected false and you cannot open a browser, report
176
243
  that Deepline is not connected and stop.
177
244
  `
178
245
  },
179
246
  "auth wait": {
180
247
  core: `
181
248
  Purpose:
182
- Poll a pending auth register approval until it completes or times out.
249
+ Poll a pending [[auth register]] approval until it completes or times out.
183
250
  When:
184
- After auth register returned before approval, as it does in Cowork, and a
251
+ After [[auth register]] returned before approval, as it does in Cowork, and a
185
252
  person is approving it in a browser.
253
+ [[cli:
186
254
  Input:
187
255
  No arguments beyond the pending registration it finds locally.
256
+ ]]
188
257
  Output:
189
258
  The connected workspace once approved; a timeout error otherwise.
190
259
  Cost:
@@ -198,14 +267,25 @@ Purpose:
198
267
  When:
199
268
  Once at the start of a task, before the first paid call, and after a run
200
269
  reports a balance or insufficient-credits error.
270
+ [[cli:
201
271
  Input:
202
272
  No arguments. Prints one line, "Balance: N credits". --verbose adds
203
273
  reservations and usage awaiting settlement; --json returns the full record.
274
+ ]]
275
+ [[cli:
204
276
  Output (JSON):
205
277
  balance (Deepline credits), balance_display, rough_usd_balance,
206
278
  balance_status, and render.sections. The balance includes other activity
207
279
  in the workspace, so a before and after difference does not isolate one
208
280
  command; use billing usage for that.
281
+ ]]
282
+ [[mcp:
283
+ Output:
284
+ balance {balance (Deepline credits), balance_display, rough_usd_balance,
285
+ balance_status}. The balance includes other activity in the workspace, so
286
+ a before and after difference does not isolate one call; read a run's
287
+ spend with deepline_billing_usage with run_id.
288
+ ]]
209
289
  Cost:
210
290
  Free.
211
291
  `
@@ -215,22 +295,34 @@ Cost:
215
295
  Purpose:
216
296
  Read what the workspace, or one run, has spent in Deepline credits.
217
297
  When:
218
- After a run finishes, to report its actual cost: billing usage --run-id
219
- <run-id>. This is the canonical per-run cost read; runs get does not
220
- include cost unless you pass --full.
298
+ After a run finishes, to report its actual cost: [[billing usage --run-id
299
+ <run-id>]]. This is the canonical per-run cost read; [[runs get]] does not
300
+ include cost unless you pass [[cli:--full]][[mcp:full: true]].
301
+ [[cli:
221
302
  Input:
222
303
  --run-id <run-id> scopes the spend to one play run. --limit and --cursor
223
304
  page the recent-call list. --json prints JSON.
305
+ ]]
306
+ [[cli:
224
307
  Output (JSON):
225
308
  balance, usage.last_30_days_usage_credits, usage.month_spent_credits, and
226
309
  with --run-id: run.spent_credits, run.rough_usd_spent, run.event_count.
227
310
  render.sections includes a "Run spend: N Deepline Credits" line.
311
+ ]]
312
+ [[mcp:
313
+ Output:
314
+ usage {balance, usage {month_spent_credits, last_30_days_usage_credits,
315
+ temporary_hold_credits}, plan, quota, recent.entries}, and with run_id
316
+ usage.run {run_id, spent_credits, rough_usd_spent, event_count}, null
317
+ when the run has no billing events yet.
318
+ ]]
228
319
  Cost:
229
320
  Free.
230
321
  Avoid:
231
- Do not grep a runs get payload for cost; use this command.
322
+ Do not grep a [[runs get]] payload for cost; use this command.
232
323
  `,
233
324
  verbose: `
325
+ [[cli:
234
326
  Output fields:
235
327
  balance, balance_display, rough_usd_balance credits available now.
236
328
  plan.usd_per_credit conversion used for rough USD.
@@ -244,6 +336,7 @@ Output fields:
244
336
  quota.* monthly cap, when enabled.
245
337
  recent activity one line per billed call in
246
338
  render.sections, newest first.
339
+ ]]
247
340
  Cases:
248
341
  A run that is still active shows a partial spend; read it again after the
249
342
  run reaches completed or failed.
@@ -260,6 +353,7 @@ When:
260
353
  First, for any task where you do not already know the exact play or tool.
261
354
  Search once with the task; there is no separate search for plays and for
262
355
  tools.
356
+ [[cli:
263
357
  Input:
264
358
  One argument: the task as a sentence, written as the input you have ->
265
359
  the result you need, for example "50 company domains -> each one's lead
@@ -268,9 +362,10 @@ Input:
268
362
  and custom), or monitors, and --exclude leaves kinds out; both take a
269
363
  comma-separated list. --categories <a,b> and --search_terms <a,b> filter
270
364
  tools and work without a task. --limit (1-50) and --offset page.
365
+ ]]
271
366
  Output:
272
- A readable ranked list by default; read that form. With
273
- --json: results[] where each item has id, kind (tool, prebuilt_play,
367
+ [[cli:A readable ranked list by default; read that form. With
368
+ --json: ]]results[] where each item has id, kind (tool, prebuilt_play,
274
369
  custom_play, monitor_type), displayName, and description. A tool adds
275
370
  provider, categories, inputFields, pricing, connected, and executeCommand;
276
371
  a play adds reference, inputFields, describeCommand, and runCommand. Also
@@ -279,13 +374,15 @@ Output:
279
374
  Cost:
280
375
  Free.
281
376
  Next:
282
- describe <id> reads any result, whatever its kind. Then plays run for a
283
- play, tools execute for a tool. When a play and a tool both fit a job with
377
+ [[cli:describe]][[mcp:deepline_describe_tool or deepline_describe_play]] <id> reads any result, whatever its kind. Then [[plays run]] for a
378
+ play, [[tools execute]] for a tool. When a play and a tool both fit a job with
284
379
  rows, take the play.
285
380
  Avoid:
286
- Do not hardcode a provider list; search returns what this workspace can
381
+ Do not hardcode a provider list; [[search]] returns what this workspace can
287
382
  call now. Do not run anything from search output alone; describe it first.
383
+ [[cli:
288
384
  tools search and plays search are deprecated aliases of this command.
385
+ ]]
289
386
  `
290
387
  },
291
388
  describe: {
@@ -295,8 +392,9 @@ Purpose:
295
392
  type. What it is, cost, inputs, outputs, and an example of running it from
296
393
  the CLI and from inside a play.
297
394
  When:
298
- After search and before the first run of something you have not used. You
395
+ After [[search]] and before the first run of something you have not used. You
299
396
  do not say which kind the id is.
397
+ [[cli:
300
398
  Input:
301
399
  The id or reference from search. --verbose fills in every input and reads
302
400
  every output in the examples; --cli-example and --play-example print one
@@ -306,10 +404,13 @@ Input:
306
404
  --feature <name>[=<value>] describes one.
307
405
  A play your workspace created is shown instead of a Deepline tool or
308
406
  prebuilt play of the same name; --prebuilt shows the Deepline one.
407
+ ]]
408
+ [[cli:
309
409
  Output:
310
410
  Readable text by default; read that form. With --json:
311
411
  kind, id, displayName, description, cost, inputs[], outputs[], and
312
412
  runExamples {cli, play}, plus the kind's own fields.
413
+ ]]
313
414
  Cost:
314
415
  Free.
315
416
  `
@@ -324,12 +425,12 @@ When:
324
425
  for the job. For CSV-shaped work use a play instead: plays retry,
325
426
  reuse completed rows, and export.
326
427
  The sequence:
327
- search <words> ranked tools and plays for an intent
328
- describe <id> required input fields, pricing, output shape
329
- tools execute <id> --input '{...}' run it
428
+ [[search <words>]] ranked tools and plays for an intent
429
+ [[cli:describe <id>]][[mcp:deepline_describe_tool]] required input fields, pricing, output shape
430
+ [[tools execute <id> --input '{...}']] run it
330
431
  Cost:
331
432
  search, describe, list, and grep are free. execute can spend credits; the
332
- price is in describe <id>.
433
+ price is in [[cli:describe <id>]][[mcp:deepline_describe_tool]].
333
434
  `
334
435
  },
335
436
  "tools grep": {
@@ -340,11 +441,15 @@ Purpose:
340
441
  When:
341
442
  When you know a provider or field name and want every matching tool rather
342
443
  than a ranked guess. Use search for intent queries.
444
+ [[cli:
343
445
  Input:
344
446
  A query; --mode all (default, AND), any (OR), or phrase; --categories.
447
+ ]]
448
+ [[cli:
345
449
  Output (JSON):
346
450
  tools[] with id, provider, displayName, description, categories, and
347
451
  executeCommand.
452
+ ]]
348
453
  Cost:
349
454
  Free.
350
455
  `
@@ -354,13 +459,17 @@ Cost:
354
459
  Purpose:
355
460
  Browse tool categories, or list every tool in one category exhaustively.
356
461
  When:
357
- To see what kinds of tools exist (bare tools list) or to enumerate one
358
- category without ranking (tools list email_finder).
462
+ To see what kinds of tools exist (bare [[tools list]]) or to enumerate one
463
+ category without ranking ([[tools list email_finder]]).
464
+ [[cli:
359
465
  Input:
360
466
  Optional positional category. --json prints JSON.
467
+ ]]
468
+ [[cli:
361
469
  Output (JSON):
362
470
  Bare: one entry per category with its tool count. With a category: one row
363
471
  per tool with required inputs and a pricing hint. Never truncated.
472
+ ]]
364
473
  Cost:
365
474
  Free.
366
475
  `
@@ -373,12 +482,15 @@ Purpose:
373
482
  When:
374
483
  Always before paying for an unfamiliar tool; the input schema is the only
375
484
  reliable source of field names.
485
+ [[cli:
376
486
  Input:
377
487
  The tool id. Prints readable text by default; read that
378
488
  form and pass --json only for a program. --pricing-only, --schema-only,
379
489
  --examples-only, --getters-only print one section. --out <path> saves the
380
490
  output to a file. get is an alias of describe, and deepline describe <id>
381
491
  is the same read for a tool, a play, or a monitor type.
492
+ ]]
493
+ [[cli:
382
494
  Output (JSON):
383
495
  kind, id, cost {displayText, unit, billingMode}, inputs[] {name, type,
384
496
  required, example}, outputs[] {name, type, read}, runExamples {cli, play},
@@ -389,6 +501,7 @@ Output (JSON):
389
501
  guidance (usage notes for the provider and the tool), examples[] (an
390
502
  illustrative input and response, not an observed one), usageGuidance,
391
503
  extractors (list paths for row-shaped output).
504
+ ]]
392
505
  Cost:
393
506
  Free.
394
507
  Avoid:
@@ -403,6 +516,7 @@ Avoid:
403
516
  invalid result.
404
517
  `,
405
518
  verbose: `
519
+ [[cli:
406
520
  Output fields:
407
521
  inputSchema.fields[] the flat list to build --input from. required true
408
522
  fields must be present; type is string, integer,
@@ -424,8 +538,9 @@ Output fields:
424
538
  response into rows; the same paths appear in tools
425
539
  execute output as output_preview.listSourcePath.
426
540
  usageGuidance provider-specific notes worth reading once.
541
+ ]]
427
542
  Related:
428
- tools execute <id> --input @file.json uses the same schema; runtime output
543
+ [[tools execute <id>]][[cli: --input @file.json]] uses the same schema; runtime output
429
544
  help for authoring a play appears under runtimeOutputHelp.
430
545
  `
431
546
  },
@@ -436,6 +551,7 @@ Purpose:
436
551
  When:
437
552
  One-off lookups, searches that return candidates, or when no play covers the
438
553
  job. Use a play for a CSV of rows.
554
+ [[cli:
439
555
  Input:
440
556
  Positional tool id, then the parameters in exactly one of these forms:
441
557
  --input '{"email":"a@b.com"}' inline JSON object
@@ -443,26 +559,38 @@ Input:
443
559
  -p email=a@b.com one key=value per -p, repeatable
444
560
  --payload is an alias of --input. There is no --payload-file flag; use
445
561
  @path. --out <file.csv> writes row-shaped output to a CSV file.
562
+ ]]
563
+ [[cli:
446
564
  Output (JSON):
447
565
  job_id, status ("completed" or a failure status), toolResponse.rawV2 (the
448
566
  complete provider result), output_preview {kind, rowCount, columns, preview,
449
567
  listSourcePath}, summary, next, render.sections. Errors return a non-zero
450
568
  exit code and an error object, not a completed status.
569
+ ]]
570
+ [[mcp:
571
+ Output:
572
+ data, the provider result, and credits_used when it is reported.
573
+ ]]
451
574
  Cost:
452
- Spends Deepline credits per call at the price in describe. A search
575
+ Spends Deepline credits per call at the price in [[cli:describe]][[mcp:deepline_describe_tool]]. A search
453
576
  with limit N is one call; it is not billed per result.
454
577
  Avoid:
455
- Do not wrap the result in shell parsing to find rows; output_preview
456
- already lists the row path and the first rows, and --out writes the CSV.
578
+ Do not [[cli:wrap the result in shell parsing]][[mcp:post-process the result]] to find rows; output_preview
579
+ already lists the row path and the first rows[[cli:, and --out writes the CSV]].
580
+ [[cli:
457
581
  Do not add 2>&1 when you parse the JSON: stderr text breaks the parse. A
458
582
  failed call prints its error as JSON on stdout.
583
+ ]]
459
584
  `,
460
585
  verbose: `
586
+ [[cli:
461
587
  Input rules:
462
588
  The object must match inputSchema.fields from describe. Extra keys
463
589
  are rejected by most providers. Nested filter objects (for example
464
590
  crustdata_v3_* filters) must be passed as JSON, so use --input, not -p.
465
591
  An @path value is read relative to the current directory.
592
+ ]]
593
+ [[cli:
466
594
  Output fields:
467
595
  toolResponse.rawV2 the complete provider response with its nesting
468
596
  kept; toolResponse.raw is the older field beside it.
@@ -473,15 +601,16 @@ Output fields:
473
601
  output_preview.preview a bounded sample of rows; the full array is at the
474
602
  listSourcePath, and --out writes all of it as CSV.
475
603
  next.inspect a read-only command that inspects the call, for debugging.
604
+ ]]
476
605
  Cases:
477
606
  Insufficient credits fail before the provider is called, with an
478
- insufficient-credits error; check billing balance first.
607
+ insufficient-credits error; check [[cli:billing balance]][[mcp:deepline_billing_usage]] first.
479
608
  A provider that needs a connected account fails with an auth or permission
480
- error; describe shows connected false beforehand.
609
+ error; [[cli:describe]][[mcp:deepline_describe_tool]] shows connected false beforehand.
481
610
  Free tools (run_javascript, free_* ids) never charge.
482
611
  Related:
483
612
  To run the same operation over many rows, put the rows in a CSV and use a
484
- prebuilt play (search), or write one (plays --help).
613
+ prebuilt play ([[search]]), or write one ([[cli:plays --help]][[mcp:deepline_help with command: plays]]).
485
614
  `
486
615
  },
487
616
  plays: {
@@ -494,6 +623,7 @@ Purpose:
494
623
  When:
495
624
  Any job with rows, or any job that chains providers. A play reuses finished
496
625
  rows on rerun, so a failed run can be resumed instead of repaid.
626
+ [[cli:
497
627
  The sequence:
498
628
  search "<input you have -> result you need>" find the play
499
629
  describe <ref> required input, CSV columns, output fields
@@ -517,6 +647,30 @@ Auditing plays:
517
647
  plays check <file> deprecated or invalid usage, one hint per
518
648
  issue; read-only and free
519
649
  plays triggers every cron and webhook trigger
650
+ ]]
651
+ [[mcp:
652
+ The sequence:
653
+ deepline_search with query "<input you have -> result you need>"
654
+ find the play
655
+ deepline_describe_play required input, CSV columns, output fields
656
+ deepline_run_play start and wait; there is no cost estimate over
657
+ MCP, so price a large run with a small slice
658
+ deepline_read_play_output rows
659
+ Writing a play:
660
+ Send the complete .play.ts file graph inline: entrypoint plus files.
661
+ deepline_check_play validate after every edit; free
662
+ deepline_run_inline_play run it without publishing; CSV data files go
663
+ in files, named by input_file_path
664
+ deepline_publish_play make it live for deepline_run_play and triggers
665
+ The file is: export default definePlay('name', async (ctx, input) => {...}).
666
+ deepline_help with command "plays" and detail "verbose" lists the
667
+ authoring rules.
668
+ Auditing plays:
669
+ deepline_search_plays saved plays
670
+ deepline_list_play_versions its revisions, and which one is live
671
+ deepline_check_play deprecated or invalid usage, one hint per
672
+ issue; read-only and free
673
+ ]]
520
674
  Cost:
521
675
  search, describe, list, check, and get are free; run spends credits.
522
676
  `,
@@ -538,9 +692,9 @@ Authoring rules:
538
692
  should export as CSV.
539
693
  Dataset handles are async: await rows.count(), rows.first(),
540
694
  rows.peek(n), rows.materialize(n), or for await. Array methods on a
541
- handle fail plays check.
695
+ handle fail [[cli:plays check]][[mcp:deepline_check_play]].
542
696
  Tool calls: rowCtx.tools.execute({ id, tool, input, description }). Read
543
- results through the getters describe lists:
697
+ results through the getters [[cli:describe]][[mcp:deepline_describe_tool]] lists:
544
698
  result.extractedValues.<name>.get() and
545
699
  result.extractedLists.<name>.get(). A field with no getter is under
546
700
  result.toolResponse.rawV2 with the provider's nesting kept.
@@ -553,8 +707,8 @@ Authoring rules:
553
707
  the catch so an exhausted waterfall fails loudly. Never branch on an
554
708
  error message.
555
709
  External APIs: ctx.fetch with a fixed key, and credentials through
556
- ctx.secrets.bearer(...) or ctx.secrets.header(...), stored with deepline
557
- secrets set. res.json is a property, not a method; check res.ok. A play
710
+ ctx.secrets.bearer(...) or ctx.secrets.header(...)[[cli:, stored with deepline
711
+ secrets set]]. res.json is a property, not a method; check res.ok. A play
558
712
  cannot loop ctx.fetch over pages: fan out over rows with ctx.dataset, or
559
713
  call one endpoint that returns the whole result.
560
714
  Triggers: a cron trigger receives {} unless its binding declares an input
@@ -570,7 +724,7 @@ Authoring rules:
570
724
  stays null, not false.
571
725
  Diagram: a /** @mermaid <name> */ block above the play draws it in the
572
726
  dashboard, with // @mermaid-node <id> out:"<identifier>" above the
573
- statement each box stands for. plays check validates it.
727
+ statement each box stands for. [[cli:plays check]][[mcp:deepline_check_play]] validates it.
574
728
  `
575
729
  },
576
730
  "plays grep": {
@@ -579,10 +733,14 @@ Purpose:
579
733
  Full-text search over plays this workspace authored (not prebuilt ones).
580
734
  When:
581
735
  Finding a saved play by a phrase in its source or description.
736
+ [[cli:
582
737
  Input:
583
738
  A query. --json prints JSON.
739
+ ]]
740
+ [[cli:
584
741
  Output (JSON):
585
742
  Matching owned plays with the matched fields and terms.
743
+ ]]
586
744
  Cost:
587
745
  Free.
588
746
  `
@@ -590,14 +748,23 @@ Cost:
590
748
  "plays list": {
591
749
  core: `
592
750
  Purpose:
593
- Inventory of saved and prebuilt plays, one bounded page at a time. It is
594
- the command that carries cost estimates.
751
+ Inventory of saved and prebuilt plays, one bounded page at a time.[[cli: It is
752
+ the command that carries cost estimates.]]
595
753
  When:
754
+ [[cli:
596
755
  To price a play before running it: plays list --show-cost, then read the
597
756
  cost estimate line for the play, or costEstimate in JSON.
757
+ ]]
758
+ [[mcp:
759
+ To find a saved or prebuilt play by name. It carries no cost estimate; price
760
+ a play by running a small slice and reading deepline_billing_usage.
761
+ ]]
762
+ [[cli:
598
763
  Input:
599
764
  --show-cost adds estimates. --limit and --cursor page. --categories
600
765
  filters by tool category. --json prints JSON.
766
+ ]]
767
+ [[cli:
601
768
  Output (JSON):
602
769
  plays[] with playKey, reference, displayName, description, origin,
603
770
  runCount, lastRun, and with --show-cost costEstimate {status, unit ("row"
@@ -605,23 +772,30 @@ Output (JSON):
605
772
  {status: "unavailable", reason, message}; count, has_more, next_cursor,
606
773
  next (the next-page command), render.sections with a "cost estimate:"
607
774
  line per play.
775
+ ]]
608
776
  Cost:
609
777
  Free.
778
+ [[cli:
610
779
  Avoid:
611
780
  describe does not include a cost estimate; this command does.
781
+ ]]
612
782
  `,
613
783
  verbose: `
784
+ [[cli:
614
785
  Pricing a run:
615
786
  Multiply lowCredits..highCredits by the row count when unit is "row", or
616
787
  use it directly when unit is "run". Compare with the billing balance.
617
788
  When the estimate is unavailable, run a two-row slice first and
618
789
  read its actual spend with billing usage --run-id <run-id>.
790
+ ]]
791
+ [[cli:
619
792
  Output fields:
620
793
  costEstimate.source "observed" (from past runs; shown with ~) or
621
794
  "static" (from the play's declared tools).
622
795
  costEstimate.sampleRunCount how many runs the observation is based on.
623
796
  has_more / next_cursor the page is bounded; pass --cursor to continue.
624
797
  is_truncated true when the page was cut for size.
798
+ ]]
625
799
  `
626
800
  },
627
801
  "plays describe": {
@@ -632,30 +806,45 @@ Purpose:
632
806
  When:
633
807
  Always before the first run of a play. It is free and it is the only
634
808
  reliable source of the input field and column names.
809
+ [[cli:
635
810
  Input:
636
811
  The play reference from search (prebuilt/... or <workspace>/...).
637
812
  --compact shortens schemas. --json prints JSON.
813
+ ]]
814
+ [[cli:
638
815
  Output (JSON):
639
816
  name, reference, displayName, description, inputSchema (JSON Schema plus
640
817
  fields[] {name, required, type}), outputSchema, csvInput {inputField,
641
818
  rowInputSchema.required[], defaultColumns, columnFlags}, rowOutputSchema,
642
819
  runCommand, examples, triggerStatus, latestRunId.
643
820
  No cost estimate; use plays list --show-cost for that.
821
+ ]]
644
822
  Cost:
645
823
  Free.
824
+ [[cli:
646
825
  Avoid:
647
826
  Do not pass --show-cost here; it is not an option of this command.
827
+ ]]
648
828
  `,
649
829
  verbose: `
650
830
  CSV plays:
831
+ [[cli:
651
832
  csvInput.inputField is the input key that takes the CSV path (usually
652
833
  "csv"), so the run input is {"csv":"path.csv"}. rowInputSchema.required
834
+ ]]
835
+ [[mcp:
836
+ csvInput.inputField is the input key that takes the CSV (usually "csv").
837
+ A play cannot read a file path from this client: send the rows as
838
+ deepline_run_play input_file and set that input to input_file.path.
839
+ rowInputSchema.required
840
+ ]]
653
841
  lists the per-row fields the play needs (for example first_name,
654
842
  last_name, domain). defaultColumns maps each field to the header name the
655
843
  play looks for (FIRST_NAME, LAST_NAME, COMPANY_DOMAIN). When your file uses
656
- other headers, either rename them or pass the columnFlags, for example
657
- --columns.domain website. The run fails at validation, before any credit
844
+ other headers, either rename them[[cli: or pass the columnFlags, for example
845
+ --columns.domain website]]. The run fails at validation, before any credit
658
846
  is spent, when a required column is missing.
847
+ [[cli:
659
848
  Output fields:
660
849
  inputSchema.fields[] flat list for a single-row play; build --input
661
850
  from it.
@@ -669,6 +858,7 @@ Output fields:
669
858
  Related:
670
859
  plays get <ref> returns full metadata, revisions, and source; describe is
671
860
  the compact read meant for running.
861
+ ]]
672
862
  `
673
863
  },
674
864
  "plays get": {
@@ -676,13 +866,15 @@ Related:
676
866
  Purpose:
677
867
  Full metadata for a play: revisions, source, triggers, and latest runs.
678
868
  When:
679
- Only when describe is not enough: reading the source (--source --out
869
+ Only when describe is not enough: reading the source ([[--source]] [[--out]]
680
870
  file.play.ts), checking revisions, or auditing a saved play.
871
+ [[cli:
681
872
  Input:
682
873
  The play reference. --source prints or writes the source; --working,
683
874
  --live, --revision <n> pick which source.
875
+ ]]
684
876
  Output (JSON):
685
- The play record with revision and trigger metadata; with --source, the
877
+ The play record with revision and trigger metadata; with [[--source]], the
686
878
  TypeScript source.
687
879
  Cost:
688
880
  Free.
@@ -691,21 +883,25 @@ Cost:
691
883
  "plays check": {
692
884
  core: `
693
885
  Purpose:
694
- Validate a play contract without starting a run: a local .play.ts file is
886
+ Validate a play contract without starting a run: [[cli:a local .play.ts file]][[mcp:an inline .play.ts file graph]] is
695
887
  bundled and checked, a named or prebuilt play is confirmed discoverable.
696
888
  When:
697
889
  Before running a local play file, and after editing one. Free, so run it
698
890
  every time.
891
+ [[cli:
699
892
  Input:
700
893
  A local path ending in .play.ts, or a play reference. --json prints JSON.
894
+ ]]
895
+ [[cli:
701
896
  Output (JSON):
702
897
  valid (boolean), target, name, reference, inputSchema, outputSchema,
703
898
  runtimeLimit, note, and for local files any errors or warnings with the
704
899
  repair steps.
900
+ ]]
705
901
  Cost:
706
902
  Free.
707
903
  Avoid:
708
- valid true does not mean the input you plan to pass is valid; describe
904
+ valid true does not mean the input you plan to pass is valid; [[describe]]
709
905
  shows the required fields.
710
906
  `
711
907
  },
@@ -715,11 +911,13 @@ Purpose:
715
911
  Start one run of a play, wait for it, and print the result package with
716
912
  the run id.
717
913
  When:
718
- After describe. A CSV goes through the play's batch form
914
+ After [[cli:describe]][[mcp:deepline_describe_play]]. A CSV goes through the play's batch form
719
915
  (prebuilt/<name>-batch) in one run; the single-record form is for one
720
916
  person or company. Pilot a slice first when the estimate times the row
721
917
  count is a large share of the balance; an input of about 25 rows or fewer
722
- is its own pilot.
918
+ is its own pilot.[[mcp: A play cannot read a file path from this client:
919
+ send a CSV's rows as input_file and set the CSV input to input_file.path.]]
920
+ [[cli:
723
921
  Input:
724
922
  Positional: a play reference (prebuilt/... or <workspace>/...) or a local
725
923
  .play.ts path. A path runs that file as written and never publishes it; a
@@ -731,6 +929,8 @@ Input:
731
929
  --columns.<field> <header> maps a CSV header to a required field.
732
930
  --no-wait returns the run id immediately instead of waiting.
733
931
  --run-id-file <path> writes the run id as soon as the server accepts it.
932
+ ]]
933
+ [[cli:
734
934
  Output (JSON, printed when the run ends):
735
935
  run {id, playName, status ("completed", "failed", "stopped")},
736
936
  dashboardUrl, steps[] with per-step progress, rowOutcomes, warnings,
@@ -739,6 +939,16 @@ Output (JSON, printed when the run ends):
739
939
  getLogsCmd, exportDatasetCmds[], queryTableSqlCmds[]. Rows are not in this
740
940
  payload. Progress lines are printed while it waits; the JSON is the last
741
941
  thing printed.
942
+ ]]
943
+ [[mcp:
944
+ Output:
945
+ The run package deepline_get_run returns, once the run ends: run {id,
946
+ playName, status, dashboardUrl}, steps[] with per-step progress,
947
+ rowOutcomes, warnings, datasets[] {tableNamespace, sqlQualifiedTableName,
948
+ actions}, and next {inspect, full, billing, logs}, each naming the MCP call
949
+ for that follow-up. Pass a dataset's tableNamespace as table_namespace to
950
+ deepline_read_play_output for its rows; rows are not in this payload.
951
+ ]]
742
952
  Cost:
743
953
  Spends Deepline credits through the play's tool calls. Validation errors
744
954
  (missing column, bad input) fail before any spend.
@@ -746,22 +956,33 @@ Avoid:
746
956
  Do not run the single-record play once per row of a file; each run pays
747
957
  its own start-up and balance admission, and the batch form keeps a
748
958
  row-level failure inside one completed run.
749
- Do not poll runs get while plays run is still waiting; it already waits.
959
+ Do not poll [[runs get]] while [[plays run]] is still waiting; it already waits.
750
960
  Do not rerun a failed run from scratch; the same command reuses completed
751
961
  rows.
752
962
  `,
753
963
  verbose: `
754
964
  Waiting and timeouts:
965
+ [[cli:
755
966
  The command watches the run until it ends. Prefixed activity lines report
756
967
  queueing and per-step progress; if the tool shell has an execution
757
968
  timeout shorter than the run, start with --no-wait or --run-id-file and
758
969
  poll with runs get <run-id> until run.status is terminal.
970
+ ]]
971
+ [[mcp:
972
+ deepline_run_play waits for the run to end, up to timeout_ms (default 50000,
973
+ maximum 90000; stay under your client's tool-call timeout); timeout_ms: 0
974
+ returns once the run is admitted. A run still active then returns its
975
+ status; call deepline_get_run with run.id until run.status is terminal.
976
+ ]]
977
+ [[cli:
759
978
  Input rules:
760
979
  A CSV path is relative to the current directory; the CLI uploads the file
761
980
  before submitting, so the run does not depend on the file afterwards.
762
981
  Header matching is case-insensitive against csvInput.defaultColumns from
763
982
  describe; other headers need --columns.<field> <header>.
764
983
  --limit 5 and similar pass-through flags become input.limit = 5.
984
+ ]]
985
+ [[cli:
765
986
  Output fields:
766
987
  run.status the run's terminal state. "failed" with row-level
767
988
  failures still keeps the succeeded rows; read
@@ -776,31 +997,86 @@ Output fields:
776
997
  actions.getBillingCmd the exact cost read for this run.
777
998
  error present on failure; insufficient-credits errors
778
999
  name the missing amount.
1000
+ ]]
779
1001
  Reruns and idempotency:
780
1002
  Running the same play with the same input reuses completed provider calls
781
1003
  and rows, so rerunning after a partial failure only pays for the missing
782
- work. --force starts a fresh run graph; --force-tool-refresh repeats
783
- billed provider calls and is almost never what you want.
1004
+ work.[[cli: --force starts a fresh run graph; --force-tool-refresh repeats
1005
+ billed provider calls and is almost never what you want.]]
784
1006
  Related:
785
- runs get <run-id> for status later; runs export for rows; runs logs for
786
- persisted logs; billing usage --run-id for cost.
1007
+ [[runs get <run-id>]] for status later; [[cli:runs export]][[mcp:deepline_read_play_output]] for rows; [[runs logs]] for
1008
+ persisted logs; [[billing usage --run-id]] for cost.
1009
+ `
1010
+ },
1011
+ "plays versions": {
1012
+ core: `
1013
+ Purpose:
1014
+ List the saved revisions of a workspace play, newest first, and which one
1015
+ is live.
1016
+ When:
1017
+ Before making an older revision live or running a specific revision.
1018
+ [[cli:
1019
+ Input:
1020
+ --name <play>. --json forces JSON.
1021
+ ]]
1022
+ Output (JSON):
1023
+ The play's revisions, each with its revision id and whether it is live.
1024
+ Cost:
1025
+ Free.
1026
+ `
1027
+ },
1028
+ "plays delete": {
1029
+ core: `
1030
+ Purpose:
1031
+ Move a workspace play to Trash and stop its triggers. Its revisions and
1032
+ run history are kept, so it can be restored.
1033
+ When:
1034
+ When the user asks to remove a play. Prebuilt plays cannot be deleted.
1035
+ [[cli:
1036
+ Input:
1037
+ The play name. --yes confirms; --dry-run shows the planned change.
1038
+ ]]
1039
+ Output (JSON):
1040
+ The deleted play and the triggers that were stopped.
1041
+ Cost:
1042
+ Free.
1043
+ `
1044
+ },
1045
+ "plays restore": {
1046
+ core: `
1047
+ Purpose:
1048
+ Restore a play from Trash. The saved play is enabled again and its trigger
1049
+ bindings are recreated.
1050
+ When:
1051
+ After a play was deleted by mistake.
1052
+ [[cli:
1053
+ Input:
1054
+ The play name. --json forces JSON.
1055
+ ]]
1056
+ Output (JSON):
1057
+ The restored play.
1058
+ Cost:
1059
+ Free.
787
1060
  `
788
1061
  },
789
1062
  "plays set-live": {
790
1063
  core: `
791
1064
  Purpose:
792
- Make one version of a play live, so plays run <name>, triggers, and
793
- ctx.runPlay callers use it. A local .play.ts file is bundled, validated,
1065
+ Make one version of a play live, so [[plays run <name>]], triggers, and
1066
+ ctx.runPlay callers use it.[[cli: A local .play.ts file is bundled, validated,
794
1067
  saved as a revision, and promoted in one step; a saved play promotes one
795
- of its existing revisions.
1068
+ of its existing revisions.]][[mcp: It promotes one of a saved play's existing
1069
+ revisions; deepline_publish_play saves and promotes a new file graph.]]
796
1070
  When:
797
- After iterating on a local file with plays run ./file.play.ts, once its
798
- result is right. Running a local file never publishes it.
1071
+ After iterating on [[cli:a local file with plays run ./file.play.ts]][[mcp:a play with deepline_run_inline_play]], once its
1072
+ result is right. Running [[cli:a local file]][[mcp:a play inline]] never publishes it.
1073
+ [[cli:
799
1074
  Input:
800
1075
  A local path ending in .play.ts, or a saved play name with --latest or
801
1076
  --revision-id <id>. --dry-run bundles and prints the planned artifact
802
1077
  without publishing. --expected-artifact <hash> refuses to publish when the
803
1078
  file no longer produces the artifact hash plays check printed.
1079
+ ]]
804
1080
  Output (JSON):
805
1081
  success, name, liveVersion, revisionId, artifactHash, previousLiveVersion,
806
1082
  previousArtifactHash, and the trigger metadata and bindings now live.
@@ -808,26 +1084,28 @@ Cost:
808
1084
  Free. It changes cloud state: every caller of the play name gets the new
809
1085
  version at once.
810
1086
  Avoid:
811
- Do not publish to test a change; run the file by path instead.
1087
+ Do not publish to test a change; [[cli:run the file by path]][[mcp:run it with deepline_run_inline_play]] instead.
812
1088
  A cron or webhook trigger cannot report its own failure. After publishing
813
- a triggered play, check that a failure notifies someone: notifications
814
- --help.
1089
+ a triggered play, check that a failure notifies someone[[cli:: notifications
1090
+ --help]].
815
1091
  `
816
1092
  },
817
1093
  "plays publish": {
818
1094
  core: `
819
1095
  Purpose:
820
- Publish a local .play.ts file or promote a saved revision, so plays run
821
- <name>, triggers, and ctx.runPlay callers use it. The same operation as
822
- plays set-live.
1096
+ Publish [[cli:a local .play.ts file]][[mcp:an inline .play.ts file graph]] or promote a saved revision, so [[plays run
1097
+ <name>]], triggers, and ctx.runPlay callers use it. The same operation as
1098
+ [[plays set-live]].
823
1099
  When:
824
- Once a play run by file path gives the right result. Running a local file
1100
+ Once a play [[cli:run by file path]][[mcp:run inline]] gives the right result. Running [[cli:a local file]][[mcp:a play inline]]
825
1101
  never publishes it.
1102
+ [[cli:
826
1103
  Input:
827
1104
  A local path ending in .play.ts, or a saved play name with --latest or
828
1105
  --revision-id <id>. --dry-run bundles and prints the planned artifact
829
1106
  without publishing. --expected-artifact <hash> refuses to publish when the
830
1107
  file no longer produces the artifact hash plays check printed.
1108
+ ]]
831
1109
  Output (JSON):
832
1110
  success, name, liveVersion, revisionId, artifactHash, and the trigger
833
1111
  metadata and bindings now live.
@@ -836,8 +1114,8 @@ Cost:
836
1114
  version at once.
837
1115
  Avoid:
838
1116
  A cron or webhook trigger cannot report its own failure. After publishing
839
- a triggered play, check that a failure notifies someone: notifications
840
- --help.
1117
+ a triggered play, check that a failure notifies someone[[cli:: notifications
1118
+ --help]].
841
1119
  `
842
1120
  },
843
1121
  runs: {
@@ -846,6 +1124,7 @@ Purpose:
846
1124
  Everything about executions of plays: current status, row outcomes, logs,
847
1125
  cost, export, and cancellation.
848
1126
  Which command:
1127
+ [[cli:
849
1128
  runs get <run-id> status, step progress, dataset handles, next steps
850
1129
  runs export <run-id> --out f.csv the result rows as CSV
851
1130
  billing usage --run-id <run-id> what the run cost
@@ -853,8 +1132,18 @@ Which command:
853
1132
  runs logs <run-id> persisted logs; --failed for the failure window
854
1133
  runs watch <run-id> follow an active run until it ends
855
1134
  runs stop <run-id> cancel; runs stop-all cancels every active run
1135
+ ]]
1136
+ [[mcp:
1137
+ deepline_get_run status, step progress, dataset handles, next steps
1138
+ deepline_read_play_output the result rows, a page at a time
1139
+ deepline_billing_usage with run_id what the run cost
1140
+ deepline_list_runs recent runs of a play with status and credits
1141
+ deepline_get_run_logs persisted logs
1142
+ deepline_stop_run cancel; deepline_stop_all_runs cancels every
1143
+ active run
1144
+ ]]
856
1145
  Ids:
857
- play/<play-ref>/run/<timestamp>-<suffix>, printed by plays run as runId.
1146
+ play/<play-ref>/run/<timestamp>-<suffix>, printed by [[plays run]] as runId.
858
1147
  Cost:
859
1148
  All of these are free; a run's spend was charged while it ran.
860
1149
  `
@@ -865,14 +1154,17 @@ Purpose:
865
1154
  Current status and structure of one run: state, per-step progress, row
866
1155
  counts, dataset handles, and exact follow-up commands.
867
1156
  When:
868
- To check a run started with --no-wait, to find the dataset table name for
869
- db query, or to see row-level failure counts. Not for cost and not for
1157
+ To check a run started with [[cli:--no-wait]][[mcp:timeout_ms: 0, or one still running when deepline_run_play returned]], to find the dataset table name for
1158
+ [[db query]], or to see row-level failure counts. Not for cost and not for
870
1159
  rows.
1160
+ [[cli:
871
1161
  Input:
872
1162
  The run id. --full resolves a full-only result and adds diagnostics with
873
1163
  billing and timeline (large). --log-failed attaches the failure log window.
874
1164
  --input prints the original input (may contain customer data). --json
875
1165
  prints JSON; --json run.status,datasets.name selects fields.
1166
+ ]]
1167
+ [[cli:
876
1168
  Output (JSON):
877
1169
  kind "run_overview", run {id, playName, status, startedAt, finishedAt,
878
1170
  durationMs}, steps[] {id, kind, status, label, progress {total, executed,
@@ -884,14 +1176,23 @@ Output (JSON):
884
1176
  queryTableSqlCmds[]). A batch run's payload is tens of kilobytes; read
885
1177
  run.status and datasets[] and take rows and cost from the narrower
886
1178
  commands.
1179
+ ]]
1180
+ [[mcp:
1181
+ Output:
1182
+ The run package (kind "play_run"): run {id, playName, status}, steps[],
1183
+ rowOutcomes, warnings, datasets[] {tableNamespace, sqlQualifiedTableName,
1184
+ actions}, and next.*.command, each naming the MCP call for a follow-up.
1185
+ With full: true the package is under package, beside the diagnostics.
1186
+ ]]
887
1187
  Cost:
888
1188
  Free.
889
1189
  Avoid:
890
- Cost is not in this payload without --full; use billing usage --run-id.
891
- datasets[].preview.rows is a sample, not the rows; use runs export or db
892
- query.
1190
+ Cost is not in this payload without [[--full]]; use [[billing usage --run-id]].
1191
+ datasets[].preview.rows is a sample, not the rows; use [[cli:runs export]][[mcp:deepline_read_play_output]] or [[db
1192
+ query]].
893
1193
  `,
894
1194
  verbose: `
1195
+ [[cli:
895
1196
  Output fields:
896
1197
  run.status queued, running, completed, failed, or stopped. Only
897
1198
  the last three are terminal.
@@ -919,14 +1220,15 @@ Output fields:
919
1220
  actions.*Cmd exact commands: exportDatasetCmds[], getBillingCmd,
920
1221
  queryTableSqlCmds[], getLogsCmd, and stopRunCmd while
921
1222
  the run is active.
922
- With --full:
1223
+ ]]
1224
+ With [[cli:--full]][[mcp:full: true]]:
923
1225
  diagnostics holds the raw status: billing, timeline, errors, child runs.
924
- --json diagnostics needs --full. Use --full only when a program will read
1226
+ [[cli:--json diagnostics needs --full. ]]Use [[--full]] only when a program will read
925
1227
  it; it is several times larger than the default overview.
926
1228
  Debugging a run:
927
- When a run failed or looks stuck, read runs get <run-id> for its state and
928
- last event, then runs logs <run-id> --failed for the failure window, then
929
- runs watch <run-id> to follow it if it is still active. A run can go quiet
1229
+ When a run failed or looks stuck, read [[runs get <run-id>]] for its state and
1230
+ last event, then [[runs logs <run-id>]][[cli: --failed]] for the failure window, then
1231
+ [[cli:runs watch <run-id>]][[mcp:deepline_get_run again]] to follow it if it is still active. A run can go quiet
930
1232
  for minutes while it waits on a slow provider (Apify actors, large company
931
1233
  searches), an intentional ctx.sleep, or a rate-limit backoff; that is
932
1234
  healthy. Stop it only after about ten minutes without progress on a fast
@@ -940,12 +1242,14 @@ Purpose:
940
1242
  When:
941
1243
  After a run completes, as the way to get rows. It is also the file to
942
1244
  show a user.
1245
+ [[cli:
943
1246
  Input:
944
1247
  The run id and --out <path> (required). --format json writes an array of
945
1248
  rows instead of CSV. --dataset <path> selects a handle when the run
946
1249
  returned more than one (default: the returned dataset, usually
947
1250
  result.rows). --metadata-out <path.json> writes the export metadata. --json
948
1251
  prints the receipt as JSON; it does not change the file format.
1252
+ ]]
949
1253
  Output (JSON):
950
1254
  csv_path or json_path (absolute), source, rowCount, columns[] (the CSV
951
1255
  header), datasets, and actions with follow-up commands. The file includes
@@ -984,19 +1288,23 @@ Purpose:
984
1288
  When:
985
1289
  To find a previous run id, to check whether a play already ran on the same
986
1290
  input, or to read per-run spend across several runs.
1291
+ [[cli:
987
1292
  Input:
988
1293
  --play <ref> and/or --status <queued|running|completed|failed|stopped>
989
1294
  (at least one). --limit, --offset (with --play), --compact, --json.
1295
+ ]]
1296
+ [[cli:
990
1297
  Output (JSON):
991
1298
  runs[] {id, status, playName, createdAtIso, startedAtIso, finishedAtIso,
992
1299
  billingTotalCredits}, count, total, has_more, next, render.sections (one
993
1300
  line per run: id, status, start time, credits).
1301
+ ]]
994
1302
  Cost:
995
1303
  Free.
996
1304
  Avoid:
997
- runs[].id is the public run id that runs get, watch, export and stop
1305
+ runs[].id is the public run id that [[runs get]], watch, export and stop
998
1306
  accept. runId and workflowId are older names for it; temporalRunId is a
999
- backend identifier and not a run id. Use the id plays run returned for
1307
+ backend identifier and not a run id. Use the id [[plays run]] returned for
1000
1308
  your own run: the latest entry here may belong to another invocation that
1001
1309
  started at the same time.
1002
1310
  `
@@ -1007,6 +1315,7 @@ Purpose:
1007
1315
  The stored text logs of one run, or a search of recent events across the
1008
1316
  workspace's runs. Nothing runs again.
1009
1317
  When:
1318
+ [[cli:
1010
1319
  When a run failed and the runs get error is not enough: runs logs
1011
1320
  <run-id> --failed shows the failure window; --out <path> saves the whole
1012
1321
  log. Without a run id it searches events: which runs or steps failed
@@ -1014,20 +1323,31 @@ When:
1014
1323
  To read what a tool call in a run returned: runs logs <run-id> --kind
1015
1324
  receipt.completed --payloads, then one exact result by its eventId
1016
1325
  with --where.
1326
+ ]]
1327
+ [[mcp:
1328
+ When a run failed and the deepline_get_run error is not enough. It returns
1329
+ the latest log lines of one run; after_seq pages from an earlier point.
1330
+ ]]
1331
+ [[cli:
1017
1332
  Input:
1018
1333
  A run id alone reads text logs; no run id, or any search flag, searches
1019
1334
  events. The flags, event kinds, and --where filter examples are listed
1020
1335
  above.
1336
+ ]]
1337
+ [[cli:
1021
1338
  Output:
1022
1339
  Log lines (human) or a JSON envelope; with --out, the file path. Follow
1023
1340
  next.logs for the next page of events, and pass nextCursor to --cursor for
1024
1341
  older text logs.
1342
+ ]]
1025
1343
  Cost:
1026
1344
  Free.
1345
+ [[cli:
1027
1346
  Avoid:
1028
1347
  --out, --failed and --log-level apply to text logs and cannot be combined
1029
1348
  with an event search. --where is not SQL: it takes equality tests joined
1030
1349
  with &&.
1350
+ ]]
1031
1351
  `
1032
1352
  },
1033
1353
  "runs receipt": {
@@ -1039,12 +1359,14 @@ When:
1039
1359
  A row of a run's output records a receipt key and you need what that tool
1040
1360
  call returned. Without a key, find the call first with runs logs <run-id>
1041
1361
  --kind receipt.completed --payloads.
1362
+ [[cli:
1042
1363
  Input:
1043
1364
  The run id, then --key <key> (repeatable) or --keys <file> with one key
1044
1365
  per line (--keys - reads stdin). --out <file> writes the JSON to a new
1045
1366
  file and does not overwrite. The key is the row's
1046
1367
  _metadata.execution.receiptKey, not a call-site id or a job id; read the
1047
1368
  row's actual schema before extracting keys.
1369
+ ]]
1048
1370
  Output (JSON):
1049
1371
  One outcome per key, in the order asked, duplicates kept. A successful
1050
1372
  entry holds result.toolResponse; an error stays with its key.
@@ -1063,9 +1385,11 @@ Purpose:
1063
1385
  When:
1064
1386
  Only for a run started with --no-wait that you want to watch. plays run
1065
1387
  already waits, and runs get answers "is it done". runs tail is an alias.
1388
+ [[cli:
1066
1389
  Input:
1067
1390
  The run id. --compact shows step transitions only; --json prints one
1068
1391
  terminal package at the end; --jsonl prints events as JSON Lines.
1392
+ ]]
1069
1393
  Output:
1070
1394
  Progress lines as the run changes, then the same package shape as runs get
1071
1395
  --json.
@@ -1080,13 +1404,15 @@ Purpose:
1080
1404
  When:
1081
1405
  A run is stuck, was started by mistake, or was superseded. Runs of the same
1082
1406
  play do not cancel each other: an older run keeps working and keeps
1083
- spending until it ends or is stopped. runs list --play <name> --status
1084
- running lists them. Completed work is kept and reused by a later run of the
1407
+ spending until it ends or is stopped. [[runs list --play <name> --status
1408
+ running]] lists them. Completed work is kept and reused by a later run of the
1085
1409
  same play and input.
1410
+ [[cli:
1086
1411
  Input:
1087
1412
  The run id and --reason "<text>". --json prints JSON.
1413
+ ]]
1088
1414
  Output (JSON):
1089
- The run's new status; cancellation is asynchronous, so poll runs get.
1415
+ The run's new status; cancellation is asynchronous, so poll [[runs get]].
1090
1416
  Cost:
1091
1417
  Free, but rows already processed were charged.
1092
1418
  `
@@ -1096,9 +1422,11 @@ Cost:
1096
1422
  Purpose:
1097
1423
  Request cancellation of every active run in the workspace.
1098
1424
  When:
1099
- Unjamming a workspace. Do not use it to stop one run; use runs stop.
1425
+ Unjamming a workspace. Do not use it to stop one run; use [[runs stop]].
1426
+ [[cli:
1100
1427
  Input:
1101
1428
  --reason "<text>". --dry-run lists what would be stopped. --json.
1429
+ ]]
1102
1430
  Output (JSON):
1103
1431
  The runs that were asked to stop.
1104
1432
  Cost:
@@ -1112,11 +1440,13 @@ Purpose:
1112
1440
  reusing its completed rows.
1113
1441
  When:
1114
1442
  After fixing the cause of a partial failure. When a failed run is
1115
- resumable, runs get also prints the exact command under actions.rerunCmd.
1443
+ resumable, [[runs get]] also prints the exact command under actions.rerunCmd.
1444
+ [[cli:
1116
1445
  Input:
1117
1446
  The run id. --json.
1447
+ ]]
1118
1448
  Output (JSON):
1119
- The new run's package, as plays run prints.
1449
+ The new run's package, as [[plays run]] prints.
1120
1450
  Cost:
1121
1451
  Spends credits only for rows that were not completed before.
1122
1452
  `
@@ -1129,6 +1459,7 @@ Purpose:
1129
1459
  When:
1130
1460
  After publishing a play that runs on a cron or webhook trigger. A trigger
1131
1461
  cannot report its own failure, so check that a failed run reaches someone.
1462
+ [[cli:
1132
1463
  Input:
1133
1464
  notifications list what exists; read it before editing a rule
1134
1465
  notifications events the play events a notification can receive;
@@ -1137,6 +1468,7 @@ Input:
1137
1468
  find a channel in the connected Slack
1138
1469
  notifications add <name> --to slack:#channel --for play.cron.failed
1139
1470
  notifications test <name> send a test message
1471
+ ]]
1140
1472
  Output:
1141
1473
  The named notifications with their targets and events; add and test
1142
1474
  confirm what changed or was sent.
@@ -1155,19 +1487,21 @@ Purpose:
1155
1487
  Inspect a local CSV before running a play over it: headers, fill rates,
1156
1488
  sample values, or a row range.
1157
1489
  When:
1158
- Before plays run, to confirm the file has the columns describe requires
1490
+ Before [[plays run]], to confirm the file has the columns describe requires
1159
1491
  and to count rows for pricing. Free and local.
1492
+ [[cli:
1160
1493
  Input:
1161
1494
  <path> (required). --summary prints stats instead of rows. --rows
1162
1495
  start:end (inclusive, default 0:19), --columns a,b, --format json|csv|table.
1496
+ ]]
1163
1497
  Output (JSON):
1164
- With --summary: total_rows and rows, one per column: {column, present,
1498
+ With [[--summary]]: total_rows and rows, one per column: {column, present,
1165
1499
  missing, present_percent, unique, top_values, other_count}. Without it:
1166
1500
  the rows in the requested range.
1167
1501
  Cost:
1168
1502
  Free. No network.
1169
1503
  Avoid:
1170
- Do not use head or wc to inspect a CSV that a play will consume; --summary
1504
+ Do not use head or wc to inspect a CSV that a play will consume; [[--summary]]
1171
1505
  gives the row count and column names in one call.
1172
1506
  `
1173
1507
  },
@@ -1179,20 +1513,22 @@ Purpose:
1179
1513
  When:
1180
1514
  To read result rows in place (filter, join, count) instead of exporting,
1181
1515
  or to write to your own storage.* tables.
1516
+ [[cli:
1182
1517
  Input:
1183
1518
  --sql "<statement>" or --sql @file.sql (required). --max-rows <n>,
1184
1519
  --format table|json|csv|markdown, --out <path> for csv or markdown, --json.
1185
1520
  Table names come from runs get: datasets[].storage {schema, table}, for
1186
1521
  example "storage"."prebuilt_person_to_phone_batch_phone_rows"; quote both
1187
1522
  parts. actions.queryTableSqlCmds[] has a ready query for each dataset.
1523
+ ]]
1188
1524
  Output (JSON):
1189
1525
  command ("SELECT" and so on), rows[] (one object per row), columns[]
1190
- {name}, row_count, row_count_returned, truncated (true when --max-rows or
1526
+ {name}, row_count, row_count_returned, truncated (true when [[--max-rows]] or
1191
1527
  the server bound cut the result), next.
1192
1528
  Cost:
1193
1529
  Free.
1194
1530
  Avoid:
1195
- Do not guess table names; a run's dataset table is named in runs get
1531
+ Do not guess table names; a run's dataset table is named in [[runs get]]
1196
1532
  under datasets[].storage.
1197
1533
  `
1198
1534
  },
@@ -1206,6 +1542,7 @@ When:
1206
1542
  message. After a user-requested feedback report, offer it alongside. When
1207
1543
  the upload succeeds, tell the user: "Session sent to Deepline. Rating:
1208
1544
  <rating>".
1545
+ [[cli:
1209
1546
  Input:
1210
1547
  --current-session (the calling agent's session, else the newest one started
1211
1548
  in this directory), or --session-id <uuid> (repeatable, each with an
@@ -1216,6 +1553,7 @@ Input:
1216
1553
  a product failure, bug, or avoidable friction (including a substantial
1217
1554
  workaround) got in the way; neutral when partly met or unclear. A session
1218
1555
  that produced a feedback report is usually poor or neutral. --json.
1556
+ ]]
1219
1557
  Output (JSON):
1220
1558
  A confirmation envelope with uploaded and session_ids; the text form names
1221
1559
  the session that was uploaded.
@@ -1226,7 +1564,7 @@ Avoid:
1226
1564
  In a Cowork sandbox the transcripts are mounted under
1227
1565
  ~/mnt/.claude/projects: when no session files are found and that directory
1228
1566
  exists, link it to ~/.claude/projects and retry, or pass the newest
1229
- transcript there with --file.
1567
+ transcript there with [[--file]].
1230
1568
  `
1231
1569
  },
1232
1570
  "feedback send": {
@@ -1236,15 +1574,16 @@ Purpose:
1236
1574
  agent's session id is attached, so a report can be matched to a transcript.
1237
1575
  When:
1238
1576
  The user asks to report something: confirm the text with them first, pass
1239
- --requested, and offer to share the session with sessions send.
1577
+ [[--requested]], and offer to share the session with [[sessions send]].
1240
1578
  Unasked, when you see friction Deepline could act on, unless the user
1241
1579
  restricts external reporting: a play far slower than its input size,
1242
1580
  earlier comparable runs, or visible progress would suggest, or one that
1243
1581
  looks stuck; or an ordinary result that took avoidable discovery,
1244
1582
  conversion, id extraction, retries, exports, or a manual workaround. Send
1245
- one concise report per issue, without --requested and without a
1583
+ one concise report per issue, without [[--requested]] and without a
1246
1584
  transcript, then keep working on the task. Provider work that is
1247
1585
  legitimately long is not friction.
1586
+ [[cli:
1248
1587
  Input:
1249
1588
  Positional text or --file <path> (- for stdin). --command "<the command
1250
1589
  that reproduced it>" and --payload <json or text> attach a repro.
@@ -1255,6 +1594,7 @@ Input:
1255
1594
  input size, observed duration, status changes or polling count, and what
1256
1595
  you expected. Extra steps: the goal, the command path you took, the
1257
1596
  detours, and the direct path you expected.
1597
+ ]]
1258
1598
  Output (JSON):
1259
1599
  A confirmation envelope for the report.
1260
1600
  Cost:
@@ -1269,8 +1609,10 @@ Purpose:
1269
1609
  When:
1270
1610
  Only when asked to install or update skills. To see what is installed
1271
1611
  without changing anything, use --dry-run and read the plan.
1612
+ [[cli:
1272
1613
  Input:
1273
1614
  --scope global|local, --agent <target>, --dry-run, --json.
1615
+ ]]
1274
1616
  Output (JSON):
1275
1617
  The install plan (dry run) or the result envelope listing written and
1276
1618
  removed skill directories.
@@ -1278,7 +1620,7 @@ Cost:
1278
1620
  Free.
1279
1621
  Avoid:
1280
1622
  The bare command replaces skill files; in a sandbox or a task that said
1281
- not to change skills, use --dry-run.
1623
+ not to change skills, use [[--dry-run]].
1282
1624
  `
1283
1625
  },
1284
1626
  update: {
@@ -1289,8 +1631,10 @@ When:
1289
1631
  When a command reports the CLI is too old for a feature. Ordinary commands
1290
1632
  auto-update in the background unless DEEPLINE_SKIP_SELF_UPDATE=1 is set or
1291
1633
  settings autoupdate off was run.
1634
+ [[cli:
1292
1635
  Input:
1293
1636
  No arguments. --json.
1637
+ ]]
1294
1638
  Output:
1295
1639
  The installed and new versions.
1296
1640
  Cost:
@@ -1306,8 +1650,10 @@ When:
1306
1650
  When something local is wrong (skills missing, auth file odd). Doctor is
1307
1651
  stricter and exits 7
1308
1652
  when any check fails, which is common in sandboxes with no skills on disk.
1653
+ [[cli:
1309
1654
  Input:
1310
1655
  --scope global|local. --json.
1656
+ ]]
1311
1657
  Output (JSON):
1312
1658
  Check results with status and repair hints. Exit 7 means at least one
1313
1659
  check failed; the JSON says which.
@@ -1323,8 +1669,10 @@ Purpose:
1323
1669
  When:
1324
1670
  A person setting up a new machine. Not for unattended shells; it needs a
1325
1671
  browser for auth.
1672
+ [[cli:
1326
1673
  Input:
1327
1674
  Flags for scope and agent target; see the options above.
1675
+ ]]
1328
1676
  Output:
1329
1677
  Progress and the starter prompts.
1330
1678
  Cost:
@@ -1359,13 +1707,10 @@ function renderCommandExplanation(key, detail, options = {}) {
1359
1707
  const doc = COMMAND_DOCS[key];
1360
1708
  if (!doc) return "";
1361
1709
  const prefix = key ? `deepline ${key}` : "deepline";
1362
- const sections = [doc.core.trim()];
1363
- if (detail === "verbose" && doc.verbose) {
1364
- sections.push(doc.verbose.trim());
1365
- }
1710
+ const explanation = renderActionExplanation(key, detail, CLI_DOC_SURFACE);
1366
1711
  const body = `
1367
1712
  Explanation:
1368
- ${indent(sections.join("\n\n"))}
1713
+ ${indent(explanation)}
1369
1714
  `;
1370
1715
  if (options.pointer === false) return body;
1371
1716
  const pointer = options.firstRead && doc.verbose ? `Help detail: this first read printed the full explanation; later ${prefix} --help calls in this session print the core section, --help --verbose prints the full explanation again, and --help --quiet omits it.` : detail === "verbose" || !doc.verbose ? `Help detail: ${prefix} --help --quiet omits this explanation.` : `Help detail: ${prefix} --help --verbose adds output field references and edge cases; --help --quiet omits this explanation.`;
@@ -1373,6 +1718,29 @@ ${indent(sections.join("\n\n"))}
1373
1718
  ${pointer}
1374
1719
  `;
1375
1720
  }
1721
+ var CLI_DOC_SURFACE = {
1722
+ name: "cli",
1723
+ reference: (reference) => reference
1724
+ };
1725
+ var SURFACE_LINES = /^\[\[(cli|mcp):\n([\s\S]*?)\n\]\](\n|$)/gm;
1726
+ var SURFACE_TEXT_OR_REFERENCE = /\[\[(?:(cli|mcp):)?([\s\S]*?)\]\]/g;
1727
+ function renderDocText(text, surface) {
1728
+ const only = (name, body) => name === surface.name ? body : "";
1729
+ return text.replace(
1730
+ SURFACE_LINES,
1731
+ (_, name, body, end) => only(name, body + end)
1732
+ ).replace(
1733
+ SURFACE_TEXT_OR_REFERENCE,
1734
+ (_, name, body) => name === void 0 ? surface.reference(body) : only(name, body)
1735
+ );
1736
+ }
1737
+ function renderActionExplanation(key, detail, surface) {
1738
+ const doc = COMMAND_DOCS[key];
1739
+ if (!doc) return "";
1740
+ const sections = [doc.core.trim()];
1741
+ if (detail === "verbose" && doc.verbose) sections.push(doc.verbose.trim());
1742
+ return renderDocText(sections.join("\n\n"), surface);
1743
+ }
1376
1744
  function indent(text) {
1377
1745
  return text.split("\n").map((line) => line.length > 0 ? ` ${line}` : line).join("\n");
1378
1746
  }
@@ -1382,4 +1750,7 @@ function indent(text) {
1382
1750
 
1383
1751
 
1384
1752
 
1385
- exports.COMMAND_DOCS = COMMAND_DOCS; exports.commandDocKey = commandDocKey; exports.helpDetailFromArgv = helpDetailFromArgv; exports.renderCommandExplanation = renderCommandExplanation;
1753
+
1754
+
1755
+
1756
+ exports.COMMAND_DOCS = COMMAND_DOCS; exports.commandDocKey = commandDocKey; exports.helpDetailFromArgv = helpDetailFromArgv; exports.renderCommandExplanation = renderCommandExplanation; exports.CLI_DOC_SURFACE = CLI_DOC_SURFACE; exports.renderDocText = renderDocText; exports.renderActionExplanation = renderActionExplanation;