scoutline 0.6.3 → 0.7.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 (108) hide show
  1. package/README.md +8 -9
  2. package/bin/scoutline.js +2 -3
  3. package/dist/capabilities/crawl.d.ts +93 -0
  4. package/dist/capabilities/crawl.d.ts.map +1 -0
  5. package/dist/capabilities/crawl.js +62 -0
  6. package/dist/capabilities/crawl.js.map +1 -0
  7. package/dist/capabilities/diagnostics.d.ts +45 -43
  8. package/dist/capabilities/diagnostics.d.ts.map +1 -1
  9. package/dist/capabilities/diagnostics.js +58 -71
  10. package/dist/capabilities/diagnostics.js.map +1 -1
  11. package/dist/capabilities/map.d.ts +81 -0
  12. package/dist/capabilities/map.d.ts.map +1 -0
  13. package/dist/capabilities/map.js +60 -0
  14. package/dist/capabilities/map.js.map +1 -0
  15. package/dist/capabilities/quota.js +1 -1
  16. package/dist/capabilities/quota.js.map +1 -1
  17. package/dist/capabilities/research.d.ts +98 -0
  18. package/dist/capabilities/research.d.ts.map +1 -0
  19. package/dist/capabilities/research.js +71 -0
  20. package/dist/capabilities/research.js.map +1 -0
  21. package/dist/capabilities/search.d.ts +9 -1
  22. package/dist/capabilities/search.d.ts.map +1 -1
  23. package/dist/commands/crawl.d.ts +46 -0
  24. package/dist/commands/crawl.d.ts.map +1 -0
  25. package/dist/commands/crawl.js +170 -0
  26. package/dist/commands/crawl.js.map +1 -0
  27. package/dist/commands/doctor.d.ts +7 -8
  28. package/dist/commands/doctor.d.ts.map +1 -1
  29. package/dist/commands/doctor.js +37 -34
  30. package/dist/commands/doctor.js.map +1 -1
  31. package/dist/commands/map.d.ts +39 -0
  32. package/dist/commands/map.d.ts.map +1 -0
  33. package/dist/commands/map.js +121 -0
  34. package/dist/commands/map.js.map +1 -0
  35. package/dist/commands/read.d.ts.map +1 -1
  36. package/dist/commands/read.js +7 -1
  37. package/dist/commands/read.js.map +1 -1
  38. package/dist/commands/research.d.ts +62 -0
  39. package/dist/commands/research.d.ts.map +1 -0
  40. package/dist/commands/research.js +314 -0
  41. package/dist/commands/research.js.map +1 -0
  42. package/dist/commands/search.d.ts +2 -1
  43. package/dist/commands/search.d.ts.map +1 -1
  44. package/dist/commands/search.js +11 -4
  45. package/dist/commands/search.js.map +1 -1
  46. package/dist/index.d.ts +38 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +260 -13
  49. package/dist/index.js.map +1 -1
  50. package/dist/lib/cache.d.ts +13 -0
  51. package/dist/lib/cache.d.ts.map +1 -1
  52. package/dist/lib/cache.js +15 -0
  53. package/dist/lib/cache.js.map +1 -1
  54. package/dist/lib/execution.d.ts +105 -1
  55. package/dist/lib/execution.d.ts.map +1 -1
  56. package/dist/lib/execution.js +73 -1
  57. package/dist/lib/execution.js.map +1 -1
  58. package/dist/lib/redact.d.ts +2 -1
  59. package/dist/lib/redact.d.ts.map +1 -1
  60. package/dist/lib/redact.js +19 -7
  61. package/dist/lib/redact.js.map +1 -1
  62. package/dist/lib/research-state.d.ts +104 -0
  63. package/dist/lib/research-state.d.ts.map +1 -0
  64. package/dist/lib/research-state.js +214 -0
  65. package/dist/lib/research-state.js.map +1 -0
  66. package/dist/lib/search-topic.d.ts +21 -0
  67. package/dist/lib/search-topic.d.ts.map +1 -0
  68. package/dist/lib/search-topic.js +36 -0
  69. package/dist/lib/search-topic.js.map +1 -0
  70. package/dist/providers/minimax/adapter.d.ts.map +1 -1
  71. package/dist/providers/minimax/adapter.js +41 -4
  72. package/dist/providers/minimax/adapter.js.map +1 -1
  73. package/dist/providers/minimax/vision-conformance.d.ts +2 -2
  74. package/dist/providers/minimax/vision-conformance.js +2 -2
  75. package/dist/providers/registry.d.ts.map +1 -1
  76. package/dist/providers/registry.js +2 -0
  77. package/dist/providers/registry.js.map +1 -1
  78. package/dist/providers/tavily/adapter.d.ts +62 -0
  79. package/dist/providers/tavily/adapter.d.ts.map +1 -0
  80. package/dist/providers/tavily/adapter.js +970 -0
  81. package/dist/providers/tavily/adapter.js.map +1 -0
  82. package/dist/providers/tavily/client.d.ts +184 -0
  83. package/dist/providers/tavily/client.d.ts.map +1 -0
  84. package/dist/providers/tavily/client.js +486 -0
  85. package/dist/providers/tavily/client.js.map +1 -0
  86. package/dist/providers/tavily/credentials.d.ts +34 -0
  87. package/dist/providers/tavily/credentials.d.ts.map +1 -0
  88. package/dist/providers/tavily/credentials.js +56 -0
  89. package/dist/providers/tavily/credentials.js.map +1 -0
  90. package/dist/providers/tavily/diagnostics.d.ts +44 -0
  91. package/dist/providers/tavily/diagnostics.d.ts.map +1 -0
  92. package/dist/providers/tavily/diagnostics.js +70 -0
  93. package/dist/providers/tavily/diagnostics.js.map +1 -0
  94. package/dist/providers/tavily/quota.d.ts +60 -0
  95. package/dist/providers/tavily/quota.d.ts.map +1 -0
  96. package/dist/providers/tavily/quota.js +186 -0
  97. package/dist/providers/tavily/quota.js.map +1 -0
  98. package/dist/providers/types.d.ts +14 -2
  99. package/dist/providers/types.d.ts.map +1 -1
  100. package/dist/providers/types.js +1 -1
  101. package/dist/providers/types.js.map +1 -1
  102. package/dist/providers/zai/adapter.d.ts.map +1 -1
  103. package/dist/providers/zai/adapter.js +6 -1
  104. package/dist/providers/zai/adapter.js.map +1 -1
  105. package/dist/providers/zai/encoded-error.d.ts.map +1 -1
  106. package/dist/providers/zai/encoded-error.js +8 -6
  107. package/dist/providers/zai/encoded-error.js.map +1 -1
  108. package/package.json +1 -1
@@ -26,6 +26,7 @@ import type { SearchCapability, SearchRequest, SearchSource } from "../capabilit
26
26
  import type { RepositoryOperation, RepositoryOperationKind } from "../capabilities/repository.js";
27
27
  import type { ReaderFetchRequest, ReaderFetchResult, ReaderOperation, ReaderOperationKind } from "../capabilities/reader.js";
28
28
  import { type ResponseCache } from "./cache.js";
29
+ import type { ProviderId } from "../providers/types.js";
29
30
  /**
30
31
  * Retry policy for a single Provider operation. Defaults are applied
31
32
  * per-operation from {@link defaultRetryPolicy}.
@@ -57,7 +58,7 @@ export interface ExecutionDependencies {
57
58
  * composed from the Reader Migration {@link ReaderOperationKind}
58
59
  * source of truth for the same reason.
59
60
  */
60
- export type ProviderOperation = "search" | "vision" | "quota" | "diagnostics" | RepositoryOperationKind | ReaderOperationKind;
61
+ export type ProviderOperation = "search" | "vision" | "quota" | "diagnostics" | RepositoryOperationKind | ReaderOperationKind | "crawl" | "map" | "research";
61
62
  /**
62
63
  * Default retry policy per operation. Search, quota, diagnostics, the
63
64
  * three repository operations, and the reader operation allow one
@@ -187,4 +188,107 @@ export interface ExecuteReaderOptions {
187
188
  * command-output, selection, or presentation module.
188
189
  */
189
190
  export declare function executeReaderOperation(operation: ReaderOperation<ReaderFetchRequest, ReaderFetchResult>, request: ReaderFetchRequest, options: ExecuteReaderOptions, dependencies: ExecutionDependencies): Promise<ReaderFetchResult>;
191
+ /**
192
+ * Identity used to read and write a provider-partitioned cache entry for
193
+ * a generic {@link CachedOperation}. `credentialFingerprint` is the full
194
+ * lowercase SHA-256 hex digest of the resolved credential; `request` is
195
+ * the normalized Capability request.
196
+ *
197
+ * Unlike {@link ReaderCacheIdentity} and the repository identity, this
198
+ * shape carries NO `operation` field and NO `legacyCandidates` — the new
199
+ * capabilities (crawl, map, research) have no v0.2 legacy cache entries
200
+ * to read through (tech-plan §4 / D2).
201
+ */
202
+ export interface CacheIdentity<Request, Result> {
203
+ readonly provider: ProviderId;
204
+ readonly capability: string;
205
+ readonly credentialFingerprint: string;
206
+ readonly request: Readonly<Request>;
207
+ }
208
+ /**
209
+ * Generic cached operation descriptor for capabilities built on the
210
+ * simplified execution wrapper (crawl, map, research). Same surface as
211
+ * {@link RepositoryOperation} and {@link ReaderOperation} — `validate`,
212
+ * `cacheIdentity`, `decodeCached`, `invoke` — minus the legacy-candidate
213
+ * machinery.
214
+ */
215
+ export interface CachedOperation<Request, Result> {
216
+ readonly kind: string;
217
+ /**
218
+ * Validate the request before any Provider access. Throws
219
+ * `ValidationError` for missing required fields and
220
+ * `UnsupportedOptionError` for Provider-specific options the Adapter
221
+ * does not accept.
222
+ */
223
+ validate(request: Request): void;
224
+ /**
225
+ * Build the cache identity for a request. Called only after `validate`
226
+ * succeeds.
227
+ */
228
+ cacheIdentity(request: Request): CacheIdentity<Request, Result>;
229
+ /**
230
+ * Total decoder for cached normalized entries. Accepts `unknown`,
231
+ * validates shape, returns the typed result or `null`. NEVER throws.
232
+ */
233
+ decodeCached(value: unknown): Result | null;
234
+ /**
235
+ * Invoke the Provider and return the normalized result. The Adapter
236
+ * closes its transport and never retries inside this method; shared
237
+ * execution owns retry policy.
238
+ *
239
+ * `signal` is an OPTIONAL cooperative-cancellation channel. When a
240
+ * caller threads an `AbortSignal` through `executeCachedOperation`, the
241
+ * Adapter MAY observe it (e.g. in a long-running poll loop) to stop
242
+ * early and release pending timers so the process can exit. Operations
243
+ * that have nothing to abort (crawl, map) simply ignore it.
244
+ */
245
+ invoke(request: Request, signal?: AbortSignal): Promise<Result>;
246
+ }
247
+ /**
248
+ * Options for {@link executeCachedOperation}. `noCache` bypasses the
249
+ * provider-partitioned cache for both reads and writes; it never bypasses
250
+ * validation, identity, invoke, or retry semantics. `retryPolicy`
251
+ * overrides the default policy from {@link defaultRetryPolicy}.
252
+ */
253
+ export interface ExecuteCachedOptions {
254
+ noCache?: boolean;
255
+ retryPolicy?: RetryPolicy;
256
+ /**
257
+ * Cooperative-cancellation signal forwarded to `operation.invoke`. When
258
+ * aborted, a supporting Adapter (currently research's poll loop) stops
259
+ * early and releases pending timers so a CLI that has already timed out
260
+ * can exit cleanly instead of staying alive on a lingering `setTimeout`.
261
+ * Unsupported operations ignore it.
262
+ */
263
+ signal?: AbortSignal;
264
+ }
265
+ /**
266
+ * Simplified generic cache + retry executor for capabilities without
267
+ * legacy cache entries (crawl, map, research). Mirrors the observable
268
+ * ordering of {@link executeReaderOperation} but omits the
269
+ * legacy-candidate loop (tech-plan §4 / D2).
270
+ *
271
+ * The observable order is fixed:
272
+ *
273
+ * 1. `operation.validate(request)` — throws `ValidationError`
274
+ * synchronously before any cache or Adapter work.
275
+ * 2. `operation.cacheIdentity(request)` — Adapter computes the
276
+ * provider-partitioned cache key from the validated request and
277
+ * a single resolved credential.
278
+ * 3. Read the provider-partitioned cache key and pass the raw value
279
+ * through `operation.decodeCached`. A valid decode returns
280
+ * immediately; `null` is a miss; malformed values never propagate.
281
+ * 4. `operation.invoke(request)` is wrapped through
282
+ * `executeProviderOperation` with the default retry policy derived
283
+ * from `identity.capability` (which is a valid `ProviderOperation`
284
+ * member for every capability using this wrapper). Each retry
285
+ * creates a fresh Adapter transport attempt; cache hits create no
286
+ * transport.
287
+ * 5. The normalized result is written to the provider-partitioned
288
+ * cache key.
289
+ *
290
+ * `--no-cache` skips steps 3 and 5. It never skips validation (1),
291
+ * identity (2), invoke (4), or retry semantics.
292
+ */
293
+ export declare function executeCachedOperation<Request, Result>(operation: CachedOperation<Request, Result>, request: Request, options: ExecuteCachedOptions, dependencies: ExecutionDependencies): Promise<Result>;
190
294
  //# sourceMappingURL=execution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/lib/execution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAClG,OAAO,KAAK,EAEV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAMvE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,aAAa,GACb,uBAAuB,GACvB,mBAAmB,CAAC;AAMxB;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,WAAW,CAmB5E;AAuCD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,YAAY,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,GAAG,QAAQ,CAAC,EAC7D,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,CAAC,CAAC,CAeZ;AAoBD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,EACzE,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAuDlC;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAC9D,SAAS,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,EAC/C,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,wBAAwB,EACjC,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAAC,MAAM,CAAC,CAwEjB;AAOD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,eAAe,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,EACjE,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,oBAAoB,EAC7B,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAkE5B"}
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/lib/execution.ts"],"names":[],"mappings":"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"}
@@ -54,8 +54,14 @@ export function defaultRetryPolicy(operation) {
54
54
  case "repository-read-file":
55
55
  case "repository-list-directory":
56
56
  case "reader-fetch":
57
- default:
57
+ case "crawl":
58
+ case "map":
58
59
  return { ...base, maxRetries: 1 };
60
+ case "research":
61
+ // No retry — double-charge risk. The adapter's invoke() handles
62
+ // the full create→poll→state-file lifecycle internally (tech-plan
63
+ // §3); a transient failure on POST is terminal.
64
+ return { ...base, maxRetries: 0 };
59
65
  }
60
66
  }
61
67
  /**
@@ -380,4 +386,70 @@ export async function executeReaderOperation(operation, request, options, depend
380
386
  }
381
387
  return result;
382
388
  }
389
+ /**
390
+ * Simplified generic cache + retry executor for capabilities without
391
+ * legacy cache entries (crawl, map, research). Mirrors the observable
392
+ * ordering of {@link executeReaderOperation} but omits the
393
+ * legacy-candidate loop (tech-plan §4 / D2).
394
+ *
395
+ * The observable order is fixed:
396
+ *
397
+ * 1. `operation.validate(request)` — throws `ValidationError`
398
+ * synchronously before any cache or Adapter work.
399
+ * 2. `operation.cacheIdentity(request)` — Adapter computes the
400
+ * provider-partitioned cache key from the validated request and
401
+ * a single resolved credential.
402
+ * 3. Read the provider-partitioned cache key and pass the raw value
403
+ * through `operation.decodeCached`. A valid decode returns
404
+ * immediately; `null` is a miss; malformed values never propagate.
405
+ * 4. `operation.invoke(request)` is wrapped through
406
+ * `executeProviderOperation` with the default retry policy derived
407
+ * from `identity.capability` (which is a valid `ProviderOperation`
408
+ * member for every capability using this wrapper). Each retry
409
+ * creates a fresh Adapter transport attempt; cache hits create no
410
+ * transport.
411
+ * 5. The normalized result is written to the provider-partitioned
412
+ * cache key.
413
+ *
414
+ * `--no-cache` skips steps 3 and 5. It never skips validation (1),
415
+ * identity (2), invoke (4), or retry semantics.
416
+ */
417
+ export async function executeCachedOperation(operation, request, options, dependencies) {
418
+ // 1. Validate Capability request.
419
+ operation.validate(request);
420
+ // 2. Adapter-owned cache identity (after validation).
421
+ const identity = operation.cacheIdentity(request);
422
+ // 3. Provider-partitioned cache key. The key namespace is
423
+ // `${capability}-${operation.kind}` (mirrors the reader/repository
424
+ // convention) so future operations under the same capability cannot
425
+ // collide: `crawl-crawl-fetch`, `map-map-fetch`, etc.
426
+ const newKey = buildProviderCacheKey({
427
+ provider: identity.provider,
428
+ capability: `${identity.capability}-${operation.kind}`,
429
+ credentialFingerprint: identity.credentialFingerprint,
430
+ request: identity.request,
431
+ });
432
+ if (!options.noCache) {
433
+ const raw = await dependencies.cache.get(newKey);
434
+ if (raw !== null) {
435
+ const decoded = operation.decodeCached(raw);
436
+ if (decoded !== null) {
437
+ return decoded;
438
+ }
439
+ // Malformed normalized value: treat as a miss and fall through.
440
+ }
441
+ }
442
+ // 4. Retry-wrapped invoke. The capability name in the cache identity
443
+ // ("crawl", "map", "research") IS a valid ProviderOperation member
444
+ // and drives the default retry policy. Auth, Validation,
445
+ // Unsupported, and exhausted Quota failures are terminal; transient
446
+ // timeout, network, and 5xx/429-equivalent failures get the
447
+ // operation-specific retry count.
448
+ const result = await executeProviderOperation(identity.capability, () => operation.invoke(request, options.signal), dependencies, options.retryPolicy);
449
+ // 5. Cache the full normalized result before returning.
450
+ if (!options.noCache) {
451
+ await dependencies.cache.set(newKey, result);
452
+ }
453
+ return result;
454
+ }
383
455
  //# sourceMappingURL=execution.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/lib/execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/lib/execution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAWH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAsB,MAAM,YAAY,CAAC;AAmDvE,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA4B;IAC7D,MAAM,IAAI,GAAG;QACX,WAAW,EAAE,qBAAqB;QAClC,UAAU,EAAE,oBAAoB;QAChC,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;IACF,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACpC,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,aAAa,CAAC;QACnB,KAAK,mBAAmB,CAAC;QACzB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,2BAA2B,CAAC;QACjC,KAAK,cAAc,CAAC;QACpB,KAAK,OAAO,CAAC;QACb,KAAK,KAAK;YACR,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACpC,KAAK,UAAU;YACb,gEAAgE;YAChE,kEAAkE;YAClE,gDAAgD;YAChD,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,yBAAyB,CAAC,KAAc;IAC/C,IAAI,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,yDAAyD;IACzD,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACjC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,eAAe,CAAC;QACrB,KAAK,eAAe;YAClB,OAAO,IAAI,CAAC;QACd,KAAK,WAAW,EAAE,CAAC;YACjB,kEAAkE;YAClE,iEAAiE;YACjE,iEAAiE;YACjE,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;YAChC,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QACtF,CAAC;QACD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAA4B,EAC5B,MAAwB,EACxB,YAA6D,EAC7D,WAAyB;IAEzB,MAAM,MAAM,GAAG,WAAW,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,SAAS,CAAC;QACR,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,IAAI,MAAM,CAAC,UAAU;gBAAE,MAAM,KAAK,CAAC;YAC9C,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACvF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnE,MAAM,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,UAAU,CACjB,MAA+B,EAC/B,KAAyB;IAEzB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAA4B,EAC5B,OAAsB,EACtB,OAAyE,EACzE,YAAmC;IAEnC,kCAAkC;IAClC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE7B,sDAAsD;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,OAAO,EAAE;QACjD,WAAW,EAAE,OAAO,CAAC,KAAK;KAC3B,CAAC,CAAC;IAEH,8CAA8C;IAC9C,MAAM,MAAM,GAAG,qBAAqB,CAAC;QACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAA0B,MAAM,CAAC,CAAC;QAC7E,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,mEAAmE;QACnE,iEAAiE;QACjE,uCAAuC;QACvC,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC9B,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAClD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAU,SAAS,CAAC,GAAG,CAAC,CAAC;gBACjE,IAAI,GAAG,KAAK,IAAI;oBAAE,SAAS;gBAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBAC9C,OAAO,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,uEAAuE;IACvE,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,QAAQ,EACR,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAChC,YAAY,EACZ,OAAO,CAAC,WAAW,CACpB,CAAC;IAEF,+DAA+D;IAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,6BAA6B;IAC7B,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAkBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAA+C,EAC/C,OAAgB,EAChB,OAAiC,EACjC,YAAmC;IAEnC,kCAAkC;IAClC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE5B,kEAAkE;IAClE,6DAA6D;IAC7D,6DAA6D;IAC7D,yDAAyD;IACzD,uBAAuB;IACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAElD,qCAAqC;IACrC,EAAE;IACF,kEAAkE;IAClE,gEAAgE;IAChE,gEAAgE;IAChE,mEAAmE;IACnE,mEAAmE;IACnE,qEAAqE;IACrE,6DAA6D;IAC7D,kDAAkD;IAClD,MAAM,MAAM,GAAG,qBAAqB,CAAC;QACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,EAAE;QAC1D,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAU,MAAM,CAAC,CAAC;QAC1D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,gEAAgE;QAClE,CAAC;QAED,2DAA2D;QAC3D,4DAA4D;QAC5D,wDAAwD;QACxD,yBAAyB;QACzB,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAU,SAAS,CAAC,GAAG,CAAC,CAAC;YACvE,IAAI,SAAS,KAAK,IAAI;gBAAE,SAAS;YACjC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,+DAA+D;IAC/D,6DAA6D;IAC7D,MAAM,MAAM,GAAG,MAAM,wBAAwB;IAC3C,0DAA0D;IAC1D,8DAA8D;IAC9D,2DAA2D;IAC3D,SAAS,CAAC,IAAI,EACd,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAC/B,YAAY,EACZ,OAAO,CAAC,WAAW,CACpB,CAAC;IAEF,wDAAwD;IACxD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAiE,EACjE,OAA2B,EAC3B,OAA6B,EAC7B,YAAmC;IAEnC,kCAAkC;IAClC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE5B,kEAAkE;IAClE,6DAA6D;IAC7D,6DAA6D;IAC7D,yDAAyD;IACzD,uBAAuB;IACvB,MAAM,QAAQ,GACZ,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEnC,qCAAqC;IACrC,EAAE;IACF,oEAAoE;IACpE,oEAAoE;IACpE,mEAAmE;IACnE,8BAA8B;IAC9B,MAAM,MAAM,GAAG,qBAAqB,CAAC;QACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,EAAE;QAC1D,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAU,MAAM,CAAC,CAAC;QAC1D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,gEAAgE;QAClE,CAAC;QAED,2DAA2D;QAC3D,4DAA4D;QAC5D,wDAAwD;QACxD,yBAAyB;QACzB,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAU,SAAS,CAAC,GAAG,CAAC,CAAC;YACvE,IAAI,SAAS,KAAK,IAAI;gBAAE,SAAS;YACjC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,+DAA+D;IAC/D,6DAA6D;IAC7D,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,SAAS,CAAC,IAAI,EACd,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAC/B,YAAY,EACZ,OAAO,CAAC,WAAW,CACpB,CAAC;IAEF,wDAAwD;IACxD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAmFD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAA2C,EAC3C,OAAgB,EAChB,OAA6B,EAC7B,YAAmC;IAEnC,kCAAkC;IAClC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE5B,sDAAsD;IACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAElD,0DAA0D;IAC1D,sEAAsE;IACtE,uEAAuE;IACvE,yDAAyD;IACzD,MAAM,MAAM,GAAG,qBAAqB,CAAC;QACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,GAAG,QAAQ,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,EAAE;QACtD,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAU,MAAM,CAAC,CAAC;QAC1D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,gEAAgE;QAClE,CAAC;IACH,CAAC;IAED,qEAAqE;IACrE,sEAAsE;IACtE,4DAA4D;IAC5D,uEAAuE;IACvE,+DAA+D;IAC/D,qCAAqC;IACrC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,QAAQ,CAAC,UAA+B,EACxC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EAC/C,YAAY,EACZ,OAAO,CAAC,WAAW,CACpB,CAAC;IAEF,wDAAwD;IACxD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -30,7 +30,8 @@ import type { Tool } from "@utcp/sdk";
30
30
  * - x-api-key assignments (any case; `=`, `:`, or whitespace as the
31
31
  * key/value separator — covers both `x-api-key=value` and
32
32
  * `x-api-key value`).
33
- * - Z_AI_API_KEY, ZAI_API_KEY, MINIMAX_API_KEY assignments.
33
+ * - Z_AI_API_KEY, ZAI_API_KEY, MINIMAX_API_KEY, TAVILY_API_KEY
34
+ * assignments.
34
35
  * - The literal credentials passed in `extraSecrets` (each value is
35
36
  * replaced wherever it appears; empty strings are skipped).
36
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAqBtC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CA0B9F;AAuBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,CAOhF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAiClF;AAQD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAMxE"}
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAsBtC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAqC9F;AAuBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,EAAE,CAQhF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAiClF;AAQD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAIxE"}
@@ -34,6 +34,7 @@ const CREDENTIAL_KEYS = new Set([
34
34
  "z_ai_api_key",
35
35
  "zai_api_key",
36
36
  "minimax_api_key",
37
+ "tavily_api_key",
37
38
  ]);
38
39
  const REDACTED = "[REDACTED]";
39
40
  /**
@@ -46,7 +47,8 @@ const REDACTED = "[REDACTED]";
46
47
  * - x-api-key assignments (any case; `=`, `:`, or whitespace as the
47
48
  * key/value separator — covers both `x-api-key=value` and
48
49
  * `x-api-key value`).
49
- * - Z_AI_API_KEY, ZAI_API_KEY, MINIMAX_API_KEY assignments.
50
+ * - Z_AI_API_KEY, ZAI_API_KEY, MINIMAX_API_KEY, TAVILY_API_KEY
51
+ * assignments.
50
52
  * - The literal credentials passed in `extraSecrets` (each value is
51
53
  * replaced wherever it appears; empty strings are skipped).
52
54
  */
@@ -55,14 +57,25 @@ export function redactCredentialString(input, extraSecrets) {
55
57
  return input;
56
58
  let result = input;
57
59
  result = result.replace(/Bearer\s+\S+/gi, REDACTED);
60
+ // Tavily API keys carry the `tvly-` prefix; redact the full token
61
+ // wherever it appears (logs, URLs, error bodies).
62
+ result = result.replace(/tvly-[A-Za-z0-9_-]+/gi, REDACTED);
58
63
  // Fixup C — W3: the class accepts either `=`, `:`, or any whitespace
59
64
  // as the key/value separator. The trailing `\S+` consumes the secret
60
65
  // value; the entire `key + separator + value` span is replaced with
61
66
  // the redaction marker.
62
67
  result = result.replace(/x-api-key[\s=:]+[^\s,;"'`]+/gi, REDACTED);
63
- result = result.replace(/Z_AI_API_KEY\s*=\s*\S+/gi, REDACTED);
64
- result = result.replace(/ZAI_API_KEY\s*=\s*\S+/gi, REDACTED);
65
- result = result.replace(/MINIMAX_API_KEY\s*=\s*\S+/gi, REDACTED);
68
+ // F5 (code-review-baseline): add `:` as a separator so the JSON/YAML/
69
+ // HTTP-header form `Z_AI_API_KEY: sk-foo` is redacted, not just the
70
+ // `=` shell form. Bare whitespace is intentionally NOT a separator
71
+ // here (unlike x-api-key): these env-var names appear frequently in
72
+ // prose error messages ("MINIMAX_API_KEY environment variable is
73
+ // required") and a whitespace separator would over-redact that prose.
74
+ // The `\s*[=:]\s*` class is a strict superset of the prior `\s*=\s*`.
75
+ result = result.replace(/Z_AI_API_KEY\s*[=:]\s*\S+/gi, REDACTED);
76
+ result = result.replace(/ZAI_API_KEY\s*[=:]\s*\S+/gi, REDACTED);
77
+ result = result.replace(/MINIMAX_API_KEY\s*[=:]\s*\S+/gi, REDACTED);
78
+ result = result.replace(/TAVILY_API_KEY\s*[=:]\s*\S+/gi, REDACTED);
66
79
  // Embedded credential substrings inside URLs, e.g.
67
80
  // `https://user:secret@host/path`. Catches both `https://` and
68
81
  // `http://` schemes and replaces the entire URL with the marker so
@@ -114,6 +127,7 @@ export function configuredSecrets(env = process.env) {
114
127
  env.Z_AI_API_KEY,
115
128
  env.ZAI_API_KEY,
116
129
  env.MINIMAX_API_KEY,
130
+ env.TAVILY_API_KEY,
117
131
  ];
118
132
  return normalizeSecrets(candidates.filter((c) => typeof c === "string"));
119
133
  }
@@ -175,9 +189,7 @@ function isPlainObject(value) {
175
189
  * caller's value is used instead.
176
190
  */
177
191
  export function redactTool(tool, secrets) {
178
- const resolved = secrets === undefined
179
- ? configuredSecrets()
180
- : normalizeSecrets(secrets);
192
+ const resolved = secrets === undefined ? configuredSecrets() : normalizeSecrets(secrets);
181
193
  const clone = JSON.parse(JSON.stringify(tool));
182
194
  return redactSecrets(clone, resolved);
183
195
  }
@@ -1 +1 @@
1
- {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/lib/redact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Research state file — resume mechanism for interrupted research
3
+ * (tech-plan §3, T07).
4
+ *
5
+ * Research costs 4-250 credits per request. A research task runs
6
+ * asynchronously server-side: POST /research creates it and returns a
7
+ * `request_id`, then GET /research/{id} polls until completion. If the
8
+ * CLI exits (Ctrl-C, crash) mid-poll, the task keeps running and
9
+ * consuming credits. Without a persistence mechanism, the next identical
10
+ * request would POST a SECOND task — a double charge.
11
+ *
12
+ * This module persists `{ requestId, identityHash, createdAt, status }`
13
+ * to `~/.scoutline/research/<state-hash>.json` so the next invocation of
14
+ * the same request detects the in-flight task and polls it instead of
15
+ * creating a new one. The state-hash is deterministic for a given
16
+ * `{provider, capability, credentialFingerprint, request}` tuple (see
17
+ * `computeResearchStateHash`).
18
+ *
19
+ * Boundary rules (ARCHITECTURE.md §2):
20
+ * - May import cache-root resolution and normalized errors.
21
+ * - Must NOT import transport, command presentation, or a Provider
22
+ * Adapter.
23
+ *
24
+ * Resilience contract (tech-plan §3 / G1-G3):
25
+ * - `write()` uses `{ flag: "wx" }` for atomic creation. A concurrent
26
+ * invocation that finds the file already exists gets EEXIST and
27
+ * polls the existing task instead of creating a new one.
28
+ * - `read()` catches JSON parse errors, deletes the corrupt file, and
29
+ * returns `null` (treated as absent → new task created).
30
+ * - `remove()` deletes the file and ignores ENOENT (already gone).
31
+ */
32
+ /**
33
+ * A single in-flight research task's persisted state. `status` tracks the
34
+ * last-seen poll status ("pending" or "in_progress"); the poll loop
35
+ * updates it so a resume after Ctrl-C skips statuses already observed.
36
+ */
37
+ export interface ResearchState {
38
+ readonly requestId: string;
39
+ readonly identityHash: string;
40
+ readonly createdAt: string;
41
+ readonly status: "pending" | "in_progress";
42
+ }
43
+ /**
44
+ * Port the Adapter uses to read/write/remove research state. Production
45
+ * wires {@link createProductionResearchStateFile}; tests inject in-memory
46
+ * doubles to exercise the lifecycle deterministically without touching
47
+ * the filesystem.
48
+ */
49
+ export interface ResearchStateFile {
50
+ read(identityHash: string): Promise<ResearchState | null>;
51
+ write(identityHash: string, state: ResearchState): Promise<void>;
52
+ remove(identityHash: string): Promise<void>;
53
+ }
54
+ /**
55
+ * Inputs to the research state hash. `credentialFingerprint` is the full
56
+ * lowercase SHA-256 hex digest of the active credential (same value used
57
+ * for the response-cache fingerprint). `request` is the normalized
58
+ * ResearchRequest whose recursively key-sorted JSON becomes part of the
59
+ * hash.
60
+ */
61
+ export interface ResearchStateHashInput {
62
+ readonly provider: string;
63
+ readonly capability: string;
64
+ readonly credentialFingerprint: string;
65
+ readonly request: unknown;
66
+ }
67
+ /**
68
+ * Compute the deterministic state-file identity hash for a research
69
+ * request (tech-plan §3 / CR3).
70
+ *
71
+ * state-hash = SHA-256(recursively-key-sorted-JSON({
72
+ * provider, capability, credentialFingerprint, request
73
+ * }))
74
+ *
75
+ * Same canonical approach as `buildProviderCacheKey`'s request hashing,
76
+ * extended to include provider + capability + credential. Rotating the
77
+ * API key orphans old state files (correct — the old task belongs to the
78
+ * old key's billing). The hash never contains a raw credential.
79
+ */
80
+ export declare function computeResearchStateHash(input: ResearchStateHashInput): string;
81
+ /**
82
+ * Build a production {@link ResearchStateFile} backed by files under
83
+ * `~/.scoutline/research/` (via {@link researchStateDir}). One JSON file
84
+ * per in-flight task, named `<state-hash>.json`.
85
+ *
86
+ * - `write()` atomically creates the file with `{ flag: "wx" }`. A
87
+ * concurrent invocation that finds it exists throws EEXIST; the caller
88
+ * catches that and polls the existing task.
89
+ * - `read()` catches JSON parse errors, deletes the corrupt file, and
90
+ * returns `null`.
91
+ * - `remove()` deletes the file and ignores ENOENT.
92
+ */
93
+ export declare function createProductionResearchStateFile(): ResearchStateFile;
94
+ /**
95
+ * Convenience helper exported for the Adapter and tests: builds an
96
+ * in-memory {@link ResearchStateFile} that throws EEXIST on a second
97
+ * write to the same hash, mirroring the production `{ flag: "wx" }`
98
+ * contract exactly. The adapter's lifecycle must not depend on whether
99
+ * the state file is disk-backed or memory-backed.
100
+ */
101
+ export declare function createInMemoryResearchStateFile(): ResearchStateFile & {
102
+ readonly store: Map<string, string>;
103
+ };
104
+ //# sourceMappingURL=research-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-state.d.ts","sourceRoot":"","sources":["../../src/lib/research-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAYH;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAuBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAQ9E;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,IAAI,iBAAiB,CAmErE;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,IAAI,iBAAiB,GAAG;IACrE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAgDA"}