scoutline 0.15.0 → 0.16.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 (41) hide show
  1. package/README.md +68 -11
  2. package/dist/capabilities/repository.d.ts +96 -0
  3. package/dist/capabilities/repository.d.ts.map +1 -1
  4. package/dist/capabilities/repository.js.map +1 -1
  5. package/dist/commands/cache.d.ts +38 -0
  6. package/dist/commands/cache.d.ts.map +1 -1
  7. package/dist/commands/cache.js +64 -5
  8. package/dist/commands/cache.js.map +1 -1
  9. package/dist/commands/config.d.ts +17 -1
  10. package/dist/commands/config.d.ts.map +1 -1
  11. package/dist/commands/config.js +25 -2
  12. package/dist/commands/config.js.map +1 -1
  13. package/dist/commands/repo.d.ts +96 -1
  14. package/dist/commands/repo.d.ts.map +1 -1
  15. package/dist/commands/repo.js +420 -0
  16. package/dist/commands/repo.js.map +1 -1
  17. package/dist/commands/search.d.ts +150 -0
  18. package/dist/commands/search.d.ts.map +1 -1
  19. package/dist/commands/search.js +368 -27
  20. package/dist/commands/search.js.map +1 -1
  21. package/dist/index.d.ts +199 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +352 -20
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/cache.d.ts +111 -7
  26. package/dist/lib/cache.d.ts.map +1 -1
  27. package/dist/lib/cache.js +316 -7
  28. package/dist/lib/cache.js.map +1 -1
  29. package/dist/lib/config-store.d.ts +51 -1
  30. package/dist/lib/config-store.d.ts.map +1 -1
  31. package/dist/lib/config-store.js +90 -6
  32. package/dist/lib/config-store.js.map +1 -1
  33. package/dist/lib/url.d.ts +43 -0
  34. package/dist/lib/url.d.ts.map +1 -0
  35. package/dist/lib/url.js +172 -0
  36. package/dist/lib/url.js.map +1 -0
  37. package/dist/providers/selection.d.ts +21 -0
  38. package/dist/providers/selection.d.ts.map +1 -1
  39. package/dist/providers/selection.js +58 -0
  40. package/dist/providers/selection.js.map +1 -1
  41. package/package.json +1 -1
package/README.md CHANGED
@@ -163,6 +163,48 @@ for the rationale
163
163
  and the accepted async double-charge risk on `crawl` / `map` /
164
164
  `research`.
165
165
 
166
+ ### Search Fan-Out (multi-provider search)
167
+
168
+ For `search` only, one query can run across several providers in parallel
169
+ and merge into a single deduplicated list
170
+ ([ADR-0004](https://github.com/vikasagarwal101/scoutline/blob/main/docs/adr/0004-multi-provider-search-fanout.md)).
171
+ Activation tiers, highest precedence first:
172
+
173
+ 1. `--provider tavily,exa` (comma list) or `--provider all` — fan-out on
174
+ the listed providers; `all` expands to every configured search
175
+ provider in registry order.
176
+ 2. A single `--provider <id>` or `SCOUTLINE_PROVIDER` — single provider;
177
+ an explicit pin, fan-out is ignored.
178
+ 3. `scoutline config set fanout true` (no pin) — fan-out on
179
+ `routing.search` when set, else every configured search provider.
180
+ Default is **false**; remove the standing switch with
181
+ `scoutline config unset fanout`.
182
+ 4. No pin and fan-out off — single provider via the standard selection
183
+ order.
184
+
185
+ ```bash
186
+ scoutline --provider tavily,exa search "rust async runtimes"
187
+ scoutline --provider all search "AI policy news"
188
+ scoutline config set fanout true # standing preference (default off)
189
+ scoutline config unset fanout # remove the standing switch
190
+ ```
191
+
192
+ **Cost:** every search will bill ALL configured search providers — N arms
193
+ = N billable calls (when `routing.search` is set, only the eligible
194
+ routed providers — configured and search-capable — are billed;
195
+ `config set fanout true` names exactly those). Arms run in parallel (one client each,
196
+ pinned — no per-arm fallback); a provider that rejects a search control
197
+ drops with a stderr notice and never fails the invocation. Results are
198
+ deduplicated by canonical URL identity (scheme/host lowercased, default
199
+ ports, fragments, trailing slashes, and `utm_*`/`fbclid` parameters
200
+ removed — tracking names are matched after percent-decoding, the raw path
201
+ and userinfo are preserved, and the original URLs are kept in output),
202
+ ranked by cross-provider occurrences, and each result carries `mergedFrom`
203
+ listing the providers that returned it. `--merge` composes with fan-out:
204
+ every arm runs every sub-query and occurrences span the arms ×
205
+ sub-queries grid. Disable the standing switch with
206
+ `scoutline config set fanout false`.
207
+
166
208
  ## Capability Matrix
167
209
 
168
210
  The matrix below is generated from the production provider registry
@@ -189,7 +231,7 @@ Provider selection, and `doctor`.
189
231
  | `crawl` | **No** | **No** | Yes | No | No | Yes (async) | No | No | No | Tavily sync; Firecrawl async (resumable after Ctrl-C) |
190
232
  | `map` | **No** | **No** | Yes | No | No | Yes | No | No | No | URL-set discovery; no per-page content |
191
233
  | `research` | **No** | **No** | Yes | Yes | **No** | **No** | Yes | Yes | Yes | Tavily, Exa, Parallel, Perplexity `sonar-deep-research`, and Jina DeepSearch report synthesis |
192
- | `repo search` / `repo read` / `repo tree` | Yes | **No** | **No** | **No** | **No** | **No** | **No** | **No** | **No** | Participates in selection; only Z.AI supplies `repository-exploration` |
234
+ | `repo search` / `repo read` / `repo tree` / `repo brief` | Yes | **No** | **No** | **No** | **No** | **No** | **No** | **No** | **No** | Participates in selection; only Z.AI supplies `repository-exploration` |
193
235
  | `tools`, `tool`, `call` (Raw tools) | Yes | No | No | No | No | No | No | No | No | Z.AI-only; accepts but ignores `--provider` |
194
236
  | `code` (Code Mode) | Yes | No | No | No | No | No | No | No | No | Z.AI-only; accepts but ignores `--provider` |
195
237
 
@@ -277,7 +319,7 @@ scoutline search --help # Search options
277
319
  scoutline repo --help # GitHub repo commands
278
320
  scoutline doctor --help # Provider diagnostics
279
321
  scoutline quota --help # Plan usage
280
- scoutline cache --help # Local cache inspection and clearing
322
+ scoutline cache --help # Local cache inspection, clearing, and pruning
281
323
  ```
282
324
 
283
325
  ### Examples
@@ -307,6 +349,8 @@ scoutline repo search vercel/next.js "app router"
307
349
  scoutline repo read anthropics/anthropic-sdk-python README.md
308
350
  scoutline repo search openai/codex "config" --language en
309
351
  scoutline repo tree openai/codex --path codex-rs --depth 2
352
+ scoutline repo brief facebook/react
353
+ scoutline repo brief openai/codex --focus readme,manifest --max-chars 2000
310
354
 
311
355
  # Quota - effective or all providers
312
356
  scoutline quota # effective Provider
@@ -317,9 +361,11 @@ scoutline doctor # full diagnostics
317
361
  scoutline doctor --no-tools # metadata only, no transport
318
362
  scoutline doctor --provider minimax # MiniMax connectivity
319
363
 
320
- # Cache - inspect or clear the local cache
321
- scoutline cache stats # show inventory of both subdirectories
364
+ # Cache - inspect, clear, or prune the local cache
365
+ scoutline cache stats # inventory of both subdirectories (live/expired, per provider and capability)
322
366
  scoutline cache clear # delete every file under cache/ and tools/
367
+ scoutline cache prune # delete expired entries (effective TTL threshold)
368
+ scoutline cache prune --older-than 168h --provider zai # age override + selectors (AND together)
323
369
 
324
370
  # Config - inspect and change settings (scriptable, always redacted)
325
371
  scoutline config get # full config dump (credentials masked)
@@ -366,6 +412,9 @@ one-line cache summary under the `cache` field.
366
412
 
367
413
  - `repo search` defaults to English results. Use `--language zh` for Chinese.
368
414
  - `repo tree` supports `--path` (directory scope) and `--depth` (expand subtrees).
415
+ - `repo brief` composes tree + search + read into one schema-version-1
416
+ `RepositoryBrief` envelope; `--focus` subsets the sealed set
417
+ `structure, readme, manifest, files` (default all four).
369
418
  - `quota --all-providers` exits 1 if any configured Provider fails; successful
370
419
  entries are still reported.
371
420
  - `doctor` exits 1 when the effective Provider is unconfigured or any
@@ -373,14 +422,14 @@ one-line cache summary under the `cache` field.
373
422
  - `read` returns a schema-version-1 envelope (content read or extract read) in every output mode. `--with-images-summary`, `--no-gfm`, and `--keep-img-data-url` are passed through to the Provider request. `--max-chars` is ignored on extract reads; `--full-envelope` is silently deprecated.
374
423
  - Vision tool calls automatically retry transient 5xx/network errors (default: 2 retries). Configure with `ZAI_MCP_VISION_RETRY_COUNT` (or `ZAI_MCP_RETRY_COUNT` for all tools).
375
424
  - Tool discovery can be cached to speed `tools`/`tool`/`doctor` (default: on, 24h TTL). The cache shares the unified root with the response cache; configure both via `SCOUTLINE_CACHE`, `SCOUTLINE_CACHE_TTL_MS`, `SCOUTLINE_CACHE_SIZE_MB`, and `SCOUTLINE_CACHE_DIR` (legacy aliases `ZAI_MCP_TOOL_CACHE*`, `ZAI_MCP_CACHE_DIR`, and `ZAI_CACHE*` are accepted silently).
376
- - The local cache lives at `~/.scoutline/` (`cache/` for responses, `tools/` for tool discovery) on every platform. Inspect or clear it with `scoutline cache stats` and `scoutline cache clear`.
425
+ - The local cache lives at `~/.scoutline/` (`cache/` for responses, `tools/` for tool discovery) on every platform. Inspect, clear, or prune it with `scoutline cache stats`, `scoutline cache clear`, and `scoutline cache prune`. Prune deletes expired entries by their stored timestamp (`--older-than <24h|90m|30s|seconds>` replaces the TTL threshold; `--provider`/`--capability` narrow the response scan to v2 filenames — the tool cache is unpartitioned and is always scanned age-only).
377
426
 
378
427
  ## Repository Exploration (P6)
379
428
 
380
- `scoutline repo search`, `scoutline repo read`, and `scoutline repo tree`
381
- participate in `--provider` selection. Z.AI advertises the
382
- `repository-exploration` Capability and supplies it through the Z.AI
383
- Repository Adapter. MiniMax and the other built-in Providers do not
429
+ `scoutline repo search`, `scoutline repo read`, `scoutline repo tree`, and
430
+ `scoutline repo brief` participate in `--provider` selection. Z.AI
431
+ advertises the `repository-exploration` Capability and supplies it through
432
+ the Z.AI Repository Adapter. MiniMax and the other built-in Providers do not
384
433
  advertise it; by default (0.11.0+) Scoutline emits a stderr notice and
385
434
  auto-reroutes to Z.AI. Under `--no-fallback` the preflight surfaces
386
435
  `UNSUPPORTED_CAPABILITY` for the selected non-supplier before descriptor
@@ -390,8 +439,8 @@ the previous strict single-provider behavior.
390
439
 
391
440
  ### Breaking data-mode migration (v0.2 → v1)
392
441
 
393
- The three `repo` successes return **schema-version-1 structured values** in
394
- every output mode. This is an intentional breaking change from the v0.2 raw
442
+ The `repo search`, `read`, `tree`, and `brief` successes return
443
+ **schema-version-1 structured values** in every output mode. This is an intentional breaking change from the v0.2 raw
395
444
  Search/File strings and the depth-dependent raw Tree shape:
396
445
 
397
446
  | Command | v0.2 (legacy, now obsolete) | v1 (current) |
@@ -399,6 +448,7 @@ Search/File strings and the depth-dependent raw Tree shape:
399
448
  | `repo search` | Raw ZRead text with `<excerpt>` blocks | `{schemaVersion, repository, query, language, excerpts:[{text}], truncated, originalTextLength}` |
400
449
  | `repo read` | Raw `<file_content>…</file_content>` body | `{schemaVersion, repository, path, content, truncated, originalContentLength}` |
401
450
  | `repo tree` | `<structure>` block (depth 1 returned split/deep routes) | `{schemaVersion, repository, path, depth, snapshots:[{repository, path, entries:[{name, path, kind}]}]}` (structured at every depth, including depth 1) |
451
+ | `repo brief` | — (new command) | `{schemaVersion, repository, focus, coverage:{probes}, tree?, docs?, entryPoints?, files?:[{path, content, truncated, originalContentLength}], detected:{hasReadme, hasManifest, manifestKinds}}` (sections gated by `--focus`; `coverage` and `detected` always present) |
402
452
 
403
453
  `data` mode emits the exact object above. `json` and `pretty` wrap it through
404
454
  the standard success envelope. Text-oriented modes (`compact`, `markdown`,
@@ -431,6 +481,8 @@ projection applied to the normalized result after caching.
431
481
  Provider order; the final retained excerpt is truncated and later excerpts
432
482
  are omitted.
433
483
  - `repo tree` → never character-limited.
484
+ - `repo brief` → forwarded verbatim to every search and read call (per-call
485
+ budget); the tree probe is never character-limited.
434
486
  - Metadata, JSON envelopes, and Tree snapshots are not part of the budget.
435
487
 
436
488
  ### Empty results
@@ -456,6 +508,11 @@ never rewritten, migrated, or deleted. `--no-cache` performs no reads or
456
508
  writes. Injected credentials drive the fingerprint and legacy-key
457
509
  construction; ambient `process.env` is never reread.
458
510
 
511
+ `repo brief` is never cached as a unit: its probes reuse the per-operation
512
+ entries above, so a warm re-run still invokes the Explorer operations but
513
+ makes no new provider transport calls, and still produces byte-identical
514
+ output.
515
+
459
516
  ### Errors and lifecycle
460
517
 
461
518
  Encoded MCP error envelopes are recognized before success parsing:
@@ -126,6 +126,102 @@ export interface RepositoryTreeResult {
126
126
  readonly depth: number;
127
127
  readonly snapshots: readonly RepositoryDirectoryListing[];
128
128
  }
129
+ /**
130
+ * Sealed v1 probe set. Opening the set later is additive.
131
+ */
132
+ export type RepoBriefFocus = "structure" | "readme" | "manifest" | "files";
133
+ /**
134
+ * Canonical kind set, in canonical priority order (used for cap-4 read
135
+ * selection; see DESIGN D1, D7). The README is always selected first
136
+ * when present; the manifests below are selected in this order.
137
+ */
138
+ export type RepoManifestKind = "package.json" | "pyproject.toml" | "Cargo.toml" | "go.mod";
139
+ /**
140
+ * One record per Explorer call the brief attempted, in execution
141
+ * order. The label set is a closed vocabulary for stable consumer
142
+ * interpretation: `"tree"` for the tree probe; `"search:readme"` and
143
+ * `"search:manifest"` for the two search probes; `"read:<path>"` for
144
+ * each read probe (path is the repository-relative POSIX path that
145
+ * was requested); and the sentinel `"read:<files>"` for a read stage
146
+ * that ran no per-path probe (always `skipped` — see `reason`).
147
+ */
148
+ export interface RepoBriefProbeRecord {
149
+ readonly kind: "tree" | "search" | "read";
150
+ readonly label: string;
151
+ /**
152
+ * ok — probe ran and returned a normalized result.
153
+ * failed — probe ran and threw; `error` is set.
154
+ * skipped — probe did not run: focus-excluded, dependency-failed,
155
+ * or no-selection (read stage requested, but the
156
+ * tree-derived selection was empty).
157
+ */
158
+ readonly status: "ok" | "failed" | "skipped";
159
+ readonly error?: {
160
+ readonly code: string;
161
+ readonly message: string;
162
+ };
163
+ readonly reason?: "focus-excluded" | "dependency-failed" | "no-selection";
164
+ }
165
+ /**
166
+ * Coverage section of the brief envelope. `probes` is total and
167
+ * ordered: one terminal record per Explorer call the brief attempted,
168
+ * plus one `read:<files>` sentinel record whenever the read stage ran
169
+ * no per-path probe — the stage was skipped (focus-excluded), its
170
+ * selection input failed (dependency-failed), or it was requested but
171
+ * the tree-derived selection was empty (no-selection). Consumers can
172
+ * therefore always read the read stage's outcome from `coverage`,
173
+ * never by inferring from missing records.
174
+ */
175
+ export interface RepoBriefCoverage {
176
+ readonly probes: readonly RepoBriefProbeRecord[];
177
+ }
178
+ /**
179
+ * Evidence entry: a selected key file, content verbatim from the
180
+ * normalized File result (path + truncation metadata unchanged).
181
+ */
182
+ export interface RepoBriefFileEntry {
183
+ readonly path: string;
184
+ readonly content: string;
185
+ readonly truncated: boolean;
186
+ readonly originalContentLength: number;
187
+ }
188
+ /**
189
+ * Tree-derived booleans. `null` means the tree probe failed or was
190
+ * focus-excluded — never guessed from search excerpts.
191
+ */
192
+ export interface RepoBriefDetected {
193
+ readonly hasReadme: boolean | null;
194
+ readonly hasManifest: boolean | null;
195
+ readonly manifestKinds: readonly RepoManifestKind[] | null;
196
+ }
197
+ /**
198
+ * The brief envelope. `schemaVersion` is literally `1`; no
199
+ * timestamp, no randomness, no environment-derived fields
200
+ * (byte-determinism; see DESIGN D2). Field presence is governed by
201
+ * the presence matrix in SCHEMA.md.
202
+ */
203
+ export interface RepositoryBrief {
204
+ readonly schemaVersion: 1;
205
+ /** "owner/repo" as validated by `validateRepo`. */
206
+ readonly repository: string;
207
+ /** Requested focus, validated against the sealed set, order preserved. */
208
+ readonly focus: readonly RepoBriefFocus[];
209
+ readonly coverage: RepoBriefCoverage;
210
+ /** Present iff `structure` ∈ focus AND the tree probe succeeded. */
211
+ readonly tree?: RepositoryTreeResult;
212
+ /** Present iff `readme` ∈ focus AND search:readme succeeded. */
213
+ readonly docs?: RepositorySearchResult;
214
+ /** Present iff `manifest` ∈ focus AND search:manifest succeeded. */
215
+ readonly entryPoints?: RepositorySearchResult;
216
+ /**
217
+ * Present iff `files` ∈ focus AND tree `ok` AND ≥1 selected read
218
+ * succeeded. Order: README first, then manifests in canonical
219
+ * kind order.
220
+ */
221
+ readonly files?: readonly RepoBriefFileEntry[];
222
+ /** Always present; fields null when their derivation input is missing. */
223
+ readonly detected: RepoBriefDetected;
224
+ }
129
225
  /**
130
226
  * Provider-owned legacy cache candidate. Old Z.AI keys encode the
131
227
  * raw v0.2 tool response; the Adapter supplies the decoder so shared
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/capabilities/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/capabilities/repository.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/capabilities/repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAmOH,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAC9E,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,mEAAmE;AACnE,gDAAgD;AAChD,EAAE;AACF,iCAAiC;AACjC,2EAA2E;AAC3E,qEAAqE;AACrE,YAAY;AACZ,sEAAsE;AACtE,mDAAmD;AACnD,iEAAiE;AACjE,kEAAkE;AAElE,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,SAAS,0BAA0B,CAAC,KAAc;IAChD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,CACX,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAExD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvE,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ;QACR,QAAQ;QACR,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,qBAAqB,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1E,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;KACnD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gCAAgC,CAC9C,KAAc;IAEd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/capabilities/repository.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,26 @@ export interface CacheClearReport {
49
49
  readonly toolsCleared: number;
50
50
  readonly bytesFreed: number;
51
51
  }
52
+ /**
53
+ * Mirror of {@link PruneCachesResult} in `src/lib/cache.ts`. Counts
54
+ * reflect actual deletions performed during the prune run.
55
+ */
56
+ export interface CachePruneReport {
57
+ readonly prunedResponses: number;
58
+ readonly prunedTools: number;
59
+ readonly bytesFreed: number;
60
+ }
61
+ /**
62
+ * Selectors narrowing a prune run. All optional and AND together;
63
+ * mirrors {@link PruneSelectors} from `src/lib/cache.ts` (DESIGN D2/D3).
64
+ * The dispatcher parses `--older-than`/`--provider`/`--capability` into
65
+ * this shape and passes it to the production `pruneCaches`.
66
+ */
67
+ export interface CachePruneSelectors {
68
+ readonly olderThanMs?: number;
69
+ readonly provider?: string;
70
+ readonly capability?: string;
71
+ }
52
72
  /**
53
73
  * Format a byte count as e.g. `"12.3 MB"`, `"8.2 KB"`, `"510 B"`. Used
54
74
  * by `cache stats` presentation and by Doctor's one-line summary. Pure:
@@ -71,6 +91,11 @@ export declare function formatCacheStats(stats: CacheStatsReport): string;
71
91
  * Format a clear result as a one-line TTY notice.
72
92
  */
73
93
  export declare function formatCacheClear(result: CacheClearReport): string;
94
+ /**
95
+ * Format a prune result as a one-line TTY notice. Same voice as
96
+ * {@link formatCacheClear} (cleared vs pruned is the only swap).
97
+ */
98
+ export declare function formatCachePrune(result: CachePruneReport): string;
74
99
  /**
75
100
  * Format the one-line Doctor cache summary from a `cacheStats()` value.
76
101
  * The dispatcher calls this before invoking `buildDiagnosticsReport`;
@@ -90,6 +115,9 @@ export interface CacheStatsDependencies {
90
115
  export interface CacheClearDependencies {
91
116
  readonly clear: () => Promise<CacheClearReport>;
92
117
  }
118
+ export interface CachePruneDependencies {
119
+ readonly prune: (selectors: CachePruneSelectors) => Promise<CachePruneReport>;
120
+ }
93
121
  /**
94
122
  * Run the `cache stats` subcommand. Returns the inventory as base data
95
123
  * with a TTY presentation override. Exit code is always 0 on success;
@@ -102,5 +130,15 @@ export declare function cacheStatsCommand(deps: CacheStatsDependencies): Promise
102
130
  * override.
103
131
  */
104
132
  export declare function cacheClearCommand(deps: CacheClearDependencies): Promise<CommandResult<CacheClearReport>>;
133
+ /**
134
+ * Run the `cache prune` subcommand. Returns the count of pruned
135
+ * entries and bytes freed as base data with a TTY presentation
136
+ * override. Selectors are passed through to `deps.prune` verbatim
137
+ * (the dispatcher parses `--older-than`/`--provider`/`--capability`
138
+ * into this shape). Lock-timeout errors propagate so the
139
+ * dispatcher's error boundary emits the sanitized stderr envelope
140
+ * (DESIGN D5).
141
+ */
142
+ export declare function cachePruneCommand(deps: CachePruneDependencies, selectors: CachePruneSelectors): Promise<CommandResult<CachePruneReport>>;
105
143
  export declare const CACHE_HELP: string;
106
144
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAS9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,QAAQ,CAAC,SAAS,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/E;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWjD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAK5C;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAmBhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAMjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAOxE;AAMD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACjD;AAkBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAO1C;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAO1C;AAED,eAAO,MAAM,UAAU,QA8Bf,CAAC"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAS9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,QAAQ,CAAC,SAAS,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/E;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWjD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAK5C;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAmBhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAMjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAMjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAOxE;AAMD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/E;AAwBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAO1C;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAO1C;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,sBAAsB,EAC5B,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAO1C;AAED,eAAO,MAAM,UAAU,QA0Df,CAAC"}
@@ -111,6 +111,15 @@ export function formatCacheClear(result) {
111
111
  `and ${result.toolsCleared} tool ${pluralEntry(result.toolsCleared)} ` +
112
112
  `(${formatBytes(result.bytesFreed)} freed)`);
113
113
  }
114
+ /**
115
+ * Format a prune result as a one-line TTY notice. Same voice as
116
+ * {@link formatCacheClear} (cleared vs pruned is the only swap).
117
+ */
118
+ export function formatCachePrune(result) {
119
+ return (`Pruned ${result.prunedResponses} response ${pluralEntry(result.prunedResponses)} ` +
120
+ `and ${result.prunedTools} tool ${pluralEntry(result.prunedTools)} ` +
121
+ `(${formatBytes(result.bytesFreed)} freed)`);
122
+ }
114
123
  /**
115
124
  * Format the one-line Doctor cache summary from a `cacheStats()` value.
116
125
  * The dispatcher calls this before invoking `buildDiagnosticsReport`;
@@ -143,6 +152,11 @@ function clearPresentations(result) {
143
152
  const text = formatCacheClear(result);
144
153
  return { compact: text, markdown: text, refs: text, tty: text };
145
154
  }
155
+ /** All text modes share the same one-line prune notice. */
156
+ function prunePresentations(result) {
157
+ const text = formatCachePrune(result);
158
+ return { compact: text, markdown: text, refs: text, tty: text };
159
+ }
146
160
  /**
147
161
  * Run the `cache stats` subcommand. Returns the inventory as base data
148
162
  * with a TTY presentation override. Exit code is always 0 on success;
@@ -169,12 +183,30 @@ export async function cacheClearCommand(deps) {
169
183
  presentations: clearPresentations(result),
170
184
  };
171
185
  }
186
+ /**
187
+ * Run the `cache prune` subcommand. Returns the count of pruned
188
+ * entries and bytes freed as base data with a TTY presentation
189
+ * override. Selectors are passed through to `deps.prune` verbatim
190
+ * (the dispatcher parses `--older-than`/`--provider`/`--capability`
191
+ * into this shape). Lock-timeout errors propagate so the
192
+ * dispatcher's error boundary emits the sanitized stderr envelope
193
+ * (DESIGN D5).
194
+ */
195
+ export async function cachePruneCommand(deps, selectors) {
196
+ const result = await deps.prune(selectors);
197
+ return {
198
+ kind: "data",
199
+ data: result,
200
+ presentations: prunePresentations(result),
201
+ };
202
+ }
172
203
  export const CACHE_HELP = `
173
- Cache - Inspect and clear the local cache
204
+ Cache - Inspect, clear, or prune the local cache
174
205
 
175
206
  Usage:
176
- scoutline cache stats # show inventory of both cache subdirectories
177
- scoutline cache clear # delete every file in both cache subdirectories
207
+ scoutline cache stats # show inventory of both cache subdirectories
208
+ scoutline cache clear # delete every file in both cache subdirectories
209
+ scoutline cache prune [--older-than <D>] [--provider <id>] [--capability <id>]
178
210
 
179
211
  Subcommands:
180
212
  stats Print the cache directory, status (enabled/disabled, TTL, size
@@ -185,19 +217,46 @@ Subcommands:
185
217
  directories themselves are preserved so the next invocation
186
218
  recreates entries without a directory-creation race. The
187
219
  orphaned legacy ~/.cache/zai-cli/ directory is never touched.
220
+ prune Delete expired entries from both caches by stored timestamp
221
+ (DESIGN D1: ts, never mtime). Without flags, prune uses the
222
+ effective TTL; with --older-than, that duration replaces the
223
+ TTL. --provider and --capability narrow the response-cache
224
+ scan to v2 filenames only (DESIGN D2: legacy files are
225
+ age-selected, never selector-selected). --provider may appear
226
+ before or after the command token. Unknown
227
+ --provider/--capability values are NOT pre-validated — they
228
+ filename-match nothing in the response cache, while the
229
+ selector-free tool scan still prunes expired tool entries
230
+ (tool filenames are unpartitioned; DESIGN D4).
231
+
232
+ Duration syntax for --older-than (DESIGN D3): 24h, 90m, 30s, or a bare
233
+ integer (seconds). The value REPLACES the effective TTL. Example:
234
+ --older-than 1h prunes anything older than 1 hour even when the TTL is
235
+ 24h.
188
236
 
189
237
  The cache root defaults to ~/.scoutline/ on every platform; override it
190
238
  with SCOUTLINE_CACHE_DIR (ZAI_MCP_CACHE_DIR and ZAI_CACHE_DIR are
191
239
  accepted as lower-precedence legacy aliases). Disable both caches with
192
- SCOUTLINE_CACHE=0 (legacy alias: ZAI_CACHE=0).
240
+ SCOUTLINE_CACHE=0 (legacy alias: ZAI_CACHE=0). A disabled cache does
241
+ NOT short-circuit prune: deletion is not a cache read/write (D6). With
242
+ no --older-than under a disabled cache, prune reports zeros (TTL of 0
243
+ means "no freshness rule", not "delete everything").
193
244
 
194
245
  Exit codes:
195
246
  0 Success.
196
- 1 I/O error (reported as a sanitized JSON error envelope).
247
+ 1 Validation error (bad or valueless --older-than / --provider /
248
+ --capability, unknown subcommand) or I/O error including a
249
+ cache-write lock timeout (DESIGN D5: the prune scan serializes on
250
+ the response-dir lock a concurrent write holds; a lock-acquire
251
+ timeout throws and is reported as a sanitized FILE_ERROR JSON
252
+ error envelope).
197
253
 
198
254
  Examples:
199
255
  scoutline cache stats
200
256
  scoutline cache clear
257
+ scoutline cache prune
258
+ scoutline cache prune --older-than 1h
259
+ scoutline cache prune --older-than 24h --provider zai --capability search
201
260
  scoutline cache --help
202
261
  `.trim();
203
262
  //# sourceMappingURL=cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/commands/cache.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  * registry layer (API keys never ride argv, AGENTS.md).
15
15
  */
16
16
  import type { CommandResult } from "../command-invocation.js";
17
- import { type ScoutlineConfig } from "../lib/config-store.js";
17
+ import { type FanoutNoticeContext, type ScoutlineConfig } from "../lib/config-store.js";
18
18
  export interface ConfigGetDependencies {
19
19
  /** Read the current config (production: `readConfig`). */
20
20
  readonly read: () => Promise<ScoutlineConfig>;
@@ -24,6 +24,22 @@ export interface ConfigGetDependencies {
24
24
  export interface ConfigSetDependencies {
25
25
  /** Strict set (production: `setConfigValue`). */
26
26
  readonly set: (path: string, value: string) => Promise<ScoutlineConfig>;
27
+ /**
28
+ * Success-path notice channel (production: the invocation context's
29
+ * `notice`, stderr). Used for registry-mandated warnings like the
30
+ * fan-out cost sentence (search-fanout DESIGN D7) — visible in every
31
+ * output mode while stdout stays data-only. Optional so presentation
32
+ * doubles stay minimal.
33
+ */
34
+ readonly notify?: (message: string) => void;
35
+ /**
36
+ * Eligibility context (env + provider registry) the fan-out cost
37
+ * notice needs to name only the routed providers that would actually
38
+ * bill — the same arm set `resolveFanoutPlan` computes (review fix,
39
+ * PR #36). Optional: without it the notice falls back to the blanket
40
+ * sentence instead of naming raw routing entries.
41
+ */
42
+ readonly noticeContext?: FanoutNoticeContext;
27
43
  }
28
44
  export interface ConfigUnsetDependencies {
29
45
  /** Unset (production: `unsetConfigValue`). */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAQhC,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9C,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,uBAAuB;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAC5D;AA+CD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAyBjC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAQ1D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAO1C;AAED,eAAO,MAAM,WAAW,QA6ChB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAQhC,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9C,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACxE;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CAC9C;AAED,MAAM,WAAW,uBAAuB;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CAC5D;AAgDD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAyBjC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAoB1D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAO1C;AAED,eAAO,MAAM,WAAW,QAsDhB,CAAC"}
@@ -46,6 +46,8 @@ function valueAtPath(config, path) {
46
46
  return config.routing?.[trimmed.slice("routing.".length)];
47
47
  if (trimmed === "fallbackEnabled")
48
48
  return config.fallbackEnabled;
49
+ if (trimmed === "fanout")
50
+ return config.fanout;
49
51
  const providerMatch = /^providers\.([a-z0-9-]+)(?:\.[A-Za-z0-9-]+)*$/.exec(trimmed);
50
52
  if (providerMatch?.[1])
51
53
  return config.providers[providerMatch[1]];
@@ -78,7 +80,7 @@ export async function configGetCommand(path, deps) {
78
80
  // silent "(not set)"; other unknown paths list the valid roots.
79
81
  throw path.trim().startsWith("routing.")
80
82
  ? unknownConfigKeyError(path)
81
- : new ValidationError(`Unknown config key "${path}".`, 'Valid keys: routing, routing.<capability>, fallbackEnabled, providers.<id>. Run "scoutline config --help".');
83
+ : new ValidationError(`Unknown config key "${path}".`, 'Valid keys: routing, routing.<capability>, fallbackEnabled, fanout, providers.<id>. Run "scoutline config --help".');
82
84
  }
83
85
  const raw = valueAtPath(config, path);
84
86
  const redacted = redactSecrets(raw ?? null, secrets);
@@ -95,6 +97,18 @@ export async function configGetCommand(path, deps) {
95
97
  export async function configSetCommand(path, value, deps) {
96
98
  const updated = await deps.set(path, value);
97
99
  const raw = valueAtPath(updated, path);
100
+ // Registry-mandated enable-time warning (fan-out cost sentence, D7):
101
+ // emitted as a stderr notice so it reaches every output mode while
102
+ // stdout stays data-only. The registry supplies the sentence for the
103
+ // UPDATED config plus the eligibility context — with `routing.search`
104
+ // set it names only the routed arms that are ELIGIBLE (configured ∩
105
+ // search-capable, the same set `resolveFanoutPlan` computes) instead
106
+ // of claiming ALL configured providers or naming raw routing entries
107
+ // that would not bill (review fix, PR #36).
108
+ const key = resolveConfigKey(path);
109
+ if (key?.setTrueNotice !== undefined && raw === true) {
110
+ deps.notify?.(key.setTrueNotice(updated, deps.noticeContext));
111
+ }
98
112
  return {
99
113
  kind: "data",
100
114
  data: { path: path.trim(), value: raw },
@@ -126,6 +140,12 @@ Keys:
126
140
  routing.<capability> Ordered provider list for one capability.
127
141
  Example: scoutline config set routing.search tavily,brave
128
142
  fallbackEnabled true|false — the always-on provider fallback switch.
143
+ fanout true|false — the multi-provider search fan-out
144
+ switch (default false; enabling warns about the
145
+ billable cost — every configured search provider,
146
+ or the routing.search subset when routed).
147
+ Remove the standing switch with
148
+ \`scoutline config unset fanout\`.
129
149
  providers.<id> Provider configuration (view only; credential
130
150
  values are always masked).
131
151
 
@@ -138,7 +158,8 @@ Behaviour:
138
158
  provider's environment variable (API keys never belong in command
139
159
  arguments).
140
160
  unset Removes a routing capability (and the table when the last entry
141
- goes), the whole routing table, or the fallbackEnabled switch.
161
+ goes), the whole routing table, the fallbackEnabled switch, or
162
+ the fanout switch.
142
163
 
143
164
  Routing semantics: when no --provider / SCOUTLINE_PROVIDER pin exists,
144
165
  the routed list orders provider selection for that capability — the
@@ -155,7 +176,9 @@ Examples:
155
176
  scoutline config get routing
156
177
  scoutline config set routing.search tavily,brave
157
178
  scoutline config set fallbackEnabled false
179
+ scoutline config set fanout true
158
180
  scoutline config unset routing.search
181
+ scoutline config unset fanout
159
182
  scoutline config --help
160
183
  `.trim();
161
184
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}