scoutline 0.22.0 → 0.23.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 (294) hide show
  1. package/README.md +60 -26
  2. package/dist/capabilities/search.d.ts +18 -4
  3. package/dist/capabilities/search.d.ts.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +14 -5
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/crawl.d.ts.map +1 -1
  8. package/dist/commands/crawl.js +2 -1
  9. package/dist/commands/crawl.js.map +1 -1
  10. package/dist/commands/doctor.d.ts.map +1 -1
  11. package/dist/commands/doctor.js +2 -1
  12. package/dist/commands/doctor.js.map +1 -1
  13. package/dist/commands/init.d.ts +42 -1
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +42 -5
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/map.d.ts.map +1 -1
  18. package/dist/commands/map.js +2 -1
  19. package/dist/commands/map.js.map +1 -1
  20. package/dist/commands/quota.d.ts.map +1 -1
  21. package/dist/commands/quota.js +2 -2
  22. package/dist/commands/quota.js.map +1 -1
  23. package/dist/commands/read.d.ts.map +1 -1
  24. package/dist/commands/read.js +2 -1
  25. package/dist/commands/read.js.map +1 -1
  26. package/dist/commands/repo.js +1 -1
  27. package/dist/commands/research.d.ts.map +1 -1
  28. package/dist/commands/research.js +2 -1
  29. package/dist/commands/research.js.map +1 -1
  30. package/dist/commands/search.d.ts +54 -6
  31. package/dist/commands/search.d.ts.map +1 -1
  32. package/dist/commands/search.js +273 -25
  33. package/dist/commands/search.js.map +1 -1
  34. package/dist/index.d.ts +72 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +364 -8
  37. package/dist/index.js.map +1 -1
  38. package/dist/lib/code-mode.d.ts +12 -0
  39. package/dist/lib/code-mode.d.ts.map +1 -1
  40. package/dist/lib/code-mode.js +18 -10
  41. package/dist/lib/code-mode.js.map +1 -1
  42. package/dist/lib/config-store.d.ts +45 -1
  43. package/dist/lib/config-store.d.ts.map +1 -1
  44. package/dist/lib/config-store.js +70 -1
  45. package/dist/lib/config-store.js.map +1 -1
  46. package/dist/lib/config.d.ts.map +1 -1
  47. package/dist/lib/config.js +5 -1
  48. package/dist/lib/config.js.map +1 -1
  49. package/dist/lib/errors.d.ts +7 -1
  50. package/dist/lib/errors.d.ts.map +1 -1
  51. package/dist/lib/errors.js +8 -2
  52. package/dist/lib/errors.js.map +1 -1
  53. package/dist/lib/execution.d.ts +14 -5
  54. package/dist/lib/execution.d.ts.map +1 -1
  55. package/dist/lib/execution.js +25 -6
  56. package/dist/lib/execution.js.map +1 -1
  57. package/dist/lib/mcp-client.d.ts +7 -0
  58. package/dist/lib/mcp-client.d.ts.map +1 -1
  59. package/dist/lib/mcp-client.js +11 -1
  60. package/dist/lib/mcp-client.js.map +1 -1
  61. package/dist/lib/parse-zoned-instant.d.ts +13 -0
  62. package/dist/lib/parse-zoned-instant.d.ts.map +1 -0
  63. package/dist/lib/parse-zoned-instant.js +17 -0
  64. package/dist/lib/parse-zoned-instant.js.map +1 -0
  65. package/dist/lib/quota-mapping.d.ts +4 -2
  66. package/dist/lib/quota-mapping.d.ts.map +1 -1
  67. package/dist/lib/quota-mapping.js +25 -2
  68. package/dist/lib/quota-mapping.js.map +1 -1
  69. package/dist/lib/redact.d.ts +3 -2
  70. package/dist/lib/redact.d.ts.map +1 -1
  71. package/dist/lib/redact.js +90 -24
  72. package/dist/lib/redact.js.map +1 -1
  73. package/dist/lib/timeout.d.ts +28 -0
  74. package/dist/lib/timeout.d.ts.map +1 -0
  75. package/dist/lib/timeout.js +30 -0
  76. package/dist/lib/timeout.js.map +1 -0
  77. package/dist/lib/url.d.ts +10 -4
  78. package/dist/lib/url.d.ts.map +1 -1
  79. package/dist/lib/url.js +21 -6
  80. package/dist/lib/url.js.map +1 -1
  81. package/dist/providers/arxiv/client.d.ts +4 -1
  82. package/dist/providers/arxiv/client.d.ts.map +1 -1
  83. package/dist/providers/arxiv/client.js +11 -3
  84. package/dist/providers/arxiv/client.js.map +1 -1
  85. package/dist/providers/bocha/adapter.d.ts +43 -0
  86. package/dist/providers/bocha/adapter.d.ts.map +1 -0
  87. package/dist/providers/bocha/adapter.js +197 -0
  88. package/dist/providers/bocha/adapter.js.map +1 -0
  89. package/dist/providers/bocha/client.d.ts +51 -0
  90. package/dist/providers/bocha/client.d.ts.map +1 -0
  91. package/dist/providers/bocha/client.js +104 -0
  92. package/dist/providers/bocha/client.js.map +1 -0
  93. package/dist/providers/bocha/credentials.d.ts +12 -0
  94. package/dist/providers/bocha/credentials.d.ts.map +1 -0
  95. package/dist/providers/bocha/credentials.js +29 -0
  96. package/dist/providers/bocha/credentials.js.map +1 -0
  97. package/dist/providers/bocha/diagnostics.d.ts +17 -0
  98. package/dist/providers/bocha/diagnostics.d.ts.map +1 -0
  99. package/dist/providers/bocha/diagnostics.js +33 -0
  100. package/dist/providers/bocha/diagnostics.js.map +1 -0
  101. package/dist/providers/brave/adapter.d.ts.map +1 -1
  102. package/dist/providers/brave/adapter.js +4 -3
  103. package/dist/providers/brave/adapter.js.map +1 -1
  104. package/dist/providers/brave/client.d.ts +1 -0
  105. package/dist/providers/brave/client.d.ts.map +1 -1
  106. package/dist/providers/brave/client.js +4 -6
  107. package/dist/providers/brave/client.js.map +1 -1
  108. package/dist/providers/brave/credentials.d.ts +2 -0
  109. package/dist/providers/brave/credentials.d.ts.map +1 -1
  110. package/dist/providers/brave/credentials.js +2 -0
  111. package/dist/providers/brave/credentials.js.map +1 -1
  112. package/dist/providers/catalog.d.ts +34 -0
  113. package/dist/providers/catalog.d.ts.map +1 -0
  114. package/dist/providers/catalog.js +57 -0
  115. package/dist/providers/catalog.js.map +1 -0
  116. package/dist/providers/crossref/adapter.js +2 -2
  117. package/dist/providers/crossref/adapter.js.map +1 -1
  118. package/dist/providers/crossref/client.d.ts +4 -1
  119. package/dist/providers/crossref/client.d.ts.map +1 -1
  120. package/dist/providers/crossref/client.js +11 -3
  121. package/dist/providers/crossref/client.js.map +1 -1
  122. package/dist/providers/crossref/diagnostics.d.ts +1 -1
  123. package/dist/providers/crossref/diagnostics.js +1 -1
  124. package/dist/providers/crossref/diagnostics.js.map +1 -1
  125. package/dist/providers/europepmc/adapter.js +2 -2
  126. package/dist/providers/europepmc/adapter.js.map +1 -1
  127. package/dist/providers/europepmc/client.d.ts +4 -1
  128. package/dist/providers/europepmc/client.d.ts.map +1 -1
  129. package/dist/providers/europepmc/client.js +11 -3
  130. package/dist/providers/europepmc/client.js.map +1 -1
  131. package/dist/providers/exa/client.d.ts +1 -0
  132. package/dist/providers/exa/client.d.ts.map +1 -1
  133. package/dist/providers/exa/client.js +3 -2
  134. package/dist/providers/exa/client.js.map +1 -1
  135. package/dist/providers/exa/credentials.d.ts +2 -0
  136. package/dist/providers/exa/credentials.d.ts.map +1 -1
  137. package/dist/providers/exa/credentials.js +2 -0
  138. package/dist/providers/exa/credentials.js.map +1 -1
  139. package/dist/providers/firecrawl/adapter.d.ts.map +1 -1
  140. package/dist/providers/firecrawl/adapter.js +2 -1
  141. package/dist/providers/firecrawl/adapter.js.map +1 -1
  142. package/dist/providers/firecrawl/client.d.ts +1 -0
  143. package/dist/providers/firecrawl/client.d.ts.map +1 -1
  144. package/dist/providers/firecrawl/client.js +3 -2
  145. package/dist/providers/firecrawl/client.js.map +1 -1
  146. package/dist/providers/firecrawl/credentials.d.ts +2 -0
  147. package/dist/providers/firecrawl/credentials.d.ts.map +1 -1
  148. package/dist/providers/firecrawl/credentials.js +2 -0
  149. package/dist/providers/firecrawl/credentials.js.map +1 -1
  150. package/dist/providers/firecrawl/quota.d.ts.map +1 -1
  151. package/dist/providers/firecrawl/quota.js +5 -2
  152. package/dist/providers/firecrawl/quota.js.map +1 -1
  153. package/dist/providers/jina/adapter.d.ts.map +1 -1
  154. package/dist/providers/jina/adapter.js +6 -4
  155. package/dist/providers/jina/adapter.js.map +1 -1
  156. package/dist/providers/jina/client.d.ts +2 -0
  157. package/dist/providers/jina/client.d.ts.map +1 -1
  158. package/dist/providers/jina/client.js +6 -5
  159. package/dist/providers/jina/client.js.map +1 -1
  160. package/dist/providers/jina/credentials.d.ts +2 -0
  161. package/dist/providers/jina/credentials.d.ts.map +1 -1
  162. package/dist/providers/jina/credentials.js +2 -0
  163. package/dist/providers/jina/credentials.js.map +1 -1
  164. package/dist/providers/kagi/adapter.d.ts +44 -0
  165. package/dist/providers/kagi/adapter.d.ts.map +1 -0
  166. package/dist/providers/kagi/adapter.js +188 -0
  167. package/dist/providers/kagi/adapter.js.map +1 -0
  168. package/dist/providers/kagi/client.d.ts +41 -0
  169. package/dist/providers/kagi/client.d.ts.map +1 -0
  170. package/dist/providers/kagi/client.js +100 -0
  171. package/dist/providers/kagi/client.js.map +1 -0
  172. package/dist/providers/kagi/credentials.d.ts +15 -0
  173. package/dist/providers/kagi/credentials.d.ts.map +1 -0
  174. package/dist/providers/kagi/credentials.js +35 -0
  175. package/dist/providers/kagi/credentials.js.map +1 -0
  176. package/dist/providers/kagi/diagnostics.d.ts +17 -0
  177. package/dist/providers/kagi/diagnostics.d.ts.map +1 -0
  178. package/dist/providers/kagi/diagnostics.js +33 -0
  179. package/dist/providers/kagi/diagnostics.js.map +1 -0
  180. package/dist/providers/linkup/client.d.ts +1 -0
  181. package/dist/providers/linkup/client.d.ts.map +1 -1
  182. package/dist/providers/linkup/client.js +3 -2
  183. package/dist/providers/linkup/client.js.map +1 -1
  184. package/dist/providers/linkup/credentials.d.ts +2 -0
  185. package/dist/providers/linkup/credentials.d.ts.map +1 -1
  186. package/dist/providers/linkup/credentials.js +2 -0
  187. package/dist/providers/linkup/credentials.js.map +1 -1
  188. package/dist/providers/minimax/adapter.d.ts.map +1 -1
  189. package/dist/providers/minimax/adapter.js +2 -2
  190. package/dist/providers/minimax/adapter.js.map +1 -1
  191. package/dist/providers/minimax/coding-plan-client.d.ts +1 -0
  192. package/dist/providers/minimax/coding-plan-client.d.ts.map +1 -1
  193. package/dist/providers/minimax/coding-plan-client.js +3 -2
  194. package/dist/providers/minimax/coding-plan-client.js.map +1 -1
  195. package/dist/providers/minimax/quota-client.d.ts +1 -0
  196. package/dist/providers/minimax/quota-client.d.ts.map +1 -1
  197. package/dist/providers/minimax/quota-client.js +3 -2
  198. package/dist/providers/minimax/quota-client.js.map +1 -1
  199. package/dist/providers/openalex/client.d.ts +2 -0
  200. package/dist/providers/openalex/client.d.ts.map +1 -1
  201. package/dist/providers/openalex/client.js +10 -3
  202. package/dist/providers/openalex/client.js.map +1 -1
  203. package/dist/providers/openalex/diagnostics.d.ts +1 -1
  204. package/dist/providers/openalex/diagnostics.js +1 -1
  205. package/dist/providers/openalex/diagnostics.js.map +1 -1
  206. package/dist/providers/parallel/client.d.ts +1 -0
  207. package/dist/providers/parallel/client.d.ts.map +1 -1
  208. package/dist/providers/parallel/client.js +3 -2
  209. package/dist/providers/parallel/client.js.map +1 -1
  210. package/dist/providers/parallel/credentials.d.ts +2 -0
  211. package/dist/providers/parallel/credentials.d.ts.map +1 -1
  212. package/dist/providers/parallel/credentials.js +2 -0
  213. package/dist/providers/parallel/credentials.js.map +1 -1
  214. package/dist/providers/perplexity/client.d.ts +2 -0
  215. package/dist/providers/perplexity/client.d.ts.map +1 -1
  216. package/dist/providers/perplexity/client.js +5 -4
  217. package/dist/providers/perplexity/client.js.map +1 -1
  218. package/dist/providers/perplexity/credentials.d.ts +2 -0
  219. package/dist/providers/perplexity/credentials.d.ts.map +1 -1
  220. package/dist/providers/perplexity/credentials.js +2 -0
  221. package/dist/providers/perplexity/credentials.js.map +1 -1
  222. package/dist/providers/pubmed/client.d.ts +2 -0
  223. package/dist/providers/pubmed/client.d.ts.map +1 -1
  224. package/dist/providers/pubmed/client.js +10 -3
  225. package/dist/providers/pubmed/client.js.map +1 -1
  226. package/dist/providers/registry.d.ts.map +1 -1
  227. package/dist/providers/registry.js +6 -0
  228. package/dist/providers/registry.js.map +1 -1
  229. package/dist/providers/searchapi/adapter.d.ts +54 -0
  230. package/dist/providers/searchapi/adapter.d.ts.map +1 -0
  231. package/dist/providers/searchapi/adapter.js +310 -0
  232. package/dist/providers/searchapi/adapter.js.map +1 -0
  233. package/dist/providers/searchapi/client.d.ts +73 -0
  234. package/dist/providers/searchapi/client.d.ts.map +1 -0
  235. package/dist/providers/searchapi/client.js +196 -0
  236. package/dist/providers/searchapi/client.js.map +1 -0
  237. package/dist/providers/searchapi/credentials.d.ts +46 -0
  238. package/dist/providers/searchapi/credentials.d.ts.map +1 -0
  239. package/dist/providers/searchapi/credentials.js +71 -0
  240. package/dist/providers/searchapi/credentials.js.map +1 -0
  241. package/dist/providers/searchapi/diagnostics.d.ts +48 -0
  242. package/dist/providers/searchapi/diagnostics.d.ts.map +1 -0
  243. package/dist/providers/searchapi/diagnostics.js +70 -0
  244. package/dist/providers/searchapi/diagnostics.js.map +1 -0
  245. package/dist/providers/searchapi/quota.d.ts +60 -0
  246. package/dist/providers/searchapi/quota.d.ts.map +1 -0
  247. package/dist/providers/searchapi/quota.js +125 -0
  248. package/dist/providers/searchapi/quota.js.map +1 -0
  249. package/dist/providers/spider/client.d.ts +2 -0
  250. package/dist/providers/spider/client.d.ts.map +1 -1
  251. package/dist/providers/spider/client.js +16 -6
  252. package/dist/providers/spider/client.js.map +1 -1
  253. package/dist/providers/spider/credentials.d.ts +2 -0
  254. package/dist/providers/spider/credentials.d.ts.map +1 -1
  255. package/dist/providers/spider/credentials.js +2 -0
  256. package/dist/providers/spider/credentials.js.map +1 -1
  257. package/dist/providers/tavily/client.d.ts +1 -0
  258. package/dist/providers/tavily/client.d.ts.map +1 -1
  259. package/dist/providers/tavily/client.js +3 -2
  260. package/dist/providers/tavily/client.js.map +1 -1
  261. package/dist/providers/tavily/credentials.d.ts +2 -0
  262. package/dist/providers/tavily/credentials.d.ts.map +1 -1
  263. package/dist/providers/tavily/credentials.js +2 -0
  264. package/dist/providers/tavily/credentials.js.map +1 -1
  265. package/dist/providers/types.d.ts +1 -1
  266. package/dist/providers/types.d.ts.map +1 -1
  267. package/dist/providers/types.js +3 -0
  268. package/dist/providers/types.js.map +1 -1
  269. package/dist/providers/you/client.d.ts +4 -0
  270. package/dist/providers/you/client.d.ts.map +1 -1
  271. package/dist/providers/you/client.js +4 -5
  272. package/dist/providers/you/client.js.map +1 -1
  273. package/dist/providers/you/credentials.d.ts +2 -0
  274. package/dist/providers/you/credentials.d.ts.map +1 -1
  275. package/dist/providers/you/credentials.js +3 -3
  276. package/dist/providers/you/credentials.js.map +1 -1
  277. package/dist/providers/zai/adapter.d.ts.map +1 -1
  278. package/dist/providers/zai/adapter.js +2 -1
  279. package/dist/providers/zai/adapter.js.map +1 -1
  280. package/dist/providers/zai/credentials.d.ts +2 -0
  281. package/dist/providers/zai/credentials.d.ts.map +1 -1
  282. package/dist/providers/zai/credentials.js +2 -0
  283. package/dist/providers/zai/credentials.js.map +1 -1
  284. package/dist/providers/zai/monitor-client.d.ts +1 -0
  285. package/dist/providers/zai/monitor-client.d.ts.map +1 -1
  286. package/dist/providers/zai/monitor-client.js +3 -2
  287. package/dist/providers/zai/monitor-client.js.map +1 -1
  288. package/dist/providers/zai/quota.d.ts +4 -0
  289. package/dist/providers/zai/quota.d.ts.map +1 -1
  290. package/dist/providers/zai/quota.js +16 -1
  291. package/dist/providers/zai/quota.js.map +1 -1
  292. package/package.json +1 -1
  293. package/skills/scoutline/SKILL.md +93 -45
  294. package/skills/scoutline/references/advanced.md +12 -10
@@ -41,6 +41,20 @@ const CREDENTIAL_KEYS = new Set([
41
41
  "parallel_api_key",
42
42
  "perplexity_api_key",
43
43
  "jina_api_key",
44
+ "bocha_api_key",
45
+ // #232: the v3 provider env names their credentials modules read —
46
+ // the key-set surface had missed all four (only the [=:] rows and the
47
+ // env scan carried them).
48
+ "linkup_api_key",
49
+ "spider_api_key",
50
+ "ydc_api_key",
51
+ "you_api_key",
52
+ "searchapi_api_key",
53
+ "serpapi_api_key",
54
+ "kagi_api_key",
55
+ "kagi_token",
56
+ "ncbi_api_key",
57
+ "openalex_api_key",
44
58
  ]);
45
59
  const REDACTED = "[REDACTED]";
46
60
  /**
@@ -59,8 +73,9 @@ const REDACTED = "[REDACTED]";
59
73
  * `x-api-key value`).
60
74
  * - Z_AI_API_KEY, ZAI_API_KEY, MINIMAX_API_KEY, TAVILY_API_KEY,
61
75
  * EXA_API_KEY, BRAVE_SEARCH_API_KEY, FIRECRAWL_API_KEY,
62
- * YDC_API_KEY, YOU_API_KEY, LINKUP_API_KEY, SPIDER_API_KEY
63
- * assignments.
76
+ * YDC_API_KEY, YOU_API_KEY, LINKUP_API_KEY, SPIDER_API_KEY,
77
+ * BOCHA_API_KEY, SEARCHAPI_API_KEY, SERPAPI_API_KEY,
78
+ * KAGI_API_KEY, KAGI_TOKEN assignments.
64
79
  * - The literal credentials passed in `extraSecrets` (each value is
65
80
  * replaced wherever it appears; empty strings are skipped).
66
81
  *
@@ -104,7 +119,10 @@ export function redactCredentialString(input, extraSecrets) {
104
119
  // pass, trailing punctuation is stripped before the CREDENTIAL_CHAR check
105
120
  // so prose like "Token subscription," or "token context..." survives.
106
121
  result = result.replace(/(Authorization\s*:\s*)(?:Bearer|Token|ApiKey)\s+[^\s"]{8,}/gi, (_match, prefix) => prefix + REDACTED);
107
- result = result.replace(/(?:Bearer|Token|ApiKey)\s+([^\s"]{8,})/gi, (match, value) => {
122
+ // The lookbehind keeps a bare scheme match from starting mid-identifier
123
+ // (KAGI_TOKEN abc123 must not become KAGI_[REDACTED]); an env-var-name
124
+ // form is handled by the key-specific rows below.
125
+ result = result.replace(/(?<![A-Za-z0-9_])(?:Bearer|Token|ApiKey)\s+([^\s"]{8,})/gi, (match, value) => {
108
126
  // ponytail: quote cut defensive since regex excludes ", upgrade to AST parser if complex grammar needed
109
127
  const quoteIdx = value.indexOf('"');
110
128
  const candidate = (quoteIdx === -1 ? value : value.slice(0, quoteIdx)).replace(/[",.;:)\]]+$/, "");
@@ -118,7 +136,7 @@ export function redactCredentialString(input, extraSecrets) {
118
136
  // protects quoted prose.
119
137
  // ponytail: M4b escape-spanning omitted — RFC 6750 token68 and standard
120
138
  // credentials never embed escaped quotes mid-token; upgrade if exotic token grammar arises.
121
- result = result.replace(/(?:Bearer|Token|ApiKey)\s+\\?"([^"\\\s]{8,})\\?"/gi, (match, value) => {
139
+ result = result.replace(/(?<![A-Za-z0-9_])(?:Bearer|Token|ApiKey)\s+\\?"([^"\\\s]{8,})\\?"/gi, (match, value) => {
122
140
  const candidate = value.replace(/[",.;:)\]]+$/, "");
123
141
  return CREDENTIAL_CHAR.test(candidate) ? REDACTED : match;
124
142
  });
@@ -168,7 +186,7 @@ export function redactCredentialString(input, extraSecrets) {
168
186
  // as the key/value separator. The trailing `\S+` consumes the secret
169
187
  // value; the entire `key + separator + value` span is replaced with
170
188
  // the redaction marker.
171
- result = result.replace(/x-api-key[\s=:]+[^\s,;"'`]+/gi, REDACTED);
189
+ result = result.replace(/(?<![A-Za-z0-9_])x-api-key[\s=:]+[^\s,;"'`]+/gi, REDACTED);
172
190
  // F5 (code-review-baseline): add `:` as a separator so the JSON/YAML/
173
191
  // HTTP-header form `Z_AI_API_KEY: sk-foo` is redacted, not just the
174
192
  // `=` shell form. Bare whitespace is intentionally NOT a separator
@@ -177,35 +195,68 @@ export function redactCredentialString(input, extraSecrets) {
177
195
  // required") and a whitespace separator would over-redact that prose.
178
196
  // The `\s*[=:]\s*` class is a strict superset of the prior `\s*=\s*`.
179
197
  // Value span `[^\s"]+` terminates at `"` to preserve JSON string boundaries.
180
- result = result.replace(/Z_AI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
181
- result = result.replace(/ZAI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
182
- result = result.replace(/MINIMAX_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
183
- result = result.replace(/TAVILY_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
184
- result = result.replace(/EXA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
185
- result = result.replace(/BRAVE_SEARCH_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
186
- result = result.replace(/FIRECRAWL_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
187
- result = result.replace(/PARALLEL_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
188
- result = result.replace(/PERPLEXITY_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
189
- result = result.replace(/JINA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
198
+ result = result.replace(/(?<![A-Za-z0-9_])Z_AI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
199
+ result = result.replace(/(?<![A-Za-z0-9_])ZAI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
200
+ result = result.replace(/(?<![A-Za-z0-9_])MINIMAX_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
201
+ result = result.replace(/(?<![A-Za-z0-9_])TAVILY_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
202
+ result = result.replace(/(?<![A-Za-z0-9_])EXA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
203
+ result = result.replace(/(?<![A-Za-z0-9_])BRAVE_SEARCH_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
204
+ result = result.replace(/(?<![A-Za-z0-9_])FIRECRAWL_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
205
+ result = result.replace(/(?<![A-Za-z0-9_])PARALLEL_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
206
+ result = result.replace(/(?<![A-Za-z0-9_])PERPLEXITY_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
207
+ result = result.replace(/(?<![A-Za-z0-9_])JINA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
190
208
  // v3 providers (#78): incumbent [=:] shape plus the x-api-key
191
209
  // whitespace-separator convention, guarded by the #44 true-credential
192
210
  // bar (8+ chars containing both a letter and a digit) so ordinary
193
211
  // prose naming the variable ("LINKUP_API_KEY is not set") stays intact.
194
212
  // Value span `[^\s"]{8,}` terminates at `"` to preserve JSON string boundaries (#174).
195
- result = result.replace(/YDC_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
196
- result = result.replace(/YOU_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
197
- result = result.replace(/LINKUP_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
198
- result = result.replace(/SPIDER_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
213
+ result = result.replace(/(?<![A-Za-z0-9_])YDC_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
214
+ result = result.replace(/(?<![A-Za-z0-9_])YOU_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
215
+ result = result.replace(/(?<![A-Za-z0-9_])LINKUP_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
216
+ result = result.replace(/(?<![A-Za-z0-9_])SPIDER_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
217
+ result = result.replace(/(?<![A-Za-z0-9_])BOCHA_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
218
+ result = result.replace(/(?<![A-Za-z0-9_])SEARCHAPI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
219
+ result = result.replace(/(?<![A-Za-z0-9_])SERPAPI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
220
+ // Kagi (#215): canonical KAGI_API_KEY plus the legacy KAGI_TOKEN
221
+ // alias accepted by providers/kagi/credentials.ts.
222
+ result = result.replace(/(?<![A-Za-z0-9_])KAGI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
223
+ result = result.replace(/(?<![A-Za-z0-9_])KAGI_TOKEN\s*[=:]\s*[^\s"]+/gi, REDACTED);
224
+ // Science credential env vars (#208): PubMed (NCBI_API_KEY) and
225
+ // OpenAlex (OPENALEX_API_KEY) rate-tier keys are optional but real
226
+ // credentials — same [=:] assignment shape as the Provider keys.
227
+ result = result.replace(/(?<![A-Za-z0-9_])NCBI_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
228
+ result = result.replace(/(?<![A-Za-z0-9_])OPENALEX_API_KEY\s*[=:]\s*[^\s"]+/gi, REDACTED);
199
229
  // #180 gap 2: the lookaheads are scoped to the value token (`[^\s"]*`)
200
230
  // rather than to a bare non-space run. `\S` includes the JSON quote, so
201
231
  // `{"h":"YDC_API_KEY abcdefgh","n":1}` saw the sibling `1` across the
202
232
  // closing quote and redacted a value carrying no digit of its own. The
203
233
  // capture below already terminated at `"` (#174); only the lookaheads
204
234
  // still crossed it.
205
- // #185 review: one guarded pattern, four key names — kept as a loop so
206
- // the lookahead/capture boundary can never drift between rows again.
207
- for (const key of ["YDC_API_KEY", "YOU_API_KEY", "LINKUP_API_KEY", "SPIDER_API_KEY"]) {
208
- result = result.replace(new RegExp(`${key}\\s+(?=[^\\s"]*\\d)(?=[^\\s"]*[A-Za-z])[^\\s"]{8,}`, "gi"), REDACTED);
235
+ // #185 review: one guarded pattern, every provider credential env
236
+ // name — kept as a loop so the lookahead/capture boundary can never
237
+ // drift between rows again. #232 widened the list from nine rows to
238
+ // cover the incumbent providers alongside the v3/searchapi/kagi rows.
239
+ for (const key of [
240
+ "YDC_API_KEY",
241
+ "YOU_API_KEY",
242
+ "LINKUP_API_KEY",
243
+ "SPIDER_API_KEY",
244
+ "BOCHA_API_KEY",
245
+ "SEARCHAPI_API_KEY",
246
+ "SERPAPI_API_KEY",
247
+ "KAGI_API_KEY",
248
+ "KAGI_TOKEN",
249
+ "Z_AI_API_KEY",
250
+ "ZAI_API_KEY",
251
+ "TAVILY_API_KEY",
252
+ "EXA_API_KEY",
253
+ "BRAVE_SEARCH_API_KEY",
254
+ "FIRECRAWL_API_KEY",
255
+ "PARALLEL_API_KEY",
256
+ "PERPLEXITY_API_KEY",
257
+ "JINA_API_KEY",
258
+ ]) {
259
+ result = result.replace(new RegExp(`(?<![A-Za-z0-9_])${key}\\s+(?=[^\\s"]*\\d)(?=[^\\s"]*[A-Za-z])[^\\s"]{8,}`, "gi"), REDACTED);
209
260
  }
210
261
  // Embedded credential substrings inside URLs, e.g.
211
262
  // `https://user:secret@host/path`. Catches both `https://` and
@@ -225,7 +276,7 @@ export function redactCredentialString(input, extraSecrets) {
225
276
  }
226
277
  /**
227
278
  * Normalise the `secrets` argument to a deduplicated array of
228
- * non-empty strings. A `undefined` argument yields an empty list;
279
+ * non-empty strings. Whitespace-only entries are dropped (#222). A `undefined` argument yields an empty list;
229
280
  * a single string yields `[string]`; an array yields the filtered
230
281
  * list.
231
282
  */
@@ -239,6 +290,12 @@ function normalizeSecrets(secrets) {
239
290
  if (typeof item !== "string")
240
291
  continue;
241
292
  if (item.length === 0)
293
+ continue; // empty string is never a token
294
+ // #222: drop-only — a whitespace-only value (e.g. a credential env
295
+ // var set to " ") must not become a whitespace replacement token
296
+ // that mangles any matching gap in output. Never trim-to-match: a
297
+ // secret with meaningful edge spaces matches only its exact literal.
298
+ if (item.trim().length === 0)
242
299
  continue;
243
300
  if (seen.has(item))
244
301
  continue;
@@ -270,8 +327,17 @@ export function configuredSecrets(env = process.env) {
270
327
  // URLs must not reach the always-on journal unredacted.
271
328
  env.LINKUP_API_KEY,
272
329
  env.SPIDER_API_KEY,
330
+ env.BOCHA_API_KEY,
273
331
  env.YDC_API_KEY,
274
332
  env.YOU_API_KEY,
333
+ env.SEARCHAPI_API_KEY,
334
+ env.SERPAPI_API_KEY,
335
+ env.KAGI_API_KEY,
336
+ env.KAGI_TOKEN,
337
+ // #208: science supplier rate-tier credentials ride the same
338
+ // literal-value pass as the Provider credentials.
339
+ env.NCBI_API_KEY,
340
+ env.OPENALEX_API_KEY,
275
341
  ];
276
342
  return normalizeSecrets(candidates.filter((c) => typeof c === "string"));
277
343
  }
@@ -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,28 @@
1
+ /**
2
+ * Shared timeout upper clamp (#214).
3
+ *
4
+ * Node's `setTimeout` treats delays above the 32-bit signed maximum
5
+ * (2,147,483,647 ms ≈ 24.8 days) as an immediate-fire 1 ms timer, so a
6
+ * user-supplied `*_TIMEOUT` env override beyond that bound would silently
7
+ * turn a long timeout into a near-instant one. Every provider client's
8
+ * `*_TIMEOUT` env resolver therefore clamps the parsed value to
9
+ * {@link TIMEOUT_MS_MAX} through this helper — the uniform rule Linkup
10
+ * pioneered inline (`providers/linkup/client.ts`).
11
+ *
12
+ * Invalid input (NaN, zero, negative, non-finite) falls to the caller's
13
+ * provider default, preserving each resolver's pre-#214 fallback
14
+ * behavior. Cross-provider conformance is pinned by
15
+ * `tests/timeout-clamp.test.js` — a client that ships its own ad-hoc
16
+ * unclamped parse fails its row there.
17
+ */
18
+ /** The largest delay `setTimeout` accepts before wrapping to 1 ms. */
19
+ export declare const TIMEOUT_MS_MAX = 2147483647;
20
+ /**
21
+ * Validate and upper-clamp a parsed `*_TIMEOUT` override.
22
+ *
23
+ * @param raw - The parsed env value (`parseInt(..., 10)`)
24
+ * @param defaultMs - The provider default returned for invalid input
25
+ * @returns `raw` clamped to `[1, TIMEOUT_MS_MAX]`, or `defaultMs`
26
+ */
27
+ export declare function clampTimeoutMs(raw: number, defaultMs: number): number;
28
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/lib/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,sEAAsE;AACtE,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAErE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared timeout upper clamp (#214).
3
+ *
4
+ * Node's `setTimeout` treats delays above the 32-bit signed maximum
5
+ * (2,147,483,647 ms ≈ 24.8 days) as an immediate-fire 1 ms timer, so a
6
+ * user-supplied `*_TIMEOUT` env override beyond that bound would silently
7
+ * turn a long timeout into a near-instant one. Every provider client's
8
+ * `*_TIMEOUT` env resolver therefore clamps the parsed value to
9
+ * {@link TIMEOUT_MS_MAX} through this helper — the uniform rule Linkup
10
+ * pioneered inline (`providers/linkup/client.ts`).
11
+ *
12
+ * Invalid input (NaN, zero, negative, non-finite) falls to the caller's
13
+ * provider default, preserving each resolver's pre-#214 fallback
14
+ * behavior. Cross-provider conformance is pinned by
15
+ * `tests/timeout-clamp.test.js` — a client that ships its own ad-hoc
16
+ * unclamped parse fails its row there.
17
+ */
18
+ /** The largest delay `setTimeout` accepts before wrapping to 1 ms. */
19
+ export const TIMEOUT_MS_MAX = 2147483647;
20
+ /**
21
+ * Validate and upper-clamp a parsed `*_TIMEOUT` override.
22
+ *
23
+ * @param raw - The parsed env value (`parseInt(..., 10)`)
24
+ * @param defaultMs - The provider default returned for invalid input
25
+ * @returns `raw` clamped to `[1, TIMEOUT_MS_MAX]`, or `defaultMs`
26
+ */
27
+ export function clampTimeoutMs(raw, defaultMs) {
28
+ return Number.isFinite(raw) && raw > 0 ? Math.min(raw, TIMEOUT_MS_MAX) : defaultMs;
29
+ }
30
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/lib/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,SAAiB;IAC3D,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrF,CAAC"}
package/dist/lib/url.d.ts CHANGED
@@ -34,10 +34,16 @@
34
34
  * `https:///host/p`, `https:/\host/p`, `https:host/p` — collapse to a
35
35
  * single identity without duplicating host text or inventing userinfo.
36
36
  *
37
- * No other normalization in v1: `www.` and apex hosts are genuinely
38
- * different origins and stay distinct; `www.example.com` and
39
- * `example.com` will not dedupe to each other. Adding that is recorded
40
- * as a gate on the canonicalization table.
37
+ * One widening beyond the parser (fusion plan D3, resolving the gate
38
+ * formerly recorded here): the identity KEY collapses the direct www
39
+ * alias of a two-label apex host — `www.example.com` keys as
40
+ * `example.com`. The emitted `url` stays verbatim; only the Map key
41
+ * changes. Deeper subdomains stay distinct by the two-label rule:
42
+ * `www.blog.example.com`, `blog.example.com`, and `www.bbc.co.uk`
43
+ * keep their own keys (deterministic, no public-suffix-list
44
+ * dependency). Single-label remainders (`www.localhost`) do not
45
+ * strip. Origin semantics for every other consumer of these URLs are
46
+ * unchanged — this rule lives in `canonicalUrl` only.
41
47
  */
42
48
  export declare function canonicalUrl(input: string): string;
43
49
  //# sourceMappingURL=url.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAYH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA4HlD"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAYH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqIlD"}
package/dist/lib/url.js CHANGED
@@ -34,10 +34,16 @@
34
34
  * `https:///host/p`, `https:/\host/p`, `https:host/p` — collapse to a
35
35
  * single identity without duplicating host text or inventing userinfo.
36
36
  *
37
- * No other normalization in v1: `www.` and apex hosts are genuinely
38
- * different origins and stay distinct; `www.example.com` and
39
- * `example.com` will not dedupe to each other. Adding that is recorded
40
- * as a gate on the canonicalization table.
37
+ * One widening beyond the parser (fusion plan D3, resolving the gate
38
+ * formerly recorded here): the identity KEY collapses the direct www
39
+ * alias of a two-label apex host — `www.example.com` keys as
40
+ * `example.com`. The emitted `url` stays verbatim; only the Map key
41
+ * changes. Deeper subdomains stay distinct by the two-label rule:
42
+ * `www.blog.example.com`, `blog.example.com`, and `www.bbc.co.uk`
43
+ * keep their own keys (deterministic, no public-suffix-list
44
+ * dependency). Single-label remainders (`www.localhost`) do not
45
+ * strip. Origin semantics for every other consumer of these URLs are
46
+ * unchanged — this rule lives in `canonicalUrl` only.
41
47
  */
42
48
  /**
43
49
  * WHATWG "special" schemes (URL Standard §special scheme): the parser
@@ -75,8 +81,17 @@ export function canonicalUrl(input) {
75
81
  // WHATWG already lowercased the scheme+host and stripped an explicit
76
82
  // default port (`:443` on https, `:80` on http) from `host`, so the
77
83
  // canonical host is `parsed.host` as-is; only non-default ports
78
- // survive the parser.
79
- const host = parsed.host;
84
+ // survive the parser. Sole exception (fusion plan D3): strip a
85
+ // leading `www.` when the remainder is exactly two dot-separated
86
+ // labels — the `www.<sld>.<tld>` form — keeping any explicit
87
+ // non-default port. Three-label remainders (`www.blog.example.com`,
88
+ // `www.bbc.co.uk`) and single-label remainders (`www.localhost`)
89
+ // keep `parsed.host` byte-identically.
90
+ let host = parsed.host;
91
+ const hn = parsed.hostname;
92
+ if (/^www\.[^.\s]+\.[^.\s]+$/.test(hn)) {
93
+ host = hn.slice(4) + (parsed.port ? ":" + parsed.port : "");
94
+ }
80
95
  // Raw userinfo + path, re-sliced from the input between the
81
96
  // authority and the query/fragment. WHATWG normalization (dot-segment
82
97
  // collapsing, userinfo dropping, non-ASCII percent-encoding) is NOT
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import type { ProviderQuotaFetch } from "../types.js";
2
2
  export declare const ARXIV_QUERY_URL = "https://export.arxiv.org/api/query";
3
- /** Injectable transport dependencies (fetch, timers). */
3
+ /** Injectable transport dependencies (fetch, timers, env). */
4
4
  export interface ArxivTransportDeps {
5
5
  readonly fetch?: ProviderQuotaFetch;
6
6
  readonly setTimeout?: typeof setTimeout;
7
7
  readonly clearTimeout?: typeof clearTimeout;
8
+ readonly env?: NodeJS.ProcessEnv;
8
9
  }
10
+ /** `ARXIV_TIMEOUT` override, clamped through the shared seam (#234). */
11
+ export declare function resolveTimeoutMs(env: NodeJS.ProcessEnv): number;
9
12
  /**
10
13
  * arXiv-native query params (API field names). The Adapter maps the
11
14
  * Provider-neutral science requests into these before calling
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/arxiv/client.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKtD,eAAO,MAAM,eAAe,uCAAuC,CAAC;AAIpE,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;CAC7C;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAgED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE,kBAAuB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAqHjB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/arxiv/client.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAMtD,eAAO,MAAM,eAAe,uCAAuC,CAAC;AAIpE,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAG/D;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAgED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE,kBAAuB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAuHjB"}
@@ -20,10 +20,16 @@ import { readBoundedResponseBody, MAX_BUFFERED_RESPONSE_BYTES, } from "../../lib
20
20
  import { parseRetryAfterHintMs, retryHintOptions, } from "../../lib/retry-after.js";
21
21
  import { ApiError, AuthError, NetworkError, QuotaError, TimeoutError, ValidationError, } from "../../lib/errors.js";
22
22
  import { getGlobalFetch } from "../types.js";
23
+ import { clampTimeoutMs } from "../../lib/timeout.js";
23
24
  const { version: VERSION } = pkg;
24
25
  export const ARXIV_QUERY_URL = "https://export.arxiv.org/api/query";
25
26
  const DEFAULT_TIMEOUT_MS = 30000;
26
27
  const USER_AGENT = `scoutline/${VERSION}`;
28
+ /** `ARXIV_TIMEOUT` override, clamped through the shared seam (#234). */
29
+ export function resolveTimeoutMs(env) {
30
+ const raw = parseInt(env.ARXIV_TIMEOUT || String(DEFAULT_TIMEOUT_MS), 10);
31
+ return clampTimeoutMs(raw, DEFAULT_TIMEOUT_MS);
32
+ }
27
33
  /**
28
34
  * Layer 1 — HTTP-status mapping. Runs BEFORE the body is consumed; on
29
35
  * a non-2xx response the body is discarded and a typed error thrown.
@@ -78,6 +84,8 @@ export async function fetchArxivQuery(params, deps = {}, signal) {
78
84
  const f = deps.fetch ?? getGlobalFetch();
79
85
  const setT = deps.setTimeout ?? setTimeout;
80
86
  const clearT = deps.clearTimeout ?? clearTimeout;
87
+ const env = deps.env ?? process.env;
88
+ const timeoutMs = resolveTimeoutMs(env);
81
89
  const url = new URL(ARXIV_QUERY_URL);
82
90
  if (params.search_query !== undefined)
83
91
  url.searchParams.set("search_query", params.search_query);
@@ -98,7 +106,7 @@ export async function fetchArxivQuery(params, deps = {}, signal) {
98
106
  const timeoutId = setT(() => {
99
107
  timedOut = true;
100
108
  controller.abort();
101
- }, DEFAULT_TIMEOUT_MS);
109
+ }, timeoutMs);
102
110
  const abortWithExternal = () => controller.abort();
103
111
  if (signal !== undefined) {
104
112
  if (signal.aborted) {
@@ -116,7 +124,7 @@ export async function fetchArxivQuery(params, deps = {}, signal) {
116
124
  }));
117
125
  if (!res.ok) {
118
126
  await res.body?.cancel().catch(() => { });
119
- throw mapStatusError(res.status, DEFAULT_TIMEOUT_MS, parseRetryAfterHintMs(res.headers));
127
+ throw mapStatusError(res.status, timeoutMs, parseRetryAfterHintMs(res.headers));
120
128
  }
121
129
  const contentLengthHeader = res.headers?.get?.("content-length");
122
130
  if (contentLengthHeader && Number(contentLengthHeader) > MAX_BUFFERED_RESPONSE_BYTES) {
@@ -162,7 +170,7 @@ export async function fetchArxivQuery(params, deps = {}, signal) {
162
170
  }
163
171
  }
164
172
  catch (err) {
165
- throw normalizeTransportError(err, DEFAULT_TIMEOUT_MS, timedOut, signal);
173
+ throw normalizeTransportError(err, timeoutMs, timedOut, signal);
166
174
  }
167
175
  finally {
168
176
  if (signal !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/arxiv/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/arxiv/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG,oCAAoC,CAAC;AACpE,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,UAAU,GAAG,aAAa,OAAO,EAAE,CAAC;AAU1C,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,GAAsB;IACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1E,OAAO,cAAc,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;AACjD,CAAC;AAmBD;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAAc,EAAE,SAAiB,EAAE,MAAe;IACxE,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,UAAU,CACnB,mDAAmD,EACnD,SAAS,EACT,gBAAgB,CAAC,MAAM,CAAC,CACzB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,sBAAsB,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAC9B,KAAc,EACd,SAAiB,EACjB,QAAQ,GAAG,KAAK,EAChB,MAAoB;IAEpB,IACE,KAAK,YAAY,SAAS;QAC1B,KAAK,YAAY,QAAQ;QACzB,KAAK,YAAY,UAAU;QAC3B,KAAK,YAAY,YAAY;QAC7B,KAAK,YAAY,eAAe,EAChC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,IAAI,QAAQ,CACjB,qEAAqE,EACrE,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,QAAQ,CACjB,qEAAqE,EACrE,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,qBAAqB,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,IAAI,GAAuB,EAAE,EAC7B,MAAoB;IAEpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,cAAc,EAAsB,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACjG,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAClF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,qEAAqE;IACrE,6CAA6C;IAC7C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAChB,qEAAqE,EACrE,GAAG,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;QAC1B,QAAQ,GAAG,IAAI,CAAC;QAChB,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,EAAE,SAAS,CAAC,CAAC;IACd,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACnD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE;YACxB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE;YACrC,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAOD,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACzC,MAAM,cAAc,CAClB,GAAG,CAAC,MAAM,EACV,SAAS,EACT,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CACnC,CAAC;QACJ,CAAC;QACD,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC;QACjE,IAAI,mBAAmB,IAAI,MAAM,CAAC,mBAAmB,CAAC,GAAG,2BAA2B,EAAE,CAAC;YACrF,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACzC,MAAM,IAAI,QAAQ,CAChB,sDAAsD,mBAAmB,uCAAuC,EAChH,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC;gBACR,IAAI,CAAC;oBACH,GAAG,GAAG,MAAM,uBAAuB,CACjC,GAAG,CAAC,IAAI,EACR,2BAA2B,EAC3B,gBAAgB,CACjB,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;wBACnC,MAAM,IAAI,QAAQ,CAChB,sGAAsG,EACtG,GAAG,CACJ,CAAC;oBACJ,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACnC,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kEAAkE;YAClE,kEAAkE;YAClE,kEAAkE;YAClE,mEAAmE;YACnE,qCAAqC;YACrC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACjD,MAAM,IAAI,QAAQ,CAChB,qEAAqE,EACrE,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,IAAI,QAAQ,CAChB,qEAAqE,EACrE,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,GAAG,CAAC;YACzC,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,YAAY,eAAe;gBAAE,MAAM,GAAG,CAAC;YACzE,MAAM,IAAI,QAAQ,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Bocha AI Provider Adapter.
3
+ *
4
+ * Implements Search (and Diagnostics in T4) for the Bocha AI API
5
+ * (POST /v1/web-search).
6
+ *
7
+ * The wire response is a Bing-compatible wrapped envelope: results
8
+ * live at `data.webPages.value[]` — never the JSON root (SCHEMA.md).
9
+ * Application-level envelope codes are checked here: success only when
10
+ * HTTP 2xx AND (`code` undefined or `code === 200`); any other code is
11
+ * an error with a curated message (the raw `msg` never surfaces).
12
+ *
13
+ * Field mapping:
14
+ * value[].name -> title
15
+ * value[].url -> url (rows without url are dropped)
16
+ * value[].summary|snippet -> summary (summary preferred)
17
+ * value[].dateLastCrawled -> date
18
+ * value[].siteName -> source ("bocha (<siteName>|web)")
19
+ *
20
+ * Control mapping (SearchControls → wire body):
21
+ * domain -> `site:<domain> ` query prefix
22
+ * recency -> freshness (Scoutline enum passes through 1:1)
23
+ * contentSize -> summary: true (always pinned on the body)
24
+ * topic -> appended to query via applySearchTopic
25
+ * type -> REJECTED (UnsupportedOptionError)
26
+ * location -> REJECTED (UnsupportedOptionError)
27
+ */
28
+ import type { ProviderAdapter, ProviderContext, ProviderDescriptor, ProviderId } from "../types.js";
29
+ import type { SearchCapability } from "../../capabilities/search.js";
30
+ import type { DiagnosticsCapability } from "../../capabilities/diagnostics.js";
31
+ import { type BochaTransportDeps } from "./client.js";
32
+ export interface BochaAdapterDependencies {
33
+ readonly transport?: BochaTransportDeps;
34
+ }
35
+ export declare class BochaAdapter implements ProviderAdapter {
36
+ private readonly context;
37
+ readonly id: ProviderId;
38
+ readonly search: SearchCapability;
39
+ readonly diagnostics: DiagnosticsCapability;
40
+ constructor(context: ProviderContext, deps?: BochaAdapterDependencies);
41
+ }
42
+ export declare function createBochaDescriptor(deps?: BochaAdapterDependencies): ProviderDescriptor;
43
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/providers/bocha/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAc/E,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAoBrB,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAsED,qBAAa,YAAa,YAAW,eAAe;IAMhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAqB;IAC5C,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAE5C,YACmB,OAAO,EAAE,eAAe,EACzC,IAAI,GAAE,wBAA6B,EA+EpC;CACF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,wBAA6B,GAAG,kBAAkB,CAU7F"}