dsh-web-search-pro 0.2.0 → 0.2.3

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 (266) hide show
  1. package/CHANGELOG.md +179 -0
  2. package/README.md +197 -32
  3. package/assets/skills/dsh-web-search-pro/SKILL.md +14 -13
  4. package/assets/skills/dsh-web-search-pro/references/config.md +36 -0
  5. package/assets/skills/dsh-web-search-pro/references/sources.md +19 -4
  6. package/assets/skills/dsh-web-search-pro/references/troubleshooting.md +3 -1
  7. package/catalog/sources.v1.json +22 -12
  8. package/lib/actions/approval.js +50 -1
  9. package/lib/actions/approval.js.map +1 -1
  10. package/lib/actions/config.js +274 -0
  11. package/lib/actions/config.js.map +1 -0
  12. package/lib/actions/errors.js +8 -1
  13. package/lib/actions/errors.js.map +1 -1
  14. package/lib/actions/format.js +10 -0
  15. package/lib/actions/format.js.map +1 -1
  16. package/lib/actions/index-view.js +2 -2
  17. package/lib/actions/index-view.js.map +1 -1
  18. package/lib/actions/read.js +7 -3
  19. package/lib/actions/read.js.map +1 -1
  20. package/lib/actions/registry.js +3 -1
  21. package/lib/actions/registry.js.map +1 -1
  22. package/lib/actions/run.js +2 -2
  23. package/lib/actions/run.js.map +1 -1
  24. package/lib/actions/schema.js +18 -0
  25. package/lib/actions/schema.js.map +1 -1
  26. package/lib/actions/search.js +12 -6
  27. package/lib/actions/search.js.map +1 -1
  28. package/lib/actions/sources.js +116 -41
  29. package/lib/actions/sources.js.map +1 -1
  30. package/lib/actions/types.js +19 -1
  31. package/lib/actions/types.js.map +1 -1
  32. package/lib/browser-access.js +25 -0
  33. package/lib/browser-access.js.map +1 -1
  34. package/lib/catalog/recommend.js +11 -3
  35. package/lib/catalog/recommend.js.map +1 -1
  36. package/lib/catalog/schema.js +3 -1
  37. package/lib/catalog/schema.js.map +1 -1
  38. package/lib/cli/builtin-specs.js +341 -0
  39. package/lib/cli/builtin-specs.js.map +1 -0
  40. package/lib/cli/chain.js +193 -0
  41. package/lib/cli/chain.js.map +1 -0
  42. package/lib/cli/chains-spec.js +118 -0
  43. package/lib/cli/chains-spec.js.map +1 -0
  44. package/lib/cli/engine.js +99 -0
  45. package/lib/cli/engine.js.map +1 -0
  46. package/lib/cli/opencli-sites.js +83 -0
  47. package/lib/cli/opencli-sites.js.map +1 -0
  48. package/lib/cli/opencli.js +153 -0
  49. package/lib/cli/opencli.js.map +1 -0
  50. package/lib/cli/probe.js +128 -0
  51. package/lib/cli/probe.js.map +1 -0
  52. package/lib/cli/runner.js +564 -0
  53. package/lib/cli/runner.js.map +1 -0
  54. package/lib/cli/spec.js +496 -0
  55. package/lib/cli/spec.js.map +1 -0
  56. package/lib/cli/time-text.js +79 -0
  57. package/lib/cli/time-text.js.map +1 -0
  58. package/lib/cli/trial.js +57 -0
  59. package/lib/cli/trial.js.map +1 -0
  60. package/lib/client/SettingsCard.js +14 -32
  61. package/lib/client/SettingsCard.js.map +1 -1
  62. package/lib/client/agent-mark.js +27 -0
  63. package/lib/client/agent-mark.js.map +1 -0
  64. package/lib/client/card-frame.js +118 -0
  65. package/lib/client/card-frame.js.map +1 -0
  66. package/lib/client/cli-form.js +257 -0
  67. package/lib/client/cli-form.js.map +1 -0
  68. package/lib/client/field-docs.js +130 -0
  69. package/lib/client/field-docs.js.map +1 -0
  70. package/lib/client/field-keys.js +81 -0
  71. package/lib/client/field-keys.js.map +1 -0
  72. package/lib/client/field-rows.js +71 -0
  73. package/lib/client/field-rows.js.map +1 -0
  74. package/lib/client/fill.js +3 -0
  75. package/lib/client/fill.js.map +1 -0
  76. package/lib/client/form-specs.js +15 -1
  77. package/lib/client/form-specs.js.map +1 -1
  78. package/lib/client/form.js +296 -27
  79. package/lib/client/form.js.map +1 -1
  80. package/lib/client/group-advanced.js +23 -0
  81. package/lib/client/group-advanced.js.map +1 -0
  82. package/lib/client/group-agent.js +28 -0
  83. package/lib/client/group-agent.js.map +1 -0
  84. package/lib/client/group-cli.js +136 -0
  85. package/lib/client/group-cli.js.map +1 -0
  86. package/lib/client/group-common.js +29 -0
  87. package/lib/client/group-common.js.map +1 -0
  88. package/lib/client/group-judge.js +67 -0
  89. package/lib/client/group-judge.js.map +1 -0
  90. package/lib/client/group-order.js +201 -0
  91. package/lib/client/group-order.js.map +1 -0
  92. package/lib/client/group-runtime.js +33 -0
  93. package/lib/client/group-runtime.js.map +1 -0
  94. package/lib/client/group-sources.js +83 -0
  95. package/lib/client/group-sources.js.map +1 -0
  96. package/lib/client/groups-basic.js +36 -0
  97. package/lib/client/groups-basic.js.map +1 -0
  98. package/lib/client/index.js.map +1 -1
  99. package/lib/client/json-list.js +50 -0
  100. package/lib/client/json-list.js.map +1 -0
  101. package/lib/client/locales.js +666 -215
  102. package/lib/client/locales.js.map +1 -1
  103. package/lib/client/order.js +192 -0
  104. package/lib/client/order.js.map +1 -0
  105. package/lib/client/overlay-ops.js +46 -0
  106. package/lib/client/overlay-ops.js.map +1 -0
  107. package/lib/client/sources-table.js +1 -0
  108. package/lib/client/sources-table.js.map +1 -1
  109. package/lib/client/styles.js +74 -47
  110. package/lib/client/styles.js.map +1 -1
  111. package/lib/client/text-view.js +98 -0
  112. package/lib/client/text-view.js.map +1 -0
  113. package/lib/client/ui-kit.js +120 -0
  114. package/lib/client/ui-kit.js.map +1 -0
  115. package/lib/client/validators.js +22 -0
  116. package/lib/client/validators.js.map +1 -1
  117. package/lib/client.js +9151 -1987
  118. package/lib/client.js.map +1 -1
  119. package/lib/config-fillers.js +53 -0
  120. package/lib/config-fillers.js.map +1 -0
  121. package/lib/config-groups.js +49 -0
  122. package/lib/config-groups.js.map +1 -0
  123. package/lib/config.js +87 -107
  124. package/lib/config.js.map +1 -1
  125. package/lib/default-chain.js +66 -0
  126. package/lib/default-chain.js.map +1 -0
  127. package/lib/deps.js +109 -102
  128. package/lib/deps.js.map +1 -1
  129. package/lib/engine-error.js +19 -0
  130. package/lib/engine-error.js.map +1 -0
  131. package/lib/engines.js +32 -115
  132. package/lib/engines.js.map +1 -1
  133. package/lib/fetch.js +23 -4
  134. package/lib/fetch.js.map +1 -1
  135. package/lib/index.js +30 -5
  136. package/lib/index.js.map +1 -1
  137. package/lib/overlay-types.js +88 -0
  138. package/lib/overlay-types.js.map +1 -0
  139. package/lib/overlay.js +683 -0
  140. package/lib/overlay.js.map +1 -0
  141. package/lib/pipeline/candidates.js +27 -1
  142. package/lib/pipeline/candidates.js.map +1 -1
  143. package/lib/pipeline/compile.js +63 -0
  144. package/lib/pipeline/compile.js.map +1 -1
  145. package/lib/pipeline/confidence.js +64 -0
  146. package/lib/pipeline/confidence.js.map +1 -0
  147. package/lib/pipeline/fusion.js +50 -3
  148. package/lib/pipeline/fusion.js.map +1 -1
  149. package/lib/pipeline/plan.js +2 -2
  150. package/lib/pipeline/plan.js.map +1 -1
  151. package/lib/pipeline/render.js +20 -2
  152. package/lib/pipeline/render.js.map +1 -1
  153. package/lib/pipeline/run.js +21 -7
  154. package/lib/pipeline/run.js.map +1 -1
  155. package/lib/pipeline/sources-spec.js +19 -3
  156. package/lib/pipeline/sources-spec.js.map +1 -1
  157. package/lib/providers/builtin.js +13 -14
  158. package/lib/providers/builtin.js.map +1 -1
  159. package/lib/providers/deepseek.js +348 -0
  160. package/lib/providers/deepseek.js.map +1 -0
  161. package/lib/providers/http.js.map +1 -1
  162. package/lib/providers/keyed-meta.js +7 -0
  163. package/lib/providers/keyed-meta.js.map +1 -1
  164. package/lib/providers/platforms.js +118 -58
  165. package/lib/providers/platforms.js.map +1 -1
  166. package/lib/providers/registry.js.map +1 -1
  167. package/lib/restart.js +47 -0
  168. package/lib/restart.js.map +1 -0
  169. package/lib/router.js +203 -27
  170. package/lib/router.js.map +1 -1
  171. package/lib/rpc-types.js +15 -0
  172. package/lib/rpc-types.js.map +1 -0
  173. package/lib/rpc.js +85 -0
  174. package/lib/rpc.js.map +1 -0
  175. package/lib/tools.js +10 -4
  176. package/lib/tools.js.map +1 -1
  177. package/lib/types/actions/approval.d.ts +11 -0
  178. package/lib/types/actions/config.d.ts +54 -0
  179. package/lib/types/actions/format.d.ts +9 -2
  180. package/lib/types/actions/run.d.ts +1 -0
  181. package/lib/types/actions/schema.d.ts +7 -1
  182. package/lib/types/actions/sources.d.ts +29 -3
  183. package/lib/types/actions/types.d.ts +28 -2
  184. package/lib/types/browser-access.d.ts +17 -0
  185. package/lib/types/catalog/recommend.d.ts +4 -0
  186. package/lib/types/catalog/schema.d.ts +2 -0
  187. package/lib/types/cli/builtin-specs.d.ts +38 -0
  188. package/lib/types/cli/chain.d.ts +83 -0
  189. package/lib/types/cli/chains-spec.d.ts +48 -0
  190. package/lib/types/cli/engine.d.ts +50 -0
  191. package/lib/types/cli/opencli-sites.d.ts +24 -0
  192. package/lib/types/cli/opencli.d.ts +77 -0
  193. package/lib/types/cli/probe.d.ts +53 -0
  194. package/lib/types/cli/runner.d.ts +126 -0
  195. package/lib/types/cli/spec.d.ts +269 -0
  196. package/lib/types/cli/time-text.d.ts +12 -0
  197. package/lib/types/cli/trial.d.ts +19 -0
  198. package/lib/types/client/SettingsCard.d.ts +17 -1
  199. package/lib/types/client/agent-mark.d.ts +22 -0
  200. package/lib/types/client/card-frame.d.ts +35 -0
  201. package/lib/types/client/cli-form.d.ts +97 -0
  202. package/lib/types/client/field-docs.d.ts +15 -0
  203. package/lib/types/client/field-keys.d.ts +41 -0
  204. package/lib/types/client/field-rows.d.ts +70 -0
  205. package/lib/types/client/fill.d.ts +2 -0
  206. package/lib/types/client/form-specs.d.ts +12 -3
  207. package/lib/types/client/form.d.ts +79 -1
  208. package/lib/types/client/group-advanced.d.ts +9 -0
  209. package/lib/types/client/group-agent.d.ts +20 -0
  210. package/lib/types/client/group-cli.d.ts +52 -0
  211. package/lib/types/client/group-common.d.ts +12 -0
  212. package/lib/types/client/group-judge.d.ts +17 -0
  213. package/lib/types/client/group-order.d.ts +26 -0
  214. package/lib/types/client/group-runtime.d.ts +15 -0
  215. package/lib/types/client/group-sources.d.ts +46 -0
  216. package/lib/types/client/groups-basic.d.ts +18 -0
  217. package/lib/types/client/index.d.ts +8 -0
  218. package/lib/types/client/json-list.d.ts +21 -0
  219. package/lib/types/client/locales.d.ts +1079 -196
  220. package/lib/types/client/order.d.ts +102 -0
  221. package/lib/types/client/overlay-ops.d.ts +37 -0
  222. package/lib/types/client/styles.d.ts +56 -41
  223. package/lib/types/client/text-view.d.ts +22 -0
  224. package/lib/types/client/ui-kit.d.ts +200 -0
  225. package/lib/types/client/validators.d.ts +6 -0
  226. package/lib/types/config-fillers.d.ts +9 -0
  227. package/lib/types/config-groups.d.ts +23 -0
  228. package/lib/types/config.d.ts +265 -216
  229. package/lib/types/default-chain.d.ts +63 -0
  230. package/lib/types/deps.d.ts +25 -23
  231. package/lib/types/engine-error.d.ts +12 -0
  232. package/lib/types/engines.d.ts +45 -10
  233. package/lib/types/fetch.d.ts +12 -3
  234. package/lib/types/index.d.ts +164 -146
  235. package/lib/types/overlay-types.d.ts +98 -0
  236. package/lib/types/overlay.d.ts +141 -0
  237. package/lib/types/pipeline/candidates.d.ts +19 -0
  238. package/lib/types/pipeline/compile.d.ts +11 -0
  239. package/lib/types/pipeline/confidence.d.ts +35 -0
  240. package/lib/types/pipeline/fusion.d.ts +23 -1
  241. package/lib/types/pipeline/render.d.ts +16 -0
  242. package/lib/types/pipeline/run.d.ts +3 -1
  243. package/lib/types/pipeline/sources-spec.d.ts +5 -2
  244. package/lib/types/pipeline/types.d.ts +37 -0
  245. package/lib/types/providers/deepseek.d.ts +130 -0
  246. package/lib/types/providers/http.d.ts +2 -1
  247. package/lib/types/providers/keyed-meta.d.ts +5 -0
  248. package/lib/types/providers/platforms.d.ts +15 -3
  249. package/lib/types/providers/registry.d.ts +10 -0
  250. package/lib/types/restart.d.ts +52 -0
  251. package/lib/types/router.d.ts +69 -9
  252. package/lib/types/rpc-types.d.ts +79 -0
  253. package/lib/types/rpc.d.ts +41 -0
  254. package/lib/types/tools.d.ts +6 -0
  255. package/lib/types/util.d.ts +16 -1
  256. package/lib/util.js +17 -4
  257. package/lib/util.js.map +1 -1
  258. package/package.json +51 -43
  259. package/scripts/check-client-bundle.mjs +1 -1
  260. package/scripts/cli-login-check.mjs +214 -0
  261. package/lib/client/RubricEditor.js +0 -47
  262. package/lib/client/RubricEditor.js.map +0 -1
  263. package/lib/client/fields.js +0 -31
  264. package/lib/client/fields.js.map +0 -1
  265. package/lib/types/client/RubricEditor.d.ts +0 -6
  266. package/lib/types/client/fields.d.ts +0 -65
@@ -104,6 +104,12 @@ export interface SourcesConfig {
104
104
  priority?: string[];
105
105
  /** Source ids the automatic plan and the configured `engines` list never use (an explicit `engines` / `platform` in a call still can). */
106
106
  disabled?: string[];
107
+ /**
108
+ * Confidence (0..1) per source id, including the platform backends of a chain (`xhs`, `browser-search`, `custom-cli:<id>`).
109
+ * Built-in sources have 1; a custom CLI has the `confidence` of its spec (default 0.5) unless it is set here. It scales the
110
+ * source's weight in rank fusion a little (pipeline/confidence.ts) and is printed with its results; 1 changes nothing.
111
+ */
112
+ confidence?: Record<string, number>;
107
113
  /**
108
114
  * Optional request caps per source id, counted in the usage ledger (persistent, atomic): `total` over all time, `daily` per
109
115
  * calendar day (time zone of `evidence.budget`). No source has a cap unless it is set here. An exhausted source is skipped
@@ -113,50 +119,38 @@ export interface SourcesConfig {
113
119
  budget?: Record<string, SourceBudgetInput>;
114
120
  }
115
121
  export interface Config {
116
- /** SQLite database path; defaults to $DSH_HOME/data/web-search-pro/store.db */
117
- dbPath?: string;
118
- /** Cache freshness window in seconds. */
119
- ttlSeconds: number;
120
- /** In-process LRU entry cap (hot queries resolve without touching SQLite). */
121
- memoryCacheEntries: number;
122
- /** Reciprocal Rank Fusion constant for multi-engine merging. */
123
- rrfConstant: number;
124
- /**
125
- * Recency bonus, as a fraction (0..1) of ONE TOP-RANK STEP on the normalised
126
- * fusion scale (pipeline/fusion.ts): added once per URL, so even at 1 a fresh
127
- * result gains about one rank position, and at the default it is a tie-breaker.
128
- */
129
- freshnessBoost: number;
130
- /** Days over which the recency bonus decays to zero. */
131
- freshnessDays: number;
132
- /**
133
- * Authority-domain bonus, same scale and once-per-URL rule as `freshnessBoost`:
134
- * it cannot lift a rank-10 result over a rank-1 result of the same engine.
135
- */
136
- authorityBoost: number;
137
- /** Extra authority domains (beyond the built-in .edu/.gov/.org and the curated list). */
138
- authorityDomains: string[];
139
122
  /** Default cap on returned sources per search. */
140
123
  searchMaxResults: number;
141
- /**
142
- * Default output cap (characters) of one `read.fetch` call. Longer pages are cut here and
143
- * continued with `offset`; the ctx.web fetch provider (which cannot be told a size) uses twice this.
144
- */
145
- fetchDefaultChars: number;
146
- /** `read.contents`: output cap per URL (characters). */
147
- exaContentsPerUrlChars: number;
148
- /** `read.contents`: output cap over all URLs of one call (characters); shared fairly between them. */
149
- exaContentsTotalChars: number;
124
+ /** Query all requested engines in parallel and merge. */
125
+ parallelEngines: boolean;
150
126
  /** Tool surface: `indexed` (default) keeps only web_index / web_call in context; `flat` registers one tool per action. Applied at startup. */
151
127
  toolSurface?: ToolSurface;
152
- /** Cooperative per-call timeout budget in ms. */
153
- timeoutMs: number;
154
128
  /** Trust Clash/TUN fake-IP DNS answers (198.18/15, fdfe:dcba:9876::/64, 2001:2::/48) while retaining all other SSRF checks. */
155
129
  allowProxyFakeIp: boolean;
130
+ /**
131
+ * Let `read.fetch` use the DeepSeek Fetch API ($0.75 per 1,000 successful requests) as a backend, after the free ones and before the
132
+ * browser, in `mode: auto`, and accept `mode: deepseek`. Uses the same key as DeepSeek Search (`keyedSources.deepseek`). Off by default: it spends money.
133
+ */
134
+ deepseekFetch: boolean;
156
135
  /** Ordered engine list for search.run. */
157
136
  engines: string[];
158
- /** Query all requested engines in parallel and merge. */
159
- parallelEngines: boolean;
137
+ /** Source preferences and request budgets (dev-plan M11a). */
138
+ sources?: SourcesConfig;
139
+ /**
140
+ * Ordered backend chain per platform (dev-plan M12): backend ids such as `xhs`, `opencli` (standalone OpenCLI), `browser-opencli`
141
+ * (dsh-browser), `browser-search`, `rest`, `gh`, `custom-cli:<id>`. A platform not listed uses its default chain.
142
+ */
143
+ platformBackends?: Record<string, string[]>;
144
+ /**
145
+ * Keyed search sources by route id (`tavily`, `brave`, `linkup`, `serper`, `metaso`, `zhipu`, `baidu-qianfan`): the key literal,
146
+ * the credentials ref / environment variable name (default e.g. TAVILY_API_KEY), and an optional endpoint base override.
147
+ * A source without a key is `credential: missing` and not executable.
148
+ */
149
+ keyedSources?: Record<string, {
150
+ apiKey?: string;
151
+ apiKeyEnv?: string;
152
+ baseUrl?: string;
153
+ }>;
160
154
  /** Exa API key (falls back to $EXA_API_KEY / credentials ref). */
161
155
  exaApiKey?: string;
162
156
  /** Credential/env reference for the Exa key; defaults to EXA_API_KEY. */
@@ -173,36 +167,50 @@ export interface Config {
173
167
  bochaBaseUrl?: string;
174
168
  /** Ask Bocha for its longer per-page summary (default true). */
175
169
  bochaSummary?: boolean;
170
+ /** GitHub API token for the REST search engines (falls back to $GITHUB_TOKEN / $GH_TOKEN / credentials ref). */
171
+ githubToken?: string;
172
+ /** Credential/env reference for the GitHub token; defaults to GITHUB_TOKEN. */
173
+ githubTokenEnv?: string;
176
174
  /** Self-hosted SearXNG instance URL (JSON format enabled); the `searxng` engine is available only when set. No public instance is built in. */
177
175
  searxngUrl?: string;
178
176
  /** Contact address put in the User-Agent of OpenAlex requests (etiquette; optional). */
179
177
  openalexMailto?: string;
178
+ /** User-defined CLI adapter specs by id (validated like the built-in ones; invalid entries are ignored with a diagnostic in sources.status). */
179
+ cliAdapters?: Record<string, Record<string, unknown>>;
180
+ /** Evidence pipeline (S6 scoring). */
181
+ evidence?: Partial<EvidenceConfig>;
180
182
  /**
181
- * Keyed search sources by route id (`tavily`, `brave`, `linkup`, `serper`, `metaso`, `zhipu`, `baidu-qianfan`): the key literal,
182
- * the credentials ref / environment variable name (default e.g. TAVILY_API_KEY), and an optional endpoint base override.
183
- * A source without a key is `credential: missing` and not executable.
183
+ * Default output cap (characters) of one `read.fetch` call. Longer pages are cut here and
184
+ * continued with `offset`; the ctx.web fetch provider (which cannot be told a size) uses twice this.
184
185
  */
185
- keyedSources?: Record<string, {
186
- apiKey?: string;
187
- apiKeyEnv?: string;
188
- baseUrl?: string;
189
- }>;
190
- /** GitHub API token for the REST search engines (falls back to $GITHUB_TOKEN / $GH_TOKEN / credentials ref). */
191
- githubToken?: string;
192
- /** Credential/env reference for the GitHub token; defaults to GITHUB_TOKEN. */
193
- githubTokenEnv?: string;
186
+ fetchDefaultChars: number;
187
+ /** `read.contents`: output cap per URL (characters). */
188
+ exaContentsPerUrlChars: number;
189
+ /** `read.contents`: output cap over all URLs of one call (characters); shared fairly between them. */
190
+ exaContentsTotalChars: number;
194
191
  /** Allow CLI backends (bili / yt-dlp / opencli / agent-reach). */
195
192
  enableCliBackends: boolean;
196
193
  /** Allow opencli browser-session backends. */
197
194
  opencliEnabled: boolean;
198
195
  /** Allow agent-reach backends. */
199
196
  agentReachEnabled: boolean;
200
- /** Provider id registered into ctx.web for the built-in web_search tool. */
201
- providerId: string;
202
- /** Register the ctx.web provider (set DSH_WEB_SEARCH_PROVIDER to use it). */
203
- registerProvider: boolean;
204
- /** ctx.web provider route: evidence pack inside the built-in web_search (only when this plugin is the selected provider). */
205
- provider?: Partial<ProviderSettings>;
197
+ /** twitter-cli `auth_token` cookie (falls back to the credentials ref / $TWITTER_AUTH_TOKEN). Handed to the twitter command only through its environment. */
198
+ twitterAuthToken?: string;
199
+ /** Credential/env reference for the twitter auth token; defaults to TWITTER_AUTH_TOKEN. */
200
+ twitterAuthTokenEnv?: string;
201
+ /** twitter-cli `ct0` cookie (falls back to the credentials ref / $TWITTER_CT0). */
202
+ twitterCt0?: string;
203
+ /** Credential/env reference for the twitter ct0 cookie; defaults to TWITTER_CT0. */
204
+ twitterCt0Env?: string;
205
+ /** Snapshot options. The browser runtime itself (channel/headless/storageStatePath) is provided by the dsh-browser plugin via the `browser` service. */
206
+ playwright: {
207
+ /** Gate the playwright fallback backend in read.fetch. */
208
+ enabled: boolean;
209
+ /** Directory for read.snapshot artifacts; defaults to <dbDir>/snapshots. */
210
+ snapshotDir?: string;
211
+ };
212
+ /** User-defined custom platform search: url template + selectors + optional cookie. */
213
+ customPlatforms?: Record<string, CustomPlatformSpec>;
206
214
  /** Per-platform search-page selector overrides (item/title/link/text). Overrides built-in specs. */
207
215
  platformRules?: Record<string, {
208
216
  item: string;
@@ -210,119 +218,54 @@ export interface Config {
210
218
  link: string;
211
219
  text?: string;
212
220
  }>;
213
- /** User-defined custom platform search: url template + selectors + optional cookie. */
214
- customPlatforms?: Record<string, CustomPlatformSpec>;
215
221
  /** Per-platform binding to domain-scoped dsh-browser auth/rule profiles. */
216
222
  browserBindings?: Record<string, BrowserBinding>;
217
- /** Snapshot options. The browser runtime itself (channel/headless/storageStatePath) is provided by the dsh-browser plugin via the `browser` service. */
218
- playwright: {
219
- /** Gate the playwright fallback backend in read.fetch. */
220
- enabled: boolean;
221
- /** Directory for read.snapshot artifacts; defaults to <dbDir>/snapshots. */
222
- snapshotDir?: string;
223
- };
224
- /** Source preferences and request budgets (dev-plan M11a). */
225
- sources?: SourcesConfig;
226
- /** Evidence pipeline (S6 scoring). */
227
- evidence?: Partial<EvidenceConfig>;
223
+ /** Provider id registered into ctx.web for the built-in web_search tool. */
224
+ providerId: string;
225
+ /** Register the ctx.web provider (set DSH_WEB_SEARCH_PROVIDER to use it). */
226
+ registerProvider: boolean;
227
+ /** ctx.web provider route: evidence pack inside the built-in web_search (only when this plugin is the selected provider). */
228
+ provider?: Partial<ProviderSettings>;
229
+ /** Cooperative per-call timeout budget in ms. */
230
+ timeoutMs: number;
231
+ /** Cache freshness window in seconds. */
232
+ ttlSeconds: number;
233
+ /** In-process LRU entry cap (hot queries resolve without touching SQLite). */
234
+ memoryCacheEntries: number;
235
+ /** Reciprocal Rank Fusion constant for multi-engine merging. */
236
+ rrfConstant: number;
237
+ /**
238
+ * Recency bonus, as a fraction (0..1) of ONE TOP-RANK STEP on the normalised
239
+ * fusion scale (pipeline/fusion.ts): added once per URL, so even at 1 a fresh
240
+ * result gains about one rank position, and at the default it is a tie-breaker.
241
+ */
242
+ freshnessBoost: number;
243
+ /** Days over which the recency bonus decays to zero. */
244
+ freshnessDays: number;
245
+ /**
246
+ * Authority-domain bonus, same scale and once-per-URL rule as `freshnessBoost`:
247
+ * it cannot lift a rank-10 result over a rank-1 result of the same engine.
248
+ */
249
+ authorityBoost: number;
250
+ /** Extra authority domains (beyond the built-in .edu/.gov/.org and the curated list). */
251
+ authorityDomains: string[];
252
+ /** SQLite database path; defaults to $DSH_HOME/data/web-search-pro/store.db */
253
+ dbPath?: string;
228
254
  verbose: boolean;
229
255
  }
256
+ export { DEFAULT_ENGINES };
257
+ import { DEFAULT_ENGINES } from './default-chain.ts';
230
258
  export declare const Config: z<Schemastery.ObjectS<NoInfer<{
231
- dbPath: z<string, string, "volatile">;
232
- toolSurface: z<string, string, "volatile-defined">;
233
- ttlSeconds: z<number, number, "volatile-defined">;
234
- memoryCacheEntries: z<number, number, "volatile-defined">;
235
- rrfConstant: z<number, number, "volatile-defined">;
236
- freshnessBoost: z<number, number, "volatile-defined">;
237
- freshnessDays: z<number, number, "volatile-defined">;
238
- authorityBoost: z<number, number, "volatile-defined">;
239
- authorityDomains: z<NoInfer<string[]>, NoInfer<string[]>, "volatile-defined">;
240
259
  searchMaxResults: z<number, number, "volatile-defined">;
241
- fetchDefaultChars: z<number, number, "volatile-defined">;
242
- exaContentsPerUrlChars: z<number, number, "volatile-defined">;
243
- exaContentsTotalChars: z<number, number, "volatile-defined">;
244
- timeoutMs: z<number, number, "volatile-defined">;
260
+ parallelEngines: z<boolean, boolean, "volatile-defined">;
261
+ toolSurface: z<string, string, "volatile-defined">;
245
262
  allowProxyFakeIp: z<boolean, boolean, "volatile-defined">;
263
+ deepseekFetch: z<boolean, boolean, "volatile-defined">;
246
264
  engines: z<NoInfer<string[]>, NoInfer<string[]>, "volatile-defined">;
247
- parallelEngines: z<boolean, boolean, "volatile-defined">;
248
- exaApiKey: z<string, string, "volatile">;
249
- exaApiKeyEnv: z<string, string, "volatile-defined">;
250
- jinaApiKey: z<string, string, "volatile">;
251
- jinaApiKeyEnv: z<string, string, "volatile-defined">;
252
- bochaApiKey: z<string, string, "volatile">;
253
- bochaApiKeyEnv: z<string, string, "volatile-defined">;
254
- bochaBaseUrl: z<string, string, "volatile-defined">;
255
- bochaSummary: z<boolean, boolean, "volatile-defined">;
256
- searxngUrl: z<string, string, "volatile">;
257
- openalexMailto: z<string, string, "volatile">;
258
- keyedSources: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
259
- apiKey?: string | null | undefined;
260
- apiKeyEnv?: string | null | undefined;
261
- baseUrl?: string | null | undefined;
262
- } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
263
- apiKey: z<string, string, "plain">;
264
- apiKeyEnv: z<string, string, "plain">;
265
- baseUrl: z<string, string, "plain">;
266
- }>>, string>>, "volatile">;
267
- githubToken: z<string, string, "volatile">;
268
- githubTokenEnv: z<string, string, "volatile-defined">;
269
- enableCliBackends: z<boolean, boolean, "volatile-defined">;
270
- opencliEnabled: z<boolean, boolean, "volatile-defined">;
271
- agentReachEnabled: z<boolean, boolean, "volatile-defined">;
272
- providerId: z<string, string, "volatile-defined">;
273
- registerProvider: z<boolean, boolean, "volatile-defined">;
274
- provider: z<Schemastery.ObjectS<NoInfer<{
275
- evidence: z<string, string, "volatile-defined">;
276
- deadlineMs: z<number, number, "volatile-defined">;
277
- }>>, Schemastery.ObjectT<NoInfer<{
278
- evidence: z<string, string, "volatile-defined">;
279
- deadlineMs: z<number, number, "volatile-defined">;
280
- }>>, "plain">;
281
- platformRules: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
282
- item?: string | null | undefined;
283
- title?: string | null | undefined;
284
- link?: string | null | undefined;
285
- text?: string | null | undefined;
286
- } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
287
- item: z<string, string, "plain">;
288
- title: z<string, string, "plain">;
289
- link: z<string, string, "plain">;
290
- text: z<string, string, "plain">;
291
- }>>, string>>, "volatile">;
292
- customPlatforms: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
293
- name?: string | null | undefined;
294
- url?: string | null | undefined;
295
- item?: string | null | undefined;
296
- title?: string | null | undefined;
297
- link?: string | null | undefined;
298
- text?: string | null | undefined;
299
- cookie?: string | null | undefined;
300
- } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
301
- name: z<string, string, "plain">;
302
- url: z<string, string, "plain">;
303
- item: z<string, string, "plain">;
304
- title: z<string, string, "plain">;
305
- link: z<string, string, "plain">;
306
- text: z<string, string, "plain">;
307
- cookie: z<string, string, "plain">;
308
- }>>, string>>, "volatile">;
309
- browserBindings: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
310
- authProfile?: string | null | undefined;
311
- rulePack?: string | null | undefined;
312
- } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
313
- authProfile: z<string, string, "plain">;
314
- rulePack: z<string, string, "plain">;
315
- }>>, string>>, "volatile">;
316
- playwright: z<Schemastery.ObjectS<NoInfer<{
317
- enabled: z<boolean, boolean, "volatile-defined">;
318
- snapshotDir: z<string, string, "plain">;
319
- }>>, Schemastery.ObjectT<NoInfer<{
320
- enabled: z<boolean, boolean, "volatile-defined">;
321
- snapshotDir: z<string, string, "plain">;
322
- }>>, "plain">;
323
265
  sources: z<Schemastery.ObjectS<NoInfer<{
324
266
  priority: z<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
325
267
  disabled: z<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
268
+ confidence: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<number, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<number, string>>, "volatile">;
326
269
  budget: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
327
270
  total?: number | null | undefined;
328
271
  daily?: number | null | undefined;
@@ -333,6 +276,7 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
333
276
  }>>, Schemastery.ObjectT<NoInfer<{
334
277
  priority: z<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
335
278
  disabled: z<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
279
+ confidence: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<number, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<number, string>>, "volatile">;
336
280
  budget: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
337
281
  total?: number | null | undefined;
338
282
  daily?: number | null | undefined;
@@ -341,6 +285,29 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
341
285
  daily: z<number, number, "plain">;
342
286
  }>>, string>>, "volatile">;
343
287
  }>>, "plain">;
288
+ platformBackends: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<string[], string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<string[], string>>, "volatile">;
289
+ keyedSources: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
290
+ apiKey?: string | null | undefined;
291
+ apiKeyEnv?: string | null | undefined;
292
+ baseUrl?: string | null | undefined;
293
+ } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
294
+ apiKey: z<string, string, "plain">;
295
+ apiKeyEnv: z<string, string, "plain">;
296
+ baseUrl: z<string, string, "plain">;
297
+ }>>, string>>, "volatile">;
298
+ exaApiKey: z<string, string, "volatile">;
299
+ exaApiKeyEnv: z<string, string, "volatile-defined">;
300
+ jinaApiKey: z<string, string, "volatile">;
301
+ jinaApiKeyEnv: z<string, string, "volatile-defined">;
302
+ bochaApiKey: z<string, string, "volatile">;
303
+ bochaApiKeyEnv: z<string, string, "volatile-defined">;
304
+ bochaBaseUrl: z<string, string, "volatile-defined">;
305
+ bochaSummary: z<boolean, boolean, "volatile-defined">;
306
+ githubToken: z<string, string, "volatile">;
307
+ githubTokenEnv: z<string, string, "volatile-defined">;
308
+ searxngUrl: z<string, string, "volatile">;
309
+ openalexMailto: z<string, string, "volatile">;
310
+ cliAdapters: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<import("@deepseek-ai/cosmokit").Dict<any, string>, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<import("@deepseek-ai/cosmokit").Dict<any, string>, string>>, "volatile">;
344
311
  evidence: z<Schemastery.ObjectS<NoInfer<{
345
312
  scorer: z<"jev" | "rule", "jev" | "rule", "volatile-defined">;
346
313
  jevMode: z<"off" | "shadow" | "control" | "hybrid", "off" | "shadow" | "control" | "hybrid", "volatile-defined">;
@@ -684,85 +651,50 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
684
651
  }>>, string>, "plain">;
685
652
  }>>>, "volatile">;
686
653
  }>>, "plain">;
687
- verbose: z<boolean, boolean, "volatile-defined">;
688
- }>>, Schemastery.ObjectT<NoInfer<{
689
- dbPath: z<string, string, "volatile">;
690
- toolSurface: z<string, string, "volatile-defined">;
691
- ttlSeconds: z<number, number, "volatile-defined">;
692
- memoryCacheEntries: z<number, number, "volatile-defined">;
693
- rrfConstant: z<number, number, "volatile-defined">;
694
- freshnessBoost: z<number, number, "volatile-defined">;
695
- freshnessDays: z<number, number, "volatile-defined">;
696
- authorityBoost: z<number, number, "volatile-defined">;
697
- authorityDomains: z<NoInfer<string[]>, NoInfer<string[]>, "volatile-defined">;
698
- searchMaxResults: z<number, number, "volatile-defined">;
699
654
  fetchDefaultChars: z<number, number, "volatile-defined">;
700
655
  exaContentsPerUrlChars: z<number, number, "volatile-defined">;
701
656
  exaContentsTotalChars: z<number, number, "volatile-defined">;
702
- timeoutMs: z<number, number, "volatile-defined">;
703
- allowProxyFakeIp: z<boolean, boolean, "volatile-defined">;
704
- engines: z<NoInfer<string[]>, NoInfer<string[]>, "volatile-defined">;
705
- parallelEngines: z<boolean, boolean, "volatile-defined">;
706
- exaApiKey: z<string, string, "volatile">;
707
- exaApiKeyEnv: z<string, string, "volatile-defined">;
708
- jinaApiKey: z<string, string, "volatile">;
709
- jinaApiKeyEnv: z<string, string, "volatile-defined">;
710
- bochaApiKey: z<string, string, "volatile">;
711
- bochaApiKeyEnv: z<string, string, "volatile-defined">;
712
- bochaBaseUrl: z<string, string, "volatile-defined">;
713
- bochaSummary: z<boolean, boolean, "volatile-defined">;
714
- searxngUrl: z<string, string, "volatile">;
715
- openalexMailto: z<string, string, "volatile">;
716
- keyedSources: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
717
- apiKey?: string | null | undefined;
718
- apiKeyEnv?: string | null | undefined;
719
- baseUrl?: string | null | undefined;
720
- } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
721
- apiKey: z<string, string, "plain">;
722
- apiKeyEnv: z<string, string, "plain">;
723
- baseUrl: z<string, string, "plain">;
724
- }>>, string>>, "volatile">;
725
- githubToken: z<string, string, "volatile">;
726
- githubTokenEnv: z<string, string, "volatile-defined">;
727
657
  enableCliBackends: z<boolean, boolean, "volatile-defined">;
728
658
  opencliEnabled: z<boolean, boolean, "volatile-defined">;
729
659
  agentReachEnabled: z<boolean, boolean, "volatile-defined">;
730
- providerId: z<string, string, "volatile-defined">;
731
- registerProvider: z<boolean, boolean, "volatile-defined">;
732
- provider: z<Schemastery.ObjectS<NoInfer<{
733
- evidence: z<string, string, "volatile-defined">;
734
- deadlineMs: z<number, number, "volatile-defined">;
660
+ twitterAuthToken: z<string, string, "volatile">;
661
+ twitterAuthTokenEnv: z<string, string, "volatile-defined">;
662
+ twitterCt0: z<string, string, "volatile">;
663
+ twitterCt0Env: z<string, string, "volatile-defined">;
664
+ playwright: z<Schemastery.ObjectS<NoInfer<{
665
+ enabled: z<boolean, boolean, "volatile-defined">;
666
+ snapshotDir: z<string, string, "volatile">;
735
667
  }>>, Schemastery.ObjectT<NoInfer<{
736
- evidence: z<string, string, "volatile-defined">;
737
- deadlineMs: z<number, number, "volatile-defined">;
668
+ enabled: z<boolean, boolean, "volatile-defined">;
669
+ snapshotDir: z<string, string, "volatile">;
738
670
  }>>, "plain">;
739
- platformRules: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
671
+ customPlatforms: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
672
+ name?: string | null | undefined;
673
+ url?: string | null | undefined;
740
674
  item?: string | null | undefined;
741
675
  title?: string | null | undefined;
742
676
  link?: string | null | undefined;
743
677
  text?: string | null | undefined;
678
+ cookie?: string | null | undefined;
744
679
  } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
680
+ name: z<string, string, "plain">;
681
+ url: z<string, string, "plain">;
745
682
  item: z<string, string, "plain">;
746
683
  title: z<string, string, "plain">;
747
684
  link: z<string, string, "plain">;
748
685
  text: z<string, string, "plain">;
686
+ cookie: z<string, string, "plain">;
749
687
  }>>, string>>, "volatile">;
750
- customPlatforms: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
751
- name?: string | null | undefined;
752
- url?: string | null | undefined;
688
+ platformRules: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
753
689
  item?: string | null | undefined;
754
690
  title?: string | null | undefined;
755
691
  link?: string | null | undefined;
756
692
  text?: string | null | undefined;
757
- cookie?: string | null | undefined;
758
693
  } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
759
- name: z<string, string, "plain">;
760
- url: z<string, string, "plain">;
761
694
  item: z<string, string, "plain">;
762
695
  title: z<string, string, "plain">;
763
696
  link: z<string, string, "plain">;
764
697
  text: z<string, string, "plain">;
765
- cookie: z<string, string, "plain">;
766
698
  }>>, string>>, "volatile">;
767
699
  browserBindings: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
768
700
  authProfile?: string | null | undefined;
@@ -771,16 +703,36 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
771
703
  authProfile: z<string, string, "plain">;
772
704
  rulePack: z<string, string, "plain">;
773
705
  }>>, string>>, "volatile">;
774
- playwright: z<Schemastery.ObjectS<NoInfer<{
775
- enabled: z<boolean, boolean, "volatile-defined">;
776
- snapshotDir: z<string, string, "plain">;
706
+ providerId: z<string, string, "volatile-defined">;
707
+ registerProvider: z<boolean, boolean, "volatile-defined">;
708
+ provider: z<Schemastery.ObjectS<NoInfer<{
709
+ evidence: z<string, string, "volatile-defined">;
710
+ deadlineMs: z<number, number, "volatile-defined">;
777
711
  }>>, Schemastery.ObjectT<NoInfer<{
778
- enabled: z<boolean, boolean, "volatile-defined">;
779
- snapshotDir: z<string, string, "plain">;
712
+ evidence: z<string, string, "volatile-defined">;
713
+ deadlineMs: z<number, number, "volatile-defined">;
780
714
  }>>, "plain">;
715
+ timeoutMs: z<number, number, "volatile-defined">;
716
+ ttlSeconds: z<number, number, "volatile-defined">;
717
+ memoryCacheEntries: z<number, number, "volatile-defined">;
718
+ rrfConstant: z<number, number, "volatile-defined">;
719
+ freshnessBoost: z<number, number, "volatile-defined">;
720
+ freshnessDays: z<number, number, "volatile-defined">;
721
+ authorityBoost: z<number, number, "volatile-defined">;
722
+ authorityDomains: z<NoInfer<string[]>, NoInfer<string[]>, "volatile-defined">;
723
+ dbPath: z<string, string, "volatile">;
724
+ verbose: z<boolean, boolean, "volatile-defined">;
725
+ }>>, Schemastery.ObjectT<NoInfer<{
726
+ searchMaxResults: z<number, number, "volatile-defined">;
727
+ parallelEngines: z<boolean, boolean, "volatile-defined">;
728
+ toolSurface: z<string, string, "volatile-defined">;
729
+ allowProxyFakeIp: z<boolean, boolean, "volatile-defined">;
730
+ deepseekFetch: z<boolean, boolean, "volatile-defined">;
731
+ engines: z<NoInfer<string[]>, NoInfer<string[]>, "volatile-defined">;
781
732
  sources: z<Schemastery.ObjectS<NoInfer<{
782
733
  priority: z<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
783
734
  disabled: z<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
735
+ confidence: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<number, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<number, string>>, "volatile">;
784
736
  budget: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
785
737
  total?: number | null | undefined;
786
738
  daily?: number | null | undefined;
@@ -791,6 +743,7 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
791
743
  }>>, Schemastery.ObjectT<NoInfer<{
792
744
  priority: z<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
793
745
  disabled: z<NoInfer<string[]>, NoInfer<string[]>, "volatile">;
746
+ confidence: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<number, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<number, string>>, "volatile">;
794
747
  budget: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
795
748
  total?: number | null | undefined;
796
749
  daily?: number | null | undefined;
@@ -799,6 +752,29 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
799
752
  daily: z<number, number, "plain">;
800
753
  }>>, string>>, "volatile">;
801
754
  }>>, "plain">;
755
+ platformBackends: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<string[], string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<string[], string>>, "volatile">;
756
+ keyedSources: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
757
+ apiKey?: string | null | undefined;
758
+ apiKeyEnv?: string | null | undefined;
759
+ baseUrl?: string | null | undefined;
760
+ } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
761
+ apiKey: z<string, string, "plain">;
762
+ apiKeyEnv: z<string, string, "plain">;
763
+ baseUrl: z<string, string, "plain">;
764
+ }>>, string>>, "volatile">;
765
+ exaApiKey: z<string, string, "volatile">;
766
+ exaApiKeyEnv: z<string, string, "volatile-defined">;
767
+ jinaApiKey: z<string, string, "volatile">;
768
+ jinaApiKeyEnv: z<string, string, "volatile-defined">;
769
+ bochaApiKey: z<string, string, "volatile">;
770
+ bochaApiKeyEnv: z<string, string, "volatile-defined">;
771
+ bochaBaseUrl: z<string, string, "volatile-defined">;
772
+ bochaSummary: z<boolean, boolean, "volatile-defined">;
773
+ githubToken: z<string, string, "volatile">;
774
+ githubTokenEnv: z<string, string, "volatile-defined">;
775
+ searxngUrl: z<string, string, "volatile">;
776
+ openalexMailto: z<string, string, "volatile">;
777
+ cliAdapters: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<import("@deepseek-ai/cosmokit").Dict<any, string>, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<import("@deepseek-ai/cosmokit").Dict<any, string>, string>>, "volatile">;
802
778
  evidence: z<Schemastery.ObjectS<NoInfer<{
803
779
  scorer: z<"jev" | "rule", "jev" | "rule", "volatile-defined">;
804
780
  jevMode: z<"off" | "shadow" | "control" | "hybrid", "off" | "shadow" | "control" | "hybrid", "volatile-defined">;
@@ -1142,6 +1118,76 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
1142
1118
  }>>, string>, "plain">;
1143
1119
  }>>>, "volatile">;
1144
1120
  }>>, "plain">;
1121
+ fetchDefaultChars: z<number, number, "volatile-defined">;
1122
+ exaContentsPerUrlChars: z<number, number, "volatile-defined">;
1123
+ exaContentsTotalChars: z<number, number, "volatile-defined">;
1124
+ enableCliBackends: z<boolean, boolean, "volatile-defined">;
1125
+ opencliEnabled: z<boolean, boolean, "volatile-defined">;
1126
+ agentReachEnabled: z<boolean, boolean, "volatile-defined">;
1127
+ twitterAuthToken: z<string, string, "volatile">;
1128
+ twitterAuthTokenEnv: z<string, string, "volatile-defined">;
1129
+ twitterCt0: z<string, string, "volatile">;
1130
+ twitterCt0Env: z<string, string, "volatile-defined">;
1131
+ playwright: z<Schemastery.ObjectS<NoInfer<{
1132
+ enabled: z<boolean, boolean, "volatile-defined">;
1133
+ snapshotDir: z<string, string, "volatile">;
1134
+ }>>, Schemastery.ObjectT<NoInfer<{
1135
+ enabled: z<boolean, boolean, "volatile-defined">;
1136
+ snapshotDir: z<string, string, "volatile">;
1137
+ }>>, "plain">;
1138
+ customPlatforms: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
1139
+ name?: string | null | undefined;
1140
+ url?: string | null | undefined;
1141
+ item?: string | null | undefined;
1142
+ title?: string | null | undefined;
1143
+ link?: string | null | undefined;
1144
+ text?: string | null | undefined;
1145
+ cookie?: string | null | undefined;
1146
+ } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
1147
+ name: z<string, string, "plain">;
1148
+ url: z<string, string, "plain">;
1149
+ item: z<string, string, "plain">;
1150
+ title: z<string, string, "plain">;
1151
+ link: z<string, string, "plain">;
1152
+ text: z<string, string, "plain">;
1153
+ cookie: z<string, string, "plain">;
1154
+ }>>, string>>, "volatile">;
1155
+ platformRules: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
1156
+ item?: string | null | undefined;
1157
+ title?: string | null | undefined;
1158
+ link?: string | null | undefined;
1159
+ text?: string | null | undefined;
1160
+ } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
1161
+ item: z<string, string, "plain">;
1162
+ title: z<string, string, "plain">;
1163
+ link: z<string, string, "plain">;
1164
+ text: z<string, string, "plain">;
1165
+ }>>, string>>, "volatile">;
1166
+ browserBindings: z<NoInfer<import("@deepseek-ai/cosmokit").Dict<{
1167
+ authProfile?: string | null | undefined;
1168
+ rulePack?: string | null | undefined;
1169
+ } & import("@deepseek-ai/cosmokit").Dict, string>>, NoInfer<import("@deepseek-ai/cosmokit").Dict<Schemastery.ObjectT<NoInfer<{
1170
+ authProfile: z<string, string, "plain">;
1171
+ rulePack: z<string, string, "plain">;
1172
+ }>>, string>>, "volatile">;
1173
+ providerId: z<string, string, "volatile-defined">;
1174
+ registerProvider: z<boolean, boolean, "volatile-defined">;
1175
+ provider: z<Schemastery.ObjectS<NoInfer<{
1176
+ evidence: z<string, string, "volatile-defined">;
1177
+ deadlineMs: z<number, number, "volatile-defined">;
1178
+ }>>, Schemastery.ObjectT<NoInfer<{
1179
+ evidence: z<string, string, "volatile-defined">;
1180
+ deadlineMs: z<number, number, "volatile-defined">;
1181
+ }>>, "plain">;
1182
+ timeoutMs: z<number, number, "volatile-defined">;
1183
+ ttlSeconds: z<number, number, "volatile-defined">;
1184
+ memoryCacheEntries: z<number, number, "volatile-defined">;
1185
+ rrfConstant: z<number, number, "volatile-defined">;
1186
+ freshnessBoost: z<number, number, "volatile-defined">;
1187
+ freshnessDays: z<number, number, "volatile-defined">;
1188
+ authorityBoost: z<number, number, "volatile-defined">;
1189
+ authorityDomains: z<NoInfer<string[]>, NoInfer<string[]>, "volatile-defined">;
1190
+ dbPath: z<string, string, "volatile">;
1145
1191
  verbose: z<boolean, boolean, "volatile-defined">;
1146
1192
  }>>, "plain">;
1147
1193
  export interface ResolvedConfig extends Config {
@@ -1152,10 +1198,15 @@ export interface ResolvedConfig extends Config {
1152
1198
  jinaApiKey?: string;
1153
1199
  jinaApiKeyEnv: string;
1154
1200
  githubTokenEnv: string;
1201
+ twitterAuthToken?: string;
1202
+ twitterAuthTokenEnv: string;
1203
+ twitterCt0?: string;
1204
+ twitterCt0Env: string;
1155
1205
  bochaApiKey?: string;
1156
1206
  bochaApiKeyEnv: string;
1157
1207
  bochaBaseUrl: string;
1158
1208
  bochaSummary: boolean;
1209
+ deepseekFetch: boolean;
1159
1210
  searxngUrl?: string;
1160
1211
  openalexMailto?: string;
1161
1212
  keyedSources?: Config['keyedSources'];
@@ -1166,8 +1217,6 @@ export interface ResolvedConfig extends Config {
1166
1217
  }
1167
1218
  /** Default database path under the harness home. */
1168
1219
  export declare function defaultDbPath(): string;
1169
- export declare function normalizeJudge<T>(judge: T): T;
1170
- export declare function normalizeRubrics<T>(rubrics: T): T;
1171
- export declare function normalizeCoverage<T>(coverage: T): T;
1220
+ export { normalizeJudge, normalizeRubrics, normalizeCoverage } from './config-fillers.ts';
1172
1221
  /** Resolve a fully-defaulted config from user input. Unwraps volatile fields (schemastery `Volatile<T>`) into plain values so consumers never see the wrapper. */
1173
1222
  export declare function resolveConfig(config: Config): ResolvedConfig;