@taurgis/bonsai 3.2.0 → 3.2.2

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