@taurgis/bonsai 3.2.0 → 4.0.0

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 (173) hide show
  1. package/README.md +9 -6
  2. package/agents/agents/salesforce-docs-researcher.agent.md +17 -4
  3. package/agents/instructions/salesforce-research.instructions.md +2 -1
  4. package/bin/cli.mjs +13 -18
  5. package/dist/base-command.d.ts +59 -12
  6. package/dist/base-command.js +179 -51
  7. package/dist/commands/config/base.js +12 -2
  8. package/dist/commands/config/get.js +8 -12
  9. package/dist/commands/config/index.js +2 -2
  10. package/dist/commands/config/list.js +11 -17
  11. package/dist/commands/config/set.d.ts +2 -1
  12. package/dist/commands/config/set.js +35 -28
  13. package/dist/commands/config/unset.d.ts +2 -1
  14. package/dist/commands/config/unset.js +26 -25
  15. package/dist/commands/fetch.d.ts +7 -15
  16. package/dist/commands/fetch.js +61 -401
  17. package/dist/commands/import.d.ts +4 -9
  18. package/dist/commands/import.js +56 -284
  19. package/dist/commands/inspect.d.ts +7 -1
  20. package/dist/commands/inspect.js +112 -52
  21. package/dist/commands/list.d.ts +18 -3
  22. package/dist/commands/list.js +121 -46
  23. package/dist/commands/prune.d.ts +6 -1
  24. package/dist/commands/prune.js +89 -78
  25. package/dist/commands/status.d.ts +3 -2
  26. package/dist/commands/status.js +62 -79
  27. package/dist/hooks/command-not-found/suggest.d.ts +2 -1
  28. package/dist/hooks/command-not-found/suggest.js +78 -41
  29. package/dist/lib/argv.d.ts +29 -3
  30. package/dist/lib/argv.js +147 -54
  31. package/dist/lib/batch.d.ts +41 -0
  32. package/dist/lib/batch.js +39 -0
  33. package/dist/lib/cache-view.d.ts +21 -0
  34. package/dist/lib/cache-view.js +30 -0
  35. package/dist/lib/cli-emit.d.ts +28 -0
  36. package/dist/lib/cli-emit.js +44 -0
  37. package/dist/lib/cli-error-policy.d.ts +57 -0
  38. package/dist/lib/cli-error-policy.js +74 -0
  39. package/dist/lib/cli-flag-manifest.d.ts +12 -0
  40. package/dist/lib/cli-flag-manifest.js +15 -0
  41. package/dist/lib/cli-presentation.d.ts +41 -0
  42. package/dist/lib/cli-presentation.js +53 -0
  43. package/dist/lib/cli-result-types.d.ts +112 -0
  44. package/dist/lib/cli-result-types.js +2 -0
  45. package/dist/lib/config/index.d.ts +23 -5
  46. package/dist/lib/config/index.js +60 -5
  47. package/dist/lib/config/io.d.ts +9 -0
  48. package/dist/lib/config/io.js +71 -21
  49. package/dist/lib/config/schema.d.ts +2 -0
  50. package/dist/lib/config/schema.js +7 -0
  51. package/dist/lib/config-persist.d.ts +28 -0
  52. package/dist/lib/config-persist.js +29 -0
  53. package/dist/lib/envelope.d.ts +41 -3
  54. package/dist/lib/envelope.js +154 -4
  55. package/dist/lib/help-preflight.d.ts +5 -8
  56. package/dist/lib/help-preflight.js +13 -32
  57. package/dist/lib/json-meta.d.ts +0 -2
  58. package/dist/lib/json-meta.js +21 -25
  59. package/dist/lib/limit-flag.d.ts +11 -1
  60. package/dist/lib/limit-flag.js +19 -6
  61. package/dist/lib/parse-error-ux.d.ts +5 -0
  62. package/dist/lib/parse-error-ux.js +73 -0
  63. package/dist/lib/prune-flags.d.ts +30 -0
  64. package/dist/lib/prune-flags.js +86 -0
  65. package/dist/lib/research/artifact-index.d.ts +11 -2
  66. package/dist/lib/research/artifact-index.js +14 -5
  67. package/dist/lib/research/artifact.js +20 -2
  68. package/dist/lib/research/browser.d.ts +53 -2
  69. package/dist/lib/research/browser.js +202 -58
  70. package/dist/lib/research/capture.d.ts +24 -2
  71. package/dist/lib/research/capture.js +24 -4
  72. package/dist/lib/research/cli-io.d.ts +40 -0
  73. package/dist/lib/research/cli-io.js +27 -0
  74. package/dist/lib/research/compress.d.ts +7 -0
  75. package/dist/lib/research/compress.js +7 -3
  76. package/dist/lib/research/docs/capabilities.d.ts +15 -0
  77. package/dist/lib/research/docs/capabilities.js +5 -0
  78. package/dist/lib/research/docs/clean-dom.d.ts +2 -0
  79. package/dist/lib/research/docs/clean-dom.js +2 -0
  80. package/dist/lib/research/docs/code-blocks.d.ts +2 -0
  81. package/dist/lib/research/docs/code-blocks.js +2 -0
  82. package/dist/lib/research/docs/detect.d.ts +4 -0
  83. package/dist/lib/research/docs/detect.js +4 -0
  84. package/dist/lib/research/docs/machine-readable.d.ts +18 -0
  85. package/dist/lib/research/docs/machine-readable.js +10 -0
  86. package/dist/lib/research/docs/markdown-source.d.ts +20 -0
  87. package/dist/lib/research/docs/markdown-source.js +19 -2
  88. package/dist/lib/research/docs/quality-gates.d.ts +5 -0
  89. package/dist/lib/research/docs/quality-gates.js +4 -0
  90. package/dist/lib/research/docs/rsc.d.ts +9 -2
  91. package/dist/lib/research/docs/rsc.js +5 -2
  92. package/dist/lib/research/docs/section-artifacts.d.ts +12 -0
  93. package/dist/lib/research/docs/section-artifacts.js +12 -0
  94. package/dist/lib/research/docs/sections.d.ts +18 -0
  95. package/dist/lib/research/docs/sections.js +17 -1
  96. package/dist/lib/research/docs/source-map.d.ts +28 -0
  97. package/dist/lib/research/docs/source-map.js +27 -0
  98. package/dist/lib/research/docs/validate.d.ts +35 -2
  99. package/dist/lib/research/docs/validate.js +47 -2
  100. package/dist/lib/research/extract.d.ts +16 -0
  101. package/dist/lib/research/extract.js +12 -1
  102. package/dist/lib/research/fetch-command-service.d.ts +36 -0
  103. package/dist/lib/research/fetch-command-service.js +367 -0
  104. package/dist/lib/research/fetch-result.d.ts +114 -0
  105. package/dist/lib/research/fetch-result.js +212 -0
  106. package/dist/lib/research/fetcher.d.ts +46 -8
  107. package/dist/lib/research/fetcher.js +61 -31
  108. package/dist/lib/research/freshness.d.ts +54 -11
  109. package/dist/lib/research/freshness.js +91 -31
  110. package/dist/lib/research/import-command-service.d.ts +56 -0
  111. package/dist/lib/research/import-command-service.js +402 -0
  112. package/dist/lib/research/keywords.js +5 -1
  113. package/dist/lib/research/markdown.d.ts +12 -1
  114. package/dist/lib/research/markdown.js +13 -5
  115. package/dist/lib/research/metadata-filters.d.ts +18 -0
  116. package/dist/lib/research/metadata-filters.js +37 -0
  117. package/dist/lib/research/metadata-flags.d.ts +34 -0
  118. package/dist/lib/research/metadata-flags.js +45 -0
  119. package/dist/lib/research/persist-artifact.d.ts +23 -0
  120. package/dist/lib/research/persist-artifact.js +27 -0
  121. package/dist/lib/research/prompt-injection.d.ts +9 -0
  122. package/dist/lib/research/prompt-injection.js +59 -14
  123. package/dist/lib/research/proxy.d.ts +14 -8
  124. package/dist/lib/research/proxy.js +14 -10
  125. package/dist/lib/research/resolve-target.d.ts +2 -0
  126. package/dist/lib/research/resolve-target.js +1 -1
  127. package/dist/lib/research/revalidate.d.ts +49 -20
  128. package/dist/lib/research/revalidate.js +80 -15
  129. package/dist/lib/research/schema.d.ts +7 -0
  130. package/dist/lib/research/schema.js +2 -0
  131. package/dist/lib/research/secret-scan.d.ts +6 -0
  132. package/dist/lib/research/secret-scan.js +8 -0
  133. package/dist/lib/research/secure-write.d.ts +4 -0
  134. package/dist/lib/research/secure-write.js +31 -2
  135. package/dist/lib/research/storage.d.ts +9 -8
  136. package/dist/lib/research/storage.js +34 -28
  137. package/dist/lib/research/summarize.d.ts +15 -0
  138. package/dist/lib/research/summarize.js +11 -0
  139. package/dist/lib/research/url.d.ts +9 -6
  140. package/dist/lib/research/url.js +33 -21
  141. package/dist/lib/text.d.ts +19 -8
  142. package/dist/lib/text.js +32 -9
  143. package/dist/lib/value-flags.d.ts +14 -0
  144. package/dist/lib/value-flags.js +28 -0
  145. package/dist/sites/coveo.d.ts +10 -0
  146. package/dist/sites/coveo.js +10 -0
  147. package/dist/sites/index.d.ts +16 -0
  148. package/dist/sites/index.js +16 -4
  149. package/dist/sites/markdown-twin.d.ts +31 -0
  150. package/dist/sites/markdown-twin.js +56 -0
  151. package/dist/sites/salesforce/fetch-page.d.ts +8 -2
  152. package/dist/sites/salesforce/fetch-page.js +14 -3
  153. package/dist/sites/salesforce/help-tooling-markdown.d.ts +30 -0
  154. package/dist/sites/salesforce/help-tooling-markdown.js +74 -0
  155. package/dist/sites/salesforce/index.d.ts +1 -0
  156. package/dist/sites/salesforce/index.js +1 -0
  157. package/dist/sites/salesforce-developer/fetch-page.d.ts +6 -1
  158. package/dist/sites/salesforce-developer/fetch-page.js +6 -1
  159. package/dist/sites/salesforce-developer/index.d.ts +1 -0
  160. package/dist/sites/salesforce-developer/index.js +1 -0
  161. package/dist/sites/salesforce-developer/route-markdown.d.ts +18 -6
  162. package/dist/sites/salesforce-developer/route-markdown.js +29 -67
  163. package/dist/sites/salesforce-doc-fetch.d.ts +39 -5
  164. package/dist/sites/salesforce-doc-fetch.js +52 -7
  165. package/dist/sites/salesforce-dom-probe.d.ts +20 -2
  166. package/dist/sites/salesforce-dom-probe.js +20 -2
  167. package/dist/sites/types.d.ts +14 -8
  168. package/dist/sites/types.js +3 -0
  169. package/oclif.manifest.json +216 -102
  170. package/package.json +20 -7
  171. package/agents/agents/official-docs-researcher.agent.md +0 -87
  172. package/agents/instructions/web-research.instructions.md +0 -44
  173. package/agents/skills/web-research/SKILL.md +0 -118
@@ -4,20 +4,24 @@
4
4
  "aliases": [],
5
5
  "args": {
6
6
  "url": {
7
- "description": "the full HTTP/HTTPS URL of the web page to research",
7
+ "description": "HTTP(S) URL to research",
8
8
  "name": "url",
9
9
  "required": true
10
10
  }
11
11
  },
12
- "description": "Scrapes the specified URL, strips HTML boilerplate, converts the semantic payload into clean Markdown format, and caches the result locally using dynamic TTL rules.\n\nUsually invoked via the shorthand `bonsai <url>` rather than `bonsai fetch <url>`.",
12
+ "description": "Fetch a URL, convert the main content to Markdown, and cache compressed and detailed variants.\n\nUsually invoked as `bonsai <url>`; run `bonsai help fetch` for URL-form flags.",
13
13
  "examples": [
14
14
  {
15
- "description": "research a URL with detailed output, tagged with topic and tags",
16
- "command": "<%= config.bin %> https://docs.nestjs.com/ --topic \"Backend Frameworks\" --tags \"Node\" --tags \"NestJS\" --format detailed --ttl 30d"
15
+ "description": "cache docs with detailed output, topic, tags, and TTL",
16
+ "command": "<%= config.bin %> https://docs.nestjs.com/ --topic \"Backend Frameworks\" --tags \"Node\" --tags \"NestJS\" --format detailed --ttl 7d"
17
17
  },
18
18
  {
19
- "description": "research a volatile page with compressed output and short TTL, returned as JSON",
19
+ "description": "cache a volatile page with compressed JSON output",
20
20
  "command": "<%= config.bin %> https://news.ycombinator.com/ --format compressed --ttl 2h --json"
21
+ },
22
+ {
23
+ "description": "fetch multiple URLs in one batch (space-separated)",
24
+ "command": "<%= config.bin %> https://docs.nestjs.com/ https://docs.nestjs.com/first-steps"
21
25
  }
22
26
  ],
23
27
  "flags": {
@@ -32,14 +36,20 @@
32
36
  "aliases": [
33
37
  "plan"
34
38
  ],
35
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
39
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
36
40
  "name": "read-only",
37
41
  "allowNo": false,
38
42
  "type": "boolean"
39
43
  },
44
+ "toon": {
45
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
46
+ "name": "toon",
47
+ "allowNo": false,
48
+ "type": "boolean"
49
+ },
40
50
  "topic": {
41
51
  "char": "t",
42
- "description": "the main category/topic of the research for metadata tagging",
52
+ "description": "main research topic for metadata (max 200 chars)",
43
53
  "name": "topic",
44
54
  "hasDynamicHelp": false,
45
55
  "multiple": false,
@@ -47,7 +57,7 @@
47
57
  },
48
58
  "tags": {
49
59
  "char": "g",
50
- "description": "taxonomic tags for this research (can be repeated)",
60
+ "description": "taxonomic tags for this research (can be repeated, max 100 chars each)",
51
61
  "name": "tags",
52
62
  "hasDynamicHelp": false,
53
63
  "multiple": true,
@@ -55,7 +65,7 @@
55
65
  },
56
66
  "format": {
57
67
  "char": "f",
58
- "description": "desired data density",
68
+ "description": "output format",
59
69
  "name": "format",
60
70
  "default": "compressed",
61
71
  "hasDynamicHelp": false,
@@ -81,39 +91,39 @@
81
91
  },
82
92
  "ttl": {
83
93
  "char": "l",
84
- "description": "predicted lifespan: number + h/d/w/m/y (m = months), e.g. \"2h\", \"7d\", \"6m\"",
94
+ "description": "TTL duration for freshness (e.g. \"2h\", \"7d\", \"6m\")",
85
95
  "name": "ttl",
86
96
  "hasDynamicHelp": false,
87
97
  "multiple": false,
88
98
  "type": "option"
89
99
  },
90
100
  "max-age": {
91
- "description": "maximum age of cache to accept (e.g., \"1d\", \"30d\")",
101
+ "description": "maximum cache age to accept (e.g. \"2h\", \"7d\", \"6m\")",
92
102
  "name": "max-age",
93
103
  "hasDynamicHelp": false,
94
104
  "multiple": false,
95
105
  "type": "option"
96
106
  },
97
107
  "force": {
98
- "description": "force a fresh fetch, ignoring any cached entries",
108
+ "description": "fetch fresh content, ignoring cached entries",
99
109
  "name": "force",
100
110
  "allowNo": false,
101
111
  "type": "boolean"
102
112
  },
103
113
  "dry-run": {
104
- "description": "perform validation and fetch without saving to local cache",
114
+ "description": "fetch and validate without writing cache",
105
115
  "name": "dry-run",
106
116
  "allowNo": false,
107
117
  "type": "boolean"
108
118
  },
109
119
  "allow-stale": {
110
- "description": "allow serving stale cache if the remote server is unreachable",
120
+ "description": "suppress exit code 5 when stale cache is served within grace after failed revalidation",
111
121
  "name": "allow-stale",
112
122
  "allowNo": false,
113
123
  "type": "boolean"
114
124
  },
115
125
  "rendered": {
116
- "description": "force using a browser-rendered scraping path for dynamic pages",
126
+ "description": "use browser-rendered capture for dynamic pages",
117
127
  "name": "rendered",
118
128
  "allowNo": false,
119
129
  "type": "boolean"
@@ -138,7 +148,7 @@
138
148
  "pluginName": "@taurgis/bonsai",
139
149
  "pluginType": "core",
140
150
  "strict": false,
141
- "summary": "An advanced, locally cached web research tool optimized for LLM ingestion.",
151
+ "summary": "Fetch and cache URL research Markdown",
142
152
  "enableJsonFlag": true,
143
153
  "stdoutIsPrimaryData": true
144
154
  },
@@ -146,27 +156,27 @@
146
156
  "aliases": [],
147
157
  "args": {
148
158
  "url": {
149
- "description": "the single source URL of the page (only for single-source import)",
159
+ "description": "single source URL for single-source import",
150
160
  "name": "url",
151
161
  "required": false
152
162
  }
153
163
  },
154
- "description": "Accepts a synthesized Markdown note via stdin and registers it under the single target URL or multiple source URLs.",
164
+ "description": "Store supplied Markdown under one URL or a multi-source research note, using the same freshness and storage metadata as fetched pages.",
155
165
  "examples": [
156
166
  {
157
- "description": "import detailed research for a single URL via stdin",
158
- "command": "echo \"# My Article\" | <%= config.bin %> import https://example.com/docs --stdin"
167
+ "description": "import detailed research for one URL from stdin",
168
+ "command": "printf \"# My Article\\n\" | <%= config.bin %> import https://example.com/docs --stdin --ttl 7d"
159
169
  },
160
170
  {
161
- "description": "import research synthesized from multiple source URLs",
171
+ "description": "import a research note synthesized from multiple source URLs",
162
172
  "command": "echo \"# Synthesized\" | <%= config.bin %> import --stdin --topic \"React docs\" --source-url https://react.dev/a --source-url https://react.dev/b"
163
173
  },
164
174
  {
165
- "description": "import research from a local Markdown file",
175
+ "description": "import research from a Markdown file",
166
176
  "command": "<%= config.bin %> import https://example.com/docs --file path/to/notes.md"
167
177
  },
168
178
  {
169
- "description": "import research from stdin using the standard file placeholder",
179
+ "description": "import research from stdin with the file placeholder",
170
180
  "command": "cat notes.md | <%= config.bin %> import https://example.com/docs --file -"
171
181
  }
172
182
  ],
@@ -182,11 +192,17 @@
182
192
  "aliases": [
183
193
  "plan"
184
194
  ],
185
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
195
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
186
196
  "name": "read-only",
187
197
  "allowNo": false,
188
198
  "type": "boolean"
189
199
  },
200
+ "toon": {
201
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
202
+ "name": "toon",
203
+ "allowNo": false,
204
+ "type": "boolean"
205
+ },
190
206
  "stdin": {
191
207
  "description": "read Markdown from stdin",
192
208
  "name": "stdin",
@@ -194,14 +210,15 @@
194
210
  "type": "boolean"
195
211
  },
196
212
  "file": {
197
- "description": "path to a Markdown file containing research notes to import, or \"-\" for stdin",
213
+ "char": "f",
214
+ "description": "Markdown file to import, or \"-\" for stdin",
198
215
  "name": "file",
199
216
  "hasDynamicHelp": false,
200
217
  "multiple": false,
201
218
  "type": "option"
202
219
  },
203
220
  "input-format": {
204
- "description": "format of the input provided",
221
+ "description": "input content format",
205
222
  "name": "input-format",
206
223
  "default": "detailed",
207
224
  "hasDynamicHelp": false,
@@ -214,7 +231,7 @@
214
231
  },
215
232
  "topic": {
216
233
  "char": "t",
217
- "description": "the main topic for this research note",
234
+ "description": "main topic for this research note (max 200 chars)",
218
235
  "name": "topic",
219
236
  "hasDynamicHelp": false,
220
237
  "multiple": false,
@@ -222,7 +239,7 @@
222
239
  },
223
240
  "tags": {
224
241
  "char": "g",
225
- "description": "taxonomic tags (can be repeated)",
242
+ "description": "taxonomic tags (can be repeated, max 100 chars each)",
226
243
  "name": "tags",
227
244
  "hasDynamicHelp": false,
228
245
  "multiple": true,
@@ -242,7 +259,7 @@
242
259
  "type": "option"
243
260
  },
244
261
  "source-url": {
245
- "description": "repeated source URLs for multi-source import",
262
+ "description": "source URLs for multi-source import (can be repeated)",
246
263
  "name": "source-url",
247
264
  "hasDynamicHelp": false,
248
265
  "multiple": true,
@@ -250,12 +267,18 @@
250
267
  },
251
268
  "ttl": {
252
269
  "char": "l",
253
- "description": "predicted lifespan of the data (e.g. \"24h\", \"7d\")",
270
+ "description": "TTL duration for imported note freshness (e.g. \"2h\", \"7d\", \"6m\")",
254
271
  "name": "ttl",
255
272
  "hasDynamicHelp": false,
256
273
  "multiple": false,
257
274
  "type": "option"
258
275
  },
276
+ "dry-run": {
277
+ "description": "validate import without writing cache",
278
+ "name": "dry-run",
279
+ "allowNo": false,
280
+ "type": "boolean"
281
+ },
259
282
  "storage": {
260
283
  "description": "override where this note is cached (secrets always stored globally)",
261
284
  "name": "storage",
@@ -275,7 +298,7 @@
275
298
  "pluginName": "@taurgis/bonsai",
276
299
  "pluginType": "core",
277
300
  "strict": true,
278
- "summary": "Import agent-supplied clean Markdown notes into the local cache.",
301
+ "summary": "Import agent-supplied Markdown into cache",
279
302
  "enableJsonFlag": true,
280
303
  "stdoutIsPrimaryData": true
281
304
  },
@@ -283,20 +306,24 @@
283
306
  "aliases": [],
284
307
  "args": {
285
308
  "url": {
286
- "description": "the URL to inspect",
309
+ "description": "URL to inspect",
287
310
  "name": "url",
288
311
  "required": true
289
312
  }
290
313
  },
291
- "description": "Inspects local storage and displays full frontmatter metadata for the URL (without printing the content body).",
314
+ "description": "Show frontmatter metadata and section children for cached URLs without printing content.",
292
315
  "examples": [
293
316
  {
294
- "description": "inspect cached research metadata for a specific URL",
317
+ "description": "inspect cached metadata for a URL",
295
318
  "command": "<%= config.bin %> <%= command.id %> https://example.com/docs"
296
319
  },
297
320
  {
298
- "description": "output the full metadata as JSON for use by other tools",
321
+ "description": "inspect cached metadata as JSON",
299
322
  "command": "<%= config.bin %> <%= command.id %> https://example.com/docs --json"
323
+ },
324
+ {
325
+ "description": "inspect multiple URLs in one batch (space-separated)",
326
+ "command": "<%= config.bin %> <%= command.id %> https://example.com/docs https://example.com/api"
300
327
  }
301
328
  ],
302
329
  "flags": {
@@ -311,10 +338,16 @@
311
338
  "aliases": [
312
339
  "plan"
313
340
  ],
314
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
341
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
315
342
  "name": "read-only",
316
343
  "allowNo": false,
317
344
  "type": "boolean"
345
+ },
346
+ "toon": {
347
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
348
+ "name": "toon",
349
+ "allowNo": false,
350
+ "type": "boolean"
318
351
  }
319
352
  },
320
353
  "hasDynamicHelp": false,
@@ -324,30 +357,34 @@
324
357
  "pluginName": "@taurgis/bonsai",
325
358
  "pluginType": "core",
326
359
  "strict": false,
327
- "summary": "Inspect cached research metadata for a URL.",
360
+ "summary": "Inspect cached research metadata for a URL",
328
361
  "enableJsonFlag": true,
329
362
  "stdoutIsPrimaryData": true
330
363
  },
331
364
  "list": {
332
365
  "aliases": [],
333
366
  "args": {},
334
- "description": "Lists cached research artifacts, including metadata details like path, source count, freshness, token estimates, and quality metrics without printing full content.",
367
+ "description": "List page-level cached artifacts by source URL, topic, freshness, and token estimate. Pass --full for every metadata field (cache key, path, artifact type, tags, capture method, quality notes, timestamps).",
335
368
  "examples": [
336
369
  {
337
- "description": "list all cached entries",
370
+ "description": "list cached entries",
338
371
  "command": "<%= config.bin %> list"
339
372
  },
340
373
  {
341
- "description": "list cached entries for a specific topic with JSON output",
374
+ "description": "list entries for a topic as JSON",
342
375
  "command": "<%= config.bin %> list --topic \"React Suspense\" --json"
343
376
  },
344
377
  {
345
- "description": "list only fresh entries filtered by tags",
378
+ "description": "list fresh entries matching tags",
346
379
  "command": "<%= config.bin %> list --freshness fresh --tags node --tags url"
347
380
  },
348
381
  {
349
- "description": "list entries matching a specific URL glob",
382
+ "description": "list entries matching a URL glob",
350
383
  "command": "<%= config.bin %> list --url \"https://react.dev/*\""
384
+ },
385
+ {
386
+ "description": "list every metadata field instead of the minimal default row",
387
+ "command": "<%= config.bin %> list --full --json"
351
388
  }
352
389
  ],
353
390
  "flags": {
@@ -362,14 +399,20 @@
362
399
  "aliases": [
363
400
  "plan"
364
401
  ],
365
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
402
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
366
403
  "name": "read-only",
367
404
  "allowNo": false,
368
405
  "type": "boolean"
369
406
  },
407
+ "toon": {
408
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
409
+ "name": "toon",
410
+ "allowNo": false,
411
+ "type": "boolean"
412
+ },
370
413
  "topic": {
371
414
  "char": "t",
372
- "description": "filter by exact topic (case-insensitive)",
415
+ "description": "exact topic (case-insensitive)",
373
416
  "name": "topic",
374
417
  "hasDynamicHelp": false,
375
418
  "multiple": false,
@@ -377,21 +420,21 @@
377
420
  },
378
421
  "tags": {
379
422
  "char": "g",
380
- "description": "filter by tags (must match all tags specified)",
423
+ "description": "tags to require (must match all)",
381
424
  "name": "tags",
382
425
  "hasDynamicHelp": false,
383
426
  "multiple": true,
384
427
  "type": "option"
385
428
  },
386
429
  "url": {
387
- "description": "filter by source URL glob pattern (case-insensitive, supports * wildcard)",
430
+ "description": "source URL glob (case-insensitive, supports * wildcard)",
388
431
  "name": "url",
389
432
  "hasDynamicHelp": false,
390
433
  "multiple": false,
391
434
  "type": "option"
392
435
  },
393
436
  "freshness": {
394
- "description": "filter by freshness state",
437
+ "description": "freshness state",
395
438
  "name": "freshness",
396
439
  "hasDynamicHelp": false,
397
440
  "multiple": false,
@@ -403,7 +446,7 @@
403
446
  "type": "option"
404
447
  },
405
448
  "artifact-type": {
406
- "description": "filter by artifact type",
449
+ "description": "artifact type; section children are omitted from list - use inspect to see them",
407
450
  "name": "artifact-type",
408
451
  "hasDynamicHelp": false,
409
452
  "multiple": false,
@@ -415,7 +458,7 @@
415
458
  "type": "option"
416
459
  },
417
460
  "capture-method": {
418
- "description": "filter by capture method",
461
+ "description": "capture method",
419
462
  "name": "capture-method",
420
463
  "hasDynamicHelp": false,
421
464
  "multiple": false,
@@ -429,12 +472,18 @@
429
472
  "type": "option"
430
473
  },
431
474
  "limit": {
432
- "description": "maximum number of results to return (default 50, max 100)",
475
+ "description": "result count (max 100)",
433
476
  "name": "limit",
434
477
  "default": 50,
435
478
  "hasDynamicHelp": false,
436
479
  "multiple": false,
437
480
  "type": "option"
481
+ },
482
+ "full": {
483
+ "description": "include every metadata field (cache key, path, artifact type, tags, capture method, quality notes, timestamps); default output is a minimal row (source URLs, topic, freshness, token estimate)",
484
+ "name": "full",
485
+ "allowNo": false,
486
+ "type": "boolean"
438
487
  }
439
488
  },
440
489
  "hasDynamicHelp": false,
@@ -444,26 +493,30 @@
444
493
  "pluginName": "@taurgis/bonsai",
445
494
  "pluginType": "core",
446
495
  "strict": true,
447
- "summary": "List cached research artifacts by metadata filters.",
496
+ "summary": "List cached research artifacts by metadata",
448
497
  "enableJsonFlag": true,
449
498
  "stdoutIsPrimaryData": true
450
499
  },
451
500
  "prune": {
452
501
  "aliases": [],
453
502
  "args": {},
454
- "description": "Prunes cached research entries based on age, inactivity, or artifact type to free up disk space.",
503
+ "description": "Delete cached artifacts by content age, idle time, URL glob, artifact type, topic, or tags.",
455
504
  "examples": [
456
505
  {
457
- "description": "perform a dry run of pruning entries older than 90 days",
458
- "command": "<%= config.bin %> prune --older-than 90d --dry-run"
506
+ "description": "preview pruning entries older than 30 days",
507
+ "command": "<%= config.bin %> prune --older-than 30d --dry-run"
459
508
  },
460
509
  {
461
- "description": "actually prune entries older than 30 days that are source scrapes",
510
+ "description": "prune source artifacts older than 30 days",
462
511
  "command": "<%= config.bin %> prune --older-than 30d --artifact-type source --yes"
463
512
  },
464
513
  {
465
- "description": "prune entries matching a URL glob pattern",
514
+ "description": "prune entries matching a URL glob",
466
515
  "command": "<%= config.bin %> prune --url \"https://react.dev/*\" --yes"
516
+ },
517
+ {
518
+ "description": "prune entries tagged as deprecated",
519
+ "command": "<%= config.bin %> prune --tags deprecated --yes"
467
520
  }
468
521
  ],
469
522
  "flags": {
@@ -478,34 +531,56 @@
478
531
  "aliases": [
479
532
  "plan"
480
533
  ],
481
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
534
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
482
535
  "name": "read-only",
483
536
  "allowNo": false,
484
537
  "type": "boolean"
485
538
  },
539
+ "toon": {
540
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
541
+ "name": "toon",
542
+ "allowNo": false,
543
+ "type": "boolean"
544
+ },
486
545
  "older-than": {
487
- "description": "prune entries older than duration (e.g. \"30d\", \"90d\")",
546
+ "description": "content age threshold (fetched_at, else validated_at), e.g. \"30d\"",
488
547
  "name": "older-than",
489
548
  "hasDynamicHelp": false,
490
549
  "multiple": false,
491
550
  "type": "option"
492
551
  },
493
552
  "inactive": {
494
- "description": "prune entries inactive (unvalidated/unfetched) for duration (e.g. \"14d\", \"30d\")",
553
+ "description": "idle time threshold (validated_at, else fetched_at), e.g. \"14d\"",
495
554
  "name": "inactive",
496
555
  "hasDynamicHelp": false,
497
556
  "multiple": false,
498
557
  "type": "option"
499
558
  },
500
559
  "url": {
501
- "description": "filter pruning to source URL glob pattern (case-insensitive, supports * wildcard)",
560
+ "description": "source URL glob (case-insensitive, supports * wildcard)",
502
561
  "name": "url",
503
562
  "hasDynamicHelp": false,
504
563
  "multiple": false,
505
564
  "type": "option"
506
565
  },
566
+ "topic": {
567
+ "char": "t",
568
+ "description": "exact topic (case-insensitive)",
569
+ "name": "topic",
570
+ "hasDynamicHelp": false,
571
+ "multiple": false,
572
+ "type": "option"
573
+ },
574
+ "tags": {
575
+ "char": "g",
576
+ "description": "tags to require (must match all)",
577
+ "name": "tags",
578
+ "hasDynamicHelp": false,
579
+ "multiple": true,
580
+ "type": "option"
581
+ },
507
582
  "artifact-type": {
508
- "description": "filter pruning to specific artifact type",
583
+ "description": "artifact type to prune, including section children",
509
584
  "name": "artifact-type",
510
585
  "hasDynamicHelp": false,
511
586
  "multiple": false,
@@ -518,14 +593,14 @@
518
593
  "type": "option"
519
594
  },
520
595
  "dry-run": {
521
- "description": "list files that would be deleted without actually deleting them",
596
+ "description": "preview files without deleting",
522
597
  "name": "dry-run",
523
598
  "allowNo": false,
524
599
  "type": "boolean"
525
600
  },
526
601
  "yes": {
527
602
  "char": "y",
528
- "description": "confirm deletion and prune matched entries (required unless --dry-run)",
603
+ "description": "confirm deletion (required unless --dry-run)",
529
604
  "name": "yes",
530
605
  "allowNo": false,
531
606
  "type": "boolean"
@@ -538,7 +613,7 @@
538
613
  "pluginName": "@taurgis/bonsai",
539
614
  "pluginType": "core",
540
615
  "strict": true,
541
- "summary": "Clean up old or inactive research cache entries.",
616
+ "summary": "Prune cached research artifacts",
542
617
  "enableJsonFlag": true,
543
618
  "stdoutIsPrimaryData": true
544
619
  },
@@ -546,20 +621,24 @@
546
621
  "aliases": [],
547
622
  "args": {
548
623
  "url": {
549
- "description": "the URL to check",
624
+ "description": "URL to check",
550
625
  "name": "url",
551
626
  "required": true
552
627
  }
553
628
  },
554
- "description": "Reports whether the URL is cached, its freshness state, and what action (fetch, revalidate, or cached return) the root fetch command would take.",
629
+ "description": "Report cache hit/miss state, freshness, and the action the URL shorthand would take.",
555
630
  "examples": [
556
631
  {
557
- "description": "check if a URL is already in the cache",
632
+ "description": "check whether a URL is cached",
558
633
  "command": "<%= config.bin %> <%= command.id %> https://example.com/docs"
559
634
  },
560
635
  {
561
- "description": "check status against a specific freshness tier and TTL",
636
+ "description": "evaluate status with a specific tier and TTL",
562
637
  "command": "<%= config.bin %> <%= command.id %> https://example.com/docs --tier volatile --ttl 2h"
638
+ },
639
+ {
640
+ "description": "check multiple URLs in one batch (space-separated)",
641
+ "command": "<%= config.bin %> <%= command.id %> https://example.com/docs https://example.com/api"
563
642
  }
564
643
  ],
565
644
  "flags": {
@@ -574,15 +653,20 @@
574
653
  "aliases": [
575
654
  "plan"
576
655
  ],
577
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
656
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
578
657
  "name": "read-only",
579
658
  "allowNo": false,
580
659
  "type": "boolean"
581
660
  },
661
+ "toon": {
662
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
663
+ "name": "toon",
664
+ "allowNo": false,
665
+ "type": "boolean"
666
+ },
582
667
  "tier": {
583
- "description": "freshness tier policy to evaluate against",
668
+ "description": "freshness tier policy to evaluate; when omitted, uses the cached entry's own tier",
584
669
  "name": "tier",
585
- "default": "standard",
586
670
  "hasDynamicHelp": false,
587
671
  "multiple": false,
588
672
  "options": [
@@ -594,14 +678,14 @@
594
678
  },
595
679
  "ttl": {
596
680
  "char": "l",
597
- "description": "custom TTL duration to evaluate against (e.g. \"2h\", \"7d\")",
681
+ "description": "TTL duration to evaluate freshness (e.g. \"2h\", \"7d\", \"6m\")",
598
682
  "name": "ttl",
599
683
  "hasDynamicHelp": false,
600
684
  "multiple": false,
601
685
  "type": "option"
602
686
  },
603
687
  "max-age": {
604
- "description": "maximum age of cache to accept (e.g. \"1d\", \"30d\")",
688
+ "description": "maximum cache age to accept (e.g. \"2h\", \"7d\", \"6m\")",
605
689
  "name": "max-age",
606
690
  "hasDynamicHelp": false,
607
691
  "multiple": false,
@@ -615,7 +699,7 @@
615
699
  "pluginName": "@taurgis/bonsai",
616
700
  "pluginType": "core",
617
701
  "strict": false,
618
- "summary": "Check the cache status of a URL without fetching or writing.",
702
+ "summary": "Check cache status without fetching or writing",
619
703
  "enableJsonFlag": true,
620
704
  "stdoutIsPrimaryData": true
621
705
  },
@@ -629,7 +713,7 @@
629
713
  "command": "<%= config.bin %> <%= command.id %> get storage"
630
714
  },
631
715
  {
632
- "description": "set a configuration value for the current project",
716
+ "description": "set project storage mode",
633
717
  "command": "<%= config.bin %> <%= command.id %> set storage project --local"
634
718
  }
635
719
  ],
@@ -645,10 +729,16 @@
645
729
  "aliases": [
646
730
  "plan"
647
731
  ],
648
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
732
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
649
733
  "name": "read-only",
650
734
  "allowNo": false,
651
735
  "type": "boolean"
736
+ },
737
+ "toon": {
738
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
739
+ "name": "toon",
740
+ "allowNo": false,
741
+ "type": "boolean"
652
742
  }
653
743
  },
654
744
  "hasDynamicHelp": false,
@@ -658,7 +748,7 @@
658
748
  "pluginName": "@taurgis/bonsai",
659
749
  "pluginType": "core",
660
750
  "strict": true,
661
- "summary": "Manage research cache storage configuration (global vs project).",
751
+ "summary": "Manage research cache configuration",
662
752
  "enableJsonFlag": true,
663
753
  "stdoutIsPrimaryData": true
664
754
  },
@@ -671,7 +761,7 @@
671
761
  "required": false
672
762
  }
673
763
  },
674
- "description": "Print a config value. Without --global/--local, shows the merged effective value (flag > env > project > user > default).\n\nValid keys: storage, summary.",
764
+ "description": "Print a config value. Without --global/--local, shows the merged effective value, in precedence order: a per-command override flag (e.g. `fetch --storage`) > env var > project file > user file > built-in default.\n\nValid keys: storage (global|project), summary (conservative|balanced|aggressive).",
675
765
  "examples": [
676
766
  {
677
767
  "description": "get the effective storage mode",
@@ -694,14 +784,20 @@
694
784
  "aliases": [
695
785
  "plan"
696
786
  ],
697
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
787
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
698
788
  "name": "read-only",
699
789
  "allowNo": false,
700
790
  "type": "boolean"
701
791
  },
792
+ "toon": {
793
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
794
+ "name": "toon",
795
+ "allowNo": false,
796
+ "type": "boolean"
797
+ },
702
798
  "global": {
703
799
  "char": "g",
704
- "description": "Read from user-level config only.",
800
+ "description": "read user-level config only",
705
801
  "name": "global",
706
802
  "allowNo": false,
707
803
  "type": "boolean"
@@ -713,7 +809,7 @@
713
809
  "charAliases": [
714
810
  "p"
715
811
  ],
716
- "description": "Read from project-level config only.",
812
+ "description": "read project-level config only",
717
813
  "name": "local",
718
814
  "allowNo": false,
719
815
  "type": "boolean"
@@ -726,13 +822,13 @@
726
822
  "pluginName": "@taurgis/bonsai",
727
823
  "pluginType": "core",
728
824
  "strict": true,
729
- "summary": "Get the effective value of a research configuration key.",
825
+ "summary": "Get a research configuration value",
730
826
  "stdoutIsPrimaryData": true
731
827
  },
732
828
  "config:list": {
733
829
  "aliases": [],
734
830
  "args": {},
735
- "description": "Show every configuration key with its current value. Use --global/--local to show a single scope.\n\nValid keys: storage, summary.",
831
+ "description": "Show every configuration key with its current value. Use --global/--local to show a single scope.\n\nValid keys: storage (global|project), summary (conservative|balanced|aggressive).",
736
832
  "examples": [
737
833
  {
738
834
  "description": "show all effective config values",
@@ -755,14 +851,20 @@
755
851
  "aliases": [
756
852
  "plan"
757
853
  ],
758
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
854
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
759
855
  "name": "read-only",
760
856
  "allowNo": false,
761
857
  "type": "boolean"
762
858
  },
859
+ "toon": {
860
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
861
+ "name": "toon",
862
+ "allowNo": false,
863
+ "type": "boolean"
864
+ },
763
865
  "global": {
764
866
  "char": "g",
765
- "description": "Show user-level config only.",
867
+ "description": "show user-level config only",
766
868
  "name": "global",
767
869
  "allowNo": false,
768
870
  "type": "boolean"
@@ -774,7 +876,7 @@
774
876
  "charAliases": [
775
877
  "p"
776
878
  ],
777
- "description": "Show project-level config only.",
879
+ "description": "show project-level config only",
778
880
  "name": "local",
779
881
  "allowNo": false,
780
882
  "type": "boolean"
@@ -787,7 +889,7 @@
787
889
  "pluginName": "@taurgis/bonsai",
788
890
  "pluginType": "core",
789
891
  "strict": true,
790
- "summary": "List all research configuration keys and their effective values.",
892
+ "summary": "List research configuration values",
791
893
  "stdoutIsPrimaryData": true
792
894
  },
793
895
  "config:set": {
@@ -804,14 +906,14 @@
804
906
  "required": false
805
907
  }
806
908
  },
807
- "description": "Persist a configuration value. Writes user-level config by default; pass --local to write the project-level config (.bonsai.json in cwd).\n\nValid keys: storage, summary. The inline form `<key>=<value>` is also accepted.",
909
+ "description": "Persist a configuration value. Writes user-level config by default; pass --local for project-level config (.bonsai.json in cwd).\n\nValid keys: storage (global|project), summary (conservative|balanced|aggressive). The inline form `<key>=<value>` is also accepted.",
808
910
  "examples": [
809
911
  {
810
- "description": "store research cache inside the current project",
912
+ "description": "store research cache in the current project",
811
913
  "command": "<%= config.bin %> config set storage project --local"
812
914
  },
813
915
  {
814
- "description": "set the user-level default using the inline key=value form",
916
+ "description": "set the user-level default with key=value",
815
917
  "command": "<%= config.bin %> config set storage=global"
816
918
  }
817
919
  ],
@@ -827,14 +929,20 @@
827
929
  "aliases": [
828
930
  "plan"
829
931
  ],
830
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
932
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
831
933
  "name": "read-only",
832
934
  "allowNo": false,
833
935
  "type": "boolean"
834
936
  },
937
+ "toon": {
938
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
939
+ "name": "toon",
940
+ "allowNo": false,
941
+ "type": "boolean"
942
+ },
835
943
  "global": {
836
944
  "char": "g",
837
- "description": "Write to user-level config (default).",
945
+ "description": "write user-level config (default)",
838
946
  "name": "global",
839
947
  "allowNo": false,
840
948
  "type": "boolean"
@@ -846,13 +954,13 @@
846
954
  "charAliases": [
847
955
  "p"
848
956
  ],
849
- "description": "Write to project-level config (.bonsai.json in cwd).",
957
+ "description": "write project-level config (.bonsai.json in cwd)",
850
958
  "name": "local",
851
959
  "allowNo": false,
852
960
  "type": "boolean"
853
961
  },
854
962
  "dry-run": {
855
- "description": "show what would be written without saving",
963
+ "description": "preview write without saving",
856
964
  "name": "dry-run",
857
965
  "allowNo": false,
858
966
  "type": "boolean"
@@ -865,7 +973,7 @@
865
973
  "pluginName": "@taurgis/bonsai",
866
974
  "pluginType": "core",
867
975
  "strict": true,
868
- "summary": "Set a research configuration key.",
976
+ "summary": "Set a research configuration key",
869
977
  "stdoutIsPrimaryData": true
870
978
  },
871
979
  "config:unset": {
@@ -877,7 +985,7 @@
877
985
  "required": false
878
986
  }
879
987
  },
880
- "description": "Delete a key from user-level config (default) or project-level config (--local), restoring the built-in default.\n\nValid keys: storage, summary.",
988
+ "description": "Delete a key from user-level config (default) or project-level config (--local), restoring the built-in default.\n\nValid keys: storage (global|project), summary (conservative|balanced|aggressive).",
881
989
  "examples": [
882
990
  {
883
991
  "description": "remove the user-level storage setting",
@@ -900,14 +1008,20 @@
900
1008
  "aliases": [
901
1009
  "plan"
902
1010
  ],
903
- "description": "Block all filesystem writes/deletes (cache and config); network fetches still run. Also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE — enable for agent read-only/plan modes.",
1011
+ "description": "(alias: --plan) block filesystem writes/deletes; network fetches still run; also honored via BONSAI_READ_ONLY/BONSAI_PLAN_MODE",
904
1012
  "name": "read-only",
905
1013
  "allowNo": false,
906
1014
  "type": "boolean"
907
1015
  },
1016
+ "toon": {
1017
+ "description": "emit the same envelope as --json, encoded as TOON (fewer tokens); cannot be combined with --json",
1018
+ "name": "toon",
1019
+ "allowNo": false,
1020
+ "type": "boolean"
1021
+ },
908
1022
  "global": {
909
1023
  "char": "g",
910
- "description": "Remove from user-level config (default).",
1024
+ "description": "remove from user-level config (default)",
911
1025
  "name": "global",
912
1026
  "allowNo": false,
913
1027
  "type": "boolean"
@@ -919,13 +1033,13 @@
919
1033
  "charAliases": [
920
1034
  "p"
921
1035
  ],
922
- "description": "Remove from project-level config (.bonsai.json in cwd).",
1036
+ "description": "remove from project-level config (.bonsai.json in cwd)",
923
1037
  "name": "local",
924
1038
  "allowNo": false,
925
1039
  "type": "boolean"
926
1040
  },
927
1041
  "dry-run": {
928
- "description": "show what would be removed without saving",
1042
+ "description": "preview removal without saving",
929
1043
  "name": "dry-run",
930
1044
  "allowNo": false,
931
1045
  "type": "boolean"
@@ -938,9 +1052,9 @@
938
1052
  "pluginName": "@taurgis/bonsai",
939
1053
  "pluginType": "core",
940
1054
  "strict": true,
941
- "summary": "Remove a research configuration key.",
1055
+ "summary": "Remove a research configuration key",
942
1056
  "stdoutIsPrimaryData": true
943
1057
  }
944
1058
  },
945
- "version": "3.2.0"
1059
+ "version": "4.0.0"
946
1060
  }