webfox 4.10.0 → 4.11.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 (44) hide show
  1. package/README.md +2 -12
  2. package/dist/{adapter-UIFBJKKF.js → adapter-44ZBIK47.js} +4 -6
  3. package/dist/{adapter-HTMXAJTU.js → adapter-57MELLYI.js} +2 -8
  4. package/dist/{adapter-VMMS4YQG.js → adapter-BZO5UEI6.js} +3 -15
  5. package/dist/{adapter-OK2PTP6R.js → adapter-D4EXZEDL.js} +16 -48
  6. package/dist/{adapter-G3I7JEO5.js → adapter-DJCTEEOA.js} +3 -5
  7. package/dist/{adapter-764OQFKY.js → adapter-DLNMW34W.js} +8 -35
  8. package/dist/{adapter-HRI5ZMGK.js → adapter-GFXYSHKP.js} +9 -43
  9. package/dist/{adapter-2UVAARTV.js → adapter-GJOUFE2U.js} +1 -1
  10. package/dist/{adapter-C2VZHFUB.js → adapter-MZ7USB6Q.js} +3 -4
  11. package/dist/adapter-ODDFBGJG.js +167 -0
  12. package/dist/{adapter-K6AMSUCR.js → adapter-QQZFHUOP.js} +14 -37
  13. package/dist/{adapter-AUYLTDPM.js → adapter-RR55EZAW.js} +1 -1
  14. package/dist/{adapter-JJSMYZXG.js → adapter-SZMVKAMC.js} +1 -1
  15. package/dist/{adapter-6EZAIE65.js → adapter-VXT4C6RZ.js} +16 -66
  16. package/dist/{adapter-L6BFKWGX.js → adapter-WXEVTCM3.js} +7 -14
  17. package/dist/{adapter-ZYDUANQL.js → adapter-XSQX3GAI.js} +13 -5
  18. package/dist/{adapter-EIDSGLOP.js → adapter-XU2APKPC.js} +3 -3
  19. package/dist/{adapter-A5WYGGZI.js → adapter-YVZ4YBK5.js} +8 -16
  20. package/dist/chunk-6RQGO727.js +71 -0
  21. package/dist/{chunk-TGULKHB5.js → chunk-KMUCUJVN.js} +3 -3
  22. package/dist/{chunk-EF4VMDZL.js → chunk-LDVDVA4Z.js} +1 -4
  23. package/dist/{chunk-57OOEOXI.js → chunk-NENL6L6N.js} +1 -0
  24. package/dist/{chunk-5FP7KNMC.js → chunk-PVNWACMT.js} +132 -18
  25. package/dist/{chunk-YZXM4U2C.js → chunk-TYJ6RHKB.js} +10 -0
  26. package/dist/{chunk-3WBE6UEW.js → chunk-YILOS4E7.js} +23 -9
  27. package/dist/cli.js +5 -5
  28. package/dist/config.schema.json +187 -0
  29. package/dist/contents.d.ts +5 -0
  30. package/dist/document-schema.d.ts +17 -5
  31. package/dist/domain.d.ts +14 -2
  32. package/dist/durable.js +5 -5
  33. package/dist/index.js +4 -4
  34. package/dist/pi.js +33 -14
  35. package/dist/providers/contract.d.ts +11 -1
  36. package/dist/providers/registry.d.ts +1 -0
  37. package/dist/providers/sofya/adapter.d.ts +8 -0
  38. package/dist/providers/sofya/definition.d.ts +1 -0
  39. package/dist/providers/sofya/types.d.ts +4 -0
  40. package/dist/render.d.ts +8 -2
  41. package/docs/provider.md +27 -0
  42. package/examples/custom/README.md +9 -3
  43. package/package.json +1 -1
  44. package/dist/chunk-BTWECET5.js +0 -31
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CAPABILITIES
3
- } from "./chunk-57OOEOXI.js";
3
+ } from "./chunk-NENL6L6N.js";
4
4
  import {
5
5
  WebfoxError
6
6
  } from "./chunk-U4BLULLV.js";
@@ -504,7 +504,7 @@ var braveProvider = defineProvider({
504
504
  retrySafe: false
505
505
  }
506
506
  },
507
- load: async () => (await import("./adapter-A5WYGGZI.js")).adapter
507
+ load: async () => (await import("./adapter-YVZ4YBK5.js")).adapter
508
508
  });
509
509
 
510
510
  // src/providers/cloudflare/definition.ts
@@ -606,7 +606,7 @@ var cloudflareProvider = defineProvider({
606
606
  retrySafe: true
607
607
  }
608
608
  },
609
- load: async () => (await import("./adapter-AUYLTDPM.js")).adapter
609
+ load: async () => (await import("./adapter-RR55EZAW.js")).adapter
610
610
  });
611
611
 
612
612
  // src/providers/custom/definition.ts
@@ -633,7 +633,7 @@ var customProvider = defineProvider({
633
633
  retrySafe: false
634
634
  }
635
635
  },
636
- load: async () => (await import("./adapter-ZYDUANQL.js")).adapter
636
+ load: async () => (await import("./adapter-XSQX3GAI.js")).adapter
637
637
  });
638
638
 
639
639
  // src/providers/exa/definition.ts
@@ -944,7 +944,7 @@ var exaProvider = defineProvider({
944
944
  retrySafe: false
945
945
  }
946
946
  },
947
- load: async () => (await import("./adapter-HRI5ZMGK.js")).adapter
947
+ load: async () => (await import("./adapter-GFXYSHKP.js")).adapter
948
948
  });
949
949
 
950
950
  // src/providers/firecrawl/definition.ts
@@ -1150,7 +1150,7 @@ var firecrawlProvider = defineProvider({
1150
1150
  retrySafe: false
1151
1151
  }
1152
1152
  },
1153
- load: async () => (await import("./adapter-L6BFKWGX.js")).adapter
1153
+ load: async () => (await import("./adapter-WXEVTCM3.js")).adapter
1154
1154
  });
1155
1155
 
1156
1156
  // src/providers/gemini/definition.ts
@@ -1275,7 +1275,7 @@ var geminiProvider = defineProvider({
1275
1275
  retrySafe: false
1276
1276
  }
1277
1277
  },
1278
- load: async () => (await import("./adapter-6EZAIE65.js")).adapter
1278
+ load: async () => (await import("./adapter-VXT4C6RZ.js")).adapter
1279
1279
  });
1280
1280
 
1281
1281
  // src/providers/keenable/definition.ts
@@ -1342,7 +1342,7 @@ var keenableProvider = defineProvider({
1342
1342
  retrySafe: true
1343
1343
  }
1344
1344
  },
1345
- load: async () => (await import("./adapter-JJSMYZXG.js")).adapter
1345
+ load: async () => (await import("./adapter-SZMVKAMC.js")).adapter
1346
1346
  });
1347
1347
 
1348
1348
  // src/providers/linkup/definition.ts
@@ -1540,7 +1540,7 @@ var linkupProvider = defineProvider({
1540
1540
  retrySafe: false
1541
1541
  }
1542
1542
  },
1543
- load: async () => (await import("./adapter-K6AMSUCR.js")).adapter
1543
+ load: async () => (await import("./adapter-QQZFHUOP.js")).adapter
1544
1544
  });
1545
1545
 
1546
1546
  // src/providers/ollama/definition.ts
@@ -1569,7 +1569,7 @@ var ollamaProvider = defineProvider({
1569
1569
  retrySafe: true
1570
1570
  }
1571
1571
  },
1572
- load: async () => (await import("./adapter-HTMXAJTU.js")).adapter
1572
+ load: async () => (await import("./adapter-57MELLYI.js")).adapter
1573
1573
  });
1574
1574
 
1575
1575
  // src/providers/openai/definition.ts
@@ -1677,7 +1677,7 @@ var openaiProvider = defineProvider({
1677
1677
  retrySafe: false
1678
1678
  }
1679
1679
  },
1680
- load: async () => (await import("./adapter-VMMS4YQG.js")).adapter
1680
+ load: async () => (await import("./adapter-BZO5UEI6.js")).adapter
1681
1681
  });
1682
1682
 
1683
1683
  // src/providers/parallel/definition.ts
@@ -1836,7 +1836,7 @@ var parallelProvider = defineProvider({
1836
1836
  retrySafe: true
1837
1837
  }
1838
1838
  },
1839
- load: async () => (await import("./adapter-G3I7JEO5.js")).adapter
1839
+ load: async () => (await import("./adapter-DJCTEEOA.js")).adapter
1840
1840
  });
1841
1841
 
1842
1842
  // src/providers/perplexity/definition.ts
@@ -1957,7 +1957,7 @@ var perplexityProvider = defineProvider({
1957
1957
  answer: { options: chatOptions, retrySafe: false },
1958
1958
  research: { options: chatOptions, retrySafe: false }
1959
1959
  },
1960
- load: async () => (await import("./adapter-OK2PTP6R.js")).adapter
1960
+ load: async () => (await import("./adapter-D4EXZEDL.js")).adapter
1961
1961
  });
1962
1962
 
1963
1963
  // src/providers/serpbase/definition.ts
@@ -2058,7 +2058,7 @@ var serpbaseProvider = defineProvider({
2058
2058
  retrySafe: true
2059
2059
  }
2060
2060
  },
2061
- load: async () => (await import("./adapter-EIDSGLOP.js")).adapter
2061
+ load: async () => (await import("./adapter-XU2APKPC.js")).adapter
2062
2062
  });
2063
2063
 
2064
2064
  // src/providers/serper/definition.ts
@@ -2198,7 +2198,120 @@ var serperProvider = defineProvider({
2198
2198
  retrySafe: true
2199
2199
  }
2200
2200
  },
2201
- load: async () => (await import("./adapter-C2VZHFUB.js")).adapter
2201
+ load: async () => (await import("./adapter-MZ7USB6Q.js")).adapter
2202
+ });
2203
+
2204
+ // src/providers/sofya/definition.ts
2205
+ var filters = {
2206
+ topic: {
2207
+ type: "string",
2208
+ enum: ["general", "news"],
2209
+ description: "'news' for news articles, 'general' (default) for web search."
2210
+ },
2211
+ freshness: {
2212
+ type: "string",
2213
+ pattern: "^(day|week|month|year|\\d{4}-\\d{2}-\\d{2}:\\d{4}-\\d{2}-\\d{2})$",
2214
+ description: "Recency filter: day, week, month, year, or a YYYY-MM-DD:YYYY-MM-DD range."
2215
+ }
2216
+ };
2217
+ var domainFilters = {
2218
+ include_domains: {
2219
+ type: "array",
2220
+ items: { type: "string", minLength: 1 },
2221
+ maxItems: 10,
2222
+ description: "Only return results from these domains, e.g. 'github.com'."
2223
+ },
2224
+ exclude_domains: {
2225
+ type: "array",
2226
+ items: { type: "string", minLength: 1 },
2227
+ maxItems: 10,
2228
+ description: "Exclude results from these domains."
2229
+ }
2230
+ };
2231
+ var searchDepth = {
2232
+ type: "string",
2233
+ enum: ["snippets", "basic"],
2234
+ description: "'snippets' (1 credit) returns search snippets; 'basic' (2 credits) also reads each page and returns its text in metadata.content."
2235
+ };
2236
+ var sofyaProvider = defineProvider({
2237
+ id: "sofya",
2238
+ label: "Sofya",
2239
+ docsUrl: "https://sofya.co/docs",
2240
+ local: false,
2241
+ credentials: [{ name: "api", environmentVariable: "SOFYA_API_KEY" }],
2242
+ fields: ["credentials", "baseUrl", "options"],
2243
+ defaults: { search: { search_depth: "snippets" } },
2244
+ credentialDefaults: {},
2245
+ capabilities: {
2246
+ search: {
2247
+ // Sofya calls can take up to 60 seconds; allow headroom.
2248
+ defaultTimeoutMs: 9e4,
2249
+ options: {
2250
+ type: "object",
2251
+ properties: {
2252
+ search_depth: searchDepth,
2253
+ ...filters,
2254
+ ...domainFilters
2255
+ },
2256
+ description: "Sofya search options."
2257
+ },
2258
+ promptGuidelines: [
2259
+ "Sofya search returns ranked results with snippets; use web_contents to read selected sources in full.",
2260
+ "Use Sofya topic='news' and freshness (e.g. 'week') for recent events, and include_domains to restrict results to specific sites."
2261
+ ],
2262
+ retrySafe: true
2263
+ },
2264
+ contents: {
2265
+ defaultTimeoutMs: 9e4,
2266
+ options: {
2267
+ type: "object",
2268
+ properties: {
2269
+ include_raw_html: {
2270
+ type: "boolean",
2271
+ description: "Include the raw HTML source in metadata.raw_html."
2272
+ }
2273
+ },
2274
+ description: "Sofya contents options."
2275
+ },
2276
+ retrySafe: true
2277
+ },
2278
+ answer: {
2279
+ defaultTimeoutMs: 9e4,
2280
+ options: {
2281
+ type: "object",
2282
+ properties: {
2283
+ search_depth: searchDepth,
2284
+ max_results: {
2285
+ type: "integer",
2286
+ minimum: 1,
2287
+ maximum: 20,
2288
+ description: "Search results the answer is grounded in."
2289
+ },
2290
+ ...filters,
2291
+ ...domainFilters
2292
+ },
2293
+ description: "Sofya answer options."
2294
+ },
2295
+ retrySafe: false
2296
+ },
2297
+ research: {
2298
+ options: {
2299
+ type: "object",
2300
+ properties: {
2301
+ ...filters,
2302
+ max_sources: {
2303
+ type: "integer",
2304
+ minimum: 5,
2305
+ maximum: 30,
2306
+ description: "Maximum sources to read (default 20)."
2307
+ }
2308
+ },
2309
+ description: "Sofya research options."
2310
+ },
2311
+ retrySafe: false
2312
+ }
2313
+ },
2314
+ load: async () => (await import("./adapter-ODDFBGJG.js")).adapter
2202
2315
  });
2203
2316
 
2204
2317
  // src/providers/tavily/definition.ts
@@ -2393,7 +2506,7 @@ var tavilyProvider = defineProvider({
2393
2506
  retrySafe: true
2394
2507
  }
2395
2508
  },
2396
- load: async () => (await import("./adapter-UIFBJKKF.js")).adapter
2509
+ load: async () => (await import("./adapter-44ZBIK47.js")).adapter
2397
2510
  });
2398
2511
 
2399
2512
  // src/providers/valyu/definition.ts
@@ -2861,7 +2974,7 @@ var valyuProvider = defineProvider({
2861
2974
  retrySafe: false
2862
2975
  }
2863
2976
  },
2864
- load: async () => (await import("./adapter-764OQFKY.js")).adapter
2977
+ load: async () => (await import("./adapter-DLNMW34W.js")).adapter
2865
2978
  });
2866
2979
 
2867
2980
  // src/providers/youcom/definition.ts
@@ -3052,7 +3165,7 @@ var youcomProvider = defineProvider({
3052
3165
  retrySafe: true
3053
3166
  }
3054
3167
  },
3055
- load: async () => (await import("./adapter-2UVAARTV.js")).adapter
3168
+ load: async () => (await import("./adapter-GJOUFE2U.js")).adapter
3056
3169
  });
3057
3170
 
3058
3171
  // src/providers/registry.ts
@@ -3071,6 +3184,7 @@ var providers = {
3071
3184
  perplexity: perplexityProvider,
3072
3185
  serpbase: serpbaseProvider,
3073
3186
  serper: serperProvider,
3187
+ sofya: sofyaProvider,
3074
3188
  tavily: tavilyProvider,
3075
3189
  valyu: valyuProvider,
3076
3190
  youcom: youcomProvider
@@ -3,6 +3,15 @@ import {
3
3
  } from "./chunk-U4BLULLV.js";
4
4
 
5
5
  // src/contents.ts
6
+ function omittedContents(url) {
7
+ return {
8
+ url,
9
+ error: new WebfoxError(
10
+ "PROVIDER_FAILURE",
11
+ "The provider omitted a result for this URL."
12
+ ).toJSON()
13
+ };
14
+ }
6
15
  function orderedContents(response) {
7
16
  return {
8
17
  provider: response.provider,
@@ -17,5 +26,6 @@ function orderedContents(response) {
17
26
  }
18
27
 
19
28
  export {
29
+ omittedContents,
20
30
  orderedContents
21
31
  };
@@ -6,21 +6,21 @@ import {
6
6
  } from "./chunk-WCTOYZVB.js";
7
7
  import {
8
8
  configurationSchema
9
- } from "./chunk-TGULKHB5.js";
9
+ } from "./chunk-KMUCUJVN.js";
10
10
  import {
11
11
  effectiveOptions,
12
12
  optionSchema,
13
13
  providers,
14
14
  selectProvider,
15
15
  validateConfiguredOptions
16
- } from "./chunk-5FP7KNMC.js";
16
+ } from "./chunk-PVNWACMT.js";
17
17
  import {
18
18
  cancelProcessGroup,
19
19
  killProcessGroup
20
20
  } from "./chunk-ZVTVERW5.js";
21
21
  import {
22
22
  CAPABILITIES
23
- } from "./chunk-57OOEOXI.js";
23
+ } from "./chunk-NENL6L6N.js";
24
24
  import {
25
25
  WebfoxError,
26
26
  asWebfoxError
@@ -442,7 +442,13 @@ var ExecutionRuntime = class {
442
442
  throw new WebfoxError(answer.error.code, answer.error.message, {
443
443
  retryable: answer.error.retryable
444
444
  });
445
- const { inputIndex: _index, error: _error, ...value2 } = answer;
445
+ const {
446
+ inputIndex: _index,
447
+ error: _error,
448
+ content,
449
+ ...rest
450
+ } = answer;
451
+ const value2 = content?.trim() ? { ...rest, content } : rest;
446
452
  return { input, ok: true, value: value2 };
447
453
  }
448
454
  const operation = capability === "search" ? {
@@ -459,10 +465,7 @@ var ExecutionRuntime = class {
459
465
  context
460
466
  );
461
467
  const value = capability === "search" ? {
462
- results: result.results.slice(
463
- 0,
464
- plan.maxResults
465
- )
468
+ results: result.results.slice(0, plan.maxResults).map(searchValue)
466
469
  } : textValue(result);
467
470
  return { input, ok: true, value };
468
471
  } catch (error) {
@@ -546,13 +549,24 @@ var ExecutionRuntime = class {
546
549
  }
547
550
  }
548
551
  };
552
+ function searchValue({ title, ...result }) {
553
+ const trimmed = title?.trim();
554
+ return trimmed ? { title: trimmed, ...result } : result;
555
+ }
549
556
  function textValue(value) {
557
+ const sources = value.sources?.flatMap(sourceValue);
550
558
  return {
551
559
  text: value.text,
552
- ...value.itemCount === void 0 ? {} : { itemCount: value.itemCount },
560
+ ...sources === void 0 ? {} : { sources, itemCount: sources.length },
553
561
  ...value.metadata === void 0 ? {} : { metadata: value.metadata }
554
562
  };
555
563
  }
564
+ function sourceValue(source) {
565
+ const url = typeof source.url === "string" ? source.url.trim() : "";
566
+ const title = typeof source.title === "string" ? source.title.trim() : "";
567
+ if (url) return [title ? { url, title } : { url }];
568
+ return title ? [{ title }] : [];
569
+ }
556
570
 
557
571
  // src/application.ts
558
572
  function createWebfox(options = {}) {
package/dist/cli.js CHANGED
@@ -4,26 +4,26 @@ import {
4
4
  } from "./chunk-I2UIACY3.js";
5
5
  import {
6
6
  renderTextDocument
7
- } from "./chunk-BTWECET5.js";
7
+ } from "./chunk-6RQGO727.js";
8
8
  import {
9
9
  createWebfox,
10
10
  loadConfig,
11
11
  redactConfig,
12
12
  resolveConfigPath,
13
13
  setCapabilityDefault
14
- } from "./chunk-3WBE6UEW.js";
14
+ } from "./chunk-YILOS4E7.js";
15
15
  import "./chunk-WCTOYZVB.js";
16
16
  import {
17
17
  PACKAGE_VERSION
18
- } from "./chunk-TGULKHB5.js";
18
+ } from "./chunk-KMUCUJVN.js";
19
19
  import {
20
20
  validateConfiguredOptions
21
- } from "./chunk-5FP7KNMC.js";
21
+ } from "./chunk-PVNWACMT.js";
22
22
  import "./chunk-ZVTVERW5.js";
23
23
  import {
24
24
  CAPABILITIES,
25
25
  PROVIDER_IDS
26
- } from "./chunk-57OOEOXI.js";
26
+ } from "./chunk-NENL6L6N.js";
27
27
  import {
28
28
  WebfoxError
29
29
  } from "./chunk-U4BLULLV.js";
@@ -31,6 +31,7 @@
31
31
  "perplexity",
32
32
  "serpbase",
33
33
  "serper",
34
+ "sofya",
34
35
  "tavily",
35
36
  "valyu",
36
37
  "youcom"
@@ -55,6 +56,7 @@
55
56
  "linkup",
56
57
  "ollama",
57
58
  "parallel",
59
+ "sofya",
58
60
  "tavily",
59
61
  "valyu"
60
62
  ]
@@ -74,6 +76,7 @@
74
76
  "gemini",
75
77
  "openai",
76
78
  "perplexity",
79
+ "sofya",
77
80
  "valyu"
78
81
  ]
79
82
  }
@@ -92,6 +95,7 @@
92
95
  "linkup",
93
96
  "openai",
94
97
  "perplexity",
98
+ "sofya",
95
99
  "valyu"
96
100
  ]
97
101
  }
@@ -3786,6 +3790,189 @@
3786
3790
  }
3787
3791
  }
3788
3792
  },
3793
+ "sofya": {
3794
+ "type": "object",
3795
+ "additionalProperties": false,
3796
+ "properties": {
3797
+ "credentials": {
3798
+ "type": "object",
3799
+ "additionalProperties": false,
3800
+ "properties": {
3801
+ "api": {
3802
+ "oneOf": [
3803
+ {
3804
+ "type": "object",
3805
+ "additionalProperties": false,
3806
+ "properties": {
3807
+ "env": {
3808
+ "type": "string",
3809
+ "minLength": 1
3810
+ }
3811
+ },
3812
+ "required": ["env"]
3813
+ },
3814
+ {
3815
+ "type": "object",
3816
+ "additionalProperties": false,
3817
+ "properties": {
3818
+ "value": {
3819
+ "type": "string",
3820
+ "minLength": 1
3821
+ }
3822
+ },
3823
+ "required": ["value"]
3824
+ },
3825
+ {
3826
+ "type": "object",
3827
+ "additionalProperties": false,
3828
+ "properties": {
3829
+ "command": {
3830
+ "type": "array",
3831
+ "minItems": 1,
3832
+ "items": {
3833
+ "type": "string",
3834
+ "minLength": 1
3835
+ }
3836
+ }
3837
+ },
3838
+ "required": ["command"]
3839
+ }
3840
+ ]
3841
+ }
3842
+ }
3843
+ },
3844
+ "baseUrl": {
3845
+ "type": "string",
3846
+ "minLength": 1
3847
+ },
3848
+ "options": {
3849
+ "type": "object",
3850
+ "additionalProperties": false,
3851
+ "properties": {
3852
+ "search": {
3853
+ "type": "object",
3854
+ "properties": {
3855
+ "search_depth": {
3856
+ "type": "string",
3857
+ "enum": ["snippets", "basic"],
3858
+ "description": "'snippets' (1 credit) returns search snippets; 'basic' (2 credits) also reads each page and returns its text in metadata.content."
3859
+ },
3860
+ "topic": {
3861
+ "type": "string",
3862
+ "enum": ["general", "news"],
3863
+ "description": "'news' for news articles, 'general' (default) for web search."
3864
+ },
3865
+ "freshness": {
3866
+ "type": "string",
3867
+ "pattern": "^(day|week|month|year|\\d{4}-\\d{2}-\\d{2}:\\d{4}-\\d{2}-\\d{2})$",
3868
+ "description": "Recency filter: day, week, month, year, or a YYYY-MM-DD:YYYY-MM-DD range."
3869
+ },
3870
+ "include_domains": {
3871
+ "type": "array",
3872
+ "items": {
3873
+ "type": "string",
3874
+ "minLength": 1
3875
+ },
3876
+ "maxItems": 10,
3877
+ "description": "Only return results from these domains, e.g. 'github.com'."
3878
+ },
3879
+ "exclude_domains": {
3880
+ "type": "array",
3881
+ "items": {
3882
+ "type": "string",
3883
+ "minLength": 1
3884
+ },
3885
+ "maxItems": 10,
3886
+ "description": "Exclude results from these domains."
3887
+ }
3888
+ },
3889
+ "description": "Sofya search options.",
3890
+ "additionalProperties": false
3891
+ },
3892
+ "contents": {
3893
+ "type": "object",
3894
+ "properties": {
3895
+ "include_raw_html": {
3896
+ "type": "boolean",
3897
+ "description": "Include the raw HTML source in metadata.raw_html."
3898
+ }
3899
+ },
3900
+ "description": "Sofya contents options.",
3901
+ "additionalProperties": false
3902
+ },
3903
+ "answer": {
3904
+ "type": "object",
3905
+ "properties": {
3906
+ "search_depth": {
3907
+ "type": "string",
3908
+ "enum": ["snippets", "basic"],
3909
+ "description": "'snippets' (1 credit) returns search snippets; 'basic' (2 credits) also reads each page and returns its text in metadata.content."
3910
+ },
3911
+ "max_results": {
3912
+ "type": "integer",
3913
+ "minimum": 1,
3914
+ "maximum": 20,
3915
+ "description": "Search results the answer is grounded in."
3916
+ },
3917
+ "topic": {
3918
+ "type": "string",
3919
+ "enum": ["general", "news"],
3920
+ "description": "'news' for news articles, 'general' (default) for web search."
3921
+ },
3922
+ "freshness": {
3923
+ "type": "string",
3924
+ "pattern": "^(day|week|month|year|\\d{4}-\\d{2}-\\d{2}:\\d{4}-\\d{2}-\\d{2})$",
3925
+ "description": "Recency filter: day, week, month, year, or a YYYY-MM-DD:YYYY-MM-DD range."
3926
+ },
3927
+ "include_domains": {
3928
+ "type": "array",
3929
+ "items": {
3930
+ "type": "string",
3931
+ "minLength": 1
3932
+ },
3933
+ "maxItems": 10,
3934
+ "description": "Only return results from these domains, e.g. 'github.com'."
3935
+ },
3936
+ "exclude_domains": {
3937
+ "type": "array",
3938
+ "items": {
3939
+ "type": "string",
3940
+ "minLength": 1
3941
+ },
3942
+ "maxItems": 10,
3943
+ "description": "Exclude results from these domains."
3944
+ }
3945
+ },
3946
+ "description": "Sofya answer options.",
3947
+ "additionalProperties": false
3948
+ },
3949
+ "research": {
3950
+ "type": "object",
3951
+ "properties": {
3952
+ "topic": {
3953
+ "type": "string",
3954
+ "enum": ["general", "news"],
3955
+ "description": "'news' for news articles, 'general' (default) for web search."
3956
+ },
3957
+ "freshness": {
3958
+ "type": "string",
3959
+ "pattern": "^(day|week|month|year|\\d{4}-\\d{2}-\\d{2}:\\d{4}-\\d{2}-\\d{2})$",
3960
+ "description": "Recency filter: day, week, month, year, or a YYYY-MM-DD:YYYY-MM-DD range."
3961
+ },
3962
+ "max_sources": {
3963
+ "type": "integer",
3964
+ "minimum": 5,
3965
+ "maximum": 30,
3966
+ "description": "Maximum sources to read (default 20)."
3967
+ }
3968
+ },
3969
+ "description": "Sofya research options.",
3970
+ "additionalProperties": false
3971
+ }
3972
+ }
3973
+ }
3974
+ }
3975
+ },
3789
3976
  "tavily": {
3790
3977
  "type": "object",
3791
3978
  "additionalProperties": false,
@@ -15,5 +15,10 @@ export interface IndexedContentsResponse {
15
15
  error?: SerializedError;
16
16
  }>;
17
17
  }
18
+ /**
19
+ * A batch response that leaves out a requested URL has no result for it. This
20
+ * is a failure, unlike a page that the provider returned without content.
21
+ */
22
+ export declare function omittedContents(url: string): ContentsAnswer;
18
23
  /** Only adapters that themselves assemble pages in request order use this helper. */
19
24
  export declare function orderedContents(response: ContentsResponse): IndexedContentsResponse;