@framers/agentos-ext-web-search 1.1.0 → 1.2.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 (39) hide show
  1. package/README.md +31 -188
  2. package/dist/index.d.ts +18 -11
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +57 -50
  5. package/dist/index.js.map +1 -1
  6. package/dist/services/searchProvider.d.ts +89 -3
  7. package/dist/services/searchProvider.d.ts.map +1 -1
  8. package/dist/services/searchProvider.js +342 -26
  9. package/dist/services/searchProvider.js.map +1 -1
  10. package/dist/tools/factCheck.d.ts +46 -88
  11. package/dist/tools/factCheck.d.ts.map +1 -1
  12. package/dist/tools/factCheck.js +141 -170
  13. package/dist/tools/factCheck.js.map +1 -1
  14. package/dist/tools/researchAggregator.d.ts +37 -91
  15. package/dist/tools/researchAggregator.d.ts.map +1 -1
  16. package/dist/tools/researchAggregator.js +141 -175
  17. package/dist/tools/researchAggregator.js.map +1 -1
  18. package/dist/tools/webSearch.d.ts +31 -59
  19. package/dist/tools/webSearch.d.ts.map +1 -1
  20. package/dist/tools/webSearch.js +76 -87
  21. package/dist/tools/webSearch.js.map +1 -1
  22. package/dist/types.d.ts.map +1 -1
  23. package/dist/types.js +2 -2
  24. package/dist/types.js.map +1 -1
  25. package/manifest.json +14 -9
  26. package/package.json +26 -16
  27. package/.eslintrc.json +0 -21
  28. package/CHANGELOG.md +0 -16
  29. package/src/index.ts +0 -123
  30. package/src/services/searchProvider.ts +0 -416
  31. package/src/tools/factCheck.ts +0 -318
  32. package/src/tools/researchAggregator.ts +0 -297
  33. package/src/tools/webSearch.ts +0 -128
  34. package/src/types.ts +0 -41
  35. package/test/integration.spec.ts +0 -173
  36. package/test/searchProvider.spec.ts +0 -153
  37. package/test/webSearch.spec.ts +0 -128
  38. package/tsconfig.json +0 -21
  39. package/vitest.config.ts +0 -32
@@ -1,66 +1,38 @@
1
- import { ITool } from '@framers/agentos';
2
- import { SearchProviderService } from '../services/searchProvider';
3
1
  /**
4
- * Web search tool that queries multiple search providers
2
+ * Web Search Tool — multi-provider search via SearchProviderService.
5
3
  *
6
- * @class WebSearchTool
7
- * @implements {ITool}
4
+ * Updated to conform to AgentOS `ITool` (inputSchema + ToolExecutionContext).
8
5
  *
9
- * @example
10
- * ```typescript
11
- * const tool = new WebSearchTool(searchService);
12
- * const result = await tool.execute({
13
- * query: 'AgentOS extensions',
14
- * maxResults: 10,
15
- * provider: 'serper'
16
- * });
17
- * ```
6
+ * @module @framers/agentos-ext-web-search
18
7
  */
19
- export declare class WebSearchTool implements ITool {
20
- private searchService;
21
- readonly id = "webSearch";
22
- readonly name = "Web Search";
23
- readonly description = "Search the web using multiple providers";
24
- /**
25
- * Creates an instance of WebSearchTool
26
- * @param {SearchProviderService} searchService - The search provider service
27
- */
28
- constructor(searchService: SearchProviderService);
29
- /**
30
- * Executes a web search query
31
- *
32
- * @param {Object} input - The search parameters
33
- * @param {string} input.query - The search query string
34
- * @param {number} [input.maxResults=10] - Maximum number of results to return
35
- * @param {string} [input.provider] - Specific provider to use (serper, serpapi, brave, duckduckgo)
36
- * @returns {Promise<{success: boolean, output?: any, error?: string}>} The search results
37
- *
38
- * @throws {Error} Throws if all providers fail
39
- */
40
- execute(input: {
41
- query: string;
42
- maxResults?: number;
43
- provider?: 'serper' | 'serpapi' | 'brave' | 'duckduckgo';
44
- }): Promise<{
45
- success: boolean;
46
- output?: any;
47
- error?: string;
48
- }>;
49
- /**
50
- * Validates input parameters for the web search
51
- *
52
- * @param {any} input - The input to validate
53
- * @returns {{valid: boolean, errors: string[]}} Validation result
54
- */
55
- validate(input: any): {
56
- valid: boolean;
57
- errors: string[];
8
+ import type { ITool, JSONSchemaObject, ToolExecutionContext, ToolExecutionResult } from '@framers/agentos';
9
+ import type { ProviderResponse, MultiSearchResponse } from '../services/searchProvider.js';
10
+ import { SearchProviderService } from '../services/searchProvider.js';
11
+ export interface WebSearchInput {
12
+ query: string;
13
+ maxResults?: number;
14
+ provider?: 'serper' | 'serpapi' | 'brave' | 'searxng' | 'duckduckgo';
15
+ multiSearch?: boolean;
16
+ category?: string;
17
+ }
18
+ export type WebSearchOutput = ProviderResponse | MultiSearchResponse;
19
+ export declare class WebSearchTool implements ITool<WebSearchInput, WebSearchOutput> {
20
+ private readonly searchService;
21
+ private readonly defaultMultiSearch;
22
+ readonly id = "web-search-v1";
23
+ /** Tool call name used by the LLM / ToolExecutor. */
24
+ readonly name = "web_search";
25
+ readonly displayName = "Web Search";
26
+ readonly description = "Search the web using multiple providers (Serper, SerpAPI, Brave, SearXNG, DuckDuckGo fallback). Set multiSearch=true to query ALL providers in parallel for higher-confidence, deduplicated results.";
27
+ readonly category = "research";
28
+ readonly hasSideEffects = false;
29
+ readonly inputSchema: JSONSchemaObject;
30
+ readonly requiredCapabilities: string[];
31
+ constructor(searchService: SearchProviderService, defaultMultiSearch?: boolean);
32
+ execute(input: WebSearchInput, _context: ToolExecutionContext): Promise<ToolExecutionResult<WebSearchOutput>>;
33
+ validateArgs(input: Record<string, any>): {
34
+ isValid: boolean;
35
+ errors?: any[];
58
36
  };
59
- /**
60
- * Returns the JSON schema for the tool's input
61
- *
62
- * @returns {Object} JSON Schema object
63
- */
64
- getSchema(): any;
65
37
  }
66
38
  //# sourceMappingURL=webSearch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webSearch.d.ts","sourceRoot":"","sources":["../../src/tools/webSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAc,YAAW,KAAK;IAS7B,OAAO,CAAC,aAAa;IARjC,SAAgB,EAAE,eAAe;IACjC,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,WAAW,6CAA6C;IAExE;;;OAGG;gBACiB,aAAa,EAAE,qBAAqB;IAExD;;;;;;;;;;OAUG;IACG,OAAO,CAAC,KAAK,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;KAC1D,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAmB/D;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA4B1D;;;;OAIG;IACH,SAAS,IAAI,GAAG;CAwBjB"}
1
+ {"version":3,"file":"webSearch.d.ts","sourceRoot":"","sources":["../../src/tools/webSearch.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAErE,qBAAa,aAAc,YAAW,KAAK,CAAC,cAAc,EAAE,eAAe,CAAC;IAgDxE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAhDrC,SAAgB,EAAE,mBAAmB;IACrC,qDAAqD;IACrD,SAAgB,IAAI,gBAAgB;IACpC,SAAgB,WAAW,gBAAgB;IAC3C,SAAgB,WAAW,0MAC8K;IACzM,SAAgB,QAAQ,cAAc;IACtC,SAAgB,cAAc,SAAS;IAEvC,SAAgB,WAAW,EAAE,gBAAgB,CAiC3C;IAEF,SAAgB,oBAAoB,WAA6B;gBAG9C,aAAa,EAAE,qBAAqB,EACpC,kBAAkB,GAAE,OAAe;IAGhD,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;IA4BnH,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE;CAgC/E"}
@@ -1,70 +1,86 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebSearchTool = void 0;
1
+ // @ts-nocheck
4
2
  /**
5
- * Web search tool that queries multiple search providers
3
+ * Web Search Tool — multi-provider search via SearchProviderService.
6
4
  *
7
- * @class WebSearchTool
8
- * @implements {ITool}
5
+ * Updated to conform to AgentOS `ITool` (inputSchema + ToolExecutionContext).
9
6
  *
10
- * @example
11
- * ```typescript
12
- * const tool = new WebSearchTool(searchService);
13
- * const result = await tool.execute({
14
- * query: 'AgentOS extensions',
15
- * maxResults: 10,
16
- * provider: 'serper'
17
- * });
18
- * ```
7
+ * @module @framers/agentos-ext-web-search
19
8
  */
20
- class WebSearchTool {
9
+ export class WebSearchTool {
21
10
  searchService;
22
- id = 'webSearch';
23
- name = 'Web Search';
24
- description = 'Search the web using multiple providers';
25
- /**
26
- * Creates an instance of WebSearchTool
27
- * @param {SearchProviderService} searchService - The search provider service
28
- */
29
- constructor(searchService) {
11
+ defaultMultiSearch;
12
+ id = 'web-search-v1';
13
+ /** Tool call name used by the LLM / ToolExecutor. */
14
+ name = 'web_search';
15
+ displayName = 'Web Search';
16
+ description = 'Search the web using multiple providers (Serper, SerpAPI, Brave, SearXNG, DuckDuckGo fallback). Set multiSearch=true to query ALL providers in parallel for higher-confidence, deduplicated results.';
17
+ category = 'research';
18
+ hasSideEffects = false;
19
+ inputSchema = {
20
+ type: 'object',
21
+ required: ['query'],
22
+ properties: {
23
+ query: {
24
+ type: 'string',
25
+ description: 'The search query',
26
+ },
27
+ maxResults: {
28
+ type: 'integer',
29
+ description: 'Maximum number of results to return',
30
+ default: 10,
31
+ minimum: 1,
32
+ maximum: 50,
33
+ },
34
+ provider: {
35
+ type: 'string',
36
+ description: 'Specific search provider to use (ignored when multiSearch is true)',
37
+ enum: ['serper', 'serpapi', 'brave', 'searxng', 'duckduckgo'],
38
+ },
39
+ multiSearch: {
40
+ type: 'boolean',
41
+ description: 'When true, searches ALL available providers in parallel and returns merged, deduplicated results ranked by cross-provider agreement. Useful for deep research or fact verification.',
42
+ default: false,
43
+ },
44
+ category: {
45
+ type: 'string',
46
+ description: 'Search category (SearXNG only). Options: general, news, images, videos, it, science, files, social_media',
47
+ enum: ['general', 'news', 'images', 'videos', 'it', 'science', 'files', 'social_media'],
48
+ },
49
+ },
50
+ additionalProperties: false,
51
+ };
52
+ requiredCapabilities = ['capability:web_search'];
53
+ constructor(searchService, defaultMultiSearch = false) {
30
54
  this.searchService = searchService;
55
+ this.defaultMultiSearch = defaultMultiSearch;
31
56
  }
32
- /**
33
- * Executes a web search query
34
- *
35
- * @param {Object} input - The search parameters
36
- * @param {string} input.query - The search query string
37
- * @param {number} [input.maxResults=10] - Maximum number of results to return
38
- * @param {string} [input.provider] - Specific provider to use (serper, serpapi, brave, duckduckgo)
39
- * @returns {Promise<{success: boolean, output?: any, error?: string}>} The search results
40
- *
41
- * @throws {Error} Throws if all providers fail
42
- */
43
- async execute(input) {
57
+ async execute(input, _context) {
58
+ if (!this.searchService) {
59
+ return {
60
+ success: false,
61
+ error: 'Search service not initialized. Try using browser_navigate to search directly, or set a search API key (SERPER_API_KEY, BRAVE_API_KEY).',
62
+ };
63
+ }
44
64
  try {
65
+ const useMultiSearch = input.multiSearch ?? this.defaultMultiSearch;
66
+ if (useMultiSearch && !input.provider) {
67
+ const results = await this.searchService.multiSearch(input.query, {
68
+ maxResults: input.maxResults || 10,
69
+ });
70
+ return { success: true, output: results };
71
+ }
45
72
  const results = await this.searchService.search(input.query, {
46
73
  maxResults: input.maxResults || 10,
47
- provider: input.provider
74
+ provider: input.provider,
75
+ category: input.category,
48
76
  });
49
- return {
50
- success: true,
51
- output: results
52
- };
77
+ return { success: true, output: results };
53
78
  }
54
79
  catch (error) {
55
- return {
56
- success: false,
57
- error: error.message
58
- };
80
+ return { success: false, error: error?.message || String(error) };
59
81
  }
60
82
  }
61
- /**
62
- * Validates input parameters for the web search
63
- *
64
- * @param {any} input - The input to validate
65
- * @returns {{valid: boolean, errors: string[]}} Validation result
66
- */
67
- validate(input) {
83
+ validateArgs(input) {
68
84
  const errors = [];
69
85
  if (!input.query) {
70
86
  errors.push('Query is required');
@@ -78,45 +94,18 @@ class WebSearchTool {
78
94
  }
79
95
  }
80
96
  if (input.provider !== undefined) {
81
- const validProviders = ['serper', 'serpapi', 'brave', 'duckduckgo'];
97
+ const validProviders = ['serper', 'serpapi', 'brave', 'searxng', 'duckduckgo'];
82
98
  if (!validProviders.includes(input.provider)) {
83
99
  errors.push('Invalid provider');
84
100
  }
85
101
  }
86
- return {
87
- valid: errors.length === 0,
88
- errors
89
- };
90
- }
91
- /**
92
- * Returns the JSON schema for the tool's input
93
- *
94
- * @returns {Object} JSON Schema object
95
- */
96
- getSchema() {
97
- return {
98
- type: 'object',
99
- required: ['query'],
100
- properties: {
101
- query: {
102
- type: 'string',
103
- description: 'The search query'
104
- },
105
- maxResults: {
106
- type: 'number',
107
- description: 'Maximum number of results to return',
108
- default: 10,
109
- minimum: 1,
110
- maximum: 50
111
- },
112
- provider: {
113
- type: 'string',
114
- description: 'Specific search provider to use',
115
- enum: ['serper', 'serpapi', 'brave', 'duckduckgo']
116
- }
117
- }
118
- };
102
+ if (input.multiSearch !== undefined && typeof input.multiSearch !== 'boolean') {
103
+ errors.push('multiSearch must be a boolean');
104
+ }
105
+ if (input.multiSearch && input.provider) {
106
+ errors.push('Cannot specify both multiSearch and a specific provider');
107
+ }
108
+ return errors.length === 0 ? { isValid: true } : { isValid: false, errors };
119
109
  }
120
110
  }
121
- exports.WebSearchTool = WebSearchTool;
122
111
  //# sourceMappingURL=webSearch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../src/tools/webSearch.ts"],"names":[],"mappings":";;;AAGA;;;;;;;;;;;;;;;GAeG;AACH,MAAa,aAAa;IASJ;IARJ,EAAE,GAAG,WAAW,CAAC;IACjB,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAAG,yCAAyC,CAAC;IAExE;;;OAGG;IACH,YAAoB,aAAoC;QAApC,kBAAa,GAAb,aAAa,CAAuB;IAAG,CAAC;IAE5D;;;;;;;;;;OAUG;IACH,KAAK,CAAC,OAAO,CAAC,KAIb;QACC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;gBAC3D,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;gBAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,OAAO;aAChB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,CAAC,OAAO;aACrB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAU;QACjB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YACpE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kBAAkB;iBAChC;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qCAAqC;oBAClD,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACZ;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iCAAiC;oBAC9C,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC;iBACnD;aACF;SACF,CAAC;IACJ,CAAC;CACF;AA5GD,sCA4GC"}
1
+ {"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../src/tools/webSearch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB,EAAE,CAAC;IACJ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB,EAAE,CAAC;IACJ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB,EAAE,CAAC;IACJ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB,EAAE,CAAC;IACJ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
package/dist/types.js CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";
1
+ // @ts-nocheck
2
2
  /**
3
3
  * @file Type definitions for search extension
4
4
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
5
+ export {};
6
6
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG"}
package/manifest.json CHANGED
@@ -2,39 +2,39 @@
2
2
  "$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
3
3
  "id": "com.framers.research.web-search",
4
4
  "name": "Web Search Extension",
5
- "version": "1.0.0",
6
- "description": "Professional web search, research aggregation, and fact-checking capabilities for AgentOS",
5
+ "version": "1.2.0",
6
+ "description": "Multi-provider web search with Firecrawl, Tavily, Serper, Brave — RRF fusion, semantic dedup, Cohere/LLM neural reranking, research aggregation, and fact-checking for AgentOS",
7
7
  "author": {
8
8
  "name": "Frame.dev",
9
9
  "email": "support@frame.dev",
10
- "url": "https://github.com/framersai"
10
+ "url": "https://github.com/framerslab"
11
11
  },
12
12
  "license": "MIT",
13
- "keywords": ["search", "web", "research", "fact-check", "serper", "serpapi", "brave"],
13
+ "keywords": ["search", "web", "research", "fact-check", "firecrawl", "tavily", "serper", "serpapi", "brave", "searxng", "cohere", "reranking", "rrf"],
14
14
  "agentosVersion": "^2.0.0",
15
15
  "categories": ["productivity", "research"],
16
16
  "repository": {
17
17
  "type": "git",
18
- "url": "https://github.com/framersai/agentos-extensions"
18
+ "url": "https://github.com/framerslab/agentos-extensions"
19
19
  },
20
20
  "extensions": [
21
21
  {
22
22
  "kind": "tool",
23
- "id": "webSearch",
23
+ "id": "web_search",
24
24
  "displayName": "Web Search",
25
25
  "description": "Search the web for information",
26
26
  "entry": "./dist/tools/webSearch.js"
27
27
  },
28
28
  {
29
29
  "kind": "tool",
30
- "id": "researchAggregator",
30
+ "id": "research_aggregate",
31
31
  "displayName": "Research Aggregator",
32
32
  "description": "Aggregate research from multiple searches",
33
33
  "entry": "./dist/tools/researchAggregator.js"
34
34
  },
35
35
  {
36
36
  "kind": "tool",
37
- "id": "factCheck",
37
+ "id": "fact_check",
38
38
  "displayName": "Fact Checker",
39
39
  "description": "Verify facts across multiple sources",
40
40
  "entry": "./dist/tools/factCheck.js"
@@ -44,7 +44,7 @@
44
44
  "properties": {
45
45
  "search.provider": {
46
46
  "type": "string",
47
- "enum": ["serper", "serpapi", "brave", "duckduckgo"],
47
+ "enum": ["serper", "serpapi", "brave", "searxng", "duckduckgo"],
48
48
  "default": "duckduckgo",
49
49
  "description": "Search API provider to use"
50
50
  },
@@ -59,6 +59,11 @@
59
59
  "minimum": 1,
60
60
  "maximum": 20,
61
61
  "description": "Maximum requests per second"
62
+ },
63
+ "search.multiSearch": {
64
+ "type": "boolean",
65
+ "default": false,
66
+ "description": "Default multi-provider parallel search for all search tools. When enabled, queries fan out to ALL available providers, results are deduplicated and reranked by cross-provider agreement."
62
67
  }
63
68
  }
64
69
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framers/agentos-ext-web-search",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Web search, research aggregation, and fact-checking tools for AgentOS",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,16 +14,6 @@
14
14
  "./manifest.json": "./manifest.json",
15
15
  "./package.json": "./package.json"
16
16
  },
17
- "scripts": {
18
- "build": "tsc",
19
- "test": "vitest run",
20
- "test:watch": "vitest",
21
- "test:coverage": "vitest run --coverage",
22
- "lint": "eslint src --ext .ts",
23
- "typecheck": "tsc --noEmit",
24
- "docs": "typedoc --out docs src/index.ts",
25
- "clean": "rimraf dist"
26
- },
27
17
  "keywords": [
28
18
  "agentos",
29
19
  "extension",
@@ -46,20 +36,19 @@
46
36
  "license": "MIT",
47
37
  "repository": {
48
38
  "type": "git",
49
- "url": "https://github.com/framersai/agentos-extensions.git",
39
+ "url": "git+https://github.com/framerslab/agentos-extensions.git",
50
40
  "directory": "registry/curated/research/web-search"
51
41
  },
52
42
  "publishConfig": {
53
43
  "access": "public"
54
44
  },
55
45
  "peerDependencies": {
56
- "@framers/agentos": "^0.1.0"
46
+ "@framers/agentos": "^0.10.28"
57
47
  },
58
48
  "dependencies": {
59
49
  "axios": "^1.7.7"
60
50
  },
61
51
  "devDependencies": {
62
- "@framers/agentos": "^0.1.0",
63
52
  "@types/node": "^20.12.12",
64
53
  "@typescript-eslint/eslint-plugin": "^7.0.0",
65
54
  "@typescript-eslint/parser": "^7.0.0",
@@ -68,6 +57,27 @@
68
57
  "rimraf": "^5.0.7",
69
58
  "typedoc": "^0.25.13",
70
59
  "typescript": "^5.4.5",
71
- "vitest": "^1.6.0"
60
+ "vitest": "^1.6.0",
61
+ "@framers/agentos": "^0.10.28"
62
+ },
63
+ "homepage": "https://github.com/framerslab/agentos-extensions/tree/master/registry/curated/research/web-search#readme",
64
+ "bugs": {
65
+ "url": "https://github.com/framerslab/agentos-extensions/issues"
66
+ },
67
+ "files": [
68
+ "dist",
69
+ "manifest.json",
70
+ "README.md",
71
+ "LICENSE"
72
+ ],
73
+ "scripts": {
74
+ "build": "tsc",
75
+ "test": "vitest run --passWithNoTests",
76
+ "test:watch": "vitest",
77
+ "test:coverage": "vitest run --coverage",
78
+ "lint": "eslint src --ext .ts",
79
+ "typecheck": "tsc --noEmit",
80
+ "docs": "typedoc --out docs src/index.ts",
81
+ "clean": "rimraf dist"
72
82
  }
73
- }
83
+ }
package/.eslintrc.json DELETED
@@ -1,21 +0,0 @@
1
- {
2
- "root": true,
3
- "parser": "@typescript-eslint/parser",
4
- "plugins": ["@typescript-eslint"],
5
- "extends": [
6
- "eslint:recommended",
7
- "plugin:@typescript-eslint/recommended"
8
- ],
9
- "parserOptions": {
10
- "ecmaVersion": 2022,
11
- "sourceType": "module",
12
- "project": "./tsconfig.json"
13
- },
14
- "rules": {
15
- "@typescript-eslint/explicit-function-return-type": "off",
16
- "@typescript-eslint/no-explicit-any": "warn",
17
- "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
18
- "no-console": ["warn", { "allow": ["warn", "error"] }]
19
- },
20
- "ignorePatterns": ["dist", "node_modules", "coverage", "*.js"]
21
- }
package/CHANGELOG.md DELETED
@@ -1,16 +0,0 @@
1
- # @framers/agentos-ext-web-search
2
-
3
- ## 1.1.0
4
-
5
- ### Minor Changes
6
-
7
- - [`e6a2eb6`](https://github.com/framersai/agentos-extensions/commit/e6a2eb61145c5715df63668b795fe90720a3c7c1) Thanks [@jddunn](https://github.com/jddunn)! - Initial release of AgentOS extension packages.
8
-
9
- - Auth: JWT authentication and subscription management
10
- - Anchor Providers: Solana on-chain provenance anchoring
11
- - Wunderland Tip Ingestion: Tip content processing pipeline
12
- - Web Search: Search, research aggregation, and fact-checking
13
- - Web Browser: Browser automation and content extraction
14
- - Telegram Integration: Telegram Bot API integration
15
- - Telegram Bot: Telegram bot communications handler
16
- - CLI Executor: Shell command execution and file management
package/src/index.ts DELETED
@@ -1,123 +0,0 @@
1
- /**
2
- * AgentOS Web Search Extension
3
- *
4
- * Provides web search capabilities through multiple providers with automatic fallback.
5
- *
6
- * @module @framers/agentos-ext-web-search
7
- * @version 1.0.0
8
- * @license MIT
9
- */
10
-
11
- import { ExtensionContext, ExtensionPack } from '@framers/agentos';
12
- import { WebSearchTool } from './tools/webSearch';
13
- import { ResearchAggregatorTool } from './tools/researchAggregator';
14
- import { FactCheckTool } from './tools/factCheck';
15
- import { SearchProviderService } from './services/searchProvider';
16
-
17
- /**
18
- * Extension configuration options
19
- */
20
- export interface WebSearchExtensionOptions {
21
- /** Serper.dev API key */
22
- serperApiKey?: string;
23
- /** SerpAPI API key */
24
- serpApiKey?: string;
25
- /** Brave Search API key */
26
- braveApiKey?: string;
27
- /** Default maximum results for searches */
28
- defaultMaxResults?: number;
29
- /** Rate limiting configuration */
30
- rateLimit?: {
31
- maxRequests: number;
32
- windowMs: number;
33
- };
34
- /** Extension priority in the stack */
35
- priority?: number;
36
- }
37
-
38
- /**
39
- * Creates the web search extension pack
40
- *
41
- * @param {ExtensionContext} context - The extension context
42
- * @returns {ExtensionPack} The configured extension pack
43
- *
44
- * @example
45
- * ```typescript
46
- * import { createExtensionPack } from '@framers/agentos-ext-web-search';
47
- *
48
- * const pack = createExtensionPack({
49
- * options: {
50
- * serperApiKey: process.env.SERPER_API_KEY,
51
- * defaultMaxResults: 10
52
- * },
53
- * logger: console
54
- * });
55
- * ```
56
- */
57
- export function createExtensionPack(context: ExtensionContext): ExtensionPack {
58
- const options = context.options as WebSearchExtensionOptions || {};
59
-
60
- // Initialize search service with configuration
61
- const searchService = new SearchProviderService({
62
- serperApiKey: options.serperApiKey,
63
- serpApiKey: options.serpApiKey,
64
- braveApiKey: options.braveApiKey,
65
- rateLimit: options.rateLimit
66
- });
67
-
68
- // Create tool instances
69
- const webSearchTool = new WebSearchTool(searchService);
70
- const researchAggregator = new ResearchAggregatorTool(searchService);
71
- const factCheckTool = new FactCheckTool(searchService);
72
-
73
- return {
74
- name: '@framers/agentos-ext-web-search',
75
- version: '1.0.0',
76
- descriptors: [
77
- {
78
- id: 'webSearch',
79
- kind: 'tool',
80
- priority: options.priority || 50,
81
- payload: webSearchTool
82
- },
83
- {
84
- id: 'researchAggregator',
85
- kind: 'tool',
86
- priority: options.priority || 50,
87
- payload: researchAggregator
88
- },
89
- {
90
- id: 'factCheck',
91
- kind: 'tool',
92
- priority: options.priority || 50,
93
- payload: factCheckTool
94
- }
95
- ],
96
- /**
97
- * Called when extension is activated
98
- */
99
- onActivate: async () => {
100
- if (context.onActivate) {
101
- await context.onActivate();
102
- }
103
- context.logger?.info('Web Search Extension activated');
104
- },
105
- /**
106
- * Called when extension is deactivated
107
- */
108
- onDeactivate: async () => {
109
- if (context.onDeactivate) {
110
- await context.onDeactivate();
111
- }
112
- context.logger?.info('Web Search Extension deactivated');
113
- }
114
- };
115
- }
116
-
117
- // Export types for consumers
118
- export { WebSearchTool, ResearchAggregatorTool, FactCheckTool };
119
- export { SearchProviderService, SearchResult, ProviderResponse } from './services/searchProvider';
120
- export type { SearchProviderConfig } from './services/searchProvider';
121
-
122
- // Default export for convenience
123
- export default createExtensionPack;